Aller au contenu
SuperScheduler

Pour commencerS’applique àLite et Pro

Qu’est-ce qu’un planificateur de ressources ?

Un planificateur de ressources est une frise avec une ligne par ressource (une chambre, une personne, une machine, un véhicule) et le temps qui défile à l’horizontale : chaque réservation ou intervention est une barre sur la ligne de la ressource qui l’assure. Un agenda de rendez-vous montre un seul agenda en grilles jour, semaine ou mois ; un planificateur de ressources compare de nombreuses ressources côte à côte et permet de déplacer le travail de l’une à l’autre. SuperScheduler est un tel composant pour React : Lite est une frise quotidienne publique en lecture seule sur npm, et Pro ajoute l’édition, le zoom, les arborescences et des modules de planification.

Vérifié avec la v0.1.0 · relu le 7 octobre 2026.md

Un planificateur de ressources répond à une seule question : quelle ressource fait quoi, et quand est-elle libre ? Les ressources sont des lignes, le temps défile à l’horizontale, et chaque tâche est une barre posée sur la ligne de la ressource qui l’exécute. La réception d’un hôtel voit des chambres et des séjours, un atelier voit des postes et des réparations, un répartiteur voit des techniciens et des interventions.

Cette page explique en quoi cette disposition diffère d’un agenda, quand votre produit en a besoin, ce que SuperScheduler prend en charge et ce qui reste dans votre application, ainsi que la différence entre les deux éditions. Elle se termine par le vocabulaire employé dans le reste de la documentation.

Ce qui le distingue d’un agenda de rendez-vous

Les deux affichent des événements sur un axe de temps, mais ils répondent à des questions différentes.

Agenda de rendez-vousPlanificateur de ressources
Question principaleQu’y a-t-il dans cet agenda ?Quelle ressource fait quoi, et où reste-t-il de la capacité ?
DispositionLes jours en colonnes, les heures de haut en basLes ressources en lignes, le temps de gauche à droite
LignesUn agenda, parfois quelques-uns côte à côteDe quelques dizaines à des milliers de ressources, souvent groupées en arborescence
Action typiqueOuvrir ou créer un rendez-vousDéplacer le travail vers une autre ressource, changer ses dates, repérer un conflit
HorizonUn jour, une semaine ou un moisDe la minute au mois, souvent dans la même vue grâce au zoom
ChevauchementsDessinés côte à côte dans la colonne du jourEmpilés dans la ligne, ou refusés par vos règles

Un agenda s’organise autour de la personne qui le lit. Un planificateur de ressources s’organise autour de ce dont la capacité est limitée. Dès que les utilisateurs doivent en comparer beaucoup à la fois et déplacer le travail de l’un à l’autre, la disposition d’agenda ne tient plus : une vue semaine de 80 chambres, ce sont 80 agendas.

Quand vous en avez besoin

Il vous faut un planificateur de ressources lorsque plusieurs de ces conditions sont réunies :

  • La capacité est le problème. Chambres, lits, postes, équipes, studios, machines, véhicules, quais ou instruments ne peuvent faire qu’une chose à la fois, ou un nombre limité de choses.
  • Le travail passe d’une ressource à l’autre. Une réservation passe de la chambre 101 à la chambre 102, une réparation part vers un poste équipé d’un pont élévateur, une intervention est réattribuée à un autre technicien.
  • Beaucoup de ressources sont comparées en même temps. Des dizaines à des milliers de lignes, souvent groupées par site, étage, équipe ou type.
  • Les durées varient fortement. Des créneaux de 15 minutes et des affectations de plusieurs semaines cohabitent dans les mêmes données : la vue doit aller de la minute au mois.
  • Des règles décident de ce qui peut aller où. Un séjour ne peut pas être déplacé dans le passé, une intervention exige un technicien certifié, deux opérations ne peuvent pas partager un bloc.

Un agenda classique suffit quand une seule personne gère un seul agenda, quand le besoin principal porte sur les invitations et les réunions récurrentes, ou quand personne ne compare de ressources. Dans ce cas, un planificateur de ressources ajoute une dimension dont personne ne se sert.

Planning des chambres d’hôtelLa douche de la 104 fuit. Relogez le prochain client, bloquez la chambre pour le plombier et repérez les nuits déjà complètes. Rendez-vous d’un cabinet de kinésithérapieUn patient ne peut pas venir à 10 h. Trouvez le prochain créneau qui respecte pauses et nettoyages.

Ce que fait la bibliothèque et ce que fait votre application

SuperScheduler est un composant d’interface. Il affiche, mesure et gère les interactions ; il ne possède ni vos données ni votre logique métier.

SuperSchedulerVotre application
Dessine les lignes de ressources, les en-têtes de temps et les barres d’événements, et virtualise les deux axes pour que seul ce qui est à l’écran existe dans le DOMCharge les données depuis votre backend et y enregistre les modifications
Empile les événements qui se chevauchent dans une ligneDécide qui peut voir et modifier quoi
Gère les gestes au pointeur, au toucher et au clavier (Pro) et consulte vos callbacks avant de valider une modificationImplémente les règles métier dans ces callbacks, et valide de nouveau côté serveur
Affiche les refus, les conflits et le temps désactivé (Pro)Décide de ce qui constitue un conflit ou une période fermée
Formate les dates civiles dans la locale configuréeConvertit les instants avec fuseau en heures civiles locales, et inversement

Lite et Pro

SuperScheduler existe en deux éditions, avec le même nom de composant et les mêmes conventions de dates et de données.

FonctionnalitéLitePro
Axe du tempsCellules d’un jour uniquement (scale: 'Day')Minutes, durées de cellule personnalisées, heures, jours, semaines, mois et années
RessourcesListe plate (id, name)Listes plates, arborescences, lignes figées et scindées, colonnes d’en-tête de ligne
ÉvénementsBarres en lecture seule avec couleurs de base, classe et infobulleGlisser, redimensionner, créer par sélection, supprimer, HTML personnalisé, zones et menus
CallbacksonEventClick, onTimeRangeClickL’ensemble complet : avant et après chaque modification, pendant le glisser, hooks de rendu
Événements qui se chevauchentEmpilés automatiquementEmpilés, ou refusés avec allowEventOverlap: false, avec retour visuel sur le conflit
Règles métier pendant le glisserSans objetonEventMoving, onEventResizing, cellules désactivées, verrous par événement, confirmation asynchrone
ZoomAucunNiveaux de zoom, gestes de pincement et Ctrl/Cmd + molette, niveau de détail, widgets de zoom
ClavierLes flèches déplacent la cellule active ; Entrée ou Espace l’activeModèle clavier complet, y compris le déplacement et le redimensionnement des événements
VirtualisationLignes, jours et événementsLignes, temps et événements, plus le défilement infini
SélectionAucuneÉvénements, lignes, plages de temps, rectangles, plusieurs plages à la fois
Liens entre événementsAucunDessinés à partir de vos données (fin-début et les trois autres types)
ModulesAucunMinimap, volets, annuler et rétablir, vues enregistrées, chargement par plages, slots de rendu React, hooks d’état
ThèmesSix propriétés CSS personnaliséesJeu complet de tokens, mode sombre, préréglages de densité, preset Tailwind
Options non prises en chargeLèvent une erreurLes API réservées sont typées et émettent un avertissement unique en développement

Aucune des deux éditions ne limite le nombre de ressources ou d’événements. Lite lève une erreur lorsqu’il reçoit une option qu’il n’implémente pas : une configuration Pro ne fonctionne donc jamais à moitié, en silence, sur Lite. Pro conserve un petit ensemble d’API réservées, typées pour la compatibilité mais non implémentées (par exemple l’édition de texte en ligne, la création interactive de liens et l’export en images ou en tableurs) ; elles émettent un avertissement unique en développement, et la référence de l’API les signale.

Pour les questions commerciales sur Pro, consultez les tarifs.

Les données en une image

Tout ce que dessine le planificateur provient de deux tableaux : les ressources et les événements. Un événement désigne sa ressource par son id.

src/planning-data.tsts
import type { SuperScheduler } from 'super-scheduler'

// Rows: anything that can only do one thing at a time, or has a limited capacity.
export const resources: SuperScheduler.ResourceData[] = [
  { id: 'room-101', name: 'Room 101' },
  { id: 'room-102', name: 'Room 102' },
  { id: 'van-3', name: 'Van 3' },
]

// Bars: one interval on one row. `end` is exclusive, so the stay below ends at 11:00 on
// 5 October and a booking that starts at 11:00 that day does not overlap it.
export const events: SuperScheduler.EventData[] = [
  {
    id: 'booking-1042',
    resource: 'room-101',
    start: '2026-10-02T14:00:00',
    end: '2026-10-05T11:00:00',
    text: 'Booking 1042',
  },
  {
    id: 'route-7',
    resource: 'van-3',
    start: '2026-10-03T08:00:00',
    end: '2026-10-03T12:30:00',
    text: 'Delivery route 7',
  },
]

Sur un axe en jours, vous verriez trois lignes et deux barres : l’une du 2 au 5 octobre sur la ligne Room 101, l’autre le 3 octobre sur Van 3. Le guide du modèle de données détaille les ids, les intervalles et les champs personnalisés.

Glossaire

Ces termes ont le même sens dans toute la documentation et dans l’API.

Ressource

Une ligne du planificateur : tout ce qui peut travailler au fil du temps. Dans l’API, c’est ResourceData, avec un id et un name. Dans Pro, les ressources peuvent avoir des children (une arborescence), être figées en haut ou en bas, ou être scindées en sous-lignes. Certaines API parlent de row (ligne) : une ligne est la ressource affichée.

Événement

Une barre sur la ligne d’une ressource : une réservation, un poste, une intervention, un séjour. Dans l’API, c’est EventData, avec un id, un text, un start, un end et la resource à laquelle il appartient. Dans les callbacks, vous recevez généralement un objet enveloppe (SuperScheduler.Event) dont la propriété data est votre objet.

Intervalle

L’étendue d’un événement, de start à end. Les intervalles sont semi-ouverts, [start, end) : le début appartient à l’événement, la fin non. Un événement qui se termine à 11:00 et un autre qui commence à 11:00 ne se chevauchent pas.

Cellule

Un pas de la grille de temps sur une ligne : un jour, une heure ou un créneau de 15 minutes, selon l’échelle. C’est sur les cellules que l’on clique pour sélectionner du temps, sur elles que s’aligne le magnétisme, et ce sont elles que vous pouvez désactiver ou décorer avec onBeforeCellRender (Pro).

Échelle

La taille d’une cellule : Day dans Lite ; dans Pro, aussi Hour, Minute, Week, Month, Year, ou CellDuration avec un nombre de minutes personnalisé. L’échelle est indépendante des libellés des en-têtes. Voir Heures, minutes, jours et zoom.

Niveau de zoom

Un ensemble nommé d’options de l’axe du temps (échelle, durée de cellule, largeur de cellule, en-têtes) que Pro applique en bloc. Les gestes et control.zoom passent d’un niveau de zoom à l’autre, ou zooment en continu entre eux.

Contrôle

L’instance du planificateur, SuperScheduler.Scheduler. Le composant React en crée une au montage et la libère au démontage. Vous appelez ses méthodes pour faire défiler, sélectionner, mettre à jour ou zoomer ; les handlers la reçoivent dans args.control. Voir Intégration React.

Étapes suivantes