feat(frontend): manage Cognito users and groups, and test sign-in
CI / checks (pull_request) Failing after 12m24s

The Cognito panel gains a test sign-in that shows the decoded ID and
access token claims, a groups section, and a per-user panel to enable or
disable, confirm, sign out everywhere, reset or set a password and change
group membership.

Delete confirmations (row and bulk) now say what else goes, driven by
the schema's deleteImpact, and the inspector follows list refreshes
instead of the click-time snapshot.
This commit is contained in:
Zakaria
2026-10-23 17:54:15 -04:00
parent 43f4cae9b5
commit bafe799d00
15 changed files with 773 additions and 16 deletions
+104
View File
@@ -4307,6 +4307,110 @@ pre,
border-bottom: 1px solid var(--border);
}
.cognito-row-actions {
display: flex;
gap: 8px;
justify-content: flex-end;
align-items: center;
}
.cognito-outcome {
margin: 0 16px 16px;
padding: 10px 14px;
border: 1px solid var(--border);
border-left: 3px solid var(--accent);
border-radius: 6px;
background: var(--accent-tint-faint);
overflow-wrap: anywhere;
}
.cognito-outcome p { margin: 0 0 12px; }
.cognito-outcome--ok { border-left-color: var(--status-ok); }
.cognito-outcome--challenge { border-left-color: var(--status-warn); }
.cognito-outcome--rejected { border-left-color: var(--status-error); }
.cognito-claims {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 16px;
}
.cognito-claims .table th,
.cognito-attributes .table th {
width: 1%;
white-space: nowrap;
text-align: left;
}
.cognito-user {
font-size: 13px;
margin: 0 16px 16px;
border: 1px solid var(--accent-tint-border);
border-radius: 8px;
background: var(--elevated);
}
.cognito-user-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 20px;
padding: 0 16px 16px;
}
.cognito-attributes { grid-column: 1 / -1; overflow-x: auto; }
.cognito-facts {
display: grid;
grid-template-columns: auto 1fr;
gap: 6px 12px;
margin: 0;
}
.cognito-facts dt { color: var(--text-muted); }
.cognito-facts dd { margin: 0; overflow-wrap: anywhere; }
.cognito-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 14px;
}
.cognito-set-password {
display: grid;
gap: 8px;
justify-items: start;
}
.cognito-set-password .dynamic-field { width: 100%; }
.cognito-check {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 8px;
}
.delete-impact {
color: var(--status-warn);
font-size: 13px;
align-self: center;
}
.table-confirm-actions:has(.delete-impact) {
flex-wrap: wrap;
justify-content: flex-end;
}
.table-confirm-actions .delete-impact {
flex-basis: 100%;
max-width: 220px;
margin-left: auto;
white-space: normal;
text-align: right;
font-size: 12px;
}
.diagnostics {
display: grid;
gap: 14px;