Package Exports
- cosmic-ui-lite
- cosmic-ui-lite/styles
Readme
Cosmic UI Lite
A lightweight, futuristic, space-themed UI component library built with TypeScript and vanilla JavaScript. Features SVG-based components with animated gradients, cosmic effects, and responsive design.
🌟 Live Demo - Try all components interactively! 📸 See the Visual Showcase below for component screenshots and examples! 📚 Complete Documentation | Local Docs | Architecture Guide
🚀 Motivation
I needed a cosmic/sci-fi style UI for my game project, and I found cosmic-ui pretty cool, but it requires React and my game is built with vanilla TypeScript. I didn't need most of the features there, so I decided to create this lightweight alternative that:
- Zero Framework Dependencies - Works with vanilla JavaScript/TypeScript
- Lightweight & Focused - Only the essential cosmic UI components
- Game-Ready - Optimized for interactive applications and games
- Self-Contained - Single CSS file + TypeScript class, no build process required
🚀 Features
- Zero Dependencies: Pure TypeScript/JavaScript with no external dependencies
- SVG-Based: Scalable vector graphics for crisp rendering at any size
- Animated Effects: Pulsing borders, particle animations, and gradient flows
- Responsive Design: Adapts to different screen sizes with media queries
- TypeScript Support: Full type safety with comprehensive interfaces
- Modular Architecture: Individual components with shared utilities
- Cosmic Theme: Futuristic space-inspired visual design
⚠️ Constraints & Limitations
While Cosmic UI Lite is designed for simplicity and game-ready performance, there are some design trade-offs to be aware of:
SVG Border Scaling
The SVG borders are scaled as a single piece, which means on components with unusual aspect ratios (especially tall/narrow or wide/short), the borders may appear over-scaled or distorted. This is similar to how image scaling works without nine-slice functionality.
Technical Note: This could be solved by implementing a nine-slice system (similar to Unity's NineSlicedSprite or Pixi.js nine-slice textures) that scales corners, edges, and center independently. However, this would significantly increase complexity and goes against the project's goal of remaining lightweight and simple.
Recommendation: For best visual results, use components within reasonable aspect ratios. The default sizing and responsive breakpoints are optimized for typical UI use cases.
📦 Components
Core Components
- Button - Animated buttons with multiple variants
- Modal - Full-featured modals with backdrop and animations
- Card - Content cards with cosmic borders
- Info - Overlay popups with customizable titles
- Tag - Location tags with flip animations
- Notification - Toast-style notifications
- Error - Error dialogs with confirmation
- Confirmation - Confirmation dialogs with callbacks
📸 Visual Showcase
Component Gallery
Cosmic Modal
Cosmic Info Popup
Cosmic Card
Cosmic Tag
🎨 Visual Design
The components feature:
- Angled corners using SVG clip paths
- Animated gradient borders with color transitions
- Particle flash effects with dynamic backgrounds
- Cosmic color scheme with blues, cyans, and accent colors
- Responsive scaling for different screen sizes
- Hover animations with transform and glow effects
🖼️ Credits
Inspiration: cosmic-ui by rizkimuhammada - React-based cosmic UI library
SVG Graphics: HUD futuristic frame by luqman firdau
📁 File Structure
cosmic-ui-lite/
├── README.md # This file
├── package.json # Package configuration
├── rollup.config.js # Build configuration
├── src/ # Source code
│ ├── index.ts # Main entry point
│ ├── components/ # Individual component classes
│ │ ├── CosmicButton.ts
│ │ ├── CosmicModal.ts
│ │ ├── CosmicCard.ts
│ │ ├── CosmicInfo.ts
│ │ └── CosmicTag.ts
│ ├── utils/ # Shared utilities
│ │ ├── svg.ts # SVG creation helpers
│ │ └── gradients.ts # Gradient definitions
│ ├── types/ # TypeScript definitions
│ │ └── index.ts
│ ├── styles/ # CSS and styling
│ │ └── cosmic-ui.css
│ └── demo/ # Demo system
│ └── index.ts
├── dist/ # Built output (generated)
│ ├── index.esm.js # ES Module build
│ ├── index.cjs.js # CommonJS build
│ ├── index.umd.js # UMD build
│ ├── index.d.ts # TypeScript declarations
│ └── cosmic-ui.css # Processed styles
└── screenshots/ # Component screenshots
├── screenshot-cosmic-modal.png
├── screenshot-cosmic-info.png
├── screenshot-cosmic-card.png
└── screenshot-cosmic-tag.png
📦 Installation
NPM (Recommended)
npm install cosmic-ui-lite
import { CosmicUI } from 'cosmic-ui-lite';
import 'cosmic-ui-lite/dist/cosmic-ui.css';
CDN
<script src="https://unpkg.com/cosmic-ui-lite@latest/dist/index.umd.js"></script>
<link rel="stylesheet" href="https://unpkg.com/cosmic-ui-lite@latest/dist/cosmic-ui.css">
Source Build
git clone https://github.com/fuR-Gaming/cosmic-ui-lite.git
cd cosmic-ui-lite && npm install && npm run build
🚀 Quick Example
// 1. Install and import
import { CosmicUI } from 'cosmic-ui-lite';
import 'cosmic-ui-lite/dist/cosmic-ui.css';
// 2. Create cosmic components
const button = CosmicUI.createButton({
text: 'Launch Sequence',
variant: 'primary',
onClick: () => console.log('🚀 Launched!')
});
const modal = CosmicUI.createModal({
title: 'Mission Control',
content: 'Ready for deployment?',
buttons: [
{ text: 'Cancel', variant: 'secondary' },
{ text: 'Deploy', variant: 'primary', onClick: () => console.log('Deployed!') }
]
});
// 3. Add to your app
document.body.appendChild(button);
modal.show();
🎮 Perfect for games, ⚡ zero dependencies, 📱 mobile-ready!
📖 Component Documentation
CosmicButton
Creates animated buttons with cosmic styling.
interface CosmicButtonOptions {
text: string; // Button text
variant?: 'default' | 'primary' | 'secondary' | 'danger'; // Visual style
onClick?: () => void; // Click handler
disabled?: boolean; // Disabled state
className?: string; // Additional CSS classes
}
const button = CosmicUI.createButton({
text: 'Fire Laser',
variant: 'danger',
onClick: () => fireLaser()
});
Variants:
default
- Standard cosmic blue themeprimary
- Enhanced blue with stronger effectssecondary
- Orange accent themedanger
- Red warning theme
CosmicModal
Full-featured modals with backdrop blur and animations.
interface CosmicModalOptions {
title: string; // Modal title
content: string | HTMLElement; // Modal body content
showCloseButton?: boolean; // Show X button
buttons: CosmicButtonOptions[]; // Footer buttons (required)
onClose?: () => void; // Close callback
className?: string; // Additional CSS classes
}
const modal = CosmicUI.createModal({
title: 'Orbital Strike',
content: 'Select target coordinates',
buttons: [
{ text: 'Cancel', variant: 'secondary' },
{ text: 'Fire', variant: 'danger', onClick: () => fire() }
],
onClose: () => console.log('Modal closed')
});
// Show the modal
modal.show();
// Or close it programmatically
modal.close();
CosmicCard
Content cards with animated borders.
interface CosmicCardOptions {
title?: string; // Optional card title
content: string | HTMLElement; // Card content
className?: string; // Additional CSS classes
}
const card = CosmicUI.createCard({
title: 'Ship Status',
content: '<p>All systems operational</p>'
});
CosmicInfo
Overlay information popups with customizable styling.
interface CosmicInfoOptions {
title?: string; // Optional title
titleColor?: 'yellow' | 'green' | 'blue' | 'purple' | 'golden-red'; // Title theme
content: string | HTMLElement; // Info content
className?: string; // Additional CSS classes
onClose?: () => void; // Close callback
showOverlay?: boolean; // Show backdrop overlay
}
const info = CosmicUI.createInfo({
title: 'Mission Briefing',
titleColor: 'golden-red',
content: '<p>Target acquired. Proceed with caution.</p>',
showOverlay: true
});
Title Colors:
yellow
- Golden yellow gradient with shimmergreen
- Bright green sci-fi themeblue
- Electric blue cyberpunk themepurple
- Mystic purple gradientgolden-red
- Fiery golden-red blend
CosmicTag
Location tags with flip animations and auto-dismiss.
interface CosmicTagOptions {
title?: string; // Optional tag title
content: string | HTMLElement; // Tag content
className?: string; // Additional CSS classes
flipped?: boolean; // Horizontal flip
}
const tag = CosmicUI.createTag({
title: 'TARGET ACQUIRED',
content: '<div><h4>New York</h4><p>Population: 8.4M</p></div>',
flipped: false
});
Utility Methods
// Show error dialog
CosmicUI.showError('System Failure', 'Unable to connect to mothership');
// Show confirmation dialog
CosmicUI.showConfirmation(
'Destroy Planet',
'Are you sure? This cannot be undone.',
() => destroyPlanet(),
() => console.log('Cancelled')
);
// Show notification toast
CosmicUI.showNotification('Success', 'Target eliminated');
// Direct modal control
const modal = CosmicUI.createModal({
title: 'Custom Modal',
content: 'Content here',
buttons: [{ text: 'OK', variant: 'primary' }]
});
modal.show(); // Show the modal
modal.close(); // Close it programmatically
🎭 Demo System
Use the demo system to test all components:
import { createCosmicDemo } from './dist/index.esm.js';
// Add demo panel to page
createCosmicDemo();
Or build and run the demo:
npm run demo
This creates a floating demo panel with buttons to test:
- Card Demo - Shows content cards with borders
- Modal Demo - Interactive modal with buttons
- Error Demo - Error dialog with alien theme
- Confirm Demo - Confirmation with callbacks
- Info Demo - Information popup with overlay
- Tag Demo - Multiple location tags with animations
🎨 Customization
CSS Variables
The components use CSS custom properties for easy theming:
:root {
--cosmic-primary: #00d4ff; /* Primary blue */
--cosmic-secondary: #ff6b35; /* Orange accent */
--cosmic-danger: #ff4444; /* Red warning */
--cosmic-background: #000; /* Background */
--cosmic-text: #ffffff; /* Text color */
}
Animation Timing
Customize animation speeds:
.cosmic-border {
animation-duration: 2s; /* Slower pulse */
}
.cosmic-btn-wrapper:hover {
transition: all 0.5s ease; /* Slower transitions */
}
Responsive Breakpoints
Components automatically adapt to screen sizes:
- Desktop: Full size and effects
- Tablet: Scaled components (580px height)
- Mobile: Compressed layout (480px height)
- Small: Ultra-compact mode (430px height)
🔧 Architecture
Component Structure
Each component follows a consistent pattern:
- Wrapper Element - Container with positioning
- SVG Background - Animated gradient fill
- SVG Border - Animated outline with effects
- Content Layer - Text and interactive elements
SVG System
Components use shared SVG utilities:
// Shared path definitions
private static readonly PATHS = {
MODAL_BACKGROUND: 'M 265.95318,319.32816 H 448.53221...',
MODAL_BORDER: 'M 265.95318,319.32816 H 448.53221...',
// ...
};
// Reusable creation methods
private static createSvgElement(className: string, viewBox: string): SVGElement;
private static createGradient(id: string, stops: GradientStop[]): SVGLinearGradientElement;
private static createPath(d: string, fill?: string): SVGPathElement;
Animation System
Three animation layers:
- Particle Flash - Moving gradient backgrounds
- Cosmic Pulse - Border color cycling
- Hover Effects - Transform and glow changes
🌟 Examples
Basic Button
const launchButton = CosmicUI.createButton({
text: 'Initialize Launch Sequence',
variant: 'primary',
onClick: () => {
console.log('Launch sequence initiated');
// Your launch logic here
}
});
document.body.appendChild(launchButton);
Interactive Modal
const confirmModal = CosmicUI.createModal({
title: 'Mission Critical Decision',
content: `
<p>You are about to commence orbital bombardment.</p>
<ul>
<li>Target: Earth Sector 7</li>
<li>Payload: Antimatter Missiles</li>
<li>Estimated Casualties: 2.4 Million</li>
</ul>
<p><strong>This action cannot be undone.</strong></p>
`,
buttons: [
{
text: 'Abort Mission',
variant: 'secondary',
onClick: () => CosmicUI.showNotification('Aborted', 'Mission cancelled by operator')
},
{
text: 'FIRE',
variant: 'danger',
onClick: () => {
CosmicUI.showNotification('Launched', 'Orbital strike in progress...');
// Launch your orbital strike logic
}
}
]
});
confirmModal.show();
Dynamic Info Cards
const locations = [
{ name: 'Tokyo', pop: '13.9M', threat: 'HIGH' },
{ name: 'London', pop: '9.5M', threat: 'MEDIUM' },
{ name: 'Sydney', pop: '5.3M', threat: 'LOW' }
];
locations.forEach((loc, index) => {
const tag = CosmicUI.createTag({
title: 'TARGET ACQUIRED',
content: `
<div style="padding: 15px;">
<h3>${loc.name}</h3>
<p><strong>Population:</strong> ${loc.pop}</p>
<p><strong>Threat Level:</strong> ${loc.threat}</p>
<p><strong>Status:</strong> LOCKED</p>
</div>
`,
flipped: index % 2 === 0
});
// Position randomly on screen
tag.style.position = 'fixed';
tag.style.top = `${20 + index * 150}px`;
tag.style.left = `${100 + index * 200}px`;
tag.style.zIndex = '1000';
document.body.appendChild(tag);
});
🚀 Getting Started for Development
- Clone the repository or download the source code
- Install dependencies:
npm install
- Build the library:
npm run build
- Import components: Use the built files in
dist/
- Start creating components using the documented interfaces
Development Commands
npm run build
- Build all output formatsnpm run build:watch
- Watch mode for developmentnpm run dev
- Alias for build:watchnpm run demo
- Build and run demo systemnpm run clean
- Clean dist directory
📝 TypeScript Support
Full TypeScript support with exported interfaces:
import {
CosmicUI,
CosmicButtonOptions,
CosmicModalOptions,
CosmicCardOptions,
CosmicInfoOptions,
CosmicTagOptions
} from './dist/index.esm.js';
TypeScript declarations are automatically generated and included in dist/index.d.ts
.
🔄 Version History
- v1.0.0 - Initial release with core components
- Button, Modal, Card, Info, Tag components
- SVG-based rendering system
- Responsive design support
- Demo system included
📄 License
MIT License - Feel free to use in your projects!
🤝 Contributing
Contributions welcome! Please maintain the cosmic theme and follow the established patterns for new components.
Built for the future. Designed for space. 🚀