Shadow DOM Spec — Slot-Assignment, Event Retargeting, Composited DOM Access #100
Labels
No labels
bug
docs
feature
housekeeping
html-spec
performance
react-compat
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
glow-all/true-headless-browser#100
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Issue #100 — Shadow DOM Spec — Slot-Assignment, Event Retargeting, Composited DOM Access
Problembeschreibung
Shadow DOM existiert als Basis-Implementierung (
src/custom-elements/shim.ts+ Issue #13), aber ist nicht spec-konform:attachShadow({ mode: 'open' })existiert als stubslotchange-Event fehltcomposedEvents (die den Shadow Boundary durchdringen) fehlenCustomElementRegistry.define()existiert, aber ohne Lifecycle-Callbacks<template shadowrootmode="open">)Warum das blockiert:
Architektur-Analyse
Aktueller Stand (
src/custom-elements/shim.ts)Spec-konformer Shadow DOM
Lösungsansätze
Option A — Full Shadow DOM Spec (Empfohlen)
Eigene ShadowDOM-Implementierung nach Spec:
Slot-Assignment Algorithmus (nach Spec):
Event Retargeting:
Vorteile:
Nachteile:
Option B — Happy DOM Shadow DOM verbessern
Happy DOM hat Basis-Shadow-DOM. Forken/Patchen:
Vorteile: Happy DOM hat die Basis-Infrastruktur (Event-Dispatch, DOM-Traversal)
Nachteile: Tiefe Happy DOM Interna (PropertySymbols) müssen verstanden werden
Entscheidung
Option A — Eigene Implementation. Happy DOMs Shadow DOM ist zu rudimentär. Die Event-Retargeting-Logik muss auf unserer EventDispatcher-Infrastruktur aufbauen, nicht auf Happy DOMs.
Akzeptanzkriterien
attachShadow({ mode: 'open' })→ ShadowRoot (zugreifbar via element.shadowRoot)attachShadow({ mode: 'closed' })→ ShadowRoot (element.shadowRoot = null)<slot>assignedNodes() retourniert korrekte Light-DOM-Kinder<slot name="...">filtert nach slot-Attributslotchange-Event bei Slot-Zuweisungs-Änderungencomposed: trueEvents durchdringen Shadow Boundaryevent.composedPath()retourniert korrekten Pfad inkl. HostadoptedStyleSheetsauf ShadowRoot<template shadowrootmode="open">Betroffene Dateien
src/custom-elements/shim.tssrc/shadow-dom/shadow-root.tssrc/shadow-dom/slot-assignment.tssrc/shadow-dom/slot-change.tssrc/shadow-dom/event-retargeting.tssrc/shadow-dom/declarative-shadow.tssrc/interaction/dispatch.tssrc/css/style-engine.tstests/unit/shadow-dom.test.tstests/integration/web-components.test.tsTestplan
Unit (30+)
Integration (15+)
E2E (3)