- Features are built without JS first
- Progressive enhancement
Consider elements' relationship to the DOM
- Minimum HTML generation
- Leave styling to CSS classes
- Create all necessary markup in the HTML document
- Rely on native elements as much as possible (not reimplementing what native elements already know how to do)
- Not using frameworks
- Not using Shadow DOM
- Non-polyfillable (ShadyDOM had serious performance impact)
- Can't be progressively enhanced (hidden DOM generation)
- No need (yet)
- Elements are designed mimicking native elements
<local-time>
and friends<include-fragment>
<poll-include-fragment>
(internal)<g-emoji>
<image-crop>
<details-dialog>
<details-menu>
<clipboard-copy>
<auto-complete>
<auto-check>
<markdown-toolbar>
<task-lists>
<tab-container>
<filterable-input>
(experimental)<file-attachement>
(experimental)<fuzzy-list>
(experimental)
- 2014: v0 custom elements
- 2017: v1 adoption
- 2018~: bunch of new elements
- Scoped CustomElementRegistry
- Server side rendering
- Template instantiation (
litHTML
) - Form participation / form associated elements (
<auto-complete>
,<image-crop>
,<details-menu>
) - Custom element callback/promise for "connected and parsed"
- Mechanism for setting the tabindex focus flag without sprouting tabindex attribute
- Add element reflection counterparts to id-reference counterparts
- Custom pseudo-classes for host elements via shadow roots (:state)