Files
lingniu-vehicle-ingest/design-qa.md
2026-07-27 16:46:15 +08:00

553 lines
28 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Semi UI shell vNext — Design QA
- Source visual truth: `/Users/lingniu/.codex/attachments/e33960ff-ed87-40f8-9da6-8e6615a653c5/image-1.png`
- Desktop implementation: `/tmp/lingniu-ui-audit-20260720/14-after-desktop-pass2.png`
- Mobile implementation: `/tmp/lingniu-ui-audit-20260720/05-after-mobile-pass2.png`
- Mobile secondary navigation: `/tmp/lingniu-ui-audit-20260720/06-mobile-more.png`
- Mobile cross-page state: `/tmp/lingniu-ui-audit-20260720/07-mobile-statistics.png`
- 2K implementation: `/tmp/lingniu-ui-audit-20260720/15-after-2k.png`
- Full-view comparison: `/tmp/lingniu-ui-audit-20260720/16-reference-comparison-final.png`
- Focused navigation comparison: `/tmp/lingniu-ui-audit-20260720/17-sidebar-comparison.png`
- Viewports: 1440 × 900, 2560 × 1440, 390 × 844
- State: authenticated mock administrator; Monitor list mode with four vehicles
## Comparison scope
The supplied Semi image is a different product and data state, so it is not a
pixel-for-pixel content specification. The comparison treats its application
shell, navigation rhythm, whitespace, typography, surface treatment and
interaction hierarchy as the visual truth. The vehicle table keeps the width
required by the operational task instead of copying the reference's team rail.
## Findings and iteration history
### Pass 1
- **[P1] Layered navigation chrome made the shell feel heavy.**
- Evidence: the baseline used a soft square behind every icon, gradient
selection fills and several shadow layers; the reference uses quiet icons,
one selected row and neutral white space.
- Fix: removed icon plates and gradients, simplified hover/selected states,
aligned group labels and introduced one restrained active indicator.
- Post-fix evidence: focused navigation comparison.
- **[P1] Mobile hierarchy was too compressed.**
- Evidence: `/tmp/lingniu-ui-audit-20260720/02-before-mobile.png` used an
unbranded title bar, 9px navigation labels and truncated vehicle facts.
- Fix: added the supplied brand mark, rebuilt the bottom navigation rhythm,
increased the essential text scale and redistributed the four vehicle
metrics evenly without reducing the visible vehicle count.
- Post-fix evidence: mobile implementation and mobile cross-page state.
- **[P2] Page transitions rebuilt the content container.**
- Evidence: the shell keyed the entire content container by pathname.
- Fix: kept the content container stable and animated only the newly mounted
route surface; reduced-motion users receive no transition.
- Post-fix evidence: Monitor → Mileage route change retained the shell and
updated the title, active navigation and page content.
### Pass 2
- **[P2] Collapsed sidebar hid its reopen affordance.**
- Evidence: `/tmp/lingniu-ui-audit-20260720/08-desktop-collapsed.png` showed
an empty collapse footer because a legacy selector hid every nested span,
including Semi's icon wrapper.
- Fix: restored only the icon wrapper, rotated the chevron and preserved the
text-hidden compact state.
- Post-fix evidence:
`/tmp/lingniu-ui-audit-20260720/11-desktop-collapsed-final.png`; browser
state changed from `收起侧栏` to `展开侧栏` and back.
- **[P2] Desktop data type remained optically smaller than the reference.**
- Evidence: first full-view comparison showed the header, filter controls,
table headings and primary row values losing hierarchy at 1440px.
- Fix: increased the desktop shell header to 76px, raised navigation and
table type sizes, and increased control and row heights while retaining
the operational density.
- Post-fix evidence: final full-view comparison and 2K implementation.
## Required fidelity surfaces
- **Fonts and typography:** system/PingFang stack is appropriate for Chinese;
page titles, navigation, controls and primary values now form a clear scale.
Tabular figures are enabled for telemetry. No actionable P0P2 issue remains.
- **Spacing and layout rhythm:** the shell uses a 220px desktop rail, 76px
desktop header, 56px mobile header and 64px safe-area-aware mobile
navigation. Cards use quieter 910px radii and one-pixel boundaries.
- **Colors and tokens:** white surfaces, `#f5f6f7` canvas, `#e6e8eb` borders
and Semi blue `#0064fa` now match the reference's foreground/background
balance. Operational green/red tones remain semantic.
- **Image quality and assets:** supplied brand SVG assets are used directly.
No placeholder illustration, custom SVG or CSS-drawn brand asset was added.
- **Icons:** all shell actions use the existing Semi icon family. Selected,
hover, pressed and collapsed states remain optically aligned.
- **Copy and content:** each page title now has a short task description on
desktop. Mobile keeps only the title to protect first-screen task density.
- **Responsiveness:** 390px mobile, 1440px desktop and 2560px 2K states were
rendered without overlap, hidden persistent controls or shell overflow.
- **Accessibility:** semantic navigation names and page headings remain intact;
mobile targets are at least 42px in the shell, focus styles are preserved,
and `prefers-reduced-motion` disables the new transitions. Screenshot review
cannot prove full assistive-technology compatibility.
## Interaction and console checks
- Mobile More opens a Semi SideSheet with grouped analysis and governance
destinations, then closes without changing page state.
- Mobile Mileage navigation changes URL, heading and active tab and renders the
fixed-column mileage matrix.
- Desktop sidebar collapses and expands with a visible affordance in both
states.
- No framework error overlay or application runtime error was observed.
Semi UI's known React `findDOMNode` development deprecation warning remains.
## Follow-up polish
- P3: continue raising secondary explanatory text on legacy page-specific
surfaces as each page enters the Semi migration.
- P3: consolidate older workspace CSS overrides after the visual migration is
complete; removing them now would expand regression scope without changing
this shell's rendered result.
final result: passed
---
# Access portrait evidence viewport — Design QA
- Source visual truth:
`/tmp/access-mobile-density-20260720/01-production-320-before.png`
- Local implementation:
`/tmp/access-mobile-density-20260720/02-local-320-after.png`
- Local detail interaction:
`/tmp/access-mobile-density-20260720/03-local-320-detail.png`
- Local 390px regression:
`/tmp/access-mobile-density-20260720/04-local-390-after.png`
- Deployed 320px evidence:
`/tmp/access-mobile-density-20260720/05-production-320-after.png`
- Deployed detail interaction:
`/tmp/access-mobile-density-20260720/06-production-320-detail.png`
- Deployed 390px evidence:
`/tmp/access-mobile-density-20260720/07-production-390-after.png`
- Same-viewport production comparison:
`/tmp/access-mobile-density-20260720/08-production-320-comparison.png`
- Viewports: 320 × 568 and 390 × 844
- State: authenticated administrator; Access directory with all vehicles
selected and live protocol evidence
## Findings and comparison history
### Baseline
- **[P1] The portrait mobile evidence list was almost entirely clipped.**
- Evidence: at 320 × 568 the page reserved 72px of redundant bottom padding,
a 72px filter trigger, a 58px repeated panel heading and a 92px metric
rail. Only 19px remained for the vehicle scroller, so the first 155px
vehicle card could not be read or selected reliably.
- Impact: the primary Access task—identifying a vehicle and opening its
protocol evidence—was effectively blocked on narrow mobile devices.
- Fix: removed the redundant portrait-only page reserve, reduced the filter
trigger to 56px, reduced the metric rail to 60px minimum height and hid the
repeated mobile panel heading. The established command bar, filters,
metrics, pagination and bottom navigation remain present.
### Final pass
- No actionable P0, P1 or P2 issue remains in this mobile Access flow.
- At 320 × 568 the evidence scroller increased from 19px to 195px, a 176px
gain and more than tenfold improvement. One complete vehicle card and the
next-card affordance are visible.
- At 390 × 844 the scroller is 471px tall and three evidence cards are visible
before pagination.
- Both viewports report document width equal to viewport width. The bottom
navigation, pagination and detail sheet do not overlap or introduce
horizontal scrolling.
## Required fidelity surfaces
- **Fonts and typography:** existing Semi UI typography, plate hierarchy and
protocol metadata remain unchanged and readable.
- **Spacing and layout rhythm:** only portrait Access density changed. Existing
short-landscape rules and Web layout are untouched.
- **Colors and visual tokens:** the existing neutral, blue, green and amber
semantic states are preserved, including partial-source warning evidence.
- **Image quality and assets:** no new imagery, icon approximation or
replacement asset was introduced.
- **Copy and content:** command, filter, vehicle, source and evidence labels are
unchanged; only the duplicate `接入差异清单` mobile heading is visually
removed.
- **Icons:** existing Semi icons and controls retain their current sizing and
active states.
- **Responsiveness:** 320px and 390px portrait layouts have no horizontal
overflow. The portrait-only media query does not alter desktop or landscape
composition.
- **Accessibility:** every vehicle remains a semantic button and the selected
vehicle opens a labeled `车辆接入详情` dialog with a labeled close action.
This visual and DOM pass does not replace a full assistive-technology audit.
## Interaction and console checks
- Production Access → first vehicle card → vehicle detail → close was exercised
successfully at 320px.
- The detail sheet measured 320px wide and 477px tall, retained its internal
scroller, and exposed `接入健康概览` plus `协议证据`.
- Automated gate: 73 test files and 383 tests passed. The targeted Access and
production-entry gate passed 14 tests.
- TypeScript, Vite, distribution preparation and the release build verifier
completed successfully with 74 current assets.
- Release `access-mobile-list-20260720182508` is active. `/access` returned
HTTP 200, the service is active, and the deployed
`app-DC_UXKeU.css` SHA-256 matches the local production asset:
`8e723387c096e156fb70e2a234ade464c0d1faca000c2d54ef8a65e402638c78`.
- No application runtime failure or visible error state was observed during
local or deployed interaction testing. Existing development-only Semi UI
`findDOMNode` warnings remain unchanged.
## Follow-up polish
- P3: revisit Access card vertical density only if future protocol evidence
adds a fourth simultaneous source; the current three-source layout is
readable at 320px.
final result: passed
---
# Account governance clarity pass — 2026-07-20
## Scope
- Route: `/users`
- Surfaces: desktop directory, mobile directory, desktop configuration
SideSheet, mobile configuration SideSheet.
- Production release: `users-clarity-20260720181338`.
## Findings and fixes
- **P1 — Mobile directory hierarchy consumed too much of the first viewport.**
- Before: at 320 × 568 the directory began at y=291, so only about three
complete customer rows were visible.
- Fix: removed the repeated mobile directory heading, reduced the metric
rail to 56px and kept the list itself as a single-row directory.
- After: the directory begins at y=227. Four complete rows plus the next-row
affordance are visible at 320 × 568; all five current accounts fit at
390 × 844.
- **P1 — Mobile configuration repeated identity information before the first
editable field.**
- Before: header, three-column summary, numbered tabs and identity overview
pushed the first editable field to roughly y=425.
- Fix: kept only the decision-critical permission scope and account-status
summary on mobile, removed duplicate step circles and hid the repeated
identity overview.
- After: the first identity field begins at y=253 in production. Permission
scope, account enable/disable state, section tabs and persistent save state
remain visible.
- **P2 — Narrow directory scrolling reduced usable row width.**
- Fix: hid the decorative inner scrollbar on mobile while preserving the
keyboard-focusable scroll region and native touch scrolling.
## Fidelity and interaction checks
- Desktop remains a true one-row directory with dedicated columns for menu
permissions, vehicle permissions, recent login and access state.
- Desktop configuration retains the complete three-part summary and detailed
identity overview; mobile removes only duplicated information.
- The mobile vehicle-permission tab was exercised in production: assigned
plates remain primary, VIN secondary, and effective periods, adjust/remove
actions, pagination and history remain reachable.
- No horizontal document overflow occurred at 390px or 1440px.
- Production console: no warnings or errors for the deployed route.
- Automated gate: 73 test files and 382 tests passed. Production build gate
passed with 74 release assets.
- Local and ECS `UsersPage-CNmDqRKT.css` SHA-256 matched:
`6d5e0f80489967fc5f4eac7c30236091969e66730e68031713740c3f8c603ba3`.
## Evidence
- `/tmp/responsive-audit-20260720/users-list-mobile-production.png`
- `/tmp/responsive-audit-20260720/users-config-mobile-production.png`
- `/tmp/responsive-audit-20260720/users-config-vehicles-mobile-after.png`
- `/tmp/responsive-audit-20260720/users-list-desktop-production.png`
final result: passed
# 2026-07-20 Operations mobile clarity audit
## Audit scope
- Surface: authenticated `/operations` quality workspace.
- User goal: scan the active reconciliation queue, understand the two urgent
counts, and move between reconciliation and diagnosis without leaving the
viewport or losing mobile navigation.
- Production baseline:
`/tmp/cross-route-audit-20260720/mobile-operations-stable.png`.
- Local implementation:
`/tmp/cross-route-audit-20260720/mobile-operations-local-after-stable.png`.
- Production verification:
`/tmp/cross-route-audit-20260720/mobile-operations-production-final.png`.
## Findings and resolution
1. **P1 — the operations command surfaces exceeded the phone viewport.**
- Baseline measurement: the 390px-wide command bar started at x=8 and
ended at x=398 because a desktop `width: 100%` combined with 8px mobile
margins. The adjacent workspace navigation inherited the same geometry.
- Impact: the global refresh action and right edge of the segmented
workspace control were visibly clipped.
- Fix: the mobile operations command bar and workspace navigation now use
their available flex width (`width: auto`) and remain inset from x=8 to
x=382.
2. **P1 — half of the reconciliation metric rail was reserved for hidden
desktop context.**
- Baseline measurement: the rail body retained `199px 180px` columns at
390px even though the context column was hidden. The two visible metrics
were compressed to 99.5px each, truncating both supporting notes.
- Impact: users could see the large numbers but not understand whether
`1,327` represented active items or what caused `1,189` SLA breaches.
- Fix: the hidden context column now collapses on phones. The visible list
occupies all 379px with two equal 189.5px columns, and each metric uses a
clear label/value/note stack.
## Final pass
- 390 × 844 production document width equals viewport width.
- Command bar and workspace navigation are both fully inside the viewport.
- `待复核 1,327 / 活跃 1,327 项` and
`SLA 超时 1,189 / 超过 24 小时` are fully legible.
- The `差异处置 → 单车诊断 → 差异处置` interaction was exercised against
ECS production. Both panels rendered correctly and document width remained
390px.
- 1440 × 900 retained the existing five-column reconciliation table, summary
context, side navigation and pagination without reflow.
- No production console warning or error was emitted during the smoke test.
The known Semi UI `findDOMNode` message remains development-only.
- Automated gate: 73 test files and 381 tests passed.
- Production build gate: 74 release assets passed.
- Release `ops-mobile-clarity-20260720175459` is active. The served
`app-BUsvckVz.css` SHA-256 matches the local build:
`feb4f945ff7dc586a31d1c65f985048b7ef6399574911db182767fc813c28121`.
## Evidence limits
- Screenshot and DOM evidence verifies responsive reflow, visible hierarchy,
interaction state and console health. It does not by itself prove full WCAG
conformance or screen-reader announcements.
- The diagnosis vehicle picker was not used to mutate production state; its
empty state and workspace transition were verified read-only.
final result: passed
---
# Account management guided onboarding — Design QA
- Source visual truth:
`/tmp/account-management-audit-20260720/07-users-mobile-create-production-baseline.png`
- Rendered implementation:
`/tmp/account-management-audit-20260720/08-users-mobile-create-local-after.png`
- Deployed production implementation:
`/tmp/account-management-audit-20260720/14-users-mobile-create-production-after.png`
- Full-view comparison:
`/tmp/account-management-audit-20260720/12-users-mobile-create-full-comparison.png`
- Focused summary/footer comparison:
`/tmp/account-management-audit-20260720/13-users-mobile-create-focus-comparison.png`
- Web implementation:
`/tmp/account-management-audit-20260720/11-users-desktop-create-local-after.png`
- Follow-on menu step:
`/tmp/account-management-audit-20260720/09-users-mobile-create-menu-local-after.png`
- Follow-on vehicle step:
`/tmp/account-management-audit-20260720/10-users-mobile-create-vehicles-local-after.png`
- Viewports: 390 × 844 and 1440 × 900
- State: authenticated administrator; customer directory, existing customer
editor and new-customer draft
## Findings and comparison history
### Baseline
- **[P1] The new-account default contradicted the page's least-privilege
promise.**
- Evidence: the production source capture opened a new customer with all
four customer menus already granted, while the header and supporting copy
said permissions were opened by minimum necessary scope.
- Impact: an administrator could create a broadly authorized account without
explicitly reviewing menu access.
- Fix: new drafts now begin with zero menu and zero vehicle permissions.
Existing accounts retain their saved menu and vehicle grants unchanged.
- Post-fix evidence: the implementation summary shows `0 菜单 · 0 辆`, the
badge reads `待开放菜单`, and every menu row begins unchecked.
- **[P2] Draft state and the primary action implied that an unsaved account was
already synchronized.**
- Evidence: before the fix, the new-account footer showed `已同步` and the
disabled action was `创建账号`, even though no server-side account existed.
- Impact: administrators could not distinguish a local draft from a saved
identity and were not prompted to review permissions in order.
- Fix: new drafts show `新建草稿`; the primary action advances through
`下一步:菜单权限`, `下一步:车辆权限`, then `创建账号`. The first step
remains disabled until username, display name and a 10128 character
password with at least three character categories are complete.
- Post-fix evidence: the focused comparison shows the corrected state badge,
zero-permission summary and step-specific action.
### Final pass
- No actionable P0, P1 or P2 issue remains in the audited account-management
flow.
- The existing Web single-line customer directory, mobile dense customer list,
identity editor, menu editor, vehicle paging and grant-window editor were
preserved.
- A production smoke used a disposable client-side draft, advanced from
identity to the zero-menu state, then discarded the draft. No customer was
created or modified.
## Required fidelity surfaces
- **Fonts and typography:** the existing PingFang/system stack, title weights,
compact metadata and tab hierarchy remain unchanged. Step labels fit at
390px without wrapping or truncating the primary action.
- **Spacing and layout rhythm:** the established full-width mobile sheet,
sticky summary, three-step tabs, scrollable form and sticky footer remain
aligned. The Web sheet retains its 820px maximum width and two-column fields.
- **Colors and visual tokens:** existing Semi blue, neutral and semantic
green/amber states are retained. Amber now consistently communicates an
incomplete permission scope; blue communicates a local new draft.
- **Image quality and assets:** no new imagery or replacement asset was
introduced. The product's supplied vector brand mark and Semi icon family
remain unchanged.
- **Copy and content:** `新建草稿`, `待开放菜单` and the step-specific actions
accurately describe server state and the administrator's next task.
- **Icons:** the existing Semi close, eye, plus and checkbox icons remain
aligned and use the same active/disabled treatments.
- **Responsiveness:** 390px and 1440px captures show no horizontal overflow,
clipped footer, hidden close action or obscured form field.
- **Accessibility:** the flow exposes a dialog, three semantic tabs, labeled
fields, checkboxes and buttons. Disabled state prevents advancing with an
incomplete or weak identity. Screenshot and DOM review do not replace a
full assistive-technology audit.
## Interaction and console checks
- Production customer directory → new account → identity draft → menu step →
discard draft was exercised without a write.
- Local identity fields were completed with a compliant preview password; the
primary action became enabled and advanced to a zero-menu state.
- Menu and vehicle tabs rendered their unchecked/empty states and the final
create action without layout shift.
- Existing-customer identity, menu and 44-vehicle states were captured on Web
and mobile before implementation.
- Local development emitted only Semi UI's known React `findDOMNode`
deprecation warning. Deployed production emitted no warning or error.
- Automated gate: 73 test files and 380 tests passed. TypeScript, Vite and the
release build verifier completed successfully.
- Production release `account-onboarding-ux-20260720173338` is active. The
immutable release gate verified 74 current and 116 compatibility assets; the
served UsersPage bundle is byte-for-byte identical to the local build.
## Follow-up polish
- P3: add a compact password-rule checklist to the administrator's initial
password field when the shared password-input pattern is next consolidated.
final result: passed
---
# Intermediate sidebar continuity — Design QA
- Source visual truth: `/tmp/sidebar-continuity-20260720/02-monitor-901-production.png`
- Rendered implementation: `/tmp/sidebar-continuity-20260720/11-monitor-901-local-settled.png`
- Full-view comparison: `/tmp/sidebar-continuity-20260720/12-monitor-901-full-comparison.png`
- Focused navigation comparison: `/tmp/sidebar-continuity-20260720/13-monitor-901-focus-comparison.png`
- Cross-route implementation evidence: `/tmp/sidebar-continuity-20260720/09-routes-1024-local-montage.png`
- Mobile regression evidence: `/tmp/sidebar-continuity-20260720/10-statistics-390-mobile-regression.png`
- Viewports: 680 × 700, 681 × 700, 900 × 700, 901 × 700,
1024 × 700, 1100 × 700, 1101 × 700, 1280 × 700 and 390 × 844
- State: authenticated customer; Monitor map mode, plus Vehicles, Tracks and
Statistics default workspaces
## Findings and comparison history
### Baseline
- **[P2] A one-pixel viewport change caused a disproportionate workspace
reflow.**
- Evidence: production at 900px used a 72px compact rail and an 828px main
region, while 901px immediately restored a 228px rail and reduced the main
region to 673px. The full-view source capture shows the map losing about
one third of its width even though the device width increased.
- Impact: tablet and browser-zoom users could cross the breakpoint and see
filters, telemetry and the map recompose abruptly.
- Fix: aligned the React shell state and shared CSS breakpoint so the 72px
Semi icon rail remains active from 681px through 1100px. Full navigation
returns at 1101px, where the main region still has 873px.
- Post-fix evidence: the 901px implementation has a 72px rail, 829px main
region and complete 284px account action region. The focused comparison
shows the recovered workspace width without changing the page hierarchy.
### Final pass
- No actionable P0, P1 or P2 mismatch remains.
- Boundary measurements:
- 680px: mobile shell, 680px main region.
- 681px: 72px rail, 609px main region.
- 900px: 72px rail, 828px main region.
- 901px: 72px rail, 829px main region.
- 1024px: 72px rail, 952px main region.
- 1100px: 72px rail, 1028px main region.
- 1101px: 228px rail, 873px main region.
- 1280px: 228px rail, 1052px main region.
- Vehicles, Tracks and Statistics all retained the same shell geometry at
1024px and 1101px with document width equal to viewport width.
## Required fidelity surfaces
- **Fonts and typography:** the existing PingFang/system stack, weights and
hierarchy remain unchanged. Labels stay readable in the compact rail and
the 901px topbar has no wrapping or clipping.
- **Spacing and layout rhythm:** the change preserves the established 72px and
228px shell tokens and removes the unstable intermediate reflow. Page
margins, card spacing and content density remain consistent across routes.
- **Colors and visual tokens:** no palette or semantic state color changed.
Existing white surfaces, neutral borders and Semi blue selection states
remain faithful to the current production design.
- **Image quality and assets:** the supplied vector brand mark remains the
single shell asset. No raster substitute, custom SVG or CSS-drawn asset was
introduced.
- **Copy and content:** no product copy changed. Compact navigation uses the
existing accessible menu labels while hiding only visible text.
- **Icons:** the existing Semi icon set remains optically centered in the 72px
rail; selected and inactive states were checked at 901px and 1024px.
- **Responsiveness:** no horizontal document overflow occurred at any tested
boundary. The 390px mileage matrix retained fixed vehicle and total columns,
horizontal date navigation and bottom navigation.
- **Accessibility:** complementary navigation remains present at 6811100px;
mobile navigation remains available below 681px; the account menu remains
fully inside the 901px viewport. This visual pass does not replace an
assistive-technology audit.
## Interaction and console checks
- Monitor, Vehicles, Tracks and Statistics were navigated in the authenticated
browser at 1024px and measured again at 1101px.
- Route changes retained the shell, active navigation and full-width work area.
- The 390px Statistics page preserved usable pagination and bottom navigation.
- No application runtime error was observed. Semi UI's known React
`findDOMNode` development StrictMode deprecation warning remains.
- Automated gate: 73 test files and 379 tests passed; production build and
release verification completed successfully.
- Deployed production evidence:
`/tmp/sidebar-continuity-20260720/14-monitor-901-production-after.png`.
The authenticated ECS page measured a 72px rail and 829px main region at
901px, with no horizontal overflow and no browser console warning or error.
- Release `sidebar-continuity-ux-20260720171458` is active. The immutable
release gate verified 74 current assets and 116 compatibility assets; the
served shell stylesheet is byte-for-byte identical to the local build.
## Follow-up polish
- P3: replace the remaining Semi UI components that trigger React
`findDOMNode` development warnings when the library exposes ref-safe
alternatives.
final result: passed