refactor: streamline onboarding modal by removing unnecessary slide preparation logic and enhancing loading state management for improved user experience
This commit is contained in:
163
.cursor/rules/fontawesome.mdc
Normal file
163
.cursor/rules/fontawesome.mdc
Normal file
@@ -0,0 +1,163 @@
|
||||
---
|
||||
description: This rule file provides comprehensive guidelines for using Font Awesome effectively, covering setup, styling, accessibility, performance, and security best practices. It ensures consistent and optimized usage across projects.
|
||||
globs: *.html,*.css,*.js,*.jsx,*.ts,*.tsx
|
||||
---
|
||||
# Font Awesome Best Practices
|
||||
|
||||
This document outlines best practices for using Font Awesome in web development projects. These guidelines cover setup, styling, accessibility, performance, security, and common pitfalls.
|
||||
|
||||
## 1. Setup and Usage
|
||||
|
||||
* **Font Awesome Kits (Recommended):**
|
||||
* Use Font Awesome Kits for easy customization and automatic updates.
|
||||
* Add the Kit's embed code ( `<script>` tag) to the `<head>` of your HTML document.
|
||||
* Example:
|
||||
html
|
||||
<script src="https://kit.fontawesome.com/<your_kit_code>.js" crossorigin="anonymous"></script>
|
||||
|
||||
* **Package Manager (npm, yarn):**
|
||||
* Install Font Awesome as a dependency:
|
||||
bash
|
||||
npm install @fortawesome/fontawesome-free
|
||||
# or
|
||||
yarn add @fortawesome/fontawesome-free
|
||||
|
||||
* Import the necessary CSS or JavaScript files in your application.
|
||||
* **CDN (Content Delivery Network):**
|
||||
* Use a CDN for quick setup, but be aware of potential performance implications and dependency on external services.
|
||||
* Include the CDN link in your HTML:
|
||||
html
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" integrity="..." crossorigin="anonymous" />
|
||||
|
||||
* **Icon Usage:**
|
||||
* Use CSS classes to insert icons into your project.
|
||||
html
|
||||
<i class="fas fa-heart"></i> <!-- Solid heart icon -->
|
||||
<i class="far fa-heart"></i> <!-- Regular heart icon -->
|
||||
<i class="fab fa-github"></i> <!-- GitHub icon -->
|
||||
|
||||
|
||||
## 2. Code Organization and Structure
|
||||
|
||||
* **Directory Structure:**
|
||||
* Place Font Awesome CSS and font files in a dedicated directory (e.g., `assets/fontawesome`). This is less relevant when using kits or CDNs.
|
||||
* **File Naming Conventions:**
|
||||
* Stick to the default file names provided by Font Awesome (e.g., `fontawesome.min.css`, `fontawesome.js`).
|
||||
* **Module Organization:**
|
||||
* When using a package manager, import Font Awesome modules in your application's entry point or relevant components.
|
||||
* Example (JavaScript):
|
||||
javascript
|
||||
import '@fortawesome/fontawesome-free/css/all.min.css';
|
||||
|
||||
* **Component Architecture:**
|
||||
* Create reusable icon components in your UI framework (e.g., React, Vue, Angular) to encapsulate Font Awesome usage and styling.
|
||||
* Example (React):
|
||||
jsx
|
||||
import React from 'react';
|
||||
|
||||
const Icon = ({ name, style }) => (
|
||||
<i className={`fa${style ? 'b' : 's'} fa-${name}`}></i>
|
||||
);
|
||||
|
||||
export default Icon;
|
||||
|
||||
* **Code Splitting:**
|
||||
* When using a package manager, ensure your build tool (e.g., Webpack, Parcel) correctly bundles Font Awesome files and supports code splitting if needed.
|
||||
|
||||
## 3. Styling and Accessibility
|
||||
|
||||
* **Styling:**
|
||||
* Use Font Awesome's styling options to customize icon size, color, and animations.
|
||||
* Use CSS classes for styling (e.g., `fa-xs`, `fa-sm`, `fa-lg`, `fa-2x`, `fa-spin`, `fa-pulse`).
|
||||
* Example:
|
||||
html
|
||||
<i class="fas fa-heart fa-2x" style="color: red;"></i>
|
||||
|
||||
* **Accessibility (Crucial):**
|
||||
* **Decorative Icons:** Use `aria-hidden="true"` for icons that are purely decorative.
|
||||
html
|
||||
<i class="fas fa-star" aria-hidden="true"></i>
|
||||
|
||||
* **Informative Icons:** Provide meaningful text alternatives for icons that convey information or are interactive.
|
||||
* Use `aria-label` for interactive elements (e.g., buttons, links).
|
||||
html
|
||||
<a href="/cart" aria-label="View your shopping cart">
|
||||
<i class="fas fa-shopping-cart" aria-hidden="true"></i>
|
||||
</a>
|
||||
|
||||
* Use visually hidden text (e.g., using CSS class `sr-only`) to provide a text alternative.
|
||||
html
|
||||
<span class="sr-only">Search</span>
|
||||
<i class="fas fa-search" aria-hidden="true"></i>
|
||||
|
||||
* Use the `title` attribute to provide a tooltip for sighted users (optional, but recommended).
|
||||
html
|
||||
<i class="fas fa-info-circle" aria-hidden="true" title="More information"></i>
|
||||
|
||||
|
||||
## 4. Performance Considerations
|
||||
|
||||
* **CDN Usage:**
|
||||
* Using a reputable CDN can improve performance through caching and optimized delivery. Ensure the CDN supports modern protocols like HTTP/2 or HTTP/3.
|
||||
* **Self-Hosting:**
|
||||
* Self-hosting gives you more control over resources but requires proper server configuration and optimization.
|
||||
* Consider using a CDN in front of your origin server for better performance.
|
||||
* **Web Fonts vs. SVG:**
|
||||
* Font Awesome offers both web fonts and SVG versions.
|
||||
* SVGs generally offer better performance and scalability but may require more setup.
|
||||
* Web fonts can cause rendering issues (e.g., FOIT - Flash of Invisible Text). Consider using `font-display: swap;` in your CSS to mitigate this.
|
||||
* **Subsetting (Pro Feature):**
|
||||
* Use Font Awesome's Pro subsetting feature to include only the icons you need, reducing the overall file size.
|
||||
* **Lazy Loading:**
|
||||
* If you have a large number of icons on a page, consider lazy loading them to improve initial page load time. This can be complex and might require custom JavaScript.
|
||||
|
||||
## 5. Common Patterns and Anti-Patterns
|
||||
|
||||
* **Pattern: Icon Component:** Creating a reusable icon component is a common and effective pattern.
|
||||
* **Pattern: Consistent Styling:** Define a set of CSS classes or variables for consistent icon styling across your project.
|
||||
* **Anti-Pattern: Overusing Icons:** Avoid using too many icons, as it can clutter the UI and reduce readability.
|
||||
* **Anti-Pattern: Inconsistent Icon Usage:** Ensure icons are used consistently throughout the application to maintain a cohesive user experience.
|
||||
* **Anti-Pattern: Neglecting Accessibility:** Failing to provide proper text alternatives for icons is a major accessibility issue.
|
||||
|
||||
## 6. Security Best Practices
|
||||
|
||||
* **Vulnerability: Cross-Site Scripting (XSS):**
|
||||
* Prevent XSS by sanitizing any user-provided input used in conjunction with Font Awesome icons.
|
||||
* Never directly embed user input into CSS class names or HTML attributes.
|
||||
* **Dependency Management:**
|
||||
* Keep Font Awesome dependencies up-to-date to patch security vulnerabilities.
|
||||
* Use a dependency management tool (e.g., npm, yarn) to manage and update dependencies securely.
|
||||
* **Subresource Integrity (SRI):**
|
||||
* When using a CDN, use SRI hashes to verify the integrity of the Font Awesome files.
|
||||
html
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" integrity="sha512-..." crossorigin="anonymous" />
|
||||
|
||||
|
||||
## 7. Testing Approaches
|
||||
|
||||
* **Unit Testing:**
|
||||
* If you create custom icon components, write unit tests to ensure they render correctly and handle different icon names and styles.
|
||||
* **Integration Testing:**
|
||||
* Test the integration of Font Awesome icons within your application's UI to ensure they are displayed correctly in different browsers and devices.
|
||||
* **End-to-End Testing:**
|
||||
* Use end-to-end tests to verify the overall user experience with Font Awesome icons, including accessibility and styling.
|
||||
|
||||
## 8. Common Pitfalls and Gotchas
|
||||
|
||||
* **Version Conflicts:** Ensure all Font Awesome files are from the same version to avoid compatibility issues.
|
||||
* **CSS Specificity:** Be aware of CSS specificity when styling Font Awesome icons, as it can override your custom styles.
|
||||
* **Font Loading Issues:** Address font loading issues (e.g., FOIT) by using `font-display: swap;`.
|
||||
* **Incorrect Class Names:** Double-check icon class names for typos.
|
||||
* **Missing Font Awesome Kit Code:** Ensure the Font Awesome Kit code is correctly added to your HTML.
|
||||
|
||||
## 9. Tooling and Environment
|
||||
|
||||
* **Development Tools:**
|
||||
* Use a code editor with syntax highlighting and autocompletion for CSS and HTML.
|
||||
* Use browser developer tools to inspect and debug Font Awesome styles and rendering.
|
||||
* **Build Configuration:**
|
||||
* Configure your build tool (e.g., Webpack, Parcel) to correctly handle Font Awesome files and optimize for production.
|
||||
* **Linting and Formatting:**
|
||||
* Use a linter (e.g., ESLint, Stylelint) to enforce code style and best practices for Font Awesome usage.
|
||||
* **CI/CD Integration:**
|
||||
* Integrate Font Awesome dependency updates and security checks into your CI/CD pipeline.
|
||||
Reference in New Issue
Block a user