Home

Awesome

Build nuget nuget GitHub stars last commit Discord

🏖️ makani

Headless UI Components for Blazor.

Note This repository is now archived. All future development will take place in Pure Blazor Components.

  1. Why Makani
  2. Getting Started
  3. Contributing
  4. Live Documentation
  5. Roadmap & Components

Why Makani?

Makani was born based on the need for lightweight, performant, and customizable UI components for .NET MAUI Blazor. Makani is built on the wonderful CSS framework, Tailwind CSS. While a simple theme will be included, the hope is that the community is able to customize the theme to fit their needs.

The main focus of the Makani library is to provide a powerful set of components that work flawlessly with .NET MAUI Blazor.

🏗️ Design Principles

⚠️ This library is currently under active development. You may experience bugs, breaking changes, or missing functionality.

🚀 Getting Started

Quick Start

1. Install via NuGet

dotnet add package Makani

2. Update your _Imports.razor

@using Makani

3. Add Makani

builder.Services.AddMakani();

4. Add Static Assets

<head>
    <link href="_content/Makani/dist/makani.css" rel="stylesheet" />
</head>

5. Build away!

<MkButton Color="MkColor.Primary">Hello world!</MkButton>

Using Syntax Highlighting

The syntax highlighting component is an optional feature. If you don't need this feature, skip this section and avoid loading the additional resources.

Makani is using Prism for syntax highlighting, so if you need this component, a few more steps are needed.

In your index.html, add only one of the following themes to the <head>...</head> section:

<!-- vscode-dark-plus is the one used in the Makani docs -->
<link href="_content/Makani/css/vscode-dark-plus.css" rel="stylesheet" />

<!--<link href="_content/Makani/css/atom-dark.css" rel="stylesheet" />
<link href="_content/Makani/css/coy.css" rel="stylesheet" />
<link href="_content/Makani/css/okaidia.css" rel="stylesheet" />
<link href="_content/Makani/css/tomorrow-night.css" rel="stylesheet" />-->

Add the following JS to the end of the <body>...</body> section:

<script src="_content/Makani/prism.js"></script>

Further Customization with Tailwind

At the core of this library is the ability to customize components using Tailwind CSS. For further customization, extra steps are required:

  1. Install the Tailwind CLI

In the wwwroot of your application, follow the Tailwind CLI installation

  1. Configure .razor and your index.html files in tailwind.config.js

Example

module.exports = {
  content: ["../**/*.razor", "../*.razor", "index.html"],
  theme: {
    extend: {},
  },
  plugins: [],
}
  1. Update your .csproj file to run the Tailwind CLI

Example

<Target Name="NpmInstall" BeforeTargets="BeforeBuild">
    <Exec WorkingDirectory="wwwroot" Command="npm install" />
</Target>

<Target Name="Tailwind" DependsOnTargets="NpmInstall" BeforeTargets="Build">
    <Exec WorkingDirectory="wwwroot" Command="npx tailwindcss -i app.css -o ./dist/styles.css" />
</Target>
  1. Add the CSS to your index.html
<head>
    <link href="dist/styles.css" rel="stylesheet" />
</head>

Performance / Benchmarks

Providing a lightweight and performant component library is a major goal of this project.

AreaTargetActualPassing
DLL Size200kb26.4kb✔️
JS Bundle Size10kb392b✔️
CSS Bundle Size50kb4.6kb✔️
Time to Interactive1s0.6s✔️
Total Blocking Time200ms140ms✔️
Cumulative Layout Shift00✔️
First Contentful Paint0.5s0.3s✔️
RAM UsageTBD
CPU UsageTBD
First Input DelayTBD

The targets specified are only initial estimates and are open to change over time based on a reasonable standard.

Sources

Accessibility

A UI component library isn't helpful if it isn't useful to everyone.

TBD

Contributing

We encourage you to contribute! People of all ages / occupations / experience are welcome.

Please read the Contribution Guidelines for how to proceed.