diff --git a/cypress/run.mjs b/cypress/run.mjs
index 9e77c6786d9d..dfc8235840b4 100644
--- a/cypress/run.mjs
+++ b/cypress/run.mjs
@@ -2,10 +2,17 @@ import execa from 'execa';
import { globby } from 'globby';
async function runCypress() {
+ const args = ['run', '--browser', 'chrome', '--headless'];
+
+ const specs = await globby(['cypress/e2e/*spec*.js']);
+ if (specs.length === 0) {
+ console.log('No test files found in cypress/e2e/*spec*.js');
+ process.exit(1);
+ }
+
if (process.env.IS_FORK === 'true') {
const machineIndex = parseInt(process.env.MACHINE_INDEX);
const machineCount = parseInt(process.env.MACHINE_COUNT);
- const specs = await globby(['cypress/integration/*spec*.js']);
const specsPerMachine = Math.floor(specs.length / machineCount);
const start = (machineIndex - 1) * specsPerMachine;
const machineSpecs =
@@ -13,29 +20,22 @@ async function runCypress() {
? specs.slice(start)
: specs.slice(start, start + specsPerMachine);
- await execa(
- 'cypress',
- ['run', '--browser', 'chrome', '--headless', '--spec', machineSpecs.join(',')],
- { stdio: 'inherit', preferLocal: true },
- );
+ args.push('--spec', machineSpecs.join(','));
} else {
- await execa(
- 'cypress',
- [
- 'run',
- '--browser',
- 'chrome',
- '--headless',
- '--record',
- '--parallel',
- '--ci-build-id',
- process.env.GITHUB_SHA,
- '--group',
- 'GitHub CI',
- ],
- { stdio: 'inherit', preferLocal: true },
+ args.push(
+ '--record',
+ '--parallel',
+ '--ci-build-id',
+ process.env.GITHUB_SHA,
+ '--group',
+ 'GitHub CI',
+ '--spec',
+ specs.join(','),
);
}
+
+ console.log('Running Cypress with args:', args.join(' '));
+ await execa('cypress', args, { stdio: 'inherit', preferLocal: true });
}
runCypress();
diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js
index 6504113e81ee..80fcca6176c2 100644
--- a/cypress/support/e2e.js
+++ b/cypress/support/e2e.js
@@ -26,3 +26,9 @@ addMatchImageSnapshotCommand({
Cypress.on('uncaught:exception', () => false);
import './commands';
+
+afterEach(function () {
+ if (this.currentTest.state === 'failed') {
+ Cypress.runner.stop();
+ }
+});
diff --git a/cypress/utils/steps.js b/cypress/utils/steps.js
index 464365f802b6..e392ed8c8acb 100644
--- a/cypress/utils/steps.js
+++ b/cypress/utils/steps.js
@@ -69,6 +69,7 @@ function assertColorOn(cssProperty, color, opts) {
} else {
(opts.scope ? opts.scope : cy)
.contains('label', opts.label)
+ .parents()
.next()
.should(assertion);
}
@@ -518,23 +519,31 @@ function validateNestedListFields() {
cy.contains('button', 'hotel locations').click();
cy.contains('button', 'cities').click();
cy.contains('label', 'City')
+ .parents()
.next()
+ .first()
.type('Washington DC');
cy.contains('label', 'Number of Hotels in City')
+ .parents()
.next()
+ .first()
.type('5');
cy.contains('button', 'city locations').click();
// add second city list item
cy.contains('button', 'cities').click();
cy.contains('label', 'Cities')
+ .parents()
.next()
+ .first()
.find('div[class*=SortableListItem]')
.eq(2)
.as('secondCitiesListControl');
cy.get('@secondCitiesListControl')
.contains('label', 'City')
+ .parents()
.next()
+ .first()
.type('Boston');
cy.get('@secondCitiesListControl')
.contains('button', 'city locations')
@@ -561,21 +570,25 @@ function validateNestedListFields() {
// list control aliases
cy.contains('label', 'Hotel Locations')
+ .parents()
.next()
.find('div[class*=SortableListItem]')
.first()
.as('hotelLocationsListControl');
cy.contains('label', 'Cities')
+ .parents()
.next()
.find('div[class*=SortableListItem]')
.eq(0)
.as('firstCitiesListControl');
cy.contains('label', 'City Locations')
+ .parents()
.next()
.find('div[class*=SortableListItem]')
.eq(0)
.as('firstCityLocationsListControl');
cy.contains('label', 'Cities')
+ .parents()
.next()
.find('div[class*=SortableListItem]')
.eq(3)
@@ -589,7 +602,9 @@ function validateNestedListFields() {
assertListControlErrorStatus([colorError, colorError], '@secondCityLocationsListControl');
cy.contains('label', 'Hotel Name')
+ .parents()
.next()
+ .first()
.type('The Ritz Carlton');
cy.contains('button', 'Save').click();
assertNotification(notifications.error.missingField);
@@ -598,12 +613,20 @@ function validateNestedListFields() {
// fill out rest of form and save
cy.get('@secondCitiesListControl')
.contains('label', 'Number of Hotels in City')
+ .parents()
+ .next()
+ .first()
.type(3);
cy.get('@secondCitiesListControl')
.contains('label', 'Hotel Name')
+ .parents()
+ .next()
+ .first()
.type('Grand Hyatt');
cy.contains('label', 'Country')
+ .parents()
.next()
+ .first()
.type('United States');
flushClockAndSave();
assertNotification(notifications.saved);
diff --git a/nx.json b/nx.json
index 735930366acb..21efa37fa51c 100644
--- a/nx.json
+++ b/nx.json
@@ -1,10 +1,12 @@
{
"targetDefaults": {
"build:esm": {
- "cache": true
+ "cache": true,
+ "dependsOn": ["^build:esm"]
},
"build": {
- "cache": true
+ "cache": true,
+ "dependsOn": ["^build"]
}
},
"namedInputs": {
diff --git a/package-lock.json b/package-lock.json
index 6a6bd37b7b83..9e1197d65412 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7186,11 +7186,6 @@
"redux": "^4.0.5"
}
},
- "node_modules/@types/retry": {
- "version": "0.12.0",
- "dev": true,
- "license": "MIT"
- },
"node_modules/@types/scheduler": {
"version": "0.16.5",
"license": "MIT"
@@ -10264,9 +10259,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001646",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz",
- "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==",
+ "version": "1.0.30001647",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001647.tgz",
+ "integrity": "sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==",
"dev": true,
"funding": [
{
@@ -25432,6 +25427,12 @@
"node": ">=8"
}
},
+ "node_modules/p-retry/node_modules/@types/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
+ "dev": true
+ },
"node_modules/p-timeout": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
@@ -33156,12 +33157,12 @@
}
},
"packages/decap-cms": {
- "version": "3.3.3",
+ "version": "3.5.0",
"license": "MIT",
"dependencies": {
"codemirror": "^5.46.0",
"create-react-class": "^15.7.0",
- "decap-cms-app": "^3.3.3",
+ "decap-cms-app": "^3.5.0",
"decap-cms-media-library-cloudinary": "^3.0.3",
"decap-cms-media-library-uploadcare": "^3.0.2",
"file-loader": "^6.2.0",
@@ -33171,7 +33172,7 @@
}
},
"packages/decap-cms-app": {
- "version": "3.3.3",
+ "version": "3.5.0",
"license": "MIT",
"dependencies": {
"@emotion/react": "^11.11.1",
@@ -33182,16 +33183,17 @@
"decap-cms-backend-azure": "^3.1.3",
"decap-cms-backend-bitbucket": "^3.1.4",
"decap-cms-backend-git-gateway": "^3.2.2",
+ "decap-cms-backend-gitea": "^3.1.5",
"decap-cms-backend-github": "^3.2.2",
"decap-cms-backend-gitlab": "^3.2.2",
"decap-cms-backend-proxy": "^3.1.4",
"decap-cms-backend-test": "^3.1.3",
- "decap-cms-core": "^3.4.2",
+ "decap-cms-core": "^3.5.0",
"decap-cms-editor-component-image": "^3.1.3",
"decap-cms-lib-auth": "^3.0.5",
"decap-cms-lib-util": "^3.1.0",
- "decap-cms-lib-widgets": "^3.0.2",
- "decap-cms-locales": "^3.2.0",
+ "decap-cms-lib-widgets": "^3.1.0",
+ "decap-cms-locales": "^3.3.0",
"decap-cms-ui-default": "^3.1.4",
"decap-cms-widget-boolean": "^3.1.3",
"decap-cms-widget-code": "^3.1.4",
@@ -33201,9 +33203,9 @@
"decap-cms-widget-image": "^3.1.3",
"decap-cms-widget-list": "^3.2.2",
"decap-cms-widget-map": "^3.1.4",
- "decap-cms-widget-markdown": "^3.1.6",
+ "decap-cms-widget-markdown": "^3.2.0",
"decap-cms-widget-number": "^3.1.3",
- "decap-cms-widget-object": "^3.1.4",
+ "decap-cms-widget-object": "^3.2.0",
"decap-cms-widget-relation": "^3.3.2",
"decap-cms-widget-select": "^3.2.2",
"decap-cms-widget-string": "^3.1.3",
@@ -33412,7 +33414,7 @@
}
},
"packages/decap-cms-core": {
- "version": "3.4.2",
+ "version": "3.5.0",
"license": "MIT",
"dependencies": {
"@iarna/toml": "2.2.5",
@@ -33573,7 +33575,7 @@
}
},
"packages/decap-cms-lib-widgets": {
- "version": "3.0.2",
+ "version": "3.1.0",
"license": "MIT",
"dependencies": {
"dayjs": "^1.11.10"
@@ -33584,7 +33586,7 @@
}
},
"packages/decap-cms-locales": {
- "version": "3.2.0",
+ "version": "3.3.0",
"license": "MIT"
},
"packages/decap-cms-media-library-cloudinary": {
@@ -33741,7 +33743,7 @@
}
},
"packages/decap-cms-widget-markdown": {
- "version": "3.1.6",
+ "version": "3.2.0",
"license": "MIT",
"dependencies": {
"dompurify": "^2.2.6",
@@ -33886,7 +33888,7 @@
}
},
"packages/decap-cms-widget-object": {
- "version": "3.1.4",
+ "version": "3.2.0",
"license": "MIT",
"peerDependencies": {
"@emotion/react": "^11.11.1",
diff --git a/package.json b/package.json
index d3512378aa40..4c8a1300b45a 100644
--- a/package.json
+++ b/package.json
@@ -8,9 +8,10 @@
"build-preview": "npm run build && nx run decap-cms:build-preview --output-style=stream",
"type-check": "tsc --noEmit",
"type-check:watch": "npm run type-check -- --watch",
- "clean": "rimraf \"packages/*/dist\" dev-test/dist \"packages/*/node_modules\"",
+ "clean": "rimraf \"packages/*/dist\" dev-test/dist \"packages/*/node_modules\" \".nx/cache\"",
"reset": "npm run clean",
"test": "npm run lint && npm run type-check && npm run test:unit",
+ "test:all": "npm run test && npm run test:e2e",
"test:ci": "npm run lint-quiet && npm run type-check && npm run test:unit",
"test:unit": "cross-env NODE_ENV=test jest --no-cache",
"test:e2e": "npm run build:demo && npm run test:e2e:run",
diff --git a/packages/decap-cms-app/CHANGELOG.md b/packages/decap-cms-app/CHANGELOG.md
index d78b210eb4c3..181afcbb5112 100644
--- a/packages/decap-cms-app/CHANGELOG.md
+++ b/packages/decap-cms-app/CHANGELOG.md
@@ -3,6 +3,16 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [3.5.0](https://github.com/decaporg/decap-cms/compare/decap-cms-app@3.4.0...decap-cms-app@3.5.0) (2025-01-15)
+
+### Bug Fixes
+
+- **build:** Fix ESM output ([#7357](https://github.com/decaporg/decap-cms/issues/7357)) ([#7358](https://github.com/decaporg/decap-cms/issues/7358)) ([6cd7cb3](https://github.com/decaporg/decap-cms/commit/6cd7cb3b41718e20b44acaae1e2ffd73129520c2))
+
+# [3.4.0](https://github.com/decaporg/decap-cms/compare/decap-cms-app@3.3.3...decap-cms-app@3.4.0) (2024-11-12)
+
+**Note:** Version bump only for package decap-cms-app
+
## [3.3.3](https://github.com/decaporg/decap-cms/compare/decap-cms-app@3.3.2...decap-cms-app@3.3.3) (2024-08-30)
**Note:** Version bump only for package decap-cms-app
diff --git a/packages/decap-cms-app/package.json b/packages/decap-cms-app/package.json
index a0398e7fabf2..52fa65eca3c2 100644
--- a/packages/decap-cms-app/package.json
+++ b/packages/decap-cms-app/package.json
@@ -1,10 +1,11 @@
{
"name": "decap-cms-app",
"description": "An extensible, open source, Git-based, React CMS for static sites. Reusable congiuration with React as peer.",
- "version": "3.3.3",
+ "version": "3.5.0",
"homepage": "https://www.decapcms.org",
"repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-app",
"bugs": "https://github.com/decaporg/decap-cms/issues",
+ "module": "dist/esm/index.js",
"main": "dist/decap-cms-app.js",
"files": [
"src/",
@@ -34,16 +35,17 @@
"decap-cms-backend-azure": "^3.1.3",
"decap-cms-backend-bitbucket": "^3.1.4",
"decap-cms-backend-git-gateway": "^3.2.2",
+ "decap-cms-backend-gitea": "^3.1.5",
"decap-cms-backend-github": "^3.2.2",
"decap-cms-backend-gitlab": "^3.2.2",
"decap-cms-backend-proxy": "^3.1.4",
"decap-cms-backend-test": "^3.1.3",
- "decap-cms-core": "^3.4.2",
+ "decap-cms-core": "^3.5.0",
"decap-cms-editor-component-image": "^3.1.3",
"decap-cms-lib-auth": "^3.0.5",
"decap-cms-lib-util": "^3.1.0",
- "decap-cms-lib-widgets": "^3.0.2",
- "decap-cms-locales": "^3.2.0",
+ "decap-cms-lib-widgets": "^3.1.0",
+ "decap-cms-locales": "^3.3.0",
"decap-cms-ui-default": "^3.1.4",
"decap-cms-widget-boolean": "^3.1.3",
"decap-cms-widget-code": "^3.1.4",
@@ -53,9 +55,9 @@
"decap-cms-widget-image": "^3.1.3",
"decap-cms-widget-list": "^3.2.2",
"decap-cms-widget-map": "^3.1.4",
- "decap-cms-widget-markdown": "^3.1.6",
+ "decap-cms-widget-markdown": "^3.2.0",
"decap-cms-widget-number": "^3.1.3",
- "decap-cms-widget-object": "^3.1.4",
+ "decap-cms-widget-object": "^3.2.0",
"decap-cms-widget-relation": "^3.3.2",
"decap-cms-widget-select": "^3.2.2",
"decap-cms-widget-string": "^3.1.3",
diff --git a/packages/decap-cms-core/CHANGELOG.md b/packages/decap-cms-core/CHANGELOG.md
index a8b83c650e17..9a4a6376dace 100644
--- a/packages/decap-cms-core/CHANGELOG.md
+++ b/packages/decap-cms-core/CHANGELOG.md
@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+# [3.5.0](https://github.com/decaporg/decap-cms/compare/decap-cms-core@3.4.2...decap-cms-core@3.5.0) (2024-11-12)
+
+### Bug Fixes
+
+- clear field error in Editor after the field value is changed ([#7216](https://github.com/decaporg/decap-cms/issues/7216)) ([d9655ea](https://github.com/decaporg/decap-cms/commit/d9655eae8cc47fb3a63815f75321710b5192c6ef))
+
## [3.4.2](https://github.com/decaporg/decap-cms/compare/decap-cms-core@3.4.1...decap-cms-core@3.4.2) (2024-08-13)
### Reverts
diff --git a/packages/decap-cms-core/package.json b/packages/decap-cms-core/package.json
index 999ba27cc22f..59654f5a0fe4 100644
--- a/packages/decap-cms-core/package.json
+++ b/packages/decap-cms-core/package.json
@@ -1,7 +1,7 @@
{
"name": "decap-cms-core",
"description": "Decap CMS core application, see decap-cms package for the main distribution.",
- "version": "3.4.2",
+ "version": "3.5.0",
"repository": "https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core",
"bugs": "https://github.com/decaporg/decap-cms/issues",
"module": "dist/esm/index.js",
diff --git a/packages/decap-cms-core/src/actions/entries.ts b/packages/decap-cms-core/src/actions/entries.ts
index d7971b854d06..e8529b7c20b0 100644
--- a/packages/decap-cms-core/src/actions/entries.ts
+++ b/packages/decap-cms-core/src/actions/entries.ts
@@ -431,8 +431,11 @@ export function changeDraftFieldValidation(
};
}
-export function clearFieldErrors() {
- return { type: DRAFT_CLEAR_ERRORS };
+export function clearFieldErrors(uniqueFieldId: string) {
+ return {
+ type: DRAFT_CLEAR_ERRORS,
+ payload: { uniqueFieldId },
+ };
}
export function localBackupRetrieved(entry: EntryValue) {
diff --git a/packages/decap-cms-core/src/components/Collection/Entries/EntriesCollection.js b/packages/decap-cms-core/src/components/Collection/Entries/EntriesCollection.js
index 830f7911de8c..55aa3c2bf61d 100644
--- a/packages/decap-cms-core/src/components/Collection/Entries/EntriesCollection.js
+++ b/packages/decap-cms-core/src/components/Collection/Entries/EntriesCollection.js
@@ -119,20 +119,19 @@ export class EntriesCollection extends React.Component {
export function filterNestedEntries(path, collectionFolder, entries) {
const filtered = entries.filter(e => {
- const entryPath = e.get('path').slice(collectionFolder.length + 1);
+ let entryPath = e.get('path').slice(collectionFolder.length + 1);
if (!entryPath.startsWith(path)) {
return false;
}
- // only show immediate children
+ // for subdirectories, trim off the parent folder corresponding to
+ // this nested collection entry
if (path) {
- // non root path
- const trimmed = entryPath.slice(path.length + 1);
- return trimmed.split('/').length === 2;
- } else {
- // root path
- return entryPath.split('/').length <= 2;
+ entryPath = entryPath.slice(path.length + 1);
}
+
+ // only show immediate children
+ return !entryPath.includes('/');
});
return filtered;
}
diff --git a/packages/decap-cms-core/src/components/Collection/Entries/__tests__/EntriesCollection.spec.js b/packages/decap-cms-core/src/components/Collection/Entries/__tests__/EntriesCollection.spec.js
index 5afbd19b19e2..174bc779370b 100644
--- a/packages/decap-cms-core/src/components/Collection/Entries/__tests__/EntriesCollection.spec.js
+++ b/packages/decap-cms-core/src/components/Collection/Entries/__tests__/EntriesCollection.spec.js
@@ -45,11 +45,11 @@ describe('filterNestedEntries', () => {
];
const entries = fromJS(entriesArray);
expect(filterNestedEntries('dir3', 'src/pages', entries).toJS()).toEqual([
- { slug: 'dir3/dir4/index', path: 'src/pages/dir3/dir4/index.md', data: { title: 'File 4' } },
+ { slug: 'dir3/index', path: 'src/pages/dir3/index.md', data: { title: 'File 3' } },
]);
});
- it('should return immediate children and root for root path', () => {
+ it('should return only immediate children for root path', () => {
const entriesArray = [
{ slug: 'index', path: 'src/pages/index.md', data: { title: 'Root' } },
{ slug: 'dir1/index', path: 'src/pages/dir1/index.md', data: { title: 'File 1' } },
@@ -60,8 +60,6 @@ describe('filterNestedEntries', () => {
const entries = fromJS(entriesArray);
expect(filterNestedEntries('', 'src/pages', entries).toJS()).toEqual([
{ slug: 'index', path: 'src/pages/index.md', data: { title: 'Root' } },
- { slug: 'dir1/index', path: 'src/pages/dir1/index.md', data: { title: 'File 1' } },
- { slug: 'dir3/index', path: 'src/pages/dir3/index.md', data: { title: 'File 3' } },
]);
});
});
@@ -126,7 +124,7 @@ describe('EntriesCollection', () => {
expect(asFragment()).toMatchSnapshot();
});
- it('should render apply filter term for nested collections', () => {
+ it('should render with applied filter term for nested collections', () => {
const entriesArray = [
{ slug: 'index', path: 'src/pages/index.md', data: { title: 'Root' } },
{ slug: 'dir1/index', path: 'src/pages/dir1/index.md', data: { title: 'File 1' } },
diff --git a/packages/decap-cms-core/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap b/packages/decap-cms-core/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap
index ccc4d5911e89..c833607a1fff 100644
--- a/packages/decap-cms-core/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap
+++ b/packages/decap-cms-core/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap
@@ -1,36 +1,36 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
-exports[`EntriesCollection should render apply filter term for nested collections 1`] = `
+exports[`EntriesCollection should render connected component 1`] = `
`;
-exports[`EntriesCollection should render connected component 1`] = `
+exports[`EntriesCollection should render show only immediate children for nested collection 1`] = `
`;
-exports[`EntriesCollection should render show only immediate children for nested collection 1`] = `
+exports[`EntriesCollection should render with applied filter term for nested collections 1`] = `
diff --git a/packages/decap-cms-core/src/components/Collection/NestedCollection.js b/packages/decap-cms-core/src/components/Collection/NestedCollection.js
index 0cc9a068c870..d2ff36c5052e 100644
--- a/packages/decap-cms-core/src/components/Collection/NestedCollection.js
+++ b/packages/decap-cms-core/src/components/Collection/NestedCollection.js
@@ -80,7 +80,7 @@ function TreeNode(props) {
const sortedData = sortBy(treeData, getNodeTitle);
return sortedData.map(node => {
- const leaf = node.children.length <= 1 && !node.children[0]?.isDir && depth > 0;
+ const leaf = node.children.length === 0 && depth > 0;
if (leaf) {
return null;
}
@@ -90,7 +90,7 @@ function TreeNode(props) {
}
const title = getNodeTitle(node);
- const hasChildren = depth === 0 || node.children.some(c => c.children.some(c => c.isDir));
+ const hasChildren = depth === 0 || node.children.some(c => c.isDir);
return (
diff --git a/packages/decap-cms-core/src/components/Collection/__tests__/__snapshots__/NestedCollection.spec.js.snap b/packages/decap-cms-core/src/components/Collection/__tests__/__snapshots__/NestedCollection.spec.js.snap
index dd3f5fcd55ac..b643246f4411 100644
--- a/packages/decap-cms-core/src/components/Collection/__tests__/__snapshots__/NestedCollection.spec.js.snap
+++ b/packages/decap-cms-core/src/components/Collection/__tests__/__snapshots__/NestedCollection.spec.js.snap
@@ -138,6 +138,20 @@ exports[`NestedCollection should render connected component 1`] = `
margin-right: 4px;
}
+.emotion-6 {
+ position: relative;
+ top: 2px;
+ color: #fff;
+ width: 0;
+ height: 0;
+ border: 5px solid transparent;
+ border-radius: 2px;
+ border-left: 6px solid currentColor;
+ border-right: 0;
+ color: currentColor;
+ left: 2px;
+}
+
File 1