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.
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.
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.
Miembro
Tipo
Notas
ref.current.control
SuperScheduler.Scheduler
Se asigna al montar; después de desmontar, es el control liberado
controlRef
MutableRefObject<Scheduler | null> o (control) => void
Los 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'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> no tiene firma de índice: declara los campos adicionales mediante el parámetro de tipo, por ejemplo EventData<{ guest: string }>.
Campos
Tipo
Significado
id, start, end, text
EventId, DateInput, DateInput, string
Obligatorios. end es exclusivo salvo con eventEndSpec: 'Date'
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.
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().
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.
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().
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
Área
Reservado
Edición en línea
eventEditHandling, 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
linkCreateHandling, linkDotSize, linkPointSize, onLinkCreate, onLinkCreated (los vínculos se dibujan a partir de los datos de links)
Ida y vuelta al servidor y carga HTTP
Los 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
viewType: 'Days' y 'Gantt' (se renderizan como 'Resources'), layout, rowHeaderScrolling, rowHeaderColumnsMode, rowHeaderHideIconEnabled, rows.headerHide(), rows.headerShow(), rows.headerToggle(), timeHeaderTextWrappingEnabled, sortDirections, syncResourceTree
Otros
api, 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.