SculptForge
ZBrush-style sculpting for VFX, animation and games. VFX Reference Platform CY2026 and CY2027 builds, OpenUSD, a Python API and Send to Unreal. Free built-in AI: describe a brush and get it, or turn a
Design system neutre : tokens, composants et variantes.
Translation pending
DesignTypeScript · JavaScriptGitHub @LucGsnOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Design system neutre (tokens, composants React, skill Claude) inspiré de Paperclip
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Design system neutre, inspiré de Paperclip : gris purs, couleur réservée aux statuts et aux données, peu de texte, gros chiffres, explications au survol. Un cœur neutre, une couche de marque interchangeable, un thème sombre de référence et un thème clair dérivé.
npm run dev (http://localhost:3010)AppShell · Sidebar · PageHeader · SectionTitle · GroupDivider · Tabs · Button · IconButton · ToggleGroup · ModeSwitch · FilterSelect · Badge · StatusDot · Card · ChartCard · KpiStat · KpiGrid · BarChart · LineChart (bande d'incertitude) · Treemap · List · ListRow · DataTable · Drawer · InfoTooltip · EmptyState
Props et pièges : skills/graphite-ui/reference/components.md. Aucun texte ni donnée métier : tout est générique.
Le dépôt est privé. Le paquet est publié sur GitHub Packages (registre npm privé de GitHub) sous le nom @lucgsn/graphite-ui, à chaque release (Actions → Release). Il n'y a plus d'installation depuis Git, et rien n'est publié sur le registre npm public, où le nom graphite-ui appartient à un autre paquet.
GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token (classic) (GitHub Packages n'accepte que ces jetons, pas les jetons « fine-grained »).
graphite-ui (lecture) ; expiration : 90 jours à 1 an (à renouveler avant l'échéance).read:packages. Rien d'autre (surtout pas repo ni write:packages).LucGsn/graphite-ui : le paquet hérite des droits du dépôt privé.Poser le jeton dans l'environnement du poste, hors de tout dépôt (ex. ~/.zshrc) :
export NPM_TOKEN=<votre-jeton>
Dans le projet qui consomme le paquet, créer (et versionner) un fichier .npmrc à la racine. Il ne contient aucun jeton, seulement la référence à la variable (.npmrc.example) :
@lucgsn:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}
Installer avec un alias, pour que les imports restent graphite-ui :
npm install graphite-ui@npm:@lucgsn/[email protected] recharts
package.json contient alors "graphite-ui": "npm:@lucgsn/[email protected]", et tous les extraits ci-dessous (transpilePackages, @import, @source, imports) s'appliquent tels quels. Sans alias (npm install @lucgsn/graphite-ui), remplacer graphite-ui par @lucgsn/graphite-ui partout, y compris dans @source "../node_modules/@lucgsn/graphite-ui/src".
recharts n'est nécessaire que pour BarChart et LineChart. NPM_TOKEN doit être défini à chaque npm install / npm ci ; sinon npm répond « Failed to replace env in config: ${NPM_TOKEN} ».
.npmrc ci-dessus est dans le dépôt du projet (il ne contient pas de jeton).NPM_TOKEN = le jeton, cochée pour Production, Preview et Development (sans Preview, les déploiements de branches échouent), type Sensitive..npmrc et la variable ; aucune autre commande n'est nécessaire.La vitrine de ce dépôt n'a pas besoin de NPM_TOKEN : elle importe ../src directement. Dans les GitHub Actions d'un projet consommateur : env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} (secret du dépôt).
| Message ou symptôme | Cause probable |
|---|---|
401 Unauthorized | NPM_TOKEN absent, expiré, révoqué, ou non défini pour cet environnement Vercel (Preview). |
404 Not Found - @lucgsn/graphite-ui | Le compte du jeton n'a pas accès au dépôt, ou la ligne @lucgsn:registry=… manque dans le .npmrc. |
Failed to replace env in config | NPM_TOKEN n'est pas défini dans l'environnement qui lance npm. |
Un autre paquet graphite-ui s'installe (ou 404 npmjs) | Installation sans alias ni scope : utiliser graphite-ui@npm:@lucgsn/graphite-ui@<version>. |
No matching version | Cette version n'est pas publiée (la 0.2.0 ne l'a jamais été : voir le CHANGELOG). |
1. next.config.ts — le paquet est livré en TypeScript :
const config: NextConfig = { transpilePackages: ["graphite-ui"] };
2. app/globals.css :
@import "tailwindcss";
@import "graphite-ui/styles.css";
/* @import "graphite-ui/themes/omnes.css"; */ /* thème de marque d'exemple, facultatif */
@source "../node_modules/graphite-ui/src";
@source est relatif au fichier CSS : ajuster le nombre de ../ selon son emplacement.
3. app/layout.tsx — thème posé sur <html>, police Inter :
import { Inter } from "next/font/google";
const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="fr" data-theme="dark" className={inter.variable}>
<body>{children}</body>
</html>
);
}
data-theme="light" pour le clair ; data-brand="omnes" pour le thème de marque (combinables).
4. Utiliser les composants :
import { KpiGrid, KpiStat, Badge } from "graphite-ui";
export default function Page() {
return (
<KpiGrid>
<KpiStat
label="Taux d'activation"
value="44"
unit="%"
caption="vs 41 le mois dernier"
info="Part des comptes qui font une première action sous 7 jours."
badge={<Badge tone="success">Solide</Badge>}
/>
</KpiGrid>
);
}
Dans un composant serveur, ne pas passer de fonction à un composant client : pour les graphiques, unit="%" plutôt que formatValue. Détails : reference/components.md.
Mettre à jour : changer la version dans package.json (npm:@lucgsn/[email protected]), puis npm install. Les versions sont consignées dans le CHANGELOG.
Un questionnaire se décrit en JSON (contrat versionné, huit types de questions, affichage conditionnel) et s'affiche avec OnboardingShell : une question ou une section par écran, écrans personnalisés, enregistrement et reprise, récapitulatif, écran de fin. Le contrat et sa validation s'importent sans React : import { validateQuestionnaire } from "graphite-ui/questionnaire". Aucun appel à une IA dans le paquet : une IA peut générer le document, validateQuestionnaire dit s'il est conforme (voir le skill). Démonstration : /onboarding dans la vitrine.
Le dossier skills/graphite-ui/ contient SKILL.md, les tokens (tokens/), une référence des composants et trois pages d'exemple (examples/). Il est autonome.
node scripts/install-skill.mjs (installe dans ~/.claude/skills/graphite-ui) ou node scripts/install-skill.mjs --project (dans ./.claude/skills/ du projet courant).graphite-ui-skill-vX.Y.Z.zip). Pour le fabriquer à la main : zipper le dossier skills/graphite-ui (le dossier graphite-ui/ doit être à la racine de l'archive).npm install
npm run dev # vitrine
npm test # rendu des composants, contraste ≥ 4,5:1, aucune couleur en dur, skill à jour
npm run lint && npm run typecheck && npm run build
npm run tokens # régénère les CSS (et les copies du skill) depuis tokens/tokens.json
npm run shots # captures sombre/clair × 1440/375 dans docs/captures (après build)
npm run shots:onboarding # parcours d'onboarding : captures + contrôle axe (contraste compris)
tokens/tokens.json est la source unique : npm run tokens en génère src/styles/tokens.css, src/styles/themes/*.css et les copies du skill ; un test échoue si l'un d'eux est périmé.
X.Y.Z dans package.json, showcase/package.json et package-lock.json (les deux lignes version du lockfile), ajouter l'entrée du CHANGELOG, ouvrir une PR vers main, CI verte, fusionner.main), saisir X.Y.Z.package.json, publie @lucgsn/[email protected] sur GitHub Packages, crée le tag vX.Y.Z et la release avec le zip du skill (graphite-ui-skill-vX.Y.Z.zip). Une version déjà publiée n'est jamais republiée.NPM_TOKEN=<jeton read:packages> npm run verify:install.Importer le dépôt dans Vercel, Root Directory = showcase, framework Next.js. L'option « Include source files outside of the Root Directory » (activée par défaut) est nécessaire : la vitrine importe ../src.