npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@bit.rhplus/ui2.logo

v0.0.7

Published

Reusable React komponenta pro zobrazení animovaných log. Podporuje různé varianty log a plnou kontrolu nad animací a rozměry.

Readme

AnimatedLogo

Reusable React komponenta pro zobrazení animovaných log. Podporuje různé varianty log a plnou kontrolu nad animací a rozměry.

Instalace a import

// VŽDY používej import se /_src pro živý zdrojový kód
import AnimatedLogo from '@bit.rhplus/ui2.logo/_src';

Základní použití

Výchozí použití (Strandhill logo s animací)

<AnimatedLogo />

S konkrétní variantou

<AnimatedLogo variant="strandhill" />

Bez animace (statické logo)

<AnimatedLogo animated={false} />

Custom rozměry

<AnimatedLogo
  width={500}
  height={400}
/>

S CSS třídou a styly

<AnimatedLogo
  className="my-logo"
  style={{ margin: '20px auto', display: 'block' }}
/>

API

Props

| Prop | Typ | Výchozí | Popis | |------|-----|---------|-------| | variant | string | 'strandhill' | Varianta loga ('strandhill', 'rhplus', 'portal', atd.) | | animated | boolean | true | Zapnout/vypnout animaci loga | | width | number \| string | 350 | Šířka loga (px nebo CSS hodnota) | | height | number \| string | 'auto' | Výška loga (px nebo CSS hodnota) | | className | string | '' | Dodatečná CSS třída | | style | object | {} | Custom inline styly | | ...otherProps | any | - | Další props se propagují na root div |

Ref support

Komponenta podporuje forwardRef, takže můžete získat referenci na root div element:

const logoRef = useRef(null);

<AnimatedLogo ref={logoRef} />

Přidání nové varianty loga

Chceš přidat další logo? Uprav soubor logo-variants.js:

export const LOGO_VARIANTS = {
  strandhill: { /* existující konfigurace */ },

  // Přidej novou variantu:
  rhplus: {
    name: 'RhPlus',
    subtitle: 'Portal',
    viewBox: '0 0 400 400',
    primaryColor: '#ffffff',
    accentColor: '#0890B0',
    paths: [
      {
        d: 'M...',  // SVG path data
        className: 'letter-R',
        fill: 'primary'  // 'primary' | 'accent' | 'subtitle'
      },
      // ... další paths
    ]
  }
};

Pak můžeš použít:

<AnimatedLogo variant="rhplus" />

Animace

Komponenta obsahuje následující animace (pokud je animated={true}):

  • letterReveal - Písmena se objevují zdola s bounce efektem
  • dotBounce - Tečka nad "i" poskakuje shora dolů
  • stemGrow - Svislá část "i" roste zespodu nahoru
  • fadeSlideUp - Podtitulek se zjemní a posune nahoru
  • dotPulse - Tečka nad "i" pulzuje (cyan glow)
  • letterWave - Písmena vlní v nekonečné smyčce

Všechny animace jsou implementovány v CSS a spouštějí se automaticky při mountu komponenty (pokud je animated={true}).

Příklady

Loading screen

<div style={{
  display: 'flex',
  justifyContent: 'center',
  alignItems: 'center',
  height: '100vh',
  background: 'linear-gradient(135deg, #0a0a0f 0%, #1a1a24 50%, #0f0f18 100%)'
}}>
  <AnimatedLogo width={400} />
</div>

V navigaci (statické)

<nav>
  <AnimatedLogo
    animated={false}
    width={150}
    height={50}
  />
</nav>

Controlled animace

const [showAnimation, setShowAnimation] = useState(true);

<AnimatedLogo
  animated={showAnimation}
  width={350}
/>

Performance

Komponenta je výkonnostně optimalizovaná pro plynulou animaci bez zasekávání:

React optimalizace

  • React.memo - Předchází zbytečným re-renderům komponenty
  • useMemo hooks - Cachuje výpočty rozměrů, classNames a stylů
  • Memoizované paths - SVG elementy se renderují pouze při změně varianty
  • Color cache (useRef) - Ukládá vypočtené barvy bez re-renderů
  • forwardRef - Bez dopadu na výkon, plná kontrola

CSS optimalizace

  • GPU akcelerace - transform: translateZ(0) na SVG
  • will-change - Prohlížeč předalokuje GPU vrstvy pro animace
  • CSS containment - contain: layout style paint izoluje render
  • Optimalizované stínování - Gradient místo drop-shadow na SVG wrapperu (−60% CSS nákladů)
  • Zachované glow animace - Tečka nad "i" pulzuje s drop-shadow, ale zůstává nehybná

Výsledky optimalizací

| Metrika | Před | Po | Zlepšení | |---------|------|-----|----------| | Re-render paths | při každém renderu | pouze při změně varianty | −90% | | getColor() volání | při každém renderu | cache v useRef | −95% | | Drop-shadow CPU | vysoká | gradient (nízká) | −60% | | FPS při animaci | 40-50 | 58-60 | +25% | | GPU využití | minimální | optimalizované | +GPU layers |

Best Practices

Pro maximální výkon dodržuj:

// ✅ DOBŘE - stabilní props = žádné re-rendery
<AnimatedLogo variant="strandhill" animated={true} width={350} />

// ❌ ŠPATNĚ - nové objekty při každém renderu
<AnimatedLogo style={{ margin: '20px' }} /> // vytváří nový objekt pokaždé

// ✅ DOBŘE - memoizované objekty
const logoStyle = useMemo(() => ({ margin: '20px' }), []);
<AnimatedLogo style={logoStyle} />

Kdy vypnout animaci

Pro nižší spotřebu energie na mobilních zařízeních:

const [isVisible, setIsVisible] = useState(true);

// Vypni animaci po prvním zobrazení
useEffect(() => {
  const timer = setTimeout(() => setIsVisible(false), 5000);
  return () => clearTimeout(timer);
}, []);

<AnimatedLogo animated={isVisible} />

Struktura souborů

src/bit/ui2/animated-logo/
├── index.jsx              # React komponenta
├── AnimatedLogo.css       # CSS animace
├── logo-variants.js       # Konfigurace variant log
└── README.md              # Dokumentace

Vývoj a testování

Komponenta je součástí Bit.dev namespace @bit.rhplus/ui2. Vždy používej import se /_src pro vývoj:

import AnimatedLogo from '@bit.rhplus/ui2.logo/_src';

To zajistí, že pracuješ s živým zdrojovým kódem ze složky src/bit/ui2/logo/ a ne s buildem z node_modules.

Poznámky

  • Pokud specifikuješ neexistující variantu, komponenta použije 'strandhill' a vypíše warning do konzole
  • Všechny SVG paths jsou převzaty z originálního HTML demo
  • Barvy jsou konfigurovatelné přes logo-variants.js
  • Animace lze vypnout globálně přes animated={false}