Casca 1.2.0 (2026-05-28)Link to section
A feature-completeness release: Casca can now scaffold a whole no-JS page, not
just the data widgets - and the component gallery (examples/index.html) is now a
total live spec where every element, even the page chrome, is rendered by real
Casca. (Version skips 1.1.x deliberately: the old chartsy line used 1.1.x.)
Added - casca-extended-layout (new opt-in bundle)Link to section
- The no-JS page/dashboard shell primitives - the things you build a dashboard
FROM, vs. the widgets that fill it:
.casca-card- a bordered surface with optional.casca-card-title/.casca-card-body/.casca-card-footerslots; composes a stat/chart/table inside..casca-card-grid- a responsive grid of cards (auto-fit, collapses to one column on narrow; no media/container-query setup needed)..casca-toolbar(+.casca-toolbar-group) - a control bar;data-align(between/end),data-variant="scroll"..casca-anchor-nav- an in-page section nav (TOC), vertical or horizontal (data-orientation="horizontal"for a top-bar TOC);data-sticky, active item viaaria-current.
- New package export
@skellvin/casca/extended-layout, lint targetlint:extended-layout(inlint:all), and the all-in-onecasca.cssincludes it.
Added - componentsLink to section
- Chip
data-variant="neutral"- a filled, low-emphasis category/label chip (distinct from the status variants and the borderedoutline). - Tabs - the existing
switchgainsdata-variant="tabs"(underlined tab strip, same no-JS view swap). No separate.casca-tabsprimitive - tabs are a switch. - Filter result count + empty-state -
.casca-filter-countshows a live count of visible items (CSS counters, no JS);.casca-filter-emptyshows a message when a filter combination hides everything. - Segment (
.casca-segment) - a no-JS binary slide toggle for progressive disclosure: reveals/hides.casca-segment-extraitems while the unmarked base set stays visible (checked= show all). Hidden-checkbox +label[for]+ subsequent-sibling, so no:has()is needed and it composes/toggles reliably.
ChangedLink to section
- Nested
.casca-filternow compose. The empty-state is scoped to each filter's own direct-child toggle group (> .casca-toggles) + empty element, and nested filters use disjointvalue/data-filternamespaces for the hide rules + per-filtercounter(). Keep.casca-togglesand.casca-filter-emptyas direct children of.casca-filter(the canonical markup already does). Seedocs/COMPATIBILITY.md→ Nested filters.
FixedLink to section
- Pager:
.casca-pagernow isolates its stacking context, so the floating center label (.casca-pager-label,z-index: 10) stays scoped to the pager. It previously leaked into the root stacking context and could paint over unrelated page content (e.g. a sticky nav bar) as the page scrolled.
ExamplesLink to section
- The gallery (
examples/index.html) is rebuilt as a live spec: real mini Casca charts (no hand-drawn SVG), consistent thumbnail tiles, and all of its own chrome (cards, grids, toolbar, section nav) built fromcasca-extended-layout. Sections are Charts, Controls, Components, and Themes, each with a per-section Core/Extended toggle that dogfoods the segment, and Themes shows a palette swatch preview per theme. - Every card links to a dedicated detail page. New:
segment.html,card.html,card-grid.html,toolbar.html,anchor-nav.html, and the four theme demos (default,high-contrast,muted,vibrant) now exercise the palette across KPIs, bar, line, pie, gauges, and chips.
CompatibilityLink to section
- Additive for existing components; no public selector/variable removed. The
layout primitives and tabs need no browser features beyond what Casca already
requires (
:has()for the tabs view-swap, as withswitch).