Skip to content

Release of v0.1.31 - #129

Merged
alessandrobellesia merged 16 commits into
mainfrom
develop
Oct 12, 2026
Merged

alessandrobellesia merged 16 commits into
mainfrom
develop

Conversation

@alessandrobellesia

@alessandrobellesia alessandrobellesia commented Oct 12, 2026 •

Copy link
Copy Markdown
Member

This release brings develop into main for v0.1.31. It contains:

CHANGELOG.md lists every change under 0.1.31, one entry each, with its mechanism and its consequence.

Added

  • Container queries. The @container class, and a container prefix such as @md:flex-row, which reads the width of the nearest @container instead of the viewport.
    • It is available on display, flex direction and wrap, justify and align of content and items, grid-cols-, col- and text align.
    • The steps run from @xs: (20rem) to @xxxl: (48rem) and are set by $container-breakpoints. The cq-up mixin uses the same steps.
  • Open and close transitions, with no script. Every duration follows reduced motion.
    • vv-accordion grows its content where the browser has ::details-content, which today is Chrome.
    • vv-popover with popover fades in and out.
    • vv-dialog fades in.
  • details-content is a pseudo-element that a component map can style.
  • llms.txt and llms-full.txt on the documentation site, with the agent skill published next to them.

Changed

  • --rounded is the base of the radius scale. --rounded-sm to --rounded-xxxl are now calc(var(--rounded) * <ratio>). The computed values do not move, and one --rounded now rescales every corner.

Fixed

  • .container was 0px wide below 360px.
  • The sizing classes emitted broken names such as .w-xs-xxs, and duplicate rules. They now read --spacing-{xs..xl}, with one class per size.
  • The duration-, delay-, shadow, opacity, filter, transition-property- and ease- classes read their tokens, so durations and delays follow reduced motion.
  • The list alias of vv-dropdown matched [role="list-box"] instead of [role="listbox"].
  • scheme no longer produces color classes.
  • spread-map-into-utilities walked a nested map with every breakpoint under the prefix of the current one.
  • A transition set by a state was taken for the transition map of the block.
  • The sitemap lost the /style of every URL.
  • SonarCloud parses the outlined preset page and tsconfig.json again.
  • The color swatch of the readable check, on the colors page, lines up with the fields next to it (docs(colors): the swatch of the readable check lines up with the fields #130).

Worth a look before publishing

These are the changes an application can notice:

  • The new sizing classes are spacing sizes: max-w-md is 12 to 16px, not the container width that Tailwind gives the name.
  • .backdrop-blur-blur is now .backdrop-blur. The old name stays as an alias.
  • .bg-scheme, .text-scheme, .border-scheme and .decoration-scheme are gone.
  • A --color-shadow set on an element other than the root or a .theme no longer recolours the shadow classes inside it.
  • getPropertyValue('--rounded-lg') returns the calc() instead of 0.5rem.

No token is renamed or removed, and the exports map does not change.

volver.css goes from 1,425,432 to 1,101,117 bytes, or from 117,568 to 113,221 bytes with gzip -9, measured against the published 0.1.30. The sizing fix removes about 350 kB, and the container queries add about 30 kB.

Verification

This release publishes 0.1.31 under latest.

🤖 Generated with Claude Code

alessandrobellesia and others added 13 commits October 7, 2026 18:48
SonarCloud gave up on docs/components/PresetOutlinedFields.vue with "Bad
syntax reference: <boolean-condition>". The stylelint it runs on the styles
of a component validates `@else` as the at-rule of CSS Conditional 5, and
@csstools/css-syntax-patches-for-csstree 1.1.12 gives that at-rule a
prelude of `<boolean-condition>?` without defining the type, so the match
throws. Reproduced with stylelint 17.16 and at-rule-prelude-no-invalid.
-changed() now records whether a key changed in a variable and tests it
with two @if, and the Sass it compiles to is identical byte for byte. The
comment that said the dark theme sets the valid and invalid colours, which
it no longer does, is corrected.

tsconfig.json drops its comments, which SonarCloud could not parse
(tsconfig.json:22:1); it is plain JSON now, with the same options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(sonar): the outlined preset page and tsconfig.json parse again
- `.container` was 0px wide below 360px: `--breakpoint-value` is 0 at
  `xxs`. The token keeps its value, and the container takes the whole
  width up to the next breakpoint through a media query.
- The sizing classes recursed into the dynamic spacing map and emitted
  `.w-xs-xxs` and the like, reading undeclared tokens with a unitless
  fallback, plus duplicates for every breakpoint. They now read
  `--spacing-{xs..xl}` with one class per size, like spacing, gap and
  inset; volver.css drops from 1425 kB to 1071 kB.
- The duration, delay, shadow, opacity, filter, backdrop blur,
  transition property and ease classes read their tokens with the value
  as fallback, so durations and delays follow prefers-reduced-motion and
  a token set on the page reaches the classes. The default backdrop blur
  is named `.backdrop-blur`, and `.backdrop-blur-blur` is kept.
- The `vv-dropdown` list alias read `[role="list-box"]`, not an ARIA
  role: it reads `[role="listbox"]`.
- `scheme` no longer emits `.bg-scheme` and the other color classes,
  which wrote `light` as a color.

dist/ moves in those rules only, measured rule by rule against a
snapshot and in headless Chrome. The docs pages, the bundled skill and
the changelog follow, and TableUtility loses the `literal` prop that no
page needs any more.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
fix: five defects found by the docs review
spread-map-into-utilities walked a nested map with every breakpoint
under the prefix of the current one: at the first, of 0, it emitted the
prefixed classes with no media query, and it emitted every rule of the
nested map once per breakpoint. The recursion now receives the current
breakpoint only.

No map of the library reaches the branch since the sizing classes stopped
walking the dynamic spacing map, so dist/ does not move. Before that it
gave 630 sizing classes such as `.xs:w-sm` that applied at every width,
and 4,410 identical copies of the others; a nested map of an application
still did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The `@container` class sets `container-type: inline-size`, and the
utilities that lay a block out take a container prefix, `@md:flex-row`,
which reads the width of the nearest `@container` instead of the
viewport. The steps are the ones of Tailwind CSS, from `@xs:` (20rem) to
`@xxxl:` (48rem), set by `$container-breakpoints`.

They reach display, flex direction and wrap, justify and align of content
and items, grid-cols, col and text align: 70 classes per step, 491 rules,
2 KB of volver.css gzipped. spread-map-into-utilities takes the steps in
`$cqs`, appended after its other arguments, and emits them after the
responsive classes of the same utility, so a container class wins when
both apply. `cq-up` wraps a rule in the query of a step; an unknown step,
or one that is not above 0, stops the compilation.

The breakpoints page also stops claiming that a map out of order or
without a key of 0 is an error: it is a warning, and the CSS is wrong.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd dialog

The content of vv-accordion grows from 0 to its height and back through
`::details-content`, `interpolate-size` and `content-visibility` with
`allow-discrete`, where the browser has them (Chrome). The height is a
plain declaration, so an accordion nested in an open one keeps its own.

vv-popover with `popover` fades in from a `@starting-style` and out with
`display` and `overlay` held by `allow-discrete`. The rules sit in the
component entry, before the block so that the map can override them, on
`[popover]` alone, and the closed opacity on
`[popover]:not(:popover-open)`, which Safari 16 drops instead of hiding
an element it cannot open.

vv-dialog fades in when it opens and closes at once: a fade out needs
`allow-discrete` on the closed dialog, which would keep a dialog that
@volverjs/ui-vue hides with `display: none` on the page, invisible and in
the way of the pointer. Its Vue transitions run as before.

The generator learns `details-content`, which it dropped while still
declaring its custom properties, with no `content: ''` of its own, and no
longer takes a map of the block for a declaration: a `transition` set by
a state reassigned a `--vv-dialog-transition` that nothing reads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`--rounded-sm` to `--rounded-xxxl` are declared as
`calc(var(--rounded) * <ratio>)`, the ratio taken from `$border-radius`
at compile time, so the computed values do not move while one
`--rounded` rescales every corner of the utilities and the components.
`none`, `full`, the steps in `$border-radius-fixed` and the steps in
another unit than `rounded` keep their value, and so does every step when
the base is 0.

The token reference also says that an override written on `:root` alone
does not reach inside a `.theme`, which declares every token again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The styleguide build writes llms.txt, an index of the agent skill and of
every page with its description, and llms-full.txt, the skill and its
four references in one file, and publishes the skill next to them. The
menu and the script read the sections from docs/settings/menuSections.js.

The sitemap listed every page without the `/style` of the site, because
its routes are absolute and replaced the path of the hostname:
`basePath: 'style'` puts it back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ar issues

SonarCloud flagged five issues on the llms script of this branch: three
built-in modules imported without the `node:` prefix, a front matter
regex whose `\s*(.*)` overlaps on whitespace, and a nested template
literal. The regex now captures everything after the colon and trims
it, which also drops trailing whitespace as YAML does, and `link()`
builds the item before appending its description.

build.js, generateDesignTokens.js and vite.config.ts import their
built-ins with `node:` too, as checkColors.js already did.

llms.txt, llms-full.txt, dist/ and design-tokens.json are identical
before and after.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s on their own

The callout of a utility page sat behind `breakpoints` and showed the
container prefix only inside it, while the badges read the two flags
separately: a page with `containerQueries` alone would have shown the
badge and no callout. Every page with container queries also has
breakpoints today, so the site does not change. The callout now renders
for either flag, keeps the breakpoint text under `breakpoints`, and with
container queries alone takes their title and links to their section.

Reported by CodeRabbit on #128.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat: container queries, native transitions, a radius scale on --rounded, and llms.txt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: cc8a520a-a2f9-48b5-b564-836553aa4279

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The swatch sat 16px below the select and the text field next to it and
was 8px shorter: it was aligned to the end of the row, which includes the
`--input-gap` margin each field keeps under its wrapper, and it was 44px
tall where a field is `--input-min-height`. It now takes that margin and
that height from the same tokens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
alessandrobellesia and others added 2 commits October 12, 2026 17:20
docs(colors): the swatch of the readable check lines up with the fields
#130 reached develop before the release, so its entry moves from a new Unreleased section into 0.1.31.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@alessandrobellesia
alessandrobellesia merged commit a4bdbd5 into main Oct 12, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant