Add Command Center tools for safe organization portability and configuration recovery. - Register project-scoped organization export/import and revision rollback routes. - Add localized, responsive Command Center controls for bundle preview, import, and rollback. - Invalidate stale dry-run responses and retain only the exact previewed bundle for import. - Cover portability routes and editing-during-preview behavior with tests. Files changed: docs/dashboard-guide.md | 2 + .../command-center/CommandCenterControls.tsx | 3 + .../command-center/OrgPortabilityControls.css | 81 +++++++++ .../command-center/OrgPortabilityControls.tsx | 184 +++++++++++++++++++++ .../__tests__/CommandCenter.mobile-scroll.test.tsx | 2 + .../__tests__/OrgPortabilityControls.test.tsx | 94 +++++++++++ packages/dashboard/src/routes.ts | 2 + .../register-org-portability-routes.test.ts | 109 ++++++++++++ .../src/routes/register-org-portability-routes.ts | 129 +++++++++++++++ packages/i18n/locales/en/app.json | 37 +++++ 10 files changed, 643 insertions(+) Fusion-Task-Id: FN-8284 Fusion-Task-Lineage: 1fa06550-8064-417f-a8d0-40f693206404 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
82 lines
1.6 KiB
CSS
82 lines
1.6 KiB
CSS
/*
|
|
FNXC:CommandCenterConfig 2026-07-18-12:00:
|
|
The portability and history cards remain in the existing control grid on desktop
|
|
and collapse to one column at the Command Center mobile breakpoint. Shared
|
|
buttons retain the established token-based touch target instead of adding a
|
|
parallel control variant.
|
|
*/
|
|
.cc-portability-card {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--space-sm);
|
|
}
|
|
|
|
.cc-portability-card--versions {
|
|
grid-column: 1 / -1;
|
|
}
|
|
|
|
.cc-portability-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: var(--space-sm);
|
|
}
|
|
|
|
.cc-portability-import-label {
|
|
color: var(--text);
|
|
font-size: 0.8125rem;
|
|
}
|
|
|
|
.cc-portability-import-input {
|
|
min-block-size: calc(var(--space-2xl) * 3);
|
|
resize: vertical;
|
|
}
|
|
|
|
.cc-portability-version-list {
|
|
display: grid;
|
|
gap: var(--space-sm);
|
|
margin: 0;
|
|
padding: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
.cc-portability-version {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--space-md);
|
|
padding-block: var(--space-sm);
|
|
border-block-end: 1px solid var(--border-subtle);
|
|
}
|
|
|
|
.cc-portability-version span {
|
|
display: grid;
|
|
gap: var(--space-xs);
|
|
min-inline-size: 0;
|
|
}
|
|
|
|
.cc-portability-version strong {
|
|
color: var(--text);
|
|
font-size: 0.8125rem;
|
|
}
|
|
|
|
.cc-portability-version small {
|
|
color: var(--text-muted);
|
|
font-size: 0.75rem;
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.cc-portability-actions {
|
|
flex-direction: column;
|
|
}
|
|
|
|
.cc-portability-actions .cc-controls-action {
|
|
inline-size: 100%;
|
|
justify-content: center;
|
|
}
|
|
|
|
.cc-portability-version {
|
|
align-items: stretch;
|
|
flex-direction: column;
|
|
}
|
|
}
|