Skip to content

v1.5.3

Choose a tag to compare

@github-actions github-actions released this 08 Jul 20:47

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__indicator in the list and, on
    every selection (and on resize), sets its transform: translateX() + width to 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 @snippet and it
    renders the whole content of each role="tab" button — an icon before the label, a badge, two
    lines — from each tab's TabRowContext (item + your data payload, label, index, reactive
    selected, disabled). The framework still owns the button, ARIA, roving tabindex and panels;
    label stays the accessible name. <Tabs>/TabItem are now generic over the payload
    (data?: T). Omit tabTemplate for the default label span — fully back-compatible. Mirrors the
    menu's itemTemplate (FW-10/FW-12).

🔒 Security

  • prettier-plugin — ReDoS hardening. The <script>/<style>/lang detection regexes in the
    plugin's parse.ts no longer use the ambiguous (\s[^>]*)? form that CodeQL flagged as polynomial
    backtracking (5 js/polynomial-redos alerts). They now use a zero-width (?=[\s>]) assertion and
    read lang from the captured <style> attributes, not a second whole-document scan. Formatting
    behaviour is unchanged.