Files
fusion/packages/dashboard/app/components/SetupWarningBanner.css
gsxdsm 50786f29d4 FN-7475: delay GitHub setup warnings
Delay dashboard GitHub setup warnings until the project grace period expires while keeping AI setup warnings immediate.

- Add per-project GitHub warning delay state and persistence.
- Route dashboard GitHub warnings to Settings → Authentication with a Connect GitHub action.
- Hide non-actionable GitHub-only warnings in the New Task modal and update localized copy, docs, and tests.

Files changed:
 .changeset/fn-7475-github-setup-warning.md         |   7 ++
 docs/dashboard-guide.md                            |   6 +
 packages/dashboard/app/App.tsx                     |  11 +-
 packages/dashboard/app/components/NewTaskModal.tsx |   8 +-
 .../app/components/SetupWarningBanner.css          |  10 ++
 .../app/components/SetupWarningBanner.tsx          |  18 ++-
 .../app/components/__tests__/NewTaskModal.test.tsx |  46 ++++++-
 .../__tests__/SetupWarningBanner.test.tsx          |  40 ++++++
 .../app/components/dashboard/DashboardBanners.tsx  |   3 +
 .../dashboard/__tests__/DashboardBanners.test.tsx  | 125 ++++++++++++++++++-
 .../dashboard/app/components/dashboard/types.ts    |   1 +
 .../__tests__/useGithubSetupWarningDelay.test.ts   | 134 +++++++++++++++++++++
 .../app/hooks/useGithubSetupWarningDelay.ts        |  96 +++++++++++++++
 packages/dashboard/app/utils/projectStorage.ts     |   1 +
 packages/i18n/locales/en/app.json                  |   5 +-
 packages/i18n/locales/es/app.json                  |   5 +-
 packages/i18n/locales/fr/app.json                  |   5 +-
 packages/i18n/locales/ko/app.json                  |   5 +-
 packages/i18n/locales/zh-CN/app.json               |   5 +-
 packages/i18n/locales/zh-TW/app.json               |   5 +-
 packages/i18n/src/resources.d.ts                   | 127 +++++++++++++------
 21 files changed, 606 insertions(+), 57 deletions(-)

Fusion-Task-Id: FN-7475
Fusion-Task-Lineage: 5bf1fffa-b58c-42a1-b170-367a4c20eaaf
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-07-03 21:45:21 -07:00

101 lines
2.3 KiB
CSS

/* === SetupWarningBanner === */
.setup-warning-banner {
display: flex;
flex-direction: column;
gap: var(--space-sm);
padding: var(--space-sm) var(--space-md);
margin-bottom: var(--space-md);
border-radius: var(--radius-md);
border-inline-start: var(--space-xs) solid var(--color-warning);
background: color-mix(in srgb, var(--color-warning) 8%, transparent);
}
.setup-warning-banner__item {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.setup-warning-banner__title {
color: var(--text);
}
.setup-warning-banner__description {
margin: 0;
color: var(--text-muted);
}
.setup-warning-banner__actions {
display: flex;
flex-wrap: wrap;
gap: var(--space-sm);
}
.setup-warning-banner--compact {
flex-direction: row;
align-items: flex-start;
justify-content: space-between;
gap: var(--space-sm);
}
.setup-warning-banner--dismissible:not(.setup-warning-banner--compact) {
position: relative;
padding-inline-end: calc(var(--space-2xl) + var(--space-lg) + var(--space-xs));
}
.setup-warning-banner--dismissible:not(.setup-warning-banner--compact) .setup-warning-banner__dismiss {
position: absolute;
top: var(--space-sm);
inset-inline-end: var(--space-sm);
}
.setup-warning-banner__compact-text {
margin: 0;
color: var(--text);
flex: 1;
}
.setup-warning-banner__dismiss {
align-self: flex-start;
background: none;
border: none;
color: var(--text-muted);
cursor: pointer;
padding: var(--space-xs);
border-radius: var(--radius-sm);
transition: color var(--transition-fast), background var(--transition-fast);
line-height: 0;
flex-shrink: 0;
}
.setup-warning-banner__dismiss:hover {
color: var(--text);
background: color-mix(in srgb, var(--color-warning) 12%, transparent);
}
.setup-warning-banner__dismiss:focus-visible {
outline: none;
box-shadow: var(--focus-ring-strong);
}
@media (max-width: 768px) {
.setup-warning-banner--compact {
padding: var(--space-xs) var(--space-sm);
}
.setup-warning-banner__actions .btn {
width: 100%;
}
}
@media (max-width: 480px) {
.setup-warning-banner--dismissible:not(.setup-warning-banner--compact) {
padding-inline-end: var(--space-md);
}
.setup-warning-banner--dismissible:not(.setup-warning-banner--compact) .setup-warning-banner__dismiss {
position: static;
align-self: flex-end;
}
}