@denariusfinancees/icons-ui
Version:
Library containing Denarius brand UI icons
418 lines (316 loc) • 9.54 kB
Markdown
# Denarius Icons UI
A comprehensive icon library with support for multiple categories, sizes, and modifiers. Built with SASS and optimized for performance and accessibility.
## Features
- **Multiple Icon Categories**: archive, arrow, basic, brand, building, business, call, cars, computers, content, crypto, delivery, design, emails, files, flags, grid, location, money, notifications, programing, school, search, security, settings, shop, support, time, type, users, video, weather
- **Size Variants**: 16px (`.icon--sm`) and 24px (`.icon--md`)
- **Big Picture Modifier**: `.icon--big-picture` for prominent display (94px container with 58px icon)
- **Optimized Output**: Minimal CSS duplication with efficient selectors
- **Flag Support**: Special handling for flag icons with original colors
- **Mask-based Icons**: Color inheritance via `currentColor`
- **Responsive & Accessible**: Touch-friendly and screen reader compatible
- **Development Tools**: Prettier + ESLint for consistent code formatting
## Quick Start
### Basic Usage
```html
<!-- Standard icon -->
<div class="icon-basic-home"></div>
<!-- Small size -->
<div class="icon-basic-home icon--sm"></div>
<!-- Flag icon (maintains original colors) -->
<div class="icon-flags-us"></div>
<!-- Big picture modifier -->
<div
class="icon icon-basic-heart icon--big-picture"
style="--icon-bg-color: #ff6b6b; color: white;"
></div>
```
### CSS Customization
```css
/* Change icon color */
.icon-basic-home {
color: #007bff;
}
/* Flag icons don't inherit colors */
.icon-flags-us {
/* Original colors preserved */
}
```
## Icon Modifiers
### Size Modifiers
- `.icon--sm`: 16px × 16px
- `.icon--md`: 24px × 24px (default)
### Big Picture Modifier
The `.icon--big-picture` modifier creates a prominent circular display:
```html
<div
class="icon icon-basic-star icon--big-picture"
style="--icon-bg-color: #feca57; color: white;"
></div>
```
**Features:**
- 94×94px circular background
- 58×58px centered icon
- Dynamic colors via `--icon-bg-color` CSS variable
- Works with all icon categories
- Perfect for CTAs, feature highlights, and dashboard widgets
## Icon Categories
| Category | Description | Color Support |
| ----------------- | -------------------------------------- | ------------------ |
| **basic** | Common UI icons (home, settings, etc.) | ✅ Inherits color |
| **flags** | Country flags | ❌ Original colors |
| **brand** | Company logos | ✅ Inherits color |
| **arrow** | Directional arrows | ✅ Inherits color |
| **money** | Financial icons | ✅ Inherits color |
| **users** | User-related icons | ✅ Inherits color |
| _...and 20+ more_ | | |
## Advanced Usage
### Theme Integration
```scss
// Dark mode support
.icon-theme {
color: #333;
@media (prefers-color-scheme: dark) {
color: #fff;
}
}
// CSS variables for theming
.theme-system {
--icon-primary: #007bff;
--icon-secondary: #6c757d;
.icon-basic-home {
color: var(--icon-primary);
&:hover {
color: var(--icon-secondary);
}
}
}
```
### Responsive Patterns
```scss
// Mobile-first responsive sizing
.icon-responsive {
width: 16px;
height: 16px;
@media (min-width: 768px) {
width: 24px;
height: 24px;
}
@media (min-width: 1024px) {
width: 32px;
height: 32px;
}
}
```
### Animation Integration
```scss
// Spinning icon
.icon-spinner {
animation: spin 1s linear infinite;
}
// Pulse effect
.icon-notification {
animation: pulse 2s ease infinite;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes pulse {
0%,
100% {
transform: scale(1);
}
50% {
transform: scale(1.2);
}
}
```
## Development
### Project Structure
```
denarius-Icons-UI/
├── assets/ # Icon source files
│ ├── icons/svg/ # SVG icons by category
│ └── animations/ # Animation files
├── src/styles/mixins/ # SASS source files
│ ├── _denarius-ui-icons.scss # Main icon library
│ ├── _denarius-ui-icon-helpers.scss # Helper mixins
│ └── _icon-map.scss # Auto-generated icon map
├── scripts/ # Build automation
│ ├── generate-icon-map.js # Icon discovery
│ ├── generate-demo.js # Demo generation
│ └── copy-files.js # Asset copying
├── dist/ # Distribution files
│ ├── css/ # Compiled CSS
│ ├── scss/ # SASS files
│ └── assets/ # Copied assets
└── demo/ # Auto-generated demo
```
### Build Commands
````bash
# Full build (generate map + copy files + compile SASS)
npm run build
# Generate demo site
npm run demo
### Code Quality Tools
```bash
# Format all code files
npm run format
# Check formatting without changes
npm run format:check
# Lint and fix JavaScript
npm run lint
````
## Technical Details
### Icon Implementation
The library uses two approaches for displaying icons:
1. **Mask-based Icons** (most categories):
```css
.icon-basic-home {
mask-image: url('../assets/icons/svg/basic/basic-24-home.svg');
-webkit-mask-image: url('../assets/icons/svg/basic/basic-24-home.svg');
background-color: currentColor;
}
```
2. **Flag Icons** (flags category):
```css
.icon-flags-us {
background-image: url('../assets/icons/svg/flags/flags-24-us.svg');
background-size: contain;
}
```
### CSS Optimization
- **Shared Properties**: Common styles via SASS extends
- **Efficient Selectors**: Optimized for minimal CSS output
- **Vendor Prefixes**: Automatic webkit support for masks
- **File Size**: Compressed output with minimal duplication
### Browser Support
| Feature | Chrome | Firefox | Safari | Edge |
| ------------- | ------ | ------- | ------ | ---- |
| CSS Masks | 51+ | 53+ | 9.1+ | 79+ |
| CSS Variables | 49+ | 31+ | 9.1+ | 79+ |
| CSS Grid | 57+ | 52+ | 10.1+ | 79+ |
## Best Practices
### Accessibility
```html
<!-- Accessible icon button -->
<button class="icon-button" aria-label="Close dialog">
<span class="icon-basic-close" aria-hidden="true"></span>
</button>
<!-- Icon with descriptive text -->
<div class="icon-with-text">
<span class="icon-basic-info" aria-hidden="true"></span>
<span>Important information</span>
</div>
```
### Performance
- Use standard sizes (16px, 24px) for consistency
- Implement lazy loading for large icon sets
- Consider sprite sheets for multiple icons
- Optimize SVG files before adding to library
### Color Management
- Use CSS variables for theme colors
- Ensure sufficient color contrast (WCAG AA)
- Consider reduced motion preferences
- Use `currentColor` for inheriting text color
## Troubleshooting
### Common Issues
**Icons not displaying:**
- Verify SVG file paths are correct
- Check browser support for CSS masks
- Ensure no conflicting styles
**Colors not applying:**
- Confirm icon uses mask-based approach
- Check for conflicting `background-color` rules
- Verify CSS variable values
**Big picture modifier issues:**
- Ensure `--icon-bg-color` is set
- Check z-index conflicts
- Verify icon class is correct
## Contributing
### Adding New Icons
1. Add SVG file to `assets/icons/svg/[category]/`
2. Run `npm run build` to regenerate icon map
3. Test in demo site
### Creating New Modifiers
```scss
// Add to _denarius-ui-icons.scss
.icon--new-modifier {
// Implementation
}
```
## Installation & Integration
### NPM Installation
```bash
# Using npm
npm install @denariusfinancees/icons-ui
# Using yarn
yarn add @denariusfinancees/icons-ui
```
### CSS Integration
```html
<!-- HTML -->
<link
rel="stylesheet"
href="node_modules/@denariusfinancees/icons-ui/dist/css/denarius-ui-icons.css"
/>
```
```javascript
// JavaScript/ES6
import '@denariusfinancees/icons-ui/dist/css/denarius-ui-icons.css';
```
```scss
// SASS
@import 'node_modules/@denariusfinancees/icons-ui/dist/css/denarius-ui-icons.css';
```
### Angular Integration
1. **Install the package:**
```bash
npm install @denariusfinancees/icons-ui
```
2. **Add to angular.json:**
```json
{
"projects": {
"your-app": {
"architect": {
"build": {
"options": {
"styles": [
"node_modules/@denariusfinancees/icons-ui/dist/css/denarius-ui-icons.min.css"
],
"assets": [
{
"glob": "**/*",
"input": "node_modules/@denariusfinancees/icons-ui/dist/assets/",
"output": "/assets/icons/"
}
]
}
}
}
}
}
}
```
3. **Use in components:**
```html
<div class="icon-basic-home"></div>
<div
class="icon icon-basic-heart icon--big-picture"
[style.--icon-bg-color]="'#ff6b6b'"
style="color: white;"
></div>
```
## License
MIT License - see LICENSE file for details.
## Support
For issues, questions, or contributions:
- Repository: [Denarius Icons UI](https://dev.azure.com/DenariusEs/Design-System/_git/denarius-Icons-UI)
- Author: fernando.martinez@denarius.es
```
```