feat(frontend): upgrade report dialog experience
Replace manual report links with automatic target association, improve validation and evidence uploads, and remove retired report UI code. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
59ddf677b6
commit
80aecab586
10 files changed
+1121
-462
No files matched your search
@@ -0,0 +1,328 @@
|
||||
/**
|
||||
* Report form inside the shared modal runtime.
|
||||
* @package AKSRT
|
||||
*/
|
||||
.aksrt-report-modal .aksrt-modal-runtime__dialog {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
max-height: min(90vh, 820px);
|
||||
max-height: min(90dvh, 820px);
|
||||
background: var(--modal-surface);
|
||||
color: var(--modal-ink);
|
||||
}
|
||||
|
||||
.aksrt-report-modal:not(.aksrt-modal-runtime--bottom) .aksrt-modal-runtime__dialog {
|
||||
width: min(600px, calc(100vw - 32px));
|
||||
border-radius: var(--main-radius, 8px);
|
||||
}
|
||||
|
||||
.aksrt-report-modal .aksrt-modal-runtime__header {
|
||||
position: relative;
|
||||
flex: none;
|
||||
padding: 24px 64px 18px 24px;
|
||||
border-bottom: 1px solid var(--modal-line-soft);
|
||||
}
|
||||
|
||||
.aksrt-report-modal .aksrt-modal-runtime__title {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.aksrt-report-modal .aksrt-modal-runtime__close {
|
||||
top: 14px;
|
||||
right: 14px;
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
font-size: 26px;
|
||||
color: var(--modal-muted);
|
||||
}
|
||||
|
||||
.aksrt-report-modal .aksrt-modal-runtime__content {
|
||||
display: flex;
|
||||
min-height: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.aksrt-report-form {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
font-size: 14px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.aksrt-report-body {
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
overscroll-behavior: contain;
|
||||
padding: 22px 24px 24px;
|
||||
}
|
||||
|
||||
.aksrt-report-target {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 12px;
|
||||
padding: 14px;
|
||||
margin-bottom: 24px;
|
||||
border-radius: 8px;
|
||||
background: var(--modal-surface-3);
|
||||
}
|
||||
|
||||
.aksrt-report-target > div { min-width: 0; }
|
||||
|
||||
.aksrt-report-target__icon {
|
||||
display: grid;
|
||||
flex: none;
|
||||
place-items: center;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border: 1px solid var(--modal-line);
|
||||
border-radius: 8px;
|
||||
background: var(--modal-surface);
|
||||
color: var(--modal-ink-2);
|
||||
}
|
||||
|
||||
.aksrt-report-target__name {
|
||||
display: block;
|
||||
margin: 2px 0 4px;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.aksrt-report-hint,
|
||||
.aksrt-report-count {
|
||||
color: var(--modal-muted);
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.aksrt-report-form p { margin: 6px 0 0; }
|
||||
.aksrt-report-target p { margin: 0; }
|
||||
.aksrt-report-count { font-variant-numeric: tabular-nums; }
|
||||
|
||||
.aksrt-report-reasons {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0 0 22px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.aksrt-report-reasons legend {
|
||||
width: auto;
|
||||
padding: 0;
|
||||
margin: 0 0 10px;
|
||||
border: 0;
|
||||
color: inherit;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.aksrt-report-label .aksrt-report-hint,
|
||||
.aksrt-report-reasons legend .aksrt-report-hint { margin-left: 8px; }
|
||||
|
||||
.aksrt-report-reasons__options {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.aksrt-report-reason {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 9px;
|
||||
min-height: 44px;
|
||||
padding: 10px 12px;
|
||||
margin: 0;
|
||||
border: 1px solid var(--modal-line);
|
||||
border-radius: 8px;
|
||||
background: var(--modal-surface);
|
||||
font-weight: 400;
|
||||
cursor: pointer;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.aksrt-report-reason input[type="radio"] {
|
||||
position: static;
|
||||
display: block;
|
||||
flex: none;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 0;
|
||||
opacity: 1;
|
||||
appearance: auto;
|
||||
accent-color: var(--modal-primary);
|
||||
}
|
||||
|
||||
.aksrt-report-reason:has(input:checked) {
|
||||
border-color: var(--modal-primary);
|
||||
background: color-mix(in srgb, var(--modal-primary) 6%, var(--modal-surface));
|
||||
}
|
||||
|
||||
.aksrt-report-reason input:checked + span { font-weight: 600; }
|
||||
.aksrt-report-other { margin-top: 12px; }
|
||||
.aksrt-report-field + .aksrt-report-field { margin-top: 22px; }
|
||||
|
||||
.aksrt-report-label-row {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.aksrt-report-label {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.aksrt-report-form textarea {
|
||||
display: block;
|
||||
width: 100%;
|
||||
min-height: 80px;
|
||||
max-height: 240px;
|
||||
padding: 11px 12px;
|
||||
border: 1px solid var(--modal-line);
|
||||
border-radius: 8px;
|
||||
background: var(--modal-surface);
|
||||
color: var(--modal-ink);
|
||||
font: inherit;
|
||||
line-height: 1.65;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
.aksrt-report-form textarea::placeholder { color: var(--modal-muted); }
|
||||
.aksrt-report-other textarea { margin-top: 8px; }
|
||||
.aksrt-report-form [aria-invalid="true"] { border-color: var(--modal-danger); }
|
||||
|
||||
.aksrt-report-images,
|
||||
.aksrt-report-images__list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.aksrt-report-images__list:empty { display: none; }
|
||||
|
||||
.aksrt-report-add,
|
||||
.aksrt-report-image {
|
||||
position: relative;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
flex: none;
|
||||
border: 1px solid var(--modal-line);
|
||||
border-radius: 8px;
|
||||
background: var(--modal-surface-3);
|
||||
}
|
||||
|
||||
.aksrt-report-add {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6px;
|
||||
border-style: dashed;
|
||||
color: var(--modal-ink-2);
|
||||
font: inherit;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.aksrt-report-add i { font-size: 18px; }
|
||||
.aksrt-report-image img { width: 100%; height: 100%; object-fit: cover; border-radius: inherit; }
|
||||
|
||||
.aksrt-report-image__state {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 2px;
|
||||
height: 100%;
|
||||
padding: 8px;
|
||||
color: var(--modal-muted);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.aksrt-report-image[data-upload-state="ready"] .aksrt-report-image__state { display: none; }
|
||||
.aksrt-report-image[data-upload-state="error"] { border-color: var(--modal-danger); }
|
||||
.aksrt-report-image [data-aksrt-report-retry] { min-width: 44px; min-height: 28px; border: 0; background: transparent; color: var(--modal-primary); text-decoration: underline; cursor: pointer; }
|
||||
|
||||
.aksrt-report-image__remove {
|
||||
position: absolute;
|
||||
top: -8px;
|
||||
right: -8px;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
padding: 0;
|
||||
border: 1px solid var(--modal-line);
|
||||
border-radius: 50%;
|
||||
background: var(--modal-surface);
|
||||
color: var(--modal-ink-2);
|
||||
font-size: 22px;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.aksrt-report-notice {
|
||||
margin-top: 22px;
|
||||
padding-top: 16px;
|
||||
border-top: 1px solid var(--modal-line-soft);
|
||||
color: var(--modal-ink-2);
|
||||
font-size: 12px;
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.aksrt-report-notice > :first-child { margin-top: 0; }
|
||||
.aksrt-report-notice > :last-child { margin-bottom: 0; }
|
||||
|
||||
.aksrt-report-footer {
|
||||
flex: none;
|
||||
padding: 0 24px max(20px, env(safe-area-inset-bottom));
|
||||
border-top: 1px solid var(--modal-line-soft);
|
||||
background: var(--modal-surface);
|
||||
}
|
||||
|
||||
.aksrt-report-form .aksrt-report-error { margin: 12px 0 0; color: var(--modal-danger); font-size: 13px; }
|
||||
.aksrt-report-form .aksrt-report-status { color: var(--modal-muted); font-size: 12px; }
|
||||
.aksrt-report-form .aksrt-report-status:empty { display: none; }
|
||||
|
||||
.aksrt-report-actions { display: flex; justify-content: flex-end; gap: 10px; padding-top: 16px; }
|
||||
|
||||
.aksrt-report-actions button {
|
||||
min-width: 96px;
|
||||
min-height: 44px;
|
||||
padding: 10px 20px;
|
||||
border: 1px solid var(--modal-line);
|
||||
border-radius: 8px;
|
||||
font: inherit;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.aksrt-report-cancel { color: var(--modal-ink-2); background: var(--modal-surface); }
|
||||
.aksrt-report-actions .aksrt-report-submit { color: var(--modal-on-primary); background: var(--modal-primary); border-color: transparent; }
|
||||
.aksrt-report-form button:disabled { opacity: 0.55; cursor: not-allowed; }
|
||||
.aksrt-report-form textarea:disabled { opacity: 0.65; }
|
||||
.aksrt-report-modal :is(button, input, textarea, a):focus-visible { outline: 2px solid var(--modal-primary); outline-offset: 3px; }
|
||||
.aksrt-report-modal [hidden] { display: none !important; }
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.aksrt-report-modal .aksrt-modal-runtime__header { padding: 20px 64px 16px 20px; }
|
||||
.aksrt-report-body { padding: 18px 20px 22px; }
|
||||
.aksrt-report-footer { padding-right: 20px; padding-left: 20px; }
|
||||
.aksrt-report-actions button { flex: 1; min-width: 0; }
|
||||
}
|
||||
|
||||
@media (max-width: 360px) {
|
||||
.aksrt-report-reasons__options { grid-template-columns: 1fr; }
|
||||
}
|
||||
Reference in new issue
Block a user