Saltar al contenido
SuperScheduler

ReferenciaSe aplica aLite y Pro

Referencia de la API

Esta página enumera la API pública que implementa SuperScheduler 0.1.0: los componentes React, todas las opciones con su tipo y su valor por defecto agrupadas por área, los callbacks con sus argumentos y su soporte de cancelación o asincronía, los métodos del control, los módulos por subpath de Pro y la API de Lite. Los miembros que tienen tipos pero no están implementados aparecen aparte, en APIs reservadas: avisan en los builds de desarrollo y no hacen nada.

Verificado con v0.1.0 · revisado el 7 de octubre de 2026.md

Esta referencia cubre la API que se usa en estas guías, tal como está implementada en la versión 0.1.0. Todo, salvo la sección API de Lite, pertenece a SuperScheduler Pro (super-scheduler). Los valores por defecto son los que usa el control cuando omites una opción; «ninguno» significa que la opción no tiene valor hasta que le das uno. Las guías explican cómo combinar estas piezas; los ejemplos las muestran en aplicaciones que funcionan.

Algunas convenciones se cumplen en todas partes:

  • DateInput es SuperScheduler.Date | string. Las cadenas son valores civiles ISO 8601 con segundos ('2026-10-01T14:00:00') o fechas ('2026-10-01'). El final de los eventos es exclusivo.
  • Los ids de recursos, eventos y vínculos son string | number y se comparan de forma estricta: 1 y '1' son distintos.
  • Las opciones son props de SuperSchedulerComponent, claves de control.update(options) y propiedades vivas del control.
  • Los handlers se ejecutan con this apuntando al control. Sus valores de retorno se ignoran, y un handler async no se espera: usa el protocolo async y loaded() donde exista.

Puntos de entrada

ImportEdiciónExportaGuía
super-schedulerProSuperSchedulerComponent, useSchedulerControl, el namespace SuperScheduler, SchedulerDate, SchedulerEvent, version y los tipos públicosIntegración con React
super-scheduler/styles.cssProLa hoja de estilos (una sola @layer super-scheduler)Temas
super-scheduler/react-renderProSuperSchedulerComponent con props de render ReactSlots de renderizado React
super-scheduler/historyProcreateHistoryDeshacer y rehacer
super-scheduler/minimapProcreateMinimap, SchedulerMinimap, eventDensityMinimapa
super-scheduler/panesProSchedulerPanes, linkPanesPaneles y vistas guardadas
super-scheduler/zoom-uiProcreateZoomHud, createZoomSlider, createLodBadgeEscalas de tiempo y zoom
super-scheduler/viewsProgetViewState, applyViewStatePaneles y vistas guardadas
super-scheduler/rangesProcreateRangeLoaderCarga por rangos
super-scheduler/hooksProuseScheduler, useSchedulerState, subscribeScheduler, getSchedulerSnapshotEstado controlado
super-scheduler/tailwindProPreset de Tailwind CSS v3 (export =)Temas
super-scheduler/datasetsProgenerateDataset, generateScenario, toSuperSchedulerData, SCENARIOS, PrngRendimiento
super-scheduler/coreProFechas, duraciones, líneas de tiempo, índices y utilidades de layout sin DOM
super-scheduler-liteLiteSuperSchedulerComponent, el namespace SuperScheduler, SchedulerDate, versionInicio rápido con Lite
super-scheduler-lite/styles.cssLiteLa hoja de estilos de LiteInicio rápido con Lite

Todos los puntos de entrada incluyen ESM, CommonJS y declaraciones de tipos. React 18.2 o posterior, o 19, es una dependencia peer (también React DOM en Pro); no hay dependencias en tiempo de ejecución. Todos los módulos se pueden importar en un servidor sin DOM.

Componentes

SuperSchedulerComponent

SuperSchedulerComponent aloja un control. Sus props (SchedulerProps) son todas las opciones y handlers de abajo, más controlRef. Renderiza un <div> sin estilos, no tiene props className, style ni id, y solo reenvía a control.update() las props cuya identidad ha cambiado desde el último render; una prop que desaparece vuelve a su valor por defecto.

MiembroTipoNotas
ref.current.controlSuperScheduler.SchedulerSe asigna al montar; después de desmontar, es el control liberado
controlRefMutableRefObject<Scheduler | null> o (control) => voidLos objetos ref se asignan al montar y se vacían al desmontar; las funciones solo se llaman con el control al montar
useSchedulerControl(){ controlRef, control }control es estado de React: null hasta el montaje, después el control, y null tras desmontar

El componente de super-scheduler/react-render acepta las mismas props, más renderEvent, renderCell, renderRowHeader, renderTimeHeader, renderArea, renderCorner, eventHover, los handlers onBefore*DomAdd y onBefore*DomRemove, y renderOptions (consulta 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()
}

Tipos

TipoSignificado
SchedulerPropsProps de SuperSchedulerComponent
SchedulerConfigOpciones que aceptan new SuperScheduler.Scheduler() y control.update()
SchedulerOptions, SchedulerEventHandlersLas dos mitades de la configuración: opciones y handlers
SchedulerApiLa interfaz del control (con la misma forma que SuperScheduler.Scheduler)
Scheduler...ArgsUna interfaz por handler, por ejemplo SchedulerEventMoveArgs, SchedulerEventsChangeArgs
SuperScheduler.EventData<T>, SuperScheduler.ResourceData<T>Formas de los datos, genéricas sobre tus campos adicionales
SchedulerCustomPropsAmpliable con declare module 'super-scheduler' para tus propias props

Formas de los datos

Eventos

SuperScheduler.EventData<T> no tiene firma de índice: declara los campos adicionales mediante el parámetro de tipo, por ejemplo EventData<{ guest: string }>.

CamposTipoSignificado
id, start, end, textEventId, DateInput, DateInput, stringObligatorios. end es exclusivo salvo con eventEndSpec: 'Date'
resourceResourceIdFila del evento
backColor, fontColor, borderColor, barColor, barBackColorstringColores
cssClass, padding, borderRadius, heightstring, string | number, string | number, numberPresentación
html, htmlLeft, htmlRightstringHTML de confianza, nunca se escapa; escapa el texto del usuario con SuperScheduler.Util.escapeHtml
toolTip, bubbleHtml, areas, contextMenustring, string, AreaData[], MenuTooltip, contenido de la burbuja, áreas clicables, menú
moveDisabled, resizeDisabled, moveHDisabled, moveVDisabledbooleanBloqueos: cualquier movimiento, el cambio de tamaño, los movimientos horizontales, los cambios de fila
clickDisabled, doubleClickDisabled, rightClickDisabled, deleteDisabled, moveSkipNonBusinessDisabledbooleanExclusiones por evento
hidden, barHiddenbooleanOcultan el evento o su barra de duración
completenumberPorcentaje para durationBarMode: 'PercentComplete'
line, minLine, sort'dedicated' | number, number, string[]Control del apilado
tagsunknownDatos libres

Recursos

SuperScheduler.ResourceData<T> acepta campos adicionales.

CamposTipoSignificado
id, nameResourceId, stringId y etiqueta de la fila
children, expandedResourceData[], booleanFilas de árbol (necesitan treeEnabled); los padres están plegados salvo con expanded: true
frozen'top' | 'bottom'Fila fijada por encima o por debajo de las filas con scroll
splitResourceData[]Varias filas bajo una misma celda de cabecera
columnsResourceColumnData[]Celdas para rowHeaderColumns, por índice
cellsDisabledbooleanTodas las celdas de la fila están deshabilitadas: rayadas, sin soltar, sin selección
preventUsagebooleanNi eventos ni selección en la fila
cellsAutoUpdatedbooleanVuelve a ejecutar onBeforeCellRender para esta fila cuando cambian sus eventos
minHeight, eventHeight, marginTop, marginBottom, maxLines, emptyHeightnumberGeometría de la fila
backColor, fontColor, cssClass, html, toolTip, bubbleHtml, ariaLabel, areas, contextMenu, tagsvariosPresentación de la cabecera y datos

Vínculos, cabeceras, niveles de zoom y separadores

TipoCampos
LinkDatafrom, to (ids de eventos), id, type ('FinishToStart' por defecto, '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 (valores de opciones; cada uno puede ser una función de { date, level })
SeparatorDatalocation, color, layer ('AboveEvents' | 'BelowEvents'), opacity, width, cssClass, toolTip
TimelineDatastart, end, width (celdas para scale: 'Manual')

Opciones

Eje de tiempo

OpciónTipoPor defectoNotas
startDateDateInputhoySe trunca a medianoche
daysnumber1Longitud de la línea de tiempo
scale'CellDuration' | 'Minute' | 'Hour' | 'Day' | 'Week' | 'Month' | 'Year' | 'Manual''CellDuration''Manual' usa timeline
cellDurationnumber (minutos)60Con scale: 'CellDuration'
cellWidthnumber40Píxeles por celda de la escala actual
cellWidthSpec'Fixed' | 'Auto''Fixed''Auto' ajusta la línea de tiempo al ancho
cellWidthMinnumber1
timeHeadersTimeHeaderData[][{ groupBy: 'Default' }, { groupBy: 'Cell' }]'Default' sigue a cellGroupBy
cellGroupByGroupBy'Day'
headerHeightnumber30Por fila de cabecera
timeFormat'Auto' | 'Clock12Hours' | 'Clock24Hours''Auto'Solo las etiquetas de hora por defecto
localestring | SuperScheduler.Locale'en-us'Cualquier id de locale de Intl
weekStarts'Auto' | number'Auto'0 es domingo
eventEndSpec'DateTime' | 'Date''DateTime''Date' hace inclusivos los finales que son solo fecha
showNonBusinessbooleantruefalse oculta los fines de semana (escala de días) o las horas no laborables
businessBeginsHour, businessEndsHournumber9, 18
businessWeekendsbooleanfalse
cellsMarkBusinessbooleantrue
showCurrentTimeHeaderbooleanfalse
separatorsSeparatorData[][]Marcas verticales de fecha
timelineTimelineData[]ningunoCon scale: 'Manual'
infiniteScrollingEnabledbooleanfalseinfiniteScrollingMargin 50, infiniteScrollingStepDays 30
floatingTimeHeadersbooleantrueEtiquetas de cabecera fijas al desplazarse
viewType'Resources''Resources''Days' y 'Gantt' están reservados
scrollX, scrollYnumberningunoScroll inicial en píxeles

Filas

OpciónTipoPor defectoNotas
resourcesResourceData[][]
treeEnabledbooleanfalseNecesario para children
treeIndentnumber20
treeAutoExpandbooleantrue
treePreventParentUsagebooleanfalseLos padres no admiten eventos ni selección
rowHeaderWidthnumber80
rowHeaderWidthAutoFitbooleantrueSe ensancha hasta que caben los nombres; rowHeaderWidthMin 20, rowHeaderWidthMarginRight 0
rowHeaderColumnsRowHeaderColumnData[]ningunoUna columna que muestra name
rowHeaderColumnsResizablebooleantruerowHeaderColumnDefaultWidth 80, rowHeaderColumnsMergeParents true
rowHeaderColumnsReorderablebooleanfalseArrastrar los títulos de columna
rowMinHeight, rowEmptyHeightnumber0, ninguno
rowMarginTop, rowMarginBottomnumber0
eventHeightnumber35Una línea de apilado
eventMarginBottomnumber0
rowFilterParentsAlwaysVisiblebooleantrue
rowSortingMode'LeavesOnly' | 'ParentsOnly' | 'All''LeavesOnly'Lo usa rows.sort()
selectedRowsstring[] | number[][]
cornerText, cornerHtmlstring'', ningunoCelda superior izquierda

Eventos y edición

OpciónTipoPor defectoNotas
eventsEventData[][]Datos controlados; el control adopta el array y lo modifica en el sitio con splice
defaultEventsEventData[]ningunoDatos iniciales no controlados, se leen una vez
eventMoveHandling, eventResizeHandling'Update' | 'Notify' | 'Disabled''Update''Disabled' impide el gesto
eventClickHandling'Enabled' | 'Select' | 'ContextMenu' | 'Bubble' | 'Disabled''Enabled''Select' alterna la selección
eventDoubleClickHandlinglos mismos valores'Disabled'Un handler de doble clic retrasa los clics simples doubleClickTimeout (300)
eventRightClickHandlinglos mismos valores'ContextMenu'
eventSelectHandling'Update' | 'Disabled''Update'
eventDeleteHandling'Update' | 'Disabled''Disabled''Update' añade un botón de eliminar al pasar el puntero
eventHoverHandling'Bubble' | 'Disabled''Bubble'Muestra bubbleHtml
eventTapAndHoldHandling'Move' | 'ContextMenu' | 'Disabled''Move'Táctil; tapAndHoldTimeout 300
allowEventOverlapbooleantruefalse rechaza movimientos, cambios de tamaño y selecciones sobre tiempo ocupado
conflictHighlightbooleanfalseMarca los eventos que colisionan durante el arrastre
useEventBoxes'Always' | 'Never' | 'ShortEventsOnly''Always''Always' dibuja los eventos sobre celdas completas
eventMoveByCellbooleanfalseCon useEventBoxes: 'Never'
moveBy'Full' | 'Top' | 'Left''Full'Zona desde la que se arrastra
eventMoveMargin, eventResizeMarginnumber5
eventMoveSkipNonBusiness, eventMoveToPositionbooleanfalse
snapToGrid (y ...EventMoving, ...EventResizing, ...TimeRangeSelecting, ...RectangleSelecting)booleantrue
dragCardboolean | DragCardOptionstrueTarjeta junto al puntero durante el arrastre
headerMarker, resizeHandlesbooleantrue
autoScroll'Drag' | 'Always' | 'Disabled''Drag'autoScrollSpeed 50, autoScrollDelay 100
dragOutAllowedbooleanfalseArrastrar eventos a destinos externos
floatingEventsbooleantrueEtiquetas de evento fijas al desplazarse
eventMinWidthnumber1
eventBorderRadius, eventPaddingstring | numberninguno
eventTextWrappingEnabledbooleanfalse
eventHtmlLeftMargin, eventHtmlRightMarginnumber10
durationBarVisiblebooleantruedurationBarMode 'Duration' o 'PercentComplete'; durationBarHeight ninguno
eventStackingLineHeightnumber100
showToolTipbooleantrueTooltips nativos a partir de toolTip
eventMovingStartEndEnabled, eventResizingStartEndEnabled, timeRangeSelectingStartEndEnabledbooleanfalseEtiquetas junto a la sombra, con formato 'MMMM d, yyyy'
crosshairType'Header' | 'Full' | 'Disabled''Header'
xssProtection'Enabled' | 'Disabled''Enabled'Escapa text; html nunca se escapa

Selección

OpciónTipoPor defectoNotas
timeRangeSelectedHandling'Enabled' | 'Hold' | 'HoldForever' | 'Disabled''Enabled'Clics y arrastres en celdas vacías; 'HoldForever' mantiene la selección cuando el usuario hace clic en otro sitio
timeRangeClickHandling'Enabled' | 'Disabled''Enabled'Clics en un rango seleccionado
timeRangeDoubleClickHandling'Enabled' | 'Disabled''Disabled'
timeRangeRightClickHandling'ContextMenu' | 'Enabled' | 'Disabled''ContextMenu'
allowMultiRange, multiRangeModeboolean, 'CtrlOrMeta' | 'Always'false, 'CtrlOrMeta'Varios rangos de tiempo
allowMultiSelectbooleantrueVarios eventos seleccionados
eventMultiSelectRangebooleanfalseMayús+clic selecciona un bloque
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 y nivel de detalle

OpciónTipoPor defectoNotas
zoomLevelsZoomLevel[][]
zoomnumber | stringningunoNivel inicial: índice o id
zoomPosition'left' | 'middle' | 'right''left'Lo que se mantiene fijo al cambiar de nivel
zoomGestureboolean | ZoomGestureOptionstrueCtrl o Cmd + rueda, pellizco; opciones min, max (400), wheel ('ctrl'), pinch (true), sensitivity (1), scales ('zoomLevels'), link
lodboolean | LodOptionstrueNivel de detalle adaptativo

Tamaño y disposición

OpciónTipoPor defectoNotas
heightnumber | '100%'600Altura total, cabeceras incluidas
heightSpec'Max' | 'Fixed' | 'Auto' | 'Parent100Pct' | 'Max100Pct''Max''Max': la altura del contenido, hasta height
widthnumberningunoLlena el elemento anfitrión
visiblebooleantrue

Apariencia

OpciónTipoPor defectoNotas
colorScheme'inherit' | 'light' | 'dark' | 'auto''inherit'Solo 'auto' sigue la preferencia del sistema operativo
density'comfortable' | 'compact' | 'dense'ninguno
classNames, stylespor slot (root, event, cell, rowHeader, ...){}Clases o estilos en línea
cssClassstringningunoClase adicional en la raíz
unstyledbooleanfalseSolo la estructura
themestringningunoAñade clases {theme}_*
nowLineboolean | { interval, label, cssClass }falseIntervalo de 60000 ms
emptyState, errorStateReactNode | NodeningunoUna cadena se muestra como texto
loadingbooleanningunoloadingLabelText 'Loading...', loadingLabelVisible true
messageHideAfter, messageHideOnMouseOut, messageBarPositionnumber, boolean, 'Top' | 'Bottom'5000, true, 'Top'Para control.message()
OpciónTipoPor defectoNotas
linksLinkData[][]Se dibujan a partir de los datos
linkShape'Curved' | 'RightAngled''Curved'
linkLayer'Above' | 'Below''Above'
linkWidth'Auto' | number'Auto'
linkBottomMarginnumber17

Teclado

OpciónTipoPor defectoNotas
keyboardEnabledbooleanfalse
keyboardTarget'document' | 'component''document'
keyboardMode'SuperScheduler' | 'Full''SuperScheduler''Full' necesita keyboardEnabled
keyboardOptions{ pageRows, contextMenuKey, bubbleOnFocus, selectAll, zoomKeys }ningunozoomKeys vale false por defecto

Menús y burbujas

OpciónTipoPor defecto
contextMenu, contextMenuResource, contextMenuSelection, contextMenuLinkSuperScheduler.Menuninguno
bubbleSuperScheduler.Bubbleuna burbuja que muestra bubbleHtml
cellBubble, resourceBubble, linkBubbleSuperScheduler.Bubbleninguno
allowDefaultContextMenubooleanfalse

Datos, carga y extensiones

OpciónTipoPor defectoNotas
extensionsSchedulerExtension[]ningunoCargadores por rangos, historiales
historyobjeto de historialningunoAtajo para una extensión de historial
dynamicLoadingbooleanfalseCon onScroll
scrollDelayDynamicnumber500Tiempo sin scroll antes de onScroll

Contenido React

Solo con el SuperSchedulerComponent de super-scheduler/react-render:

PropArgumentosDevuelve
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 } (áreas con render: true)ReactNode
renderCorner{ control }ReactNode
eventHover{ render, delay (350), leaveGrace (180), placement ('auto'), pin (false), glide (true) }
renderOptions{ retain, sliceMs (8) }

Callbacks

Convenciones

  • Antes y después. onEventMove se ejecuta antes de un cambio y puede cancelarlo; onEventMoved se ejecuta después. La mayoría de las parejas siguen este patrón.
  • Cancelación. Los handlers cuyos argumentos tienen preventDefault() pueden cancelar: la familia de los clics, onEventSelect, onEventDelete, onEventMove, onEventResize, onTimeRangeSelect, onTimeRangeClick y sus variantes de doble clic y clic derecho, onRectangleSelect, onRowClick y sus variantes, onRowSelect, onResourceExpand, onResourceCollapse, onTimeHeaderClick, onTimeHeaderRightClick, onGridMouseDown, onKeyDown, onKeyboardFocusChange y onLinkClick. Cancelar un clic también omite su handler terminado en «-ed» y la acción posterior.
  • Confirmación asíncrona. onEventMove y onEventResize admiten args.async = true y una llamada posterior a args.loaded(); preventDefault() antes de loaded() cancela, y los newStart, newEnd y newResource asignados antes de loaded() se aplican.
  • Guiado. onEventMoving, onEventResizing, onTimeRangeSelecting y onRectangleSelecting se ejecutan en cada cambio de la sombra; asigna args.allowed, args.start, args.end, args.cssClass o args.html.

Eventos

HandlerArgumentosCancelación
onEventClick, onEventClicked{ e, div, control, originalEvent, ctrl, shift, meta }el primero
onEventDoubleClick, onEventDoubleClicked{ e, originalEvent }el primero
onEventRightClick, onEventRightClicked{ e, div, originalEvent }el primero
onEventSelect, onEventSelected{ e, selected, ctrl, meta }el primero
onEventDelete, onEventDeleted{ e, control }el primero
onEventMouseEnter, onEventMouseLeave{ e, div }no
onEventFilter{ e, filterParam, visible }; asigna visible = falseno
onEventsChange{ events, changed, removed, reason }, con reason igual a 'move', 'resize', 'create', 'remove', 'update', 'api', 'history' o 'load'no

e es un SuperScheduler.Event: e.data es el objeto de datos, y e.id(), e.start(), e.end(), e.text(), e.resource() y e.duration() lo leen.

Arrastrar y redimensionar

HandlerArgumentosCancelación y asincronía
onEventMoving{ e, start, end, duration, resource, row, allowed, allowOverlap, conflicts, message, cssClass, html, external, multimove, left, right, ctrl, shift, alt, meta }se guía con allowed
onEventMove{ e, newStart, newEnd, newResource, external, multimove, control, position, async, loaded() }preventDefault(), asíncrono
onEventMovedlos mismos valores, de solo lectura; el almacén ya contiene las nuevas horasno
onEventResizing{ e, start, end, what, row, allowed, allowOverlap, conflicts, message, ... }se guía con allowed
onEventResize{ e, newStart, newEnd, what, multiresize, control, async, loaded() }preventDefault(), asíncrono
onEventResizedlos mismos valores, de solo lecturano

Rangos de tiempo y rectángulos

HandlerArgumentosCancelación
onTimeRangeSelecting{ start, end, anchor, duration, resource, row, allowed, overlapping, ignoreDisabledCells, html, cssClass, button }se guía con allowed
onTimeRangeSelect, onTimeRangeSelected{ start, end, resource, control, origin, multirange }, con origin igual a 'click', 'drag', 'keyboard' o 'api'el primero
onTimeRangeClick, onTimeRangeDoubleClick, onTimeRangeRightClick (y sus «-ed»){ start, end, resource }, sobre un rango ya seleccionadoel primero
onRectangleSelecting{ events, start, end, resources, visible }se guía con visible
onRectangleSelect{ events, start, end, resources, append }sí
onRectangleSelected{ events }no
onGridMouseDown{ action, originalEvent, button, ctrl, shift, meta }; asigna action = 'None'sí

Filas y cabeceras

HandlerArgumentosCancelación
onRowClick, onRowDoubleClick, onRowRightClick (y sus «-ed»){ row, x, originalEvent, ctrl, shift, meta }el primero
onRowSelect, onRowSelected{ row, selected, ctrl, shift, meta }el primero
onRowFilter{ row, filterParam, visible, control }no
onRowMouseOver, onRowMouseOut{ row, div }no
onResourceExpand, onResourceCollapse{ resource }sí
onRowHeaderResized, onRowHeaderColumnResized{}, { column }no
onRowHeaderColumnsChange{ control, columns, order, widths, reason }no
onRowSorted{ oldSortParam }no
onTimeHeaderClick, onTimeHeaderClicked{ header: { start, end, level }, control, originalEvent, ctrl, shift, meta }el primero
onTimeHeaderRightClick, onTimeHeaderRightClicked{ header }el primero
onCellMouseEnter, onCellMouseLeave{ cell }no

Hooks de render

HandlerArgumentosQué se cambia
onBeforeEventRender{ control, data }data.backColor, fontColor, cssClass, html, areas, toolTip, height, hidden... (una copia; start y end son 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 }Una copia del recurso, campos de layout incluidos
onBeforeRowHeaderColumnRender{ column }html del título de la columna, cssClass, areas
onBeforeTimeHeaderRender{ control, header }header.html, text, cssClass, backColor, toolTip, areas
onBeforeCornerRender{ control, html, areas }Contenido de la esquina
onBeforeLinkRender{ data, from, to }Color, grosor y estilo del vínculo, cssClass
onIncludeTimeCell{ cell: { start, end, visible, width } }Ocultar o redimensionar celdas de la línea de tiempo
onAfterEventRender, onAfterCellRender{ e, div }, { cell, div }El nodo pintado
onAfterRender, onAfterUpdate, onDimensionsChangedNotificaciones del ciclo de vida

Otros handlers

HandlerArgumentos
onZoom{ control, cellWidth, scale, cellDuration, phase, origin, anchor, viewportStart, level, lod }, en cada fotograma del gesto
onHistoryChange{ canUndo, canRedo, undoLabel, redoLabel, cause }
onScroll{ viewport, async, events, remove, clearEvents, loaded() }, con dynamicLoading
onKeyDown{ originalEvent }, cancelable
onKeyboardFocusChange, onKeyboardFocusChanged{ previous, focus }
onLinkClick, onLinkClicked{ link, originalEvent }, { link }

API del control

El control es ref.current.control, el valor de controlRef, args.control en la mayoría de los handlers, o new SuperScheduler.Scheduler(element, options) seguido de init().

Ciclo de vida y visualización

MiembroDescripción
init()Obligatorio una vez en los controles imperativos; update() antes de init() lanza una excepción
update(options?)Aplica opciones y vuelve a pintar de forma síncrona; sin argumentos, hace un refresco completo
dispose(), disposed()Liberación y su estado
show(), hide(), setHeight(px)Visibilidad; setHeight cambia a heightSpec: 'Fixed'
message(text, delayOrOptions?)Barra de mensajes dentro del control
loadingStart(options?), loadingStop()Etiqueta de carga
clearSelection()Borra la selección de rango de tiempo
dragInProgress()true durante un gesto
levelOfDetailEstado actual del nivel de detalle
historyEl historial conectado, o null
moveRowHeaderColumn(from, to)Reordena las columnas de la cabecera de fila
navLos elementos top, scroll, corner, timeHeader, message y loading (null antes de init())
vCadena de versión

Scroll y área visible

MiembroDescripción
scrollTo(date | px, animated?, position?)animated: boolean, ms, 'fast', 'normal', 'slow' o 'linear'; position: 'left', 'middle', 'right'
scrollToResource(id | row)
setScroll(x, y), setScrollX(x), setScrollY(y), getScrollX(), getScrollY()Scroll en píxeles
getViewPort(){ start, end, resources, rows(), events() } del área visible
visibleStart(), visibleEnd()Inicio y final de la línea de tiempo, no del área visible
getDate(px, precise?, isEnd?), getCoords()Correspondencia con píxeles y con el puntero
infinite.scrollTo(date), infinite.shiftStart(days)Scroll infinito

Eventos

MiembroDescripción
events.listEl array de datos, por referencia
events.add(event)Lanza una excepción si el id está duplicado
events.update(event)Sustituye un evento cargado; no hace nada con un id desconocido
events.remove(event | id)
events.find(id | predicate), events.findAll(predicate | example)Búsquedas que devuelven SuperScheduler.Event
events.all(), events.forRange(start?, end?)Todos los eventos, o los que se solapan con un rango (por defecto, el rango visible)
events.filter(param)Ejecuta onEventFilter
events.scrollIntoView(event)

Filas

MiembroDescripción
rows.add(data), rows.addChild(parent, data), rows.update(row | data), rows.remove(row | id)Cambios de filas
rows.find(id | predicate), rows.all(), rows.visible(), rows.each(fn)Búsquedas que devuelven SuperScheduler.Row
rows.expand(level?), rows.expandAll(), rows.collapseAll()Estado del árbol
rows.filter(param)Ejecuta onRowFilter
rows.sort(spec?), rows.sortParamOrdenación ({ field, order })
rows.selection.add/remove/clear/get/isSelectedSelección de filas

Selección

MiembroDescripción
multiselect.add/remove/clear/get/events/isSelected/redrawSelección de eventos
multiselect.selectAll({ scope, filter })scope 'view' (por defecto) o 'all'
multiselect.startRectangle()Prepara la selección por rectángulo
multirange.add(selection), multirange.get(), multirange.clear()Rangos de tiempo (new SuperScheduler.Selection(start, end, resource))
selectTimeRange(start, end, resource, dontFireEvent?)Selecciona un rango

Zoom, vínculos, celdas y teclado

MiembroDescripción
zoom.activeÍndice del nivel activo (-1 antes de que haya alguno)
zoom.setActive(level, position?, anchorDate?)Aplica un nivel de inmediato
zoom.animateTo({ level } | { cellWidth }, { duration (300), position, anchorDate })Con animación; devuelve una promesa
zoom.step(delta, options?)Un nivel, o un factor de 1,6 si no hay niveles
links.list, links.add, links.update, links.remove, links.find, links.findByFromTo, links.findAllByFromToVínculos
cells.all(), cells.find(start, resource), cells.findXy(x, y), cells.findByPixels(x, y)Celdas montadas
keyboard.focusCell, focusEvent, getFocus, move, clearFocus, resetFocusFoco del teclado

Miembros estáticos

MiembroDescripción
SuperScheduler.Scheduler.makeDraggable({ element, data, duration, ... })Arrastrar elementos DOM a la cuadrícula como eventos nuevos
SuperScheduler.Scheduler.registerDropTarget({ element, onDrop, ... })Soltar eventos fuera de la cuadrícula (con dragOutAllowed)
SuperScheduler.Scheduler.startDragging(options), stopDragging()Arrastre externo programático

El namespace SuperScheduler

MiembroDescripción
DateFecha y hora civil: today(), now(), parse(text, pattern, locale?), fromYearMonthDay(), add*(), firstDayOf*(), getDatePart(), getDay() (día del mes), getDayOfWeek(), dayOfWeekISO(), weekNumberISO(), toString(pattern?, locale?), toDate(), toDateLocal(), value, ticks, equals()
DurationIntervalo en milisegundos: ofDays(), ofHours(), ofMinutes(), totalHours(), toString(pattern?)
EventEnvoltorio de evento (data, id(), start(), end(), text(), resource(), duration())
Localeregister(locale), find(id), new Locale(id, fields)
Menu, BubbleMenús contextuales y burbujas al pasar el puntero (show(), hide())
Selectionnew Selection(start, end, resource?)
UtilescapeHtml(text), overlaps(start1, end1, start2, end2) (semiabierto)
ColorUtildarker(), lighter(), contrasting()
ExceptionSe lanza cuando la API se usa mal
guid()UUID v4 aleatorio
Row, RenderRow, LinkLos crea el control; léelos en los handlers

Módulos por subpath

history

createHistory(options?) devuelve un historial que se pasa como history={history} o en extensions. Opciones: limit (50), record (['move', 'resize']), keys ('root', 'document' o false; por defecto 'root'), equals, fields, apply ('control' o una función para eventos controlados) y labels. Métodos: undo(), redo(), clear(), push({ label, undo, redo }), record({ ops, control }), batch(label, run), revert(eventId), subscribe(listener); propiedades canUndo, canRedo, undoLabel, redoLabel. Las cargas y los cambios rechazados no se registran.

minimap

createMinimap(control, container, options?) y el componente React <SchedulerMinimap control={control} />. Opciones: series (por defecto eventDensity(control)), height (28), peak ('relative' o 'absolute' con max), tone, marks (today, months, past, todos true), range y labels. El widget tiene update(), refresh() y dispose().

panes

<SchedulerPanes> recibe las props del scheduler, más panes ({ id, resources or rowFilter, size, minSize (48), hidden, props }), un height numérico obligatorio, timeHeader ('first'), scrollbar ('last'), splitter (true), crossPaneMove (true), component, onPaneResize y panesRef. linkPanes(controls, { zoom, rowHeaderWidth }) vincula controles existentes y devuelve { dispose() }.

zoom-ui

createZoomHud(control, { format, apiMs (700) }), createZoomSlider(control, container, { min, max, detents, scale ('log'), label }) y createLodBadge(control, container, labels?). Cada uno devuelve { element, dispose() }.

views

getViewState(control, include?) devuelve un estado apto para JSON (zoom, scroll, density, collapsed, columns); applyViewState(control, state, { animate, when, timeout }) (when es 'now' o 'rows') devuelve una promesa de boolean.

ranges

createRangeLoader({ load, chunkDays (7), prefetch (1), cacheChunks (26), skeleton (true), onError }) devuelve un cargador con reload(range?), clear() y loading. load({ start, end, signal }) devuelve los eventos que se solapan con [start, end).

hooks

useScheduler({ track }) devuelve { controlRef, control, state } para los temas 'events', 'selection', 'zoom', 'viewport' e 'history'. useSchedulerState(control, topic), subscribeScheduler(control, topic, listener) (devuelve una función para cancelar la suscripción) y getSchedulerSnapshot(control, topic) dan el mismo estado fuera del hook. El estado del área visible se publica cuando el scroll se detiene.

react-render

SuperSchedulerComponent con las props de contenido React. Primero se pinta el HTML o el texto de respaldo; el contenido React lo sustituye cuando termina la interacción. renderOptions.retain vale por defecto el menor entre 2.000 y el doble de los elementos montados; sliceMs, 8.

tailwind

Un preset de Tailwind CSS v3: presets: [require('super-scheduler/tailwind')]. Añade colores, radios, sombras y transiciones super-scheduler asociados a los tokens CSS.

datasets

generateDataset(options) y generateScenario(id, overrides?) crean datos deterministas de tipo hotel (rows y days obligatorios, seed, start en ticks, density, events, times). toSuperSchedulerData(dataset) devuelve { resources, events }. Escenarios: S1 (120 filas, 730 días), S2 (1.000 filas, 730 días), S3 (5.000 filas, 1.500 días) y sus variantes densas. Por defecto, los datos empiezan el 1 de enero de 2026.

core

Utilidades sin DOM que comparte el motor: SchedulerDate, Duration, registerLocale, resolveLocale, formatTicks, parseTicks, ticksFromParts(year, month, day, ...), partsOf, formatIso, parseIso, todayTicks, nowTicks, las constantes MS_PER_* y utilidades de líneas de tiempo, índices y layout. Úsalo para gráficos y herramientas que acompañan al scheduler.

API de Lite

super-scheduler-lite es una línea de tiempo diaria de solo lectura. Las opciones que no implementa lanzan SuperScheduler Lite: unsupported option "..." en todos los builds.

OpciónTipoPor defecto
startDateDateInputhoy
daysnumber (entero)31
scale'Day''Day'
cellWidthnumber64
heightnumber400
rowHeaderWidthnumber160
rowMinHeightnumber40
eventHeightnumber26
resources{ id, name }[] (plana)[]
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 }) => voidninguno
onTimeRangeClick({ control, start, end, resource, originalEvent }) => void, en cualquier celda vacíaninguno
controlRefobjeto ref o (control | null) => voidninguno

El control (ref.current.control) tiene init(), update(options), dispose(), disposed(), scrollTo(date), scrollToResource(id), visibleStart() y visibleEnd(). El namespace tiene SuperScheduler.Date y SuperScheduler.Scheduler. Los children, frozen, split y columns de los recursos se rechazan. Tokens de tema en .super-scheduler-lite: --super-scheduler-background, -text, -border, -header, -event y -focus. Consulta Migrar de Lite a Pro.

APIs reservadas

Estos miembros tienen tipos para que el código existente compile, pero no están implementados en 0.1.0. No hacen nada, devuelven valores vacíos y muestran super-scheduler: <feature> is not supported yet una vez en los builds de desarrollo.

ÁreaReservado
Edición en líneaeventEditHandling, eventEditMinWidth, rowEditHandling, los valores 'Edit' de las opciones de gestión de clics, events.edit(), rows.edit(), Row.edit(), onEventEdit, onEventEdited, onEventEditKeyDown, onRowEdit, onRowEdited, onAfterEventEditRender
Creación y movimiento de filasrowCreateHandling, rowCreateHeight, rowCreateHtml, rowCreateText, rowMoveHandling, rowMoveSameLevelOnly, rowDragHandleWidth, onRowCreate, onRowCreated, onRowMove, onRowMoved, onRowMoving, makeDraggableAsRow, registerRowDropTarget
Creación interactiva de vínculoslinkCreateHandling, linkDotSize, linkPointSize, onLinkCreate, onLinkCreated (los vínculos se dibujan a partir de los datos de links)
Ida y vuelta al servidor y carga HTTPLos valores de gestión 'CallBack' y 'PostBack' y las acciones de menú equivalentes, backendUrl, eventsLoadMethod, rowsLoadMethod, linksLoadMethod, events.load(), rows.load(), links.load(), blockOnCallBack, notifyCommit, clientState, onCallBackStart, onCallBackEnd, onLoadNode
Refresco automáticoautoRefreshEnabled, autoRefreshInterval, autoRefreshMaxCount, autoRefreshCommand, autoRefreshPause(), autoRefreshStart(), onAutoRefresh
ExportaciónexportAs(), exceljs, onBeforeEventExport, onBeforeCellExport, onBeforeRowHeaderExport, onBeforeTimeHeaderExport, onBeforeCornerExport
Versiones y agrupación de eventoseventVersionsEnabled, eventVersionHeight, eventVersionMargin, eventVersionPosition, eventVersionsReserveSpace, groupConcurrentEvents, groupConcurrentEventsLimit, groupBubble, onBeforeGroupRender, row.groups
Recurrenciaevents.findRecurrent() (devuelve null)
Vistas y layoutviewType: 'Days' y 'Gantt' (se renderizan como 'Resources'), layout, rowHeaderScrolling, rowHeaderColumnsMode, rowHeaderHideIconEnabled, rows.headerHide(), rows.headerShow(), rows.headerToggle(), timeHeaderTextWrappingEnabled, sortDirections, syncResourceTree
Otrosapi, eventBubbleShowForMargins, hideBorderFor100PctHeight, hideUntilInit, initEventEnabled, jointEventsMove, jointEventsResize, navigatorBackSync, overrideWheelScrolling, scrollStep, watchWidthChanges, range y range.all() (usa multirange), events.focus(), uiBlock(), uiUnblock(), onBeforeGridLineRender, onResourceHeaderClick, onResourceHeaderClicked, SuperScheduler.Navigator, Row.column(i).html(value), onDomAdd y onDomRemove de Bubble

Implementado en parte:

  • treeAnimation se acepta, pero la animación de despliegue nunca se reproduce.
  • eventClusters y onClusterClick se aceptan y todavía no tienen ningún efecto visible.
  • Los handlers onBefore*DomAdd y onBefore*DomRemove, las props render* y eventHover solo funcionan con el componente de super-scheduler/react-render; el componente raíz avisa y los ignora.

Indicaciones de ajuste que se aceptan pero se ignoran, porque la virtualización siempre está activada y se ajusta sola: beforeCellRenderCaching, cellSweeping, cellSweepingCacheSize, drawBlankCells, dynamicEventRendering y sus opciones de margen y caché, eventUpdateInplaceOptimization, progressiveRowRendering, progressiveRowRenderingPreload y las opciones scrollDelay* distintas de scrollDelayDynamic.