Cette page liste l’API publique qu’implémente SuperScheduler 0.1.0 : les composants React, chaque option avec son type et sa valeur par défaut, regroupées par domaine, les callbacks avec leurs arguments et leur prise en charge de l’annulation ou de l’asynchrone, les méthodes du contrôle, les modules Pro par sous-chemin et l’API Lite. Les membres typés mais non implémentés sont listés à part, sous API réservées : ils émettent un avertissement dans les builds de développement et ne font rien.
Vérifié avec la v0.1.0 · relu le 7 octobre 2026.md
Cette référence couvre l’API utilisée dans l’ensemble de ces guides, telle qu’implémentée dans la version 0.1.0. Tout, sauf la section API Lite, appartient à SuperScheduler Pro (super-scheduler). Les valeurs par défaut sont celles que le contrôle utilise quand vous omettez une option ; « aucune » signifie que l’option n’a pas de valeur tant que vous n’en définissez pas. Les guides expliquent comment combiner ces éléments ; les exemples les montrent dans des applications qui fonctionnent.
Quelques conventions valent partout :
DateInput est SuperScheduler.Date | string. Les chaînes sont des valeurs ISO 8601 civiles avec secondes ('2026-10-01T14:00:00') ou des dates ('2026-10-01'). Les fins d’événements sont exclusives.
Les id de ressources, d’événements et de liens sont de type string | number et sont comparés strictement : 1 et '1' sont différents.
Les options sont à la fois des props de SuperSchedulerComponent, des clés de control.update(options) et des propriétés vivantes du contrôle.
Les handlers s’exécutent avec this lié au contrôle. Leurs valeurs de retour sont ignorées, et un handler async n’est pas attendu : utilisez le protocole async et loaded() là où il existe.
Chaque point d’entrée est livré en ESM et en CommonJS, avec ses déclarations de types. React 18.2 ou ultérieur, ou 19, est une dépendance peer (React DOM aussi pour Pro) ; il n’y a aucune dépendance à l’exécution. Tous les modules peuvent être importés sur un serveur sans DOM.
SuperSchedulerComponent héberge un contrôle. Ses props (SchedulerProps) sont toutes les options et tous les handlers ci-dessous, plus controlRef. Il rend un <div> sans style, n’a pas de props className, style ni id, et ne transmet à control.update() que les props dont l’identité a changé depuis le dernier rendu ; une prop qui disparaît revient à sa valeur par défaut.
Membre
Type
Remarques
ref.current.control
SuperScheduler.Scheduler
Assigné au montage ; après le démontage, c’est le contrôle libéré
controlRef
MutableRefObject<Scheduler | null> ou (control) => void
Les objets ref sont renseignés au montage et vidés au démontage ; les fonctions ne sont appelées avec le contrôle qu’au montage
useSchedulerControl()
{ controlRef, control }
control est un état React : null jusqu’au montage, puis le contrôle, null après le démontage
Le composant de super-scheduler/react-render accepte les mêmes props, plus renderEvent, renderCell, renderRowHeader, renderTimeHeader, renderArea, renderCorner, eventHover, les handlers onBefore*DomAdd et onBefore*DomRemove, et renderOptions (voir react-render).
src/control-access.tsxtsx
import { useEffect, useRef } from'react'import { SuperScheduler, SuperSchedulerComponent, useSchedulerControl } from'super-scheduler'import { useScheduler } from'super-scheduler/hooks'constCONFIG= { startDate:'2026-10-01', days:31, scale:'Day',} satisfiesSuperScheduler.SchedulerConfig// 1. A class ref: `ref.current.control` exists after mount.exportfunctionWithRef() {constref=useRef<SuperSchedulerComponent>(null)useEffect(() =>ref.current?.control.scrollTo('2026-10-15',true,'middle'), [])return <SuperSchedulerComponentref={ref} {...CONFIG} />}// 2. The control as React state: null until mount, then the live control.exportfunctionWithHook() {const { controlRef,control } =useSchedulerControl()useEffect(() =>control?.scrollTo(SuperScheduler.Date.today()), [control])return <SuperSchedulerComponentcontrolRef={controlRef} {...CONFIG} />}// 3. Control plus tracked state topics, published after changes settle.exportfunctionWithState() {const { controlRef,state } =useScheduler({ track: ['zoom','viewport'] })return ( <> <p> {state.viewport ===undefined?'':`${state.viewport.start.toString('d MMM')} to ${state.viewport.end.toString('d MMM')}`} </p> <SuperSchedulerComponentcontrolRef={controlRef} {...CONFIG} /> </> )}// 4. Imperative, without React: init() before use, dispose() on teardown.exportfunctionmount(host:HTMLElement): () =>void {constcontrol=newSuperScheduler.Scheduler(host,CONFIG)control.init()return () =>control.dispose()}
SuperScheduler.EventData<T> n’a pas de signature d’index : déclarez les champs supplémentaires via le paramètre de type, par exemple EventData<{ guest: string }>.
Champs
Type
Signification
id, start, end, text
EventId, DateInput, DateInput, string
Obligatoires. end est exclusif, sauf avec eventEndSpec: 'Date'
Avant et après.onEventMove s’exécute avant une modification et peut l’annuler ; onEventMoved s’exécute après. La plupart des paires suivent ce modèle.
Annulation. Les handlers dont les arguments ont preventDefault() peuvent annuler : la famille des clics, onEventSelect, onEventDelete, onEventMove, onEventResize, onTimeRangeSelect, onTimeRangeClick et ses variantes double-clic et clic droit, onRectangleSelect, onRowClick et ses variantes, onRowSelect, onResourceExpand, onResourceCollapse, onTimeHeaderClick, onTimeHeaderRightClick, onGridMouseDown, onKeyDown, onKeyboardFocusChange et onLinkClick. Annuler un clic empêche aussi son handler en « -ed » et l’action qui suit.
Confirmation asynchrone.onEventMove et onEventResize prennent en charge args.async = true puis un appel ultérieur à args.loaded() ; preventDefault() avant loaded() annule, et newStart, newEnd et newResource définis avant loaded() sont appliqués.
Pilotage.onEventMoving, onEventResizing, onTimeRangeSelecting et onRectangleSelecting s’exécutent à chaque changement de l’ombre ; affectez args.allowed, args.start, args.end, args.cssClass ou args.html.
Le contrôle est ref.current.control, la valeur de controlRef, args.control dans la plupart des handlers, ou new SuperScheduler.Scheduler(element, options) suivi de init().
createHistory(options?) renvoie un historique à passer via history={history} ou dans extensions. Options : limit (50), record (['move', 'resize']), keys ('root', 'document' ou false ; 'root' par défaut), equals, fields, apply ('control' ou une fonction pour les événements contrôlés) et labels. Méthodes : undo(), redo(), clear(), push({ label, undo, redo }), record({ ops, control }), batch(label, run), revert(eventId), subscribe(listener) ; propriétés canUndo, canRedo, undoLabel, redoLabel. Les chargements et les modifications refusées ne sont pas enregistrés.
createMinimap(control, container, options?) et le composant React <SchedulerMinimap control={control} />. Options : series (par défaut eventDensity(control)), height (28), peak ('relative', ou 'absolute' avec max), tone, marks (today, months, past, tous à true), range et labels. Le widget dispose de update(), refresh() et dispose().
useScheduler({ track }) renvoie { controlRef, control, state } pour les sujets 'events', 'selection', 'zoom', 'viewport' et 'history'. useSchedulerState(control, topic), subscribeScheduler(control, topic, listener) (qui renvoie une fonction de désabonnement) et getSchedulerSnapshot(control, topic) donnent le même état hors du hook. L’état de la zone visible est publié une fois le défilement stabilisé.
SuperSchedulerComponent avec les props de contenu React. Le repli HTML ou texte est peint en premier ; le contenu React le remplace après la fin de l’interaction. renderOptions.retain vaut par défaut le plus petit de 2 000 ou du double des éléments montés ; sliceMs vaut 8.
Un preset Tailwind CSS v3 : presets: [require('super-scheduler/tailwind')]. Il ajoute des couleurs, rayons, ombres et transitions super-scheduler associés aux tokens CSS.
generateDataset(options) et generateScenario(id, overrides?) créent des données déterministes de type hôtelier (rows et days obligatoires, seed, start en ticks, density, events, times). toSuperSchedulerData(dataset) renvoie { resources, events }. Scénarios : S1 (120 lignes, 730 jours), S2 (1 000 lignes, 730 jours), S3 (5 000 lignes, 1 500 jours) et leurs variantes denses. Par défaut, les données commencent le 2026-01-01.
Utilitaires sans DOM partagés par le moteur : SchedulerDate, Duration, registerLocale, resolveLocale, formatTicks, parseTicks, ticksFromParts(year, month, day, ...), partsOf, formatIso, parseIso, todayTicks, nowTicks, les constantes MS_PER_*, ainsi que des utilitaires de frise, d’index et de mise en page. Utilisez-le pour des graphiques et des outils placés à côté du planificateur.
super-scheduler-lite est une frise journalière en lecture seule. Les options qu’il n’implémente pas lèvent SuperScheduler Lite: unsupported option "...", dans tous les builds.
({ control, start, end, resource, originalEvent }) => void, sur toute cellule vide
aucune
controlRef
objet ref ou (control | null) => void
aucune
Le contrôle (ref.current.control) dispose de init(), update(options), dispose(), disposed(), scrollTo(date), scrollToResource(id), visibleStart() et visibleEnd(). L’espace de noms contient SuperScheduler.Date et SuperScheduler.Scheduler. Les champs de ressource children, frozen, split et columns sont rejetés. Tokens de thème sur .super-scheduler-lite : --super-scheduler-background, -text, -border, -header, -event et -focus. Voir Passer de Lite à Pro.
Ces membres sont typés pour que le code existant compile, mais ils ne sont pas implémentés dans la 0.1.0. Ils ne font rien, renvoient des valeurs vides et affichent super-scheduler: <feature> is not supported yet une seule fois dans les builds de développement.
Domaine
Réservé
Édition en ligne
eventEditHandling, eventEditMinWidth, rowEditHandling, valeurs 'Edit' des options de gestion des clics, events.edit(), rows.edit(), Row.edit(), onEventEdit, onEventEdited, onEventEditKeyDown, onRowEdit, onRowEdited, onAfterEventEditRender
linkCreateHandling, linkDotSize, linkPointSize, onLinkCreate, onLinkCreated (les liens sont tracés à partir des données links)
Allers-retours serveur et chargement HTTP
valeurs de gestion 'CallBack' et 'PostBack' et actions de menu correspondantes, backendUrl, eventsLoadMethod, rowsLoadMethod, linksLoadMethod, events.load(), rows.load(), links.load(), blockOnCallBack, notifyCommit, clientState, onCallBackStart, onCallBackEnd, onLoadNode
viewType: 'Days' et 'Gantt' (rendus comme 'Resources'), layout, rowHeaderScrolling, rowHeaderColumnsMode, rowHeaderHideIconEnabled, rows.headerHide(), rows.headerShow(), rows.headerToggle(), timeHeaderTextWrappingEnabled, sortDirections, syncResourceTree
Autres
api, eventBubbleShowForMargins, hideBorderFor100PctHeight, hideUntilInit, initEventEnabled, jointEventsMove, jointEventsResize, navigatorBackSync, overrideWheelScrolling, scrollStep, watchWidthChanges, range et range.all() (utilisez multirange), events.focus(), uiBlock(), uiUnblock(), onBeforeGridLineRender, onResourceHeaderClick, onResourceHeaderClicked, SuperScheduler.Navigator, Row.column(i).html(value), onDomAdd et onDomRemove de Bubble
Partiellement implémentés :
treeAnimation est accepté, mais l’animation de dépliage n’est jamais jouée.
eventClusters et onClusterClick sont acceptés et n’ont encore aucun effet visible.
Les handlers onBefore*DomAdd et onBefore*DomRemove, les props render* et eventHover ne fonctionnent qu’avec le composant de super-scheduler/react-render ; le composant racine émet un avertissement et les ignore.
Indications de réglage acceptées mais ignorées, car la virtualisation est toujours active et se règle d’elle-même : beforeCellRenderCaching, cellSweeping, cellSweepingCacheSize, drawBlankCells, dynamicEventRendering et ses options de marge et de cache, eventUpdateInplaceOptimization, progressiveRowRendering, progressiveRowRenderingPreload et les options scrollDelay* autres que scrollDelayDynamic.