- 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)