Repository navigation
Domma v0.48.0
v0.48.0 - Skeletons and Access (2026-09-27)
Skeleton loaders - shimmering placeholders shaped like the content on its way, so a page keeps its
layout while data loads. Plain CSS shapes for hand-written HTML, E.skeleton() to write them into a
container, and E.skeleton.while() to show them until a promise settles.
🦴 Shapes in plain CSS
-
.skeletonplus a shape:.skeleton-text(with.skeleton-linesthe last line runs short),
.skeleton-heading,.skeleton-circle/.skeleton-avatar(-sm,-lg,-xl),
.skeleton-image/.skeleton-rect(16:9, or.skeleton-ratio-*) and.skeleton-button.
Composites match the real components' sizes:.skeleton-card,.skeleton-list-itemand
.skeleton-tablerows. -
The tint is the theme's text colour mixed into its surface, so it is a quiet grey on light themes
and a slight lift on dark ones, and a soft band sweeps across.prefers-reduced-motionkeeps the
tint and drops the sweep.--dm-skeleton-bg,--dm-skeleton-shineand--dm-skeleton-duration
override it.
⏳ E.skeleton() and E.skeleton.while()
-
E.skeleton(target, {type, lines, count, rows, columns, avatar, image, animate})fills a container
with'text','card','list','table'or'custom'placeholders, marks itaria-busywith a
polite "Loading..." status and returns{remove(), replace(content)}.remove()puts back the very
same nodes, listeners and all. -
await E.skeleton.while('#posts', H.get('/api/posts'), {type: 'card', count: 3})shows the skeleton
until the promise settles and resolves with its value; if it rejects, the skeleton goes and the
error is rethrown. -
data-skeleton="card"withdata-skeleton-*options andE.skeleton.scan()for markup-first pages;
skeletonis also a config-engine component.
📊 DataTable loading rows
T.create(sel, {columns, loadingSkeleton: true})shows skeleton rows under the real header until the
firstsetData(), andtable.setLoading(true)brings them back for a reload.
♿ Accessibility and contrast sweep
-
Modal, Tabs, Accordion, Toast and Table now add their own ARIA roles and states and keyboard
navigation, and the CSS styles the ARIA disabled, selected, invalid and current states. -
A 38-theme contrast sweep (
npm run sweep:themes) found and fixed 31 contrast failures: the
admin themes' success fill, the sharp finish's muted text and the dark finishes' focus rings,
Charcoal Dark's focus border, and text on cyan via new intent text tokens.