diff --git a/packages/core/src/dom_components/model/Components.ts b/packages/core/src/dom_components/model/Components.ts index 2adbb4a10..ac32f1be3 100644 --- a/packages/core/src/dom_components/model/Components.ts +++ b/packages/core/src/dom_components/model/Components.ts @@ -164,8 +164,9 @@ Component> { const cssc = em?.Css; const allByID = domc?.allById() || {}; const parsed = this.parseString(input, opts); - const newCmps = getComponentsFromDefs(parsed, allByID, { skipViewUpdate: true, ...opts }); - const { visitedCmps = {} } = opts; + const fromDefOpts = { skipViewUpdate: true, ...opts }; + const newCmps = getComponentsFromDefs(parsed, allByID, fromDefOpts); + const { visitedCmps = {} } = fromDefOpts; // Clone styles for duplicated components Object.keys(visitedCmps).forEach((id) => { diff --git a/packages/core/src/editor/model/Editor.ts b/packages/core/src/editor/model/Editor.ts index d154efc0c..7a7dfcd51 100644 --- a/packages/core/src/editor/model/Editor.ts +++ b/packages/core/src/editor/model/Editor.ts @@ -847,7 +847,7 @@ export default class EditorModel extends Model { const keepUnusedStyles = !isUndefined(opts.keepUnusedStyles) ? opts.keepUnusedStyles : config.keepUnusedStyles; const cssc = this.Css; const wrp = opts.component || this.Components.getComponent(); - const protCss = !avoidProt ? config.protectedCss! : ''; + const protCss = !avoidProt ? config.protectedCss || '' : ''; const css = wrp && this.CodeManager.getCode(wrp, 'css', { diff --git a/packages/core/test/specs/dom_components/model/Component.ts b/packages/core/test/specs/dom_components/model/Component.ts index bbe957416..8f8aa2ce0 100644 --- a/packages/core/test/specs/dom_components/model/Component.ts +++ b/packages/core/test/specs/dom_components/model/Component.ts @@ -436,6 +436,30 @@ describe('Component', () => { expect(comp1.getId()).toEqual(comp1Id); }); + test('Ensure duplicated component clones also the rules', () => { + const idName = 'test'; + const cmp = dcomp.addComponent(` +
+
Comp 1
+
+ + `) as Component; + expect(em.getCss()).toBe('#test{color:red;}@media (max-width: 992px){#test{color:blue;}}'); + cmp.components().resetFromString(` +
Comp 1
+
Comp 2
+ `); + const newId = cmp.components().at(1).getId(); + expect(em.getCss()).toBe( + `#test{color:red;}#${newId}{color:red;}@media (max-width: 992px){#test{color:blue;}#${newId}{color:blue;}}`, + ); + }); + test('Ability to stop/change propagation chain', () => { obj.append({ removable: false,