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

@nocode-factory/sanity-kit

v2.34.0

Published

Outils Studio de NoCode Factory : Pages (liste + board), Composants, Historique

Downloads

8,515

Readme

@nocode-factory/sanity-kit

Outils Sanity Studio de NoCode Factory : Pages (liste + board), Composants, Historique, Design system, aperçu multi-environnements et partage de préversion. Plus, côté site Next.js : garde de préproduction, bascule brouillons / en ligne, bandeau.

Installer

Public sur npmjs, sans jeton. Dans le studio et dans le site :

npm install @nocode-factory/sanity-kit@latest

Un .npmrc qui envoie @nocode-factory vers npm.pkg.github.com est un reste d'avant la 2.0.0 (figé en 1.8.0) : le retirer.

Checklist d'un projet complet

| Où | Quoi | |---|---| | studio/sanity.config.ts | ncfKit(options) ; presentationTool({allowOrigins: ncfAllowedOrigins(options), …}) | | studio/.env (+ .env.production.local) | SANITY_STUDIO_PREVIEW_URL = site en ligne, SANITY_STUDIO_PREVIEW_URL_PREPROD = https://preview-<projet>.vercel.app, SANITY_STUDIO_NCF_PROJECT_KEY | | Vercel | domaine fixe preview-<projet>.vercel.app assigné à la branche preprod ; pas de Vercel Authentication sur les préversions (la garde du kit gère l'accès) | | web/proxy.ts | const guarded = await ncfPreviewGuard(req); if (guarded) return guarded | | web/app/api/draft-mode/toggle/route.ts | export const {GET} = ncfDraftModeToggle() | | layout racine du site | {isPreviewSite() && <NcfPreviewBanner isDraft={isDraft} />} | | .github/workflows/ | captures public/sections/<bloc>.png (workflow du starter) | | Studio | npx ncf-kit setup --types <types de pages> (journal), puis npx sanity deploy | | Studio, schéma | defineComponentDefaults({sections: SECTION_TYPES}) dans schema.types (singleton « Composants : valeurs par défaut ») ; champs obligatoires des sections en requiredUnlessDefault, jamais d'initialValue sur un champ de section | | Studio, Presentation | resolve: {mainDocuments: defineDocuments([componentDefaultsMainDocument({language})])} | | Site, client Sanity | stega: {studioUrl, filter: stegaFilter} | | Site, rendu des sections | applyDefaults(section, defaults, isDraft ? reattributeTo(source, section._key) : undefined) ; défauts lus avec componentDefaultsQuery(types, projection) | | Site, design system | page /design-system/composant?type=<nom> (rendu réel d'un composant, voir le starter) |

Puis, depuis studio/ :

npx ncf-kit doctor

Zéro ✖ = projet complet. Sortie 1 sinon (utilisable en CI).

Design system : la page de tous les styles et composants

La page /design-system du site (option componentPreview.path) est LA page du design system : fondations (couleurs, typographie, grille), marque, icônes et chaque composant rendu avec ses valeurs par défaut. Le bouton Design system de la barre du Studio l'ouvre dans Presentation, avec le document des valeurs par défaut des composants à côté.

Un style changé sur cette page change le composant global : cliquer un composant ouvre ses réglages par défaut, et la modification s'applique partout où une instance ne l'a pas surchargée (pastille bleue sur les champs surchargés).

Côté Studio, lier les pages du design system au document des valeurs par défaut :

presentationTool({resolve: {mainDocuments: defineDocuments([
  ...componentDefaultsMainDocuments({language: 'fr'}), // /design-system et /design-system/composant
])}})

Côté site, la page rend chaque démo avec les valeurs par défaut prioritaires (inherit(defaults[type], demo)), lues dans Sanity : en Presentation, les textes et options proviennent du document des valeurs par défaut, donc cliquables.

Barre du Studio : le kit rend les boutons d'outils. Les outils techniques (Vision, planification « Scheduled drafts » / Releases) sont rangés dans Plus (option moreTools, false pour tout garder en boutons). Ne pas définir de studio.components.toolMenu dans le projet : il masquerait ce menu.

Composants : valeurs par défaut, instances et overrides

Chaque composant (section du page builder) a des valeurs par défaut, réglées dans le document « 🧩 Composants : valeurs par défaut » (un bloc par composant, généré depuis les schémas). Une instance (le composant posé sur une page) dont un champ est vide hérite de la valeur par défaut, et la suit quand elle change. Un champ rempli est un override, jamais écrasé.

Dans le Studio :

  • Onglet Composants : un clic sur un composant (grille ou vue Map) ouvre Presentation avec son rendu réel et ses valeurs par défaut côte à côte. Depuis la Map, chaque page listée ouvre le formulaire sur l'instance.
  • Propager aux autres langues (publication de la version principale) : structure et valeurs non textuelles appliquées aux brouillons des traductions, textes modifiés marqués « À traduire » (jamais écrasés). Onglet Pages : pastille « À traduire · n » et filtre. Traduction groupée : npx ncf-kit translations (export JSON) puis npx ncf-kit translations apply <fichier> (brouillons, rien de publié).
  • Retirer du site (actions d'une page) : dépublie sans rien perdre (contenu gardé en brouillon), après avoir listé les documents qui pointent vers la page.
  • Champ Slug d'une page : l'adresse complète de la page en ligne s'affiche dessous (préfixe et langue compris), avec « Copier » et « Ouvrir ».
  • Formulaire d'une page : une pastille bleue marque tout champ d'instance différent de la valeur par défaut. Au survol, elle affiche la valeur par défaut ; au clic, le champ revient en héritage. Un champ qui hérite affiche la valeur par défaut (grisée, ou en mention sous les choix).
  • Preview : un clic sur un texte hérité ouvre le champ de l'instance.

Les outils de schéma sont aussi dans l'entrée @nocode-factory/sanity-kit/schema, sans interface : c'est elle qu'importent les fichiers de schéma et les scripts (sanity exec).

| API | Où | Rôle | |---|---|---| | defineComponentDefaults({sections}) | @nocode-factory/sanity-kit/schema | type du document des valeurs par défaut | | requiredUnlessDefault | @nocode-factory/sanity-kit/schema | obligatoire sauf valeur par défaut | | componentDefaultsMainDocument({language}) | @nocode-factory/sanity-kit/schema | Presentation : page de rendu = valeurs par défaut | | applyDefaults, inherit | @nocode-factory/sanity-kit/web/defaults | héritage côté site | | componentDefaultsQuery | @nocode-factory/sanity-kit/web/defaults | requête des valeurs par défaut | | stegaFilter, isOptionValue | @nocode-factory/sanity-kit/web/defaults | preview : options jamais encodées | | reattributeTo(source, key) | @nocode-factory/sanity-kit/web/defaults | preview : texte hérité cliquable vers l'instance |

npx ncf-kit doctor vérifie chaque branchement.

Test prod / préprod (bloquant)

Le kit livre le test qui garantit que la production n'affiche jamais de brouillon et que la préproduction reste privée. Dans le package.json du site :

"postbuild": "ncf-kit check-environments"

Après chaque next build (donc à chaque déploiement Vercel), il démarre le site construit en production puis en préproduction simulées et fait 25 contrôles. Un seul échec fait échouer le build : rien n'est mis en ligne. --page <chemin> choisit la page témoin.

Documentation

Dans le dépôt nocode-factory/ncf-sanity-kit : docs/INSTALL.md (options), docs/NOUVEAU-PROJET.md (prompt d'installation), docs/CHANGELOG.md. Le starter nocode-factory/sanity-next-starter est déjà câblé de bout en bout.