Hi folks,
Today's ShadowDOM model is designed around only adding shadow roots to element in the 'light side'. I assume this is intentional, but was hoping someone could describe why this design was chosen? Or said another way, if there was an imperative API to _remove_ a shadow DOM, would that symmetry be bad?
In full transparency, I'm thinking about potential solutions for a simplified shadow dom, and it occurs to me that it can't get much simpler than the following:
* Elements only [ever] have one "shadow side" which is essentially a secondary child node list. Whenever anything's in this list the Element renders that content instead of its "light" children. (Or maybe there's a switch to tell the element which side to render: light or dark?)
* Elements expose this "shadow node list" via APIs that are very similar to existing node list management, e.g., appendShadowChild(), insertShadowBefore(), removeShadowChild(), replaceShadowChild(), shadowChildren[], shadowChildNodes[].
* No special Event swizzling, no security boundary, no alternate script engine, no intermediate shadow root object, etc. This minimalist approach only provides node 'hiding' and potentially an alternate rendering path.
* Another feature could then provide the stronger "component" boundary, specifically the javascript global scope isolation. This delineation may more closely match the division we are seeing between the "React-like" scenarios and more robust component-kitchen-style custom element deployments.