Skip to main content

Installation

Dernière mise à jour:

Installez la bibliothèque d'interface utilisateur Frutjam uniquement CSS avec Tailwind CSS v4, UnoCSS ou aucune étape de construction du tout. Plus de 65 composants accessibles, zéro JavaScript, WCAG AA. Fonctionne avec Django, HTMX, Laravel, React et n'importe quelle pile.

Installer

bash
npm i -D frutjam

Choisissez ensuite la ligne ci-dessous qui correspond à votre configuration. Chacun vous donne les mêmes composants.

Votre configurationQuoi ajouterNavires
Vent arrière CSS v4@plugin "frutjam";seulement ce que tu utilises
UnoCSSpresetFrutjam()seulement ce que tu utilises
Vite, Astro, Rails, CSS simpleimport 'frutjam/css'tous les composants, 30 Ko compressés
Aucune étape de constructionun <link> étiquetertous les composants

Vent arrière CSS v4

Vous avez besoin d'un travail CSS vent arrière projet, plus Nœud et npm. Frutjam nécessite Tailwind 4.

Ajoutez Frutjam à votre input.css avec le @plugin directif:

css
1
2
@import "tailwindcss";
@plugin "frutjam";

C'est toute la configuration. Les plus de 65 composants sont disponibles immédiatement et Tailwind ne livre que ceux que votre balisage utilise.

UnoCSS

Frutjam fournit un préréglage, donc UnoCSS génère uniquement les composants que vous utilisez, de la même manière que le plugin Tailwind.

js
1
2
3
4
5
6
7
// uno.config.js
import { defineConfig, presetWind4 } from 'unocss';
import { presetFrutjam } from 'frutjam/unocss';

export default defineConfig({
  presets: [presetWind4(), presetFrutjam()],
});

Chaque classe fonctionne comme sous Tailwind, tout comme les variantes :

html
1
2
3
<button class="btn btn-error btn-xl">Delete</button>
<button class="md:btn-error">Red from the medium breakpoint up</button>
<div class="hover:card-primary">Fills on hover</div>

Ajouter presetAttributify() et le nom du composant devient un attribut, chaque valeur étant traitée comme une variante de celui-ci :

html
1
2
<button btn="error xl">Delete</button>
<button btn="md:(error xl)">Red and large from the medium breakpoint up</button>

La deuxième ligne a besoin transformerVariantGroup() pour la syntaxe des crochets. Notez qu'un attribut comme btn n'est pas du HTML valide, donc si vous validez votre balisage, utilisez le formulaire de classe ou celui d'UnoCSS un- préfixe.

Possibilités

OptionDéfautBut
preflighttrueÉmet les jetons, la réinitialisation et les thèmes de Frutjam. Régler sur false si vous importez déjà frutjam/css/base toi-même.
prefix''Correspond au plugin Tailwind prefix, donc 'fj' te donne fj-btn et fj-btn="error".
layer'frutjam'La couche en cascade dans laquelle les composants sont émis. Il trie sous les utilitaires, de sorte qu'un utilitaire l'emporte toujours sur un composant, quel que soit l'ordre dans lequel se trouvent les préréglages.

Le composant de lien a besoin d'une ligne de configuration

Traitements UnoCSS link en variante, pour le CSS :link pseudo-classe, et ses séparateurs par défaut incluent -. Donc link-2xl se lit comme "2xl, lorsqu'il n'est pas visité" plutôt que comme nom de classe, et rien n'est généré. Cela affecte uniquement ce composant et uniquement le link-* modificateurs.

Soit dites à UnoCSS de se diviser uniquement sur les deux-points :

js
1
2
3
4
export default defineConfig({
  separators: [':'],
  presets: [presetWind4(), presetFrutjam()],
});

Ou utilisez un préfixe qui met autre chose que link devant le nom :

js
presets: [presetWind4(), presetFrutjam({ prefix: 'fj' })],   // fj-link-2xl

Tous les autres composants ne sont pas affectés. link est le seul des 57 dont le nom entre en collision avec une pseudo-classe.

Pas de moteur utilitaire

Frutjam est construit avec Tailwind, mais les composants se compilent en CSS ordinaire qui lit les propriétés personnalisées. Si votre projet n'utilise aucun moteur utilitaire, importez la feuille de style au lieu du plugin :

js
import 'frutjam/css';

C'est toute la configuration. Chaque classe de composants fonctionne, les thèmes changent avec data-theme comme d'habitude, et rien d'autre n'est requis. Il fait 30 Ko compressé et contient les styles de base, les deux thèmes et plus de 65 composants.

Insérez uniquement ce dont vous avez besoin :

js
1
2
3
4
import 'frutjam/css/base';              // tokens and reset, always needed
import 'frutjam/css/components/button';
import 'frutjam/css/components/card';
import 'frutjam/css/themes/darkberry';  // optional

Ou sans aucune étape de construction :

html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/frutjam@2/dist/frutjam.components.css">
Installé en tant que plugin Tailwind, Frutjam ne livre que les composants que vous utilisez. Importé sous forme de feuille de style, il les livre tous, car il n'y a pas d'étape de construction pour lire votre balisage.

Aucune étape de construction

Déposez une balise et commencez à écrire du balisage. Utilisez-le pour un prototype ou une page que vous ne construisez pas, pas pour la production, car il contient tous les composants.

html
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/frutjam@2/dist/frutjam.components.css">

Pour expérimenter les utilitaires de Tailwind sur la même page, ajoutez la version du navigateur de Tailwind à côté :

html
1
2
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/frutjam@2/dist/frutjam.min.css">
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>

JavaScript et React : facultatifs, non obligatoires

Frutjam est natif d'abord et CSS-first. La grande majorité des composants : boutons, badges, cartes, formulaires, alertes, etc. : fonctionnent avec du HTML et du CSS purs, aucun JavaScript n'est nécessaire. Des éléments HTML natifs comme <dialog>, <details>, et <input type="checkbox"> gérer l'interactivité là où les navigateurs la prennent déjà en charge. Tous les composants sont WCAG AA accessibles immédiatement et fonctionnent avec Django, HTMX, Laravel, React, Next.js et n'importe quelle pile.

Un petit nombre de composants n'ont pas d'équivalent HTML natif (notifications toast, filtrage de combobox, contrôles de carrousel). Pour ces cas uniquement, Frutjam fournit des aides facultatives légères.

Vanille JS : frutjam/js

Assistants de module ES indépendants du framework pour les composants qui en ont besoin. Attachez-le à n’importe quel élément DOM, aucun framework requis.

js
1
2
3
4
5
6
import { createModal } from 'frutjam/js'

const modal = createModal(document.getElementById('myModal'))
modal.open()   // calls showModal()
modal.close()  // calls close()
modal.toggle()

Réagir aux crochets : frutjam/react

Thin React enveloppe les mêmes appels DOM natifs. Chaque crochet renvoie un ref vous vous attachez à l'élément et aux méthodes pour le contrôler, pas de dépendances supplémentaires au-delà de React lui-même.

js
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import { useModal } from 'frutjam/react'

export default function App() {
  const modal = useModal()
  return (
    <>
      <button onClick={modal.open}>Open</button>
      <dialog ref={modal.ref} className="modal">...</dialog>
    </>
  )
}

Disponible pour : useModal, useDrawer, useCollapsible, useTooltip, useTabs, useToast, useCarousel, useCombobox.

Prochaines étapes

Une fois installé, essayez le composant de bouton pour voir Frutjam en action, ou explorer l'intégralité bibliothèque de composants.

Intégration de l'éditeur IA

Vous utilisez Claude Code, Cursor ou un autre éditeur d'IA ?

Cherry MCP apporte la bibliothèque complète de composants de Frutjam directement dans le contexte de votre éditeur d'IA, des noms de classe précis, des documents en direct, sans copier-coller.

En savoir plus sur Cherry MCP →

Projet de démarrage

Construire avec Django ?

Un projet Django 6 fonctionnel avec Frutjam déjà connecté, des comptes, un tableau de bord, des thèmes et un exemple CRUD soutenu par des démarques. Clonez-le et commencez à construire.

Obtenez le démarreur Django →

Vous voulez comprendre la réflexion derrière l’approche CSS-first de Frutjam ? Lisez pourquoi nous l'avons construit de cette façon →