v0.51.0

5 November 2026

The @ui components take class and attrs instead of styling params, and the icon set moves to phlat/addons/icons/svg/.

Added

  • @ui/megamenu.latte turns top-level items with items into buttons that open a panel of their children (depth: 2), and folds into a popover behind a Menu button below sm. Several on one page need a distinct id.
  • Every @ui component takes class and attrs. class is additive and lands on the element that carries the base class. The form fields put class and attrs on the control.
  • itemClass styles the second part of rating, steps, indicator, join, accordion and tabs. avatar takes inner and modal takes triggerClass.
  • color, variant and size exist on the components with those class families, including the form controls. A form field with an error is red.

Changed

  • The @ui templates bring only their base class. The removed params are now classes: style (badge, divider, loading, progress, rating, steps, tabs, indicator, modal, the form controls), shape, direction (dropdown, footer, join, menu, stats, steps, timeline), position (indicator, toast, tooltip), vertical, end, zebra and pinRows. Pass the class in class or itemClass (class: 'steps-vertical', class: 'toast-end toast-bottom'), or use color, variant and size where the component has them.
  • theme-picker.latte takes showLabel instead of show_label and no longer takes end. Add dropdown-end to class.
  • button, alert, card actions, progress, badge and the form controls default color to null and no longer pick a colour.
  • accordion, tabs and table escape their titles, content and cells. Pass a captured block for markup.
  • The @ui templates lose their text sizes, opacity, shadows and similar decoration. navbar and hero are plainer.
  • The shipped icons live in phlat/addons/icons/svg/ instead of views/. icon() still finds an override in site/views/@icons/ first.
  • Dir::newest() matches its patterns with one regex instead of fnmatch() per file, so it is much faster on a folder of thousands. Patterns support * and ? only.

Fixed

  • @ui/alert.latte no longer fails on a null colour when it looks up its icon.
  • @ui/pagination.latte no longer shadows $page with its loop variable, and the skipped-page marker is no longer a button.