Files
ONE-OS/.agents/skills/ui-ux-pro-max/data/app-interface.csv
王冕 2018e34473 feat(web): 同步当前原型页与工具配置改动
统一提交当前工作区内的页面原型调整、新增运维相关页面以及本地工具配置目录变更,便于整体同步到远端环境继续联调与演示。

Made-with: Cursor
2026-04-01 13:28:56 +08:00

9.5 KiB

1NoCategoryIssueKeywordsPlatformDescriptionDoDon'tCode Example GoodCode Example BadSeverity
21AccessibilityIcon Button Labelsicon button accessibilityLabeliOS/Android/React NativeIcon-only buttons must expose an accessible labelSet accessibilityLabel or label prop on icon buttonsIcon buttons without accessible names<Pressable accessibilityLabel="Close"><XIcon /></Pressable><Pressable><XIcon /></Pressable>Critical
32AccessibilityForm Control Labelsform input label accessibilityLabeliOS/Android/React NativeAll inputs must have a visible label and an accessibility labelPair Text label with input and set accessibilityLabelInputs with placeholder only<View><Text>Email</Text><TextInput accessibilityLabel="Email address" /></View><TextInput placeholder="Email" /></View>Critical
43AccessibilityRole & TraitsaccessibilityRole accessibilityTraitsiOS/Android/React NativeInteractive elements must expose correct roles/traitsUse accessibilityRole/button/link/checkbox etc.Rely on generic views with no roles<Pressable accessibilityRole="button">Submit</Pressable><View onTouchStart={submit}>Submit</View>High
54AccessibilityDynamic UpdatesaccessibilityLiveRegion announceiOS/Android/React NativeAsync status updates should be announced to screen readersUse accessibilityLiveRegion or announceForAccessibilityUpdate text silently with no announcement<Text accessibilityLiveRegion="polite">{status}</Text><Text>{status}</Text>Medium
65AccessibilityDecorative Iconsaccessible={false} importantForAccessibilityiOS/Android/React NativeDecorative icons should be hidden from screen readersMark decorative icons as not accessibleHave screen reader read every icon<Icon accessible={false} importantForAccessibility="no" /><Icon />Medium
76TouchTouch Target Sizetouch 44x44 hitSlopiOS/Android/React NativePrimary touch targets must be at least 44x44ptIncrease hitSlop or padding to meet minimumSmall icons with tiny touch area<Pressable hitSlop={10}><Icon /></Pressable><Pressable><Icon style={{ width: 16, height: 16 }} /></Pressable>Critical
87TouchTouch Spacingtouch spacing gap 8pxiOS/Android/React NativeAdjacent touch targets need enough spacingKeep at least 8dp spacing between touchablesCluster many buttons with no gap<View style={{ gap: 8 }}><Button ... /><Button ... /></View><View><Button ... /><Button ... /></View>Medium
98TouchGesture Conflictsscroll swipe back gestureiOS/Android/React NativeCustom gestures must not break system scroll/backReserve horizontal swipes for carouselsFull-screen custom swipe conflicting with backHorizontalPager inside vertical ScrollViewPanResponder on full screen blocking backHigh
109NavigationBack Behaviorback handler navigation stackiOS/Android/React NativeBack navigation should be predictable and preserve stateUse navigation.goBack and keep screen stateReset stack or exit app unexpectedlyonPress={() => navigation.goBack()}BackHandler.exitApp() on first pressCritical
1110NavigationBottom Tabstab bar max itemsiOS/Android/React NativeBottom tab bar should have at most 5 primary itemsUse 3–5 tabs and move extras to More/SettingsOverloaded tab bar with many iconsHome/Explore/Profile/SettingsHome/Explore/Shop/Cart/Profile/Settings/MoreMedium
1211NavigationModal Escapemodal dismiss close affordanceiOS/Android/React NativeModals/sheets must have clear close actionsProvide close button and swipe-down where platform expectsTrapping users in modal with no obvious exit<Modal><Button title="Close" onPress={onClose} /></Modal><Modal><View>{children}</View></Modal>High
1312StatePreserve Screen Statenavigation preserve stateiOS/Android/React NativeReturning to a screen should restore its scroll and form stateKeep components mounted or persist stateReset list scroll and form inputs on every visit<Tab.Navigator screenOptions={{ unmountOnBlur: false }}><Tab.Screen options={{ unmountOnBlur: true }} />Medium
1413FeedbackLoading Indicatorsactivity indicator skeletoniOS/Android/React NativeShow visible feedback during network operationsUse ActivityIndicator or skeleton for >300ms operationsLeave button and screen frozen{loading ? <ActivityIndicator /> : <Button title="Save" />}<Button title="Save" onPress={submit} /> // no loadingHigh
1514FeedbackSuccess Feedbacktoast checkmark banneriOS/Android/React NativeConfirm successful actions with brief feedbackShow toast/checkmark or bannerComplete actions silently with no confirmationshowToast('Saved successfully')// silently update state onlyMedium
1615FeedbackError Feedbackinline error banneriOS/Android/React NativeShow clear error messages near the probleminput-level error + summary bannerOnly change border color with no explanation<TextInput ... /><Text style={{color:'red'}}>{error}</Text><TextInput style={{borderColor:'red'}} />High
1716FormsInline ValidationonBlur validationiOS/Android/React NativeValidate inputs on blur or submit with clear messagingValidate onBlur and onSubmitValidate on every keystroke causing jankonBlur={() => validateEmail(value)}onChangeText={v => validateEmail(v)} // every charMedium
1817FormsKeyboard TypekeyboardType returnKeyTypeiOS/Android/React NativeUse appropriate keyboardType and returnKeyTypeMatch email/tel/number/search typesUse default keyboard for all inputs<TextInput keyboardType="email-address" /><TextInput keyboardType="default" />Medium
1918FormsAuto Focus & NextautoFocus blurOnSubmit onSubmitEditingiOS/Android/React NativeGuide users through form fields with Next/Done flowsUse onSubmitEditing to focus next inputForce users to tap each field manuallyonSubmitEditing={() => nextRef.current?.focus()}// no onSubmitEditing, manual tap onlyLow
2019FormsPassword VisibilitysecureTextEntry toggleiOS/Android/React NativeAllow toggling password visibility securelyProvide Show/Hide icon toggling secureTextEntryForce users to type blind with no option<TextInput secureTextEntry={secure} /><Icon onPress={toggle} /><TextInput secureTextEntry /> // no toggleMedium
2120PerformanceVirtualize Long ListsFlatList SectionList virtualizationiOS/Android/React NativeUse FlatList/SectionList for lists over ~50 itemsUse keyExtractor and initialNumToRender appropriatelyRender hundreds of items with ScrollView<FlatList data={items} renderItem={...} /><ScrollView>{items.map(renderItem)}</ScrollView>High
2221PerformanceImage Size & CacheImage resize cacheiOS/Android/React NativeUse correctly sized and cached imagesUse Image component with proper resizeMode and cachingLoad full-resolution images everywhere<Image source={{uri}} resizeMode="cover" /><Image source={require('4k.png')} /> // small avatarMedium
2322PerformanceDebounce High-Freq Eventsdebounce scroll searchiOS/Android/React NativeDebounce scroll/search callbacks to avoid jankWrap handlers with debounce/throttleRun heavy logic on every eventonScroll={debouncedHandleScroll}onScroll={handleScrollHeavy}Medium
2423AnimationDuration & Easinganimation duration easingiOS/Android/React NativeMicro-interactions should be 150–300ms with native-like easingUse ease-out for enter/ease-in for exitUse long or linear animations for core UIAnimated.timing(..., { duration: 200, easing: Easing.out(Easing.quad) })Animated.timing(..., { duration: 800, easing: Easing.linear })Medium
2524AnimationRespect Reduced Motionreduced motion accessibilityiOS/Android/React NativeRespect OS reduced-motion accessibility settingCheck reduceMotionEnabled and simplify animationsIgnore user motion preferencesif (reduceMotionEnabled) skipAnimation()Always run complex parallax animationsCritical
2625AnimationLimited Continuous Motionloop animation loaderiOS/Android/React NativeReserve infinite animations for loaders and live dataUse looping only where necessaryKeep decorative elements looping foreverAnimated.loop(loaderAnim) for ActivityIndicatorAnimated.loop(bounceAnim) on background iconsMedium
2726TypographyBase Font SizefontScale dynamic typeiOS/Android/React NativeBody text must be readable and support Dynamic TypeUse platform fontScale and at least 14–16pt baseRender critical text below 12pt<Text style={{ fontSize: 16 }}>Body</Text><Text style={{ fontSize: 10 }}>Body</Text>High
2827TypographyDynamic Type SupportallowFontScaling adjustsFontSizeToFitiOS/Android/React NativeSupport system text scaling without breaking layoutSet allowFontScaling and test large textDisable scaling on all text globally<Text allowFontScaling>{label}</Text><Text allowFontScaling={false}>{label}</Text>High
2928Safe AreasSafe Area Insetssafe area insets notch gestureiOS/Android/React NativeContent must not overlap notches/gesture barsWrap screens in SafeAreaView or apply insetsPlace tappable content under system bars<SafeAreaView style={{ flex: 1 }}><Screen /></SafeAreaView><View style={{ flex: 1 }}><Screen /></View>High
3029ThemingLight/Dark Contrastdark mode contrast tokensiOS/Android/React NativeEnsure sufficient contrast in both light and dark themesUse semantic tokens and test both themesReuse light-theme grays directly in dark modecolors.textPrimaryDark = '#F9FAFB'colors.textPrimaryDark = '#9CA3AF' on '#111827'High
3130Anti-PatternNo Gesture-Only Actionsgesture only hidden controlsiOS/Android/React NativeDon't rely solely on hidden gestures for core actionsProvide visible buttons in addition to gesturesRely on swipe/shake only with no UI affordanceSwipe to delete + visible Delete buttonOnly shake device to undo with no UICritical