-
v0.2.0
Stablereleased this
2026-08-24 21:54:20 +00:00 | 277 commits to main since this releaseBreaking
TableandDataTableno longer supportv-model:sort. Sort is a read-only
sortprop plus asortevent carrying the activated column key; the consumer
decides the next state. Migratev-model:sort="sort"to
:sort="sort" @sort="key => sort = toggleSort(sort, key)". See ADR 0005.useUrlSort()returns{ sort, onSort }instead of a writable computed:
:sort="sort" @sort="onSort".SortEventis removed; the{ key, direction }shape is nowSort.
Changed
--duration-slowis now2s(was1s). It drives exactly one thing — the
Iconspin animation — so this slows every spinner, includingButton's
loading state, which read as hurried.ButtonandIconButtonrenderSpinnerinstead of an inline spinning
Icon, so every spinner in the library now shares the stepped chasing-tail
look. Sizes are unchanged (1rem/1.25rem), held via--pui-spinner-size.- The
loadericon keeps its eight spokes as separate<path>elements in
clockwise order so they can be faded individually. Visually identical on its
own; onlySpinnerramps them. - A
ButtonorIconButtonin itsloadingstate no longer fades to
--opacity-disabled. It is stilldisabledfor interaction purposes, but a
busy control is not an unavailable one, and the fade compounded with the
spinner's own opacity ramp — the dial's dimmest spokes landed near 6% alpha
and effectively disappeared.
Added
Spinner(Vue + Astro) — the indeterminate "working" indicator, composing
Icon'sloaderglyph. Sizessm | md | lg | xl; supplylabelwhen the
spinner is the only signal, omit it when the surrounding element already
carriesaria-busy. With alabelthe wrapper becomes arole="status"
region and the label is rendered as visually-hidden text in a
.pui-spinner__labelspan — a live region announces its text content, and one
whose only child isaria-hiddenhas none.Table(Vue + Astro) andDataTabletakeloading. The<tbody>frosts
under an overlay and is markedinert, so its links and checkboxes are not
merely un-clickable but genuinely out of reach; the header stays crisp and
clickable, the table is markedaria-busy, andDataTablesuppresses its
empty state.rowsis passed through untouched. The overlay is one extra
<tr class="pui-table__loading">inside<tbody>, rendered only while
loading; the public DOM root is unchanged. Its spinner stays centred in the
visible scroll port on a horizontally scrolled table, and a body with no rows
is held open while busy by--pui-table-loading-min-h(default9rem) so the
overlay has a pane to sit in on a first fetch.@[secure]/ui/utilsexports the sort domain:Sort,SortDirection,
SortState,toggleSort,parseSort,formatSort. The wire form is the
column key with a-prefix for descending (title,-title), which means
a column key must not itself start with-.Table.astrogained a sort surface. Sortable headers render links to the URL
each column would produce next, with the samearia-sortand chevron contract
as the Vue tier, and work without JavaScript.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads