mirror of https://github.com/ghostfolio/ghostfolio
Browse Source
- Extract LogoItem interface to separate file - Move all styles into :host block - Add Bootstrap utility classes to HTML template - Order object properties alphabetically - Clean up landing-page.scss duplicate styles - Remove LOGO_CAROUSEL_IMPLEMENTATION.md filepull/5671/head
8 changed files with 218 additions and 394 deletions
@ -1,98 +0,0 @@ |
|||||
# Logo Carousel Component Implementation |
|
||||
|
|
||||
## Summary |
|
||||
|
|
||||
Successfully implemented the infinite logo carousel component as requested in issue #5660. |
|
||||
|
|
||||
## Files Created |
|
||||
|
|
||||
### 1. Component Files |
|
||||
|
|
||||
- `libs/ui/src/lib/logo-carousel/logo-carousel.component.ts` - Main component logic |
|
||||
- `libs/ui/src/lib/logo-carousel/logo-carousel.component.html` - Template |
|
||||
- `libs/ui/src/lib/logo-carousel/logo-carousel.component.scss` - Styles with CSS animation |
|
||||
- `libs/ui/src/lib/logo-carousel/index.ts` - Export file |
|
||||
- `libs/ui/src/lib/logo-carousel/logo-carousel.component.stories.ts` - Storybook story |
|
||||
|
|
||||
### 2. Modified Files |
|
||||
|
|
||||
- `apps/client/src/app/pages/landing/landing-page.component.ts` - Added import and component usage |
|
||||
- `apps/client/src/app/pages/landing/landing-page.html` - Replaced static logo grid with carousel |
|
||||
|
|
||||
## Implementation Details |
|
||||
|
|
||||
### Features Implemented |
|
||||
|
|
||||
✅ **Pure CSS Animation**: Uses `@keyframes` for infinite horizontal scrolling |
|
||||
✅ **Responsive Design**: Adapts to different screen sizes (mobile, tablet, desktop) |
|
||||
✅ **Accessibility**: |
|
||||
|
|
||||
- Proper ARIA labels |
|
||||
- Pause animation on hover |
|
||||
- Screen reader friendly |
|
||||
✅ **Dark Theme Support**: Automatic theme switching |
|
||||
✅ **Performance**: |
|
||||
- CSS-only animation (no JavaScript) |
|
||||
- Uses `transform: translateX()` for GPU acceleration |
|
||||
✅ **Seamless Loop**: Duplicates logos for continuous scrolling |
|
||||
✅ **Interactive**: Hover effects with scaling and opacity changes |
|
||||
|
|
||||
### Technical Approach |
|
||||
|
|
||||
- **Animation Technique**: Duplicates the logo set and uses CSS `translateX(-50%)` to create seamless infinite scroll |
|
||||
- **Browser Compatibility**: Added `-webkit-` prefixes for mask properties |
|
||||
- **Styling**: Copied and adapted existing logo styles from landing page |
|
||||
- **Theming**: Uses CSS custom properties for theme-aware gradients |
|
||||
|
|
||||
### Animation Details |
|
||||
|
|
||||
- **Duration**: 40 seconds for full cycle |
|
||||
- **Direction**: Left to right horizontal scroll |
|
||||
- **Easing**: Linear for consistent speed |
|
||||
- **Interaction**: Pauses on hover for accessibility |
|
||||
|
|
||||
### CSS Features |
|
||||
|
|
||||
- Gradient fade masks on left/right edges for smooth visual effect |
|
||||
- Responsive logo sizing (3rem height on desktop, scales down on mobile) |
|
||||
- Hover effects with 1.05x scale and opacity fade |
|
||||
- Proper mask image handling for SVG logos |
|
||||
|
|
||||
## Integration |
|
||||
|
|
||||
The component is integrated into the landing page replacing the previous static 4-column logo grid. The "As seen in" text remains above the carousel. |
|
||||
|
|
||||
## Browser Support |
|
||||
|
|
||||
- Modern browsers with CSS mask support |
|
||||
- Fallback styles for older browsers |
|
||||
- Responsive design for all device sizes |
|
||||
|
|
||||
## Usage |
|
||||
|
|
||||
```html |
|
||||
<gf-logo-carousel></gf-logo-carousel> |
|
||||
``` |
|
||||
|
|
||||
The component is self-contained and requires no additional configuration. |
|
||||
|
|
||||
## Testing Recommendations |
|
||||
|
|
||||
1. Test on different screen sizes |
|
||||
2. Verify smooth animation performance |
|
||||
3. Check accessibility with screen readers |
|
||||
4. Test dark/light theme switching |
|
||||
5. Verify all logo links work correctly |
|
||||
|
|
||||
## Next Steps |
|
||||
|
|
||||
1. Install dependencies: `npm install` |
|
||||
2. Build application: `npm run build:production` |
|
||||
3. Test in browser: `npm run start:client` |
|
||||
4. View in Storybook: `npm run start:storybook` |
|
||||
|
|
||||
The implementation follows the exact requirements from issue #5660: |
|
||||
|
|
||||
- ✅ Standalone Angular component at `@ghostfolio/ui/logo-carousel` |
|
||||
- ✅ Pure CSS infinite scrolling animation |
|
||||
- ✅ Integrated into landing page replacing static logos |
|
||||
@ -0,0 +1,7 @@ |
|||||
|
export interface LogoItem { |
||||
|
className: string; |
||||
|
isMask?: boolean; |
||||
|
name: string; |
||||
|
title: string; |
||||
|
url: string; |
||||
|
} |
||||
Loading…
Reference in new issue