<?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: Lubomír Blažek</title>
    <description>The latest articles on DEV Community by Lubomír Blažek (@lubomirblazekcz).</description>
    <link>https://dev.to/lubomirblazekcz</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F229972%2F4c886625-2ee2-4caf-ba48-bee10b420441.jpg</url>
      <title>DEV Community: Lubomír Blažek</title>
      <link>https://dev.to/lubomirblazekcz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lubomirblazekcz"/>
    <language>en</language>
    <item>
      <title>Announcing Winduum 1.0 - Framework agnostic component library for TailwindCSS</title>
      <dc:creator>Lubomír Blažek</dc:creator>
      <pubDate>Thu, 29 Feb 2024 14:28:18 +0000</pubDate>
      <link>https://dev.to/lubomirblazekcz/announcing-winduum-10-framework-agnostic-component-library-for-tailwindcss-4gp1</link>
      <guid>https://dev.to/lubomirblazekcz/announcing-winduum-10-framework-agnostic-component-library-for-tailwindcss-4gp1</guid>
      <description>&lt;p&gt;The question inevitably arises: Why introduce yet another UI component library into the mix? Simply because Winduum is different in a few areas than the others. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; It focuses on web standards, accessibility and minimum javascript&lt;br&gt;
&lt;strong&gt;2.&lt;/strong&gt; It's progressive, uses modern features and standards&lt;br&gt;
&lt;strong&gt;3.&lt;/strong&gt; It's framework-agnostic, so it can be used in any scenario&lt;br&gt;
&lt;strong&gt;4.&lt;/strong&gt; It's source code is plain CSS and JS, so it can be also used without a build step&lt;/p&gt;

&lt;p&gt;In today's CSS frameworks, you only have a few choices when it comes to a framework-agnostic UI component library for &lt;strong&gt;TailwindCSS&lt;/strong&gt; that also leverages &lt;a href="https://tailwindcss.com/docs/reusing-styles#extracting-classes-with-apply"&gt;semantic class-names&lt;/a&gt;; for example great projects like &lt;strong&gt;daisyUI&lt;/strong&gt; or &lt;strong&gt;RippleUI&lt;/strong&gt;. However, both are heavily reliant on &lt;code&gt;@apply&lt;/code&gt;, which is not standardized plain CSS.&lt;/p&gt;

&lt;p&gt;This is why our approach is a little different. &lt;strong&gt;Winduum&lt;/strong&gt; encourages writting components in &lt;strong&gt;plain CSS&lt;/strong&gt; or other (pre/post)-processors and using utility classes to enhance the components.&lt;/p&gt;

&lt;p&gt;Yes it's kind of against the main principle of TailwindCSS to use sematic classes, but sematic classes and utility classes can be a great combo!&lt;/p&gt;

&lt;p&gt;As a CSS framework &lt;strong&gt;Winduum&lt;/strong&gt; focuses on beautifully styled accessible components written in plain standardized CSS; components you can extend with your own components and use them in any framework, even as web components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TailwindCSS&lt;/strong&gt; is optional, but recommended. Winduum provides a &lt;strong&gt;plugin&lt;/strong&gt; with a bunch of new handy utility classes. However, you don't need to use utility framework at all or you can choose an alternative such as UnoCSS. The choice is up to you!&lt;/p&gt;
&lt;h2&gt;
  
  
  Themes, color-mix and P3 Color Gamut
&lt;/h2&gt;

&lt;p&gt;Winduum embraces advanced color techniques, featuring the innovative &lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix"&gt;color-mix()&lt;/a&gt;&lt;/strong&gt; and support of the P3 color gamut. This ensures a vibrant and visually engaging user experience on supported devices.&lt;/p&gt;

&lt;p&gt;Colors can be defined in any color space - &lt;code&gt;rgb&lt;/code&gt;, &lt;code&gt;hsl&lt;/code&gt;, &lt;code&gt;oklch&lt;/code&gt;, whichever you prefer. With &lt;code&gt;color-mix&lt;/code&gt;, you can easily change the opacity too.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;color-mix&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="nt"&gt;in&lt;/span&gt; &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--space&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; 
  &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--color-primary&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;calc&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="err"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%),&lt;/span&gt; 
  &lt;span class="nt"&gt;var&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;--tw-bg-mix&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Learn more about theming on &lt;a href="https://winduum.dev/docs/themes"&gt;winduum.dev/docs/themes&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Accent Color
&lt;/h2&gt;

&lt;p&gt;The idea is that you should be able to set accent color via &lt;code&gt;accent-color&lt;/code&gt; CSS property. It is &lt;a href="https://github.com/w3c/csswg-drafts/issues/5900"&gt;discussed&lt;/a&gt; that there should be access to the color value of this property, e.g. via &lt;code&gt;AccentColor&lt;/code&gt; or &lt;code&gt;AccentColorText&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Most of the components are using this idea via &lt;code&gt;--color-accent&lt;/code&gt; and &lt;code&gt;--color-accent-foreground&lt;/code&gt; as an alternative for their accent color.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.accent-primary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--color-accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--color-primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;--color-accent-foreground&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--color-primary-foreground&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;accent-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--color-accent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, this way you don't have to change &lt;code&gt;background-color&lt;/code&gt; property for each component's color variant, you just change the accent color.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modern CSS Features
&lt;/h2&gt;

&lt;p&gt;Staying ahead of the curve, Winduum leverages modern CSS features, allowing you to harness the power of the latest specifications and improve overall styling capabilities. All of these are supported in current browsers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CSS Properties&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS Logical Properties&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS Nesting&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern pseudo selectors&lt;/strong&gt; such as &lt;code&gt;:where&lt;/code&gt;, &lt;code&gt;:is&lt;/code&gt; and &lt;code&gt;:has&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modern CSS reset&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low specifity or layers&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS color-mix&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Modern CSS Reset
&lt;/h2&gt;

&lt;p&gt;Winduum comes equipped with a modern CSS reset, providing a clean slate for consistent styling across various browsers and ensuring a solid foundation for customization.&lt;/p&gt;

&lt;p&gt;The main difference from other resets is using &lt;code&gt;all: unset&lt;/code&gt; which resets most of the styles. As a result, you have a clean slate and are free to style your components.&lt;/p&gt;

&lt;p&gt;Learn more on &lt;a href="https://winduum.dev/docs/layout/reset"&gt;winduum.dev/docs/layout/reset&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Accessible Components Based on Web Standards
&lt;/h2&gt;

&lt;p&gt;Most of current libraries only reinvent the wheel and create new accessible components from the ground. While this can be good in some cases, in others it comes with bunch of overhead that is not really needed in others.&lt;/p&gt;

&lt;p&gt;Do you need to build an easy product website? Perhaps in these scenarios you don't need to use a heavily reactive framework such as &lt;strong&gt;React&lt;/strong&gt; or &lt;strong&gt;Vue&lt;/strong&gt; with &lt;strong&gt;Radix&lt;/strong&gt; primitives. And don't get me wrong, I love libraries such as &lt;strong&gt;shadcn/ui&lt;/strong&gt;. But these are often the better choice for more complex projects. Does your basic website with one contact form really need a reinvented accessible functionality of a checkbox as a button?&lt;/p&gt;

&lt;p&gt;You can choose something lighter such as &lt;strong&gt;&lt;a href="https://astro.build/"&gt;Astro&lt;/a&gt;&lt;/strong&gt; and leverage web standards as &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox"&gt;input[type=checkbox]&lt;/a&gt;, &lt;a href="https://docs.astro.build/en/guides/view-transitions/"&gt;view-transitions&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog"&gt;dialog&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details"&gt;details&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll_snap"&gt;scroll-snap&lt;/a&gt; etc.&lt;/p&gt;

&lt;p&gt;And suddenly you can have a site that passes all &lt;strong&gt;&lt;a href="https://web.dev/explore/learn-core-web-vitals"&gt;Core Web Vitals&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Winduum&lt;/strong&gt; is all about web standards that can be used in any framework. And here are some components as an example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/components/dialog.html"&gt;Dialog&lt;/a&gt;&lt;/strong&gt; - leverages &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog"&gt;dialog&lt;/a&gt; with minimum javascript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/components/carousel.html"&gt;Carousel&lt;/a&gt;&lt;/strong&gt; - leverages &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll_snap"&gt;scroll-snap&lt;/a&gt; with minimum javascript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/components/details.html"&gt;Details&lt;/a&gt;&lt;/strong&gt; - leverages &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details"&gt;details&lt;/a&gt; with minimum javasript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/components/drawer.html"&gt;Drawer&lt;/a&gt;&lt;/strong&gt; - leverages &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll_snap"&gt;scroll-snap&lt;/a&gt; with minimum javascript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/components/form.html"&gt;Form&lt;/a&gt;&lt;/strong&gt; - leverages &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/checkValidity"&gt;checkValidity&lt;/a&gt; with miminum javascript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/components/compare.html"&gt;Compare&lt;/a&gt;&lt;/strong&gt; leverages &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range"&gt;input[type=range]&lt;/a&gt; with minimum javascript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Javascript API primitives are heavily customizable and can be used headless in any project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Form control for everything
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/control.html"&gt;Control&lt;/a&gt;&lt;/strong&gt; component literally supports all possible input types, even &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/color"&gt;type=color&lt;/a&gt;! Thanks to &lt;code&gt;:has&lt;/code&gt; support, you can use one sematic class &lt;code&gt;ui-control&lt;/code&gt; for every input type, textarea or select. If you need a basic date picker, time picker or color picker, all of these are heavily standardized in modern browsers. &lt;strong&gt;Winduum&lt;/strong&gt; has a form component for any usage you might possibly need.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ui-control"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"color"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"color"&lt;/span&gt; &lt;span class="na"&gt;oninput=&lt;/span&gt;&lt;span class="s"&gt;"this.nextElementSibling.textContent = this.value"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"color"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;#ffffff&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/control.html"&gt;Control&lt;/a&gt;&lt;/strong&gt; - including &lt;a href="https://winduum.dev/docs/ui/control.html#floating-label"&gt;floating label&lt;/a&gt; and &lt;a href="https://winduum.dev/docs/ui/control.html#icon"&gt;icon&lt;/a&gt; variants&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/range.html"&gt;Range&lt;/a&gt;&lt;/strong&gt; - for accessible range sliders, including &lt;a href="https://winduum.dev/docs/ui/range.html#vertical"&gt;vertical&lt;/a&gt; and &lt;a href="https://winduum.dev/docs/ui/range.html#multi"&gt;multi&lt;/a&gt; variants!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/check.html"&gt;Check&lt;/a&gt;&lt;/strong&gt; - for accessible checkboxes and radios&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/switch.html"&gt;Switch&lt;/a&gt;&lt;/strong&gt; - for switch things on and off as checkbox or radio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/color.html"&gt;Color&lt;/a&gt;&lt;/strong&gt; - in case you need to select a color as a checkbox or radio&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/rating.html"&gt;Rating&lt;/a&gt;&lt;/strong&gt; - an accessible checkbox group for rating purposes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://winduum.dev/docs/ui/button.html"&gt;Button&lt;/a&gt;&lt;/strong&gt; - rich button with multiple variants to submit your forms!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  New Tailwind CSS Utilities
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Winduum&lt;/strong&gt; includes a TailwindCSS plugin with some handy new utilities. Here are some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS properties&lt;/strong&gt; - the plugin extends the tailwind config with CSS properties for colors, fontFamily, fontWeight, ease, zIndex, fontSize, spacing, borderRadius etc so that your CSS and TailwindCSS are more in pair. See default CSS properties in &lt;a href="https://github.com/winduum/winduum/tree/main/src/base/config"&gt;cofing.css&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;accentColor&lt;/strong&gt; - adds a new &lt;code&gt;--color-accent&lt;/code&gt; and &lt;code&gt;--color-accent-foreground&lt;/code&gt; to &lt;code&gt;accent-&lt;/code&gt; class for better accent support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;divideGap&lt;/strong&gt; - easier gaps for the &lt;a href="https://tailwindcss.com/docs/divide-width"&gt;divide&lt;/a&gt; utility class&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn more about utilities on &lt;a href="https://winduum.dev/docs/"&gt;winduum.dev&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  New progressive aproach at containers
&lt;/h1&gt;

&lt;p&gt;Winduum provides a new &lt;code&gt;grid-cols-container&lt;/code&gt; utility class which leverages CSS &lt;code&gt;grid&lt;/code&gt; and is inspired by &lt;a href="https://youtu.be/c13gpBrnGEw?si=FGoMS9FnWEOYohPi"&gt;Kevin Powell&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this you can leverage CSS grid for better container styling with less markup.&lt;/p&gt;

&lt;p&gt;Learn more at &lt;a href="https://winduum.dev/docs/utilities/container.html"&gt;winduum.dev/docs/utilities/container&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Extended Media Breakpoints
&lt;/h2&gt;

&lt;p&gt;The smalest breakpoint in &lt;strong&gt;TailwindCSS&lt;/strong&gt; is &lt;code&gt;sm&lt;/code&gt; at &lt;code&gt;640px&lt;/code&gt;, which doesn't really cover a lot of mobile devices. And the biggest is &lt;code&gt;2xl&lt;/code&gt; at &lt;code&gt;1536px&lt;/code&gt;, which on other hand doesn't cover most of big displays. Winduum has its own scale reaching from &lt;code&gt;360px&lt;/code&gt; to &lt;code&gt;2528px&lt;/code&gt; to cover all possible resolutions and all defined in &lt;strong&gt;em&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;xs&lt;/strong&gt; - 360px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sm&lt;/strong&gt; - 416px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;md&lt;/strong&gt; - 768px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lg&lt;/strong&gt; - 960px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xl&lt;/strong&gt; - 1216px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2xl&lt;/strong&gt; - 1312px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3xl&lt;/strong&gt; - 1408px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;4xl&lt;/strong&gt; - 1600px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xxl&lt;/strong&gt; - 2016px&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2xxl&lt;/strong&gt; - 2528px&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Modular and Customizable
&lt;/h2&gt;

&lt;p&gt;Take the code and copy and paste it to your project, or import it from npm and customize it with CSS properties!&lt;/p&gt;

&lt;p&gt;All is really heavily modular and customizable. All components are sorted into variants in single files. So you can cherry-pick only what you want for your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Framework-Agnostic CSS Library
&lt;/h2&gt;

&lt;p&gt;As has already been mentioned, Winduum is framework-agnostic by design so that you can create your own components using your preferred framework. Javascript primitives can be also adapted in any framework.&lt;/p&gt;

&lt;p&gt;If there is interest, simple pre-built components may be developed for popular frameworks. Currently, only &lt;a href="https://github.com/winduum/winduum-vue"&gt;winduum-vue&lt;/a&gt; and &lt;a href="https://github.com/winduum/winduum-react"&gt;winduum-react&lt;/a&gt; are in the process of development and most components have usage and installation examples in the docs. Want to help? We're open to pull requests!&lt;/p&gt;

&lt;p&gt;You can also see various examples in many frameworks at &lt;a href="https://winduum.dev/docs/#trying-winduum-online"&gt;Trying Winduum Online&lt;/a&gt; section in the docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compatible with Other UI Libraries
&lt;/h2&gt;

&lt;p&gt;Since Winduum is written with standards in mind, it can also be easily adapted with existing solution such as &lt;strong&gt;shadcn/ui&lt;/strong&gt; or add more complex functionality with &lt;strong&gt;Radix primitives&lt;/strong&gt; or &lt;strong&gt;Headless UI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It uses a similiar &lt;a href="https://ui.shadcn.com/docs/theming#list-of-variables"&gt;variables&lt;/a&gt; naming pattern as &lt;strong&gt;shadcn/ui&lt;/strong&gt; in order for you to easily add more complex components to your project when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anything else?
&lt;/h2&gt;

&lt;p&gt;Is this all? Not in the slightest! Visit &lt;a href="https://winduum.dev/"&gt;winduum.dev&lt;/a&gt; to see everything Winduum has to offer! Check out the source code at &lt;a href="https://github.com/winduum/winduum"&gt;GitHub&lt;/a&gt; and give us a star if you like it! We are also launching the project on &lt;a href="https://www.producthunt.com/posts/winduum"&gt;ProductHunt&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;This was a long road of a two-year, mostly free time, development as a modest small-side project. Also big thanks to  &lt;a href="https://www.newlogic.cz/"&gt;Newlogic Digital&lt;/a&gt; which backed the project. &lt;/p&gt;

&lt;p&gt;I'm glad that I can say that &lt;strong&gt;Winduum&lt;/strong&gt; is now feature complete in &lt;strong&gt;1.0&lt;/strong&gt; version!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Announcing Vituum - Template engines and more in Vite</title>
      <dc:creator>Lubomír Blažek</dc:creator>
      <pubDate>Tue, 30 Aug 2022 14:37:44 +0000</pubDate>
      <link>https://dev.to/lubomirblazekcz/announcing-vituum-template-engines-and-more-in-vite-377k</link>
      <guid>https://dev.to/lubomirblazekcz/announcing-vituum-template-engines-and-more-in-vite-377k</guid>
      <description>&lt;p&gt;For the last months, we at &lt;a href="https://www.newlogic.cz"&gt;Newlogic Digital&lt;/a&gt; have been working on our own open-source project built around Vite. &lt;/p&gt;

&lt;p&gt;It's called Vituum, combination of the words &lt;strong&gt;Vite&lt;/strong&gt; &lt;em&gt;(French word for "quick")&lt;/em&gt; and &lt;strong&gt;Tuum&lt;/strong&gt; &lt;em&gt;(Estonian word for "core")&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give it a try!
&lt;/h2&gt;

&lt;p&gt;If you want to try it all out right now, visit the &lt;a href="https://vituum.dev/guide/#trying-vituum-online"&gt;Trying Vituum Online&lt;/a&gt; section on the official website. Here you can try lots of online examples right away on &lt;strong&gt;StackBlitz&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what is Vituum?
&lt;/h2&gt;

&lt;p&gt;It's a small wrapper around Vite which includes predefined config and integrations. The main goal is to add some additional features on top of Vite.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The primary focus is on easy &lt;strong&gt;backend integration&lt;/strong&gt; but can be used for anything.&lt;/li&gt;
&lt;li&gt;Modified build command &lt;code&gt;vituum build&lt;/code&gt; is used, which supports building of template engine files ending with ext-name such as &lt;code&gt;.twig&lt;/code&gt;, &lt;code&gt;.pug&lt;/code&gt; or &lt;code&gt;.latte&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like a Vite &lt;strong&gt;starter pack&lt;/strong&gt; ready to go.&lt;/p&gt;

&lt;p&gt;It's also a bridge for developers who still depend on &lt;strong&gt;template engines&lt;/strong&gt; or older front-end tools like &lt;strong&gt;gulp&lt;/strong&gt; or &lt;strong&gt;grunt&lt;/strong&gt; and want to migrate to &lt;strong&gt;Vite&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Template engines
&lt;/h3&gt;

&lt;p&gt;Today frontend tools are awesome, but the good old template engines don't get enough love anymore.&lt;/p&gt;

&lt;p&gt;Vituum tries to change that with support for template engines in Vite. Gotta go fast with the templates!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Twig&lt;/strong&gt;, &lt;strong&gt;Liquid&lt;/strong&gt;, &lt;strong&gt;Pug&lt;/strong&gt;, &lt;strong&gt;Nunjucks&lt;/strong&gt;, &lt;strong&gt;Handlebars&lt;/strong&gt;, &lt;strong&gt;Latte&lt;/strong&gt; - there are a bunch of them!&lt;/p&gt;

&lt;p&gt;Template engines are great for fast prototyping and preparing templates fast for backend integrations like &lt;strong&gt;Symfony&lt;/strong&gt;, &lt;strong&gt;Laravel&lt;/strong&gt; or &lt;strong&gt;Nette&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Learn more about template engines at &lt;a href="https://vituum.dev/guide/template-engines.html"&gt;vituum.dev&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-page support
&lt;/h3&gt;

&lt;p&gt;Vituum makes it easy to use multiple &lt;code&gt;.html&lt;/code&gt; files in &lt;code&gt;src/views&lt;/code&gt; directory out of the box. Even with nesting.&lt;/p&gt;

&lt;p&gt;You can use this to prototype fast without the need to change anything in the config.&lt;/p&gt;

&lt;p&gt;You can even enhance this with &lt;strong&gt;PostHTML&lt;/strong&gt; syntax like &lt;code&gt;&amp;lt;include&amp;gt;&lt;/code&gt; to include small html components or use other &lt;a href="https://vituum.dev/guide/template-engines.html"&gt;template engines&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project structure
&lt;/h3&gt;

&lt;p&gt;Vituum has a pre-defined optional structure for your project files. You can always change the structure to your own liking via &lt;a href="https://vituum.dev/config/main-options#input"&gt;config&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📁 &lt;strong&gt;public&lt;/strong&gt; - place for static files and dist files&lt;/li&gt;
&lt;li&gt;📁 &lt;strong&gt;src&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;📁 &lt;strong&gt;assets&lt;/strong&gt; - your static files as &lt;code&gt;.png&lt;/code&gt;, &lt;code&gt;.svg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📁 &lt;strong&gt;data&lt;/strong&gt; - your &lt;code&gt;.json&lt;/code&gt; data used in templates&lt;/li&gt;
&lt;li&gt;📁 &lt;strong&gt;emails&lt;/strong&gt; - your email templates&lt;/li&gt;
&lt;li&gt;📁 &lt;strong&gt;scripts&lt;/strong&gt; - your script files as &lt;code&gt;.js&lt;/code&gt;, &lt;code&gt;.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📁 &lt;strong&gt;styles&lt;/strong&gt; - your styles files as &lt;code&gt;.css&lt;/code&gt;, &lt;code&gt;.scss&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📁 &lt;strong&gt;templates&lt;/strong&gt; - your template files as &lt;code&gt;.twig&lt;/code&gt;, &lt;code&gt;.latte&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📁 &lt;strong&gt;views&lt;/strong&gt; - your pages as &lt;code&gt;.html&lt;/code&gt;, you can also nest and define page as &lt;code&gt;.json&lt;/code&gt; or &lt;code&gt;.twig&lt;/code&gt;, &lt;code&gt;.latte&lt;/code&gt; and other&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Imports
&lt;/h3&gt;

&lt;p&gt;In vanilla &lt;code&gt;css&lt;/code&gt; and &lt;code&gt;js&lt;/code&gt; you can import one file at a time. Globs like &lt;code&gt;*.css&lt;/code&gt; or &lt;code&gt;*.js&lt;/code&gt; are not possible.&lt;/p&gt;

&lt;p&gt;To help import multiple files automatically, &lt;strong&gt;Vituum&lt;/strong&gt; uses an internal plugin which adds all file imports in the directories into a single file.&lt;/p&gt;

&lt;p&gt;This is great if you have a complex project with a lot of styles or script files.&lt;/p&gt;

&lt;p&gt;You can learn more about this at &lt;a href="https://vituum.dev/guide/features.html#%E2%AC%87%EF%B8%8F-imports"&gt;vituum.dev&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Emails
&lt;/h3&gt;

&lt;p&gt;Writing email templates was always tricky. &lt;strong&gt;Vituum&lt;/strong&gt; tries to make it easier for you.&lt;/p&gt;

&lt;p&gt;You can add &lt;a href="https://vituum.dev/guide/integrations#juice-vituum-juice"&gt;@vituum/juice&lt;/a&gt; integration and then write styles in &lt;strong&gt;PostCSS&lt;/strong&gt; or any &lt;strong&gt;pre-processor&lt;/strong&gt; you want. Everything will be inlined to html via &lt;strong&gt;&lt;a href="https://github.com/Automattic/juice"&gt;Juice&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Html can be written with any &lt;a href="https://vituum.dev/guide/template-engines"&gt;template engine&lt;/a&gt;, including &lt;strong&gt;PostHTML&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can even test sending your email via &lt;code&gt;vituum send&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;You can learn more about this at &lt;a href="https://vituum.dev/guide/features.html#%E2%9C%89%EF%B8%8F-emails"&gt;vituum.dev&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrations
&lt;/h3&gt;

&lt;p&gt;All modules can be optionally added using &lt;strong&gt;Integrations API&lt;/strong&gt;. Using this API, you can even write your own command and then run it via &lt;code&gt;vituum my-command&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Among our integrations is also popular &lt;strong&gt;TailwindCSS&lt;/strong&gt;. You can add it easily via &lt;code&gt;vite.config.js&lt;/code&gt;, &lt;code&gt;tailwind.config.cjs&lt;/code&gt; and you can start using this library to the fullest without complicated configuration.&lt;/p&gt;

&lt;p&gt;We wrote our own integration at Newlogic - &lt;a href="https://github.com/newlogic-digital/core"&gt;@newlogic-digital/core&lt;/a&gt; with pre-prepared config, integrations and extensions for templating engines for easy use on our projects.&lt;/p&gt;

&lt;p&gt;You can learn more about integrations at &lt;a href="https://vituum.dev/guide/integrations.html"&gt;vituum.dev&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Like it?
&lt;/h2&gt;

&lt;p&gt;Vituum is also great as a &lt;strong&gt;static site generator&lt;/strong&gt;. However, if you are looking for a complete solution for purely static pages, we definitely recommend trying &lt;a href="https://astro.build/"&gt;Astro&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The entire project has complete documentation on &lt;a href="https://vituum.dev"&gt;vituum.dev&lt;/a&gt; and you can also follow it on &lt;strong&gt;Twitter&lt;/strong&gt; under &lt;a href="https://twitter.com/vituum_dev"&gt;@vituum_dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to &lt;strong&gt;support&lt;/strong&gt; the project, please &lt;strong&gt;give us a star&lt;/strong&gt; on &lt;a href="https://github.com/vituum/vituum"&gt;GitHub&lt;/a&gt;. And if you really want to support the project a lot, you can also become our partner and support further development financially. In that case, contact me at &lt;a href="//mailto:lubomir.blazek@newlogic.cz"&gt;lubomir.blazek@newlogic.cz&lt;/a&gt; and your logo can appear on the project pages.&lt;/p&gt;

&lt;p&gt;Also, any help whether by adding &lt;strong&gt;issues&lt;/strong&gt; or &lt;strong&gt;pull requests&lt;/strong&gt; is much welcome!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iAqoiWT1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/odjjh6dwlncxqgceg1vo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iAqoiWT1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/odjjh6dwlncxqgceg1vo.jpg" alt="Vituum" width="750" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>vite</category>
      <category>vituum</category>
    </item>
  </channel>
</rss>
