Candidate platform support · 0.1.0
| Area | DOM | RN | Evidence |
|---|---|---|---|
| Actions, surfaces, text, fields | Semantic DOM elements | Pressable/View/Text/TextInput | behavior tests, Vite/SSR/Metro |
| Native text scaling and script tracking | Browser zoom; no cap | Text/Heading/NumberReadout maxFontSizeMultiplier (prop or HIGProvider default); Korean/Chinese runs at companion spacing via script and letterSpacingByScript | native Jest (#67); iOS Simulator AX5: capped readout 48pt vs 86pt prose; Android emulator 200% (non-linear scaling stays under the 2x cap) (evidence/native-sim/issue-67-71/) |
| Native colour roles | CSS severity/data attributes | Switch tone, Alert severity/tone take token roles only; raw colours fall back. The Android Switch thumb uses the text token instead of the app theme accent | native Jest (#67); iOS Simulator and Android emulator captures (evidence/native-sim/issue-67-71/) |
| Native colour space | CSS sRGB with P3 in @supports | HIGProvider colorSpace srgb (default) or display-p3; every component paints from useColors(); iOS display-p3 uses nativeColors.iosDisplayP3, Android and web stay sRGB; no raw colours | native Jest (#93: P3 values for action/warning/negative/info, direct-import guard); iOS Simulator capture as a Display P3 host (evidence/native-sim/issue-93/); physical display pending (#55) |
| Selection/range | Built-in input/select | OS Switch/community Slider, radio/check Pressables, Modal chooser; Android Slider adds ACTION_SET_PROGRESS through the autolinked HIGAdjustableView (plain View without native linking) | contract tests; Android emulator UiAutomation (#71): set-progress listed, 80 applied once, snapped/clamped, absent and rejected while disabled; iOS Simulator increment/decrement unchanged (evidence/native-sim/issue-67-71/) |
| Dialog/sheet/menu | Radix scoped primitives; optional Vaul GestureSheet with fixed snap points or opt-in dynamic content sizing | Modal and explicit close/back; optional Gorhom GestureSheet with the same sizing alternatives, rejected-close retry and accessibility escape | DOM nested focus/Escape plus real Chromium/WebKit sheet drag, scroll and snap checks; mocked native focus/back/detents plus separate packed Android/iOS gesture entry; physical gesture/screen-reader certification is not claimed |
| Tooltip/popover | Radix hover/focus/anchored | persistent HelpText/modal | no RN hover claim |
| Navigation/search | href/callback adapters | host route/back callbacks | tab/search/disclosure contracts |
| Financial lists/table | semantic table/list; optional per-place animated readout | FlatList labeled rows; optional Reanimated/Worklets per-place readout, static data remains engine-free | formatting and contract tests; mixed-bidi/native static fallbacks and physical-device/RTL observations remain limited |
| Chart | @bloxwap/hig/chart: lazy @bloxwap/chart canvas (required peer) | numeric/list summary only | typed theme; physical gesture evidence pending |
| Brand mark | individual SVG renderer/asset | optional react-native-svg | pinned geometry; device comparison pending |
| React Native versions | — | RN 0.81.5 / Expo 54 / React 19.1.0 and RN 0.83.10 / Expo 55 / React 19.2.0 and RN 0.88.1 / Expo 58 / React 19.3.0; peer ranges react-native ^0.81.5 || ^0.83.10 || ^0.88.0, SDK-matched Expo, SVG, Slider, Reanimated and Worklets peers | CI packed Metro exports and native-ref typechecks for all three (smoke:packed-native, --profile rn-0.83, --profile rn-0.88); iOS Simulator and Android emulator gallery, interaction and GestureSheet runs on both with the same outcomes; differences tracked in #86–#89 (evidence/native-sim/rn-0.83/) |
| Fonts | pinned Sans/Mono asset URLs | hash-pinned static faces, typed manifest, explicit weight registration and host script fallback | Expo-web loading/byte/hash gates; no physical native-font certification |
SSR: client components retain use-client boundaries in emitted JS. Importing a button needs React/tokens/contracts only at runtime. CSS is explicitly imported. Native API never imports DOM, Web Audio or chart. Native target size remains comfortable even when host density is compact; Pro density is a DOM exception, not a reason to shrink phone targets.
Optional peer packages: none for chart, whose @bloxwap/hig/chart entry relies on the package's one required peer, @bloxwap/chart (#96); community Slider for native selection entry; react-native-svg for native brand entry. Vaul is isolated behind the web gesture-sheet entry. Gorhom and Gesture Handler are isolated behind the native gesture-sheet entry; Reanimated and Worklets are isolated behind the native gesture-sheet and animated-number entries. Base imports, including ordinary native data readouts, do not load them. No root barrel loads every component. DOM overlays are one scoped family entry and carry Radix MIT attribution; Radix peers are optional caret ranges and overlay-free web recipes have their own entries. ESM is supported; CommonJS consumer support is not claimed.
RN 0.88 compatibility is verified by independent packed TypeScript and Android/iOS Metro consumers. Existing simulator/emulator interaction reports cover RN 0.81 and 0.83 only; no RN 0.88 physical or simulator interaction result is inferred from a bundle export.