Aller au contenu
SuperScheduler

RéférenceS’applique àLite et Pro

Référence de l’API

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.

Points d’entrée

ImportÉditionExportsGuide
super-schedulerProSuperSchedulerComponent, useSchedulerControl, l’espace de noms SuperScheduler, SchedulerDate, SchedulerEvent, version et les types publicsIntégration React
super-scheduler/styles.cssProLa feuille de style (un seul @layer super-scheduler)Thèmes
super-scheduler/react-renderProSuperSchedulerComponent avec les props de rendu ReactSlots de rendu React
super-scheduler/historyProcreateHistoryAnnuler et rétablir
super-scheduler/minimapProcreateMinimap, SchedulerMinimap, eventDensityMinimap
super-scheduler/panesProSchedulerPanes, linkPanesVolets et vues enregistrées
super-scheduler/zoom-uiProcreateZoomHud, createZoomSlider, createLodBadgeÉchelles de temps et zoom
super-scheduler/viewsProgetViewState, applyViewStateVolets et vues enregistrées
super-scheduler/rangesProcreateRangeLoaderChargement par plages
super-scheduler/hooksProuseScheduler, useSchedulerState, subscribeScheduler, getSchedulerSnapshotÉtat contrôlé
super-scheduler/tailwindProPreset Tailwind CSS v3 (export =)Thèmes
super-scheduler/datasetsProgenerateDataset, generateScenario, toSuperSchedulerData, SCENARIOS, PrngPerformances
super-scheduler/coreProDates, durées, frises, index et utilitaires de mise en page sans DOM
super-scheduler-liteLiteSuperSchedulerComponent, l’espace de noms SuperScheduler, SchedulerDate, versionDémarrage rapide avec Lite
super-scheduler-lite/styles.cssLiteLa feuille de style LiteDémarrage rapide avec Lite

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.

Composants

SuperSchedulerComponent

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.

MembreTypeRemarques
ref.current.controlSuperScheduler.SchedulerAssigné au montage ; après le démontage, c’est le contrôle libéré
controlRefMutableRefObject<Scheduler | null> ou (control) => voidLes 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'

const CONFIG = {
  startDate: '2026-10-01',
  days: 31,
  scale: 'Day',
} satisfies SuperScheduler.SchedulerConfig

// 1. A class ref: `ref.current.control` exists after mount.
export function WithRef() {
  const ref = useRef<SuperSchedulerComponent>(null)
  useEffect(() => ref.current?.control.scrollTo('2026-10-15', true, 'middle'), [])
  return <SuperSchedulerComponent ref={ref} {...CONFIG} />
}

// 2. The control as React state: null until mount, then the live control.
export function WithHook() {
  const { controlRef, control } = useSchedulerControl()
  useEffect(() => control?.scrollTo(SuperScheduler.Date.today()), [control])
  return <SuperSchedulerComponent controlRef={controlRef} {...CONFIG} />
}

// 3. Control plus tracked state topics, published after changes settle.
export function WithState() {
  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>
      <SuperSchedulerComponent controlRef={controlRef} {...CONFIG} />
    </>
  )
}

// 4. Imperative, without React: init() before use, dispose() on teardown.
export function mount(host: HTMLElement): () => void {
  const control = new SuperScheduler.Scheduler(host, CONFIG)
  control.init()
  return () => control.dispose()
}

Types

TypeSignification
SchedulerPropsProps de SuperSchedulerComponent
SchedulerConfigOptions acceptées par new SuperScheduler.Scheduler() et control.update()
SchedulerOptions, SchedulerEventHandlersLes deux moitiés de la configuration : options et handlers
SchedulerApiL’interface du contrôle (même forme que SuperScheduler.Scheduler)
Scheduler...ArgsUne interface par handler, par exemple SchedulerEventMoveArgs, SchedulerEventsChangeArgs
SuperScheduler.EventData<T>, SuperScheduler.ResourceData<T>Formes des données, génériques sur vos champs supplémentaires
SchedulerCustomPropsExtensible avec declare module 'super-scheduler' pour vos propres props

Formes des données

Événements

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 }>.

ChampsTypeSignification
id, start, end, textEventId, DateInput, DateInput, stringObligatoires. end est exclusif, sauf avec eventEndSpec: 'Date'
resourceResourceIdLigne de l’événement
backColor, fontColor, borderColor, barColor, barBackColorstringCouleurs
cssClass, padding, borderRadius, heightstring, string | number, string | number, numberPrésentation
html, htmlLeft, htmlRightstringHTML de confiance, jamais échappé ; échappez le texte des utilisateurs avec SuperScheduler.Util.escapeHtml
toolTip, bubbleHtml, areas, contextMenustring, string, AreaData[], MenuInfobulle, contenu de la bulle, zones cliquables, menu
moveDisabled, resizeDisabled, moveHDisabled, moveVDisabledbooleanVerrous : tout déplacement, redimensionnement, déplacements horizontaux, changements de ligne
clickDisabled, doubleClickDisabled, rightClickDisabled, deleteDisabled, moveSkipNonBusinessDisabledbooleanDésactivations par événement
hidden, barHiddenbooleanMasquent l’événement ou sa barre de durée
completenumberPourcentage pour durationBarMode: 'PercentComplete'
line, minLine, sort'dedicated' | number, number, string[]Contrôle de l’empilement
tagsunknownDonnées libres

Ressources

SuperScheduler.ResourceData<T> accepte des champs supplémentaires.

ChampsTypeSignification
id, nameResourceId, stringId et libellé de la ligne
children, expandedResourceData[], booleanLignes d’arborescence (nécessitent treeEnabled) ; les parents sont repliés sauf avec expanded: true
frozen'top' | 'bottom'Ligne figée au-dessus ou en dessous des lignes qui défilent
splitResourceData[]Plusieurs lignes sous une même cellule d’en-tête
columnsResourceColumnData[]Cellules pour rowHeaderColumns, par index
cellsDisabledbooleanToutes les cellules de la ligne sont désactivées : hachurées, sans dépôt, sans sélection
preventUsagebooleanNi événements ni sélection sur la ligne
cellsAutoUpdatedbooleanRéexécute onBeforeCellRender pour cette ligne quand ses événements changent
minHeight, eventHeight, marginTop, marginBottom, maxLines, emptyHeightnumberGéométrie de la ligne
backColor, fontColor, cssClass, html, toolTip, bubbleHtml, ariaLabel, areas, contextMenu, tagsdiversPrésentation de l’en-tête et données

Liens, en-têtes, niveaux de zoom et séparateurs

TypeChamps
LinkDatafrom, to (id d’événements), id, type ('FinishToStart' par défaut, 'FinishToFinish', 'StartToStart', 'StartToFinish'), color, width, style ('solid' | 'dotted' | 'dashed'), cssClass, layer, text, textAlignment, bubbleHtml, contextMenu
TimeHeaderDatagroupBy ('Minute' | 'Hour' | 'Day' | 'Week' | 'Month' | 'Quarter' | 'Year' | 'Cell' | 'None' | 'Default'), format, height
ZoomLevelid, properties (valeurs d’options, chacune éventuellement fonction de { date, level })
SeparatorDatalocation, color, layer ('AboveEvents' | 'BelowEvents'), opacity, width, cssClass, toolTip
TimelineDatastart, end, width (cellules pour scale: 'Manual')

Options

Axe du temps

OptionTypeDéfautRemarques
startDateDateInputaujourd’huiTronquée à minuit
daysnumber1Longueur de la frise
scale'CellDuration' | 'Minute' | 'Hour' | 'Day' | 'Week' | 'Month' | 'Year' | 'Manual''CellDuration''Manual' utilise timeline
cellDurationnumber (minutes)60Avec scale: 'CellDuration'
cellWidthnumber40Pixels par cellule de l’échelle courante
cellWidthSpec'Fixed' | 'Auto''Fixed''Auto' ajuste la frise à la largeur
cellWidthMinnumber1
timeHeadersTimeHeaderData[][{ groupBy: 'Default' }, { groupBy: 'Cell' }]'Default' suit cellGroupBy
cellGroupByGroupBy'Day'
headerHeightnumber30Par ligne d’en-tête
timeFormat'Auto' | 'Clock12Hours' | 'Clock24Hours''Auto'Libellés d’heures par défaut uniquement
localestring | SuperScheduler.Locale'en-us'N’importe quel identifiant de locale Intl
weekStarts'Auto' | number'Auto'0 correspond à dimanche
eventEndSpec'DateTime' | 'Date''DateTime''Date' rend inclusives les fins exprimées en dates seules
showNonBusinessbooleantruefalse masque les week-ends (échelle en jours) ou les heures non ouvrées
businessBeginsHour, businessEndsHournumber9, 18
businessWeekendsbooleanfalse
cellsMarkBusinessbooleantrue
showCurrentTimeHeaderbooleanfalse
separatorsSeparatorData[][]Repères verticaux de date
timelineTimelineData[]aucuneAvec scale: 'Manual'
infiniteScrollingEnabledbooleanfalseinfiniteScrollingMargin 50, infiniteScrollingStepDays 30
floatingTimeHeadersbooleantrueLibellés d’en-tête collants
viewType'Resources''Resources''Days' et 'Gantt' sont réservés
scrollX, scrollYnumberaucuneDéfilement initial en pixels

Lignes

OptionTypeDéfautRemarques
resourcesResourceData[][]
treeEnabledbooleanfalseRequis pour children
treeIndentnumber20
treeAutoExpandbooleantrue
treePreventParentUsagebooleanfalseLes parents ne prennent ni événements ni sélection
rowHeaderWidthnumber80
rowHeaderWidthAutoFitbooleantrueS’élargit selon les noms ; rowHeaderWidthMin 20, rowHeaderWidthMarginRight 0
rowHeaderColumnsRowHeaderColumnData[]aucuneUne colonne qui affiche name
rowHeaderColumnsResizablebooleantruerowHeaderColumnDefaultWidth 80, rowHeaderColumnsMergeParents true
rowHeaderColumnsReorderablebooleanfalseGlisser les titres de colonnes
rowMinHeight, rowEmptyHeightnumber0, aucune
rowMarginTop, rowMarginBottomnumber0
eventHeightnumber35Une ligne d’empilement
eventMarginBottomnumber0
rowFilterParentsAlwaysVisiblebooleantrue
rowSortingMode'LeavesOnly' | 'ParentsOnly' | 'All''LeavesOnly'Utilisé par rows.sort()
selectedRowsstring[] | number[][]
cornerText, cornerHtmlstring'', aucuneCellule en haut à gauche

Événements et édition

OptionTypeDéfautRemarques
eventsEventData[][]Données contrôlées ; le tableau est adopté et modifié sur place avec splice
defaultEventsEventData[]aucuneDonnées initiales non contrôlées, lues une fois
eventMoveHandling, eventResizeHandling'Update' | 'Notify' | 'Disabled''Update''Disabled' empêche le geste
eventClickHandling'Enabled' | 'Select' | 'ContextMenu' | 'Bubble' | 'Disabled''Enabled''Select' bascule la sélection
eventDoubleClickHandlingmêmes valeurs'Disabled'Un handler de double-clic retarde les clics simples de doubleClickTimeout (300)
eventRightClickHandlingmêmes valeurs'ContextMenu'
eventSelectHandling'Update' | 'Disabled''Update'
eventDeleteHandling'Update' | 'Disabled''Disabled''Update' ajoute un bouton de suppression au survol
eventHoverHandling'Bubble' | 'Disabled''Bubble'Affiche bubbleHtml
eventTapAndHoldHandling'Move' | 'ContextMenu' | 'Disabled''Move'Tactile ; tapAndHoldTimeout 300
allowEventOverlapbooleantruefalse refuse les déplacements, redimensionnements et sélections sur un temps occupé
conflictHighlightbooleanfalseSignale les événements en collision pendant le glissement
useEventBoxes'Always' | 'Never' | 'ShortEventsOnly''Always''Always' dessine les événements sur des cellules entières
eventMoveByCellbooleanfalseAvec useEventBoxes: 'Never'
moveBy'Full' | 'Top' | 'Left''Full'Zone de prise pour le glissement
eventMoveMargin, eventResizeMarginnumber5
eventMoveSkipNonBusiness, eventMoveToPositionbooleanfalse
snapToGrid (et ...EventMoving, ...EventResizing, ...TimeRangeSelecting, ...RectangleSelecting)booleantrue
dragCardboolean | DragCardOptionstrueCarte à côté du pointeur pendant le glissement
headerMarker, resizeHandlesbooleantrue
autoScroll'Drag' | 'Always' | 'Disabled''Drag'autoScrollSpeed 50, autoScrollDelay 100
dragOutAllowedbooleanfalseGlisser des événements vers des cibles de dépôt
floatingEventsbooleantrueLibellés d’événements collants
eventMinWidthnumber1
eventBorderRadius, eventPaddingstring | numberaucune
eventTextWrappingEnabledbooleanfalse
eventHtmlLeftMargin, eventHtmlRightMarginnumber10
durationBarVisiblebooleantruedurationBarMode 'Duration' ou 'PercentComplete' ; durationBarHeight aucune
eventStackingLineHeightnumber100
showToolTipbooleantrueInfobulles natives à partir de toolTip
eventMovingStartEndEnabled, eventResizingStartEndEnabled, timeRangeSelectingStartEndEnabledbooleanfalseLibellés à côté de l’ombre, format 'MMMM d, yyyy'
crosshairType'Header' | 'Full' | 'Disabled''Header'
xssProtection'Enabled' | 'Disabled''Enabled'Échappe text ; html n’est jamais échappé

Sélection

OptionTypeDéfautRemarques
timeRangeSelectedHandling'Enabled' | 'Hold' | 'HoldForever' | 'Disabled''Enabled'Clics et glissements sur les cellules vides ; 'HoldForever' conserve la sélection quand l’utilisateur clique ailleurs
timeRangeClickHandling'Enabled' | 'Disabled''Enabled'Clics sur une plage sélectionnée
timeRangeDoubleClickHandling'Enabled' | 'Disabled''Disabled'
timeRangeRightClickHandling'ContextMenu' | 'Enabled' | 'Disabled''ContextMenu'
allowMultiRange, multiRangeModeboolean, 'CtrlOrMeta' | 'Always'false, 'CtrlOrMeta'Plusieurs plages de temps
allowMultiSelectbooleantruePlusieurs événements sélectionnés
eventMultiSelectRangebooleanfalseMaj+clic sélectionne un bloc
rectangleSelectHandling'Disabled' | 'Enabled' | 'EventSelect''Disabled'
rectangleSelectMode, rectangleSelectModifiers'Free' | 'Row', boolean'Free', false
allowMultiMove, allowMultiResizebooleanfalsemultiMoveVerticalMode 'Disabled'
rowClickHandling'Enabled' | 'Select' | 'Disabled''Enabled'
rowDoubleClickHandling'Enabled' | 'Select' | 'Disabled''Disabled'
rowRightClickHandling'ContextMenu' | 'Enabled' | 'Disabled''ContextMenu'
rowSelectHandling'Update' | 'Notify''Update'
timeHeaderClickHandling'Enabled' | 'Disabled''Enabled'
resourceExpandHandling, resourceCollapseHandling'Enabled''Enabled'

Zoom et niveau de détail

OptionTypeDéfautRemarques
zoomLevelsZoomLevel[][]
zoomnumber | stringaucuneNiveau initial : index ou id
zoomPosition'left' | 'middle' | 'right''left'Point maintenu en place lors des changements de niveau
zoomGestureboolean | ZoomGestureOptionstrueCtrl ou Cmd + molette, pincement ; options min, max (400), wheel ('ctrl'), pinch (true), sensitivity (1), scales ('zoomLevels'), link
lodboolean | LodOptionstrueNiveau de détail adaptatif

Taille et disposition

OptionTypeDéfautRemarques
heightnumber | '100%'600Hauteur totale, en-têtes compris
heightSpec'Max' | 'Fixed' | 'Auto' | 'Parent100Pct' | 'Max100Pct''Max''Max' : hauteur du contenu, jusqu’à height
widthnumberaucuneRemplit l’hôte
visiblebooleantrue

Apparence

OptionTypeDéfautRemarques
colorScheme'inherit' | 'light' | 'dark' | 'auto''inherit'Seul 'auto' suit la préférence du système
density'comfortable' | 'compact' | 'dense'aucune
classNames, stylespar slot (root, event, cell, rowHeader, ...){}Classes ou styles inline
cssClassstringaucuneClasse supplémentaire sur la racine
unstyledbooleanfalseStructure uniquement
themestringaucuneAjoute des classes {theme}_*
nowLineboolean | { interval, label, cssClass }falseIntervalle de 60000 ms
emptyState, errorStateReactNode | NodeaucuneUne chaîne est affichée comme texte
loadingbooleanaucuneloadingLabelText 'Loading...', loadingLabelVisible true
messageHideAfter, messageHideOnMouseOut, messageBarPositionnumber, boolean, 'Top' | 'Bottom'5000, true, 'Top'Pour control.message()
OptionTypeDéfautRemarques
linksLinkData[][]Tracés à partir des données
linkShape'Curved' | 'RightAngled''Curved'
linkLayer'Above' | 'Below''Above'
linkWidth'Auto' | number'Auto'
linkBottomMarginnumber17

Clavier

OptionTypeDéfautRemarques
keyboardEnabledbooleanfalse
keyboardTarget'document' | 'component''document'
keyboardMode'SuperScheduler' | 'Full''SuperScheduler''Full' nécessite keyboardEnabled
keyboardOptions{ pageRows, contextMenuKey, bubbleOnFocus, selectAll, zoomKeys }aucunezoomKeys vaut false par défaut

Menus et bulles

OptionTypeDéfaut
contextMenu, contextMenuResource, contextMenuSelection, contextMenuLinkSuperScheduler.Menuaucune
bubbleSuperScheduler.Bubbleune bulle qui affiche bubbleHtml
cellBubble, resourceBubble, linkBubbleSuperScheduler.Bubbleaucune
allowDefaultContextMenubooleanfalse

Données, chargement et extensions

OptionTypeDéfautRemarques
extensionsSchedulerExtension[]aucuneChargeurs de plages, historiques
historyobjet historiqueaucuneRaccourci pour une extension d’historique
dynamicLoadingbooleanfalseAvec onScroll
scrollDelayDynamicnumber500Temps de calme avant onScroll

Contenu React

Uniquement avec le SuperSchedulerComponent de super-scheduler/react-render :

PropArgumentsRenvoie
renderEvent{ control, e, data, row, width, lod }ReactNode
renderCell{ control, cell }ReactNode
renderRowHeader{ control, row, column }ReactNode
renderTimeHeader{ control, header }ReactNode
renderArea{ control, area, source } (zones avec render: true)ReactNode
renderCorner{ control }ReactNode
eventHover{ render, delay (350), leaveGrace (180), placement ('auto'), pin (false), glide (true) }
renderOptions{ retain, sliceMs (8) }

Callbacks

Conventions

  • 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.

Événements

HandlerArgumentsAnnulation
onEventClick, onEventClicked{ e, div, control, originalEvent, ctrl, shift, meta }le premier
onEventDoubleClick, onEventDoubleClicked{ e, originalEvent }le premier
onEventRightClick, onEventRightClicked{ e, div, originalEvent }le premier
onEventSelect, onEventSelected{ e, selected, ctrl, meta }le premier
onEventDelete, onEventDeleted{ e, control }le premier
onEventMouseEnter, onEventMouseLeave{ e, div }non
onEventFilter{ e, filterParam, visible } ; définissez visible = falsenon
onEventsChange{ events, changed, removed, reason }, reason parmi 'move', 'resize', 'create', 'remove', 'update', 'api', 'history', 'load'non

e est un SuperScheduler.Event : e.data est l’objet de données, et e.id(), e.start(), e.end(), e.text(), e.resource() et e.duration() le lisent.

Glisser et redimensionner

HandlerArgumentsAnnulation et asynchrone
onEventMoving{ e, start, end, duration, resource, row, allowed, allowOverlap, conflicts, message, cssClass, html, external, multimove, left, right, ctrl, shift, alt, meta }pilotage via allowed
onEventMove{ e, newStart, newEnd, newResource, external, multimove, control, position, async, loaded() }preventDefault(), asynchrone
onEventMovedles mêmes valeurs, en lecture seule ; le store contient déjà les nouveaux horairesnon
onEventResizing{ e, start, end, what, row, allowed, allowOverlap, conflicts, message, ... }pilotage via allowed
onEventResize{ e, newStart, newEnd, what, multiresize, control, async, loaded() }preventDefault(), asynchrone
onEventResizedles mêmes valeurs, en lecture seulenon

Plages de temps et rectangles

HandlerArgumentsAnnulation
onTimeRangeSelecting{ start, end, anchor, duration, resource, row, allowed, overlapping, ignoreDisabledCells, html, cssClass, button }pilotage via allowed
onTimeRangeSelect, onTimeRangeSelected{ start, end, resource, control, origin, multirange }, origin parmi 'click', 'drag', 'keyboard', 'api'le premier
onTimeRangeClick, onTimeRangeDoubleClick, onTimeRangeRightClick (et « -ed »){ start, end, resource }, sur une plage déjà sélectionnéele premier
onRectangleSelecting{ events, start, end, resources, visible }pilotage via visible
onRectangleSelect{ events, start, end, resources, append }oui
onRectangleSelected{ events }non
onGridMouseDown{ action, originalEvent, button, ctrl, shift, meta } ; définissez action = 'None'oui

Lignes et en-têtes

HandlerArgumentsAnnulation
onRowClick, onRowDoubleClick, onRowRightClick (et « -ed »){ row, x, originalEvent, ctrl, shift, meta }le premier
onRowSelect, onRowSelected{ row, selected, ctrl, shift, meta }le premier
onRowFilter{ row, filterParam, visible, control }non
onRowMouseOver, onRowMouseOut{ row, div }non
onResourceExpand, onResourceCollapse{ resource }oui
onRowHeaderResized, onRowHeaderColumnResized{}, { column }non
onRowHeaderColumnsChange{ control, columns, order, widths, reason }non
onRowSorted{ oldSortParam }non
onTimeHeaderClick, onTimeHeaderClicked{ header: { start, end, level }, control, originalEvent, ctrl, shift, meta }le premier
onTimeHeaderRightClick, onTimeHeaderRightClicked{ header }le premier
onCellMouseEnter, onCellMouseLeave{ cell }non

Hooks de rendu

HandlerArgumentsCe que l’on modifie
onBeforeEventRender{ control, data }data.backColor, fontColor, cssClass, html, areas, toolTip, height, hidden... (une copie ; start et end sont des SuperScheduler.Date)
onBeforeCellRender{ control, cell, getPixels(date) }cell.properties.backColor, cssClass, html, text, disabled, areas, bubbleHtml
onBeforeRowHeaderRender{ row }row.html, text, cssClass, backColor, areas, columns[i].html
onBeforeResHeaderRender{ resource }Une copie de la ressource, champs de mise en page compris
onBeforeRowHeaderColumnRender{ column }html, cssClass, areas du titre de colonne
onBeforeTimeHeaderRender{ control, header }header.html, text, cssClass, backColor, toolTip, areas
onBeforeCornerRender{ control, html, areas }Contenu du coin
onBeforeLinkRender{ data, from, to }Couleur, épaisseur, style et cssClass du lien
onIncludeTimeCell{ cell: { start, end, visible, width } }Masquer ou redimensionner des cellules de la frise
onAfterEventRender, onAfterCellRender{ e, div }, { cell, div }Le nœud peint
onAfterRender, onAfterUpdate, onDimensionsChangedNotifications de cycle de vie

Autres handlers

HandlerArguments
onZoom{ control, cellWidth, scale, cellDuration, phase, origin, anchor, viewportStart, level, lod }, à chaque image d’un geste
onHistoryChange{ canUndo, canRedo, undoLabel, redoLabel, cause }
onScroll{ viewport, async, events, remove, clearEvents, loaded() }, avec dynamicLoading
onKeyDown{ originalEvent }, annulable
onKeyboardFocusChange, onKeyboardFocusChanged{ previous, focus }
onLinkClick, onLinkClicked{ link, originalEvent }, { link }

API du contrôle

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().

Cycle de vie et affichage

MembreDescription
init()Requis une fois pour les contrôles impératifs ; update() avant init() lève une exception
update(options?)Applique les options et redessine de façon synchrone ; sans arguments, rafraîchissement complet
dispose(), disposed()Libération et état correspondant
show(), hide(), setHeight(px)Visibilité ; setHeight passe à heightSpec: 'Fixed'
message(text, delayOrOptions?)Barre de message dans le contrôle
loadingStart(options?), loadingStop()Libellé de chargement
clearSelection()Efface la sélection de plage de temps
dragInProgress()true pendant un geste
levelOfDetailÉtat courant du niveau de détail
historyL’historique attaché, ou null
moveRowHeaderColumn(from, to)Réordonne les colonnes de l’en-tête de ligne
navLes éléments top, scroll, corner, timeHeader, message et loading (null avant init())
vChaîne de version

Défilement et zone visible

MembreDescription
scrollTo(date | px, animated?, position?)animated : boolean, ms, 'fast', 'normal', 'slow' ou 'linear' ; position : 'left', 'middle', 'right'
scrollToResource(id | row)
setScroll(x, y), setScrollX(x), setScrollY(y), getScrollX(), getScrollY()Défilement en pixels
getViewPort(){ start, end, resources, rows(), events() } de la zone visible
visibleStart(), visibleEnd()Début et fin de la frise, pas de la zone visible
getDate(px, precise?, isEnd?), getCoords()Correspondance avec les pixels et le pointeur
infinite.scrollTo(date), infinite.shiftStart(days)Défilement infini

Événements

MembreDescription
events.listLe tableau de données, par référence
events.add(event)Lève une exception en cas d’id en double
events.update(event)Remplace un événement chargé ; sans effet pour un id inconnu
events.remove(event | id)
events.find(id | predicate), events.findAll(predicate | example)Recherches qui renvoient des SuperScheduler.Event
events.all(), events.forRange(start?, end?)Tous les événements, ou ceux qui chevauchent une plage (par défaut, la plage visible)
events.filter(param)Exécute onEventFilter
events.scrollIntoView(event)

Lignes

MembreDescription
rows.add(data), rows.addChild(parent, data), rows.update(row | data), rows.remove(row | id)Modifications de lignes
rows.find(id | predicate), rows.all(), rows.visible(), rows.each(fn)Recherches qui renvoient des SuperScheduler.Row
rows.expand(level?), rows.expandAll(), rows.collapseAll()État de l’arborescence
rows.filter(param)Exécute onRowFilter
rows.sort(spec?), rows.sortParamTri ({ field, order })
rows.selection.add/remove/clear/get/isSelectedSélection de lignes

Sélection

MembreDescription
multiselect.add/remove/clear/get/events/isSelected/redrawSélection d’événements
multiselect.selectAll({ scope, filter })scope vaut 'view' (par défaut) ou 'all'
multiselect.startRectangle()Arme la sélection par rectangle
multirange.add(selection), multirange.get(), multirange.clear()Plages de temps (new SuperScheduler.Selection(start, end, resource))
selectTimeRange(start, end, resource, dontFireEvent?)Sélectionne une plage

Zoom, liens, cellules et clavier

MembreDescription
zoom.activeIndex du niveau actif (-1 avant tout niveau)
zoom.setActive(level, position?, anchorDate?)Applique un niveau immédiatement
zoom.animateTo({ level } | { cellWidth }, { duration (300), position, anchorDate })Animé ; renvoie une promesse
zoom.step(delta, options?)Un niveau, ou un facteur de 1,6 sans niveaux
links.list, links.add, links.update, links.remove, links.find, links.findByFromTo, links.findAllByFromToLiens
cells.all(), cells.find(start, resource), cells.findXy(x, y), cells.findByPixels(x, y)Cellules montées
keyboard.focusCell, focusEvent, getFocus, move, clearFocus, resetFocusFocus clavier

Membres statiques

MembreDescription
SuperScheduler.Scheduler.makeDraggable({ element, data, duration, ... })Glisser des éléments DOM dans la grille pour créer de nouveaux événements
SuperScheduler.Scheduler.registerDropTarget({ element, onDrop, ... })Déposer des événements hors de la grille (avec dragOutAllowed)
SuperScheduler.Scheduler.startDragging(options), stopDragging()Glissement externe programmatique

L’espace de noms SuperScheduler

MembreDescription
DateDate et heure civiles : today(), now(), parse(text, pattern, locale?), fromYearMonthDay(), add*(), firstDayOf*(), getDatePart(), getDay() (jour du mois), getDayOfWeek(), dayOfWeekISO(), weekNumberISO(), toString(pattern?, locale?), toDate(), toDateLocal(), value, ticks, equals()
DurationDurée en millisecondes : ofDays(), ofHours(), ofMinutes(), totalHours(), toString(pattern?)
EventWrapper d’événement (data, id(), start(), end(), text(), resource(), duration())
Localeregister(locale), find(id), new Locale(id, fields)
Menu, BubbleMenus contextuels et bulles au survol (show(), hide())
Selectionnew Selection(start, end, resource?)
UtilescapeHtml(text), overlaps(start1, end1, start2, end2) (semi-ouvert)
ColorUtildarker(), lighter(), contrasting()
ExceptionLevée en cas de mauvaise utilisation de l’API
guid()UUID v4 aléatoire
Row, RenderRow, LinkCréés par le contrôle ; lisez-les dans les handlers

Modules par sous-chemin

history

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.

minimap

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().

panes

<SchedulerPanes> accepte les props du planificateur plus panes ({ id, resources or rowFilter, size, minSize (48), hidden, props }), une height numérique obligatoire, timeHeader ('first'), scrollbar ('last'), splitter (true), crossPaneMove (true), component, onPaneResize et panesRef. linkPanes(controls, { zoom, rowHeaderWidth }) relie des contrôles existants et renvoie { dispose() }.

zoom-ui

createZoomHud(control, { format, apiMs (700) }), createZoomSlider(control, container, { min, max, detents, scale ('log'), label }) et createLodBadge(control, container, labels?). Chacun renvoie { element, dispose() }.

views

getViewState(control, include?) renvoie un état sérialisable en JSON (zoom, scroll, density, collapsed, columns) ; applyViewState(control, state, { animate, when, timeout }) (when vaut 'now' ou 'rows') renvoie une promesse de boolean.

ranges

createRangeLoader({ load, chunkDays (7), prefetch (1), cacheChunks (26), skeleton (true), onError }) renvoie un chargeur doté de reload(range?), clear() et loading. load({ start, end, signal }) renvoie les événements qui chevauchent [start, end).

hooks

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é.

react-render

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.

tailwind

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.

datasets

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.

core

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.

API Lite

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.

OptionTypeDéfaut
startDateDateInputaujourd’hui
daysnumber (entier)31
scale'Day''Day'
cellWidthnumber64
heightnumber400
rowHeaderWidthnumber160
rowMinHeightnumber40
eventHeightnumber26
resources{ id, name }[] (plate)[]
events{ id, resource, start, end, text, backColor?, fontColor?, cssClass?, toolTip?, tags? }[][]
localestring'en-us'
ariaLabelstring'Resource schedule'
emptyStatestring'No resources'
onEventClick({ control, e: { data }, originalEvent }) => voidaucune
onTimeRangeClick({ control, start, end, resource, originalEvent }) => void, sur toute cellule videaucune
controlRefobjet ref ou (control | null) => voidaucune

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.

API réservées

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.

DomaineRéservé
Édition en ligneeventEditHandling, eventEditMinWidth, rowEditHandling, valeurs 'Edit' des options de gestion des clics, events.edit(), rows.edit(), Row.edit(), onEventEdit, onEventEdited, onEventEditKeyDown, onRowEdit, onRowEdited, onAfterEventEditRender
Création et déplacement de lignesrowCreateHandling, rowCreateHeight, rowCreateHtml, rowCreateText, rowMoveHandling, rowMoveSameLevelOnly, rowDragHandleWidth, onRowCreate, onRowCreated, onRowMove, onRowMoved, onRowMoving, makeDraggableAsRow, registerRowDropTarget
Création interactive de lienslinkCreateHandling, linkDotSize, linkPointSize, onLinkCreate, onLinkCreated (les liens sont tracés à partir des données links)
Allers-retours serveur et chargement HTTPvaleurs 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
Rafraîchissement automatiqueautoRefreshEnabled, autoRefreshInterval, autoRefreshMaxCount, autoRefreshCommand, autoRefreshPause(), autoRefreshStart(), onAutoRefresh
ExportexportAs(), exceljs, onBeforeEventExport, onBeforeCellExport, onBeforeRowHeaderExport, onBeforeTimeHeaderExport, onBeforeCornerExport
Versions et regroupement d’événementseventVersionsEnabled, eventVersionHeight, eventVersionMargin, eventVersionPosition, eventVersionsReserveSpace, groupConcurrentEvents, groupConcurrentEventsLimit, groupBubble, onBeforeGroupRender, row.groups
Récurrenceevents.findRecurrent() (renvoie null)
Vues et dispositionviewType: 'Days' et 'Gantt' (rendus comme 'Resources'), layout, rowHeaderScrolling, rowHeaderColumnsMode, rowHeaderHideIconEnabled, rows.headerHide(), rows.headerShow(), rows.headerToggle(), timeHeaderTextWrappingEnabled, sortDirections, syncResourceTree
Autresapi, 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.