hx_is_htmx() always returned FALSE for real plumber2 requests. plumber2
requests are reqres::Request objects, which normalise header names to
snake_case: request$headers holds hx_request, never the hx-request the
function looked up. It now uses the get_header() accessor when available,
and accepts both spellings when falling back to headers (#22).delete-row example was broken: its <tr> fragments were returned as a
tagList, which the plumber2 html serializer dumps as raw XML instead of
rendering. Now wrapped in as.character(), as infinity-scroll and
toast-notification already do.New plumber2 serializer htmx, registered when htmxr is loaded. Annotate a
route with @serializer htmx and it sends any htmltools output as
text/html — a tagList fragment as readily as a full page. plumber2's
html serializer only understands a bare string or a single tag, so a
tagList (what hx_table_rows() returns) was sent as unusable markup with a
200 status; @serializer none avoided that but mislabelled the response
text/plain. All examples now use @serializer htmx and the
as.character() calls that worked around this are gone.
New example page-or-fragment — demonstrates hx_is_htmx(): a single route
answers a browser with the full page and htmx with just the table rows,
which makes push_url produce URLs that survive a hard reload.
hx_set() now accepts all CRUD verbs as named parameters: put, patch,
delete (in addition to existing get and post).hx_set() and all components (hx_button(),
hx_select_input(), hx_slider_input(), hx_table()): params, include,
push_url, select, vals, encoding, headers — covering the most
commonly used htmx core attributes as named parameters.hx_set() now accepts ... as an escape hatch for raw htmx attributes not
covered by named parameters (e.g. `hx-disabled-elt` = "this",
`hx-prompt` = "Reason?"). Names must start with hx- or data-hx-.delete-row — demonstrates the vals attribute: each delete
button embeds its row id as JSON via hx-vals, no form or hidden input
needed.htmxr_is_htmx() renamed to hx_is_htmx() to follow the hx_ prefix
convention applied to all exported functions.hx_button() parameter order changed: id is now first and required (was label).
Update calls like hx_button("Click me") to hx_button("my-btn", label = "Click me").hx_table() parameter id renamed to tbody_id to clarify that the id is
applied to the <tbody>, not the <table>.hx_trigger() — adds an HX-Trigger response header to a plumber2 response,
causing htmx to fire a client-side event immediately after the response.hx_trigger_after_swap() — same, but fires after htmx swaps the new content
into the DOM (HX-Trigger-After-Swap).hx_trigger_after_settle() — same, but fires after htmx settles
(HX-Trigger-After-Settle).event argument accepts a character vector (multiple events) or a named
list (events with JSON detail payloads), serialised without external
dependencies.DESCRIPTION to comply with CRAN spell check
conventions.Depends: R (>= 4.1.0) for native pipe |> compatibility.