v1.7.0
Correctness fixes in the framework and a substantial repair of the WebStorm editing experience,
plus a pass over the documentation site's own presentation.
🐛 Fixes
-
WebStorm no longer paints correct code red. The language server bundled inside the WebStorm
plugin had gone stale: it predatedauto-expose(asetup()may omit itsreturn), so it typed
the template context asvoidand flagged every binding of every such component. On a real
application that was 1642 false errors across 39 of 41 files — whileweave checkon the same
files reported none. Installweave-webstorm-0.23.0.zip. A new CI gate now fails the build if the
server inside the shipped.zipever differs from the one in the repository again. -
Template highlighting is no longer one lonely colored word. A call inside a binding —
{{ rangeValue() }},{{ adapter() }}— rendered as plain black text, because the color key it
inherited from has no foreground in any scheme WebStorm ships. A bare identifier next to it was
colored, which made the whole thing look broken rather than merely plain. Calls and directive
prefixes now carry explicit colors, and remain retunable under
Settings → Editor → Color Scheme → Weave. -
The editor now actually enforces a child component's props. Because the server never resolved
an imported component's synthesized default export,typeof Childfell back toanyand every
<Child prop={{ … }}>check quietly passed — passing a number where a handler belongs, or a prop
the child does not declare, produced no error. The same gap stripped inline handler parameters of
their contextual type, soonChange={{ (v) => … }}reported a spurious implicit-any. Both are
fixed, and a prop error is now pinned to the prop name in the template. -
A nested
@forno longer reads the wrong row. Every loop row function took a parameter
literally named_row, so an inner loop shadowed its parent. An outer loop variable referenced
inside a nested loop compiled to the inner item — silently, with no error. Where the inner item
happened to carry a same-named property the value looked plausible; where it did not, the binding
rendered empty. Each loop now gets its own row identifier. The magic names ($index,$first,
$last, …) still rebind to the innermost loop, which is the correct shadowing. -
A bare
#fragmentscrolls instead of navigating away.navigate('#section')took the empty
string before the#as the destination path, which resolves to/— so an in-page anchor threw
the app back to the root route and lost the page you were reading. A bare fragment now keeps the
current path and query and just scrolls. -
<Sidenav>fills its container. The shell set no height, so a drawer stopped at its last nav
item instead of running the full height of the box it was given. Auto-height parents are
unaffected (it resolves to a no-op there). -
<Tree>and<List>use real icons. The tree disclosure marker was a CSS▸glyph and both
components drew their reorder handle as a⠿character; they are lucide<Icon>s now
(chevron-right,grip-vertical).grip-verticaljoins the built-in icon set. The tree's
toggle-glyphtoken moves 12px → 14px, since a chevron icon needs slightly more than the glyph
did to read at the same weight.
⚠️ Deprecated (still emitted, still safe to set)
Five design tokens became inert during this cycle — the rules that read them went away when a ×
character became a lucide icon and a marked button's underline became a tonal fill. They are kept
and emitted, because the design-token contract is frozen public API: a token is deprecated first and
removed only in a major. If you set one of these, nothing breaks — but nothing happens either, so move
to the replacement when convenient.
| Deprecated | Instead |
|---|---|
--weave-button-mark-width |
no replacement — marked is a tonal fill, not an underline |
--weave-chips-remove-font-size |
--weave-chips-remove-icon |
--weave-input-clear-size |
sized by the icon rules |
--weave-datepicker-cell-size (typography) |
--weave-datepicker-cell-font |
--weave-date-range-picker-cell-size (typography) |
--weave-date-range-picker-cell-font |
(The sizing group's cell-size on both pickers is untouched and still does what it always did.)
📚 Documentation site
- Each API reference package page now opens with a jump index of its exports, grouped by kind
with a per-entry badge —@weave-framework/runtimealone is 56 symbols, previously all expanded
end to end with no way to see what the package contained. - API anchors are unique. A function and a same-named type collided (
resourceandResource
both became#resource), which is a duplicate DOM id and sent half those links to the wrong
symbol. Existing deep links still resolve. - Component demos read as finished, anchored surfaces rather than floating on the backdrop, and the
Progress Bar — previously zero-width in the demo stage, with a track the colour of the page — is
visible.