Zum Inhalt springen
SuperScheduler

Ressourcenplanung für Reactv0.1.0

Jede Ressource.Jeder Moment.Ihr Produkt.

SuperScheduler ist eine React-Bibliothek für interaktive Ressourcenplanung: eine schnelle, barrierefreie Zeitleiste, auf der Ihre Nutzer ziehen, die Dauer ändern, zoomen und rückgängig machen – zugeschnitten auf Ihr Geschäft, nicht umgekehrt.

  • React 18 und 19
  • TypeScript-Typen inklusive
  • Keine Laufzeitabhängigkeiten
  • Lite auf npm · Pro als privater Tarball
Framehouse
StudiosStudio A · HohlkehleStudio B · KüchensetPostproduktionSchnitt 1Schnitt 2FarbkorrekturMischungTeamsKamerateam 1Kamerateam 2Frühjahrskampagne · Offline-SchnittHafen-Doku · Offline-SchnittFrühjahrskampagne · FarbkorrekturKüchenspot · FarbkorrekturFrühjahrskampagne · MischungKüchenspot · DrehKüchenspot · DrehStudiobetrieb · Rigging-WartungKüchenspot · TeameinsatzKüchenspot · TeameinsatzKüchenspot · Offline-SchnittHafen-Doku · DrehHafen-Doku · TeameinsatzDienstag, 13. OktoberMittwoch, 14. OktoberDonnerstag, 15. OktoberFreitag, 16. Oktober08:0012:0016:0008:0012:0016:0008:0012:0016:0008:0012:0016:00

SuperScheduler Pro wird erst geladen, wenn Sie es anfordern.

Eine Engine, Ihr Vokabular

Was organisieren Sie?

Dieselbe Oberfläche, drei Branchen. Ressourcen, Zeitskala, Beschriftungen und Aktionen richten sich nach der Aufgabe; die Engine darunter bleibt dieselbe.

Agentur-Beispiel öffnen
DesignInés G.Marc D.Yuki T.TextLena F.Omar S.MotionSara N.Teo R.MarkensystemKey Visual LaunchLayouts LaunchHandelspaketMoodboard HandelIcon-SetSkript LaunchTexte LaunchClaims HandelLaunch-FilmLogo-AnimationLoops Handel12. Okt.19. Okt.Mo., 12.Di., 13.Mi., 14.Do., 15.Fr., 16.Sa., 17.So., 18.Mo., 19.Di., 20.Mi., 21.Do., 22.Fr., 23.Sa., 24.So., 25.

SuperScheduler Pro wird erst geladen, wenn Sie es anfordern.

Zeit erkunden

Vom Quartal zur Viertelstunde.

Zoomen Sie stufenlos per Pinch-Geste, mit Ctrl/⌘ und Mausrad oder über die Schaltflächen unten. Kopfzeilen, Beschriftungen und Detailgrad passen sich der Skala an, und die Minimap behält die ganze Saison im Blick.

  1. 01Eine einzige Zeit-pro-Pixel-Skala: Zoomen löst nie ein React-Rendering aus.
  2. 02Zoomstufen, die Sie selbst definieren, jede mit eigenen Kopfzeilen.
  3. 03Die Minimap zeichnet jede Auslastung, die Ihre Anwendung berechnet.
Zur Skala springenQuartal · Monat · Woche · Tag · Stunden · 15 Min.
NordhalleSaal ASaal BSaal CSüdpavillonStudio 1Studio 2TerrasseAufbauAusstellungAkkreditierungKeynoteKaffeepausePodiumMittagessenPodiumAufbauAusstellungAufbauAusstellungKonferenzAufbauAusstellungAufbauAusstellungWorkshopAufbauAusstellungKonferenzAufbauAusstellungKonferenzKonferenzKonferenzKonferenzWorkshopKonferenzKonferenzBreakoutBreakoutWorkshopKonferenzWorkshopKonferenzKonferenzKonferenzKonferenzWorkshopKonferenzWorkshopKonferenzBreakoutBreakoutBreakoutKonferenzKonferenzKonferenzWorkshopKonferenzWorkshopWorkshopKonferenzAufbauAusstellungKonferenzWorkshopAufbauAusstellungWorkshopAufbauKonferenzKonferenzKonferenzWorkshopKonferenzKonferenzMittagessenWorkshopKonferenzKonferenzKonferenzKonferenz1. Okt.5. Okt.12. Okt.19. Okt.26. Okt.2. Nov.1234567891011121314151617181920212223242526272829303112345

SuperScheduler Pro wird erst geladen, wenn Sie es anfordern.

Zoomen Sie per Pinch-Geste oder mit Ctrl/⌘ + Scrollen über der Zeitleiste um den Zeiger herum.

Gruppieren nachTeam
MarkeAna P.DesignJonas K.MotionMei L.DesignRafa D.ProduktionProduktNoor H.EntwicklungLuca B.EntwicklungIris V.DesignTom S.ProduktionStudioEva M.MotionKofi A.MotionLia R.DesignMax W.EntwicklungAtlas-RelaunchNimbus-KampagneAtlas-RelaunchAtlas-RelaunchHarbor-AppNimbus-KampagneHarbor-AppNimbus-KampagneAtlas-RelaunchHarbor-AppNimbus-KampagneNimbus-KampagneHarbor-AppAtlas-RelaunchNimbus-KampagneAtlas-RelaunchHarbor-AppNimbus-KampagneAtlas-RelaunchHarbor-AppHarbor-AppNimbus-KampagneAtlas-RelaunchHarbor-AppAtlas-RelaunchNimbus-KampagneHarbor-App12. Okt.19. Okt.26. Okt.12131415161718192021222324252627282930311

SuperScheduler Pro wird erst geladen, wenn Sie es anfordern.

Mit Ressourcen arbeiten

Teams, Räume und Maschinen – so geordnet, wie Sie sie im Kopf haben.

Ressourcen können eine flache Liste, ein mehrstufiger Baum oder eine Tabelle mit Spalten sein. Gruppieren Sie dieselben Personen nach Team oder Kompetenz, filtern Sie schon beim Tippen – die Zeitleiste bleibt dabei ausgerichtet.

  1. 1BaumzeilenElternzeilen klappen auf und zu; Kindzeilen behalten ihre eigenen Ereignisse.
  2. 2Spalten im ZeilenkopfSpalten mit anpassbarer Breite, gespeist aus Ihren Ressourcendaten.
  3. 3FilterZeilen und Ereignisse werden über Callbacks gefiltert, die Sie selbst schreiben.

Sicher handeln

Verschieben. Callback lesen. Rückgängig machen.

Jede Geste erreicht Ihren Code als typisierter Callback – während sie passiert und nachdem sie abgeschlossen ist. Lehnen Sie eine Verschiebung mit Begründung ab, bestätigen Sie sie mit Ihrem Server oder lassen Sie sie zu. Der Verlauf ist nur einen Import entfernt.

Wegen Akustikwartung geschlossen: Studio 4
Studio 1Studio 2Studio 3Studio 4Studio 5Studio 6Night FerryCopper BloomLumen ChoirNight FerryHalcyonCopper BloomLumen ChoirHalcyonStatic OrchardStatic OrchardHalcyon12. Okt.19. Okt.Mo., 12.Di., 13.Mi., 14.Do., 15.Fr., 16.Sa., 17.So., 18.Mo., 19.Di., 20.Mi., 21.Do., 22.Fr., 23.Sa., 24.So., 25.

SuperScheduler Pro wird erst geladen, wenn Sie es anfordern.

  1. 1Ziehen Sie eine Buchung in einen anderen Raum oder auf einen anderen Tag.
  2. 2Versuchen Sie, eine Buchung in den Raum zu ziehen, der gerade gewartet wird.
  3. 3Klicken Sie auf Rückgängig oder drücken Sie Ctrl/⌘ + Z im Scheduler.
Handler: act-handlers.ts
act-handlers.tsts
/**
 * Booking-board handlers of the "act with confidence" demo. This file is shown on the page as
 * the code that runs: the library proposes, these handlers decide, React state persists.
 */
import { type SuperScheduler } from 'super-scheduler'
import type { SchedulerProps } from 'super-scheduler'
import { hitsMaintenance } from '../data/bookings'
import type { CallbackRecord } from '../callback-log'

type Log = (record: Omit<CallbackRecord, 'seq'>) => void

export function createBookingHandlers(log: Log, refusal: string): Partial<SchedulerProps> {
  return {
    // Visual and enforced: the library refuses drops on disabled cells.
    onBeforeCellRender: (args) => {
      const { resource, start, end } = args.cell
      if (hitsMaintenance(String(resource), start.value, end.value))
        args.cell.properties.disabled = true
    },

    // While dragging: explain the refusal next to the pointer.
    onEventMoving: (args) => {
      if (hitsMaintenance(String(args.resource), args.start.value, args.end.value)) {
        args.allowed = false
        args.message = refusal
      }
    },

    // Before the commit: the last word, e.g. after asking a server.
    onEventMove: (args) => {
      const refused = hitsMaintenance(
        String(args.newResource),
        args.newStart.value,
        args.newEnd.value,
      )
      if (refused) args.preventDefault()
      log({
        name: 'onEventMove',
        args: {
          'e.id()': String(args.e.id()),
          'e.text()': args.e.text(),
          newResource: String(args.newResource),
          newStart: args.newStart.value,
          newEnd: args.newEnd.value,
        },
        ...(refused ? { refused: refusal } : {}),
      })
    },

    onEventMoved: (args) =>
      log({
        name: 'onEventMoved',
        args: {
          'e.id()': String(args.e.id()),
          newResource: String(args.newResource),
          newStart: args.newStart.value,
          newEnd: args.newEnd.value,
        },
      }),

    onEventResized: (args) =>
      log({
        name: 'onEventResized',
        args: {
          'e.id()': String(args.e.id()),
          what: args.what,
          newStart: args.newStart.value,
          newEnd: args.newEnd.value,
        },
      }),
  }
}

export function isBookingEvent(
  event: SuperScheduler.EventData,
): event is SuperScheduler.EventData<{ client: string }> {
  return 'client' in event && typeof event.client === 'string'
}

Passt in Ihr Produkt

Ihre Daten und Ihre Regeln – auf einer Zeitleiste, die Sie nicht selbst bauen müssen.

Eine Komponente, typisierte Props und Callbacks. Die Bibliothek übernimmt Rendering, Gesten, Virtualisierung und Barrierefreiheit; Ihre Anwendung verantwortet Daten, Validierung und Persistenz.

SuperScheduler
Rendert Ressourcen und Ereignisse, in beide Richtungen virtualisiert.
Ihre Anwendung
Liefert die Daten und bestimmt das Zeitfenster.
src/Planning.tsxtsx
import { SuperSchedulerComponent } from 'super-scheduler'
import type { SuperScheduler } from 'super-scheduler'
import 'super-scheduler/styles.css'

const rooms: SuperScheduler.ResourceData[] = [
  { id: 'studio-a', name: 'Studio A' },
  { id: 'studio-b', name: 'Studio B' },
]

const bookings: SuperScheduler.EventData[] = [
  {
    id: 'shoot-01',
    resource: 'studio-a',
    text: 'Product shoot',
    start: '2026-10-02',
    end: '2026-10-04',
  },
  {
    id: 'edit-01',
    resource: 'studio-b',
    text: 'Edit',
    start: '2026-10-04T09:00:00',
    end: '2026-10-04T17:00:00',
  },
]

export function Planning() {
  return (
    <div style={{ height: 480 }}>
      <SuperSchedulerComponent
        startDate="2026-10-01"
        days={14}
        scale="Day"
        cellWidth={56}
        timeHeaders={[{ groupBy: 'Month' }, { groupBy: 'Day', format: 'd' }]}
        height="100%"
        resources={rooms}
        events={bookings}
      />
    </div>
  )
}

Im Look Ihres Produkts

Echte Tokens, echter Kontrast, CSS zum Kopieren.

Diese Einstellungen ändern die CSS Custom Properties --super-scheduler-*, die von der Bibliothek ausgelesen werden. Die Kontrastprüfung nutzt die Kontrastverhältnisse nach WCAG 2; das CSS unten ist genau das, was Sie in Ihr Stylesheet einfügen.

Akzent
Oberfläche
Ereignisradius7 px
Ereignisstil
Dichte
Vorschau
Kontrast des Ereignistexts8,5:1Erfüllt AA für normalen Text
Studio 1Studio 2Studio 3Studio 4Studio 5Night FerryCopper BloomLumen ChoirNight FerryHalcyonCopper BloomLumen ChoirHalcyonStatic Orchard12. Okt.19. Okt.Mo., 12.Di., 13.Mi., 14.Do., 15.Fr., 16.Sa., 17.So., 18.Mo., 19.Di., 20.Mi., 21.

SuperScheduler Pro wird erst geladen, wenn Sie es anfordern.

Ihr Theme.css
/* SuperScheduler theme (light). Put the class on the element that wraps the scheduler, */
/* and pass density="comfortable" to SuperSchedulerComponent. */
.my-planning {
  --super-scheduler-accent-rgb: 25 97 68;
  --super-scheduler-surface: #fcfaf6;
  --super-scheduler-surface-raised: #f6f3ee;
  --super-scheduler-text: #161b22;
  --super-scheduler-text-muted: #4a5058;
  --super-scheduler-border: #ddd8d2;
  --super-scheduler-row-line: #ddd8d2;
  --super-scheduler-grid-line: #e9e6e0;
  --super-scheduler-selection: rgb(25 97 68 / 0.12);
  --super-scheduler-selection-border: rgb(25 97 68 / 0.75);
  --super-scheduler-focus-ring: rgb(25 97 68 / 0.5);
  --super-scheduler-today-bg: rgb(25 97 68 / 0.06);
  --super-scheduler-weekend-bg: rgb(0 0 0 / 0.025);
  --super-scheduler-hover-cell: rgb(25 97 68 / 0.06);
  --super-scheduler-hover-row: rgb(25 97 68 / 0.03);
  --super-scheduler-event-radius: 7px;
  --super-scheduler-event-bg: #dee6df;
  --super-scheduler-event-border: #b3c9bd;
  --super-scheduler-event-text: #124631;
  --super-scheduler-event-bar: #196144;
}

Beispiele

Jedes Beispiel hat sein eigenes Datenmodell, eigene Regeln, eine eigene Aufgabe und eigenen Quellcode. Sechs für den Einstieg:

Alle zwölf Beispiele ansehen

Lite und Pro

Starten Sie mit einer schreibgeschützten Zeitleiste. Bauen Sie sie zum Planungsprodukt aus.

Beide Editionen teilen Datenmodell, Umgang mit Kalenderdaten, Virtualisierung und Tastaturunterstützung. Pro ergänzt alles, was den Plan verändert.

Lite

Kostenlos auf npm

Für Verfügbarkeits-Boards, Belegungsansichten und schreibgeschützte Planungsansichten.

  • Tageszeitleiste mit flacher Ressourcenliste
  • Ereignisse mit Farben und Stapelung bei Überlappung
  • Klick-Callbacks für Ereignisse und Zellen
  • Tastaturnavigation und 2D-Virtualisierung
  • Keine Begrenzung bei Ressourcen oder Ereignissen

npm install super-scheduler-lite

Pro

499 € pro Jahr

Für Produkte, in denen Menschen direkt auf der Zeitleiste verschieben, die Dauer ändern und entscheiden.

  • Ziehen, Dauer ändern, Validierung und Konflikt-Feedback
  • Stunden, Minuten und stufenloser Zoom
  • Ressourcenbäume, Spalten, fixierte und geteilte Zeilen
  • Abhängigkeiten, Mehrfachauswahl, Rückgängig und Wiederholen
  • Minimap, gekoppelte Bereiche, gespeicherte Ansichten, bereichsweises Laden, React-Render-Slots

Privater, versionierter Tarball über HTTPS

Editionen im Detail vergleichen

Bevor Sie sich entscheiden

Fragen, die Teams vor der Einführung stellen

Ist es eine React-Komponente oder eine Framework-unabhängige Engine?

Beides. SuperSchedulerComponent ist der React-Wrapper für React 18 und 19; darunter übernimmt eine DOM-Engine Scrollen, Zoom und Gesten ganz ohne React-Renderings. Sie können den Scheduler auch imperativ mit new SuperScheduler.Scheduler(element, options) einbinden.

React-Integration →
Wie gut sind die TypeScript-Typen?

Die Deklarationen werden mit dem Paket ausgeliefert. Optionen, Callbacks und Steuerungsmethoden sind typisiert, und Ereignisdaten sind generisch: EventData<YourFields> hält Ihre eigenen Felder in Handlern und Render-Hooks typisiert.

Ressourcen, Ereignisse und Intervalle →
Passt er optisch zum Rest unseres Produkts?

Ja. Farben, Eckenradien, Dichte und Dark Mode kommen aus dokumentierten CSS Custom Properties; classNames und styles erreichen einzelne Bestandteile; React-Render-Slots ersetzen den Inhalt von Ereignissen, Zeilen und Kopfzeilen.

Theming-Leitfaden →
Wer speichert die Daten, und wer verhindert Konflikte?

Ihre Anwendung. Der Scheduler zeigt und bearbeitet, was Sie ihm übergeben, und meldet jede Änderung über Callbacks. Persistenz, Berechtigungen und das letzte Wort bei Konflikten liegen bei Ihrem Backend; die Bibliothek hilft mit Überlappungsschutz, gesperrten Zellen und begründeten Ablehnungen.

Kontrollierte Ereignisse und Callbacks →
Wie wird Pro ausgeliefert?

Als privates, versioniertes .tgz über HTTPS, das npm wie jede URL-Abhängigkeit installiert. Der Download-Schlüssel steht in Ihrem Manifest und Lockfile, behandeln Sie ihn also als Geheimnis. Lite ist ein ganz normales öffentliches npm-Paket.

Pro installieren →
Lässt er sich mit Tastatur und Screenreader bedienen?

Pro hat einen vollständigen Tastaturmodus: Pfeiltasten bewegen den Fokus, Eingabe aktiviert, Alt+Pfeiltasten verschieben Ereignisse, und Änderungen werden assistiven Technologien angesagt – auf Deutsch, Englisch, Spanisch, Französisch und in fünf weiteren Sprachen. Auch Lite unterstützt Tastaturnavigation.

Tastatur und Barrierefreiheit →
Beherrscht er Stunden und Minuten oder nur Tage?

Pro reicht von Monaten bis hinunter zu 5-Minuten-Zellen, blendet auf Wunsch Nächte oder Wochenenden aus und wechselt die Skala stufenlos. Lite ist eine Tageszeitleiste.

Stunden, Minuten, Tage und Zoom →
Was ist mit Zeitzonen und wiederkehrenden Ereignissen?

Datumswerte sind Kalenderdaten mit Uhrzeit, wie sie auf der Wanduhr stehen – bewusst ohne Zeitzone. Rechnen Sie zonierte Zeitpunkte um und expandieren Sie Wiederholungen in Ihrer Anwendung, bevor Sie die Ereignisse an den Scheduler übergeben.

Sprachen, Datumsangaben und Zeitzonen →