Skip to content

FindingRow and ScoreBadge

Audit results: a score out of 100 with its grade, and findings with severity, rule and place that can be picked to send on together. Pick it for security, accessibility or SEO reports.

  • FindingRow
  • ScoreBadge

PreviewLink to the section Preview

Live in all three themes. Everything here is interactive.

Light theme, FindingRow and ScoreBadge

http://localhost:51735 findings · 3.4 s
CriticalAPI key in source codesecret/generic-api-keysrc/lib/payments.ts:14
HighForm field has no labellabel#signup > form > input:nth-child(2)
MediumText contrast is 3.9:1, below 4.5:1color-contrast.pricing-card > p.muted
LowPage has no meta descriptionmeta-descriptionhttps://shop.example.com/products/a-very-long-product-slug-for-the-autumn-collection
InfoImages could be served as AVIFmodern-image-formatspublic/hero.png

Form field has no label

#signup > form > input:nth-child(2)

Press Enter on a finding to show it here. Select several and send them to an agent in one go.

Dark theme, FindingRow and ScoreBadge

http://localhost:51735 findings · 3.4 s
CriticalAPI key in source codesecret/generic-api-keysrc/lib/payments.ts:14
HighForm field has no labellabel#signup > form > input:nth-child(2)
MediumText contrast is 3.9:1, below 4.5:1color-contrast.pricing-card > p.muted
LowPage has no meta descriptionmeta-descriptionhttps://shop.example.com/products/a-very-long-product-slug-for-the-autumn-collection
InfoImages could be served as AVIFmodern-image-formatspublic/hero.png

Form field has no label

#signup > form > input:nth-child(2)

Press Enter on a finding to show it here. Select several and send them to an agent in one go.

High contrast theme, FindingRow and ScoreBadge

http://localhost:51735 findings · 3.4 s
CriticalAPI key in source codesecret/generic-api-keysrc/lib/payments.ts:14
HighForm field has no labellabel#signup > form > input:nth-child(2)
MediumText contrast is 3.9:1, below 4.5:1color-contrast.pricing-card > p.muted
LowPage has no meta descriptionmeta-descriptionhttps://shop.example.com/products/a-very-long-product-slug-for-the-autumn-collection
InfoImages could be served as AVIFmodern-image-formatspublic/hero.png

Form field has no label

#signup > form > input:nth-child(2)

Press Enter on a finding to show it here. Select several and send them to an agent in one go.

UsageLink to the section Usage

tsx
import { FindingRow, ScoreBadge } from '@skribly/ui/ops'
tsx
<ScoreBadge value={report.score} label={t('audit.score')} gradeLabels={{ good: t('grade.good'), fair: t('grade.fair'), poor: t('grade.poor') }} />
<List aria-label={t('audit.findings')} items={findings} selectionMode="multiple"
  selectedKeys={picked} onSelectionChange={setPicked} onAction={showDetails}>
  {(f) => <FindingRow id={f.id} severity={f.severity} severityLabel={t(`severity.${f.severity}`)}
    title={f.title} rule={f.rule} location={f.file ?? f.target} selectLabel={t('common.select')} />}
</List>

Every label is a prop, so the app passes its own words in its own language. See no built-in text.

AccessibilityLink to the section Accessibility

  • The score is a meter named by its label and reads the number with the grade word; the grade also shows as an icon and a word, so the ring colour is never the only clue, and it fills without motion under reduced motion.
  • Severity is a word with a glyph that climbs with the level.
  • Each finding has a checkbox named "Select" plus its title; Space selects, Enter shows the details.
  • On a narrow row the place moves under the title and long selectors wrap.

This demo runs through axe in all three themes on every test run. See what the tests check.

Search this site

Arrows move through the results, Enter opens one, Esc closes. Ctrl K /