From 03b4834cf483fc9f6774b65ffc36e36a7f05ba23 Mon Sep 17 00:00:00 2001
From: Westbrook Johnson The following aims to support implementors in prioritizing, finalizing, and shipping new and agreed upon specifications in accordance with what is most needed by the web component developing community. The 2023 report is currently being drafted. Web component features in the platform swing broadly from twinkle in someone's eye to just waiting for that last browser vendor to ship in the wild. Along that spectrum, there are a myriad of features that browser implementors and web developers could focus on and it's difficult to always align on which are most important. We, the Web Components Community Group, look to build on our work from 2021 and 2022 and continue to shed light on the priorities in this space as seen by developers conuming these features. Taking the feedback from previous years to heart, we are drew out four features of the highest priority. Each are at different places on the spectrum of "ready to consume", and we look forward to working more closely with vendors in making progress towards that goal. The four features are listed below by status: We noticed the following specs already have a high degree of alignment from an implementation perspective, but support in browsers is still not equally distributed. Filling in these gaps would be a big win for users and developers alike for a more predictable web. The following specs have recieved a quality review at the proposal stage and are ready to be prototyped in browser. What sort of support could the Web Components Community Group lend to browser implementors as part of this process? The following specs we see as highly valuable to the developer community for being able to deliver great web experiences to users when using Web Components. As it pertains to topics like Aria and SSR, these specs just need a little more alignment across browser implementors so that consensus can be achieved.
+ Shadow boundaries prevent content on either side of the boundary from referencing each other via ID references. ID references being the basis of the majority of the accessibility patters outlines by aria attributes, this causes a major issue in developing accessible content with shadow DOM. While there are ways to develop these UIs by orchestrating the relationships between elements of synthesizing the passing of content across a shadow boundary, these practices generally position accessible development out of reach for most developers, both at component creation and component consumption time.
+
+ Developers of a custom element should be able to outline to browsers how content from outside of their shadow root realtes to the content within it and visa versa. Cross-root ARIA Delegation would allow developers to define how content on the outside is mapped to the content within a shadow root, while Cross-root ARIA Reflection would define how content within a shadow root was made available to content outside of it.
+
+ Implementors participating in bi-weekly Accessibility Object Model syncs with WICG have all been favorable to the delegation work and are interested in the reflection work as a tighly related API that maybe is a fast follower. Leo Balter is working on finalizing proposal text for the delegation API at which time Westbrook Johnson will apply similar teminology to the reflection API proposal.
+ HTML JS HTML JS When developing many of the patterns outlines in the ARIA Authoring Practices Guide having this capability would allow for encapsulating responsibilities outlined by the `role` attribute in a shadow root. --- Summary or proposal based on current status; paragraph(s) and code. --- Declarative Shadow DOM is a mechanism to express Shadow DOM using only HTML, with no dependency on JavaScript, much like light DOM can be declaratively expressed today. Below is an example taken from the web.dev blog on Declarative Shadow DOM.
+ Introduction
+ Seeking Browser Parity
+ Seeking Initial Prototyping
+ Seeking specification concensus
+ Table of Contents
+
+
+
+
+
+
+
+ Feature or Problem
+ GitHub Issue(s)
+ Status(?)
+
+
+ Cross-root ARIA
+
+ WICG/aom#169
+
+ WICG/aom#107
+ WICG/webcomponents#917
+ WICG/webcomponents#916
+ Uncertain
+
+
+ Declarative Shadow DOM
+ whatwg/dom#831
+ Concensus, lacking parity in implementation
+
+
+ Scoped Element Registries
+ WICG/webcomponents#716
+ Consensus
+
+
+
+ CSS Slot Content Detection
+
+ w3c/csswg-drafts#7922
+ WICG/webcomponents#936
+ w3c/csswg-drafts#6867
+
+ Uncertain
+ Cross-root ARIA
+ Links
+
+
+ Description
+ Status
+ Initial API Summary/Quick API Proposal
+ Delegation API
+
+
+
+ <span id="foo">Description!</span>
+ <template id="template1">
+ <input id="input" autoarialabel autoariadescribedby />
+ <span autoarialabel>Another target</span>
+ </template>
+ <x-foo aria-label="Hello!" aria-describedby="foo"></x-foo>
+
+
+
+
+ const template = document.getElementById('template1');
+
+ class XFoo extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: "open", delegatesAriaLabel: true, delegatesAriaDescribedBy: true });
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
+ }
+ }
+
+ customElements.define("x-foo", XFoo);
+
+ Reflection API
+
+
+
+ <input aria-controlls="foo" aria-activedescendent="foo">Description!</span>
+ <template id="template1">
+ <ul reflectariacontrols>
+ <li>Item 1</li>
+ <li reflectariaactivedescendent>Item 2</li>
+ <li>Item 3</li>
+ </ul>
+ </template>
+ <x-foo id="foo"></x-foo>
+
+
+
+
+ const template = document.getElementById('template1');
+
+ class XFoo extends HTMLElement {
+ constructor() {
+ super();
+ this.attachShadow({ mode: "open", reflectsAriaControls: true, reflectsAriaActivedescendent: true });
+ this.shadowRoot.appendChild(template.content.cloneNode(true));
+ }
+ }
+ customElements.define("x-foo", XFoo);
+
+ Key Scenarios
+ Related Specs
+
+ Open Questions
+
+
+ CSS Slot Content Detection
+ Links
+
+
+ Description
+ Status
+
+
+ Initial API Summary/Quick API Proposal
+ Key Scenarios
+ Concerns
+
+
+ Dissenting Opinion
+
+
+ Related Specs
+
+
+ Open Questions
+
+
+ Declarative Shadow DOM
+ Links
+
+
+ Description
+ Status
+
+
+ Initial API Summary/Quick API Proposal
+
+ <host-element>
+ <template shadowroot="open">
+ <slot></slot>
+ </template>
+ <h2>Light content</h2>>
+ </host-element>
+
+
Server-Side Rendering: Without Declarative Shadow DOM, servers cannot deliver complete websites that include web component content. Markup cannot be efficiently delivered and then hydrated with JavaScript client-side.
+JavaScript-less environments: Many web components could be implemented without JavaScript, taking advantage of encapsulated DOM and styles. However, web components cannot currently be rendered by users who have JavaScript disabled. Developers who are more comfortable with markup than with scripting may avoid shadow DOM altogether due to its tight coupling with JavaScript..
+Scoped element registries allow custom element definitions to be scoped to one or more shadow roots. This allows the same tag name to be used with different implementations in different parts of the page, greatly reducing tag name collisions.
+Summary or proposal based on current status; paragraph(s) and code.
++ This is required for specifications that contain normative material. +
+