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

tlx-candy-icons

v0.2.3

Published

Premium icon set for TalentListX ecosystem

Readme

tlx-candy-icons

Librairie d'icônes Candy pour l'écosystème TalentListX. Icônes natives immuables + wrapper CandyBox pour icônes tierces.

Installation

npm install tlx-candy-icons

Architecture

La librairie expose deux familles distinctes de composants.

Icônes natives (statiques)

Ces composants représentent des illustrations de marque prêtes à l'emploi. Leur rendu visuel est immuable : fond, couleur interne et taille interne sont fixes.

| Composant | Description | Fond par défaut | | :------------ | :------------------------------ | :-------------- | | JobIcon | Illustration offre d'emploi | #2865EC | | EmptyOffer | État vide liste d'offres | #9E9EAD | | SuccessAuth | Confirmation d'authentification | #4CAF82 | | TlxCandy1 | Logo principal (Gris/Standard) | #9E9EAD | | TlxCandy2 | Logo secondaire (Bleu) | #9E9EAD | | Logo | Sélecteur de logo (wrapper) | Variable |

Seule prop autorisée : size (nombre, défaut 80).

import { JobIcon, EmptyOffer, SuccessAuth, Logo, TlxCandy1, TlxCandy2 } from 'tlx-candy-icons';

<JobIcon size={80} />
<EmptyOffer size={64} />
<SuccessAuth size={48} />
<Logo size={36} />
<Logo size={36} variant="blue" />

CandyBox (wrapper flexible)

CandyBox est le seul composant flexible. Il est destiné à accueillir une icône tierce (Lucide, Hugeicons, Heroicons, React Icons, etc.) en lui imposant automatiquement la charte Candy :

  • Couleur forcée : l'icône enfant reçoit automatiquement color="#FFFFFF".
  • Centrage automatique : l'icône est centrée sur X et Y.
  • Taille proportionnelle : l'icône occupe 50 % du conteneur (calculé par le package).
import { CandyBox } from 'tlx-candy-icons';
import { BriefcaseBusinessIcon } from 'lucide-react';

<CandyBox size={80} variant="primary">
  <BriefcaseBusinessIcon />
</CandyBox>

L'utilisateur ne doit pas passer size ou color à l'icône enfant. Le package s'en charge.


Variants disponibles

La palette sémantique est stricte. Seuls ces variants sont acceptés par CandyBox :

| Variant | Couleur | Usage | | :---------- | :-------- | :-------------------------- | | default | #9E9EAD | État neutre | | primary | #5B8DEF | Action principale / Brand | | success | #4CAF82 | Succès / Validation | | danger | #F05C6E | Erreur / Critique | | warning | #F5A623 | Avertissement | | info | #29B6D4 | Information | | muted | #B8B8C8 | Inactif / Archivé | | premium | #9C6FDE | VIP / Exclusivité | | new | #FF7A59 | Nouveauté | | star | #F5C842 | Favori / Mis en avant | | nature | #6DBF6A | Écologie / Santé |


API

CandyBox

type CandyBoxProps = {
  size?: number;       // Taille globale du bloc (défaut: 80)
  variant?: CandyVariant; // Couleur du fond Candy (défaut: 'default')
  children: React.ReactNode; // Icône tierce
  className?: string;
};

Icônes natives

type NativeIconProps = {
  size?: number;    // Taille globale du composant (défaut: 80)
  className?: string;
};

Logo

type LogoProps = {
  size?: number;          // Taille globale (défaut: 36)
  variant?: 'default' | 'blue'; // Choix du fichier de logo
  className?: string;
};

Ce qu'il ne faut pas faire

// ❌ Ne jamais passer bg, padding, iconSize ou color custom
<CandyBox bg="#000000">
  <Icon color="red" size={12} />
</CandyBox>

// ❌ Ne jamais tenter de changer la couleur d'une icône native
<JobIcon variant="success" />
<EmptyOffer bg="#FF0000" />

Ces patterns sont volontairement interdits par l'API. Ils ont été supprimés pour garantir la cohérence visuelle du système Candy.


Compatibilité des bibliothèques d'icônes tierces

CandyBox est compatible avec les principales bibliothèques :

| Bibliothèque | Compatibilité | Note | | :----------- | :------------ | :-------------------------------- | | Lucide React | ✅ Complète | size + color injectés | | Hugeicons | ✅ Complète | size + color injectés | | Heroicons | ✅ Complète | width/height + color | | React Icons | ✅ Complète | size + color via style |


Développement

# Générer les composants depuis les SVG dans /icons
npm run generate

# Build production
npm run build

# Générer + builder en une commande
npm run icons

# Watcher (dev)
npm run dev

Ajouter une icône native

  1. Placer le SVG dans /icons (ex: my-icon.svg).
  2. Lancer npm run generate.
  3. Le composant MyIcon est généré dans src/components/ et exporté automatiquement.

Les composants CandyBox et Logo sont protégés — le script de génération ne les écrasera jamais.


Décisions d'architecture

  • Icônes natives immuables : le fond, la couleur et la taille interne sont codés en dur dans chaque composant. L'utilisateur final ne peut que redimensionner le bloc entier via size.
  • Génération automatique : Toutes les icônes natives (y compris les logos TlxCandy1 et TlxCandy2) sont générées à partir des fichiers SVG du dossier icons/, garantissant que les SVG sont la seule source de vérité.
  • CandyBox via foreignObject : le centrage de l'icône tierce est réalisé via foreignObject + Flexbox dans le SVG, ce qui garantit un centrage pixel-perfect quelle que soit la bibliothèque utilisée.
  • Palette fermée : CANDY_VARIANTS est la seule source de vérité. bg, padding, iconSize et color ont été supprimés de l'API publique.
  • SuccessAuth : renommé (casse corrigée depuis SuccesAuth).