Files
fusion/packages/dashboard/app/components/StorageMigrationNoticeBanner.css
gsxdsm 9bb74595c2 FN-7852: add one-time SQLite→embedded Postgres storage notice banner
Adds a dismissible, one-time dashboard banner announcing the upcoming SQLite→embedded-Postgres storage backend change.

- New self-contained StorageMigrationNoticeBanner component with title/body copy and a dismiss control that persists via localStorage key fusion:storage-migration-notice-dismissed
- Wire the banner into DashboardBanners alongside the CLI binary install banner for project-scoped views
- Add en locale strings (storageMigrationNotice.title/body/dismissLabel) in app.json
- Add component test coverage for render/dismiss/persistence behavior
- Document the notice in docs/dashboard-guide.md
- Add a minor changeset for @runfusion/fusion

Files changed:
 .changeset/fn-7852-storage-migration-notice.md     |  7 ++
 docs/dashboard-guide.md                            |  2 +
 .../components/StorageMigrationNoticeBanner.css    | 73 +++++++++++++++++++
 .../components/StorageMigrationNoticeBanner.tsx    | 65 +++++++++++++++++
 .../StorageMigrationNoticeBanner.test.tsx          | 82 ++++++++++++++++++++++
 .../app/components/dashboard/DashboardBanners.tsx  | 11 ++-
 packages/i18n/locales/en/app.json                  |  5 ++
 7 files changed, 242 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-7852

Fusion-Task-Lineage: e3235cce-9ca3-4830-8733-a2ec46c53246

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-12 11:19:52 -07:00

74 lines
1.8 KiB
CSS

/* === StorageMigrationNoticeBanner === */
.storage-migration-notice-banner {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: var(--space-sm);
margin: var(--space-sm) var(--space-md) 0;
padding: var(--space-sm) var(--space-md);
background: linear-gradient(
90deg,
color-mix(in srgb, var(--todo) 12%, transparent),
color-mix(in srgb, var(--todo) 4%, transparent)
);
border: var(--btn-border-width) solid color-mix(in srgb, var(--todo) 35%, transparent);
border-radius: var(--radius-md);
color: var(--text);
}
.storage-migration-notice-banner__body {
flex: 1;
display: flex;
flex-direction: column;
gap: var(--space-xs);
min-width: 0;
}
.storage-migration-notice-banner__title {
font-weight: 600;
font-size: var(--font-size-base);
color: var(--text);
}
.storage-migration-notice-banner__text {
margin: 0;
font-size: var(--font-size-base);
line-height: 1.5;
color: var(--text-muted);
}
.storage-migration-notice-banner__dismiss {
display: inline-flex;
align-items: center;
justify-content: center;
padding: var(--space-xs);
background: transparent;
color: var(--text-muted);
border: none;
border-radius: var(--radius-sm);
cursor: pointer;
flex-shrink: 0;
line-height: 0;
transition: color var(--transition-fast), background var(--transition-fast);
}
.storage-migration-notice-banner__dismiss:hover {
background: color-mix(in srgb, var(--text) 6%, transparent);
color: var(--text);
}
.storage-migration-notice-banner__dismiss:focus-visible {
outline: none;
box-shadow: var(--focus-ring-strong);
}
@media (max-width: 768px) {
.storage-migration-notice-banner {
align-items: stretch;
}
.storage-migration-notice-banner__dismiss {
align-self: flex-start;
}
}