{attrs} stands inside an HTML start tag and writes the attributes its items describe, separated by spaces: <button {attrs disabled=$busy, title=$help}>. Each value is escaped for the attribute, so a quote in a value cannot end it. The items are read raw - content=, data= or print= are attribute names here, not the options they are on other tags.

True, false and the rest

A boolean HTML attribute - disabled, checked, selected, required, hidden, readonly and the like - is written bare when its value is true and left out otherwise. Any other attribute is left out for FALSE and NULL, written bare for TRUE, and otherwise written with its value: the text 'false' stays aria-expanded="false", an empty text is an empty attribute, an array is joined with spaces. A name alone - {attrs required} - is a bare attribute.

Attributes from an array

An item without a name whose value is an array adds its keys as attributes. Those keys are data, often a visitor's, so some are left out: a key that is no attribute name, an event handler (on...), a script library's directive in any spelling (@, :, x-, v-, hx-, ng-, wire: and more), an iframe's srcdoc, and a URL attribute whose value names a scheme that runs script (javascript:, vbscript:, data: other than data:image/).

For the class attribute, {classes} builds the list from conditions.