All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- You can now bind attributes with
??foo="${bar}"
syntax in the default template engine. This is functionally equivalent to thenullish
updater from the default template engine and will replace that functionality later (#204).
- Template errors now include approximate line numbers from the offending template in the default template engine. They also print the registered custom element tag name (#201).
- The
ifDefined
updater now deletes the attribute onnull
in addition toundefined
in the default template engine. This makes it behave identically tonullish
in the default template engine. However, both updaters are deprecated — the??attr
binding should be used instead when using the default template engine (#204). - Interpolation of
textarea
is more strict in the default template engine. This used to be handled with some leniency for newlines in templates —<textarea>\n ${value} \n</textarea>
. Now, you have to interpolate exactly —<textarea>${value}</textarea>
(#219). - You may now bind values of type
DocumentFragment
within the template engine. In particular, this was added to enable advanced flows without needing to bloat the default template engine interface (#207, #216). - Pull “x-template.js” into a separate file. Conceptually it solves a totally different problem than “x-element” (#226).
- Throw immediately with parsing errors in default template engine. This is done as an improvement to developer feedback (#233).
- The
ifDefined
andnullish
updaters are deprecated, update templates to use syntax like??foo="${bar}"
(#204). - The
repeat
andmap
updaters are deprecated, use native arrays (#204). - The
unsafeHTML
andunsafeSVG
updaters are deprecated, bind aDocumentFragment
value instead (#207, #216). - The
plaintext
tag is no longer handled. This is a deprecated html tag which required special handling… but it’s unlikely that anyone is using that (#220). - The
live
updater is deprecated. Use a delegated event listener for thechange
event if you need tight control over DOM state in forms (#208).
- Transitions from different content values should all now work for the default
template engine. For example, you previously could not change from a text
value to an array. Additionally, state is properly cleared when going from one
value type to another — e.g., when going from
unsafe
back tonull
(#223). - The
map
updater throws immediately when given non-array input for the default template engine. Previously, it only threw when it was bound (#222). - The
map
updater throws if the return value from the providedidentify
callback returns a duplicate value (#218). - Dummy content cursor is no longer appended to end of template for the default template engine. This was an innocuous off-by-one error when creating instrumented html from the tagged template strings (#221).
- The default template engine now renders fully depth-first. Previously, this
could lead to bugs where a child element’s
connectedCallback
would be called before initial dom updates could be applied. In particular, this caused issues with default initial values causing unexpectedobserve
callbacks (#197).
- New support for static
styles
getter foradoptedStyleSheets
ergonomics (#52).
- The
x-element.js
file is now “typed” via JSDoc. The validity of the JSDoc comments are linted alongside the rest of the code and the annotations there are exported into a generatedx-element.d.ts
file. Previously, that file was hand-curated.
- The
map
function now works with properties / attributes bound across template contexts (#179). - The
x-element.d.ts
file now reflects the actual interface. Previously, it has some issues (e.g., improper module export).
- Initial interface for
1.x
is locked down.