NUCLO / 12

Sprache

Praktische Beispiele. Live-Demos.

Wähle ein Beispiel, um es im Vollbild zu öffnen, mit der Live-Vorschau und seinem Quellcode nebeneinander.

API

13

Eine kleine Demo pro Baustein, dieselben, die die Dokumentation einbettet.

09

Tag-Builder

Ein Builder nimmt Attribute, statische Kinder und dynamischen Text. Umbenennen ändert den State und ruft dann update() auf.

API
10

Komponenten

Eine Komponente ist eine einfache Funktion. Jeder Counter()-Aufruf behält seinen eigenen Zähler.

API
11

Attribute

Attributwerte können Funktionen sein. Der zweite Button kippt busy und ruft update() auf; disabled und aria-busy von Save folgen.

API
12

Ereignisse

onInput und onKeyDown sind einfache Attribute. Tippe, dann drücke Escape zum Löschen.

API
13

Lebenszyklus

onMount startet ein Intervall und gibt sein Cleanup zurück. Beim Unmount läuft das Cleanup, also pausiert der Zähler, bis der Timer wieder gemountet wird.

API
14

Explizite Updates

count++ ändert nur die Variable. Der Text holt beim nächsten update() auf, vom Button oder von irgendetwas anderem auf dieser Seite.

API
15

Dynamische Werte

Ändere den Namen. Der statische Text wurde festgelegt, als das Element gebaut wurde; der dynamische läuft bei jedem update() erneut. forceUpdate() baut den Baum neu, also holt auch der statische Text auf.

API
16

update()

Jedes update() führt jeden dynamischen Wert aus, auch wenn sich seine Daten nicht geändert haben. Andere Demos auf dieser Seite treiben den Zähler ebenfalls hoch.

API
17

scope()

Beide Buttons fügen einen Eintrag hinzu und benennen den Benutzer um. update('cart') aktualisiert nur das Panel mit dem Scope.

API
18

when()

Die erste wahre Bedingung gewinnt; sonst rendert .else(). Ein neuer Zweig wird von Grund auf gebaut.

API
19

list()

Zeilen werden nach Identität zugeordnet. Hake eine Zeile ab, dann Umkehren: dasselbe <li> wandert, Checkbox und alles.

API
20

region() & into()

Ein Layout mit einer gestapelten Hauptregion und einer Seitenregion, von außen gefüllt. Tippe in Home, öffne den Dialog und schließe ihn: der Text bleibt. Article füllt beide Regionen mit einem into().

API
21

forceUpdate()

update() aktualisiert nur die dynamische lang-Zeile. forceUpdate() ruft App erneut auf und patcht dasselbe <h1>. Die explizite Form baut nur diesen Baum neu, nicht die ganze Seite.

API

SVG

27

Diagramme, Animationen, Werkzeuge und Spiele aus den SVG-Tag-Buildern, gesteuert von einfachen Daten, Pointer-Events und update().

28

Balkendiagramm

Rects aus einem Array. Ihr y und ihre Höhe sind Funktionen der Daten, also bewegt update() die Balken.

SVG
29

Liniendiagramm

Ein Pfad, dessen d aus den Punkten gebaut wird, mit einer Verlaufsfläche und einem Kreis pro Punkt.

SVG
30

Donut-Diagramm

Ein Kreis pro Segment. stroke-dasharray gibt jedem seinen Anteil am Ring und stroke-dashoffset seinen Anfang.

SVG
31

SVG-Animation

SMIL als Builder: animateSvg lässt die Sonne pulsieren, animateTransformSvg lässt den Planeten kreisen. Ein dynamisches dur setzt die Geschwindigkeit.

SVG
32

Messanzeige

Ein Bogen, der sich mit stroke-dashoffset füllt, und eine Nadel, die sich mit einem CSS-Transform dreht. Beide sind Funktionen einer Zahl.

SVG
33

Netzdiagramm

Fünf Werte auf fünf Achsen. Die Form ist ein Pfad, dessen d aus den Daten berechnet wird, also verformt update() ihn.

SVG
34

Heatmap

Ein Raster aus Rects, deren fill-opacity einem Level folgt. Klicke eine Zelle, um sie zu erhöhen; ein titleSvg-Kind ist ihr Tooltip.

SVG
35

Hover-Tooltip

Pointer-Events auf SVG-Elementen. onPointerEnter wählt den aktiven Punkt und eine Tooltip-Gruppe gleitet zu ihm.

SVG
36

Kurveneditor

Ziehe die Griffe einer kubischen Bézierkurve. onPointerDown wählt einen Punkt, onPointerMove auf dem svg bewegt ihn und der Pfad folgt.

SVG
37

Uhr

Die Zeiger sind Linien, deren transform eine Funktion der Zeit ist. onMount startet das Ticken und gibt das Cleanup zurück.

SVG
38

Icon-Umschalter

Ein Menü-Icon, das sich mit CSS-Transitions in ein Kreuz verwandelt, und ein Herz, das mit einer beim Klick startenden SMIL-Animation aufploppt.

SVG
39

Live-Stream

Zwei Serien scrollen per Timer nach links. Eine CSS-Transition so lang wie ein Tick macht das Gleiten weich, und Hovern liest jeden Messwert.

SVG
40

Kerzendiagramm

Vierzig Slots lesen ihre eigene Kerze. Wechsle den Zeitrahmen, schalte den Durchschnitt um, hovere für die Zahlen oder lass die Live-Kerze ticken.

SVG
41

Balkenrennen

Zehn Balken verlassen das DOM nie. Ihr Rang setzt ein translateY, also gleitet eine Transition jeden in seine Zeile, wenn sich die Werte ändern.

SVG
42

Gestapeltes Flächendiagramm

Vier Bänder wechseln zwischen gestapeltem, Stream- und Prozent-Layout. Eine Serie auszublenden gibt ihrem Band nur die Dicke null, also behält jeder Pfad seine Form.

SVG
43

Treemap

Ein squarified Layout, in das du hineinzoomst. Ein Wechsel der Kennzahl schiebt jede Zelle in ihre neue Box, und ein Klick auf eine Gruppe tauscht ihre Kinder ein.

SVG
44

Live-Histogramm

Stichproben strömen aus vier Verteilungen ein. Die Klassen zählen bei jeder Änderung neu, eine angepasste Glockenkurve folgt dem Mittelwert, und ein Schieberegler setzt die Anzahl der Klassen.

SVG
45

Zeichenfläche

Pointer-Events zeichnen Polylinien. list() rendert eine pro Strich, und der laufende Strich wächst bei jedem update().

SVG
46

Drehregler

Ein eigener Schieberegler: der Winkel des Pointers setzt den Wert, die Pfeiltasten schrittweise, und pathLength="100" macht aus dem Wert einen Strich.

SVG
47

Farbkreis

Wähle einen Farbton über den Winkel und eine Sättigung über den Abstand. Neunzig Keile, ein radialer Verlauf und eine dunkle Scheibe bilden das Rad.

SVG
48

Spirograph

Ein Rad rollt in einem Ring und ein Stift zeichnet es nach. Jeder Frame verlängert einen Strich und aktualisiert nur seinen scope().

SVG
49

Springende Bälle

Schwerkraft, Wände und Kollisionen in einer requestAnimationFrame-Schleife. Ziehe zurück und lass los, um einen Ball zu starten.

SVG
50

Klebrige Blobs

Ein Blur- und ein Farbmatrix-Filter verschmelzen Blobs miteinander. Eine Spur aus Kreisen folgt dem Pointer.

SVG
51

Kräftegraph

Knoten stoßen sich ab, Kanten ziehen, und das Layout kühlt ab, bis es ruht. Ziehe einen Knoten oder klicke einen, um ein Kind wachsen zu lassen.

SVG
52

Brush & Zoom

Markiere einen Bereich in der Übersicht, um das Diagramm darüber zu zoomen. Ein clipPath, der der Markierung folgt, färbt die Auswahl.

SVG
53

Tic-Tac-Toe

Spiel gegen den Computer. when() fügt jedes Zeichen hinzu, und eine CSS-Animation auf seinem Strich zeichnet es ein.

SVG
54

Kreistext

Tippe einen Badge-Text. textPath biegt den Text um einen Kreis und textLength passt ihn auf genau eine Runde an.

SVG

Routing

6

Routentabellen, Matching, die aktive Route, Layer und Loader. nuclo-router ist ein eigenes Paket: npm install nuclo nuclo-router.

Apps

15

Größere Programme im Vollbild, mit ihrem echten Quellcode hinter Tabs: ein Desktop mit Fenstern, ein Data Grid, ein Chat, Spiele, Editoren und Bibliotheken, die ihren eigenen State besitzen.

61

Seiten-Builder

Schreibe direkt auf der Seite, ziehe Griffe, um Blöcke umzusortieren oder in Layouts zu verschieben, drücke / zum Einfügen und rechtsklicke für Aktionen. Style Grid- und Flex-Layouts, mache Änderungen rückgängig, sieh dir die Vorschau in Handygröße an und exportiere HTML.

Apps
62

Algorithmus-Stepper

Die Engine ist einfaches JavaScript: Generatoren, die ein Array verändern und nach jedem Schritt yielden. Der Player ruft next() und update() auf; die Balken sind eine list() über dieselben Objekte, also bewegt ein Tausch zwei Elemente.

Apps
63

Kanban-Board

Ein Team-Board: Aufgaben anlegen, Personen zuweisen, in einem Dialog bearbeiten, nach Person filtern oder suchen, zwischen Spalten ziehen und ein Löschen rückgängig machen. Spalten und Karten sind einfache Arrays derselben Objekte; jede Bewegung ist ein splice(). Zeilen werden nach Identität zugeordnet, also verwendet Ziehen, Sortieren, Zuweisen oder Bearbeiten einer Karte ihr Element wieder. Der Mount-Zähler auf dem Bildschirm beweist es.

Apps
64

three.js-Inspektor

Eine Bibliothek, die ihren eigenen State besitzt. Das Panel liest Positionen, Farben und Flags direkt aus den three.js-Objekten und schreibt Änderungen zurück. Die Render-Schleife ruft update() einmal pro Frame auf; nichts wird gespiegelt.

Apps
65

Endloses Scrollen

Ein Feed ohne Ende: ein schnelles, simuliertes fetch() erzeugt jede Seite auf Abruf in ein einfaches Array. Nur die Zeilen nahe am Viewport sind im DOM: die list() rendert posts.slice(start, end) zwischen zwei Abstandhaltern, also bleibt die Seite bei hunderttausend Beiträgen leicht. Ein Sentinel am echten Ende fordert die nächste Seite an, bevor er sichtbar wird.

Apps
66

Desktop

Ein funktionierender Desktop mit Dateien, Notizen, Terminal, Rechner, Timer, einem Kanban-Board, Finanzen und einem Kalender. Erstelle und ordne Ordner, bearbeite Notizen und nutze Shell-Befehle auf einer gemeinsamen simulierten Festplatte, die in deinem Browser gespeichert wird. Tippe direkt über die Tastatur in den Rechner, klicke irgendwo ins Terminal, um seine Eingabezeile zu fokussieren, ziehe Karten zwischen den Spalten des Boards oder führe ein Hauptbuch in der Finanz-Tabelle und sieh zu, wie sich die Diagramme bewegen — das Hauptbuch liegt in IndexedDB. Fenster behalten ihren State, während du sie bewegst, in der Größe änderst und zwischen Apps wechselst; ein laufender Timer füllt den Taskleisten-Bereich mit into().

Apps
67

Knotengraph

Verbinde Zahlen, Text und Schalter durch Mathe-, Vergleichs- und If-Knoten, und jeder Wert aktualisiert sich, während du tippst. Funktionen sind ebenfalls Graphen: ihre Input- und Output-Knoten sind die Ports jedes Call, und ein Call kann seine eigene Funktion benennen, also rekursieren factorial und sum mit einem If als Ausweg. Die Engine ist einfaches JavaScript: jeder Knoten ist ein Generator, der yieldet, um eine Eingabe anzufordern, und eine Schleife treibt sie von ihrem eigenen Stack aus an, also verschachtelt sum(50000) fünfzigtausend Aufrufe tief in etwa einer Zehntelsekunde, ohne den JavaScript-Callstack zu berühren. Nur ein Schrittbudget stoppt eine Rekursion ohne Ausweg. Ziehen schreibt x und y und aktualisiert nur den Canvas-Scope; der Lauf-Zähler zeigt, dass der Graph bei einer Bewegung nie läuft.

Apps
68

Data Grid

Eine Arbeitstabelle über 10.000 einfache Zeilenobjekte. Suche, Filter, Sortierung und Blättern sind einfache Funktionen über das Array, und der Tabellenkörper ist eine list() über die aktuelle Seite. Zeilen werden nach Identität zugeordnet, also verschiebt das Sortieren die Zeilen, die auf der Seite bleiben, und eine bearbeitete Zeile ist überall dasselbe Objekt. Der Zähler der gebauten Zeilen beweist es.

Apps
69

Chat

Ein Chat mit drei Kanälen, jeder ein einfaches Objekt: sein Verlauf, Cursor, Tippstatus, Entwurf und Scrollposition, also behält ein Wechsel jeden Kanal genau so, wie er war, und update("chat-sidebar") aktualisiert nur die Ungelesen-Badges. Der Verlauf lädt mit unshift() endlos nach oben, mit einem scrollTop, das um die hinzugefügte Höhe wächst. Deine Nachricht erscheint, bevor der Server sie hat, send() patcht dasselbe Objekt, und Erneut senden, Bearbeiten, Löschen und Reaktionen bauen ihre Zeile nie neu. Nachrichten rendern Code, Fettdruck, Links und @Erwähnungen.

Apps
70

Live-Dashboard

Karten, die sich in verschiedenen Raten aktualisieren, von 20 Mal pro Sekunde bis einmal pro Sekunde. Jede Karte ist ein scope(), und ihr Timer ruft update() mit der id dieser Karte auf, also wertet ein Tick nur diese Karte aus. Jeder dynamische Wert wird auf dem Bildschirm gezählt: wechsle zu einem einfachen update() und die Uhr wird etwa hundert Mal pro Sekunde ausgewertet, um sich einmal zu ändern.

Apps
71

Pixel-Editor

Das Bild ist ein einfaches Array aus 1024 Farbstrings, und jede Zelle liest ihre Farbe daraus. Ein Strich schreibt ins Array und ruft update() auf; wenn er endet, behält der Editor eine Kopie mit slice(). Rückgängig, Wiederholen und jeder Schritt in der Verlaufs-list() setzen ein älteres Array zurück: kein Store, keine unveränderlichen Daten.

Apps
72

Snake

Eine Spielschleife ist ein Timer, der step() auf einfachen Objekten aufruft, dann einmal pro Tick update(). Die Schlange ist eine list() ihrer Zellobjekte, und bei jedem Tick wird das Schwanzobjekt zum neuen Kopf, also bewegt sich ein Element und keines wird gebaut: der Zähler der gebauten Segmente steigt nur, wenn die Schlange frisst. Futter ploppt mit einer keyframes()-Animation auf.

Apps
73

Step-Sequenzer

Eine Bibliothek, die ihre eigene Uhr besitzt. Web Audio plant jede Note auf ihrer eigenen Zeitachse voraus, und das Pattern ist ein einfaches 2D-Array aus Booleans, das das Raster umschaltet und der Scheduler liest, also ist ein Klick im nächsten Durchlauf zu hören. Der Abspielkopf aktualisiert nur seinen scope(), wenn sich der hörbare Schritt ändert. Audio startet beim ersten Play und schließt im Mount-Cleanup, also stoppt das Verlassen des Beispiels den Ton.

Apps
74

Sprachumschalter

Jedes Label ist ein statischer Wert, geschrieben wie in einer einsprachigen App, also liest update() es nie wieder: Klicks im Warenkorb aktualisieren nur Mengen und Summen. Der Sprachwechsel ruft forceUpdate() auf diesem Baum auf, was die Komponente erneut ausführt und dieselben Elemente patcht, lang und dir inklusive. Geld, Plurale, Daten und Listen kommen aus Intl, und der Warenkorb und ein getippter Gutschein überleben den Wechsel.

Apps
75

Theme-Editor

Eine kleine Komponentenbibliothek: createCss() benennt die Tokens und variants() baut daraus Buttons, Badges, Karten, Eingaben, Hinweise und Schalter. Die Tokens sind CSS-Variablen, also kompiliert jede Klasse einmal. Jedes Steuerelement schreibt ein einfaches Theme-Objekt und ruft update() auf, was den Text eines style-Elements neu schreibt.

Apps