Hover isn't a variant: what's new in ng-prism 22.6 Alexander Spies released ng-prism 22.6, an Angular component lab that renders showcases without story files or iframes, adding a new "states" axis that combines hover, pressed and focus pseudo-classes with every variant instead of treating them as separate variants. The release also ships a Claude Code plugin, cuts watch rebuild times from roughly 450 ms to about 60 ms, and includes bug fixes plus deprecations ahead of version 23. ng-prism 22.6 is out. If you haven't come across it yet: ng-prism is a component lab for Angular libraries, a Storybook alternative without story files. You put a @Showcase decorator on a component, the TypeScript compiler picks up inputs, outputs and types at build time, and the components render in the same document as the styleguide, without an iframe. The full tour https://dev.to/alexanderspies/what-an-angular-native-storybook-alternative-actually-looks-like-3jm3 has the details. The biggest change in this release is a new concept next to variants, called states. Besides that there's a Claude Code plugin for projects that use ng-prism, watch rebuilds that went from about 450 ms to about 60 ms, a few bug fixes and some deprecations ahead of version 23. In 22.5 I added pseudo to variants. pseudo: { hover: '.btn' } puts the button into :hover while the variant is shown, using the component's own CSS. That worked, and pretty quickly the button showcase in the demo looked like this: variants: { name: 'Filled', inputs: { variant: 'filled', label: 'Filled' } }, { name: 'Outlined', inputs: { variant: 'outlined', label: 'Outlined' } }, // … { name: 'Hovered', inputs: { variant: 'filled' }, pseudo: { hover: '.btn' } }, { name: 'Pressed', inputs: { variant: 'filled' }, pseudo: { hover: '.btn', active: '.btn' } }, { name: 'Focus visible', inputs: { variant: 'outlined' }, pseudo: { 'focus-visible': '.btn' } }, , After a while this bugged me. These aren't really variants, they're the filled button again, just hovered. In the Playground they show up in the variant ribbon, and if you pick one, hover stays on while you play with the controls. They also only cover the combinations somebody wrote by hand. The filled button had a hover variant, the outlined one didn't. And hiding them from the ribbon wasn't an option either, because then they'd also disappear from the Overview and from the visual regression run, which is where they're actually useful. Hover, pressed and focus describe what is happening to a component, not what kind of component it is. So in 22.6 they get their own axis. A component now declares its states once, and every variant gets combined with them: @Showcase