- Add complete dark mode system with theme context and toggle - Implement dark mode toggle component in navigation menu - Add client-side routing with SSR-safe signal handling - Fix language selector styling for better dark mode compatibility - Add documentation system with mdBook integration - Improve navigation menu with proper external/internal link handling - Add comprehensive project documentation and configuration - Enhance theme system with localStorage persistence - Fix arena panic issues during server-side rendering - Add proper TypeScript configuration and build optimizations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
329 lines
8.2 KiB
Markdown
329 lines
8.2 KiB
Markdown
# Logo Usage Guide
|
|
|
|
The Rustelo project includes a comprehensive logo system designed to work across different contexts and themes. This guide explains how to properly use the logos in your applications and documentation.
|
|
|
|
## Logo Assets
|
|
|
|
The logo system includes the following variants:
|
|
|
|
### Available Logo Files
|
|
|
|
| File | Usage | Context |
|
|
|------|-------|---------|
|
|
| `rustelo_dev-logo-h.svg` | Horizontal logo for normal/light themes | Primary horizontal logo |
|
|
| `rustelo_dev-logo-b-h.svg` | Horizontal logo for dark themes | Dark theme horizontal logo |
|
|
| `rustelo_dev-logo-v.svg` | Vertical logo for normal/light themes | Primary vertical logo |
|
|
| `rustelo_dev-logo-b-v.svg` | Vertical logo for dark themes | Dark theme vertical logo |
|
|
| `rustelo-imag.svg` | Logo image without text | Icon/favicon usage |
|
|
|
|
### Logo Locations
|
|
|
|
- **Source**: `logos/` directory (original assets)
|
|
- **Public**: `public/logos/` directory (web-accessible assets)
|
|
- **Documentation**: Referenced in mdBook via `../logos/` path
|
|
|
|
## Usage Guidelines
|
|
|
|
### 1. Web Application Usage
|
|
|
|
#### Navigation Logo
|
|
```rust
|
|
use crate::components::NavbarLogo;
|
|
|
|
// In your navigation component
|
|
view! {
|
|
<nav class="navigation">
|
|
<NavbarLogo size="small".to_string() />
|
|
// ... other nav items
|
|
</nav>
|
|
}
|
|
```
|
|
|
|
#### Brand Header
|
|
```rust
|
|
use crate::components::BrandHeader;
|
|
|
|
// For page headers
|
|
view! {
|
|
<BrandHeader
|
|
title="RUSTELO".to_string()
|
|
subtitle="Modular Rust Web Application Template".to_string()
|
|
logo_size="large".to_string()
|
|
class="justify-center".to_string()
|
|
/>
|
|
}
|
|
```
|
|
|
|
#### Standalone Logo
|
|
```rust
|
|
use crate::components::Logo;
|
|
|
|
// Basic logo usage
|
|
view! {
|
|
<Logo
|
|
orientation="horizontal".to_string()
|
|
size="medium".to_string()
|
|
show_text={true}
|
|
class="my-custom-class".to_string()
|
|
/>
|
|
}
|
|
```
|
|
|
|
### 2. Documentation Usage
|
|
|
|
#### Markdown Files
|
|
```markdown
|
|
<!-- In README.md or other markdown files -->
|
|
<div align="center">
|
|
<img src="logos/rustelo_dev-logo-h.svg" alt="RUSTELO" width="300" />
|
|
|
|
# Your Page Title
|
|
</div>
|
|
```
|
|
|
|
#### mdBook Pages
|
|
```markdown
|
|
<!-- In book pages -->
|
|
<div align="center">
|
|
<img src="../logos/rustelo_dev-logo-h.svg" alt="RUSTELO" width="400" />
|
|
</div>
|
|
|
|
# Welcome to Rustelo
|
|
```
|
|
|
|
### 3. Size Guidelines
|
|
|
|
#### Component Sizes
|
|
- **small**: 32px height (navbar usage)
|
|
- **medium**: 48px height (standard usage)
|
|
- **large**: 64px height (headers)
|
|
- **xlarge**: 80px height (hero sections)
|
|
|
|
#### Documentation Sizes
|
|
- **Small**: 150-200px width
|
|
- **Medium**: 250-300px width
|
|
- **Large**: 350-400px width
|
|
|
|
### 4. Responsive Usage
|
|
|
|
The logo components automatically adapt to different screen sizes:
|
|
|
|
```rust
|
|
// Mobile-responsive logo
|
|
view! {
|
|
<Logo
|
|
orientation="horizontal".to_string()
|
|
size="medium".to_string()
|
|
show_text={true}
|
|
class="w-full max-w-xs sm:max-w-sm md:max-w-md".to_string()
|
|
/>
|
|
}
|
|
```
|
|
|
|
## Theme Integration
|
|
|
|
### Automatic Theme Detection
|
|
|
|
The logo components automatically detect the current theme and switch between light and dark variants:
|
|
|
|
```rust
|
|
// This automatically uses the appropriate variant
|
|
view! {
|
|
<Logo
|
|
orientation="horizontal".to_string()
|
|
size="medium".to_string()
|
|
show_text={true}
|
|
/>
|
|
}
|
|
```
|
|
|
|
### Manual Theme Selection
|
|
|
|
For static contexts (like documentation), choose the appropriate variant:
|
|
|
|
- **Light backgrounds**: Use `rustelo_dev-logo-h.svg` or `rustelo_dev-logo-v.svg`
|
|
- **Dark backgrounds**: Use `rustelo_dev-logo-b-h.svg` or `rustelo_dev-logo-b-v.svg`
|
|
|
|
## Best Practices
|
|
|
|
### DO
|
|
|
|
✅ Use the horizontal logo for navigation bars and headers
|
|
✅ Use the vertical logo for sidebar or narrow layouts
|
|
✅ Use the image-only logo for favicons and small icons
|
|
✅ Maintain proper contrast with background colors
|
|
✅ Use consistent sizing within the same context
|
|
✅ Include proper alt text: "RUSTELO"
|
|
|
|
### DON'T
|
|
|
|
❌ Stretch or distort the logo proportions
|
|
❌ Use light logos on light backgrounds
|
|
❌ Use dark logos on dark backgrounds
|
|
❌ Make the logo too small to read (minimum 24px height)
|
|
❌ Use low-quality or pixelated versions
|
|
|
|
## Component API Reference
|
|
|
|
### Logo Component
|
|
|
|
```rust
|
|
#[component]
|
|
pub fn Logo(
|
|
#[prop(default = "horizontal".to_string())] orientation: String,
|
|
#[prop(default = "normal".to_string())] size: String,
|
|
#[prop(default = true)] show_text: bool,
|
|
#[prop(default = "".to_string())] class: String,
|
|
) -> impl IntoView
|
|
```
|
|
|
|
**Parameters:**
|
|
- `orientation`: "horizontal" | "vertical"
|
|
- `size`: "small" | "medium" | "large" | "xlarge"
|
|
- `show_text`: true (full logo) | false (image only)
|
|
- `class`: Additional CSS classes
|
|
|
|
### LogoLink Component
|
|
|
|
```rust
|
|
#[component]
|
|
pub fn LogoLink(
|
|
#[prop(default = "horizontal".to_string())] orientation: String,
|
|
#[prop(default = "normal".to_string())] size: String,
|
|
#[prop(default = true)] show_text: bool,
|
|
#[prop(default = "".to_string())] class: String,
|
|
#[prop(default = "/".to_string())] href: String,
|
|
) -> impl IntoView
|
|
```
|
|
|
|
**Additional Parameters:**
|
|
- `href`: Link destination (default: "/")
|
|
|
|
### BrandHeader Component
|
|
|
|
```rust
|
|
#[component]
|
|
pub fn BrandHeader(
|
|
#[prop(default = "RUSTELO".to_string())] title: String,
|
|
#[prop(default = "".to_string())] subtitle: String,
|
|
#[prop(default = "medium".to_string())] logo_size: String,
|
|
#[prop(default = "".to_string())] class: String,
|
|
) -> impl IntoView
|
|
```
|
|
|
|
**Parameters:**
|
|
- `title`: Main brand title
|
|
- `subtitle`: Optional subtitle text
|
|
- `logo_size`: Logo size variant
|
|
- `class`: Additional CSS classes
|
|
|
|
### NavbarLogo Component
|
|
|
|
```rust
|
|
#[component]
|
|
pub fn NavbarLogo(
|
|
#[prop(default = "small".to_string())] size: String,
|
|
#[prop(default = "".to_string())] class: String,
|
|
) -> impl IntoView
|
|
```
|
|
|
|
**Parameters:**
|
|
- `size`: Logo size (optimized for navbar)
|
|
- `class`: Additional CSS classes
|
|
|
|
## Usage Examples
|
|
|
|
### Hero Section
|
|
```rust
|
|
view! {
|
|
<section class="hero">
|
|
<BrandHeader
|
|
title="RUSTELO".to_string()
|
|
subtitle="Build fast, secure web applications with Rust".to_string()
|
|
logo_size="xlarge".to_string()
|
|
class="text-center".to_string()
|
|
/>
|
|
</section>
|
|
}
|
|
```
|
|
|
|
### Sidebar
|
|
```rust
|
|
view! {
|
|
<aside class="sidebar">
|
|
<Logo
|
|
orientation="vertical".to_string()
|
|
size="medium".to_string()
|
|
show_text={true}
|
|
class="mb-4".to_string()
|
|
/>
|
|
</aside>
|
|
}
|
|
```
|
|
|
|
### Footer
|
|
```rust
|
|
view! {
|
|
<footer class="footer">
|
|
<Logo
|
|
orientation="horizontal".to_string()
|
|
size="small".to_string()
|
|
show_text={false}
|
|
class="opacity-60".to_string()
|
|
/>
|
|
</footer>
|
|
}
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Logo Not Displaying
|
|
|
|
1. **Check file paths**: Ensure logos are copied to `public/logos/`
|
|
2. **Verify imports**: Make sure components are properly imported
|
|
3. **Theme detection**: Confirm theme context is available
|
|
|
|
### Theme Switching Issues
|
|
|
|
1. **Theme provider**: Ensure `ThemeProvider` is properly configured
|
|
2. **CSS classes**: Check that theme-specific CSS is loaded
|
|
3. **JavaScript**: Verify theme switching JavaScript is working
|
|
|
|
### Performance Optimization
|
|
|
|
1. **SVG optimization**: Use optimized SVG files
|
|
2. **Lazy loading**: Add `loading="lazy"` for non-critical logos
|
|
3. **Caching**: Ensure proper cache headers for logo assets
|
|
|
|
## File Structure
|
|
|
|
```
|
|
template/
|
|
├── logos/ # Source logo files
|
|
│ ├── rustelo_dev-logo-h.svg
|
|
│ ├── rustelo_dev-logo-b-h.svg
|
|
│ ├── rustelo_dev-logo-v.svg
|
|
│ ├── rustelo_dev-logo-b-v.svg
|
|
│ └── rustelo-imag.svg
|
|
├── public/
|
|
│ └── logos/ # Web-accessible logo files
|
|
│ ├── rustelo_dev-logo-h.svg
|
|
│ ├── rustelo_dev-logo-b-h.svg
|
|
│ ├── rustelo_dev-logo-v.svg
|
|
│ ├── rustelo_dev-logo-b-v.svg
|
|
│ └── rustelo-imag.svg
|
|
└── client/src/components/
|
|
└── Logo.rs # Logo components
|
|
```
|
|
|
|
## Contributing
|
|
|
|
When adding new logo variants or updating existing ones:
|
|
|
|
1. Update both `logos/` and `public/logos/` directories
|
|
2. Test with both light and dark themes
|
|
3. Verify responsive behavior
|
|
4. Update this documentation
|
|
5. Test in all supported browsers
|
|
|
|
For questions or issues with logo usage, please refer to the [GitHub Issues](https://github.com/yourusername/rustelo/issues) page. |