Style React fast with 100% parity on React Native, an optional UI kit, and optimizing compiler.
This report summarizes scanner evidence for tamagui/tamagui, a TypeScript project with 14,292 GitHub stars. SynthScan examined 649,879 lines of code across 6041 source files, recording 858 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 1.7 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 721 finding(s).
Are imports declared and package/API names verified? 60 finding(s).
Are wrappers, guards, and repeated structures necessary? 537 finding(s).
Which changes need focused human review? 858 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 858 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code/ui/components-test/Button.native.test.tsx | 44 | function resetGestureHandlerFreeze() { | CODE |
| LOW | …e/ui/components-test/SheetGestureState.native.test.tsx | 19 | function setPressGestureHandlerEnabled(enabled: boolean) { | CODE |
| LOW | code/ui/popper/src/Popper.tsx | 216 | function getSideAndAlignFromPlacement(placement: Placement) { | CODE |
| LOW | code/ui/toast/types/createNativeToast.native.d.ts | 4 | export declare function requestNotificationPermission(): Promise<null>; | CODE |
| LOW | code/ui/toast/types/createNativeToast.d.ts | 8 | export declare function requestNotificationPermission(): Promise<NotificationPermission | null>; | CODE |
| LOW | code/ui/toast/src/createNativeToast.native.tsx | 31 | export async function requestNotificationPermission(): Promise<null> { | CODE |
| LOW | code/ui/toast/src/createNativeToast.tsx | 37 | export async function requestNotificationPermission(): Promise<NotificationPermission | null> { | CODE |
| LOW | code/ui/linear-gradient/src/linear-gradient.tsx | 112 | function getLinearGradientBackgroundImage( | CODE |
| LOW | code/ui/slider/src/Slider.tsx | 59 | function startSliderMeasureInterval() { | CODE |
| LOW | code/ui/slider/src/Slider.tsx | 73 | function addActiveSliderMeasureListener(listener: Function) { | CODE |
| LOW | code/ui/slider/src/Slider.tsx | 78 | function removeActiveSliderMeasureListener(listener: Function) { | CODE |
| LOW | code/ui/slider/src/Slider.tsx | 196 | function useOnDebouncedWindowResize(callback: Function, amt = 200) { | CODE |
| LOW | code/ui/field/types/validation.d.ts | 3 | export declare function createDefaultValidityState(valid?: boolean | null): FieldValidityState; | CODE |
| LOW | code/ui/field/src/validation.ts | 10 | export function createDefaultValidityState( | CODE |
| LOW | …/ui/context-menu/types/createNonNativeContextMenu.d.ts | 46 | export declare function createNonNativeContextMenu(): import("@tamagui/web").Combined<{ | CODE |
| LOW | code/ui/context-menu/src/createNonNativeContextMenu.tsx | 94 | export function createNonNativeContextMenu() { | CODE |
| LOW | code/ui/dialog/src/Dialog.tsx | 292 | function useDialogAnimationReporter(context: DialogContextValue) { | CODE |
| LOW | code/ui/popover/src/Popover.tsx | 636 | function RepropagateParentContexts({ | CODE |
| LOW | code/ui/select/types/selectionController.d.ts | 34 | export declare function selectedValuesFromSelection(mode: SelectMode, value: SelectSelection | undefined): string[]; | CODE |
| LOW | code/ui/select/types/selectionController.d.ts | 35 | export declare function createSelectSelectionController({ mode: initialMode, value: initialValue, registry, }: { | CODE |
| LOW | code/ui/select/src/selectionController.ts | 262 | export function selectedValuesFromSelection( | CODE |
| LOW | code/ui/select/src/selectionController.ts | 274 | export function createSelectSelectionController({ | CODE |
| LOW | code/ui/dismissable/types/Dismissable.d.ts | 29 | export declare function useDismissableLayersAbove(ref: React.RefObject<HTMLElement | null>): number; | CODE |
| LOW | code/ui/dismissable/types/Dismissable.native.d.ts | 7 | export declare function useDismissableLayersAbove(_ref: React.RefObject<HTMLElement | null>): number; | CODE |
| LOW | code/ui/dismissable/src/Dismissable.tsx | 128 | export function useDismissableLayersAbove(ref: React.RefObject<HTMLElement | null>) { | CODE |
| LOW | code/ui/dismissable/src/Dismissable.tsx | 405 | function handlePointerDownOutsideEvent() { | CODE |
| LOW | code/ui/dismissable/src/Dismissable.native.tsx | 26 | export function useDismissableLayersAbove( | CODE |
| LOW | code/ui/radio-headless/types/useRadioGroup.d.ts | 143 | export declare function useRadioGroupItemIndicator(params: UseRadioGroupItemIndicatorParams): { | CODE |
| LOW | code/ui/radio-headless/src/useRadioGroup.tsx | 265 | export function useRadioGroupItemIndicator(params: UseRadioGroupItemIndicatorParams) { | CODE |
| LOW | code/ui/sheet/types/keyboardAvoidance.d.ts | 1 | export declare function getKeyboardAdjustedSheetY({ sheetY, screenSize, isKeyboardVisible, keyboardHeight, shouldTransla | CODE |
| LOW | code/ui/sheet/types/keyboardAvoidance.d.ts | 19 | export declare function getKeyboardOccludedHeight({ frameSize, isKeyboardVisible, keyboardHeight, screenSize, sheetY, }: | CODE |
| LOW | …/ui/sheet/types/useSheetScrollViewGestures.native.d.ts | 14 | export declare function useSheetScrollViewGestures({ scrollBridge, hasScrollableContent, scrollEnabled, setScrollEnabled | CODE |
| LOW | code/ui/sheet/types/useKeyboardControllerSheet.d.ts | 17 | export declare function useKeyboardControllerSheet(options: KeyboardControllerSheetOptions): KeyboardControllerSheetResu | CODE |
| LOW | …/ui/sheet/types/useKeyboardControllerSheet.native.d.ts | 12 | export declare function useKeyboardControllerSheet(options: KeyboardControllerSheetOptions): KeyboardControllerSheetResu | CODE |
| LOW | code/ui/sheet/types/useSheetScrollViewGestures.d.ts | 11 | export declare function useSheetScrollViewGestures({ scrollRef, scrollBridge, hasScrollableContent, onManualScroll, }: U | CODE |
| LOW⚡ | code/ui/sheet/types/webViewport.d.ts | 26 | export declare function getStableLayoutViewportHeight(): number; | CODE |
| LOW⚡ | code/ui/sheet/types/webViewport.d.ts | 34 | export declare function getWebKeyboardResizeHeight(): number; | CODE |
| LOW⚡ | code/ui/sheet/types/webViewport.d.ts | 35 | export declare function getWebVisualViewportOffsetTop(): number; | CODE |
| LOW⚡ | code/ui/sheet/types/webViewport.d.ts | 40 | export declare function getWebKeyboardBottomInset(): number; | CODE |
| LOW | code/ui/sheet/src/keyboardAvoidance.ts | 1 | export function getKeyboardAdjustedSheetY({ | CODE |
| LOW | code/ui/sheet/src/keyboardAvoidance.ts | 92 | export function getKeyboardOccludedHeight({ | CODE |
| LOW | code/ui/sheet/src/useSheetScrollViewGestures.native.ts | 32 | export function useSheetScrollViewGestures({ | CODE |
| LOW | code/ui/sheet/src/useKeyboardControllerSheet.native.ts | 31 | export function useKeyboardControllerSheet( | CODE |
| LOW | code/ui/sheet/src/useSheetScrollViewGestures.ts | 26 | export function useSheetScrollViewGestures({ | CODE |
| LOW | code/ui/sheet/src/SheetImplementationCustom.tsx | 83 | function SheetImplementationCustom(props, forwardedRef) { | CODE |
| LOW | code/ui/sheet/src/webViewport.ts | 37 | export function getStableLayoutViewportHeight(): number { | CODE |
| LOW⚡ | code/ui/sheet/src/webViewport.ts | 96 | export function getWebKeyboardResizeHeight(): number { | CODE |
| LOW⚡ | code/ui/sheet/src/webViewport.ts | 103 | export function getWebVisualViewportOffsetTop(): number { | CODE |
| LOW⚡ | code/ui/sheet/src/webViewport.ts | 112 | export function getWebKeyboardBottomInset(): number { | CODE |
| LOW | code/ui/sheet/src/useKeyboardControllerSheet.ts | 30 | export function useKeyboardControllerSheet( | CODE |
| LOW | code/ui/sheet/src/gestureState.ts | 12 | function getSheetGestureHandlerState(): GestureState { | CODE |
| LOW | code/comparisons/attribute-bundle-gzip.ts | 325 | function loadParserClusterManifest(checkpointName: string) { | CODE |
| LOW | code/comparisons/attribute-bundle-gzip.ts | 432 | function findAstTopLevelDeclarations(sourceFile: ts.SourceFile, name: string) { | CODE |
| LOW | code/comparisons/attribute-bundle-gzip.ts | 449 | function topLevelRuntimeDeclaration(node: ts.Node): ts.Statement | undefined { | CODE |
| LOW | code/comparisons/attribute-bundle-gzip.ts | 457 | async function privateDeclarationDependencies( | CODE |
| LOW | …/comparisons/shared/bundleTopLevelReplacementPlugin.ts | 22 | export function bundleTopLevelReplacementPlugin(): Plugin | false { | CODE |
| LOW | …mparisons/shared/benchmarkAssertionAttributesPlugin.ts | 1 | export function benchmarkAssertionAttributesPlugin(strip: boolean) { | CODE |
| LOW | code/core/core-test/pressPairing.native.test.tsx | 22 | function resetGestureHandlerFreeze() { | CODE |
| LOW | code/core/core-test/mockAnimationDriver.tsx | 12 | export function createMockAnimationDriver(options?: { | CODE |
| LOW | code/core/core-test/groupNotifications.web.test.tsx | 13 | function createGroupContextFixture() { | CODE |
| 400 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | code/comparisons/tamagui-bench/src/index.tsx | 237 | // ── runner ──────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/tamagui-bench/src/size.tsx | 189 | // ── runner ──────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 116 | // ── colors (palette) ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 125 | // ── border radius ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 131 | // ── borders ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 135 | // ── flex / alignment ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 200 | // ── opacity ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 210 | // ── overflow ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 220 | // ── more palette coverage (single boxes — pixel-match cleanly cross-platform) ─────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 257 | // ── more sizing ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 262 | // ── borders ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 266 | // ── single-side padding (colored box, dark inner for a clean diff) ────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 464 | // ── radius breadth ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 469 | // ── borders breadth ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | code/comparisons/conformance/cases.tsx | 477 | // ── flex alignment breadth ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 37 | // ── sizing ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 69 | // ── spacing ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 95 | // ── gap (flex) ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 182 | // ── position ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 234 | // ── more radii ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 239 | // ── opacity levels ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 284 | // ── flex alignment variants ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 319 | // ── position offsets ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 338 | // ════════════ comprehensive expansion (toward full category coverage) ════════════ | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 340 | // ── sizing breadth ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 374 | // ── spacing breadth (padding visible inside; margin via wrapper) ───────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 448 | // ── color breadth (more hues/shades) ──────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 557 | // ── position breadth ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/comparisons/conformance/cases.tsx | 603 | // ── honest gaps (utilities tamagui's tailwind mode doesn't convert yet) ─────── | COMMENT |
| MEDIUM | code/core/web/src/helpers/getSplitStyles.tsx | 149 | // ── conditions ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/language-service/src/extract-sucrase.ts | 117 | // ── pass 1: imported vocabulary ──────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/language-service/src/extract-sucrase.ts | 182 | // ── pass 2: sites ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/language-service/src/extract-estree.ts | 139 | // ── pass 1: imported vocabulary ────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/language-service/src/extract-estree.ts | 178 | // ── pass 2: sites ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/tailwind/src/composedResolver.ts | 60 | // ── Gradients ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/tailwind/src/composedResolver.ts | 90 | // ── Box Shadows (ring, inset-ring, inset-shadow, shadow) ────────────── | COMMENT |
| MEDIUM | code/core/tailwind/src/composedResolver.ts | 175 | // ── Filters & Drop Shadow ───────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/tailwind/src/composedResolver.ts | 218 | // ── Transforms ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/tailwind/src/composedResolver.ts | 241 | // ── Line height ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/tailwind/src/composedResolver.ts | 249 | // ── Master Resolver ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ore/tailwind/src/__tests__/resolveVariantProps.test.ts | 15 | // ── Ring & Shadows ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ore/tailwind/src/__tests__/resolveVariantProps.test.ts | 61 | // ── Gradients ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ore/tailwind/src/__tests__/resolveVariantProps.test.ts | 99 | // ── Filters & Drop Shadow ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …ore/tailwind/src/__tests__/resolveVariantProps.test.ts | 123 | // ── Transforms ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ore/tailwind/src/__tests__/resolveVariantProps.test.ts | 135 | // ── Text Shadows ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ore/tailwind/src/__tests__/resolveVariantProps.test.ts | 152 | // ── Conditional Modifiers ─────────────────────────────────────────── | COMMENT |
| MEDIUM | code/core/to-tailwind/src/transform.ts | 444 | // ── helpers ────────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 16 | // ── layout ─────────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 38 | // ── flexbox ────────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 67 | // ── spacing ────────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 81 | // ── sizing ─────────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 93 | // ── typography ─────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 111 | // ── backgrounds ────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 123 | // ── borders ────────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 151 | // ── effects ────────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 170 | // ── transforms ─────────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 188 | // ── interactive states ─────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 212 | // ── media queries ──────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 228 | // ── styled variants ────────────────────────────────── | COMMENT |
| MEDIUM | code/kitchen-sink/tests/StyleValidation.test.tsx | 248 | // ── visual screenshot ──────────────────────────────── | COMMENT |
| 17 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plans/native-fast-path.md | 141 | COMMENT | |
| LOW | code/ui/ui/src/index.ts | 1 | // @tamagui/ui — the unstyled, behavior-first primitive surface. | COMMENT |
| LOW | …i/components-test/AnimatedLeadingRatio.native.test.tsx | 1 | import { getDefaultTamaguiConfig } from '@tamagui/config-default' | COMMENT |
| LOW | …components-test/ReanimatedLeadingRatio.native.test.tsx | 1 | import { getDefaultTamaguiConfig } from '@tamagui/config-default' | COMMENT |
| LOW | code/ui/popper/src/Popper.tsx | 601 | // scoped poppers with multiple triggers: set the reference on | COMMENT |
| LOW | code/ui/portal/types/PortalProps.d.ts | 21 | //# sourceMappingURL=PortalProps.d.ts.map | COMMENT |
| LOW | code/ui/input/types/InputNativeProps.d.ts | 341 | //# sourceMappingURL=InputNativeProps.d.ts.map | COMMENT |
| LOW | code/ui/accordion/types/Accordion.d.ts | 121 | //# sourceMappingURL=Accordion.d.ts.map | COMMENT |
| LOW | code/ui/tamagui/src/toast.ts | 1 | // `tamagui/toast` — the styled Toast: the unstyled @tamagui/toast behavior + | COMMENT |
| LOW | code/ui/tamagui/src/unstyled.ts | 1 | // `tamagui/unstyled` — the unstyled, behavior-first primitives. | COMMENT |
| LOW | code/ui/tamagui/src/components/Surface.tsx | 1 | // Surface — a copied panel / well / toolbar fixture, not a framework component. | COMMENT |
| LOW | code/ui/tamagui/src/components/facets.tsx | 1 | // Facets — the composable Surface chrome + interaction variants, shipped in the | COMMENT |
| LOW | code/ui/image/types/createImage.d.ts | 101 | //# sourceMappingURL=createImage.d.ts.map | COMMENT |
| LOW | code/ui/popover/src/useFloatingContext.tsx | 21 | // reference when the cursor enters a new trigger — but useEffect hasn't | COMMENT |
| LOW | code/ui/popover/src/useFloatingContext.tsx | 241 | // | COMMENT |
| LOW | code/ui/text/types/types.d.ts | 61 | //# sourceMappingURL=types.d.ts.map | COMMENT |
| LOW | …/ui/sheet/types/useSheetScrollViewGestures.native.d.ts | 21 | //# sourceMappingURL=useSheetScrollViewGestures.native.d.ts.map | COMMENT |
| LOW | code/ui/sheet/src/SheetImplementationCustom.tsx | 201 | // Only update stable size when sheet is open | COMMENT |
| LOW | code/ui/sheet/src/SheetImplementationCustom.tsx | 221 | const isWebKbSheet = isWeb && hasFit && moveOnKeyboardChange | COMMENT |
| LOW | code/ui/sheet/src/SheetImplementationCustom.tsx | 541 | COMMENT | |
| LOW | code/ui/sheet/src/SheetImplementationCustom.tsx | 1041 | // close-complete transition event) so it never overlaps the page when | COMMENT |
| LOW | code/ui/sheet/src/types.tsx | 161 | lockScrollAtTop?: boolean | COMMENT |
| LOW | code/comparisons/conformance/cases.tsx | 1 | import type { ReactNode } from 'react' | COMMENT |
| LOW | code/core/native-registry/cpp/HybridTamaguiRegistry.cpp | 1 | #include "HybridTamaguiRegistry.hpp" | COMMENT |
| LOW | code/core/native-registry/cpp/HybridTamaguiRegistry.cpp | 21 | #include <unordered_set> | COMMENT |
| LOW | code/core/core-test/themeMediaOverRender.web.test.tsx | 1 | // Guards the granular re-render contract: | COMMENT |
| LOW | code/core/core-test/styledContextTokens.web.test.tsx | 161 | } as const, | COMMENT |
| LOW | …de/core/core-test/passThroughHookOrder.native.test.tsx | 1 | // on native, hooks.useChildren reads the TextAncestor context (a React hook) | COMMENT |
| LOW | code/core/core-test/getSplitStyles.web.test.tsx | 741 | // let response = fn() | COMMENT |
| LOW | code/core/core-test/getSplitStyles.web.test.tsx | 761 | // } | COMMENT |
| LOW | code/core/core-test/getSplitStyles.web.test.tsx | 781 | // { | COMMENT |
| LOW | code/core/core-test/getSplitStyles.web.test.tsx | 801 | // } | COMMENT |
| LOW | code/core/core-test/getSplitStyles.web.test.tsx | 821 | // this test is failing: | COMMENT |
| LOW | code/core/core-test/View.web.test.tsx | 41 | // expect(renderCount.current).toBe(1) | COMMENT |
| LOW | code/core/core-test/View.web.test.tsx | 61 | // expect(renderCount.current).toBe(1) | COMMENT |
| LOW | code/core/core-test/layerParity.web.test.tsx | 1 | // the layer-parity suite (candidate-divergence review, 2026-07-31): identical | COMMENT |
| LOW | code/core/core-test/parserAgreement.web.test.tsx | 1 | // Parser agreement. | COMMENT |
| LOW | code/core/core-test/parserAgreement.web.test.tsx | 541 | }) | COMMENT |
| LOW | …de/core/core-test/mediaKeyedSubscriptions.web.test.tsx | 1 | // Media subscriptions are indexed by the media key a component actually reads, | COMMENT |
| LOW | code/core/core-test/getStylesAtomic.web.test.tsx | 141 | } | COMMENT |
| LOW | code/core/core-test/getStylesAtomic.web.test.tsx | 161 | // console.log('end0', end0) | COMMENT |
| LOW | code/core/core-test/getStylesAtomic.web.test.tsx | 181 | // console.log('took', performance.now() - start) | COMMENT |
| LOW | code/core/core/internal-runtime/index.js | 1 | // compat with bundlers that resolve this directory instead of the package `exports` | COMMENT |
| LOW | code/core/core/src/index.tsx | 61 | export const View = WebView as any as RNTamaguiView | COMMENT |
| LOW | code/core/core/src/index.tsx | 81 | COMMENT | |
| LOW | code/core/core/src/index.tsx | 101 | // backgroundColor: 'green', | COMMENT |
| LOW | code/core/native/types/index.d.ts | 41 | //# sourceMappingURL=index.d.ts.map | COMMENT |
| LOW | code/core/native/src/gestureState.ts | 321 | if (isOwner()) { | COMMENT |
| LOW | code/core/config/types/v6.d.ts | 2541 | //# sourceMappingURL=v6.d.ts.map | COMMENT |
| LOW | code/core/web/types/helpers/grammarConfig.d.ts | 41 | //# sourceMappingURL=grammarConfig.d.ts.map | COMMENT |
| LOW | code/core/web/types/helpers/warnOnce.d.ts | 21 | //# sourceMappingURL=warnOnce.d.ts.map | COMMENT |
| LOW | code/core/web/types/helpers/registerCSSVariable.d.ts | 21 | //# sourceMappingURL=registerCSSVariable.d.ts.map | COMMENT |
| LOW | code/core/web/types/helpers/getSplitStyles.d.ts | 21 | //# sourceMappingURL=getSplitStyles.d.ts.map | COMMENT |
| LOW | code/core/web/types/helpers/fluid.d.ts | 21 | //# sourceMappingURL=fluid.d.ts.map | COMMENT |
| LOW | code/core/web/types/interfaces/RNExclusiveTypes.d.ts | 21 | //# sourceMappingURL=RNExclusiveTypes.d.ts.map | COMMENT |
| LOW | code/core/web/internal-runtime/index.js | 1 | // compat with bundlers that resolve this directory instead of the package `exports` | COMMENT |
| LOW | code/core/web/src/createComponent.tsx | 561 | // `nextState` is the source of truth for the fast `setStateShallow` path; it | COMMENT |
| LOW | code/core/web/src/createComponent.tsx | 641 | if (isAnimatedCustomComponent) { | COMMENT |
| LOW | code/core/web/src/createComponent.tsx | 1381 | viewProps.passThrough = passThrough | COMMENT |
| LOW | code/core/web/src/types.tsx | 701 | focus?: boolean | COMMENT |
| 177 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code/ui/components-test/Input.web.test.tsx | 94 | expect(input).toHaveAttribute('placeholder', 'Enter text') | CODE |
| LOW | code/ui/input/types/Input.d.ts | 7 | export declare const Input: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@tamagui | CODE |
| LOW | code/ui/input/types/Input.d.ts | 9 | }>, "about" | "accept" | "accessKey" | "allowFontScaling" | "alt" | "aria-activedescendant" | "aria-atomic" | "aria-auto | CODE |
| LOW | code/ui/input/types/Input.d.ts | 46 | }, "KhtmlBoxAlign" | "KhtmlBoxDirection" | "KhtmlBoxFlex" | "KhtmlBoxFlexGroup" | "KhtmlBoxLines" | "KhtmlBoxOrdinalGrou | CODE |
| LOW | code/ui/input/types/TextArea.d.ts | 2 | export declare const TextArea: import("@tamagui/web").TamaguiComponent<import("@tamagui/web").TamaDefer, import("@tamagu | CODE |
| LOW | code/ui/input/types/TextArea.d.ts | 4 | }>, "about" | "accept" | "accessKey" | "allowFontScaling" | "alt" | "aria-activedescendant" | "aria-atomic" | "aria-auto | CODE |
| LOW | code/ui/input/types/TextArea.d.ts | 41 | }, "KhtmlBoxAlign" | "KhtmlBoxDirection" | "KhtmlBoxFlex" | "KhtmlBoxFlexGroup" | "KhtmlBoxLines" | "KhtmlBoxOrdinalGrou | CODE |
| LOW | code/ui/input/types/Input.native.d.ts | 8 | export declare const Input: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, TextInputInstanc | CODE |
| LOW | code/ui/input/types/Input.native.d.ts | 10 | }>, "about" | "accept" | "accessKey" | "allowFontScaling" | "alt" | "aria-activedescendant" | "aria-atomic" | "aria-auto | CODE |
| LOW | code/ui/input/types/Input.native.d.ts | 47 | }, "KhtmlBoxAlign" | "KhtmlBoxDirection" | "KhtmlBoxFlex" | "KhtmlBoxFlexGroup" | "KhtmlBoxLines" | "KhtmlBoxOrdinalGrou | CODE |
| LOW | code/ui/input/src/inputTypes.test-d.ts | 83 | expectTypeOf<InputProps>().toHaveProperty('placeholder') | CODE |
| LOW | code/ui/input/src/inputTypes.test-d.ts | 230 | expectTypeOf<TextAreaProps>().toHaveProperty('placeholder') | CODE |
| LOW | code/ui/tamagui/types/components/Input.d.ts | 3 | export declare const Input: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@tamagui | CODE |
| LOW | code/ui/tamagui/types/components/Input.d.ts | 5 | }>, "about" | "accept" | "accessKey" | "allowFontScaling" | "alt" | "aria-activedescendant" | "aria-atomic" | "aria-auto | CODE |
| LOW | code/ui/tamagui/types/components/Input.d.ts | 45 | export declare const TextArea: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@tama | CODE |
| LOW | code/ui/tamagui/types/components/Input.d.ts | 47 | }>, "about" | "accept" | "accessKey" | "allowFontScaling" | "alt" | "aria-activedescendant" | "aria-atomic" | "aria-auto | CODE |
| LOW | code/ui/tamagui/types/components/Select.d.ts | 9 | export declare const SelectValue: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@t | CODE |
| LOW | code/ui/tamagui/types/components/Select.d.ts | 105 | Value: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@tamagui/core").TamaguiTe | CODE |
| LOW | code/ui/tamagui/types/components/Select.d.ts | 164 | Value: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@tamagui/core").TamaguiTe | CODE |
| LOW | code/ui/image/src/createImage.tsx | 114 | 'placeholder', | CODE |
| LOW | code/ui/select/types/Select.d.ts | 11 | export declare const SelectValue: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@t | CODE |
| LOW | code/ui/select/types/Select.d.ts | 15 | }, import("@tamagui/core").TextStylePropsBase, Omit<{}, "placeholder" | "scope">, import("@tamagui/core").StaticConfigPu | CODE |
| LOW | code/ui/select/types/Select.d.ts | 70 | Value: import("@tamagui/core").TamaguiComponent<import("@tamagui/core").TamaDefer, import("@tamagui/core").TamaguiTe | CODE |
| LOW | code/ui/select/types/Select.d.ts | 74 | }, import("@tamagui/core").TextStylePropsBase, Omit<{}, "placeholder" | "scope">, import("@tamagui/core").StaticConf | CODE |
| LOW | code/core/core-test/domHtml.web.test.tsx | 135 | expect(input.getAttribute('placeholder')).toBe('you@example.com') | CODE |
| LOW | code/core/dom/src/tables/attributes.ts | 806 | nativeProp: 'placeholder', | CODE |
| LOW | code/core/dom/src/__tests__/rsd-snapshot.json | 379 | "placeholder", | CODE |
| LOW | code/core/dom/src/__tests__/rsd-snapshot.json | 951 | "placeholder", | CODE |
| LOW | code/core/dom/src/__tests__/rsd-snapshot.json | 1611 | "placeholder", | CODE |
| LOW | code/core/style-grammar/src/tooling/registry.ts | 170 | { prop: 'placeholderTextColor', prefix: 'placeholder' }, | CODE |
| LOW | code/tamagui.dev/features/mdx/codeExamples.tsx | 66 | <Heading size={props.big ? 'large' : 'small'}>Lorem ipsum.</Heading> | CODE |
| LOW | code/tamagui.dev/features/mdx/codeExamples.tsx | 97 | Lorem ipsum. | CODE |
| LOW | code/tamagui.dev/features/mdx/codeExamples.tsx | 163 | Lorem ipsum. | CODE |
| LOW | code/tamagui.dev/features/mdx/codeExamples.tsx | 186 | Lorem ipsum. | CODE |
| LOW | …tamagui.dev/features/studio/theme/preview/AllTasks.tsx | 34 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Illum amet | CODE |
| LOW | …tamagui.dev/features/studio/theme/preview/AllTasks.tsx | 34 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Illum amet | CODE |
| LOW | …tamagui.dev/features/studio/theme/preview/AllTasks.tsx | 47 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Illum amet | CODE |
| LOW | …tamagui.dev/features/studio/theme/preview/AllTasks.tsx | 47 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Illum amet | CODE |
| LOW | …tamagui.dev/features/studio/theme/preview/AllTasks.tsx | 60 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Illum amet | CODE |
| LOW | …tamagui.dev/features/studio/theme/preview/AllTasks.tsx | 60 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Illum amet | CODE |
| LOW | code/kitchen-sink/tests/NewInputBasic.test.tsx | 11 | await expect(input).toHaveAttribute('placeholder', 'Basic input') | CODE |
| LOW | code/kitchen-sink/tests/NewInputBasic.test.tsx | 49 | await expect(textarea).toHaveAttribute('placeholder', 'Basic textarea') | CODE |
| LOW | code/kitchen-sink/src/Sandbox.tsx | 18 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna a | CODE |
| LOW | code/kitchen-sink/src/Sandbox.tsx | 18 | 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna a | CODE |
| LOW | code/kitchen-sink/src/usecases/RemoveScrollCase.tsx | 25 | Filler paragraph {i + 1}. Lorem ipsum dolor sit amet, consectetur adipiscing | CODE |
| LOW | code/kitchen-sink/src/usecases/RemoveScrollCase.tsx | 25 | Filler paragraph {i + 1}. Lorem ipsum dolor sit amet, consectetur adipiscing | CODE |
| LOW | code/kitchen-sink/src/usecases/SheetScrollLockCase.tsx | 21 | Scroll down to find the sheet buttons. Lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | code/kitchen-sink/src/usecases/SheetScrollLockCase.tsx | 21 | Scroll down to find the sheet buttons. Lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | code/kitchen-sink/src/usecases/SheetScrollLockCase.tsx | 33 | Body content paragraph {i + 1}. Lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | code/kitchen-sink/src/usecases/SheetScrollLockCase.tsx | 33 | Body content paragraph {i + 1}. Lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | code/kitchen-sink/src/usecases/SheetScrollLockCase.tsx | 144 | ScrollView paragraph {i + 1}. Lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | code/kitchen-sink/src/usecases/SheetScrollLockCase.tsx | 144 | ScrollView paragraph {i + 1}. Lorem ipsum dolor sit amet, consectetur | CODE |
| LOW | …e/kitchen-sink/src/usecases/SheetSnapPointsFitCase.tsx | 542 | <Paragraph>Row {i + 1} — Lorem ipsum dolor sit amet.</Paragraph> | CODE |
| LOW | …e/kitchen-sink/src/usecases/SheetSnapPointsFitCase.tsx | 542 | <Paragraph>Row {i + 1} — Lorem ipsum dolor sit amet.</Paragraph> | CODE |
| LOW | code/kitchen-sink/src/usecases/OverlayStyled.tsx | 36 | <MyAlert.Description>Lorem ipsum dolor sit amet</MyAlert.Description> | CODE |
| LOW | code/kitchen-sink/src/usecases/OverlayStyled.tsx | 36 | <MyAlert.Description>Lorem ipsum dolor sit amet</MyAlert.Description> | CODE |
| LOW | code/kitchen-sink/src/usecases/OverlayStyled.tsx | 56 | <MyAlert.Description>Lorem ipsum dolor sit amet</MyAlert.Description> | CODE |
| LOW | code/kitchen-sink/src/usecases/OverlayStyled.tsx | 56 | <MyAlert.Description>Lorem ipsum dolor sit amet</MyAlert.Description> | CODE |
| LOW | code/kitchen-sink/src/usecases/Example.tsx | 8 | {/* <Heading size={props.big ? 'large' : 'small'}>Lorem ipsum dolor.</Heading> */} | CODE |
| LOW | code/kitchen-sink/src/usecases/CodeExamplesInput.tsx | 6 | Lorem ipsum dolor. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | plans/v3-beta/web-alignment-steps.md | 113 | ### Step 1: Canonical Web CSS Type Schema | COMMENT |
| LOW⚡ | plans/v3-beta/web-alignment-steps.md | 118 | ### Step 2: Shorthand & Property Expansion in `@tamagui/style-grammar` | COMMENT |
| LOW⚡ | plans/v3-beta/web-alignment-steps.md | 126 | ### Step 3: Migration Codemod (`tamagui migrate --web-align`) | COMMENT |
| LOW | plans/v3-beta/web-alignment-steps.md | 137 | ### Step 4: Cement `html.*` as the Primary Styling Interface | COMMENT |
| LOW | plans/v3-beta/web-alignment-steps.md | 143 | ### Step 5: Positioning & Documentation | COMMENT |
| LOW | …core/animations-motion/MOTION_INTERRUPTION_RESEARCH.md | 133 | ### Step 6: The new animation starts from the current mid-flight position | COMMENT |
| LOW⚡ | code/packages/native-ci/src/runner.ts | 42 | // Step 1: Generate fingerprint | COMMENT |
| LOW⚡ | code/packages/native-ci/src/runner.ts | 51 | // Step 2: Check cache | COMMENT |
| LOW | code/packages/native-ci/src/runner.ts | 67 | // Step 3: Run build | COMMENT |
| LOW | code/packages/native-ci/src/runner.ts | 81 | // Step 4: Save cache | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | code/ui/sheet/src/useGestureHandlerPan.tsx | 253 | // This allows seamless handoffs between pan and scroll | COMMENT |
| MEDIUM | code/comparisons/conformance/run.ts | 204 | // read #cfm-root's rect via getBoundingClientRect (robust — playwright's locator.boundingBox() | COMMENT |
| MEDIUM | code/comparisons/conformance/run.ts | 204 | // read #cfm-root's rect via getBoundingClientRect (robust — playwright's locator.boundingBox() | COMMENT |
| MEDIUM | scripts/lib/registry/deps.ts | 6 | // specifier string, so a specifier-anchored scan is robust across line breaks. | COMMENT |
| MEDIUM | .github/scripts/run-maestro-flows.sh | 4 | # fails. the previous harness re-ran the WHOLE suite on any failure and only | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code/ui/create-menu/src/createBaseMenu.tsx | 548 | // For submenus, we need to check if the root menu is still open | COMMENT |
| LOW⚡ | code/packages/native-ci/src/runner.ts | 42 | // Step 1: Generate fingerprint | COMMENT |
| LOW⚡ | code/packages/native-ci/src/runner.ts | 51 | // Step 2: Check cache | COMMENT |
| LOW | code/packages/native-ci/src/runner.ts | 67 | // Step 3: Run build | COMMENT |
| LOW | code/packages/native-ci/src/runner.ts | 81 | // Step 4: Save cache | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | code/tamagui.dev/public/robots.txt | 16 | # include providing AI-generated search summaries. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | plans/getSplitStyles-behavior-inventory.md | 176 | ## Component orchestration history | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code/kitchen-sink/run-detox.sh | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | code/starters/remix/app/entry.server.tsx | 6 | export default function handleRequest( | CODE |