Angular Undo-Redo-History-Store | ng-hub-ui-history

Angular Undo- und Redo-History-Store mit Signals-freundlichen APIs, Transaktionen, Limits und Unterstützung für Reactive Forms.

Zuletzt aktualisiert 06.09.2026

Übersicht

Warum Teams nach dieser Bibliothek suchen

Nutze diesen Angular History-Store, wenn du Undo und Redo für komplexen State brauchst, ohne eine vollständige externe State-Bibliothek einzuführen.

Installieren

npm install ng-hub-ui-history

Springen zu

Ideal für

  • Editoren
  • Formular-Builder
  • Low-Code-Tools
  • Konfigurationsoberflächen

Über history

ng-hub-ui-history ist besonders nützlich in Angular-Editoren, Formular-Buildern und Konfigurationsbildschirmen, in denen der Benutzer erwartet, sicher zurückgehen zu können. Es bringt Undo- und Redo-Muster in zustandsbehaftete Workflows, ohne dich zu einer schwergewichtigen Architekturentscheidung zu zwingen.

Funktionsleitfäden

Manuelle Commits und Zeitreise

Verfolgen Sie Zustandsänderungen und reisen Sie vorwärts/rückwärts durch die lineare History.

Beispiele:
Grundlegender Verlauf

Manueller Commit, Undo und Redo für ein einzelnes verfolgtes Objekt.

{
  "title": "Getting Started with History",
  "description": "Edit and commit to create undo/redo entries."
}

Verschachtelte Objekte und Arrays

Verwenden Sie patch-basiertes Tracking für tiefe Objektgraphen und Listenmutationen.

Beispiele:
Verlauf verschachtelter Objekte

Verschachtelte Eigenschaften und Listenänderungen, als Patches aufgezeichnet.

{
  "id": "invoice-1",
  "customer": {
    "name": "Acme Corp",
    "city": "Madrid"
  },
  "lines": [
    {
      "name": "Support plan",
      "quantity": 1,
      "unitPrice": 150
    }
  ]
}

Automatisches Formular-Tracking

Committen Sie Formularwertänderungen automatisch mit integrierten Watch-Helpern.

Beispiele:
Reaktive Formularüberwachung

watchForm() committet jede Wertänderung der FormGroup von selbst.

{
  "name": "Maria",
  "email": "maria@demo.local",
  "role": "Editor"
}

Transaktionen und Aufbewahrung

Gruppieren Sie mehrere Operationen in einem Eintrag und kürzen Sie alte Einträge gemäß den konfigurierten Limits.

Beispiele:
Transaktionen + Limits

Durch eine Transaktion zusammengefasste Commits, unter Eintrags- und Byte-Limits.

Pointer: -1 / Entries: 0 / Bytes: 0

{
  "id": "transaction-editor",
  "title": "Release notes draft",
  "content": "Initial draft content.",
  "tags": [
    "draft"
  ]
}

Hauptfunktionen

Letzte Änderungen

Version 22.0.4 - 9/6/26, 12:00 AM

fixed: The published manifest no longer declares a main entry. It pointed at src/public-api.ts, the ng-packagr entry file, which never travels inside the tarball, so any resolver that ignores the exports map (older bundlers, legacy Jest resolution, plain require) followed it straight to a file that is not there. Dropping the field leaves exports, module and typings as the only entry points, the shape ng-packagr emits for every other library in the monorepo.

fixed: A commit that only moves a Date (or a Set, Map or RegExp) is recorded again. The default diff walked every object key by key, and those types keep their payload outside their own enumerable keys, so the comparison found nothing and produced an empty patch. An empty patch reads as no change: commit() returned false, the tracked state kept the old value that getState() and states() then handed back, and on a mixed commit undo() restored the other fields while leaving the new date in place, all without an error. Those values are now compared and replaced as a whole, which is what structuredClone already round-trips; an instance rebuilt with the same content still records no entry.

Version 22.0.3 - 9/1/26, 12:00 AM

changed: The homepage in the manifest points at this library's own documentation page rather than at the site root. It is the link a registry shows beside the package and the one a reader clicks from it, and landing on a front page they then have to search is a worse answer than landing on the reference for the package they were already looking at. Metadata only — no code, no types, no styles change, and nothing a consumer imports is affected.

Version 22.0.2 - 8/8/26, 12:00 AM

fixed: Documentation links now point at the canonical localized URLs. The README linked to https://hubui.dev/<path> with no locale prefix and no trailing slash, and both forms are 301-redirected, so every reader arriving from npm or GitHub landed on a redirect instead of the canonical page.

Version 22.0.1 - 7/28/26, 12:00 AM

added: Test suite for the diff/patch/clone utilities and multi-object undo/redo: cloneDeep isolation (nested structures, Dates), createDefaultDiff/applyDefaultPatch round-trips across representative shapes (nested objects, array insert/remove/reorder, key deletion, null transitions, deep nesting), estimateBytes sanity, and store-level coverage for independent per-object timelines, no-op transactions and redo invalidation after transactional commits. No runtime changes.

Version 22.0.0 - 6/17/26, 12:00 AM

changed: Aligned with Angular 22.

changed: README documentation standardized.

Version 0.1.0 - 6/17/26, 12:00 AM

added: Initial release with multi-object linear history.

added: Undo/redo, transactions, and maxEntries/maxBytes retention limits.

added: Reactive Forms auto-commit integration via watchForm().