feat(project-editor): pre-publish change + validation preview

Milestone 5 of the Configuration Engine sprint.

- Facade: changeSummary computed - per modified field, before/after values
  (schema label + stringified diff vs originalBootstrap), reusing
  modifiedFields from M4.
- preview-section: new "changes since last publish" card ahead of the
  existing export/import/live-preview card - validation issue list
  (warning/error styled) plus a before/after change table. Reuses the
  existing, non-destructive ProjectEditorPreviewService.preview() call.
- i18n: previewChangesTitle/NoIssues/NoChanges/ChangeField/Before/After in
  interface + en/ru/hy.

Gate: tsc --noEmit, npm test (33/33), arch:check, build all green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-17 09:00:47 +04:00
parent 1db0d4dfea
commit 96b12a1fbe
8 changed files with 153 additions and 0 deletions

View File

@@ -170,6 +170,57 @@ button.secondary {
color: #991b1b;
}
.preview-validation {
margin: 0 0 12px;
padding-left: 1.25rem;
color: var(--warning-color, #b45309);
&.has-errors {
color: var(--error-color, #991b1b);
}
li.is-warning {
color: var(--warning-color, #b45309);
}
li.is-error {
color: var(--error-color, #991b1b);
}
}
.preview-validation-ok {
margin: 0 0 12px;
color: var(--text-secondary, #5f6e6a);
}
.preview-changes {
width: 100%;
border-collapse: collapse;
font-size: 0.9rem;
th,
td {
text-align: left;
padding: 8px 10px;
border-bottom: 1px solid var(--border-color, #d3dad9);
}
th {
color: var(--text-secondary, #5f6e6a);
font-weight: 600;
}
.preview-before {
color: var(--text-secondary, #5f6e6a);
text-decoration: line-through;
}
.preview-after {
color: var(--text-primary, #1e3c38);
font-weight: 600;
}
}
@media (max-width: 900px) {
.editor-grid.two,
.editor-grid.three,