npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@kitiumai/ui

v1.0.6

Published

Framework-agnostic UI component library built with Web Components. Web Components, React, Angular, Vue, Svelte, and React Native support.

Readme

Kitium UI

A next-generation, truly universal UI component library that works seamlessly across ALL platforms: Web (React, Angular, Vue, Svelte), React Native, and Flutter with a consistent API and zero runtime detection overhead!

🚀 Key Features

  • 🌍 Universal: Single codebase for Web, React Native, and Flutter
  • 🎯 Framework Agnostic: Web Components work with any framework
  • ⚡ Native Performance: True native components (no WebView overhead)
  • 🔄 Consistent API: Identical component interface across all platforms
  • 🎨 Unified Configuration: Single config file controls all platforms
  • 🤖 AI-Powered Features: Smart suggestions, auto-optimization, component scoring
  • 🎮 Gamification: Achievements, learning paths, and community engagement
  • 🎯 Small Bundle: ~15KB gzipped with perfect tree-shaking
  • ♿ Accessibility: WCAG 2.1 AA compliant with built-in ARIA support
  • 🔒 Security: XSS prevention, CSP compliant, input sanitization
  • 📱 Framework Support: React, Angular, Vue 3, Svelte, Web Components, React Native, Flutter
  • 🧪 Well Tested: >90% code coverage with unit & e2e tests
  • 📚 Storybook: Interactive component documentation
  • ✨ TypeScript First: 100% type-safe with strict mode enabled
  • 🎪 Zero Config: Smart defaults with customizable theming

Installation

npm install @kitiumai/ui
# or
yarn add @kitiumai/ui
# or
pnpm add @kitiumai/ui

Quick Start

Vanilla JavaScript / HTML

<!DOCTYPE html>
<html>
  <head>
    <script type="module">
      import '@kitiumai/ui';
    </script>
  </head>
  <body>
    <kt-button variant="primary" size="medium"> Click me </kt-button>

    <kt-input label="Email" type="email" placeholder="Enter your email" required></kt-input>

    <kt-card hoverable elevated>
      <div slot="header">Card Title</div>
      <p>This is the card content</p>
      <div slot="footer">Card Footer</div>
    </kt-card>
  </body>
</html>

React (Universal Components)

Use the same components that work on Web AND React Native:

import { KtButton, KtInput, KtCard } from '@kitiumai/ui';

function App() {
  return (
    <div>
      {/* These components automatically adapt to your platform! */}
      <KtButton variant="primary" onPress={() => console.log('Works on Web & React Native!')}>
        Universal Button
      </KtButton>

      <KtInput
        label="Username"
        placeholder="Enter username"
        onChangeText={(text) => console.log(text)}
      />

      <KtCard header="Card Title" footer="Card Footer" elevated>
        Card content
      </KtCard>
    </div>
  );
}

React Native: The same code above works in React Native without any changes! The components automatically detect the platform and use native React Native components.

Angular

// app.module.ts
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import '@kitiumai/ui';

@NgModule({
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
  // ... other config
})
export class AppModule {}
<!-- app.component.html -->
<kt-button variant="primary" (kt-click)="handleClick($event)"> Click me </kt-button>

<kt-input label="Email" type="email" (kt-input)="handleInput($event)"></kt-input>

Vue 3

<template>
  <div>
    <kt-button variant="primary" @kt-click="handleClick"> Click me </kt-button>

    <kt-input label="Username" v-model="username" @kt-input="handleInput" />
  </div>
</template>

<script setup>
import { ref } from 'vue';
import '@kitiumai/ui';

const username = ref('');

const handleClick = (e) => {
  console.log('Clicked', e.detail);
};

const handleInput = (e) => {
  username.value = e.detail.value;
};
</script>

🏗️ Architecture Overview

Kitium UI uses a layered architecture with Web Components as the single source of truth:

┌─────────────────────────────────────────────┐
│         Consumer Application                 │
│    (React/Angular/Vue/Svelte/Web)           │
└────────────────┬────────────────────────────┘
                 │
    Framework-specific imports
                 │
                 ▼
    ┌────────────────────────────┐
    │  Framework Wrapper Layer   │
    │  • Props ↔ Events adapter  │
    │  • Event handlers          │
    │  • Platform detection      │
    └────────────┬───────────────┘
                 │
    Web Component core (LitElement)
                 │
                 ▼
    ┌────────────────────────────┐
    │  Design System Layer       │
    │  • CSS Variables           │
    │  • Theme Management        │
    │  • Design Tokens           │
    └────────────────────────────┘

Framework-Specific Imports (Optimal)

// Import from framework-specific entry points for zero runtime overhead
import { Button } from '@kitium/ui/react'; // React optimized
import { Button } from '@kitium/ui/angular'; // Angular optimized
import { Button } from '@kitium/ui/vue'; // Vue optimized
import Button from '@kitium/ui/svelte'; // Svelte optimized
import { Button } from '@kitium/ui/web'; // Web Components

// Universal import (auto-detection, slight runtime overhead)
import { Button } from '@kitium/ui';

📦 Components

Button

A versatile button component with multiple variants and states.

<kt-button variant="primary" size="medium">Primary Button</kt-button>
<kt-button variant="secondary" size="small" disabled>Disabled</kt-button>
<kt-button variant="success" loading>Loading...</kt-button>

Properties:

  • variant: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'
  • size: 'small' | 'medium' | 'large'
  • disabled: boolean
  • loading: boolean
  • full-width: boolean
  • type: 'button' | 'submit' | 'reset'

Events:

  • kt-click: Fired when button is clicked

Input

A flexible input component with built-in validation.

<kt-input
  label="Email"
  type="email"
  placeholder="Enter email"
  required
  helper-text="We'll never share your email"
></kt-input>

Properties:

  • label: string
  • value: string
  • type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'
  • placeholder: string
  • size: 'small' | 'medium' | 'large'
  • disabled: boolean
  • required: boolean
  • readonly: boolean
  • helper-text: string
  • pattern: string
  • minlength: number
  • maxlength: number

Events:

  • kt-input: Fired on value change
  • kt-focus: Fired when input receives focus
  • kt-blur: Fired when input loses focus
  • kt-validation: Fired when validation state changes

Methods:

  • validateInput(): Programmatically validate the input

Card

A container component for grouping related content.

<kt-card variant="primary" hoverable elevated>
  <div slot="header">Card Title</div>
  <p>Card content goes here</p>
  <div slot="footer">Footer content</div>
</kt-card>

Properties:

  • variant: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'
  • hoverable: boolean
  • elevated: boolean
  • clickable: boolean
  • padding: 'default' | 'none' | 'compact' | 'spacious'

Slots:

  • header: Card header content
  • default: Card body content
  • footer: Card footer content
  • media: Media content (images, videos)

Events:

  • kt-card-click: Fired when card is clicked (only if clickable is true)

Configuration (NEW!)

Kitium UI features a unified configuration system where one config file controls everything across all platforms (Web, React Native, Flutter).

Quick Start - Minimal Config

Create kitium.config.js in your project root:

// Absolute minimum - AI does the rest!
export default {
  theme: {
    colors: {
      primary: '#1976D2',
    },
  },
};

That's it! From this single color, Kitium automatically generates:

  • ✅ Complete color palette (50-900 shades for all colors)
  • ✅ Semantic colors (secondary, success, error, warning, info)
  • ✅ Dark mode theme
  • ✅ Typography scale
  • ✅ Spacing system
  • ✅ Border radius values
  • ✅ Platform-specific conversions (CSS variables, React Native StyleSheet, Flutter theme)

How to Use Config

// Load config in your app entry point
import { loadConfig } from '@kitiumai/ui/config';
import config from './kitium.config.js';

loadConfig(config);

// Now all components automatically use your config!
import { Button } from '@kitiumai/ui';

// Uses config colors, spacing, typography automatically
<Button variant="primary">Click me</Button>;

Full Configuration Example

export default {
  // Theme (applies to ALL platforms)
  theme: {
    colors: {
      primary: '#1976D2',
      generateShades: true, // AI generates 50-900 shades
    },

    typography: {
      fontFamily: 'Inter', // Auto-mapped to platform formats
      baseSize: 16,
      scale: 'major-third', // AI calculates sizes
    },

    spacing: {
      unit: 8,
      scale: [0, 4, 8, 12, 16, 24, 32, 48, 64],
    },

    borderRadius: {
      sm: 4,
      md: 8,
      lg: 16,
    },

    // Shadows (auto-converted per platform)
    shadows: {
      md: '0 4px 6px rgba(0,0,0,0.1)',
      // → Web: CSS box-shadow
      // → React Native: shadowColor, shadowOffset, elevation
      // → Flutter: BoxShadow
    },

    darkMode: {
      enabled: true,
      autoGenerate: true, // AI generates perfect dark theme
    },
  },

  // Component defaults
  components: {
    Button: {
      defaultVariant: 'primary',
      defaultSize: 'medium',

      // Platform-specific overrides
      platforms: {
        mobile: {
          defaultSize: 'large', // Larger on mobile
        },
      },
    },
  },

  // Accessibility
  accessibility: {
    level: 'AA', // WCAG compliance
    autoEnhance: true, // AI adds missing features
  },

  // AI Features
  ai: {
    enabled: true,
    features: {
      autoComplete: true,
      optimization: true,
      scoring: true,
    },
  },
};

Platform-Specific Output

The config automatically converts to each platform:

Web (CSS Variables):

:root {
  --kt-color-primary: #1976d2;
  --kt-color-primary-50: #e3f2fd;
  /* ... all generated shades */
  --kt-spacing-unit: 8px;
}

React Native (StyleSheet):

const theme = {
  colors: { primary: '#1976D2', primary50: '#E3F2FD' },
  shadows: {
    md: {
      shadowColor: '#000',
      shadowOffset: { width: 0, height: 4 },
      shadowOpacity: 0.1,
      shadowRadius: 6,
      elevation: 4,
    },
  },
};

Flutter (Dart Theme):

class KitiumTheme {
  static const Color primary = Color(0xFF1976D2);
  static const Color primary50 = Color(0xFFE3F2FD);
  static const BoxShadow shadowMd = BoxShadow(/* ... */);
}

Configuration API

import {
  loadConfig,
  updateConfig,
  getConfig,
  exportConfigAsCSS,
  exportConfigAsJSON,
  setActiveBrand,
} from '@kitiumai/ui/config';

// Load config
loadConfig(myConfig);

// Update at runtime
updateConfig({
  theme: {
    colors: {
      primary: '#FF6B6B',
    },
  },
});

// All components automatically re-render with new theme!

// Get current config
const config = getConfig();

// Export for use elsewhere
const css = exportConfigAsCSS(); // → CSS variables
const json = exportConfigAsJSON(); // → JSON

// Multi-brand support
setActiveBrand('acme'); // Switch to acme brand theme

Environment-Based Config

export default {
  theme: {
    colors: { primary: '#1976D2' },
  },

  // Override for specific environments
  environments: {
    development: {
      development: {
        devTools: true,
        debug: { logLevel: 'debug' },
      },
    },
    production: {
      performance: {
        optimization: { caching: 'aggressive' },
      },
    },
  },
};

Multi-Brand Config

export default {
  brands: {
    acme: {
      theme: {
        colors: { primary: '#FF6B6B' },
      },
    },
    globex: {
      theme: {
        colors: { primary: '#1976D2' },
      },
    },
  },
  activeBrand: 'acme',
};

// Switch brands dynamically
import { setActiveBrand } from '@kitiumai/ui/config';
setActiveBrand('globex'); // All components update instantly!

CLI Commands

# Initialize config (interactive)
npx kitium init

# Validate config
npx kitium validate

# Preview theme
npx kitium preview

# Generate theme from brand assets
npx kitium theme generate --from-brand

# Export to different formats
npx kitium export --format css
npx kitium export --format json

# Migrate from other libraries
npx kitium migrate --from mui

See kitium.config.example.js for a complete configuration example.

Theming

Kitium UI comes with beautiful default colors based on Kitium's brand identity. You can customize the theme in multiple ways:

Default Kitium Brand Colors

- Dark Blue (#1E3A8A) - Primary color
- Yellow (#F59E0B) - Warning/accent color
- Gray (#64748B) - Secondary color
- Green (#10B981) - Success color

Method 1: Using JavaScript/TypeScript (Recommended)

The easiest way to customize the theme:

import { setTheme } from '@kitiumai/ui';

// Customize specific colors
setTheme({
  colors: {
    primary: '#FF0000',
    secondary: '#00FF00',
    success: '#0000FF',
  },
});

// Or customize everything
setTheme({
  colors: {
    primary: '#your-color',
    secondary: '#your-color',
    success: '#your-color',
    warning: '#your-color',
    error: '#your-color',
    info: '#your-color',
    background: '#ffffff',
    foreground: '#000000',
    border: '#e5e5e5',
  },
  spacing: {
    xs: '0.25rem',
    sm: '0.5rem',
    md: '1rem',
    lg: '1.5rem',
    xl: '2rem',
  },
  typography: {
    fontFamily: 'Your Font Family',
    fontSize: {
      sm: '0.875rem',
      md: '1rem',
      lg: '1.25rem',
    },
  },
  borderRadius: {
    sm: '0.25rem',
    md: '0.375rem',
    lg: '0.5rem',
  },
});

// Reset to Kitium defaults
import { resetTheme } from '@kitiumai/ui';
resetTheme();

// Get current theme
import { getCurrentTheme } from '@kitiumai/ui';
const currentTheme = getCurrentTheme();

Method 2: Using CSS Custom Properties

Customize directly in your CSS:

:root {
  /* Kitium Brand Colors (defaults) */
  --kt-color-primary: #1e3a8a; /* Dark Blue */
  --kt-color-secondary: #64748b; /* Gray */
  --kt-color-success: #10b981; /* Green */
  --kt-color-warning: #f59e0b; /* Yellow */
  --kt-color-error: #ef4444; /* Red */
  --kt-color-info: #1e3a8a;

  /* Layout */
  --kt-color-background: #ffffff;
  --kt-color-foreground: #0f172a;
  --kt-color-border: #e2e8f0;

  /* Spacing */
  --kt-spacing-xs: 0.25rem;
  --kt-spacing-sm: 0.5rem;
  --kt-spacing-md: 1rem;
  --kt-spacing-lg: 1.5rem;
  --kt-spacing-xl: 2rem;

  /* Typography */
  --kt-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --kt-font-size-sm: 0.875rem;
  --kt-font-size-md: 1rem;
  --kt-font-size-lg: 1.25rem;

  /* Border Radius */
  --kt-border-radius-sm: 0.25rem;
  --kt-border-radius-md: 0.375rem;
  --kt-border-radius-lg: 0.5rem;
}

Method 3: Using Kitium Brand Colors

Access brand colors directly in your code:

import { KITIUM_BRAND_COLORS } from '@kitiumai/ui';

console.log(KITIUM_BRAND_COLORS.darkBlue); // #1E3A8A
console.log(KITIUM_BRAND_COLORS.yellow); // #F59E0B
console.log(KITIUM_BRAND_COLORS.gray); // #64748B
console.log(KITIUM_BRAND_COLORS.green); // #10B981

Theme Examples

Light Mode (Default)

setTheme({
  colors: {
    background: '#FFFFFF',
    foreground: '#0F172A',
    border: '#E2E8F0',
  },
});

Dark Mode

setTheme({
  colors: {
    primary: '#3B82F6',
    background: '#0F172A',
    foreground: '#F1F5F9',
    border: '#334155',
  },
});

Custom Brand

setTheme({
  colors: {
    primary: '#your-brand-primary',
    secondary: '#your-brand-secondary',
    success: '#your-brand-success',
    // ... other colors
  },
});

Validation

The library includes built-in validators for forms:

import { required, email, minLength, maxLength, pattern, composeValidators } from '@kitiumai/ui';

// Use individual validators
const result = email('[email protected]');
console.log(result.valid); // true

// Compose multiple validators
const passwordValidator = composeValidators(
  required,
  minLength(8),
  maxLength(20),
  pattern(/^[a-zA-Z0-9]+$/, 'Only alphanumeric characters')
);

const validation = passwordValidator('myPassword123');
console.log(validation.valid); // true or false
console.log(validation.message); // Error message if invalid

TypeScript Support

Full TypeScript support with type definitions included:

import type { ComponentSize, ComponentVariant, ValidationResult } from '@kitiumai/ui';

const size: ComponentSize = 'medium';
const variant: ComponentVariant = 'primary';

Universal Platform Support - NEW!

Kitium UI now features truly universal components that automatically detect your platform (Web, React Native, or Flutter) and render the appropriate native implementation. No platform-specific imports needed!

Universal Components (Recommended)

Just import and use - the components automatically adapt to your platform:

import { KtButton, KtInput, KtCard } from '@kitiumai/ui';

// Same code works on Web, React Native, AND Flutter!
function App() {
  return (
    <div>
      {' '}
      {/* or <View> in React Native */}
      <KtButton variant="primary" onPress={() => console.log('Works everywhere!')}>
        Universal Button
      </KtButton>
      <KtInput label="Email" type="email" onChangeText={(text) => console.log(text)} />
      <KtCard header="Title" footer="Footer">
        Card content works on all platforms!
      </KtCard>
    </div>
  );
}

How it works:

  • 🔍 Automatic Detection: Components detect whether they're running on Web, React Native, or Flutter
  • 🎯 Native Rendering: Each platform gets its optimal native implementation:
    • Web: Lit-based Web Components with Shadow DOM
    • React Native: Native TouchableOpacity, TextInput, View components
    • Flutter: Native Flutter widgets via bridge
  • 📦 Tree-Shaking: Unused platform code is automatically removed from your bundle
  • 🎨 Consistent API: Same props and events across all platforms

Features:

  • ✨ Zero configuration - just import and use
  • 🚀 Native performance on all platforms
  • 🎨 Same Kitium brand colors everywhere
  • 📘 Full TypeScript support with IntelliSense
  • 🔄 Consistent behavior across platforms
  • 📱 Works on Web, iOS, and Android

Manual Platform Override (Advanced)

If you need to force a specific platform implementation:

<KtButton
  platformType="react-native" // Force React Native implementation
  variant="primary"
>
  Button
</KtButton>

Flutter

Add to your pubspec.yaml:

dependencies:
  kitium_ui:
    path: node_modules/@kitiumai/ui/bridges/flutter

Use in your Flutter app:

import 'package:kitium_ui/kitiumai_flutter.dart';

KtButton(
  variant: ComponentVariant.primary,
  onPressed: () => print('Pressed!'),
  child: Text('Click Me'),
)

KtInput(
  label: 'Email',
  type: InputType.email,
  onChanged: (value) => print(value),
)

KtCard(
  header: Text('Title'),
  footer: Text('Footer'),
  child: Text('Card content'),
)

Features:

  • Native Flutter widgets
  • Consistent API across platforms
  • Kitium brand colors
  • Material Design integration
  • iOS and Android support

Cross-Platform Benefits

  • One API, Multiple Platforms: Write once, use everywhere
  • Consistent Branding: Same Kitium colors across all platforms
  • Type Safety: Full TypeScript/Dart type support
  • Native Performance: No WebView overhead on mobile
  • Shared Validation: Same validation logic across platforms

Browser Support

  • Chrome/Edge: Latest 2 versions
  • Firefox: Latest 2 versions
  • Safari: Latest 2 versions
  • All browsers supporting Custom Elements V1 and Shadow DOM

🎯 Component Development Standards

Naming Conventions (Critical for ESLint validation)

All exports must follow the Kt prefix pattern:

| Item | Pattern | Example | | ------------------ | ------------------------------- | --------------------- | | Component Class | Kt{ComponentName}Web | KtButtonWeb | | Props Interface | Kt{ComponentName}Props | KtButtonProps | | Web Props | Kt{ComponentName}WebProps | KtButtonWebProps | | Mobile Props | Kt{ComponentName}MobileProps | KtButtonMobileProps | | Event Interface | Kt{ComponentName}{Event}Event | KtButtonClickEvent | | Custom Element Tag | kt-{component-name} | kt-button |

File Structure

src/components/{category}/{component-name}/
├── {component-name}.ts         # Web Component (KtButtonWeb)
├── types.ts                     # Type definitions
├── {component-name}.stories.ts  # Storybook stories
├── README.md                    # Documentation
└── index.ts                     # Barrel exports

Component Development Checklist

  • [ ] Component class extends BaseComponent
  • [ ] Props interface extends BaseProps
  • [ ] Event handlers use dispatchCustomEvent()
  • [ ] Analytics tracking uses trackAnalytics()
  • [ ] CSS styles use array composition syntax
  • [ ] All types exported from index.ts
  • [ ] ARIA attributes for accessibility
  • [ ] ESLint checks pass
  • [ ] Unit tests for all public methods (90%+ coverage)
  • [ ] Keyboard navigation support

⚙️ Design System

Core Design Tokens

Colors (Default Kitium Branding):

Primary: #1E3A8A (Deep royal blue)
Secondary: #10B981 (Vibrant emerald)
Accent: #F59E0B (Warm golden amber)
Gray: #64748B (Balanced slate)

Spacing (8px base unit):

--space-0 through --space-32 (0 to 8rem)
Base unit: 8px (0.5rem)

Typography:

--text-xs through --text-7xl
Default: --text-base (1rem)

Effects:

Shadows: --shadow-sm through --shadow-2xl
Border Radius: --radius-sm through --radius-full
Duration: --duration-75 through --duration-1000

Design System Best Practices

DO:

// Use CSS variables
background: var(--primary);
padding: var(--space-4);

// Import from design-system
import { KitiumThemes } from '@/styles/kitium-design-system';

// Use rem units
padding: 1rem;

DON'T:

// Don't hardcode colors
background: #1E3A8A;

// Don't import from design-tokens directly
import { themes } from '@/styles/kitium-design-tokens';

// Don't use px units
padding: 16px;

🤖 Advanced Features

Component Scoring System (AI-Powered)

Kitium UI includes an AI-powered component scoring system that analyzes every component instance:

<Button
  variant="primary"
  kt-score-enabled={true}
  kt-score-callback={(score) => console.log('Score:', score)}
>
  Click me
</Button>

// Output example:
// Overall Score: 87/100 🌟
// Security: 95/100 ✅
// Accessibility: 78/100 ⚠️
// Performance: 92/100 ✅
// Complexity: 85/100 ✅
// Best Practices: 80/100 ⚠️

Score Dimensions:

  1. Security - XSS prevention, input sanitization, CSP compliance
  2. Accessibility - WCAG 2.1 compliance, ARIA labels, keyboard navigation
  3. Performance - Bundle size, render time, memory usage
  4. Complexity - Cyclomatic complexity, prop count, nesting depth
  5. Best Practices - Naming conventions, error handling, documentation
  6. Maintainability - Code readability, modularity, reusability

Gamification Features

Unlock achievements and progress through learning paths:

Available Achievements:

  • 🎯 Button Master - Use your first Kitium Button
  • ♿ Accessibility Hero - Add ARIA labels to 10+ components
  • 🛡️ Security Expert - 95+ security score across 10 components
  • 🚀 Performance Champion - Optimize bundle to <50KB
  • 📚 Documentation Master - Complete all tutorials

AI-Driven Features

Smart Component Generation:

// Generate components from descriptions
const component = await AI.generate(`
  Create a login form with:
  - Email input with validation
  - Password input with show/hide toggle
  - Remember me checkbox
  - Login button (primary variant)
  - All fields should be accessible
`);

Auto-Optimization:

  • Automatic memoization for performance
  • Smart props suggestions based on context
  • Accessibility auto-enhancement
  • Performance auto-tuning

Developer Tools & CLI

# Project initialization
kitium-ui init my-project

# Project migration
kitium-ui migrate ./existing-app

# Component discovery
kitium-ui list

# Setup existing project
kitium-ui setup

# Help
kitium-ui help

🧪 Testing Guidelines

Test Commands

# Unit tests (Jest + jsdom)
npm test
npm run test:watch
npm run test:coverage    # Enforce 90% coverage

# E2E tests (Playwright)
npm run test:e2e
npm run test:e2e:ui      # Interactive mode

# Type checking
npm run type-check

# Linting
npm run lint
npm run lint:fix

# Build
npm run build
npm run build-storybook

Coverage Requirements

  • Global coverage: 90% (lines/branches/functions/statements)
  • Unit tests: All public methods and edge cases
  • E2E tests: User-visible changes must have stories
  • Accessibility: Keyboard navigation, screen reader support
  • Cross-browser: Chrome, Firefox, Safari, Edge

Development

# Install dependencies
npm install

# Run Storybook (component development)
npm run storybook

# Run development server
npm run dev

# Build library
npm run build

# Run unit tests
npm test

# Run unit tests with coverage
npm run test:coverage

# Run e2e tests with Playwright
npm run test:e2e

# Run e2e tests in UI mode
npm run test:e2e:ui

# Lint code
npm run lint

# Build Storybook for deployment
npm run build-storybook

# Type checking
npm run type-check

♿ Accessibility Best Practices

All Kitium UI components follow WCAG 2.1 AA standards. Here's how to ensure accessibility in your implementations:

// ARIA Labels
aria-label="Close button"
ariaLabelledBy="label-id"
ariaDescribedBy="description-id"

// Keyboard Navigation
@keyup.enter="handleSubmit"
@keyup.space="handleActivate"

// Focus Management
tabindex="0"
:focus-visible { outline: 2px solid var(--ring); }

// Semantic HTML
<button>  {/* not <div> */}
<input>   {/* not custom element */}

// Color Contrast (minimum requirements)
// - 4.5:1 for normal text
// - 3:1 for large text
// - 3:1 for UI components

🚀 Performance Tips

  1. Bundle Size

    • Use framework-specific imports for optimal tree-shaking
    • Only 15KB gzipped total
    • Remove unused components automatically
  2. Render Performance

    • Components use React.memo() in React
    • Efficient memoization for expensive renders
    • Lazy loading support for React Native
  3. Memory Usage

    • Proper event listener cleanup
    • No memory leaks from circular references
    • Optimal resource management

📊 Comparison with Other Libraries

| Feature | Kitium UI | MUI | Chakra | Shadcn/ui | | ----------------- | ---------- | --------------- | --------- | ------------- | | Framework Support | ✅ ALL | ❌ React | ❌ React | ❌ React/Next | | React Native | ✅ Native | ❌ No | ❌ No | ❌ No | | Flutter Support | ✅ Yes | ❌ No | ❌ No | ❌ No | | Bundle Size | 15KB | 90KB | 50KB | 20KB | | Web Components | ✅ Native | ❌ No | ❌ No | ❌ No | | WCAG 2.1 AA | ✅ Yes | ✅ Yes | ✅ AAA | ✅ Yes | | TypeScript | ✅ Full | ✅ Full | ✅ Full | ✅ Full | | Component Count | 🟡 Growing | ✅ 50+ | ✅ 45+ | ✅ 45+ | | Learning Curve | ⭐⭐ Easy | ⭐⭐⭐ Moderate | ⭐⭐ Easy | ⭐⭐ Easy | | AI Features | ✅ Yes | ❌ No | ❌ No | ❌ No | | Gamification | ✅ Yes | ❌ No | ❌ No | ❌ No |

📁 Project Structure

kitium-ui/
├── src/
│   ├── components/          # Web Components (LitElement)
│   │   ├── form/           # Form components
│   │   │   ├── button/
│   │   │   └── input/
│   │   ├── layout/         # Layout components
│   │   └── feedback/       # Feedback components
│   │
│   ├── frameworks/         # Framework-specific wrappers
│   │   ├── angular/        # Angular wrappers
│   │   ├── vue/            # Vue 3 wrappers
│   │   ├── react/          # React & RN wrappers
│   │   └── svelte/         # Svelte wrappers
│   │
│   ├── styles/            # Design system
│   │   ├── kitium-design-tokens.ts      # Raw tokens
│   │   ├── kitium-design-system.ts      # Consumer API
│   │   └── base.styles.ts               # Component utilities
│   │
│   ├── utils/             # Shared utilities
│   ├── types/             # Type definitions
│   └── index.ts           # Main entry point
│
├── stories/               # Storybook stories
├── e2e/                  # Playwright e2e tests
├── docs/                 # Documentation files
├── scripts/              # CLI & utilities
└── tests/                # Unit tests

📚 Resources

Documentation

Useful Patterns

React Hooks Integration:

import { Button } from '@kitium/ui/react';
import { useCallback } from 'react';

function MyComponent() {
  const handleClick = useCallback(() => {
    console.log('Button clicked!');
  }, []);

  return <Button onClick={handleClick}>Click me</Button>;
}

Angular Services:

import { Injectable } from '@angular/core';
import { KtButtonModule } from '@kitium/ui/angular';

@Injectable()
export class MyService {
  onButtonClick() {
    console.log('Button clicked!');
  }
}

Vue Composition API:

<script setup>
import { ref } from 'vue';
import { Button } from '@kitium/ui/vue';

const count = ref(0);
const handleClick = () => count.value++;
</script>

<template>
  <Button @kt-click="handleClick">Clicks: {{ count }}</Button>
</template>

Svelte Reactivity:

<script>
  import { Button } from '@kitium/ui/svelte';
  let count = 0;

  const handleClick = () => count++;
</script>

<Button on:kt-click={handleClick}>Clicks: {count}</Button>

🎓 Quick Start Summary

  1. Installation: npm install @kitiumai/ui
  2. Import: import { Button } from '@kitiumai/ui/react' (framework-specific)
  3. Use: <Button variant="primary">Click me</Button>
  4. Customize: Set theme with setTheme() or CSS variables
  5. Deploy: Build and deploy like any other npm package

🔗 Key Links

Contributing

Contributions are welcome! Please read our DEVELOPMENT_GUIDE.md for standards and best practices before submitting PRs.

Areas for Contribution

  • ✅ New components (follow component template)
  • ✅ Bug fixes and improvements
  • ✅ Documentation enhancements
  • ✅ Framework-specific implementations
  • ✅ Test coverage improvements
  • ✅ Performance optimizations
  • ✅ Accessibility improvements

License

MIT License - see LICENSE file for details

Support & Community


Made with ❤️ by the Kitium team