BUG: AdoptStylesheet not supported in grapesJS
Question
Version:
You can get the version by typing grapesjs.version into the console
0.17.22
Are you able to reproduce the bug from the demo?
- Yes
- No
What is the expected behavior? Should be able to see the web component in similar fashion as it is outside the grapesJS container
Describe the bug detailed Grapesjs not able render the css from constructable stylesheet.
What is the current behavior? Able to load the component without styling
Are you able to attach screenshots, screencasts or a live demo?
CodeSandbox Starter template https://codesandbox.io/embed/frosty-payne-3fhd7?fontsize=14&hidenavigation=1&theme=dark
Answers (2)
This issue is due to how AdoptStylesheet works and it's similar to this one from lit-element. Basically, you can't share the same CSSStyleSheet across multiple documents, so you have to recreate it manually, here below is a code for custom elements, in order to support adoptedStyleSheets.
editor.Components.addType('custom-element', {
isComponent: (el) => (el.tagName || '').includes('-') && window.customElements.get(el.tagName.toLowerCase()),
view: {
init() {
// On init, the element is still part of the main document, so
// the original adoptedStyleSheets still exists
const shadowStyles = this.el?.shadowRoot?.adoptedStyleSheets;
if (shadowStyles) {
// By using setTimeout we'll jump on the step when the element is already rendered
// in the iframe document, here shadowRoot.adoptedStyleSheets is cleared
setTimeout(() => {
// We need to use the window of the iframe in order to
// avoid "stylesheets in multiple documents is not allowed" error
const win = this.el.ownerDocument.defaultView;
const adoptedStyles = shadowStyles
.map(s => Array.from(s.cssRules).map(r => r.cssText || '').join('\n'))
.map(css => {
const cssSheet = new win.CSSStyleSheet();
cssSheet.replaceSync(css);
return cssSheet;
})
this.el.shadowRoot.adoptedStyleSheets = adoptedStyles;
})
}
},
}
});
Is there any solution for using lit-element components 3.X with grapesJS?
Related Questions and Answers
Continue research with similar issue discussions.
Issue #3352
BUG: Default Content is getting Inserted while using setComponents if Tag Body is empty
Version: Latest You can get the version by typing grapesjs.version into the console Are you able to reproduce the bug from the demo?[X] Yes...
Issue #3023
BUG: i18n german locale wrong translations
Version: latest You can get the version by typing grapesjs.version into the console Are you able to reproduce the bug from the demo?[x] Yes...
Issue #3475
BUG: Toolbar/actionbar buttons do not work when there are multiple instances present (Even in your demo)
Version: 0.16.44 You can get the version by typing grapesjs.version into the console Are you able to reproduce the bug from the demo?[x] Ye...
Issue #3434
BUG: Using imported HTML/CSS/JS into the editor shows outlines, but no content, JS Fiddle inside
You can get the version by typing grapesjs.version into the console YES: https://jsfiddle.net/75a9u1cf/2/ What is the expected behavior? I...
Paid Plugins That Match This Issue
Curated by issue keywords and label relevance to help you ship faster.
Loading paid plugin recommendations...
Browse Plugin Categories
Jump directly to plugin category pages on the marketplace.