@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.
Maintainers
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/uiQuick 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: booleanloading: booleanfull-width: booleantype: '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: stringvalue: stringtype: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url'placeholder: stringsize: 'small' | 'medium' | 'large'disabled: booleanrequired: booleanreadonly: booleanhelper-text: stringpattern: stringminlength: numbermaxlength: number
Events:
kt-input: Fired on value changekt-focus: Fired when input receives focuskt-blur: Fired when input loses focuskt-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: booleanelevated: booleanclickable: booleanpadding: 'default' | 'none' | 'compact' | 'spacious'
Slots:
header: Card header contentdefault: Card body contentfooter: Card footer contentmedia: Media content (images, videos)
Events:
kt-card-click: Fired when card is clicked (only ifclickableis 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 themeEnvironment-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 muiSee 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 colorMethod 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); // #10B981Theme 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 invalidTypeScript 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/flutterUse 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 exportsComponent 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-1000Design 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:
- Security - XSS prevention, input sanitization, CSP compliance
- Accessibility - WCAG 2.1 compliance, ARIA labels, keyboard navigation
- Performance - Bundle size, render time, memory usage
- Complexity - Cyclomatic complexity, prop count, nesting depth
- Best Practices - Naming conventions, error handling, documentation
- 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-storybookCoverage 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
Bundle Size
- Use framework-specific imports for optimal tree-shaking
- Only 15KB gzipped total
- Remove unused components automatically
Render Performance
- Components use React.memo() in React
- Efficient memoization for expensive renders
- Lazy loading support for React Native
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
- AGENTS.md - Repository guidelines and team coordination
- ADOPTION_STRATEGY.md - Marketing and growth strategy
- COMPONENT_SCORING.md - AI-powered scoring system
- FRAMEWORK_IMPLEMENTATION.md - Architecture deep dive
- AI_DRIVEN_COMPONENTS.md - AI features and capabilities
- GAMIFICATION.md - Community engagement strategies
- Design_System.md - Design principles and philosophy
- DESIGN_SYSTEM_QUICK_REFERENCE.md - Quick lookup guide
- COMPONENT_TEMPLATE.md - Component scaffold template
- DEVELOPMENT_GUIDE.md - Full development standards
- STANDARDS_SUMMARY.md - Standards overview
- CLI_IMPLEMENTATION_SUMMARY.md - CLI tool details
- COMPARISON.md - Library comparison details
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
- Installation:
npm install @kitiumai/ui - Import:
import { Button } from '@kitiumai/ui/react'(framework-specific) - Use:
<Button variant="primary">Click me</Button> - Customize: Set theme with
setTheme()or CSS variables - Deploy: Build and deploy like any other npm package
🔗 Key Links
- GitHub: KitiumAI/kitium-ui
- Documentation: docs.kitium.ai
- Design System: design.kitium.ai
- Storybook: storybook.kitium.ai
- Issues: GitHub Issues
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
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Discord: Join our community
- Twitter: @kitiumai
Made with ❤️ by the Kitium team
