Store Undo Redo для Angular | ng-hub-ui-history
Store отмены и повтора для Angular с API, дружественными к Signals, транзакциями, лимитами и поддержкой реактивных форм.
Последнее обновление 20 сент. 2026 г.
Обзор
Почему команды ищут эту библиотеку
Используйте этот history store для Angular, когда нужны отмена и повтор для сложного состояния без подключения полноценной внешней библиотеки управления состоянием.
Установка
npm install ng-hub-ui-historyПерейти к
Идеально для
- редакторы
- конструкторы форм
- low-code-инструменты
- интерфейсы конфигурации
О библиотеке history
ng-hub-ui-history особенно полезен в редакторах Angular, конструкторах форм и экранах конфигурации, где пользователь ожидает возможности безопасно вернуться назад. Он привносит паттерны отмены и повтора в потоки с состоянием, не заставляя принимать тяжеловесное архитектурное решение.
Руководства по возможностям
Ручные коммиты и путешествие во времени
Отслеживайте изменения состояния и перемещайтесь назад/вперёд по линейной истории.
Примеры:
Базовая история
Ручной коммит, отмена и повтор для одного отслеживаемого объекта.
{
"title": "Getting Started with History",
"description": "Edit and commit to create undo/redo entries."
}Вложенные объекты и массивы
Используйте отслеживание на основе патчей для глубоких графов объектов и мутаций списков.
Примеры:
История вложенных объектов
Вложенные свойства и изменения списков, записанные как патчи.
{
"id": "invoice-1",
"customer": {
"name": "Acme Corp",
"city": "Madrid"
},
"lines": [
{
"name": "Support plan",
"quantity": 1,
"unitPrice": 150
}
]
}Автоматическое отслеживание форм
Автоматически коммитьте изменения значений формы с помощью встроенных watch-помощников.
Примеры:
Отслеживание реактивной формы
watchForm() самостоятельно коммитит каждое изменение значения FormGroup.
{
"name": "Maria",
"email": "maria@demo.local",
"role": "Editor"
}Транзакции и хранение
Группируйте несколько операций в одну запись и обрезайте старые записи по настроенным лимитам.
Примеры:
Транзакции и ограничения
Коммиты, объединённые транзакцией, с лимитами записей и байтов.
Pointer: -1 / Entries: 0 / Bytes: 0
{
"id": "transaction-editor",
"title": "Release notes draft",
"content": "Initial draft content.",
"tags": [
"draft"
]
}Ключевые возможности
Последние изменения
Version 22.0.6 - 9/20/26, 12:00 AM
changed: The npm keywords name the problem the package solves — undo-redo, time-travel, state-management, store, transactions, diff, patch, reactive-forms — which is what somebody looking for it would type. Metadata only: no code, types or styles change.
Version 22.0.5 - 9/16/26, 12:00 AM
changed: Repository, issue and README links follow the move to the hub-env organization. Issues for every Hub UI package are now gathered in hub-env/hub-ui, and the repository and bugs fields of the manifest point at the new addresses. No code, types or styles change.
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().