<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kishan hadiyal</title>
    <description>The latest articles on DEV Community by kishan hadiyal (@kishan_hadiyal_8cf48e733d).</description>
    <link>https://dev.to/kishan_hadiyal_8cf48e733d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4047522%2Fd50876a2-16a9-44ac-acd1-9e2a0e32867a.jpg</url>
      <title>DEV Community: kishan hadiyal</title>
      <link>https://dev.to/kishan_hadiyal_8cf48e733d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kishan_hadiyal_8cf48e733d"/>
    <language>en</language>
    <item>
      <title>Closing Angular's aesthetic gap</title>
      <dc:creator>kishan hadiyal</dc:creator>
      <pubDate>Sun, 26 Jul 2026 04:46:24 +0000</pubDate>
      <link>https://dev.to/kishan_hadiyal_8cf48e733d/closing-angulars-aesthetic-gap-1d26</link>
      <guid>https://dev.to/kishan_hadiyal_8cf48e733d/closing-angulars-aesthetic-gap-1d26</guid>
      <description>&lt;h2&gt;
  
  
  Closing Angular's aesthetic gap: building AxisUI, a signals-first component library
&lt;/h2&gt;

&lt;p&gt;If you've built an Angular product in the last two years, you've felt this. The libraries that redefined what "modern component design" looks like — shadcn/ui, Radix, Park UI — showed up for React and mostly stayed there. Angular got thin ports, abandoned ports, or nothing.&lt;/p&gt;

&lt;p&gt;So Angular teams keep making the same trade: adopt Angular Material and accept its Material-Design aesthetic everywhere, or wire up Tailwind plus a headless-primitive library by hand and absorb the cost of keeping fifty components visually consistent yourselves.&lt;/p&gt;

&lt;p&gt;I got tired of that trade, so I built the third option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AxisUI&lt;/strong&gt; is a UI component library for Angular 20: 100+ components, signals-first, standalone by default, styled with Tailwind v4 and OKLCH tokens, accessible to WCAG 2.2 AA — with the accessibility checks running in CI, not just claimed in a README. Every component is MIT.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://axisui-demo.pages.dev" rel="noopener noreferrer"&gt;https://axisui-demo.pages.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://axisui.dev" rel="noopener noreferrer"&gt;https://axisui.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storybook:&lt;/strong&gt; &lt;a href="https://axisui-storybook.pages.dev" rel="noopener noreferrer"&gt;https://axisui-storybook.pages.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;npm:&lt;/strong&gt; &lt;code&gt;@axisui-ng/angular&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What "Angular 20, done right" actually means
&lt;/h3&gt;

&lt;p&gt;No &lt;code&gt;NgModule&lt;/code&gt;. No &lt;code&gt;@Input()&lt;/code&gt;/&lt;code&gt;@Output()&lt;/code&gt; decorators. The whole library is built on the modern reactivity primitives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AxButtonComponent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@axisui-ng/angular&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;AxButtonComponent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`
    &amp;lt;ax-button variant="primary" size="md" (clickEvent)="save()"&amp;gt;
      Save changes
    &amp;lt;/ax-button&amp;gt;
  `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SettingsComponent&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Components use &lt;code&gt;input()&lt;/code&gt; / &lt;code&gt;output()&lt;/code&gt; / &lt;code&gt;model()&lt;/code&gt;, run &lt;code&gt;OnPush&lt;/code&gt; everywhere, and are zoneless-ready and SSR-safe — they work in Angular Universal and in both zoneless and Zone.js apps. Standalone means you import the component, not a module barrel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility is a test, not a promise
&lt;/h3&gt;

&lt;p&gt;Most libraries say "accessible." AxisUI runs &lt;code&gt;jest-axe&lt;/code&gt; against every component in CI, in three axes: LTR and RTL, and light and dark. A component that regresses an ARIA contract or a contrast ratio fails the build. There are 150 test suites behind the library doing this and more.&lt;/p&gt;

&lt;p&gt;That's the part I most want scrutinized — if you find an a11y gap, that's a bug report I want.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install only what you ship
&lt;/h3&gt;

&lt;p&gt;AxisUI is published as per-category packages behind one umbrella. Want everything, wired up with Tailwind and tokens in one step?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng add @axisui-ng/angular
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Want just a button and forms in an existing app?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i @axisui-ng/buttons @axisui-ng/forms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A consumer who only imports a button ships a button. The category split (&lt;code&gt;buttons&lt;/code&gt;, &lt;code&gt;forms&lt;/code&gt;, &lt;code&gt;data&lt;/code&gt;, &lt;code&gt;overlays&lt;/code&gt;, &lt;code&gt;navigation&lt;/code&gt;, &lt;code&gt;charts&lt;/code&gt;, &lt;code&gt;feedback&lt;/code&gt;, &lt;code&gt;layout&lt;/code&gt;, and more) keeps that honest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Theming: Tailwind v4 + OKLCH
&lt;/h3&gt;

&lt;p&gt;Theming lives in a Tailwind v4 &lt;code&gt;@theme&lt;/code&gt; block as OKLCH tokens — a light/dark cascade, density presets, and industry palettes. Because it's OKLCH, lightness is perceptually even across hues, so a generated palette doesn't have the muddy mid-tones you get shifting HSL. The charts are dependency-free SVG themed from the same &lt;code&gt;--color-chart-*&lt;/code&gt; tokens — no charting library in your bundle.&lt;/p&gt;

&lt;h3&gt;
  
  
  It composes into real products
&lt;/h3&gt;

&lt;p&gt;The thing I'm proudest of isn't any single component — it's that they compose. The demo ships eight full application templates built entirely from AxisUI: analytics, banking, CRM, healthcare, logistics, automotive, and government dashboards, plus a data-grid workbench, auth and landing pages, a ⌘K command palette, and a live theme configurator.&lt;/p&gt;

&lt;p&gt;Click through them: &lt;a href="https://axisui-demo.pages.dev" rel="noopener noreferrer"&gt;https://axisui-demo.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it's at, honestly
&lt;/h3&gt;

&lt;p&gt;It's new, and it's mostly one person's work. The API surface is stable enough that I've built those eight templates on it without fighting it, but it hasn't been battle-tested across hundreds of teams yet. That's exactly why I'm posting: I want Angular developers to try it, break it, and tell me where it falls short.&lt;/p&gt;

&lt;p&gt;If it saves you from the Material-or-hand-roll trade even once, it did its job.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try the demo → &lt;a href="https://axisui-demo.pages.dev" rel="noopener noreferrer"&gt;https://axisui-demo.pages.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Star / file issues → &lt;a href="https://github.com/Kishan009/axisui-ng" rel="noopener noreferrer"&gt;https://github.com/Kishan009/axisui-ng&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ng add @axisui-ng/angular&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What would make you switch a real project to it? I'm reading every reply.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>typescript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
