Skip to content

feat!: build a complete cross-platform rating system - #20

Merged
f0rr0 merged 1 commit into
masterfrom
f0rr0/complete-rating-input
Jul 28, 2026
Merged

feat!: build a complete cross-platform rating system#20
f0rr0 merged 1 commit into
masterfrom
f0rr0/complete-rating-input

Conversation

@f0rr0

@f0rr0 f0rr0 commented Jul 28, 2026

Copy link
Copy Markdown
Owner

What ships

This is the single integrated next-version change: no intermediate component, compatibility layer, or partial release.

  • Rebuilds Rating around one exact integer-tick model for fractional input, min, clearing, pointer geometry, keyboard/accessibility actions, controlled state, visual fill, and callback deduplication.
  • Adds deliberate tap-and-drag interaction that waits for axis intent, yields cross-axis scrolling, uses stable page-coordinate geometry, handles release revalidation/multi-touch/termination, and keeps a local controlled draft.
  • Adds allocation-light RatingDisplay for exact aggregates and list cells.
  • Adds generic RatingScale for NPS, Likert, emoji, strings, zero, negative values, null empty state, reversal, cumulative/single visuals, and readable item extents.
  • Adds native adjustable semantics plus a complete React Native Web ARIA slider/keyboard/focus implementation, reduced-motion-aware completion feedback, explicit RTL/vertical behavior, and decorative static semantics.
  • Makes renderer ownership explicit, strips conflicting responder/accessibility/root props at both type and runtime boundaries, and hardens invalid values/layout inputs before native styles are built.
  • Ships a polished Expo example, v4 migration guide, dated competitor/source/issue analysis, SEO/package discovery copy, and CI gates for the packed artifact.

Verified need and positioning

The research snapshot is dated 2026-07-28 and covers recurring results across the first-two-page depth for four rating-component query families, current package metadata, exact competitor release source, and open/historical issue evidence. Search ordering is volatile and the research surface did not expose stable locale/rank metadata, so the analysis presents an honest recurring-hit sample rather than a fabricated ranking.

The implementation borrows the useful category lessons—separate static rendering, explicit interaction lifecycle, and visual customization—while differentiating on the combination competitors do not provide: scroll-aware drag intent, one end-to-end fractional model, native/Web accessibility parity, a real static path, semantic scales, explicit locale/orientation/reversal semantics, core-only adoption, defensive boundaries, and duplicate-semantic control.

See:

Backlog disposition

Closes #4
Closes #8
Closes #10
Closes #13
Closes #14

Breaking changes

Release Please should cut this as v4. Root responder/keyboard/accessibility ownership, primary-axis item geometry, default visuals/colors, Web focus behavior, and vertical progression are deliberately tightened. The migration section documents every required adjustment. Existing controlled value/onChange and uncontrolled defaultValue concepts remain.

Validation

  • bun run check
    • formatting, Oxlint, TypeScript
    • 7 Jest suites / 76 tests
    • 94.01% statements, 90.31% branches, 96.26% functions, 94.08% lines
    • Bob build, strict Publint, Are the Types Wrong
    • hook config, ShellCheck, Actionlint, and Zizmor
  • Packed-tarball consumer compile and ESM/CommonJS resolution on:
    • minimum React 19.1.1 / React Native 0.82.0
    • current React 19.2.8 / React Native 0.86.2
  • Clean packed-package Expo 57 project:
    • TypeScript
    • production Web export
    • React Native Web server rendering for Rating, RatingDisplay, and RatingScale
    • ARIA, decorative semantics, registered pointer-routing CSS, and zero render diagnostics
  • Independent final API/accessibility/performance review found no material source-level blockers.

The PR remains draft for the documented real-device/browser manual VoiceOver, TalkBack, keyboard, ScrollView, RTL, and release-mode list profiling pass before merge.

Add precise scroll-aware rating interactions, native and Web accessibility, exact static displays, and generic semantic scales.

Ship the Expo showcase, competitive evidence, migration guide, and packed consumer/SSR compatibility gates with the same release.

BREAKING CHANGE: rating root interaction ownership, primary-axis item geometry, default visuals, and accessibility semantics have changed; see the README migration guide.
@f0rr0
f0rr0 marked this pull request as ready for review July 28, 2026 04:29
@f0rr0
f0rr0 merged commit 5cc8da7 into master Jul 28, 2026
5 checks passed
@f0rr0
f0rr0 deleted the f0rr0/complete-rating-input branch July 28, 2026 04:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant