Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@webcomponents/shadydom

Package Overview
Dependencies
Maintainers
4
Versions
39
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@webcomponents/shadydom

Shadow DOM polyfill

  • 1.11.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
4K
decreased by-5.6%
Maintainers
4
Weekly downloads
 
Created
Source

ShadyDOM

ShadyDOM provides a shim for ShadowDOM V1. It is less correct but less intrusive and faster than the ShadowDOM Polyfill.

Usage

Usage of the shim is transparent when attachShadow is unavailable. Elements are patched as needed to report ShadowDOM correct dom information. Only dom tree accessors and mutation api is maintained. Some dom api (for example MutationObservers) is not shimmed.

To force ShadyDOM to be used even when native ShadowDOM is available, set the ShadyDOM = {force: true} in a script prior to loading the polyfill.

Example

<div id="host"></div>
<script>
  host.attachShadow({mode: 'open'});
  host.shadowRoot.appendChild(document.createElement('a'));
</script>

Building and Testing

For building and testing, first run

npm install
npm run build

To test, run npm test

Limitations

ShadyDOM distribution is asynchronous for performance reasons. This means that the composed dom will be available 1 microtask after the dom mutation occurs. For testing, ShadyDOM.flush may be called to force syncronous composition.

ShadowDOM compatible styling is not provided with the ShadyDOM shim. To shim ShadowDOM styling, use the shadycss shim.

On very old versions of Chrome and Safari, in rare cases ShadyDOM.patch(node) must be called to properly set textContent or innerHTML. On these browsers, element property accessors like firstChild and textContent cannot be modified on the element prototype and instances must be patched. This is automated but there are some cases that are not handled. This should only be an issue when setting textContent or innerHTML on a node inside a shadowRoot adds or removes a <slot> element. In this case, the shadowRoot will not render correctly. To workaround this, call ShadyDOM.patch(node) prior to setting textContent or innerHTML.

The APIs Document.querySelectorAll, Element.querySelectorAll, Node.childNodes, and ParentNode.children each return an Array instead of a NodeList or HTMLCollection.

Keywords

FAQs

Package last updated on 30 Mar 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc