@unif/react-native-design 0.8.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -2
- package/lib/module/components/business/AvatarWithRing/AvatarWithRing.js +6 -4
- package/lib/module/components/business/AvatarWithRing/AvatarWithRing.js.map +1 -1
- package/lib/module/components/business/AvatarWithRing/styles.js +15 -3
- package/lib/module/components/business/AvatarWithRing/styles.js.map +1 -1
- package/lib/module/components/business/Decorations/GradientWash.js +50 -36
- package/lib/module/components/business/Decorations/GradientWash.js.map +1 -1
- package/lib/module/components/business/Decorations/RadialHalo.js +10 -4
- package/lib/module/components/business/Decorations/RadialHalo.js.map +1 -1
- package/lib/module/components/business/Decorations/ScreenBackdrop.js +22 -14
- package/lib/module/components/business/Decorations/ScreenBackdrop.js.map +1 -1
- package/lib/module/components/business/Decorations/index.js +3 -0
- package/lib/module/components/business/Decorations/index.js.map +1 -1
- package/lib/module/components/business/GlassStats/GlassStats.js +7 -4
- package/lib/module/components/business/GlassStats/GlassStats.js.map +1 -1
- package/lib/module/components/business/GlassStats/types.js +2 -0
- package/lib/module/components/business/VersionPill/VersionPill.js +23 -5
- package/lib/module/components/business/VersionPill/VersionPill.js.map +1 -1
- package/lib/module/components/business/VersionPill/styles.js +1 -1
- package/lib/module/components/business/index.js.map +1 -1
- package/lib/module/components/business/useSvgId.js +20 -0
- package/lib/module/components/business/useSvgId.js.map +1 -0
- package/lib/module/components/ui/Avatar/Avatar.js +13 -8
- package/lib/module/components/ui/Avatar/Avatar.js.map +1 -1
- package/lib/module/components/ui/Avatar/styles.js +7 -7
- package/lib/module/components/ui/Avatar/styles.js.map +1 -1
- package/lib/module/components/ui/BlurLayer/BlurLayer.js +5 -1
- package/lib/module/components/ui/BlurLayer/BlurLayer.js.map +1 -1
- package/lib/module/components/ui/BlurLayer/BlurLayer.web.js +7 -1
- package/lib/module/components/ui/BlurLayer/BlurLayer.web.js.map +1 -1
- package/lib/module/components/ui/Button/Button.js +2 -1
- package/lib/module/components/ui/Button/Button.js.map +1 -1
- package/lib/module/components/ui/Button/ButtonBase.js +36 -2
- package/lib/module/components/ui/Button/ButtonBase.js.map +1 -1
- package/lib/module/components/ui/Button/styles.js +27 -25
- package/lib/module/components/ui/Button/styles.js.map +1 -1
- package/lib/module/components/ui/Card/Card.js +17 -8
- package/lib/module/components/ui/Card/Card.js.map +1 -1
- package/lib/module/components/ui/Card/styles.js +6 -1
- package/lib/module/components/ui/Card/styles.js.map +1 -1
- package/lib/module/components/ui/Carousel/Carousel.js +36 -6
- package/lib/module/components/ui/Carousel/Carousel.js.map +1 -1
- package/lib/module/components/ui/Cell/Cell.js +23 -5
- package/lib/module/components/ui/Cell/Cell.js.map +1 -1
- package/lib/module/components/ui/Cell/Leading.js +2 -2
- package/lib/module/components/ui/Cell/Leading.js.map +1 -1
- package/lib/module/components/ui/Cell/List.js +10 -5
- package/lib/module/components/ui/Cell/List.js.map +1 -1
- package/lib/module/components/ui/Cell/styles.js +7 -6
- package/lib/module/components/ui/Cell/styles.js.map +1 -1
- package/lib/module/components/ui/Checkbox/Checkbox.js +10 -8
- package/lib/module/components/ui/Checkbox/Checkbox.js.map +1 -1
- package/lib/module/components/ui/Checkbox/styles.js +9 -1
- package/lib/module/components/ui/Checkbox/styles.js.map +1 -1
- package/lib/module/components/ui/Chip/Chip.js +19 -5
- package/lib/module/components/ui/Chip/Chip.js.map +1 -1
- package/lib/module/components/ui/Confirm/ConfirmHost.js +28 -11
- package/lib/module/components/ui/Confirm/ConfirmHost.js.map +1 -1
- package/lib/module/components/ui/Confirm/confirm.js +6 -0
- package/lib/module/components/ui/Confirm/confirm.js.map +1 -1
- package/lib/module/components/ui/DrawerHeader/DrawerHeader.js +14 -9
- package/lib/module/components/ui/DrawerHeader/DrawerHeader.js.map +1 -1
- package/lib/module/components/ui/DrawerHeader/styles.js +10 -6
- package/lib/module/components/ui/DrawerHeader/styles.js.map +1 -1
- package/lib/module/components/ui/Empty/Empty.js +5 -4
- package/lib/module/components/ui/Empty/Empty.js.map +1 -1
- package/lib/module/components/ui/EntryCard/EntryCard.js +5 -3
- package/lib/module/components/ui/EntryCard/EntryCard.js.map +1 -1
- package/lib/module/components/ui/EntryCard/styles.js +4 -4
- package/lib/module/components/ui/EntryCard/styles.js.map +1 -1
- package/lib/module/components/ui/Form/FormRow.js +1 -0
- package/lib/module/components/ui/Form/FormRow.js.map +1 -1
- package/lib/module/components/ui/Form/styles.js +3 -1
- package/lib/module/components/ui/Form/styles.js.map +1 -1
- package/lib/module/components/ui/Grid/Grid.js +39 -24
- package/lib/module/components/ui/Grid/Grid.js.map +1 -1
- package/lib/module/components/ui/Grid/styles.js +35 -46
- package/lib/module/components/ui/Grid/styles.js.map +1 -1
- package/lib/module/components/ui/Icon/Icon.js +46 -29
- package/lib/module/components/ui/Icon/Icon.js.map +1 -1
- package/lib/module/components/ui/IconButton/IconButton.js +2 -0
- package/lib/module/components/ui/IconButton/IconButton.js.map +1 -1
- package/lib/module/components/ui/Logo/Logo.js +2 -1
- package/lib/module/components/ui/Logo/Logo.js.map +1 -1
- package/lib/module/components/ui/NavBar/NavBar.js +15 -3
- package/lib/module/components/ui/NavBar/NavBar.js.map +1 -1
- package/lib/module/components/ui/PasswordInput/PasswordInput.js +43 -14
- package/lib/module/components/ui/PasswordInput/PasswordInput.js.map +1 -1
- package/lib/module/components/ui/PasswordInput/styles.js +1 -1
- package/lib/module/components/ui/Pulse/Pulse.js +2 -1
- package/lib/module/components/ui/Pulse/Pulse.js.map +1 -1
- package/lib/module/components/ui/Pulse/PulseDot.js +8 -10
- package/lib/module/components/ui/Pulse/PulseDot.js.map +1 -1
- package/lib/module/components/ui/Pulse/types.js +2 -0
- package/lib/module/components/ui/Pulse/usePulse.web.js +51 -30
- package/lib/module/components/ui/Pulse/usePulse.web.js.map +1 -1
- package/lib/module/components/ui/Radio/Radio.js +19 -5
- package/lib/module/components/ui/Radio/Radio.js.map +1 -1
- package/lib/module/components/ui/Radio/RadioGroup.js +10 -6
- package/lib/module/components/ui/Radio/RadioGroup.js.map +1 -1
- package/lib/module/components/ui/Radio/styles.js +10 -3
- package/lib/module/components/ui/Radio/styles.js.map +1 -1
- package/lib/module/components/ui/Reveal/Reveal.web.js +18 -3
- package/lib/module/components/ui/Reveal/Reveal.web.js.map +1 -1
- package/lib/module/components/ui/Search/Search.js +26 -10
- package/lib/module/components/ui/Search/Search.js.map +1 -1
- package/lib/module/components/ui/Segmented/Segmented.js +40 -30
- package/lib/module/components/ui/Segmented/Segmented.js.map +1 -1
- package/lib/module/components/ui/Segmented/styles.js +4 -2
- package/lib/module/components/ui/Segmented/styles.js.map +1 -1
- package/lib/module/components/ui/Skeleton/Skeleton.js +9 -8
- package/lib/module/components/ui/Skeleton/Skeleton.js.map +1 -1
- package/lib/module/components/ui/Spinner/Spinner.js +15 -16
- package/lib/module/components/ui/Spinner/Spinner.js.map +1 -1
- package/lib/module/components/ui/Spinner/Spinner.web.js +10 -14
- package/lib/module/components/ui/Spinner/Spinner.web.js.map +1 -1
- package/lib/module/components/ui/Spinner/shared.js +31 -0
- package/lib/module/components/ui/Spinner/shared.js.map +1 -0
- package/lib/module/components/ui/StatusDot/StatusDot.js +21 -4
- package/lib/module/components/ui/StatusDot/StatusDot.js.map +1 -1
- package/lib/module/components/ui/StatusDot/styles.js +1 -1
- package/lib/module/components/ui/StatusDot/types.js +2 -0
- package/lib/module/components/ui/Stepper/Stepper.js +46 -10
- package/lib/module/components/ui/Stepper/Stepper.js.map +1 -1
- package/lib/module/components/ui/Switch/Switch.js +6 -11
- package/lib/module/components/ui/Switch/Switch.js.map +1 -1
- package/lib/module/components/ui/Switch/Switch.web.js +2 -8
- package/lib/module/components/ui/Switch/Switch.web.js.map +1 -1
- package/lib/module/components/ui/Switch/styles.js +12 -3
- package/lib/module/components/ui/Switch/styles.js.map +1 -1
- package/lib/module/components/ui/TabBar/TabBar.js +10 -6
- package/lib/module/components/ui/TabBar/TabBar.js.map +1 -1
- package/lib/module/components/ui/TabBar/styles.js +28 -39
- package/lib/module/components/ui/TabBar/styles.js.map +1 -1
- package/lib/module/components/ui/Tabs/Tabs.js +19 -5
- package/lib/module/components/ui/Tabs/Tabs.js.map +1 -1
- package/lib/module/components/ui/Tabs/styles.js +6 -2
- package/lib/module/components/ui/Tabs/styles.js.map +1 -1
- package/lib/module/components/ui/Tabs/types.js +2 -0
- package/lib/module/components/ui/Tag/styles.js +15 -14
- package/lib/module/components/ui/Tag/styles.js.map +1 -1
- package/lib/module/components/ui/TextField/TextFieldBase.js +24 -6
- package/lib/module/components/ui/TextField/TextFieldBase.js.map +1 -1
- package/lib/module/components/ui/Thumbnail/Thumbnail.js +11 -3
- package/lib/module/components/ui/Thumbnail/Thumbnail.js.map +1 -1
- package/lib/module/components/ui/Thumbnail/styles.js +6 -2
- package/lib/module/components/ui/Thumbnail/styles.js.map +1 -1
- package/lib/module/components/ui/Toast/ToastHost.js +16 -5
- package/lib/module/components/ui/Toast/ToastHost.js.map +1 -1
- package/lib/module/components/ui/Toast/ToastHost.web.js +21 -4
- package/lib/module/components/ui/Toast/ToastHost.web.js.map +1 -1
- package/lib/module/components/ui/Toast/styles.js +2 -0
- package/lib/module/components/ui/Toast/styles.js.map +1 -1
- package/lib/module/components/ui/Toast/toast.js +23 -3
- package/lib/module/components/ui/Toast/toast.js.map +1 -1
- package/lib/module/components/ui/shared/badgeStyles.js +31 -0
- package/lib/module/components/ui/shared/badgeStyles.js.map +1 -0
- package/lib/module/icons/data.js +45 -19
- package/lib/module/icons/data.js.map +1 -1
- package/lib/module/theme/colors.js +28 -10
- package/lib/module/theme/colors.js.map +1 -1
- package/lib/module/theme/index.js +6 -2
- package/lib/module/theme/index.js.map +1 -1
- package/lib/module/theme/scale.js +9 -1
- package/lib/module/theme/scale.js.map +1 -1
- package/lib/module/theme/shadow.js +24 -41
- package/lib/module/theme/shadow.js.map +1 -1
- package/lib/module/theme/tokens.js +10 -5
- package/lib/module/theme/tokens.js.map +1 -1
- package/lib/module/theme/usePrefersReducedMotion.js +12 -0
- package/lib/module/theme/usePrefersReducedMotion.js.map +1 -0
- package/lib/module/theme/usePrefersReducedMotion.web.js +25 -0
- package/lib/module/theme/usePrefersReducedMotion.web.js.map +1 -0
- package/lib/module/theme/useTheme.js +13 -0
- package/lib/module/theme/useTheme.js.map +1 -1
- package/lib/module/utils/logger/logger.js +5 -1
- package/lib/module/utils/logger/logger.js.map +1 -1
- package/lib/module/utils/testID/testID.js +6 -3
- package/lib/module/utils/testID/testID.js.map +1 -1
- package/lib/typescript/src/components/business/AvatarWithRing/AvatarWithRing.d.ts +1 -1
- package/lib/typescript/src/components/business/AvatarWithRing/AvatarWithRing.d.ts.map +1 -1
- package/lib/typescript/src/components/business/AvatarWithRing/styles.d.ts +5 -5
- package/lib/typescript/src/components/business/AvatarWithRing/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/business/AvatarWithRing/types.d.ts +3 -1
- package/lib/typescript/src/components/business/AvatarWithRing/types.d.ts.map +1 -1
- package/lib/typescript/src/components/business/Decorations/GradientWash.d.ts +25 -0
- package/lib/typescript/src/components/business/Decorations/GradientWash.d.ts.map +1 -1
- package/lib/typescript/src/components/business/Decorations/RadialHalo.d.ts.map +1 -1
- package/lib/typescript/src/components/business/Decorations/ScreenBackdrop.d.ts +1 -1
- package/lib/typescript/src/components/business/Decorations/ScreenBackdrop.d.ts.map +1 -1
- package/lib/typescript/src/components/business/Decorations/index.d.ts +1 -1
- package/lib/typescript/src/components/business/Decorations/index.d.ts.map +1 -1
- package/lib/typescript/src/components/business/Decorations/types.d.ts +2 -0
- package/lib/typescript/src/components/business/Decorations/types.d.ts.map +1 -1
- package/lib/typescript/src/components/business/GlassStats/GlassStats.d.ts +1 -1
- package/lib/typescript/src/components/business/GlassStats/GlassStats.d.ts.map +1 -1
- package/lib/typescript/src/components/business/GlassStats/styles.d.ts +2 -2
- package/lib/typescript/src/components/business/GlassStats/types.d.ts +5 -0
- package/lib/typescript/src/components/business/GlassStats/types.d.ts.map +1 -1
- package/lib/typescript/src/components/business/VersionPill/VersionPill.d.ts +1 -1
- package/lib/typescript/src/components/business/VersionPill/VersionPill.d.ts.map +1 -1
- package/lib/typescript/src/components/business/VersionPill/styles.d.ts +1 -1
- package/lib/typescript/src/components/business/VersionPill/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/business/VersionPill/types.d.ts +13 -1
- package/lib/typescript/src/components/business/VersionPill/types.d.ts.map +1 -1
- package/lib/typescript/src/components/business/index.d.ts +1 -1
- package/lib/typescript/src/components/business/index.d.ts.map +1 -1
- package/lib/typescript/src/components/business/useSvgId.d.ts +12 -0
- package/lib/typescript/src/components/business/useSvgId.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts +1 -1
- package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Avatar/styles.d.ts +1 -1
- package/lib/typescript/src/components/ui/Avatar/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Avatar/types.d.ts +3 -1
- package/lib/typescript/src/components/ui/Avatar/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/BlurLayer/BlurLayer.d.ts +1 -1
- package/lib/typescript/src/components/ui/BlurLayer/BlurLayer.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/BlurLayer/BlurLayer.web.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Button/Button.d.ts +1 -1
- package/lib/typescript/src/components/ui/Button/Button.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Button/ButtonBase.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Button/styles.d.ts +2 -1
- package/lib/typescript/src/components/ui/Button/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Button/types.d.ts +1 -1
- package/lib/typescript/src/components/ui/Button/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Card/Card.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Card/styles.d.ts +2 -0
- package/lib/typescript/src/components/ui/Card/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Card/types.d.ts +4 -4
- package/lib/typescript/src/components/ui/Card/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Carousel/Carousel.d.ts +4 -11
- package/lib/typescript/src/components/ui/Carousel/Carousel.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Carousel/index.d.ts +1 -1
- package/lib/typescript/src/components/ui/Carousel/index.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Carousel/types.d.ts +4 -0
- package/lib/typescript/src/components/ui/Carousel/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Cell/Cell.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Cell/List.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Cell/styles.d.ts +1 -1
- package/lib/typescript/src/components/ui/Cell/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Cell/types.d.ts +5 -2
- package/lib/typescript/src/components/ui/Cell/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Checkbox/Checkbox.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Checkbox/styles.d.ts +6 -0
- package/lib/typescript/src/components/ui/Checkbox/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Chip/Chip.d.ts +4 -3
- package/lib/typescript/src/components/ui/Chip/Chip.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Chip/types.d.ts +2 -0
- package/lib/typescript/src/components/ui/Chip/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Confirm/confirm.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Confirm/types.d.ts +4 -2
- package/lib/typescript/src/components/ui/Confirm/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/DrawerHeader/DrawerHeader.d.ts +1 -1
- package/lib/typescript/src/components/ui/DrawerHeader/DrawerHeader.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/DrawerHeader/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts +3 -1
- package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Empty/Empty.d.ts +2 -2
- package/lib/typescript/src/components/ui/Empty/Empty.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Empty/types.d.ts +3 -0
- package/lib/typescript/src/components/ui/Empty/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/EntryCard/EntryCard.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/EntryCard/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/EntryCard/types.d.ts +2 -2
- package/lib/typescript/src/components/ui/EntryCard/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Form/FormRow.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Form/styles.d.ts +1 -0
- package/lib/typescript/src/components/ui/Form/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Form/types.d.ts +7 -2
- package/lib/typescript/src/components/ui/Form/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Grid/Grid.d.ts +1 -1
- package/lib/typescript/src/components/ui/Grid/Grid.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Grid/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Grid/types.d.ts +4 -1
- package/lib/typescript/src/components/ui/Grid/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Icon/Icon.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts +1 -1
- package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/IconButton/types.d.ts +7 -2
- package/lib/typescript/src/components/ui/IconButton/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Input/Input.d.ts +16 -16
- package/lib/typescript/src/components/ui/Input/types.d.ts +3 -2
- package/lib/typescript/src/components/ui/Input/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Logo/Logo.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/NavBar/NavBar.d.ts +8 -1
- package/lib/typescript/src/components/ui/NavBar/NavBar.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/NavBar/types.d.ts +5 -1
- package/lib/typescript/src/components/ui/NavBar/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts +13 -5
- package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts +1 -1
- package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/PasswordInput/types.d.ts +7 -2
- package/lib/typescript/src/components/ui/PasswordInput/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Pulse/Pulse.d.ts +1 -1
- package/lib/typescript/src/components/ui/Pulse/Pulse.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts +1 -1
- package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Pulse/types.d.ts +5 -0
- package/lib/typescript/src/components/ui/Pulse/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts +12 -8
- package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Radio/Radio.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Radio/RadioGroup.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Radio/styles.d.ts +4 -2
- package/lib/typescript/src/components/ui/Radio/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts +9 -0
- package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Search/Search.d.ts +16 -15
- package/lib/typescript/src/components/ui/Search/Search.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Search/types.d.ts +3 -1
- package/lib/typescript/src/components/ui/Search/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Segmented/Segmented.d.ts +1 -1
- package/lib/typescript/src/components/ui/Segmented/Segmented.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Segmented/styles.d.ts +1 -1
- package/lib/typescript/src/components/ui/Segmented/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Segmented/types.d.ts +2 -0
- package/lib/typescript/src/components/ui/Segmented/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts +3 -2
- package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Spinner/Spinner.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Spinner/Spinner.web.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Spinner/shared.d.ts +5 -0
- package/lib/typescript/src/components/ui/Spinner/shared.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/StatusDot/StatusDot.d.ts +1 -5
- package/lib/typescript/src/components/ui/StatusDot/StatusDot.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/StatusDot/styles.d.ts +1 -1
- package/lib/typescript/src/components/ui/StatusDot/types.d.ts +13 -1
- package/lib/typescript/src/components/ui/StatusDot/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Stepper/Stepper.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Switch/Switch.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Switch/Switch.web.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Switch/styles.d.ts +7 -1
- package/lib/typescript/src/components/ui/Switch/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TabBar/TabBar.d.ts +2 -2
- package/lib/typescript/src/components/ui/TabBar/TabBar.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TabBar/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TabBar/types.d.ts +3 -0
- package/lib/typescript/src/components/ui/TabBar/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Tabs/Tabs.d.ts +1 -1
- package/lib/typescript/src/components/ui/Tabs/Tabs.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Tabs/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Tabs/types.d.ts +9 -1
- package/lib/typescript/src/components/ui/Tabs/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Tag/styles.d.ts +2 -1
- package/lib/typescript/src/components/ui/Tag/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Tag/types.d.ts +6 -2
- package/lib/typescript/src/components/ui/Tag/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts +16 -16
- package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Textarea/Textarea.d.ts +16 -16
- package/lib/typescript/src/components/ui/Textarea/types.d.ts +2 -1
- package/lib/typescript/src/components/ui/Textarea/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts +3 -0
- package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/toast.d.ts +0 -5
- package/lib/typescript/src/components/ui/Toast/toast.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/Toast/types.d.ts +1 -1
- package/lib/typescript/src/components/ui/Toast/types.d.ts.map +1 -1
- package/lib/typescript/src/components/ui/shared/badgeStyles.d.ts +27 -0
- package/lib/typescript/src/components/ui/shared/badgeStyles.d.ts.map +1 -0
- package/lib/typescript/src/icons/data.d.ts +1 -1
- package/lib/typescript/src/icons/data.d.ts.map +1 -1
- package/lib/typescript/src/icons/types.d.ts +18 -12
- package/lib/typescript/src/icons/types.d.ts.map +1 -1
- package/lib/typescript/src/theme/colors.d.ts +9 -3
- package/lib/typescript/src/theme/colors.d.ts.map +1 -1
- package/lib/typescript/src/theme/index.d.ts +3 -2
- package/lib/typescript/src/theme/index.d.ts.map +1 -1
- package/lib/typescript/src/theme/scale.d.ts.map +1 -1
- package/lib/typescript/src/theme/shadow.d.ts +8 -8
- package/lib/typescript/src/theme/shadow.d.ts.map +1 -1
- package/lib/typescript/src/theme/tokens.d.ts +7 -3
- package/lib/typescript/src/theme/tokens.d.ts.map +1 -1
- package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts +8 -0
- package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts.map +1 -0
- package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts +6 -0
- package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts.map +1 -0
- package/lib/typescript/src/theme/useTheme.d.ts.map +1 -1
- package/lib/typescript/src/utils/logger/logger.d.ts.map +1 -1
- package/lib/typescript/src/utils/testID/testID.d.ts +6 -3
- package/lib/typescript/src/utils/testID/testID.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/components/business/AvatarWithRing/AvatarWithRing.tsx +5 -4
- package/src/components/business/AvatarWithRing/styles.ts +21 -3
- package/src/components/business/AvatarWithRing/types.ts +3 -1
- package/src/components/business/Decorations/GradientWash.tsx +46 -22
- package/src/components/business/Decorations/RadialHalo.tsx +8 -4
- package/src/components/business/Decorations/ScreenBackdrop.tsx +23 -5
- package/src/components/business/Decorations/index.ts +4 -0
- package/src/components/business/Decorations/types.ts +2 -0
- package/src/components/business/GlassStats/GlassStats.tsx +8 -4
- package/src/components/business/GlassStats/types.ts +6 -0
- package/src/components/business/VersionPill/VersionPill.tsx +46 -6
- package/src/components/business/VersionPill/styles.ts +1 -1
- package/src/components/business/VersionPill/types.ts +13 -1
- package/src/components/business/index.ts +1 -0
- package/src/components/business/useSvgId.ts +17 -0
- package/src/components/ui/Avatar/Avatar.tsx +17 -10
- package/src/components/ui/Avatar/styles.ts +7 -7
- package/src/components/ui/Avatar/types.ts +3 -1
- package/src/components/ui/BlurLayer/BlurLayer.tsx +4 -1
- package/src/components/ui/BlurLayer/BlurLayer.web.tsx +7 -1
- package/src/components/ui/Button/Button.tsx +2 -1
- package/src/components/ui/Button/ButtonBase.tsx +26 -2
- package/src/components/ui/Button/styles.ts +27 -25
- package/src/components/ui/Button/types.ts +1 -1
- package/src/components/ui/Card/Card.tsx +17 -7
- package/src/components/ui/Card/styles.ts +5 -0
- package/src/components/ui/Card/types.ts +4 -4
- package/src/components/ui/Carousel/Carousel.tsx +44 -15
- package/src/components/ui/Carousel/index.ts +1 -1
- package/src/components/ui/Carousel/types.ts +5 -0
- package/src/components/ui/Cell/Cell.tsx +28 -6
- package/src/components/ui/Cell/Leading.tsx +2 -2
- package/src/components/ui/Cell/List.tsx +14 -8
- package/src/components/ui/Cell/styles.ts +8 -5
- package/src/components/ui/Cell/types.ts +5 -2
- package/src/components/ui/Checkbox/Checkbox.tsx +18 -5
- package/src/components/ui/Checkbox/styles.ts +8 -0
- package/src/components/ui/Chip/Chip.tsx +20 -5
- package/src/components/ui/Chip/types.ts +2 -0
- package/src/components/ui/Confirm/ConfirmHost.tsx +26 -10
- package/src/components/ui/Confirm/confirm.ts +8 -0
- package/src/components/ui/Confirm/types.ts +4 -2
- package/src/components/ui/DrawerHeader/DrawerHeader.tsx +18 -12
- package/src/components/ui/DrawerHeader/styles.ts +10 -6
- package/src/components/ui/DrawerHeader/types.ts +3 -1
- package/src/components/ui/Empty/Empty.tsx +5 -4
- package/src/components/ui/Empty/types.ts +3 -0
- package/src/components/ui/EntryCard/EntryCard.tsx +5 -3
- package/src/components/ui/EntryCard/styles.ts +13 -4
- package/src/components/ui/EntryCard/types.ts +2 -2
- package/src/components/ui/Form/FormRow.tsx +7 -1
- package/src/components/ui/Form/styles.ts +2 -0
- package/src/components/ui/Form/types.ts +7 -2
- package/src/components/ui/Grid/Grid.tsx +42 -25
- package/src/components/ui/Grid/styles.ts +8 -20
- package/src/components/ui/Grid/types.ts +4 -1
- package/src/components/ui/Icon/Icon.tsx +42 -27
- package/src/components/ui/IconButton/IconButton.tsx +2 -0
- package/src/components/ui/IconButton/types.ts +8 -2
- package/src/components/ui/Input/types.ts +3 -2
- package/src/components/ui/Logo/Logo.tsx +2 -1
- package/src/components/ui/NavBar/NavBar.tsx +16 -2
- package/src/components/ui/NavBar/types.ts +5 -1
- package/src/components/ui/PasswordInput/PasswordInput.tsx +77 -43
- package/src/components/ui/PasswordInput/styles.ts +1 -1
- package/src/components/ui/PasswordInput/types.ts +7 -2
- package/src/components/ui/Pulse/Pulse.tsx +2 -1
- package/src/components/ui/Pulse/PulseDot.tsx +7 -6
- package/src/components/ui/Pulse/types.ts +6 -0
- package/src/components/ui/Pulse/usePulse.web.ts +50 -33
- package/src/components/ui/Radio/Radio.tsx +29 -6
- package/src/components/ui/Radio/RadioGroup.tsx +10 -3
- package/src/components/ui/Radio/styles.ts +9 -2
- package/src/components/ui/Reveal/Reveal.web.tsx +18 -3
- package/src/components/ui/Search/Search.tsx +22 -9
- package/src/components/ui/Search/types.ts +7 -1
- package/src/components/ui/Segmented/Segmented.tsx +8 -3
- package/src/components/ui/Segmented/styles.ts +4 -2
- package/src/components/ui/Segmented/types.ts +2 -0
- package/src/components/ui/Skeleton/Skeleton.tsx +9 -8
- package/src/components/ui/Spinner/Spinner.tsx +17 -17
- package/src/components/ui/Spinner/Spinner.web.tsx +7 -15
- package/src/components/ui/Spinner/shared.ts +37 -0
- package/src/components/ui/StatusDot/StatusDot.tsx +21 -3
- package/src/components/ui/StatusDot/styles.ts +1 -1
- package/src/components/ui/StatusDot/types.ts +14 -1
- package/src/components/ui/Stepper/Stepper.tsx +45 -10
- package/src/components/ui/Switch/Switch.tsx +4 -10
- package/src/components/ui/Switch/Switch.web.tsx +2 -8
- package/src/components/ui/Switch/styles.ts +10 -1
- package/src/components/ui/TabBar/TabBar.tsx +14 -6
- package/src/components/ui/TabBar/styles.ts +9 -21
- package/src/components/ui/TabBar/types.ts +3 -0
- package/src/components/ui/Tabs/Tabs.tsx +24 -5
- package/src/components/ui/Tabs/styles.ts +6 -2
- package/src/components/ui/Tabs/types.ts +10 -1
- package/src/components/ui/Tag/styles.ts +18 -10
- package/src/components/ui/Tag/types.ts +6 -2
- package/src/components/ui/TextField/TextFieldBase.tsx +31 -6
- package/src/components/ui/Textarea/types.ts +2 -1
- package/src/components/ui/Thumbnail/Thumbnail.tsx +14 -3
- package/src/components/ui/Thumbnail/styles.ts +6 -2
- package/src/components/ui/Toast/ToastHost.tsx +16 -8
- package/src/components/ui/Toast/ToastHost.web.tsx +26 -4
- package/src/components/ui/Toast/styles.ts +2 -0
- package/src/components/ui/Toast/toast.ts +35 -2
- package/src/components/ui/Toast/types.ts +1 -1
- package/src/components/ui/shared/badgeStyles.ts +36 -0
- package/src/icons/data.ts +30 -0
- package/src/icons/types.ts +25 -10
- package/src/theme/colors.ts +29 -10
- package/src/theme/index.ts +10 -1
- package/src/theme/scale.ts +5 -1
- package/src/theme/shadow.ts +33 -24
- package/src/theme/tokens.ts +10 -5
- package/src/theme/usePrefersReducedMotion.ts +9 -0
- package/src/theme/usePrefersReducedMotion.web.ts +27 -0
- package/src/theme/useTheme.ts +15 -0
- package/src/utils/logger/logger.ts +5 -1
- package/src/utils/testID/testID.ts +6 -3
- package/lib/module/components/index.js +0 -5
- package/lib/module/components/index.js.map +0 -1
- package/lib/typescript/src/components/index.d.ts +0 -3
- package/lib/typescript/src/components/index.d.ts.map +0 -1
- package/src/components/index.ts +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect,
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import { Image, Text, View } from 'react-native';
|
|
3
3
|
import { useColors } from '../../../theme';
|
|
4
4
|
import { paletteFor, sizingFor, styles } from './styles';
|
|
@@ -15,20 +15,25 @@ export function Avatar({
|
|
|
15
15
|
size = 'md',
|
|
16
16
|
variant = 'neutral',
|
|
17
17
|
source,
|
|
18
|
+
style,
|
|
18
19
|
testID,
|
|
19
20
|
}: AvatarProps): React.JSX.Element {
|
|
20
21
|
const c = useColors();
|
|
21
22
|
const [imageFailed, setImageFailed] = useState(false);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
|
|
24
|
+
// [M-20] React 18+ 已移除 unmount 后 setState 的 warning,mountedRef 守卫为死码,删除。
|
|
25
|
+
// [L-44] source 变化时重置 imageFailed,否则换图 URL 后仍展示 fallback 文字。
|
|
26
|
+
// source 可能是对象形态({ uri }),按 uri 字段做细粒度比较。
|
|
27
|
+
const uri =
|
|
28
|
+
source != null && typeof source === 'object' && 'uri' in source
|
|
29
|
+
? (source as { uri?: string }).uri
|
|
30
|
+
: null;
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
setImageFailed(false);
|
|
33
|
+
}, [uri, source]);
|
|
34
|
+
|
|
30
35
|
const handleImageError = () => {
|
|
31
|
-
|
|
36
|
+
setImageFailed(true);
|
|
32
37
|
};
|
|
33
38
|
const dims = sizingFor(size);
|
|
34
39
|
const palette = paletteFor(variant, c);
|
|
@@ -45,7 +50,9 @@ export function Avatar({
|
|
|
45
50
|
borderRadius: dims.box / 2,
|
|
46
51
|
backgroundColor: palette.bg,
|
|
47
52
|
},
|
|
53
|
+
style,
|
|
48
54
|
]}
|
|
55
|
+
accessible={!!label}
|
|
49
56
|
accessibilityLabel={label}
|
|
50
57
|
testID={testID}
|
|
51
58
|
>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
|
-
import { avatar, fw, type ColorTokens } from '../../../theme';
|
|
2
|
+
import { avatar, fw, rf, type ColorTokens } from '../../../theme';
|
|
3
3
|
import type { AvatarSize, AvatarVariant } from './types';
|
|
4
4
|
|
|
5
5
|
/** Avatar 静态 base —— 圆形容器(borderRadius / 尺寸由 sizingFor 派生)。 */
|
|
@@ -24,19 +24,19 @@ export const styles = StyleSheet.create({
|
|
|
24
24
|
export function sizingFor(size: AvatarSize): { box: number; fs: number } {
|
|
25
25
|
switch (size) {
|
|
26
26
|
case 'xs':
|
|
27
|
-
return { box: avatar.xs, fs: 10 };
|
|
27
|
+
return { box: avatar.xs, fs: rf(10) };
|
|
28
28
|
case 'sm':
|
|
29
|
-
return { box: avatar.sm, fs: 12 };
|
|
29
|
+
return { box: avatar.sm, fs: rf(12) };
|
|
30
30
|
case 'md':
|
|
31
|
-
return { box: avatar.md, fs: 13 };
|
|
31
|
+
return { box: avatar.md, fs: rf(13) };
|
|
32
32
|
case 'lg':
|
|
33
|
-
return { box: avatar.lg, fs: 15 };
|
|
33
|
+
return { box: avatar.lg, fs: rf(15) };
|
|
34
34
|
case 'xl':
|
|
35
|
-
return { box: avatar.xl, fs: 20 };
|
|
35
|
+
return { box: avatar.xl, fs: rf(20) };
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
/** Avatar 配色推导:4 种 variant → { bg, fg }。签名与 Tag/
|
|
39
|
+
/** Avatar 配色推导:4 种 variant → { bg, fg }。签名与 Tag/Button 的 paletteFor 一致。 */
|
|
40
40
|
export function paletteFor(
|
|
41
41
|
variant: AvatarVariant,
|
|
42
42
|
c: ColorTokens
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ImageSourcePropType } from 'react-native';
|
|
1
|
+
import type { ImageSourcePropType, StyleProp, ViewStyle } from 'react-native';
|
|
2
2
|
|
|
3
3
|
/** 头像尺寸(对应 avatar.xs..xl):xs=18 / sm=28 / md=32 / lg=40 / xl=56 */
|
|
4
4
|
export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
@@ -27,6 +27,8 @@ export type AvatarProps = {
|
|
|
27
27
|
* 提供时优先渲染 image;onError 触发后自动 fallback 到 label。
|
|
28
28
|
*/
|
|
29
29
|
source?: ImageSourcePropType;
|
|
30
|
+
/** 容器附加样式(margin / position 等布局微调)。 */
|
|
31
|
+
style?: StyleProp<ViewStyle>;
|
|
30
32
|
/** E2E / 测试定位 */
|
|
31
33
|
testID?: string;
|
|
32
34
|
};
|
|
@@ -9,7 +9,7 @@ import type { BlurLayerProps } from './types';
|
|
|
9
9
|
* blurType 跟 scheme 自动切(亮 'light' / 暗 'dark',避免暗色奶白雾)。
|
|
10
10
|
*
|
|
11
11
|
* - `'soft'` 玻璃数据条 / 小区域
|
|
12
|
-
* - `'strong'` 焦点引导 backdrop(
|
|
12
|
+
* - `'strong'` 焦点引导 backdrop(sheet 类浮层) */
|
|
13
13
|
export function BlurLayer({
|
|
14
14
|
intensity,
|
|
15
15
|
tint,
|
|
@@ -32,6 +32,9 @@ export function BlurLayer({
|
|
|
32
32
|
style={StyleSheet.absoluteFill}
|
|
33
33
|
blurType={blurType}
|
|
34
34
|
blurAmount={blurTokens[intensity]}
|
|
35
|
+
// iOS「降低透明度」开启时 BlurView 用纯色替换模糊;库默认 #FFFFFF 在暗色 scheme
|
|
36
|
+
// 下整面刺眼白底。传随 scheme 的 surface 色,与下方 tint 层视觉一致([M-6])。
|
|
37
|
+
reducedTransparencyFallbackColor={c.surface}
|
|
35
38
|
/>
|
|
36
39
|
<View
|
|
37
40
|
style={[
|
|
@@ -22,7 +22,13 @@ export function BlurLayer({
|
|
|
22
22
|
const blurAmount = blurTokens[intensity];
|
|
23
23
|
const defaultTint =
|
|
24
24
|
intensity === 'strong' ? c.sheetBackdrop : c.glassTintLight;
|
|
25
|
-
// RN style typedef 不识别 web-only 属性,cast 绕过 TS;RN-Web
|
|
25
|
+
// RN style typedef 不识别 web-only 属性,cast 绕过 TS;RN-Web 浏览器侧原样输出。
|
|
26
|
+
// [L-15] saturate(180%):苹果 HIG 玻璃效果的标准值,增强模糊后的颜色鲜艳度,
|
|
27
|
+
// 与 macOS / iOS 系统 vibrancy 视觉一致;降低会让玻璃面板显得灰暗脱色。
|
|
28
|
+
// [L-15] opacity:0.96(暗色):暗色 scheme 下 backdrop-filter 在 Chromium 中
|
|
29
|
+
// opacity=1 时存在渲染 artifact(模糊层与底层内容边界锯齿),降到 0.96 消除;
|
|
30
|
+
// 亮色 scheme 不受影响故保持 1。native 端 BlurLayer.tsx 用双层 View 实现,
|
|
31
|
+
// 语义等价(tint 层覆盖 BlurView),无需此 opacity 补丁。
|
|
26
32
|
const webBlurStyle = {
|
|
27
33
|
backdropFilter: `blur(${blurAmount}px) saturate(180%)`,
|
|
28
34
|
WebkitBackdropFilter: `blur(${blurAmount}px) saturate(180%)`,
|
|
@@ -7,7 +7,7 @@ import { makeStyles } from './styles';
|
|
|
7
7
|
import type { ButtonProps } from './types';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* 7 variant × 3 size 文本按钮。
|
|
11
11
|
* 内部组合 ButtonBase + content(label + 可选 leftIcon / rightIcon),
|
|
12
12
|
* ButtonBase 接管 chrome(sizing / palette / disabled / loading / a11y)。
|
|
13
13
|
*
|
|
@@ -48,6 +48,7 @@ export function Button({
|
|
|
48
48
|
) : null}
|
|
49
49
|
<Text
|
|
50
50
|
style={[styles.label, { color: palette.fg, fontSize: sizing.fs }]}
|
|
51
|
+
numberOfLines={1}
|
|
51
52
|
>
|
|
52
53
|
{label}
|
|
53
54
|
</Text>
|
|
@@ -6,7 +6,12 @@ import {
|
|
|
6
6
|
type ViewStyle,
|
|
7
7
|
} from 'react-native';
|
|
8
8
|
import { Pressable } from 'react-native-gesture-handler';
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
fixed,
|
|
11
|
+
pressedOpacity,
|
|
12
|
+
useColors,
|
|
13
|
+
useThemedStyles,
|
|
14
|
+
} from '../../../theme';
|
|
10
15
|
import { makeStyles, paletteFor, sizingFor } from './styles';
|
|
11
16
|
import type {
|
|
12
17
|
ButtonBaseRenderContext,
|
|
@@ -61,6 +66,24 @@ export function ButtonBase({
|
|
|
61
66
|
const isText = variant === 'text';
|
|
62
67
|
const isInteractive = !disabled && !loading;
|
|
63
68
|
|
|
69
|
+
// [M-7] 触控目标补偿:hitSlop 向外扩展命中区域到 fixed.hitTarget(44pt)。
|
|
70
|
+
// 公式:vertical slop = max(0, (hitTarget - h) / 2);square 时同补 horizontal。
|
|
71
|
+
// text variant height=undefined(仅行内文字高 ~18pt),无法从 sizing.h 推算,
|
|
72
|
+
// 保守固定补到 44pt 等效(top+bottom ≈ 13pt each)。
|
|
73
|
+
// ⚠ hitSlop 不越父边界;相邻可按压元素建议间距 ≥ 2×slop 以防重叠裁决。
|
|
74
|
+
const hitSlop = useMemo(() => {
|
|
75
|
+
if (isText) {
|
|
76
|
+
// text 无 chrome,仅靠行高无法可靠获取实际高度,固定补至 44pt
|
|
77
|
+
const v = Math.round((fixed.hitTarget - 18) / 2);
|
|
78
|
+
return { top: v, bottom: v, left: 0, right: 0 };
|
|
79
|
+
}
|
|
80
|
+
const v = Math.max(0, Math.round((fixed.hitTarget - sizing.h) / 2));
|
|
81
|
+
if (square) {
|
|
82
|
+
return { top: v, bottom: v, left: v, right: v };
|
|
83
|
+
}
|
|
84
|
+
return { top: v, bottom: v, left: 0, right: 0 };
|
|
85
|
+
}, [isText, sizing.h, square]);
|
|
86
|
+
|
|
64
87
|
return (
|
|
65
88
|
<Pressable
|
|
66
89
|
accessibilityRole={accessibilityRole}
|
|
@@ -69,6 +92,7 @@ export function ButtonBase({
|
|
|
69
92
|
accessibilityHint={accessibilityHint}
|
|
70
93
|
disabled={!isInteractive}
|
|
71
94
|
onPress={onPress}
|
|
95
|
+
hitSlop={hitSlop}
|
|
72
96
|
testID={testID}
|
|
73
97
|
style={({ pressed }) => [
|
|
74
98
|
styles.base,
|
|
@@ -82,7 +106,7 @@ export function ButtonBase({
|
|
|
82
106
|
backgroundColor: palette.bg,
|
|
83
107
|
borderColor: palette.border ?? 'transparent',
|
|
84
108
|
borderWidth: palette.border ? 1 : 0,
|
|
85
|
-
opacity: disabled ? 0.5 : pressed ?
|
|
109
|
+
opacity: disabled ? 0.5 : pressed ? pressedOpacity : 1,
|
|
86
110
|
alignSelf: block ? 'stretch' : 'flex-start',
|
|
87
111
|
// 非 block 用 undefined 而非硬编码 0:Yoga 的 resolveFlexGrow 里显式 flexGrow
|
|
88
112
|
// 优先级高于 flex 简写,写死 0 会让调用方 style={{ flex: 1 }} 失效(按钮撑不开 /
|
|
@@ -33,35 +33,37 @@ export const makeStyles = (_c: ColorTokens) =>
|
|
|
33
33
|
* h 走 control.<size>,br 走 radius.<size>,gap / px 走 space[].
|
|
34
34
|
* 新增 size 在 types.ts 加 union + 这里加 case。 */
|
|
35
35
|
export function sizingFor(size: ButtonSize): ButtonSizing {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
36
|
+
switch (size) {
|
|
37
|
+
case 'lg':
|
|
38
|
+
return {
|
|
39
|
+
h: control.lg,
|
|
40
|
+
px: r(18),
|
|
41
|
+
fs: t.body,
|
|
42
|
+
br: radius.lg,
|
|
43
|
+
gap: space['2'],
|
|
44
|
+
};
|
|
45
|
+
case 'sm':
|
|
46
|
+
return {
|
|
47
|
+
h: control.sm,
|
|
48
|
+
px: space['4'],
|
|
49
|
+
fs: t.xxs,
|
|
50
|
+
br: radius.sm,
|
|
51
|
+
gap: space['1'],
|
|
52
|
+
};
|
|
53
|
+
case 'md':
|
|
54
|
+
return {
|
|
55
|
+
h: control.md,
|
|
56
|
+
px: space['6'],
|
|
57
|
+
fs: t.sm,
|
|
58
|
+
br: radius.md,
|
|
59
|
+
gap: space['2'],
|
|
60
|
+
};
|
|
53
61
|
}
|
|
54
|
-
return {
|
|
55
|
-
h: control.md,
|
|
56
|
-
px: space['6'],
|
|
57
|
-
fs: t.sm,
|
|
58
|
-
br: radius.md,
|
|
59
|
-
gap: space['2'],
|
|
60
|
-
};
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
/** Button 配色推导:7 种 variant → { bg, fg, border }。签名与 Tag/Avatar 的 paletteFor 一致。
|
|
64
|
-
* text / ghost / neutral 共用 'transparent'
|
|
65
|
+
* text / ghost / neutral 共用 'transparent' 底;ghost↔text palette 字节级同一,
|
|
66
|
+
* 差异在几何:text variant 在 ButtonBase 撕除高度与内边距。 */
|
|
65
67
|
export function paletteFor(
|
|
66
68
|
variant: ButtonVariant,
|
|
67
69
|
c: ColorTokens
|
|
@@ -17,23 +17,33 @@ export function Card({
|
|
|
17
17
|
}: CardProps): React.JSX.Element {
|
|
18
18
|
const styles = useThemedStyles(makeStyles);
|
|
19
19
|
const shadow = useShadow();
|
|
20
|
+
const br = borderRadius ?? radius.xl;
|
|
20
21
|
|
|
22
|
+
// 双层:外层持底色 + 阴影 + 圆角(无 overflow,阴影不被裁);内层持 overflow hidden
|
|
23
|
+
// 按圆角裁内容 + padding + 可选边框。[H-4] iOS 上 overflow 与阴影同层会裁掉阴影。
|
|
21
24
|
return (
|
|
22
25
|
<View
|
|
23
26
|
testID={testID}
|
|
24
27
|
style={[
|
|
25
28
|
styles.base,
|
|
26
|
-
{ borderRadius:
|
|
27
|
-
!bare && { padding: padding ?? space[6] },
|
|
29
|
+
{ borderRadius: br },
|
|
28
30
|
variantToStyle(variant, shadow, styles),
|
|
29
|
-
borderColor != null && {
|
|
30
|
-
borderColor,
|
|
31
|
-
borderWidth: borderWidth ?? 2,
|
|
32
|
-
},
|
|
33
31
|
style,
|
|
34
32
|
]}
|
|
35
33
|
>
|
|
36
|
-
|
|
34
|
+
<View
|
|
35
|
+
style={[
|
|
36
|
+
styles.clip,
|
|
37
|
+
{ borderRadius: br },
|
|
38
|
+
!bare && { padding: padding ?? space[6] },
|
|
39
|
+
borderColor != null && {
|
|
40
|
+
borderColor,
|
|
41
|
+
borderWidth: borderWidth ?? 2,
|
|
42
|
+
},
|
|
43
|
+
]}
|
|
44
|
+
>
|
|
45
|
+
{children}
|
|
46
|
+
</View>
|
|
37
47
|
</View>
|
|
38
48
|
);
|
|
39
49
|
}
|
|
@@ -4,8 +4,13 @@ import type { CardVariant } from './types';
|
|
|
4
4
|
|
|
5
5
|
export const makeStyles = (c: ColorTokens) =>
|
|
6
6
|
StyleSheet.create({
|
|
7
|
+
// 外层:底色 + 阴影(iOS 阴影需不透明背景才投影)。overflow hidden 不放这层 ——
|
|
8
|
+
// 否则 iOS 会把 View 自己的卡片阴影一起裁掉([H-4])。
|
|
7
9
|
base: {
|
|
8
10
|
backgroundColor: c.surface,
|
|
11
|
+
},
|
|
12
|
+
// 内层:overflow hidden 按圆角裁剪内容(如贴边媒体),不影响外层阴影。
|
|
13
|
+
clip: {
|
|
9
14
|
overflow: 'hidden',
|
|
10
15
|
},
|
|
11
16
|
flat: {},
|
|
@@ -3,7 +3,7 @@ import type { StyleProp, ViewStyle } from 'react-native';
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Card **视觉变体**(控制装饰,跟 `bare` 是正交维度):
|
|
6
|
-
* - `default`:白底 +
|
|
6
|
+
* - `default`:白底 + 阴影(标准卡片;默认无边框,传 `borderColor` 才显示边框)
|
|
7
7
|
* - `plain`:仅白底(无阴影无边框,承载更轻量,如 chat 气泡内嵌组件)
|
|
8
8
|
* - `flat`:**deprecated** — 等价于 `plain`,新代码请用 `plain`。
|
|
9
9
|
*/
|
|
@@ -16,11 +16,11 @@ export type CardProps = {
|
|
|
16
16
|
variant?: CardVariant;
|
|
17
17
|
/** 自定义内边距(覆盖默认 padding) */
|
|
18
18
|
padding?: number;
|
|
19
|
-
/** 自定义圆角(覆盖默认 radius.
|
|
19
|
+
/** 自定义圆角(覆盖默认 radius.xl) */
|
|
20
20
|
borderRadius?: number;
|
|
21
|
-
/**
|
|
21
|
+
/** 边框色 —— 传入即显示边框(任何 variant 生效;默认无边框) */
|
|
22
22
|
borderColor?: string;
|
|
23
|
-
/**
|
|
23
|
+
/** 边框宽度(默认 2;仅在传了 borderColor 时生效) */
|
|
24
24
|
borderWidth?: number;
|
|
25
25
|
/**
|
|
26
26
|
* 「裸壳」模式:把 padding 设为 0,children 紧贴 Card 边缘渲染。
|
|
@@ -6,7 +6,7 @@ import ReanimatedCarousel, {
|
|
|
6
6
|
import { useSharedValue } from 'react-native-reanimated';
|
|
7
7
|
import { space, useThemedStyles } from '../../../theme';
|
|
8
8
|
import { makeCarouselStyles } from './styles';
|
|
9
|
-
import type { CarouselProps } from './types';
|
|
9
|
+
import type { CarouselProps, ICarouselInstance } from './types';
|
|
10
10
|
|
|
11
11
|
/** Carousel —— 包装 `react-native-reanimated-carousel@5.0.0-beta.5`。
|
|
12
12
|
*
|
|
@@ -16,21 +16,28 @@ import type { CarouselProps } from './types';
|
|
|
16
16
|
* 用 Pagination.Custom 而非 Basic:Basic 的 activeDot 用 translateX 推进
|
|
17
17
|
* 内层 fill,外壳宽度等于 dotStyle.width,activeDotStyle.width 只影响内层,
|
|
18
18
|
* 做不出"active 4 → 12 长条"。Custom 自己 interpolate width/height/bg。
|
|
19
|
+
*
|
|
20
|
+
* forwardRef 透传 ICarouselInstance —— 解锁 a11y 暂停(ref.current.scrollTo)
|
|
21
|
+
* 以及宿主页面的命令式 scrollTo / prev / next。
|
|
19
22
|
*/
|
|
20
23
|
// T 约束 object —— `Pagination.Basic<T extends {}>` 需要 object
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
function CarouselInner<T extends object>(
|
|
25
|
+
{
|
|
26
|
+
items,
|
|
27
|
+
renderItem,
|
|
28
|
+
height,
|
|
29
|
+
itemWidth,
|
|
30
|
+
autoPlay,
|
|
31
|
+
loop = true,
|
|
32
|
+
showIndicator = true,
|
|
33
|
+
indicatorPosition = 'bottom',
|
|
34
|
+
onPressItem,
|
|
35
|
+
getAccessibilityLabel,
|
|
36
|
+
style,
|
|
37
|
+
testID,
|
|
38
|
+
}: CarouselProps<T>,
|
|
39
|
+
ref: React.Ref<ICarouselInstance>
|
|
40
|
+
): React.JSX.Element {
|
|
34
41
|
const { width: screenWidth } = useWindowDimensions();
|
|
35
42
|
const width = itemWidth ?? screenWidth;
|
|
36
43
|
const styles = useThemedStyles(makeCarouselStyles);
|
|
@@ -54,14 +61,24 @@ export function Carousel<T extends object>({
|
|
|
54
61
|
// v5 把 width / height prop deprecate,迁到 style
|
|
55
62
|
style={{ width, height }}
|
|
56
63
|
data={data}
|
|
57
|
-
loop
|
|
64
|
+
loop={loop}
|
|
58
65
|
autoPlay={!!autoPlay}
|
|
59
66
|
autoPlayInterval={autoPlay}
|
|
60
67
|
onProgressChange={progress}
|
|
68
|
+
ref={ref}
|
|
61
69
|
renderItem={({ item, index }) => (
|
|
70
|
+
// RN Pressable 而非 RNGH Pressable:Carousel 的 GestureDetector 已挂在
|
|
71
|
+
// ReanimatedCarousel 内部,外层再套 RNGH Pressable 会产生手势冲突;
|
|
72
|
+
// 用 RN 原生 Pressable 让库自己的拖拽手势优先,tap 仍正常触发。
|
|
62
73
|
<Pressable
|
|
63
74
|
onPress={() => onPressItem?.(item, index)}
|
|
64
75
|
style={{ width, height }}
|
|
76
|
+
// [L-92] 恒产出兜底:testID 缺失时用 'carousel' 前缀而非 undefined。
|
|
77
|
+
// 与 childTestID「父缺失返 undefined」语义不同,不替换为 childTestID。
|
|
78
|
+
// 原因:renderItem 须向 ReanimatedCarousel 提供稳定可预期的子项 testID
|
|
79
|
+
// 用于 E2E 定位,哪怕调用方未传 testID 也能用 carousel-item-0 等定位;
|
|
80
|
+
// 副作用:同屏两个未传 testID 的 Carousel 会碰撞 carousel-item-N。
|
|
81
|
+
// 建议:多 Carousel 场景请务必传 testID 以避免碰撞。
|
|
65
82
|
testID={`${testID ?? 'carousel'}-item-${index}`}
|
|
66
83
|
// 只在真正可点时声明 button 语义,纯展示型不标 button 避免读屏器误导
|
|
67
84
|
{...(onPressItem
|
|
@@ -78,6 +95,9 @@ export function Carousel<T extends object>({
|
|
|
78
95
|
)}
|
|
79
96
|
/>
|
|
80
97
|
{showIndicator && items.length > 1 ? (
|
|
98
|
+
// importantForAccessibility="no" —— dots 仅视觉辅助,SR 不需要读出
|
|
99
|
+
// 每个 dot 的状态(已由 accessibilityRole=tab / accessibilityState.selected 表达
|
|
100
|
+
// 的场景另论,这里 Pagination.Custom 无内置 a11y 语义,对 SR 隐藏比误读更优)。
|
|
81
101
|
<Pagination.Custom<T>
|
|
82
102
|
progress={progress}
|
|
83
103
|
data={data}
|
|
@@ -88,8 +108,17 @@ export function Carousel<T extends object>({
|
|
|
88
108
|
? styles.dotsWrapOverlay
|
|
89
109
|
: styles.dotsWrapBottom
|
|
90
110
|
}
|
|
111
|
+
// @ts-expect-error — importantForAccessibility 是 RN View prop,
|
|
112
|
+
// Pagination.Custom containerStyle 走 ViewStyle 但 TS 类型未收录该 prop
|
|
113
|
+
importantForAccessibility="no-hide-descendants"
|
|
114
|
+
accessibilityElementsHidden={true}
|
|
91
115
|
/>
|
|
92
116
|
) : null}
|
|
93
117
|
</View>
|
|
94
118
|
);
|
|
95
119
|
}
|
|
120
|
+
|
|
121
|
+
// forwardRef 不支持泛型函数组件直接推断 T,需要手动标注 + 类型断言
|
|
122
|
+
export const Carousel = React.forwardRef(CarouselInner) as <T extends object>(
|
|
123
|
+
props: CarouselProps<T> & { ref?: React.Ref<ICarouselInstance> }
|
|
124
|
+
) => React.JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { Carousel } from './Carousel';
|
|
2
|
-
export type { CarouselProps } from './types';
|
|
2
|
+
export type { CarouselProps, ICarouselInstance } from './types';
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { ICarouselInstance } from 'react-native-reanimated-carousel';
|
|
1
2
|
import type { ReactNode } from 'react';
|
|
2
3
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
3
4
|
|
|
5
|
+
export type { ICarouselInstance };
|
|
6
|
+
|
|
4
7
|
/** Indicator 位置策略:
|
|
5
8
|
* - 'bottom'(默认):指示器独立行,跟 Carousel 下方;容器高度 = height + 16
|
|
6
9
|
* - 'overlay-bottom-right':指示器 absolute 浮在 Carousel 右下角,不占额外高度 */
|
|
@@ -19,6 +22,8 @@ export type CarouselProps<T> = {
|
|
|
19
22
|
itemWidth?: number;
|
|
20
23
|
/** autoPlay 间隔 ms,undefined / 0 不自动 */
|
|
21
24
|
autoPlay?: number;
|
|
25
|
+
/** 是否循环播放,默认 true。传 false 时首尾不循环,可配合 a11y 暂停控制。 */
|
|
26
|
+
loop?: boolean;
|
|
22
27
|
/** 是否显示底部 dot indicator,默认 true */
|
|
23
28
|
showIndicator?: boolean;
|
|
24
29
|
/** indicator 位置策略,默认 'bottom' */
|
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type StyleProp, Text, type TextStyle, View } from 'react-native';
|
|
3
3
|
import { Pressable } from 'react-native-gesture-handler';
|
|
4
|
-
import { useColors, useThemedStyles } from '../../../theme';
|
|
4
|
+
import { pressedOpacity, r, useColors, useThemedStyles } from '../../../theme';
|
|
5
5
|
import { Icon } from '../Icon';
|
|
6
6
|
import { useListVariant } from './context';
|
|
7
7
|
import { Leading } from './Leading';
|
|
8
8
|
import { makeStyles } from './styles';
|
|
9
9
|
import type { CellProps } from './types';
|
|
10
10
|
|
|
11
|
+
/** extra 是否包含可交互控件(Switch/Stepper/Checkbox 等 ReactNode)。
|
|
12
|
+
* 用于决定 Pressable 外壳是否关闭 accessible —— 若外壳 accessible=true 且 extra 也是
|
|
13
|
+
* 独立 accessible 控件,SR 会产生「双播报 + 控件被遮挡无法直接激活」的体验缺陷。
|
|
14
|
+
* 规则:extra 是 ReactNode(非 string / null / undefined)时判定为「可能含控件」。
|
|
15
|
+
* 使用方若明确 extra 是纯展示 ReactNode,可通过 accessibilityHint='none' 绕过(暂不加 prop)。*/
|
|
16
|
+
function extraHasInteractiveNode(extra: CellProps['extra']): boolean {
|
|
17
|
+
return extra != null && typeof extra !== 'string';
|
|
18
|
+
}
|
|
19
|
+
|
|
11
20
|
function renderSlot(
|
|
12
21
|
value: React.ReactNode,
|
|
13
22
|
textStyle: StyleProp<TextStyle>,
|
|
@@ -77,7 +86,7 @@ export function Cell({
|
|
|
77
86
|
{arrow && !danger ? (
|
|
78
87
|
<Icon
|
|
79
88
|
name="chevron-right"
|
|
80
|
-
size={flush ? 18 : 20}
|
|
89
|
+
size={r(flush ? 18 : 20)}
|
|
81
90
|
color={c.foregroundSubtle}
|
|
82
91
|
style={flush ? styles.chevronFlush : undefined}
|
|
83
92
|
/>
|
|
@@ -86,19 +95,32 @@ export function Cell({
|
|
|
86
95
|
);
|
|
87
96
|
|
|
88
97
|
if (onPress) {
|
|
98
|
+
// 若 extra 含交互控件(Switch/Stepper 等),外壳 Pressable 关闭 accessible,
|
|
99
|
+
// 让 SR 直接穿透读取控件本身,避免双播报和控件被遮挡无法激活的体验缺陷。
|
|
100
|
+
const hasInteractiveExtra = extraHasInteractiveNode(extra);
|
|
101
|
+
|
|
102
|
+
// 默认 a11y label:title + desc 拼接,给 SR 用户同时听到主副信息。
|
|
103
|
+
// 有 accessibilityLabel 显式覆盖时走 prop,否则组合 title+desc。
|
|
104
|
+
const defaultLabel =
|
|
105
|
+
typeof title === 'string'
|
|
106
|
+
? typeof desc === 'string' && desc
|
|
107
|
+
? `${title},${desc}`
|
|
108
|
+
: title
|
|
109
|
+
: undefined;
|
|
110
|
+
|
|
89
111
|
return (
|
|
90
112
|
<Pressable
|
|
91
113
|
onPress={onPress}
|
|
92
114
|
disabled={disabled}
|
|
93
115
|
accessibilityRole="button"
|
|
94
|
-
accessibilityLabel={
|
|
95
|
-
accessibilityLabel ?? (typeof title === 'string' ? title : undefined)
|
|
96
|
-
}
|
|
116
|
+
accessibilityLabel={accessibilityLabel ?? defaultLabel}
|
|
97
117
|
accessibilityHint={accessibilityHint}
|
|
98
118
|
accessibilityState={disabled ? { disabled: true } : undefined}
|
|
119
|
+
// extra 含控件时外壳不作为独立 a11y 元素,让 SR 穿透到 extra 控件
|
|
120
|
+
accessible={hasInteractiveExtra ? false : undefined}
|
|
99
121
|
testID={testID}
|
|
100
122
|
style={({ pressed }) => [
|
|
101
|
-
{ opacity: disabled ? 0.5 : pressed ?
|
|
123
|
+
{ opacity: disabled ? 0.5 : pressed ? pressedOpacity : 1 },
|
|
102
124
|
]}
|
|
103
125
|
>
|
|
104
126
|
{inner}
|
|
@@ -41,7 +41,7 @@ export function Leading({
|
|
|
41
41
|
>
|
|
42
42
|
<Icon
|
|
43
43
|
name={slot as IconName}
|
|
44
|
-
size={16}
|
|
44
|
+
size={r(16)}
|
|
45
45
|
color={danger ? c.error : c.primary}
|
|
46
46
|
/>
|
|
47
47
|
</View>
|
|
@@ -50,7 +50,7 @@ export function Leading({
|
|
|
50
50
|
return (
|
|
51
51
|
<Icon
|
|
52
52
|
name={slot as IconName}
|
|
53
|
-
size={22}
|
|
53
|
+
size={r(22)}
|
|
54
54
|
color={danger ? c.error : c.foregroundMuted}
|
|
55
55
|
/>
|
|
56
56
|
);
|
|
@@ -24,14 +24,20 @@ export function List({
|
|
|
24
24
|
return (
|
|
25
25
|
<ListVariantContext.Provider value="flush">
|
|
26
26
|
<View style={[styles.listFlush, style]} testID={testID}>
|
|
27
|
-
{items.map((child, i) =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
) :
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
{items.map((child, i) => {
|
|
28
|
+
// 优先使用 caller 传入的 key(React.Children.toArray 已将 key 注入 child),
|
|
29
|
+
// 回退到索引确保 reconciler 稳定 —— 避免 caller key 丢失导致不必要重挂载。
|
|
30
|
+
const key =
|
|
31
|
+
React.isValidElement(child) && child.key != null ? child.key : i;
|
|
32
|
+
return (
|
|
33
|
+
<React.Fragment key={key}>
|
|
34
|
+
{i > 0 && divider === 'full' ? (
|
|
35
|
+
<View style={styles.separator} />
|
|
36
|
+
) : null}
|
|
37
|
+
{child}
|
|
38
|
+
</React.Fragment>
|
|
39
|
+
);
|
|
40
|
+
})}
|
|
35
41
|
</View>
|
|
36
42
|
</ListVariantContext.Provider>
|
|
37
43
|
);
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { StyleSheet } from 'react-native';
|
|
2
2
|
import {
|
|
3
|
+
fixed,
|
|
3
4
|
fw,
|
|
4
5
|
r,
|
|
6
|
+
rf,
|
|
5
7
|
radius,
|
|
6
8
|
space,
|
|
7
9
|
type as t,
|
|
@@ -26,7 +28,8 @@ export const makeStyles = (c: ColorTokens) =>
|
|
|
26
28
|
gap: space[4],
|
|
27
29
|
paddingHorizontal: r(11),
|
|
28
30
|
paddingVertical: r(11),
|
|
29
|
-
minHeight
|
|
31
|
+
// [M-7] flush 可按压行高约 39pt < iOS HIG 44pt;用 minHeight 撑到 fixed.hitTarget
|
|
32
|
+
minHeight: fixed.hitTarget,
|
|
30
33
|
},
|
|
31
34
|
cellFlushWithDesc: {
|
|
32
35
|
paddingVertical: r(9),
|
|
@@ -43,10 +46,10 @@ export const makeStyles = (c: ColorTokens) =>
|
|
|
43
46
|
lineHeight: t.body * 1.3,
|
|
44
47
|
},
|
|
45
48
|
titleFlush: {
|
|
46
|
-
fontSize:
|
|
49
|
+
fontSize: rf(13),
|
|
47
50
|
fontWeight: fw.medium,
|
|
48
51
|
letterSpacing: -0.1,
|
|
49
|
-
lineHeight:
|
|
52
|
+
lineHeight: rf(13) * 1.3,
|
|
50
53
|
color: c.foreground,
|
|
51
54
|
},
|
|
52
55
|
desc: {
|
|
@@ -55,7 +58,7 @@ export const makeStyles = (c: ColorTokens) =>
|
|
|
55
58
|
lineHeight: t.xs * 1.4,
|
|
56
59
|
},
|
|
57
60
|
descFlush: {
|
|
58
|
-
fontSize:
|
|
61
|
+
fontSize: rf(11),
|
|
59
62
|
color: c.foregroundMuted,
|
|
60
63
|
opacity: 0.55,
|
|
61
64
|
marginTop: r(1),
|
|
@@ -65,7 +68,7 @@ export const makeStyles = (c: ColorTokens) =>
|
|
|
65
68
|
color: c.foregroundSubtle,
|
|
66
69
|
},
|
|
67
70
|
extraFlush: {
|
|
68
|
-
fontSize:
|
|
71
|
+
fontSize: rf(11),
|
|
69
72
|
color: c.foregroundMuted,
|
|
70
73
|
opacity: 0.55,
|
|
71
74
|
},
|