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

@sia-ui/api

v0.8.0

Published

Typed HTTP client with CRUD services, plugins and injectable transports.

Downloads

1,696

Readme

@sia-ui/api

Un client HTTP typé, ses services CRUD et ses greffons. Aucun rapport avec l'interface : ni React, ni DOM, ni tokens.

pnpm add @sia-ui/api

Il est utilisable seul : rien n'oblige à prendre les composants pour avoir le client, ni l'inverse.

Le transport est injecté, jamais importé

import { createApiClient, createAuthPlugin } from "@sia-ui/api";

const api = createApiClient({
  baseURL: "/api",
  plugins: [createAuthPlugin({ getToken: () => tokens.access })],
});

const { items, meta } = await api.getPaginated<Client>("/clients", { page: 1 });

createFetchTransport() par défaut, createAxiosTransport(axios.create()) si le projet utilise déjà axios. Le paquet ne dépend d'aucun des deux.

Ce qu'il contient

| | | | -------------- | ------------------------------------------------------------------------------------------- | | ApiClient | requêtes, pagination, curseur, head, getList | | BaseService | le CRUD d'une ressource, removeMany, search | | HttpError | statut, corps, et fields — trois formes d'erreurs par champ | | Greffons | auth, rafraîchissement de jeton, 401, journal, idempotence, lecture seule, signal d'en-tête | | TokenStorage | mémoire ou navigateur, chaque accès protégé | | Cache | createQueryResource : clés et options TanStack Query, invalidation après écriture | | Temps réel | createRealtimeBinding : Socket.IO ou SSE qui tient le cache à jour, rattrapage à la reconnexion | | Messages | FRENCH_STATUS_MESSAGES, ENGLISH_STATUS_MESSAGES : une phrase lisible par statut | | Filtres | $and / $or portés par un en-tête plutôt que par l'URL |

Voir docs/fondations/module-api.md.

Contribuer

Le code source principal de SIA UI est privé pour le moment. Les retours publics passent par le dépôt BeatJo/sia-ui-site : bugs, demandes de composants, corrections de documentation et questions d'usage.

  • Signaler un bug : https://github.com/BeatJo/sia-ui-site/issues
  • Lire la documentation : https://beatjo.github.io/sia-ui-site/
  • Voir la démonstration : https://beatjo.github.io/sia-ui-site/preview/

Les contributions directes au code des packages se font sur invitation dans le dépôt source privé.

Journal des changements

Le contenu ci-dessous reprend intégralement CHANGELOG.md pour rester visible sur npm.

@sia-ui/api

0.8.0

Minor Changes

  • Français et anglais livrés, temps réel, calendrier réécrit, suivi d'opérations.
    • Deux langues — FRENCH et ENGLISH (@sia-ui/headless), au format SiaLocale : la langue de formatage (language), le vocabulaire commun et un groupe typé par composant. Plus aucun texte en dur dans les composants, aria-label compris ; dates, nombres et pluriels suivent language. Une application qui a sa propre i18n remplit le même format. formatMessage et plural ({count}, clés _one / _other). ENGLISH_STATUS_MESSAGES (@sia-ui/api) à côté de FRENCH_STATUS_MESSAGES. Seul changement de forme : EventCalendarLabels.more, qui était une fonction, devient more_one / more_other avec {count}.
    • SiaProvider seul fournisseur — il prend locale et defaults, et s'imbrique pour une section. SiaConfigProvider est obsolète.
    • Temps réel — createRealtimeBinding, socketIoSource, eventSourceSource (@sia-ui/api), useRealtimeStatus, LiveIndicator.
    • EventCalendar réécrit — vues mois, semaine, jour, agenda ; variantes ; mode étroit. EventManager : créer, consulter, modifier, supprimer.
    • Nouveaux composants — AccountMenu, ColorModeToggle, LogStream, JsonView, JobProgress, BrandIcon ; SunIcon, MoonIcon.
    • Formulaires — validateAsync par champ, submitProps.disabled respecté ; controlProps sur une propriété de ressource.
    • Tons lisibles en mode sombre — --sia-<ton>-foreground, calculés pour le contraste ; noms de variables CSS en kebab-case.
    • Couches en portail — menus, calendriers, boîtes et toasts, rendus hors de [data-sia-root], reprennent la police et la couleur de texte du système au lieu de celles du navigateur.
    • Drawer et Modal — la fermeture est signalée tout de suite ; un double clic à l'ouverture ne referme plus.
    • Documentation — la présentation décrit chaque brique métier (session, greffons d'API, ressources, formulaires, temps réel, langues, utilitaires) avec son scénario et un exemple.
    • Props des sous-composants — chaque composant composé expose celles de ce qu'il utilise (…Props) ; pnpm check:slot-props le vérifie.

0.7.1

Patch Changes

  • Aligne les packages publics de SIA UI sur la version 0.7.1 afin que les huit packages restent sur une version commune.
  • Updated dependencies

0.7.0

Minor Changes

  • Adaptateur TanStack Router, mises à jour en PATCH, et secretChanges.
    • useDataTableQuery({ router }) — adaptateur TanStack Router livré et testé (createTanStackRouterStorage). La recette de la documentation mettait page=2 entre guillemets (page=%222%22) et la page retombait à 1 ; les nombres passent désormais comme nombres, sans perte pour les filtres.
    • Un tableau n'écrit plus que ses propres clés (mergeTableQuery dans @sia-ui/headless) : deux tableaux préfixés sur une page, ou un onglet dans l'URL, ne s'effacent plus l'un l'autre — avec l'URL du navigateur comme avec un routeur.
    • createQueryResource(service, { updateMethod: "PATCH" }) — pour une API qui n'accepte que des mises à jour partielles.
    • secretChanges(entries, storedKeys) — ce qu'il faut envoyer après une saisie dans SecretFields : { set, remove, missing }.

Patch Changes

0.6.0

Minor Changes

  • Rôles, requêtes serveur, ressources par mode, et deux blocs de console.

    • Rôles — la couche d'accès lit les rôles de la session sous la forme role:<nom> (role("admin")), avec les trois évaluateurs.
    • Tableaux servis par le serveur — useDataTableQuery accepte un storage (TanStack Router, React Router) et serverParams pour les noms attendus (limit, sort + order, ASC/DESC). toServerParams dans @sia-ui/headless.
    • TanStack Query — createQueryResource(service) : clés emboîtées, options de requête avec annulation, mutations qui invalident ce qu'elles rendent périmé. Aucune dépendance à TanStack.
    • Ressources — inForm et required par mode ("create", "edit"), value pour une colonne calculée.
    • En-têtes — PageHeader level, CrudPage headingLevel. Le repli suit la place disponible ; les actions ne s'écrasent plus.
    • Nouveaux — SecretFields (secrets en écriture seule), ActivityLog (journal filtré par le serveur), StatusBadge et toneOf, dix icônes de console.
    • Les icônes des boutons de CrudPage et DataTable passent par leftIcon : elles ne se collent plus au libellé.
  • sia-ui update, la feuille commune suivie, et des erreurs HTTP en français.

    • sia-ui update [nom...] — met à jour les entrées en retard sans perdre de retouche : un fichier intact est remplacé, un fichier modifié depuis son installation est gardé et signalé (sia-ui diff, puis --force pour l'écraser). Les dépendances de registre apparues sont installées, les paquets npm annoncés. --dry-run montre sans rien écrire. Une entrée dont un fichier a été gardé reste « en retard » dans le verrou.
    • sia-ui.css suivie — son empreinte est notée dans sia-ui.lock.json. update la met à jour comme un composant ; add aussi, si elle n'a pas été retouchée. init ne fait plus qu'initialiser. Elle est lue au même registre que les composants, HTTP compris. doctor signale une feuille en retard, modifiée ou copiée avant le suivi.
    • list --outdated et doctor conseillent sia-ui update au lieu de add --overwrite, qui écrasait aussi les retouches.
    • statusMessages (@sia-ui/api) — option du client, avec FRENCH_STATUS_MESSAGES. Remplace les messages génériques du serveur (« Conflict », « Forbidden resource », « Cannot GET /x », ThrottlerException) et l'échec réseau de fetch, jamais un message métier ni une erreur de champs.

Patch Changes

0.5.0

Minor Changes

  • Erreurs serveur dans les formulaires, client HTTP plus sûr, registre vérifié.

    Défauts

    • Registre drawer — context.ts et la dépendance icons manquaient : sia-ui add app-shell produisait un projet qui ne compilait pas. Un test vérifie désormais que chaque import relatif de chaque entrée est apporté par son installation.
    • sia-ui.css pose box-sizing: border-box (spécificité nulle). Sans reset côté projet, AppShell débordait de 32 px.
    • @sia-ui/api ne rejoue plus d'office que GET et HEAD (retryMethods). Une écriture n'est rejouée que si l'appel pose retry.
    • Plus aucun avertissement react-hooks/exhaustive-deps dans les composants.

    Formulaires et erreurs serveur

    • Form intercepte un envoi rejeté : erreurs de champ sous les champs, le reste dans une alerte. onSubmit peut aussi rendre { champ: message } (FormSubmitResult), dans useLocalForm, Form, CrudPage et l'adaptateur react-hook-form. CrudPage garde alors sa boîte ouverte.
    • Les erreurs posées par setErrors survivent à la validation locale jusqu'à la modification de leur champ.
    • HttpError.toFormErrors(), option fieldErrors du client et préréglage nestFieldErrors (class-validator). readSubmitError et hasFormErrors dans @sia-ui/headless.
    • La pagination à plat { data, total, page, limit } est reconnue, et get ne déballe plus data quand l'objet porte une pagination.

    Tableaux

    • searchDelay sur DataTable et CrudPage.
    • CrudPage place les extraRowActions avant « Supprimer ».

Patch Changes

0.4.0

Minor Changes

  • Aligne tous les packages publics SIA UI sur la version 0.4.0 afin de fournir un ensemble cohérent à installer, documenter et maintenir.

Patch Changes

0.3.2

Patch Changes

  • Ajoute l’identité visuelle officielle de SIA UI et améliore la documentation publique, les changelogs et les ressources de contribution.
  • Updated dependencies

0.3.1

Patch Changes

0.3.0

Minor Changes

  • Une ressource se déclare une fois, cinq composants refondus, et une documentation qui décrit le produit plutôt que son développement.

    Déclarer une ressource

    defineResource décrit un objet métier une seule fois. Les colonnes du tableau, les champs du formulaire, les lignes de la vue de détail, la validation, les clés de recherche et les quatre règles de droits en sont dérivés — et chaque dérivation reste remplaçable par la prop correspondante.

    <CrudPage resource={FACTURE} data={factures} can={can}
              onSubmit={…} onDelete={…} />

    Le rendu se déduit du type : un currency s'affiche formaté et aligné à droite, un select avec ses tones devient une pastille, une date passe par le format local. permissions: "auto" applique la convention <nom>.<verbe>.

    Les quatre opérations ouvrent leurs propres boîtes

    CrudPage n'appelle plus seulement un gestionnaire : déclarer fields et onSubmit suffit à obtenir un formulaire vide en création, le même prérempli en modification, et une vue de détail. onCreate, onEdit et onView restent la porte de sortie vers une page dédiée — fournis, ils passent devant la boîte.

    Les boîtes n'inventent rien : Modal pour la boîte, Form pour la saisie, Descriptions pour la lecture.

    Cinq composants refondus

    • Sidebar — le rail réduit n'enferme plus ses sous-menus : ils sortent en volet. Profondeur illimitée, droits en cascade, trois variantes.
    • AppShell — se branche sur n'importe quel routeur par une seule chaîne, l'adresse courante. Trois états de barre, tiroir ou onglets bas sur mobile, filtrage des droits fait une seule fois.
    • Avatar — teinte dérivée du nom, repli peint sous l'image, quatre états de présence, et des piles qui résument leur surplus.
    • DataTable — actions de ligne avec droits et confirmation, sélection et barre groupée, vue en cartes, trois densités, états de chargement, d'erreur et de vide.
    • CrudPage — réécrit : il tenait en neuf lignes et n'offrait aucune des quatre opérations qui lui donnent son nom.

    Ruptures

    • CrudPage : actions portait des nœuds d'en-tête, ils vont dans headerActions. data est requis, et columns l'est aussi à moins qu'une resource ne les fournisse.
    • Sidebar et AppShell : les props ont changé. Voir La navigation latérale et La coquille d'application.

    Documentation

    Les cent trois composants ont désormais une page de référence — ce qu'ils font, comment les installer, et toutes leurs props avec type et valeur par défaut. Ces pages sont écrites par le code : les props viennent des types, les descriptions de leurs commentaires, la commande d'installation du registre.

    Le catalogue est passé de seize sections en deux langues à neuf, ordonnées du plus général au plus assemblé. Les comptes rendus de développement ont été retirés de la documentation : ils décrivaient un chemin parcouru, pas un produit.

Patch Changes

0.2.0

Minor Changes

  • e4e4a72: Annonces, session et droits, formulaires sans dépendance, et vingt entrées de registre de plus.

    Composants

    • Annonces — toast() s'appelle hors de React, variante loading, boutons d'action, six coins réglables par annonce, balayage pour écarter, suivi de promesse.
    • Session et droits — createSessionStore avec sa machine à quatre états, createAccessLayer à évaluateur injecté, RequireSession sans routeur.
    • Formulaires — le contrat FormAdapter et useLocalForm, sans dépendance. Form est écrit sur le contrat : il n'importe ni react-hook-form ni zod, et se câble à l'un ou l'autre par un adaptateur.
    • Vingt entrées de registre de plus — progress, dropdown-menu, accordion, sidebar, breadcrumb, steps, toggle, scroll-area, hover-card, aspect-ratio, input-number, password-input, phone-input, chart, require-session, form…
    • Thème — mode system, persistance et script anti-clignotement dans SiaProvider, en remplacement de next-themes.

    @sia-ui/api

    Le client HTTP typé est un paquet à part : ni React, ni DOM, ni tokens. Il s'installe seul, et copier un Badge depuis le registre ne l'entraîne pas.

    Utilitaires

    @sia-ui/utils passe de six à quatorze modules : query, async, collection, object, validation, file, clipboard, locale.

    Archives

    • Plus de sourcemaps : elles pesaient environ soixante pour cent de chaque archive — @sia-ui/react-web passe de 2,1 Mo à 759 Ko.
    • Chaque paquet porte enfin la licence MIT qu'il annonce.

    Vitrine en ligne

    Trois surfaces publiées sur GitHub Pages à chaque poussée sur main : la documentation à la racine, le catalogue Storybook sous /storybook/, la démonstration sous /preview/. Le site de documentation est construit depuis les fichiers de docs/ eux-mêmes, qui restent du Markdown ordinaire.

    Le registre n'est plus une voie sans retour

    Installer était jusqu'ici définitif : plus rien ne disait ce qu'on avait, ce qu'on avait retouché, ni ce qui avait bougé en amont — donc rien ne permettait de corriger ni de déprécier une entrée après coup.

    • sia-ui.lock.json, écrit à chaque add : version, date et empreinte de chaque fichier copié.
    • Quatre commandes : diff, remove, doctor, list --outdated. remove refuse de casser un voisin ou d'effacer un fichier retouché.
    • Cycle de vie des entrées — experimental, stable, deprecated, removed — avec replacedBy. add refuse ce qui est retiré, doctor signale ce qui est déprécié chez qui l'a déjà installé.
    • Journal du registre, entrée par entrée, dont pnpm check:changelog refuse qu'il mente.
    • Registre servi en HTTP, versionné par l'URL : …/r/v1/. Corriger une entrée n'oblige plus à republier la CLI.

    Corrections

    • La case à cocher et le bouton radio masquaient leur contrôle natif en opacity:0. Le navigateur le peignait encore sous le visuel personnalisé, et ce dessin clignotait au clic. Les deux utilisent désormais la recette partagée .sia-visually-hidden, qui le découpe hors du rendu sans le retirer du clavier.
    • Une case à cocher non contrôlée ne se peignait jamais cochée : l'<input> basculait, mais la classe qui dessine la case ne suivait pas.
    • Le curseur de survol des graphes était ovale, et le tracé de la courbe haché : les marqueurs sont sortis du SVG, qui est étiré sans conserver ses proportions.
    • L'entrée drawer du registre était impossible à installer — elle importait deux dossiers que la CLI ne copie pas.

Patch Changes

Licence

MIT