v1.5.3
Two opt-in <Tabs> enhancements (FW-12 tabTemplate, FW-13 slidingIndicator) plus a
security hardening of the Prettier plugin. All additive — nothing changes without opting in.
✨ Features — @weave-framework/ui
- Tabs — sliding indicator (
slidingIndicator). Opt into an animated marker that slides and
resizes to the active tab. The framework renders one.weave-tabs__indicatorin the list and, on
every selection (and on resize), sets itstransform: translateX()+widthto the active tab's
box — the CSS transition animates it. Default look is a bottom accent underline
(--weave-tabs-indicator-*tokens); app CSS re-skins it to a pill. Off by default. Composes with
tabTemplate. - Tabs — custom tab-button content (
tabTemplate). Hand<Tabs>an authored@snippetand it
renders the whole content of eachrole="tab"button — an icon before the label, a badge, two
lines — from each tab'sTabRowContext(item+ yourdatapayload,label,index, reactive
selected,disabled). The framework still owns the button, ARIA, roving tabindex and panels;
labelstays the accessible name.<Tabs>/TabItemare now generic over the payload
(data?: T). OmittabTemplatefor the default label span — fully back-compatible. Mirrors the
menu'sitemTemplate(FW-10/FW-12).
🔒 Security
- prettier-plugin — ReDoS hardening. The
<script>/<style>/langdetection regexes in the
plugin'sparse.tsno longer use the ambiguous(\s[^>]*)?form that CodeQL flagged as polynomial
backtracking (5js/polynomial-redosalerts). They now use a zero-width(?=[\s>])assertion and
readlangfrom the captured<style>attributes, not a second whole-document scan. Formatting
behaviour is unchanged.