htmx contribution demos

Side-by-side before/after demos for bug fixes contributed to bigskysoftware/htmx. Each demo loads two builds of htmx from the same base commit, differing only by the proposed patch.

Dual Content-Disposition headers made parseFilename() take the first filename= token and ignore RFC 5987 filename*.
Base: 7f9160f0 · PR #4043 · Open demo →
startViewTransition().ready rejects when the document is hidden. Catching only .finished leaked an unhandled InvalidStateError.
Base: 7f9160f0 · PR #4044 · Open demo →
Timeouts called abort() with no reason, so they were indistinguishable from hx-sync replace. Pass TimeoutError.
Base: 7f9160f0 · PR #4045 · Open demo →
swapWithStyle() has no case for textContent, so OOB textContent swaps fall through to innerHTML and parse markup as HTML instead of inserting it as literal text.
Base: d53932d4 · 3-line fix in src/htmx.js · Open demo →
Three call sites used raw classList.remove() instead of htmx's existing removeClassFromElement(), leaving an empty class="" attribute on elements that had no classes before the htmx operation.
Base: 1e807809 · Merged via PR #3715 · Open demo →