v1.5.0
Everything since 1.4.0 (developed locally as 1.4.1→1.4.22 in batch mode, released here as a
single minor — new public API across ui, runtime and i18n).
✨ Features — @weave-framework/ui
- Input — password/secret reveal (
revealable). An opt-in eye toggle that flips an
<input type="password">to text and back; composes<Icon>(eye / eye-off), is a real
type="button"witharia-pressed, and is i18n-labelled (revealLabel/hideLabel).
Companion props:onRevealToggle(shown)(notified on each toggle) and
revealTooltip('none' | 'native' | 'weave') choosing the toggle's tooltip —'native'
is a plaintitle,'weave'lazily mounts the CDK tooltip. Opt-in: nothing renders without
revealable. - Menu / Context Menu — richer rows. Three additive options, all preserving keyboard nav,
typeahead (optionLabel), ARIA,disabled,dividerand positioning:selected— a value picker: the row equal to it is markedrole=menuitemradio+
aria-checkedwith a leading check. Pass a getter so the mark tracks the value (re-read on
every open).optionContent(item) => Node(FW-9) — custom row body (a flag, icon, swatch, avatar)
in place of the default label;optionLabelstill drives the accessible name + typeahead.itemTemplate(row) => Node(FW-10) — an authored@snippetthat renders the whole
row from the full row context (item,checked, reactiveactive(),index,disabled),
owning the layout, marker (position + icon) and selected/active styling.selectedstill
sets the ARIA; the visible marker becomes the template's job.
✨ Features — runtime & i18n
@weave-framework/runtime— Observable↔signal bridge.fromObservable(obs, initial)and
toObservable(signal)interop with anySymbol.observable/.subscribesource (RxJS, etc.)
with no dependency added.@weave-framework/i18n— standalone Intl formatters.formatNumber/formatCurrency/
formatPercent/formatDate/formatRelativeTime/formatList— the zero-dep replacement
for Angular pipes, usable in.tsand templates, honouring the active locale.
🐞 Fixes — @weave-framework/compiler
use:config object literals now compile. A reactive binding expression that is an object
literal (use:tip={{ { placement: 'top' } }}) was read as a statement block; expressions are
now parenthesized at every binding site.- Object spread/rest is scope-rewritten.
{ ...opts, … }inside a template expression left
optsas a bare global (the...was mistaken for a member.), so
use:menu={{ { ...menuOpts, itemTemplate: row } }}silently lost its options. Both the rewriter
and auto-scope inference now recognise a spread argument as a data reference. - Self-closing SVG tags stay siblings (FW-8). A self-closing foreign-content element
(<path/>,<circle/>) is serialized with an explicit close tag, so following siblings no
longer nest inside it.
🐞 Fixes — @weave-framework/cli
stylesurl() assets are emitted + served (FW-7). Relativeurl(...)references in compiled
CSS (fonts, images) are hashed, copied into the build, and served in dev — previously they
404'd because only the CSS text was bundled.
📚 Docs
- Per-component example galleries for all 38
@weave-framework/uicomponents under
Examples → Components (each a live, full-option-surface page). - Menu and Context Menu galleries for
selected,optionContentanditemTemplate.