blackmagic-js
Version:
A powerful dark mode framework with automatic color adjustment and contrast optimization
207 lines (153 loc) โข 6.48 kB
Markdown
# ๐ BlackMagic Framework
A powerful JavaScript framework for implementing intelligent dark mode with automatic color adjustment and WCAG-compliant contrast optimization.
[](https://opensource.org/licenses/MIT)
[](https://www.ecma-international.org/ecma-262/)
[](https://www.w3.org/WAI/WCAG21/quickref/)
[See the demo!](https://blackmagic.lucangevare.nl/) and [read the docs](https://blackmagic.lucangevare.nl/docs/)
## โจ Features
- ๐จ **Smart Color Adjustment** - Automatically adjusts colors while maintaining readability
- โฟ **WCAG Compliant** - Ensures 4.5:1 contrast ratio for accessibility
- ๐พ **Dual Storage** - Uses both cookies and localStorage for maximum compatibility
- ๐ญ **Theme Class Support** - Works with CSS-based themes or dynamic color conversion
- โ๏ธ **Highly Configurable** - Multiple options for customization
- โก **Zero Dependencies** - Pure JavaScript, no external libraries
- ๐ **Cross-Browser** - Works on all modern browsers
## ๐ Quick Start
### CDN (Recommended)
```html
<script src="https://cdn.jsdelivr.net/npm/blackmagic-js@latest/dist/blackmagic.min.js"></script>
```
### NPM
```bash
npm install blackmagic-js
```
### Basic Usage
```javascript
// Initialize BlackMagic
const blackMagic = new BlackMagic({
cookieName: 'my-theme',
backgroundColor: '#1a1a1a',
factor: 0.4
});
// Add toggle functionality
document.getElementById('toggleBtn').addEventListener('click', () => {
blackMagic.toggle();
});
```
## ๐ Documentation
### Configuration Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `cookieName` | string | `'darkmode'` | Cookie name for storing theme preference |
| `backgroundColor` | string | `'#000'` | Dark mode background color |
| `localStorageKey` | string | `'darkmode'` | localStorage key for theme storage |
| `themeClass` | string | `undefined` | CSS class to toggle instead of dynamic colors |
| `cookieDuration` | number | `365` | Cookie expiration time in days |
| `autoSwitch` | boolean | `true` | Automatically apply saved theme on page load |
| `factor` | number | `0.4` | Intensity of color adjustments (0.1-0.8) |
### Methods
#### `toggle()`
Switches between light and dark themes.
#### `getCurrentTheme()`
Returns the current theme (`'light'` or `'dark'`).
#### `applyTheme(theme)`
Applies a specific theme.
- `theme` (string): Either `'light'` or `'dark'`
#### `getStoredTheme()`
Returns the stored theme preference from cookies or localStorage.
### Advanced Configuration
#### CSS Class Mode
```javascript
const blackMagic = new BlackMagic({
themeClass: 'dark-theme',
autoSwitch: true
});
```
#### Custom Color Adjustment
```javascript
const blackMagic = new BlackMagic({
backgroundColor: '#2d2d2d',
factor: 0.6, // More dramatic color changes
cookieDuration: 30 // Remember for 30 days
});
```
## ๐งช Examples & Testing
This repository includes comprehensive examples demonstrating various use cases:
- **Basic Example** - Simple implementation
- **Comprehensive Test** - Full feature testing with complex UI
- **Theme Class Mode** - Using CSS classes instead of dynamic colors
- **Factor Testing** - High/low intensity color adjustments
- **Settings Tests** - Auto-switch, custom backgrounds, cookie duration
- **Debug Tools** - Persistence testing and troubleshooting
### Running Examples
```bash
# Clone the repository
git clone https://github.com/LucAngevare/BlackMagic-js.git
cd BlackMagic-js
# Start local server
npm run dev
# Open examples
open http://localhost:8000/examples/
```
Or just look at the already running examples at [blackmagic.lucangevare.nl](https://blackmagic.lucangevare.nl/).
## ๐๏ธ Project Structure
```
BlackMagic-js/
โโโ src/
โ โโโ blackmagic.js # Source code
โโโ dist/
โ โโโ blackmagic.js # UMD build
โ โโโ blackmagic.esm.js # ES Module
โโโ examples/
โ โโโ basic/ # Basic usage examples
โ โโโ comprehensive/ # Full feature tests
โ โโโ theme-class/ # CSS class mode
โ โโโ factors/ # Color adjustment tests
โ โโโ settings/ # Configuration tests
โ โโโ debug/ # Debug tools
โโโ package.json
โโโ README.md
```
## ๐ฏ How It Works
### Intelligent Color Adjustment
BlackMagic uses advanced algorithms to:
1. **Analyze Text Colors** - Detects current text colors in the DOM
2. **Calculate Backgrounds** - Walks up the DOM tree to find actual background colors
3. **Ensure Contrast** - Calculates contrast ratios using WCAG standards
4. **Optimize Colors** - Adjusts colors to maintain 4.5:1 contrast ratio
5. **Preserve Semantics** - Keeps important UI colors (buttons, alerts) unchanged
### Storage Strategy
The framework uses a dual storage approach:
1. **Cookies** (Primary) - Works across all environments
2. **localStorage** (Fallback) - Provides additional reliability
### Accessibility
All color adjustments ensure WCAG AA compliance:
- Minimum 4.5:1 contrast ratio
- Proper luminance calculations
- Gamma correction applied
- Fallback to pure black/white when needed
## ๐ Browser Support
- โ
Chrome 60+
- โ
Firefox 60+
- โ
Safari 12+
- โ
Edge 79+
- โ
Opera 47+
## ๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
## ๐ License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## ๐ Acknowledgments
- WCAG guidelines for accessibility standards
- Modern CSS color theory and contrast calculations
- Community feedback and testing
## ๐ Support
- ๐ [Documentation](https://github.com/LucAngevare/BlackMagic-js#readme)
- ๐ [Issues](https://github.com/LucAngevare/BlackMagic-js/issues)
- ๐ฌ [Discussions](https://github.com/LucAngevare/BlackMagic-js/discussions)
---
โญ **If you find BlackMagic useful, please consider giving it a star!** โญ