Files
fusion/packages/dashboard/app/components/command-center/OrgPortabilityControls.css
gsxdsm 3568a86a66 FN-8284: add organization portability controls
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>
2026-07-18 12:06:00 -07:00

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;
}
}