+ @if (store.appliedEdits().length) {
+
+ @for (entry of store.appliedEdits(); track entry.id) {
+ -
+ {{ entry.label }}
+
+
+ close
+
+
+
+ }
+
+
+
+
+ delete
+
+
+ } @else {
+
+ {{ 'edit.content.image-editor.history.empty' | dm }}
+
+ }
+
diff --git a/core-web/libs/image-editor/src/lib/components/dot-image-editor-panels/dot-image-editor-history-panel/dot-image-editor-history-panel.component.scss b/core-web/libs/image-editor/src/lib/components/dot-image-editor-panels/dot-image-editor-history-panel/dot-image-editor-history-panel.component.scss
new file mode 100644
index 000000000000..890a8a4422c0
--- /dev/null
+++ b/core-web/libs/image-editor/src/lib/components/dot-image-editor-panels/dot-image-editor-history-panel/dot-image-editor-history-panel.component.scss
@@ -0,0 +1,34 @@
+.ie-history {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+}
+
+// The remove/reset glyphs are projected into PrimeNG buttons; pierce with
+// ::ng-deep to scale the Material Symbol down to the previous icon footprint.
+:host ::ng-deep .material-symbols-outlined {
+ font-size: 1.125rem;
+}
+
+.ie-history__list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.ie-history__entry {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.5rem;
+}
+
+.ie-history__label {
+ overflow: hidden;
+ font-size: 0.8125rem;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/core-web/libs/image-editor/src/lib/components/dot-image-editor-panels/dot-image-editor-history-panel/dot-image-editor-history-panel.component.spec.ts b/core-web/libs/image-editor/src/lib/components/dot-image-editor-panels/dot-image-editor-history-panel/dot-image-editor-history-panel.component.spec.ts
new file mode 100644
index 000000000000..9c73dbf7e4cd
--- /dev/null
+++ b/core-web/libs/image-editor/src/lib/components/dot-image-editor-panels/dot-image-editor-history-panel/dot-image-editor-history-panel.component.spec.ts
@@ -0,0 +1,92 @@
+import { byTestId, createComponentFactory, mockProvider, Spectator } from '@ngneat/spectator/jest';
+import { Dispatcher } from '@ngrx/signals/events';
+
+import { signal } from '@angular/core';
+import { provideNoopAnimations } from '@angular/platform-browser/animations';
+
+import { DotMessageService } from '@dotcms/data-access';
+
+import { DotImageEditorHistoryPanelComponent } from './dot-image-editor-history-panel.component';
+
+import { AppliedEditEntry } from '../../../models/image-editor.models';
+import { imageEditorHistoryEvents } from '../../../store/image-editor.events';
+import { ImageEditorStore } from '../../../store/image-editor.store';
+
+const ENTRY: AppliedEditEntry = { id: 'a1', category: 'adjust', label: 'Brightness 30' };
+
+describe('DotImageEditorHistoryPanelComponent', () => {
+ let spectator: Spectator