@unif/react-native-design 0.8.1 → 0.9.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.
Files changed (512) hide show
  1. package/README.md +3 -4
  2. package/lib/module/components/business/AvatarWithRing/AvatarWithRing.js +6 -4
  3. package/lib/module/components/business/AvatarWithRing/AvatarWithRing.js.map +1 -1
  4. package/lib/module/components/business/AvatarWithRing/styles.js +15 -3
  5. package/lib/module/components/business/AvatarWithRing/styles.js.map +1 -1
  6. package/lib/module/components/business/Decorations/GradientWash.js +50 -36
  7. package/lib/module/components/business/Decorations/GradientWash.js.map +1 -1
  8. package/lib/module/components/business/Decorations/RadialHalo.js +10 -4
  9. package/lib/module/components/business/Decorations/RadialHalo.js.map +1 -1
  10. package/lib/module/components/business/Decorations/ScreenBackdrop.js +22 -14
  11. package/lib/module/components/business/Decorations/ScreenBackdrop.js.map +1 -1
  12. package/lib/module/components/business/Decorations/index.js +3 -0
  13. package/lib/module/components/business/Decorations/index.js.map +1 -1
  14. package/lib/module/components/business/GlassStats/GlassStats.js +7 -4
  15. package/lib/module/components/business/GlassStats/GlassStats.js.map +1 -1
  16. package/lib/module/components/business/GlassStats/types.js +2 -0
  17. package/lib/module/components/business/VersionPill/VersionPill.js +23 -5
  18. package/lib/module/components/business/VersionPill/VersionPill.js.map +1 -1
  19. package/lib/module/components/business/VersionPill/styles.js +1 -1
  20. package/lib/module/components/business/index.js.map +1 -1
  21. package/lib/module/components/business/useSvgId.js +20 -0
  22. package/lib/module/components/business/useSvgId.js.map +1 -0
  23. package/lib/module/components/ui/Avatar/Avatar.js +13 -8
  24. package/lib/module/components/ui/Avatar/Avatar.js.map +1 -1
  25. package/lib/module/components/ui/Avatar/styles.js +7 -7
  26. package/lib/module/components/ui/Avatar/styles.js.map +1 -1
  27. package/lib/module/components/ui/BlurLayer/BlurLayer.js +5 -1
  28. package/lib/module/components/ui/BlurLayer/BlurLayer.js.map +1 -1
  29. package/lib/module/components/ui/BlurLayer/BlurLayer.web.js +7 -1
  30. package/lib/module/components/ui/BlurLayer/BlurLayer.web.js.map +1 -1
  31. package/lib/module/components/ui/Button/Button.js +2 -1
  32. package/lib/module/components/ui/Button/Button.js.map +1 -1
  33. package/lib/module/components/ui/Button/ButtonBase.js +36 -2
  34. package/lib/module/components/ui/Button/ButtonBase.js.map +1 -1
  35. package/lib/module/components/ui/Button/styles.js +27 -25
  36. package/lib/module/components/ui/Button/styles.js.map +1 -1
  37. package/lib/module/components/ui/Card/Card.js +17 -8
  38. package/lib/module/components/ui/Card/Card.js.map +1 -1
  39. package/lib/module/components/ui/Card/styles.js +6 -1
  40. package/lib/module/components/ui/Card/styles.js.map +1 -1
  41. package/lib/module/components/ui/Carousel/Carousel.js +36 -6
  42. package/lib/module/components/ui/Carousel/Carousel.js.map +1 -1
  43. package/lib/module/components/ui/Cell/Cell.js +23 -5
  44. package/lib/module/components/ui/Cell/Cell.js.map +1 -1
  45. package/lib/module/components/ui/Cell/Leading.js +2 -2
  46. package/lib/module/components/ui/Cell/Leading.js.map +1 -1
  47. package/lib/module/components/ui/Cell/List.js +10 -5
  48. package/lib/module/components/ui/Cell/List.js.map +1 -1
  49. package/lib/module/components/ui/Cell/styles.js +7 -6
  50. package/lib/module/components/ui/Cell/styles.js.map +1 -1
  51. package/lib/module/components/ui/Checkbox/Checkbox.js +10 -8
  52. package/lib/module/components/ui/Checkbox/Checkbox.js.map +1 -1
  53. package/lib/module/components/ui/Checkbox/styles.js +9 -1
  54. package/lib/module/components/ui/Checkbox/styles.js.map +1 -1
  55. package/lib/module/components/ui/Chip/Chip.js +19 -5
  56. package/lib/module/components/ui/Chip/Chip.js.map +1 -1
  57. package/lib/module/components/ui/Confirm/ConfirmHost.js +28 -11
  58. package/lib/module/components/ui/Confirm/ConfirmHost.js.map +1 -1
  59. package/lib/module/components/ui/Confirm/confirm.js +6 -0
  60. package/lib/module/components/ui/Confirm/confirm.js.map +1 -1
  61. package/lib/module/components/ui/DrawerHeader/DrawerHeader.js +14 -9
  62. package/lib/module/components/ui/DrawerHeader/DrawerHeader.js.map +1 -1
  63. package/lib/module/components/ui/DrawerHeader/styles.js +10 -6
  64. package/lib/module/components/ui/DrawerHeader/styles.js.map +1 -1
  65. package/lib/module/components/ui/Empty/Empty.js +5 -4
  66. package/lib/module/components/ui/Empty/Empty.js.map +1 -1
  67. package/lib/module/components/ui/EntryCard/EntryCard.js +5 -3
  68. package/lib/module/components/ui/EntryCard/EntryCard.js.map +1 -1
  69. package/lib/module/components/ui/EntryCard/styles.js +4 -4
  70. package/lib/module/components/ui/EntryCard/styles.js.map +1 -1
  71. package/lib/module/components/ui/Form/FormRow.js +1 -0
  72. package/lib/module/components/ui/Form/FormRow.js.map +1 -1
  73. package/lib/module/components/ui/Form/styles.js +3 -1
  74. package/lib/module/components/ui/Form/styles.js.map +1 -1
  75. package/lib/module/components/ui/Grid/Grid.js +39 -24
  76. package/lib/module/components/ui/Grid/Grid.js.map +1 -1
  77. package/lib/module/components/ui/Grid/styles.js +35 -46
  78. package/lib/module/components/ui/Grid/styles.js.map +1 -1
  79. package/lib/module/components/ui/Icon/Icon.js +46 -29
  80. package/lib/module/components/ui/Icon/Icon.js.map +1 -1
  81. package/lib/module/components/ui/IconButton/IconButton.js +2 -0
  82. package/lib/module/components/ui/IconButton/IconButton.js.map +1 -1
  83. package/lib/module/components/ui/Logo/Logo.js +2 -1
  84. package/lib/module/components/ui/Logo/Logo.js.map +1 -1
  85. package/lib/module/components/ui/NavBar/NavBar.js +15 -3
  86. package/lib/module/components/ui/NavBar/NavBar.js.map +1 -1
  87. package/lib/module/components/ui/PasswordInput/PasswordInput.js +43 -14
  88. package/lib/module/components/ui/PasswordInput/PasswordInput.js.map +1 -1
  89. package/lib/module/components/ui/PasswordInput/styles.js +1 -1
  90. package/lib/module/components/ui/Pulse/Pulse.js +2 -1
  91. package/lib/module/components/ui/Pulse/Pulse.js.map +1 -1
  92. package/lib/module/components/ui/Pulse/PulseDot.js +8 -10
  93. package/lib/module/components/ui/Pulse/PulseDot.js.map +1 -1
  94. package/lib/module/components/ui/Pulse/types.js +2 -0
  95. package/lib/module/components/ui/Pulse/usePulse.web.js +51 -30
  96. package/lib/module/components/ui/Pulse/usePulse.web.js.map +1 -1
  97. package/lib/module/components/ui/Radio/Radio.js +19 -5
  98. package/lib/module/components/ui/Radio/Radio.js.map +1 -1
  99. package/lib/module/components/ui/Radio/RadioGroup.js +10 -6
  100. package/lib/module/components/ui/Radio/RadioGroup.js.map +1 -1
  101. package/lib/module/components/ui/Radio/styles.js +10 -3
  102. package/lib/module/components/ui/Radio/styles.js.map +1 -1
  103. package/lib/module/components/ui/Reveal/Reveal.web.js +18 -3
  104. package/lib/module/components/ui/Reveal/Reveal.web.js.map +1 -1
  105. package/lib/module/components/ui/Search/Search.js +26 -10
  106. package/lib/module/components/ui/Search/Search.js.map +1 -1
  107. package/lib/module/components/ui/Segmented/Segmented.js +40 -30
  108. package/lib/module/components/ui/Segmented/Segmented.js.map +1 -1
  109. package/lib/module/components/ui/Segmented/styles.js +4 -2
  110. package/lib/module/components/ui/Segmented/styles.js.map +1 -1
  111. package/lib/module/components/ui/Skeleton/Skeleton.js +9 -8
  112. package/lib/module/components/ui/Skeleton/Skeleton.js.map +1 -1
  113. package/lib/module/components/ui/Spinner/Spinner.js +15 -16
  114. package/lib/module/components/ui/Spinner/Spinner.js.map +1 -1
  115. package/lib/module/components/ui/Spinner/Spinner.web.js +10 -14
  116. package/lib/module/components/ui/Spinner/Spinner.web.js.map +1 -1
  117. package/lib/module/components/ui/Spinner/shared.js +31 -0
  118. package/lib/module/components/ui/Spinner/shared.js.map +1 -0
  119. package/lib/module/components/ui/StatusDot/StatusDot.js +21 -4
  120. package/lib/module/components/ui/StatusDot/StatusDot.js.map +1 -1
  121. package/lib/module/components/ui/StatusDot/styles.js +1 -1
  122. package/lib/module/components/ui/StatusDot/types.js +2 -0
  123. package/lib/module/components/ui/Stepper/Stepper.js +46 -10
  124. package/lib/module/components/ui/Stepper/Stepper.js.map +1 -1
  125. package/lib/module/components/ui/Switch/Switch.js +6 -11
  126. package/lib/module/components/ui/Switch/Switch.js.map +1 -1
  127. package/lib/module/components/ui/Switch/Switch.web.js +2 -8
  128. package/lib/module/components/ui/Switch/Switch.web.js.map +1 -1
  129. package/lib/module/components/ui/Switch/styles.js +12 -3
  130. package/lib/module/components/ui/Switch/styles.js.map +1 -1
  131. package/lib/module/components/ui/TabBar/TabBar.js +10 -6
  132. package/lib/module/components/ui/TabBar/TabBar.js.map +1 -1
  133. package/lib/module/components/ui/TabBar/styles.js +28 -39
  134. package/lib/module/components/ui/TabBar/styles.js.map +1 -1
  135. package/lib/module/components/ui/Tabs/Tabs.js +19 -5
  136. package/lib/module/components/ui/Tabs/Tabs.js.map +1 -1
  137. package/lib/module/components/ui/Tabs/styles.js +6 -2
  138. package/lib/module/components/ui/Tabs/styles.js.map +1 -1
  139. package/lib/module/components/ui/Tabs/types.js +2 -0
  140. package/lib/module/components/ui/Tag/styles.js +15 -14
  141. package/lib/module/components/ui/Tag/styles.js.map +1 -1
  142. package/lib/module/components/ui/TextField/TextFieldBase.js +24 -6
  143. package/lib/module/components/ui/TextField/TextFieldBase.js.map +1 -1
  144. package/lib/module/components/ui/Thumbnail/Thumbnail.js +11 -3
  145. package/lib/module/components/ui/Thumbnail/Thumbnail.js.map +1 -1
  146. package/lib/module/components/ui/Thumbnail/styles.js +6 -2
  147. package/lib/module/components/ui/Thumbnail/styles.js.map +1 -1
  148. package/lib/module/components/ui/Toast/ToastHost.js +16 -5
  149. package/lib/module/components/ui/Toast/ToastHost.js.map +1 -1
  150. package/lib/module/components/ui/Toast/ToastHost.web.js +21 -4
  151. package/lib/module/components/ui/Toast/ToastHost.web.js.map +1 -1
  152. package/lib/module/components/ui/Toast/styles.js +2 -0
  153. package/lib/module/components/ui/Toast/styles.js.map +1 -1
  154. package/lib/module/components/ui/Toast/toast.js +23 -3
  155. package/lib/module/components/ui/Toast/toast.js.map +1 -1
  156. package/lib/module/components/ui/shared/badgeStyles.js +31 -0
  157. package/lib/module/components/ui/shared/badgeStyles.js.map +1 -0
  158. package/lib/module/icons/data.js +43 -18
  159. package/lib/module/icons/data.js.map +1 -1
  160. package/lib/module/theme/colors.js +28 -10
  161. package/lib/module/theme/colors.js.map +1 -1
  162. package/lib/module/theme/index.js +6 -2
  163. package/lib/module/theme/index.js.map +1 -1
  164. package/lib/module/theme/scale.js +9 -1
  165. package/lib/module/theme/scale.js.map +1 -1
  166. package/lib/module/theme/shadow.js +24 -41
  167. package/lib/module/theme/shadow.js.map +1 -1
  168. package/lib/module/theme/tokens.js +10 -5
  169. package/lib/module/theme/tokens.js.map +1 -1
  170. package/lib/module/theme/usePrefersReducedMotion.js +12 -0
  171. package/lib/module/theme/usePrefersReducedMotion.js.map +1 -0
  172. package/lib/module/theme/usePrefersReducedMotion.web.js +25 -0
  173. package/lib/module/theme/usePrefersReducedMotion.web.js.map +1 -0
  174. package/lib/module/theme/useTheme.js +13 -0
  175. package/lib/module/theme/useTheme.js.map +1 -1
  176. package/lib/module/utils/logger/logger.js +5 -1
  177. package/lib/module/utils/logger/logger.js.map +1 -1
  178. package/lib/module/utils/testID/testID.js +6 -3
  179. package/lib/module/utils/testID/testID.js.map +1 -1
  180. package/lib/typescript/src/components/business/AvatarWithRing/AvatarWithRing.d.ts +1 -1
  181. package/lib/typescript/src/components/business/AvatarWithRing/AvatarWithRing.d.ts.map +1 -1
  182. package/lib/typescript/src/components/business/AvatarWithRing/styles.d.ts +5 -5
  183. package/lib/typescript/src/components/business/AvatarWithRing/styles.d.ts.map +1 -1
  184. package/lib/typescript/src/components/business/AvatarWithRing/types.d.ts +3 -1
  185. package/lib/typescript/src/components/business/AvatarWithRing/types.d.ts.map +1 -1
  186. package/lib/typescript/src/components/business/Decorations/GradientWash.d.ts +25 -0
  187. package/lib/typescript/src/components/business/Decorations/GradientWash.d.ts.map +1 -1
  188. package/lib/typescript/src/components/business/Decorations/RadialHalo.d.ts.map +1 -1
  189. package/lib/typescript/src/components/business/Decorations/ScreenBackdrop.d.ts +1 -1
  190. package/lib/typescript/src/components/business/Decorations/ScreenBackdrop.d.ts.map +1 -1
  191. package/lib/typescript/src/components/business/Decorations/index.d.ts +1 -1
  192. package/lib/typescript/src/components/business/Decorations/index.d.ts.map +1 -1
  193. package/lib/typescript/src/components/business/Decorations/types.d.ts +2 -0
  194. package/lib/typescript/src/components/business/Decorations/types.d.ts.map +1 -1
  195. package/lib/typescript/src/components/business/GlassStats/GlassStats.d.ts +1 -1
  196. package/lib/typescript/src/components/business/GlassStats/GlassStats.d.ts.map +1 -1
  197. package/lib/typescript/src/components/business/GlassStats/styles.d.ts +2 -2
  198. package/lib/typescript/src/components/business/GlassStats/types.d.ts +5 -0
  199. package/lib/typescript/src/components/business/GlassStats/types.d.ts.map +1 -1
  200. package/lib/typescript/src/components/business/VersionPill/VersionPill.d.ts +1 -1
  201. package/lib/typescript/src/components/business/VersionPill/VersionPill.d.ts.map +1 -1
  202. package/lib/typescript/src/components/business/VersionPill/styles.d.ts +1 -1
  203. package/lib/typescript/src/components/business/VersionPill/styles.d.ts.map +1 -1
  204. package/lib/typescript/src/components/business/VersionPill/types.d.ts +13 -1
  205. package/lib/typescript/src/components/business/VersionPill/types.d.ts.map +1 -1
  206. package/lib/typescript/src/components/business/index.d.ts +1 -1
  207. package/lib/typescript/src/components/business/index.d.ts.map +1 -1
  208. package/lib/typescript/src/components/business/useSvgId.d.ts +12 -0
  209. package/lib/typescript/src/components/business/useSvgId.d.ts.map +1 -0
  210. package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts +1 -1
  211. package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts.map +1 -1
  212. package/lib/typescript/src/components/ui/Avatar/styles.d.ts +1 -1
  213. package/lib/typescript/src/components/ui/Avatar/styles.d.ts.map +1 -1
  214. package/lib/typescript/src/components/ui/Avatar/types.d.ts +3 -1
  215. package/lib/typescript/src/components/ui/Avatar/types.d.ts.map +1 -1
  216. package/lib/typescript/src/components/ui/BlurLayer/BlurLayer.d.ts +1 -1
  217. package/lib/typescript/src/components/ui/BlurLayer/BlurLayer.d.ts.map +1 -1
  218. package/lib/typescript/src/components/ui/BlurLayer/BlurLayer.web.d.ts.map +1 -1
  219. package/lib/typescript/src/components/ui/Button/Button.d.ts +1 -1
  220. package/lib/typescript/src/components/ui/Button/Button.d.ts.map +1 -1
  221. package/lib/typescript/src/components/ui/Button/ButtonBase.d.ts.map +1 -1
  222. package/lib/typescript/src/components/ui/Button/styles.d.ts +2 -1
  223. package/lib/typescript/src/components/ui/Button/styles.d.ts.map +1 -1
  224. package/lib/typescript/src/components/ui/Button/types.d.ts +1 -1
  225. package/lib/typescript/src/components/ui/Button/types.d.ts.map +1 -1
  226. package/lib/typescript/src/components/ui/Card/Card.d.ts.map +1 -1
  227. package/lib/typescript/src/components/ui/Card/styles.d.ts +2 -0
  228. package/lib/typescript/src/components/ui/Card/styles.d.ts.map +1 -1
  229. package/lib/typescript/src/components/ui/Card/types.d.ts +4 -4
  230. package/lib/typescript/src/components/ui/Card/types.d.ts.map +1 -1
  231. package/lib/typescript/src/components/ui/Carousel/Carousel.d.ts +4 -11
  232. package/lib/typescript/src/components/ui/Carousel/Carousel.d.ts.map +1 -1
  233. package/lib/typescript/src/components/ui/Carousel/index.d.ts +1 -1
  234. package/lib/typescript/src/components/ui/Carousel/index.d.ts.map +1 -1
  235. package/lib/typescript/src/components/ui/Carousel/types.d.ts +4 -0
  236. package/lib/typescript/src/components/ui/Carousel/types.d.ts.map +1 -1
  237. package/lib/typescript/src/components/ui/Cell/Cell.d.ts.map +1 -1
  238. package/lib/typescript/src/components/ui/Cell/List.d.ts.map +1 -1
  239. package/lib/typescript/src/components/ui/Cell/styles.d.ts +1 -1
  240. package/lib/typescript/src/components/ui/Cell/styles.d.ts.map +1 -1
  241. package/lib/typescript/src/components/ui/Cell/types.d.ts +5 -2
  242. package/lib/typescript/src/components/ui/Cell/types.d.ts.map +1 -1
  243. package/lib/typescript/src/components/ui/Checkbox/Checkbox.d.ts.map +1 -1
  244. package/lib/typescript/src/components/ui/Checkbox/styles.d.ts +6 -0
  245. package/lib/typescript/src/components/ui/Checkbox/styles.d.ts.map +1 -1
  246. package/lib/typescript/src/components/ui/Chip/Chip.d.ts +4 -3
  247. package/lib/typescript/src/components/ui/Chip/Chip.d.ts.map +1 -1
  248. package/lib/typescript/src/components/ui/Chip/types.d.ts +2 -0
  249. package/lib/typescript/src/components/ui/Chip/types.d.ts.map +1 -1
  250. package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts.map +1 -1
  251. package/lib/typescript/src/components/ui/Confirm/confirm.d.ts.map +1 -1
  252. package/lib/typescript/src/components/ui/Confirm/types.d.ts +4 -2
  253. package/lib/typescript/src/components/ui/Confirm/types.d.ts.map +1 -1
  254. package/lib/typescript/src/components/ui/DrawerHeader/DrawerHeader.d.ts +1 -1
  255. package/lib/typescript/src/components/ui/DrawerHeader/DrawerHeader.d.ts.map +1 -1
  256. package/lib/typescript/src/components/ui/DrawerHeader/styles.d.ts.map +1 -1
  257. package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts +3 -1
  258. package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts.map +1 -1
  259. package/lib/typescript/src/components/ui/Empty/Empty.d.ts +2 -2
  260. package/lib/typescript/src/components/ui/Empty/Empty.d.ts.map +1 -1
  261. package/lib/typescript/src/components/ui/Empty/types.d.ts +3 -0
  262. package/lib/typescript/src/components/ui/Empty/types.d.ts.map +1 -1
  263. package/lib/typescript/src/components/ui/EntryCard/EntryCard.d.ts.map +1 -1
  264. package/lib/typescript/src/components/ui/EntryCard/styles.d.ts.map +1 -1
  265. package/lib/typescript/src/components/ui/EntryCard/types.d.ts +2 -2
  266. package/lib/typescript/src/components/ui/EntryCard/types.d.ts.map +1 -1
  267. package/lib/typescript/src/components/ui/Form/FormRow.d.ts.map +1 -1
  268. package/lib/typescript/src/components/ui/Form/styles.d.ts +1 -0
  269. package/lib/typescript/src/components/ui/Form/styles.d.ts.map +1 -1
  270. package/lib/typescript/src/components/ui/Form/types.d.ts +7 -2
  271. package/lib/typescript/src/components/ui/Form/types.d.ts.map +1 -1
  272. package/lib/typescript/src/components/ui/Grid/Grid.d.ts +1 -1
  273. package/lib/typescript/src/components/ui/Grid/Grid.d.ts.map +1 -1
  274. package/lib/typescript/src/components/ui/Grid/styles.d.ts.map +1 -1
  275. package/lib/typescript/src/components/ui/Grid/types.d.ts +4 -1
  276. package/lib/typescript/src/components/ui/Grid/types.d.ts.map +1 -1
  277. package/lib/typescript/src/components/ui/Icon/Icon.d.ts.map +1 -1
  278. package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts +1 -1
  279. package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts.map +1 -1
  280. package/lib/typescript/src/components/ui/IconButton/types.d.ts +7 -2
  281. package/lib/typescript/src/components/ui/IconButton/types.d.ts.map +1 -1
  282. package/lib/typescript/src/components/ui/Input/Input.d.ts +16 -16
  283. package/lib/typescript/src/components/ui/Input/types.d.ts +3 -2
  284. package/lib/typescript/src/components/ui/Input/types.d.ts.map +1 -1
  285. package/lib/typescript/src/components/ui/Logo/Logo.d.ts.map +1 -1
  286. package/lib/typescript/src/components/ui/NavBar/NavBar.d.ts +8 -1
  287. package/lib/typescript/src/components/ui/NavBar/NavBar.d.ts.map +1 -1
  288. package/lib/typescript/src/components/ui/NavBar/types.d.ts +5 -1
  289. package/lib/typescript/src/components/ui/NavBar/types.d.ts.map +1 -1
  290. package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts +13 -5
  291. package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts.map +1 -1
  292. package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts +1 -1
  293. package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts.map +1 -1
  294. package/lib/typescript/src/components/ui/PasswordInput/types.d.ts +7 -2
  295. package/lib/typescript/src/components/ui/PasswordInput/types.d.ts.map +1 -1
  296. package/lib/typescript/src/components/ui/Pulse/Pulse.d.ts +1 -1
  297. package/lib/typescript/src/components/ui/Pulse/Pulse.d.ts.map +1 -1
  298. package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts +1 -1
  299. package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts.map +1 -1
  300. package/lib/typescript/src/components/ui/Pulse/types.d.ts +5 -0
  301. package/lib/typescript/src/components/ui/Pulse/types.d.ts.map +1 -1
  302. package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts +12 -8
  303. package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts.map +1 -1
  304. package/lib/typescript/src/components/ui/Radio/Radio.d.ts.map +1 -1
  305. package/lib/typescript/src/components/ui/Radio/RadioGroup.d.ts.map +1 -1
  306. package/lib/typescript/src/components/ui/Radio/styles.d.ts +4 -2
  307. package/lib/typescript/src/components/ui/Radio/styles.d.ts.map +1 -1
  308. package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts +9 -0
  309. package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts.map +1 -1
  310. package/lib/typescript/src/components/ui/Search/Search.d.ts +16 -15
  311. package/lib/typescript/src/components/ui/Search/Search.d.ts.map +1 -1
  312. package/lib/typescript/src/components/ui/Search/types.d.ts +3 -1
  313. package/lib/typescript/src/components/ui/Search/types.d.ts.map +1 -1
  314. package/lib/typescript/src/components/ui/Segmented/Segmented.d.ts +1 -1
  315. package/lib/typescript/src/components/ui/Segmented/Segmented.d.ts.map +1 -1
  316. package/lib/typescript/src/components/ui/Segmented/styles.d.ts +1 -1
  317. package/lib/typescript/src/components/ui/Segmented/styles.d.ts.map +1 -1
  318. package/lib/typescript/src/components/ui/Segmented/types.d.ts +2 -0
  319. package/lib/typescript/src/components/ui/Segmented/types.d.ts.map +1 -1
  320. package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts +3 -2
  321. package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts.map +1 -1
  322. package/lib/typescript/src/components/ui/Spinner/Spinner.d.ts.map +1 -1
  323. package/lib/typescript/src/components/ui/Spinner/Spinner.web.d.ts.map +1 -1
  324. package/lib/typescript/src/components/ui/Spinner/shared.d.ts +5 -0
  325. package/lib/typescript/src/components/ui/Spinner/shared.d.ts.map +1 -0
  326. package/lib/typescript/src/components/ui/StatusDot/StatusDot.d.ts +1 -5
  327. package/lib/typescript/src/components/ui/StatusDot/StatusDot.d.ts.map +1 -1
  328. package/lib/typescript/src/components/ui/StatusDot/styles.d.ts +1 -1
  329. package/lib/typescript/src/components/ui/StatusDot/types.d.ts +13 -1
  330. package/lib/typescript/src/components/ui/StatusDot/types.d.ts.map +1 -1
  331. package/lib/typescript/src/components/ui/Stepper/Stepper.d.ts.map +1 -1
  332. package/lib/typescript/src/components/ui/Switch/Switch.d.ts.map +1 -1
  333. package/lib/typescript/src/components/ui/Switch/Switch.web.d.ts.map +1 -1
  334. package/lib/typescript/src/components/ui/Switch/styles.d.ts +7 -1
  335. package/lib/typescript/src/components/ui/Switch/styles.d.ts.map +1 -1
  336. package/lib/typescript/src/components/ui/TabBar/TabBar.d.ts +2 -2
  337. package/lib/typescript/src/components/ui/TabBar/TabBar.d.ts.map +1 -1
  338. package/lib/typescript/src/components/ui/TabBar/styles.d.ts.map +1 -1
  339. package/lib/typescript/src/components/ui/TabBar/types.d.ts +3 -0
  340. package/lib/typescript/src/components/ui/TabBar/types.d.ts.map +1 -1
  341. package/lib/typescript/src/components/ui/Tabs/Tabs.d.ts +1 -1
  342. package/lib/typescript/src/components/ui/Tabs/Tabs.d.ts.map +1 -1
  343. package/lib/typescript/src/components/ui/Tabs/styles.d.ts.map +1 -1
  344. package/lib/typescript/src/components/ui/Tabs/types.d.ts +9 -1
  345. package/lib/typescript/src/components/ui/Tabs/types.d.ts.map +1 -1
  346. package/lib/typescript/src/components/ui/Tag/styles.d.ts +2 -1
  347. package/lib/typescript/src/components/ui/Tag/styles.d.ts.map +1 -1
  348. package/lib/typescript/src/components/ui/Tag/types.d.ts +6 -2
  349. package/lib/typescript/src/components/ui/Tag/types.d.ts.map +1 -1
  350. package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts +16 -16
  351. package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts.map +1 -1
  352. package/lib/typescript/src/components/ui/Textarea/Textarea.d.ts +16 -16
  353. package/lib/typescript/src/components/ui/Textarea/types.d.ts +2 -1
  354. package/lib/typescript/src/components/ui/Textarea/types.d.ts.map +1 -1
  355. package/lib/typescript/src/components/ui/Thumbnail/Thumbnail.d.ts.map +1 -1
  356. package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts +3 -0
  357. package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts.map +1 -1
  358. package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts.map +1 -1
  359. package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts.map +1 -1
  360. package/lib/typescript/src/components/ui/Toast/styles.d.ts.map +1 -1
  361. package/lib/typescript/src/components/ui/Toast/toast.d.ts +0 -5
  362. package/lib/typescript/src/components/ui/Toast/toast.d.ts.map +1 -1
  363. package/lib/typescript/src/components/ui/Toast/types.d.ts +1 -1
  364. package/lib/typescript/src/components/ui/Toast/types.d.ts.map +1 -1
  365. package/lib/typescript/src/components/ui/shared/badgeStyles.d.ts +27 -0
  366. package/lib/typescript/src/components/ui/shared/badgeStyles.d.ts.map +1 -0
  367. package/lib/typescript/src/icons/data.d.ts.map +1 -1
  368. package/lib/typescript/src/icons/types.d.ts +18 -12
  369. package/lib/typescript/src/icons/types.d.ts.map +1 -1
  370. package/lib/typescript/src/theme/colors.d.ts +9 -3
  371. package/lib/typescript/src/theme/colors.d.ts.map +1 -1
  372. package/lib/typescript/src/theme/index.d.ts +3 -2
  373. package/lib/typescript/src/theme/index.d.ts.map +1 -1
  374. package/lib/typescript/src/theme/scale.d.ts.map +1 -1
  375. package/lib/typescript/src/theme/shadow.d.ts +8 -8
  376. package/lib/typescript/src/theme/shadow.d.ts.map +1 -1
  377. package/lib/typescript/src/theme/tokens.d.ts +7 -3
  378. package/lib/typescript/src/theme/tokens.d.ts.map +1 -1
  379. package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts +8 -0
  380. package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts.map +1 -0
  381. package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts +6 -0
  382. package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts.map +1 -0
  383. package/lib/typescript/src/theme/useTheme.d.ts.map +1 -1
  384. package/lib/typescript/src/utils/logger/logger.d.ts.map +1 -1
  385. package/lib/typescript/src/utils/testID/testID.d.ts +6 -3
  386. package/lib/typescript/src/utils/testID/testID.d.ts.map +1 -1
  387. package/package.json +2 -1
  388. package/src/components/business/AvatarWithRing/AvatarWithRing.tsx +5 -4
  389. package/src/components/business/AvatarWithRing/styles.ts +21 -3
  390. package/src/components/business/AvatarWithRing/types.ts +3 -1
  391. package/src/components/business/Decorations/GradientWash.tsx +46 -22
  392. package/src/components/business/Decorations/RadialHalo.tsx +8 -4
  393. package/src/components/business/Decorations/ScreenBackdrop.tsx +23 -5
  394. package/src/components/business/Decorations/index.ts +4 -0
  395. package/src/components/business/Decorations/types.ts +2 -0
  396. package/src/components/business/GlassStats/GlassStats.tsx +8 -4
  397. package/src/components/business/GlassStats/types.ts +6 -0
  398. package/src/components/business/VersionPill/VersionPill.tsx +46 -6
  399. package/src/components/business/VersionPill/styles.ts +1 -1
  400. package/src/components/business/VersionPill/types.ts +13 -1
  401. package/src/components/business/index.ts +1 -0
  402. package/src/components/business/useSvgId.ts +17 -0
  403. package/src/components/ui/Avatar/Avatar.tsx +17 -10
  404. package/src/components/ui/Avatar/styles.ts +7 -7
  405. package/src/components/ui/Avatar/types.ts +3 -1
  406. package/src/components/ui/BlurLayer/BlurLayer.tsx +4 -1
  407. package/src/components/ui/BlurLayer/BlurLayer.web.tsx +7 -1
  408. package/src/components/ui/Button/Button.tsx +2 -1
  409. package/src/components/ui/Button/ButtonBase.tsx +26 -2
  410. package/src/components/ui/Button/styles.ts +27 -25
  411. package/src/components/ui/Button/types.ts +1 -1
  412. package/src/components/ui/Card/Card.tsx +17 -7
  413. package/src/components/ui/Card/styles.ts +5 -0
  414. package/src/components/ui/Card/types.ts +4 -4
  415. package/src/components/ui/Carousel/Carousel.tsx +44 -15
  416. package/src/components/ui/Carousel/index.ts +1 -1
  417. package/src/components/ui/Carousel/types.ts +5 -0
  418. package/src/components/ui/Cell/Cell.tsx +28 -6
  419. package/src/components/ui/Cell/Leading.tsx +2 -2
  420. package/src/components/ui/Cell/List.tsx +14 -8
  421. package/src/components/ui/Cell/styles.ts +8 -5
  422. package/src/components/ui/Cell/types.ts +5 -2
  423. package/src/components/ui/Checkbox/Checkbox.tsx +18 -5
  424. package/src/components/ui/Checkbox/styles.ts +8 -0
  425. package/src/components/ui/Chip/Chip.tsx +20 -5
  426. package/src/components/ui/Chip/types.ts +2 -0
  427. package/src/components/ui/Confirm/ConfirmHost.tsx +26 -10
  428. package/src/components/ui/Confirm/confirm.ts +8 -0
  429. package/src/components/ui/Confirm/types.ts +4 -2
  430. package/src/components/ui/DrawerHeader/DrawerHeader.tsx +18 -12
  431. package/src/components/ui/DrawerHeader/styles.ts +10 -6
  432. package/src/components/ui/DrawerHeader/types.ts +3 -1
  433. package/src/components/ui/Empty/Empty.tsx +5 -4
  434. package/src/components/ui/Empty/types.ts +3 -0
  435. package/src/components/ui/EntryCard/EntryCard.tsx +5 -3
  436. package/src/components/ui/EntryCard/styles.ts +13 -4
  437. package/src/components/ui/EntryCard/types.ts +2 -2
  438. package/src/components/ui/Form/FormRow.tsx +7 -1
  439. package/src/components/ui/Form/styles.ts +2 -0
  440. package/src/components/ui/Form/types.ts +7 -2
  441. package/src/components/ui/Grid/Grid.tsx +42 -25
  442. package/src/components/ui/Grid/styles.ts +8 -20
  443. package/src/components/ui/Grid/types.ts +4 -1
  444. package/src/components/ui/Icon/Icon.tsx +42 -27
  445. package/src/components/ui/IconButton/IconButton.tsx +2 -0
  446. package/src/components/ui/IconButton/types.ts +8 -2
  447. package/src/components/ui/Input/types.ts +3 -2
  448. package/src/components/ui/Logo/Logo.tsx +2 -1
  449. package/src/components/ui/NavBar/NavBar.tsx +16 -2
  450. package/src/components/ui/NavBar/types.ts +5 -1
  451. package/src/components/ui/PasswordInput/PasswordInput.tsx +77 -43
  452. package/src/components/ui/PasswordInput/styles.ts +1 -1
  453. package/src/components/ui/PasswordInput/types.ts +7 -2
  454. package/src/components/ui/Pulse/Pulse.tsx +2 -1
  455. package/src/components/ui/Pulse/PulseDot.tsx +7 -6
  456. package/src/components/ui/Pulse/types.ts +6 -0
  457. package/src/components/ui/Pulse/usePulse.web.ts +50 -33
  458. package/src/components/ui/Radio/Radio.tsx +29 -6
  459. package/src/components/ui/Radio/RadioGroup.tsx +10 -3
  460. package/src/components/ui/Radio/styles.ts +9 -2
  461. package/src/components/ui/Reveal/Reveal.web.tsx +18 -3
  462. package/src/components/ui/Search/Search.tsx +22 -9
  463. package/src/components/ui/Search/types.ts +7 -1
  464. package/src/components/ui/Segmented/Segmented.tsx +8 -3
  465. package/src/components/ui/Segmented/styles.ts +4 -2
  466. package/src/components/ui/Segmented/types.ts +2 -0
  467. package/src/components/ui/Skeleton/Skeleton.tsx +9 -8
  468. package/src/components/ui/Spinner/Spinner.tsx +17 -17
  469. package/src/components/ui/Spinner/Spinner.web.tsx +7 -15
  470. package/src/components/ui/Spinner/shared.ts +37 -0
  471. package/src/components/ui/StatusDot/StatusDot.tsx +21 -3
  472. package/src/components/ui/StatusDot/styles.ts +1 -1
  473. package/src/components/ui/StatusDot/types.ts +14 -1
  474. package/src/components/ui/Stepper/Stepper.tsx +45 -10
  475. package/src/components/ui/Switch/Switch.tsx +4 -10
  476. package/src/components/ui/Switch/Switch.web.tsx +2 -8
  477. package/src/components/ui/Switch/styles.ts +10 -1
  478. package/src/components/ui/TabBar/TabBar.tsx +14 -6
  479. package/src/components/ui/TabBar/styles.ts +9 -21
  480. package/src/components/ui/TabBar/types.ts +3 -0
  481. package/src/components/ui/Tabs/Tabs.tsx +24 -5
  482. package/src/components/ui/Tabs/styles.ts +6 -2
  483. package/src/components/ui/Tabs/types.ts +10 -1
  484. package/src/components/ui/Tag/styles.ts +18 -10
  485. package/src/components/ui/Tag/types.ts +6 -2
  486. package/src/components/ui/TextField/TextFieldBase.tsx +31 -6
  487. package/src/components/ui/Textarea/types.ts +2 -1
  488. package/src/components/ui/Thumbnail/Thumbnail.tsx +14 -3
  489. package/src/components/ui/Thumbnail/styles.ts +6 -2
  490. package/src/components/ui/Toast/ToastHost.tsx +16 -8
  491. package/src/components/ui/Toast/ToastHost.web.tsx +26 -4
  492. package/src/components/ui/Toast/styles.ts +2 -0
  493. package/src/components/ui/Toast/toast.ts +35 -2
  494. package/src/components/ui/Toast/types.ts +1 -1
  495. package/src/components/ui/shared/badgeStyles.ts +36 -0
  496. package/src/icons/data.ts +27 -0
  497. package/src/icons/types.ts +25 -10
  498. package/src/theme/colors.ts +29 -10
  499. package/src/theme/index.ts +10 -1
  500. package/src/theme/scale.ts +5 -1
  501. package/src/theme/shadow.ts +33 -24
  502. package/src/theme/tokens.ts +10 -5
  503. package/src/theme/usePrefersReducedMotion.ts +9 -0
  504. package/src/theme/usePrefersReducedMotion.web.ts +27 -0
  505. package/src/theme/useTheme.ts +15 -0
  506. package/src/utils/logger/logger.ts +5 -1
  507. package/src/utils/testID/testID.ts +6 -3
  508. package/lib/module/components/index.js +0 -5
  509. package/lib/module/components/index.js.map +0 -1
  510. package/lib/typescript/src/components/index.d.ts +0 -3
  511. package/lib/typescript/src/components/index.d.ts.map +0 -1
  512. package/src/components/index.ts +0 -2
package/README.md CHANGED
@@ -10,7 +10,7 @@ Unif 设计系统 —— theme(设计令牌)+ 组件 + 图标 + utils,面向 Rea
10
10
  ## 特性
11
11
 
12
12
  - **运行时主题**:`useColors()` 角色 token 跟随系统 light/dark 自动切换;`useThemedStyles` + 模块顶层 `makeStyles` 缓存样式,绝不内联 hex。
13
- - **40+ 组件**:Button、Card、Cell、NavBar、BottomSheet、Toast 等原子组件 + AvatarWithRing、GlassStats 等通用复合组件,全部从包根 barrel 导出,无需深路径。
13
+ - **40+ 组件**:Button、Card、Cell、NavBar、Toast 等原子组件 + AvatarWithRing、GlassStats 等通用复合组件,全部从包根 barrel 导出,无需深路径。
14
14
  - **a11y 内建**:交互组件预设 `accessibilityRole`;`IconButton` 的 `accessibilityLabel` 为类型必填。
15
15
  - **图标集 + 严格 TS**:`IconName` 闭集类型、`<Icon>` 自动继承主题色;`strict` + `noUncheckedIndexedAccess`,类型随包发布。
16
16
 
@@ -29,7 +29,6 @@ yarn add react-native-svg \
29
29
  react-native-worklets \
30
30
  react-native-safe-area-context \
31
31
  react-native-reanimated-carousel \
32
- @gorhom/bottom-sheet \
33
32
  @sbaiahmed1/react-native-blur
34
33
  ```
35
34
 
@@ -72,8 +71,8 @@ export const App = () => (
72
71
  - **文档站**(快速开始 · 组件 API · 设计令牌 · 设计原则):https://unif-design.github.io/react-native-design/
73
72
  - **AI / LLM**(纯 Markdown,按需 fetch,别凭记忆猜 API):
74
73
  [llms.txt 索引](https://unif-design.github.io/react-native-design/llms.txt) · [llms-full.txt 全文](https://unif-design.github.io/react-native-design/llms-full.txt)
75
- - **Agent Skill** `using-unif-design`(覆盖组件 API、token 规则、与原生 RN 的关键差异):
76
- `/plugin marketplace add unif-design/react-native-skills` → `/plugin install unif-react-native@unif-react-native-skills`
74
+ - **Agent Skill** `unif-design`(覆盖组件 API、token 规则、与原生 RN 的关键差异):
75
+ `/plugin marketplace add unif-design/skills` → `/plugin install unif@unif-skills`
77
76
 
78
77
  ## 兼容性
79
78
 
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import React, { useId, useMemo } from 'react';
3
+ import React, { useMemo } from 'react';
4
4
  import { StyleSheet, Text, View } from 'react-native';
5
5
  import Svg, { Defs, LinearGradient as SvgLinearGradient, Rect, Stop } from 'react-native-svg';
6
6
  import { avatarGradient, useTheme } from "../../../theme/index.js";
7
+ import { useSvgId } from "../useSvgId.js";
7
8
  import { makeAvatarStyles } from "./styles.js";
8
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
10
  /**
@@ -17,20 +18,21 @@ export function AvatarWithRing({
17
18
  label,
18
19
  size = 64,
19
20
  ringColor,
20
- style
21
+ style,
22
+ testID
21
23
  }) {
22
24
  const {
23
25
  colors: c,
24
26
  shadow
25
27
  } = useTheme();
26
- const autoId = useId();
27
- const id = `av-${autoId.replace(/[^a-zA-Z0-9_-]/g, '')}`;
28
+ const id = useSvgId('av');
28
29
  const {
29
30
  inner,
30
31
  styles
31
32
  } = useMemo(() => makeAvatarStyles(size, ringColor ?? c.avatarRing, shadow.brandAvatar, c), [size, ringColor, c, shadow.brandAvatar]);
32
33
  return /*#__PURE__*/_jsx(View, {
33
34
  style: [styles.shell, style],
35
+ testID: testID,
34
36
  children: /*#__PURE__*/_jsxs(View, {
35
37
  style: styles.avatarCore,
36
38
  children: [/*#__PURE__*/_jsxs(Svg, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useId","useMemo","StyleSheet","Text","View","Svg","Defs","LinearGradient","SvgLinearGradient","Rect","Stop","avatarGradient","useTheme","makeAvatarStyles","jsx","_jsx","jsxs","_jsxs","AvatarWithRing","label","size","ringColor","style","colors","c","shadow","autoId","id","replace","inner","styles","avatarRing","brandAvatar","shell","children","avatarCore","width","height","absoluteFill","x1","y1","x2","y2","gradientUnits","offset","stopColor","fill","lineHeight"],"sourceRoot":"../../../../../src","sources":["components/business/AvatarWithRing/AvatarWithRing.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,KAAK,EAAEC,OAAO,QAAQ,OAAO;AAC7C,SAASC,UAAU,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACrD,OAAOC,GAAG,IACRC,IAAI,EACJC,cAAc,IAAIC,iBAAiB,EACnCC,IAAI,EACJC,IAAI,QACC,kBAAkB;AACzB,SAASC,cAAc,EAAEC,QAAQ,QAAQ,yBAAgB;AACzD,SAASC,gBAAgB,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAC;EAC7BC,KAAK;EACLC,IAAI,GAAG,EAAE;EACTC,SAAS;EACTC;AACmB,CAAC,EAAqB;EACzC,MAAM;IAAEC,MAAM,EAAEC,CAAC;IAAEC;EAAO,CAAC,GAAGb,QAAQ,CAAC,CAAC;EACxC,MAAMc,MAAM,GAAG1B,KAAK,CAAC,CAAC;EACtB,MAAM2B,EAAE,GAAG,MAAMD,MAAM,CAACE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE;EACxD,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAG7B,OAAO,CAC/B,MACEY,gBAAgB,CAACO,IAAI,EAAEC,SAAS,IAAIG,CAAC,CAACO,UAAU,EAAEN,MAAM,CAACO,WAAW,EAAER,CAAC,CAAC,EAC1E,CAACJ,IAAI,EAAEC,SAAS,EAAEG,CAAC,EAAEC,MAAM,CAACO,WAAW,CACzC,CAAC;EACD,oBACEjB,IAAA,CAACX,IAAI;IAACkB,KAAK,EAAE,CAACQ,MAAM,CAACG,KAAK,EAAEX,KAAK,CAAE;IAAAY,QAAA,eACjCjB,KAAA,CAACb,IAAI;MAACkB,KAAK,EAAEQ,MAAM,CAACK,UAAW;MAAAD,QAAA,gBAC7BjB,KAAA,CAACZ,GAAG;QAAC+B,KAAK,EAAEP,KAAM;QAACQ,MAAM,EAAER,KAAM;QAACP,KAAK,EAAEpB,UAAU,CAACoC,YAAa;QAAAJ,QAAA,gBAC/DnB,IAAA,CAACT,IAAI;UAAA4B,QAAA,eAGHjB,KAAA,CAACT,iBAAiB;YAChBmB,EAAE,EAAEA,EAAG;YACPY,EAAE,EAAE,CAAE;YACNC,EAAE,EAAE,CAAE;YACNC,EAAE,EAAEZ,KAAM;YACVa,EAAE,EAAEb,KAAM;YACVc,aAAa,EAAC,gBAAgB;YAAAT,QAAA,gBAE9BnB,IAAA,CAACL,IAAI;cAACkC,MAAM,EAAE,CAAE;cAACC,SAAS,EAAElC,cAAc,CAAC,CAAC;YAAE,CAAE,CAAC,eACjDI,IAAA,CAACL,IAAI;cAACkC,MAAM,EAAE,CAAE;cAACC,SAAS,EAAElC,cAAc,CAAC,CAAC;YAAE,CAAE,CAAC;UAAA,CAChC;QAAC,CAChB,CAAC,eACPI,IAAA,CAACN,IAAI;UAAC2B,KAAK,EAAEP,KAAM;UAACQ,MAAM,EAAER,KAAM;UAACiB,IAAI,EAAE,QAAQnB,EAAE;QAAI,CAAE,CAAC;MAAA,CACvD,CAAC,eACNZ,IAAA,CAACZ,IAAI;QAACmB,KAAK,EAAE,CAACQ,MAAM,CAACX,KAAK,EAAE;UAAE4B,UAAU,EAAElB;QAAM,CAAC,CAAE;QAAAK,QAAA,EAAEf;MAAK,CAAO,CAAC;IAAA,CAC9D;EAAC,CACH,CAAC;AAEX","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","StyleSheet","Text","View","Svg","Defs","LinearGradient","SvgLinearGradient","Rect","Stop","avatarGradient","useTheme","useSvgId","makeAvatarStyles","jsx","_jsx","jsxs","_jsxs","AvatarWithRing","label","size","ringColor","style","testID","colors","c","shadow","id","inner","styles","avatarRing","brandAvatar","shell","children","avatarCore","width","height","absoluteFill","x1","y1","x2","y2","gradientUnits","offset","stopColor","fill","lineHeight"],"sourceRoot":"../../../../../src","sources":["components/business/AvatarWithRing/AvatarWithRing.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,UAAU,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACrD,OAAOC,GAAG,IACRC,IAAI,EACJC,cAAc,IAAIC,iBAAiB,EACnCC,IAAI,EACJC,IAAI,QACC,kBAAkB;AACzB,SAASC,cAAc,EAAEC,QAAQ,QAAQ,yBAAgB;AACzD,SAASC,QAAQ,QAAQ,gBAAa;AACtC,SAASC,gBAAgB,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAC;EAC7BC,KAAK;EACLC,IAAI,GAAG,EAAE;EACTC,SAAS;EACTC,KAAK;EACLC;AACmB,CAAC,EAAqB;EACzC,MAAM;IAAEC,MAAM,EAAEC,CAAC;IAAEC;EAAO,CAAC,GAAGf,QAAQ,CAAC,CAAC;EACxC,MAAMgB,EAAE,GAAGf,QAAQ,CAAC,IAAI,CAAC;EACzB,MAAM;IAAEgB,KAAK;IAAEC;EAAO,CAAC,GAAG7B,OAAO,CAC/B,MACEa,gBAAgB,CAACO,IAAI,EAAEC,SAAS,IAAII,CAAC,CAACK,UAAU,EAAEJ,MAAM,CAACK,WAAW,EAAEN,CAAC,CAAC,EAC1E,CAACL,IAAI,EAAEC,SAAS,EAAEI,CAAC,EAAEC,MAAM,CAACK,WAAW,CACzC,CAAC;EACD,oBACEhB,IAAA,CAACZ,IAAI;IAACmB,KAAK,EAAE,CAACO,MAAM,CAACG,KAAK,EAAEV,KAAK,CAAE;IAACC,MAAM,EAAEA,MAAO;IAAAU,QAAA,eACjDhB,KAAA,CAACd,IAAI;MAACmB,KAAK,EAAEO,MAAM,CAACK,UAAW;MAAAD,QAAA,gBAC7BhB,KAAA,CAACb,GAAG;QAAC+B,KAAK,EAAEP,KAAM;QAACQ,MAAM,EAAER,KAAM;QAACN,KAAK,EAAErB,UAAU,CAACoC,YAAa;QAAAJ,QAAA,gBAC/DlB,IAAA,CAACV,IAAI;UAAA4B,QAAA,eAGHhB,KAAA,CAACV,iBAAiB;YAChBoB,EAAE,EAAEA,EAAG;YACPW,EAAE,EAAE,CAAE;YACNC,EAAE,EAAE,CAAE;YACNC,EAAE,EAAEZ,KAAM;YACVa,EAAE,EAAEb,KAAM;YACVc,aAAa,EAAC,gBAAgB;YAAAT,QAAA,gBAE9BlB,IAAA,CAACN,IAAI;cAACkC,MAAM,EAAE,CAAE;cAACC,SAAS,EAAElC,cAAc,CAAC,CAAC;YAAE,CAAE,CAAC,eACjDK,IAAA,CAACN,IAAI;cAACkC,MAAM,EAAE,CAAE;cAACC,SAAS,EAAElC,cAAc,CAAC,CAAC;YAAE,CAAE,CAAC;UAAA,CAChC;QAAC,CAChB,CAAC,eACPK,IAAA,CAACP,IAAI;UAAC2B,KAAK,EAAEP,KAAM;UAACQ,MAAM,EAAER,KAAM;UAACiB,IAAI,EAAE,QAAQlB,EAAE;QAAI,CAAE,CAAC;MAAA,CACvD,CAAC,eACNZ,IAAA,CAACb,IAAI;QAACoB,KAAK,EAAE,CAACO,MAAM,CAACV,KAAK,EAAE;UAAE2B,UAAU,EAAElB;QAAM,CAAC,CAAE;QAAAK,QAAA,EAAEd;MAAK,CAAO,CAAC;IAAA,CAC9D;EAAC,CACH,CAAC;AAEX","ignoreList":[]}
@@ -2,6 +2,8 @@
2
2
 
3
3
  import { StyleSheet } from 'react-native';
4
4
  import { fw, r } from "../../../theme/index.js";
5
+ import { createLogger } from "../../../utils/logger/index.js";
6
+ const log = createLogger('AvatarWithRing');
5
7
 
6
8
  /**
7
9
  * 头像样式工厂 —— **非标 maker 签名**:`(size, ringColor, shadowStyle, c)` 4 参,
@@ -23,9 +25,19 @@ import { fw, r } from "../../../theme/index.js";
23
25
  * - avatarCore:inner×inner 圆,在 shell 内 flex center,内部放 SVG 渐变 + label
24
26
  */
25
27
  export const makeAvatarStyles = (size, ringColor, shadowStyle, c) => {
26
- const dim = r(size);
28
+ // 防御非法 size:NaN / 负数 / 0 会导致 inner 为负传入 SVG。
29
+ // 最小合理值 = ringWidth*2 + 1(至少 1pt 圆心可见)。
30
+ // ringWidth 下限为 2(见下方 Math.max),所以 size 至少要大于 4pt。
31
+ const MIN_SIZE = 5;
32
+ const safeSize = Number.isFinite(size) && size >= MIN_SIZE ? size : (() => {
33
+ if (__DEV__) {
34
+ log.warn(`AvatarWithRing: size=${size} 无效(须 ≥ ${MIN_SIZE}),已钳制为 ${MIN_SIZE}。`);
35
+ }
36
+ return MIN_SIZE;
37
+ })();
38
+ const dim = r(safeSize);
27
39
  const half = dim / 2;
28
- const ringWidth = Math.max(2, r(Math.round(size * 0.0625)));
40
+ const ringWidth = Math.max(2, r(Math.round(safeSize * 0.0625)));
29
41
  const inner = dim - ringWidth * 2;
30
42
  const innerHalf = inner / 2;
31
43
  const styles = StyleSheet.create({
@@ -47,7 +59,7 @@ export const makeAvatarStyles = (size, ringColor, shadowStyle, c) => {
47
59
  justifyContent: 'center'
48
60
  },
49
61
  label: {
50
- fontSize: r(Math.round(size * 0.4)),
62
+ fontSize: r(Math.round(safeSize * 0.4)),
51
63
  fontWeight: fw.bold,
52
64
  color: c.onPrimary,
53
65
  letterSpacing: -0.5,
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","fw","r","makeAvatarStyles","size","ringColor","shadowStyle","c","dim","half","ringWidth","Math","max","round","inner","innerHalf","styles","create","shell","width","height","borderRadius","backgroundColor","alignItems","justifyContent","avatarCore","overflow","label","fontSize","fontWeight","bold","color","onPrimary","letterSpacing","textAlign"],"sourceRoot":"../../../../../src","sources":["components/business/AvatarWithRing/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAwB,cAAc;AACzD,SAASC,EAAE,EAAEC,CAAC,QAA0B,yBAAgB;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAGA,CAC9BC,IAAY,EACZC,SAAiB,EACjBC,WAAsB,EACtBC,CAAc,KACX;EACH,MAAMC,GAAG,GAAGN,CAAC,CAACE,IAAI,CAAC;EACnB,MAAMK,IAAI,GAAGD,GAAG,GAAG,CAAC;EACpB,MAAME,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEV,CAAC,CAACS,IAAI,CAACE,KAAK,CAACT,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;EAC3D,MAAMU,KAAK,GAAGN,GAAG,GAAGE,SAAS,GAAG,CAAC;EACjC,MAAMK,SAAS,GAAGD,KAAK,GAAG,CAAC;EAC3B,MAAME,MAAM,GAAGhB,UAAU,CAACiB,MAAM,CAAC;IAC/BC,KAAK,EAAE;MACLC,KAAK,EAAEX,GAAG;MACVY,MAAM,EAAEZ,GAAG;MACXa,YAAY,EAAEZ,IAAI;MAClBa,eAAe,EAAEjB,SAAS;MAC1B,GAAGC,WAAW;MACdiB,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE;IAClB,CAAC;IACDC,UAAU,EAAE;MACVN,KAAK,EAAEL,KAAK;MACZM,MAAM,EAAEN,KAAK;MACbO,YAAY,EAAEN,SAAS;MACvBW,QAAQ,EAAE,QAAQ;MAClBH,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE;IAClB,CAAC;IACDG,KAAK,EAAE;MACLC,QAAQ,EAAE1B,CAAC,CAACS,IAAI,CAACE,KAAK,CAACT,IAAI,GAAG,GAAG,CAAC,CAAC;MACnCyB,UAAU,EAAE5B,EAAE,CAAC6B,IAAI;MACnBC,KAAK,EAAExB,CAAC,CAACyB,SAAS;MAClBC,aAAa,EAAE,CAAC,GAAG;MACnBC,SAAS,EAAE;IACb;EACF,CAAC,CAAC;EACF,OAAO;IAAExB,SAAS;IAAEF,GAAG;IAAEM,KAAK;IAAEE;EAAO,CAAC;AAC1C,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["StyleSheet","fw","r","createLogger","log","makeAvatarStyles","size","ringColor","shadowStyle","c","MIN_SIZE","safeSize","Number","isFinite","__DEV__","warn","dim","half","ringWidth","Math","max","round","inner","innerHalf","styles","create","shell","width","height","borderRadius","backgroundColor","alignItems","justifyContent","avatarCore","overflow","label","fontSize","fontWeight","bold","color","onPrimary","letterSpacing","textAlign"],"sourceRoot":"../../../../../src","sources":["components/business/AvatarWithRing/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAwB,cAAc;AACzD,SAASC,EAAE,EAAEC,CAAC,QAA0B,yBAAgB;AACxD,SAASC,YAAY,QAAQ,gCAAuB;AAEpD,MAAMC,GAAG,GAAGD,YAAY,CAAC,gBAAgB,CAAC;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAME,gBAAgB,GAAGA,CAC9BC,IAAY,EACZC,SAAiB,EACjBC,WAAsB,EACtBC,CAAc,KACX;EACH;EACA;EACA;EACA,MAAMC,QAAQ,GAAG,CAAC;EAClB,MAAMC,QAAQ,GACZC,MAAM,CAACC,QAAQ,CAACP,IAAI,CAAC,IAAIA,IAAI,IAAII,QAAQ,GACrCJ,IAAI,GACJ,CAAC,MAAM;IACL,IAAIQ,OAAO,EAAE;MACXV,GAAG,CAACW,IAAI,CACN,wBAAwBT,IAAI,WAAWI,QAAQ,UAAUA,QAAQ,GACnE,CAAC;IACH;IACA,OAAOA,QAAQ;EACjB,CAAC,EAAE,CAAC;EACV,MAAMM,GAAG,GAAGd,CAAC,CAACS,QAAQ,CAAC;EACvB,MAAMM,IAAI,GAAGD,GAAG,GAAG,CAAC;EACpB,MAAME,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAElB,CAAC,CAACiB,IAAI,CAACE,KAAK,CAACV,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;EAC/D,MAAMW,KAAK,GAAGN,GAAG,GAAGE,SAAS,GAAG,CAAC;EACjC,MAAMK,SAAS,GAAGD,KAAK,GAAG,CAAC;EAC3B,MAAME,MAAM,GAAGxB,UAAU,CAACyB,MAAM,CAAC;IAC/BC,KAAK,EAAE;MACLC,KAAK,EAAEX,GAAG;MACVY,MAAM,EAAEZ,GAAG;MACXa,YAAY,EAAEZ,IAAI;MAClBa,eAAe,EAAEvB,SAAS;MAC1B,GAAGC,WAAW;MACduB,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE;IAClB,CAAC;IACDC,UAAU,EAAE;MACVN,KAAK,EAAEL,KAAK;MACZM,MAAM,EAAEN,KAAK;MACbO,YAAY,EAAEN,SAAS;MACvBW,QAAQ,EAAE,QAAQ;MAClBH,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE;IAClB,CAAC;IACDG,KAAK,EAAE;MACLC,QAAQ,EAAElC,CAAC,CAACiB,IAAI,CAACE,KAAK,CAACV,QAAQ,GAAG,GAAG,CAAC,CAAC;MACvC0B,UAAU,EAAEpC,EAAE,CAACqC,IAAI;MACnBC,KAAK,EAAE9B,CAAC,CAAC+B,SAAS;MAClBC,aAAa,EAAE,CAAC,GAAG;MACnBC,SAAS,EAAE;IACb;EACF,CAAC,CAAC;EACF,OAAO;IAAExB,SAAS;IAAEF,GAAG;IAAEM,KAAK;IAAEE;EAAO,CAAC;AAC1C,CAAC","ignoreList":[]}
@@ -1,9 +1,53 @@
1
1
  "use strict";
2
2
 
3
- import React, { useId } from 'react';
3
+ import React from 'react';
4
4
  import { View } from 'react-native';
5
5
  import Svg, { Defs, LinearGradient as SvgLinearGradient, Rect, Stop } from 'react-native-svg';
6
+ import { useSvgId } from "../useSvgId.js";
6
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ /** 解析 rgba(r,g,b,a) 或 #RRGGBBAA 字符串拆出 alpha,返回 { color: rgb/hex, opacity }。
9
+ * 非支持格式(rgb / hex / named / hsl 等)原样返回 + opacity=1。
10
+ *
11
+ * 支持格式:
12
+ * - 逗号式 rgba(r,g,b,a) → 拆出 alpha
13
+ * - 8 位 hex #RRGGBBAA → 末两位转 alpha
14
+ * - 其它(rgb / hex6 / named) → 原样 + opacity=1
15
+ *
16
+ * Why:react-native-svg `<Stop stopColor>` 接 rgba 时 alpha 可能被忽略
17
+ * (stopColor 只解析 RGB,需要 stopOpacity 分离),拆分后跨平台一致。 */
18
+ export function parseRgba(color) {
19
+ // 逗号式 rgba(r,g,b,a)
20
+ const mRgba = color.match(/^rgba\(([^)]+)\)$/);
21
+ if (mRgba?.[1]) {
22
+ const parts = mRgba[1].split(',').map(s => s.trim());
23
+ if (parts.length === 4) {
24
+ const alphaStr = parts[3];
25
+ if (alphaStr !== undefined) {
26
+ const alpha = parseFloat(alphaStr);
27
+ if (!Number.isNaN(alpha)) {
28
+ return {
29
+ color: `rgb(${parts.slice(0, 3).join(',')})`,
30
+ opacity: alpha
31
+ };
32
+ }
33
+ }
34
+ }
35
+ }
36
+ // 8 位 hex #RRGGBBAA
37
+ const mHex8 = color.match(/^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/);
38
+ if (mHex8?.[1] && mHex8[2] && mHex8[3] && mHex8[4]) {
39
+ const alpha = parseInt(mHex8[4], 16) / 255;
40
+ return {
41
+ color: `#${mHex8[1]}${mHex8[2]}${mHex8[3]}`,
42
+ opacity: alpha
43
+ };
44
+ }
45
+ return {
46
+ color,
47
+ opacity: 1
48
+ };
49
+ }
50
+
7
51
  /**
8
52
  * 垂直线性渐变 wash —— 全宽矩形 + 顶到底的 SVG LinearGradient。
9
53
  *
@@ -13,48 +57,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
57
  *
14
58
  * `pointerEvents="none"` 透传,装饰层不捕事件。
15
59
  *
16
- * gradientId 不传时用 `useId()` 自动唯一;React 19 useId 返回含冒号 `:r0:`,
17
- * 不是合法 SVG id 字符,sanitize 后再用。
60
+ * gradientId 不传时由 useSvgId 自动生成唯一合法 id(消毒 React 19 useId 的冒号)。
18
61
  */
19
- /** 解析 rgba(r,g,b,a) 字符串拆出 alpha,返回 { color: rgb(...), opacity }。
20
- * 非 rgba 输入(hex / rgb / named)原样返回 + opacity=1。
21
- *
22
- * Why:react-native-svg `<Stop stopColor>` 接 rgba 时 alpha 可能被忽略
23
- * (stopColor 只解析 RGB,需要 stopOpacity 分离),拆分后跨平台一致。 */
24
- function parseRgba(color) {
25
- const m = color.match(/^rgba\(([^)]+)\)$/);
26
- if (!m || !m[1]) return {
27
- color,
28
- opacity: 1
29
- };
30
- const parts = m[1].split(',').map(s => s.trim());
31
- if (parts.length !== 4) return {
32
- color,
33
- opacity: 1
34
- };
35
- const alphaStr = parts[3];
36
- if (alphaStr === undefined) return {
37
- color,
38
- opacity: 1
39
- };
40
- const alpha = parseFloat(alphaStr);
41
- if (Number.isNaN(alpha)) return {
42
- color,
43
- opacity: 1
44
- };
45
- return {
46
- color: `rgb(${parts.slice(0, 3).join(',')})`,
47
- opacity: alpha
48
- };
49
- }
50
62
  export function GradientWash(props) {
51
63
  const {
52
64
  height,
53
65
  style,
54
66
  gradientId
55
67
  } = props;
56
- const autoId = useId();
57
- const id = gradientId ?? `gw-${autoId.replace(/[^a-zA-Z0-9_-]/g, '')}`;
68
+ const id = useSvgId('gw', gradientId);
58
69
  const stops = props.stops ?? [{
59
70
  offset: 0,
60
71
  color: props.color,
@@ -82,6 +93,9 @@ export function GradientWash(props) {
82
93
  gradientUnits: "userSpaceOnUse",
83
94
  children: stops.map((s, i) => {
84
95
  const parsed = parseRgba(s.color);
96
+ // s.opacity 显式传入时优先;未传(undefined)时使用 parseRgba 解出的值。
97
+ // 注:这里是替换而非相乘 —— stops 里的 opacity 字段语义是"最终不透明度",
98
+ // 若需要与解析色 alpha 相乘请在构建 stops 时预先合并。
85
99
  const opacity = s.opacity ?? parsed.opacity;
86
100
  return /*#__PURE__*/_jsx(Stop, {
87
101
  offset: s.offset,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useId","View","Svg","Defs","LinearGradient","SvgLinearGradient","Rect","Stop","jsx","_jsx","jsxs","_jsxs","parseRgba","color","m","match","opacity","parts","split","map","s","trim","length","alphaStr","undefined","alpha","parseFloat","Number","isNaN","slice","join","GradientWash","props","height","style","gradientId","autoId","id","replace","stops","offset","fromOpacity","toOpacity","pointerEvents","children","width","x1","y1","x2","y2","gradientUnits","i","parsed","stopColor","stopOpacity","fill"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/GradientWash.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","View","Svg","Defs","LinearGradient","SvgLinearGradient","Rect","Stop","useSvgId","jsx","_jsx","jsxs","_jsxs","parseRgba","color","mRgba","match","parts","split","map","s","trim","length","alphaStr","undefined","alpha","parseFloat","Number","isNaN","slice","join","opacity","mHex8","parseInt","GradientWash","props","height","style","gradientId","id","stops","offset","fromOpacity","toOpacity","pointerEvents","children","width","x1","y1","x2","y2","gradientUnits","i","parsed","stopColor","stopOpacity","fill"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/GradientWash.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import React, { useId } from 'react';
3
+ import React from 'react';
4
4
  import { View } from 'react-native';
5
5
  import Svg, { Defs, Ellipse, RadialGradient as SvgRadialGradient, Stop } from 'react-native-svg';
6
+ import { useSvgId } from "../useSvgId.js";
7
+ import { parseRgba } from "./GradientWash.js";
6
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
9
  const DEFAULT_MAX_OPACITY = 0.16;
8
10
  const buildStops = maxOpacity => [{
@@ -35,13 +37,17 @@ export function RadialHalo({
35
37
  }) {
36
38
  const w = size;
37
39
  const h = height ?? size;
38
- const autoId = useId();
39
- const id = gradientId ?? `rh-${autoId.replace(/[^a-zA-Z0-9_-]/g, '')}`;
40
+ const id = useSvgId('rh', gradientId);
40
41
  const resolvedStops = stops ?? buildStops(maxOpacity);
41
42
  const cx = w / 2;
42
43
  const cy = h / 2;
43
44
  // farthest-corner:r = 中心到最远角的距离
44
45
  const r = Math.sqrt(cx * cx + cy * cy);
46
+ // parseRgba:react-native-svg stopColor 只解析 RGB,rgba/8位hex 的 alpha 会被忽略;
47
+ // 拆分为 stopColor(rgb/hex6) + stopOpacity 后跨平台一致(与 GradientWash 同理)。
48
+ const {
49
+ color: stopColor
50
+ } = parseRgba(color);
45
51
  return /*#__PURE__*/_jsx(View, {
46
52
  pointerEvents: "none",
47
53
  style: [{
@@ -62,7 +68,7 @@ export function RadialHalo({
62
68
  gradientUnits: "userSpaceOnUse",
63
69
  children: resolvedStops.map((s, i) => /*#__PURE__*/_jsx(Stop, {
64
70
  offset: s.offset,
65
- stopColor: color,
71
+ stopColor: stopColor,
66
72
  stopOpacity: s.opacity
67
73
  }, `${s.offset}-${i}`))
68
74
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","useId","View","Svg","Defs","Ellipse","RadialGradient","SvgRadialGradient","Stop","jsx","_jsx","jsxs","_jsxs","DEFAULT_MAX_OPACITY","buildStops","maxOpacity","offset","opacity","RadialHalo","size","height","color","stops","style","gradientId","w","h","autoId","id","replace","resolvedStops","cx","cy","r","Math","sqrt","pointerEvents","width","children","fx","fy","gradientUnits","map","s","i","stopColor","stopOpacity","rx","ry","fill"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/RadialHalo.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,KAAK,QAAQ,OAAO;AACpC,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,GAAG,IACRC,IAAI,EACJC,OAAO,EACPC,cAAc,IAAIC,iBAAiB,EACnCC,IAAI,QACC,kBAAkB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG1B,MAAMC,mBAAmB,GAAG,IAAI;AAEhC,MAAMC,UAAU,GAAIC,UAAkB,IAAK,CACzC;EAAEC,MAAM,EAAE,CAAC;EAAEC,OAAO,EAAEF;AAAW,CAAC,EAClC;EAAEC,MAAM,EAAE,IAAI;EAAEC,OAAO,EAAE;AAAE,CAAC,EAC5B;EAAED,MAAM,EAAE,CAAC;EAAEC,OAAO,EAAE;AAAE,CAAC,CAC1B;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EACzBC,IAAI;EACJC,MAAM;EACNC,KAAK;EACLN,UAAU,GAAGF,mBAAmB;EAChCS,KAAK;EACLC,KAAK;EACLC;AACe,CAAC,EAAqB;EACrC,MAAMC,CAAC,GAAGN,IAAI;EACd,MAAMO,CAAC,GAAGN,MAAM,IAAID,IAAI;EACxB,MAAMQ,MAAM,GAAG1B,KAAK,CAAC,CAAC;EACtB,MAAM2B,EAAE,GAAGJ,UAAU,IAAI,MAAMG,MAAM,CAACE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE;EACtE,MAAMC,aAAa,GAAGR,KAAK,IAAIR,UAAU,CAACC,UAAU,CAAC;EACrD,MAAMgB,EAAE,GAAGN,CAAC,GAAG,CAAC;EAChB,MAAMO,EAAE,GAAGN,CAAC,GAAG,CAAC;EAChB;EACA,MAAMO,CAAC,GAAGC,IAAI,CAACC,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,CAAC;EACtC,oBACEtB,IAAA,CAACR,IAAI;IAACkC,aAAa,EAAC,MAAM;IAACb,KAAK,EAAE,CAAC;MAAEc,KAAK,EAAEZ,CAAC;MAAEL,MAAM,EAAEM;IAAE,CAAC,EAAEH,KAAK,CAAE;IAAAe,QAAA,eACjE1B,KAAA,CAACT,GAAG;MAACkC,KAAK,EAAEZ,CAAE;MAACL,MAAM,EAAEM,CAAE;MAAAY,QAAA,gBACvB5B,IAAA,CAACN,IAAI;QAAAkC,QAAA,eAGH5B,IAAA,CAACH,iBAAiB;UAChBqB,EAAE,EAAEA,EAAG;UACPG,EAAE,EAAEA,EAAG;UACPC,EAAE,EAAEA,EAAG;UACPC,CAAC,EAAEA,CAAE;UACLM,EAAE,EAAER,EAAG;UACPS,EAAE,EAAER,EAAG;UACPS,aAAa,EAAC,gBAAgB;UAAAH,QAAA,EAE7BR,aAAa,CAACY,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,kBACtBlC,IAAA,CAACF,IAAI;YAEHQ,MAAM,EAAE2B,CAAC,CAAC3B,MAAO;YACjB6B,SAAS,EAAExB,KAAM;YACjByB,WAAW,EAAEH,CAAC,CAAC1B;UAAQ,GAHlB,GAAG0B,CAAC,CAAC3B,MAAM,IAAI4B,CAAC,EAItB,CACF;QAAC,CACe;MAAC,CAChB,CAAC,eACPlC,IAAA,CAACL,OAAO;QAAC0B,EAAE,EAAEA,EAAG;QAACC,EAAE,EAAEA,EAAG;QAACe,EAAE,EAAEhB,EAAG;QAACiB,EAAE,EAAEhB,EAAG;QAACiB,IAAI,EAAE,QAAQrB,EAAE;MAAI,CAAE,CAAC;IAAA,CAC7D;EAAC,CACF,CAAC;AAEX","ignoreList":[]}
1
+ {"version":3,"names":["React","View","Svg","Defs","Ellipse","RadialGradient","SvgRadialGradient","Stop","useSvgId","parseRgba","jsx","_jsx","jsxs","_jsxs","DEFAULT_MAX_OPACITY","buildStops","maxOpacity","offset","opacity","RadialHalo","size","height","color","stops","style","gradientId","w","h","id","resolvedStops","cx","cy","r","Math","sqrt","stopColor","pointerEvents","width","children","fx","fy","gradientUnits","map","s","i","stopOpacity","rx","ry","fill"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/RadialHalo.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,GAAG,IACRC,IAAI,EACJC,OAAO,EACPC,cAAc,IAAIC,iBAAiB,EACnCC,IAAI,QACC,kBAAkB;AACzB,SAASC,QAAQ,QAAQ,gBAAa;AACtC,SAASC,SAAS,QAAQ,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAG3C,MAAMC,mBAAmB,GAAG,IAAI;AAEhC,MAAMC,UAAU,GAAIC,UAAkB,IAAK,CACzC;EAAEC,MAAM,EAAE,CAAC;EAAEC,OAAO,EAAEF;AAAW,CAAC,EAClC;EAAEC,MAAM,EAAE,IAAI;EAAEC,OAAO,EAAE;AAAE,CAAC,EAC5B;EAAED,MAAM,EAAE,CAAC;EAAEC,OAAO,EAAE;AAAE,CAAC,CAC1B;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EACzBC,IAAI;EACJC,MAAM;EACNC,KAAK;EACLN,UAAU,GAAGF,mBAAmB;EAChCS,KAAK;EACLC,KAAK;EACLC;AACe,CAAC,EAAqB;EACrC,MAAMC,CAAC,GAAGN,IAAI;EACd,MAAMO,CAAC,GAAGN,MAAM,IAAID,IAAI;EACxB,MAAMQ,EAAE,GAAGpB,QAAQ,CAAC,IAAI,EAAEiB,UAAU,CAAC;EACrC,MAAMI,aAAa,GAAGN,KAAK,IAAIR,UAAU,CAACC,UAAU,CAAC;EACrD,MAAMc,EAAE,GAAGJ,CAAC,GAAG,CAAC;EAChB,MAAMK,EAAE,GAAGJ,CAAC,GAAG,CAAC;EAChB;EACA,MAAMK,CAAC,GAAGC,IAAI,CAACC,IAAI,CAACJ,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,CAAC;EACtC;EACA;EACA,MAAM;IAAET,KAAK,EAAEa;EAAU,CAAC,GAAG1B,SAAS,CAACa,KAAK,CAAC;EAC7C,oBACEX,IAAA,CAACV,IAAI;IAACmC,aAAa,EAAC,MAAM;IAACZ,KAAK,EAAE,CAAC;MAAEa,KAAK,EAAEX,CAAC;MAAEL,MAAM,EAAEM;IAAE,CAAC,EAAEH,KAAK,CAAE;IAAAc,QAAA,eACjEzB,KAAA,CAACX,GAAG;MAACmC,KAAK,EAAEX,CAAE;MAACL,MAAM,EAAEM,CAAE;MAAAW,QAAA,gBACvB3B,IAAA,CAACR,IAAI;QAAAmC,QAAA,eAGH3B,IAAA,CAACL,iBAAiB;UAChBsB,EAAE,EAAEA,EAAG;UACPE,EAAE,EAAEA,EAAG;UACPC,EAAE,EAAEA,EAAG;UACPC,CAAC,EAAEA,CAAE;UACLO,EAAE,EAAET,EAAG;UACPU,EAAE,EAAET,EAAG;UACPU,aAAa,EAAC,gBAAgB;UAAAH,QAAA,EAE7BT,aAAa,CAACa,GAAG,CAAC,CAACC,CAAC,EAAEC,CAAC,kBACtBjC,IAAA,CAACJ,IAAI;YAEHU,MAAM,EAAE0B,CAAC,CAAC1B,MAAO;YACjBkB,SAAS,EAAEA,SAAU;YACrBU,WAAW,EAAEF,CAAC,CAACzB;UAAQ,GAHlB,GAAGyB,CAAC,CAAC1B,MAAM,IAAI2B,CAAC,EAItB,CACF;QAAC,CACe;MAAC,CAChB,CAAC,eACPjC,IAAA,CAACP,OAAO;QAAC0B,EAAE,EAAEA,EAAG;QAACC,EAAE,EAAEA,EAAG;QAACe,EAAE,EAAEhB,EAAG;QAACiB,EAAE,EAAEhB,EAAG;QAACiB,IAAI,EAAE,QAAQpB,EAAE;MAAI,CAAE,CAAC;IAAA,CAC7D;EAAC,CACF,CAAC;AAEX","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React from 'react';
4
4
  import { StyleSheet, useWindowDimensions, View } from 'react-native';
5
- import { useColors, useTheme, warmOrangePalette } from "../../../theme/index.js";
5
+ import { r, useColors, useTheme, warmOrangePalette } from "../../../theme/index.js";
6
6
  import { GradientWash } from "./GradientWash.js";
7
7
  import { RadialHalo } from "./RadialHalo.js";
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -24,23 +24,25 @@ const PRESETS = {
24
24
  warmOrange: {
25
25
  light: buildStops(warmOrangePalette.light, WARM_ORANGE_OFFSETS),
26
26
  dark: buildStops(warmOrangePalette.dark, WARM_ORANGE_OFFSETS),
27
- halos: [{
28
- size: 520,
29
- height: 420,
27
+ halos: [
28
+ // [L-88] halo 几何走 r() 对齐缩放纪律;maxOpacity / centerX 是无单位值,不缩放。
29
+ {
30
+ size: r(520),
31
+ height: r(420),
30
32
  maxOpacity: 0.22,
31
- top: -120,
33
+ top: r(-120),
32
34
  centerX: true
33
35
  }, {
34
- size: 560,
35
- height: 380,
36
+ size: r(560),
37
+ height: r(380),
36
38
  maxOpacity: 0.18,
37
- bottom: -160,
39
+ bottom: r(-160),
38
40
  centerX: true
39
41
  }, {
40
- size: 220,
42
+ size: r(220),
41
43
  maxOpacity: 0.16,
42
- top: 180,
43
- right: -80
44
+ top: r(180),
45
+ right: r(-80)
44
46
  }]
45
47
  }
46
48
  };
@@ -68,7 +70,8 @@ export function ScreenBackdrop({
68
70
  stops,
69
71
  halos,
70
72
  children,
71
- style
73
+ style,
74
+ testID
72
75
  }) {
73
76
  const c = useColors();
74
77
  const {
@@ -89,6 +92,7 @@ export function ScreenBackdrop({
89
92
  style: [backdropStyles.root, {
90
93
  backgroundColor: c.background
91
94
  }, style],
95
+ testID: testID,
92
96
  children: [resolvedStops ? /*#__PURE__*/_jsx(GradientWash, {
93
97
  height: winH,
94
98
  stops: isDark ? resolvedStops.dark : resolvedStops.light,
@@ -100,8 +104,12 @@ export function ScreenBackdrop({
100
104
  size: h.size,
101
105
  height: h.height,
102
106
  color: h.color ?? c.primary,
103
- maxOpacity: h.maxOpacity,
104
- gradientId: `screen-backdrop-halo-${i}`,
107
+ maxOpacity: h.maxOpacity
108
+ // [L-60] 不传 gradientId —— 让 RadialHalo 走自己的 useSvgId(useId) 默认值。
109
+ // 实例内同名在多 ScreenBackdrop 同挂(keep-mounted 栈、导航页)时会导致
110
+ // web DOM SVG 的 url(#id) 命中文档首个同名渐变,造成跨实例渐变串台。
111
+ // useId 保证每次挂载唯一,「实例内多 halo 不同 id」也由 useSvgId 前缀+'rh' 保证。
112
+ ,
105
113
  style: [backdropStyles.haloAbsolute, {
106
114
  top: h.top,
107
115
  bottom: h.bottom,
@@ -1 +1 @@
1
- {"version":3,"names":["React","StyleSheet","useWindowDimensions","View","useColors","useTheme","warmOrangePalette","GradientWash","RadialHalo","jsx","_jsx","jsxs","_jsxs","buildStops","palette","offsets","map","color","i","offset","length","opacity","WARM_ORANGE_OFFSETS","PRESETS","warmOrange","light","dark","halos","size","height","maxOpacity","top","centerX","bottom","right","ScreenBackdrop","preset","stops","children","style","c","scheme","width","winW","winH","isDark","cfg","undefined","resolvedStops","resolvedHalos","backdropStyles","root","backgroundColor","background","gradient","h","left","primary","gradientId","haloAbsolute","create","flex","position","overflow"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/ScreenBackdrop.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","StyleSheet","useWindowDimensions","View","r","useColors","useTheme","warmOrangePalette","GradientWash","RadialHalo","jsx","_jsx","jsxs","_jsxs","buildStops","palette","offsets","map","color","i","offset","length","opacity","WARM_ORANGE_OFFSETS","PRESETS","warmOrange","light","dark","halos","size","height","maxOpacity","top","centerX","bottom","right","ScreenBackdrop","preset","stops","children","style","testID","c","scheme","width","winW","winH","isDark","cfg","undefined","resolvedStops","resolvedHalos","backdropStyles","root","backgroundColor","background","gradient","h","left","primary","haloAbsolute","create","flex","position","overflow"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/ScreenBackdrop.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,mBAAmB,EAAEC,IAAI,QAAQ,cAAc;AACpE,SAASC,CAAC,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,iBAAiB,QAAQ,yBAAgB;AAC1E,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,UAAU,QAAQ,iBAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAc1C;AACA;AACA,SAASC,UAAUA,CACjBC,OAA8B,EAC9BC,OAA8B,EACD;EAC7B,OAAOD,OAAO,CAACE,GAAG,CAAC,CAACC,KAAK,EAAEC,CAAC,MAAM;IAChCC,MAAM,EAAEJ,OAAO,CAACG,CAAC,CAAC,IAAIA,CAAC,IAAIJ,OAAO,CAACM,MAAM,GAAG,CAAC,CAAC;IAC9CH,KAAK;IACLI,OAAO,EAAE;EACX,CAAC,CAAC,CAAC;AACL;AAEA,MAAMC,mBAAmB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAU;;AAEvD;AACA,MAAMC,OAAmD,GAAG;EAC1D;AACF;EACEC,UAAU,EAAE;IACVC,KAAK,EAAEZ,UAAU,CAACP,iBAAiB,CAACmB,KAAK,EAAEH,mBAAmB,CAAC;IAC/DI,IAAI,EAAEb,UAAU,CAACP,iBAAiB,CAACoB,IAAI,EAAEJ,mBAAmB,CAAC;IAC7DK,KAAK,EAAE;IACL;IACA;MACEC,IAAI,EAAEzB,CAAC,CAAC,GAAG,CAAC;MACZ0B,MAAM,EAAE1B,CAAC,CAAC,GAAG,CAAC;MACd2B,UAAU,EAAE,IAAI;MAChBC,GAAG,EAAE5B,CAAC,CAAC,CAAC,GAAG,CAAC;MACZ6B,OAAO,EAAE;IACX,CAAC,EACD;MACEJ,IAAI,EAAEzB,CAAC,CAAC,GAAG,CAAC;MACZ0B,MAAM,EAAE1B,CAAC,CAAC,GAAG,CAAC;MACd2B,UAAU,EAAE,IAAI;MAChBG,MAAM,EAAE9B,CAAC,CAAC,CAAC,GAAG,CAAC;MACf6B,OAAO,EAAE;IACX,CAAC,EACD;MAAEJ,IAAI,EAAEzB,CAAC,CAAC,GAAG,CAAC;MAAE2B,UAAU,EAAE,IAAI;MAAEC,GAAG,EAAE5B,CAAC,CAAC,GAAG,CAAC;MAAE+B,KAAK,EAAE/B,CAAC,CAAC,CAAC,EAAE;IAAE,CAAC;EAElE;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASgC,cAAcA,CAAC;EAC7BC,MAAM;EACNC,KAAK;EACLV,KAAK;EACLW,QAAQ;EACRC,KAAK;EACLC;AACmB,CAAC,EAAqB;EACzC,MAAMC,CAAC,GAAGrC,SAAS,CAAC,CAAC;EACrB,MAAM;IAAEsC;EAAO,CAAC,GAAGrC,QAAQ,CAAC,CAAC;EAC7B,MAAM;IAAEsC,KAAK,EAAEC,IAAI;IAAEf,MAAM,EAAEgB;EAAK,CAAC,GAAG5C,mBAAmB,CAAC,CAAC;EAC3D,MAAM6C,MAAM,GAAGJ,MAAM,KAAK,MAAM;EAEhC,MAAMK,GAAG,GAAGX,MAAM,GAAGb,OAAO,CAACa,MAAM,CAAC,GAAGY,SAAS;EAChD,MAAMC,aAAa,GACjBZ,KAAK,KAAKU,GAAG,GAAG;IAAEtB,KAAK,EAAEsB,GAAG,CAACtB,KAAK;IAAEC,IAAI,EAAEqB,GAAG,CAACrB;EAAK,CAAC,GAAGsB,SAAS,CAAC;EACnE,MAAME,aAAa,GAAGvB,KAAK,IAAIoB,GAAG,EAAEpB,KAAK,IAAI,EAAE;EAE/C,oBACEf,KAAA,CAACV,IAAI;IACHqC,KAAK,EAAE,CAACY,cAAc,CAACC,IAAI,EAAE;MAAEC,eAAe,EAAEZ,CAAC,CAACa;IAAW,CAAC,EAAEf,KAAK,CAAE;IACvEC,MAAM,EAAEA,MAAO;IAAAF,QAAA,GAEdW,aAAa,gBACZvC,IAAA,CAACH,YAAY;MACXsB,MAAM,EAAEgB,IAAK;MACbR,KAAK,EAAES,MAAM,GAAGG,aAAa,CAACvB,IAAI,GAAGuB,aAAa,CAACxB,KAAM;MACzDc,KAAK,EAAEY,cAAc,CAACI;IAAS,CAChC,CAAC,GACA,IAAI,EACPL,aAAa,CAAClC,GAAG,CAAC,CAACwC,CAAC,EAAEtC,CAAC,KAAK;MAC3B,MAAMuC,IAAI,GAAGD,CAAC,CAACxB,OAAO,GAAG,CAACY,IAAI,GAAGY,CAAC,CAAC5B,IAAI,IAAI,CAAC,GAAG4B,CAAC,CAACC,IAAI;MACrD,MAAMvB,KAAK,GAAGsB,CAAC,CAACxB,OAAO,GAAGgB,SAAS,GAAGQ,CAAC,CAACtB,KAAK;MAC7C,oBACExB,IAAA,CAACF,UAAU;QAEToB,IAAI,EAAE4B,CAAC,CAAC5B,IAAK;QACbC,MAAM,EAAE2B,CAAC,CAAC3B,MAAO;QACjBZ,KAAK,EAAEuC,CAAC,CAACvC,KAAK,IAAIwB,CAAC,CAACiB,OAAQ;QAC5B5B,UAAU,EAAE0B,CAAC,CAAC1B;QACd;QACA;QACA;QACA;QAAA;QACAS,KAAK,EAAE,CACLY,cAAc,CAACQ,YAAY,EAC3B;UAAE5B,GAAG,EAAEyB,CAAC,CAACzB,GAAG;UAAEE,MAAM,EAAEuB,CAAC,CAACvB,MAAM;UAAEwB,IAAI;UAAEvB;QAAM,CAAC;MAC7C,GAZG,QAAQhB,CAAC,EAaf,CAAC;IAEN,CAAC,CAAC,EACDoB,QAAQ;EAAA,CACL,CAAC;AAEX;AAEA,MAAMa,cAAc,GAAGnD,UAAU,CAAC4D,MAAM,CAAC;EACvCR,IAAI,EAAE;IAAES,IAAI,EAAE,CAAC;IAAEC,QAAQ,EAAE,UAAU;IAAEC,QAAQ,EAAE;EAAS,CAAC;EAC3DR,QAAQ,EAAE;IAAEO,QAAQ,EAAE,UAAU;IAAE/B,GAAG,EAAE,CAAC;IAAE0B,IAAI,EAAE,CAAC;IAAEvB,KAAK,EAAE;EAAE,CAAC;EAC7DyB,YAAY,EAAE;IAAEG,QAAQ,EAAE;EAAW;AACvC,CAAC,CAAC","ignoreList":[]}
@@ -1,5 +1,8 @@
1
1
  "use strict";
2
2
 
3
+ // Decorations 族:GradientWash / RadialHalo / ScreenBackdrop 三件强内聚,
4
+ // 共享 GradientStop 类型 + parseRgba 工具 —— 刻意共居一目录、共享 types.ts,
5
+ // 不拆单组件目录;CLAUDE.md 组件约定的族式聚合例外。
3
6
  export { GradientWash } from "./GradientWash.js";
4
7
  export { RadialHalo } from "./RadialHalo.js";
5
8
  export { ScreenBackdrop } from "./ScreenBackdrop.js";
@@ -1 +1 @@
1
- {"version":3,"names":["GradientWash","RadialHalo","ScreenBackdrop"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/index.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,cAAc,QAAQ,qBAAkB","ignoreList":[]}
1
+ {"version":3,"names":["GradientWash","RadialHalo","ScreenBackdrop"],"sourceRoot":"../../../../../src","sources":["components/business/Decorations/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,cAAc,QAAQ,qBAAkB","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import React from 'react';
4
4
  import { Text, View } from 'react-native';
5
- import { BlurLayer } from "../../ui/index.js";
5
+ import { BlurLayer } from "../../ui/BlurLayer/index.js";
6
6
  import { useThemedStyles } from "../../../theme/index.js";
7
7
  import { makeGlassStatsStyles } from "./styles.js";
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -13,7 +13,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  * blurType 跟 scheme 自动切。
14
14
  */
15
15
  export function GlassStats({
16
- items
16
+ items,
17
+ style,
18
+ testID
17
19
  }) {
18
20
  const styles = useThemedStyles(makeGlassStatsStyles);
19
21
  return (
@@ -22,7 +24,8 @@ export function GlassStats({
22
24
  // 会裁掉 outer shadow);内层 glass 承担 overflow:hidden + border 裁圆角。
23
25
  // 单层 overflow + shadow 在 iOS 上 shadow 完全不可见。
24
26
  _jsx(View, {
25
- style: styles.glassShell,
27
+ style: [styles.glassShell, style],
28
+ testID: testID,
26
29
  children: /*#__PURE__*/_jsxs(View, {
27
30
  style: styles.glass,
28
31
  children: [/*#__PURE__*/_jsx(BlurLayer, {
@@ -45,7 +48,7 @@ export function GlassStats({
45
48
  children: label
46
49
  })]
47
50
  })]
48
- }, label))
51
+ }, `${label}-${i}`))
49
52
  })]
50
53
  })
51
54
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","Text","View","BlurLayer","useThemedStyles","makeGlassStatsStyles","jsx","_jsx","jsxs","_jsxs","GlassStats","items","styles","style","glassShell","children","glass","intensity","topHighlight","pointerEvents","inner","map","count","label","i","Fragment","sep","col","countText","labelText"],"sourceRoot":"../../../../../src","sources":["components/business/GlassStats/GlassStats.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SAASC,SAAS,QAAQ,mBAAU;AACpC,SAASC,eAAe,QAAQ,yBAAgB;AAChD,SAASC,oBAAoB,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGhD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EAAEC;AAAuB,CAAC,EAAqB;EACxE,MAAMC,MAAM,GAAGR,eAAe,CAACC,oBAAoB,CAAC;EACpD;IAAA;IACE;IACA;IACA;IACAE,IAAA,CAACL,IAAI;MAACW,KAAK,EAAED,MAAM,CAACE,UAAW;MAAAC,QAAA,eAC7BN,KAAA,CAACP,IAAI;QAACW,KAAK,EAAED,MAAM,CAACI,KAAM;QAAAD,QAAA,gBACxBR,IAAA,CAACJ,SAAS;UAACc,SAAS,EAAC;QAAM,CAAE,CAAC,eAE9BV,IAAA,CAACL,IAAI;UAACW,KAAK,EAAED,MAAM,CAACM,YAAa;UAACC,aAAa,EAAC;QAAM,CAAE,CAAC,eACzDZ,IAAA,CAACL,IAAI;UAACW,KAAK,EAAED,MAAM,CAACQ,KAAM;UAAAL,QAAA,EACvBJ,KAAK,CAACU,GAAG,CAAC,CAAC,CAACC,KAAK,EAAEC,KAAK,CAAC,EAAEC,CAAC,kBAC3Bf,KAAA,CAACT,KAAK,CAACyB,QAAQ;YAAAV,QAAA,GACZS,CAAC,GAAG,CAAC,gBAAGjB,IAAA,CAACL,IAAI;cAACW,KAAK,EAAED,MAAM,CAACc;YAAI,CAAE,CAAC,GAAG,IAAI,eAC3CjB,KAAA,CAACP,IAAI;cAACW,KAAK,EAAED,MAAM,CAACe,GAAI;cAAAZ,QAAA,gBACtBR,IAAA,CAACN,IAAI;gBAACY,KAAK,EAAED,MAAM,CAACgB,SAAU;gBAAAb,QAAA,EAAEO;cAAK,CAAO,CAAC,eAC7Cf,IAAA,CAACN,IAAI;gBAACY,KAAK,EAAED,MAAM,CAACiB,SAAU;gBAAAd,QAAA,EAAEQ;cAAK,CAAO,CAAC;YAAA,CACzC,CAAC;UAAA,GALYA,KAML,CACjB;QAAC,CACE,CAAC;MAAA,CACH;IAAC,CACH;EAAC;AAEX","ignoreList":[]}
1
+ {"version":3,"names":["React","Text","View","BlurLayer","useThemedStyles","makeGlassStatsStyles","jsx","_jsx","jsxs","_jsxs","GlassStats","items","style","testID","styles","glassShell","children","glass","intensity","topHighlight","pointerEvents","inner","map","count","label","i","Fragment","sep","col","countText","labelText"],"sourceRoot":"../../../../../src","sources":["components/business/GlassStats/GlassStats.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SAASC,SAAS,QAAQ,6BAAoB;AAC9C,SAASC,eAAe,QAAQ,yBAAgB;AAChD,SAASC,oBAAoB,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGhD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EACzBC,KAAK;EACLC,KAAK;EACLC;AACe,CAAC,EAAqB;EACrC,MAAMC,MAAM,GAAGV,eAAe,CAACC,oBAAoB,CAAC;EACpD;IAAA;IACE;IACA;IACA;IACAE,IAAA,CAACL,IAAI;MAACU,KAAK,EAAE,CAACE,MAAM,CAACC,UAAU,EAAEH,KAAK,CAAE;MAACC,MAAM,EAAEA,MAAO;MAAAG,QAAA,eACtDP,KAAA,CAACP,IAAI;QAACU,KAAK,EAAEE,MAAM,CAACG,KAAM;QAAAD,QAAA,gBACxBT,IAAA,CAACJ,SAAS;UAACe,SAAS,EAAC;QAAM,CAAE,CAAC,eAE9BX,IAAA,CAACL,IAAI;UAACU,KAAK,EAAEE,MAAM,CAACK,YAAa;UAACC,aAAa,EAAC;QAAM,CAAE,CAAC,eACzDb,IAAA,CAACL,IAAI;UAACU,KAAK,EAAEE,MAAM,CAACO,KAAM;UAAAL,QAAA,EACvBL,KAAK,CAACW,GAAG,CAAC,CAAC,CAACC,KAAK,EAAEC,KAAK,CAAC,EAAEC,CAAC,kBAC3BhB,KAAA,CAACT,KAAK,CAAC0B,QAAQ;YAAAV,QAAA,GACZS,CAAC,GAAG,CAAC,gBAAGlB,IAAA,CAACL,IAAI;cAACU,KAAK,EAAEE,MAAM,CAACa;YAAI,CAAE,CAAC,GAAG,IAAI,eAC3ClB,KAAA,CAACP,IAAI;cAACU,KAAK,EAAEE,MAAM,CAACc,GAAI;cAAAZ,QAAA,gBACtBT,IAAA,CAACN,IAAI;gBAACW,KAAK,EAAEE,MAAM,CAACe,SAAU;gBAAAb,QAAA,EAAEO;cAAK,CAAO,CAAC,eAC7ChB,IAAA,CAACN,IAAI;gBAACW,KAAK,EAAEE,MAAM,CAACgB,SAAU;gBAAAd,QAAA,EAAEQ;cAAK,CAAO,CAAC;YAAA,CACzC,CAAC;UAAA,GALY,GAAGA,KAAK,IAAIC,CAAC,EAMlB,CACjB;QAAC,CACE,CAAC;MAAA,CACH;IAAC,CACH;EAAC;AAEX","ignoreList":[]}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
+
3
+ export {};
2
4
  //# sourceMappingURL=types.js.map
@@ -10,27 +10,45 @@ export function VersionPill({
10
10
  version,
11
11
  build,
12
12
  statusColor,
13
- style
13
+ versionPrefix = '版本 ',
14
+ buildPrefix = 'build ',
15
+ style,
16
+ testID
14
17
  }) {
15
18
  const c = useColors();
16
19
  const styles = useThemedStyles(makeVersionPillStyles);
17
20
  const dotColor = statusColor ?? c.success;
21
+ // build 的「省略」契约:undefined / null / "" 均视为空;字符串 "0" 不省略。
22
+ const hasBuild = build != null && build !== '';
23
+ // 状态点用颜色传达语义,SR 无法感知;整个 pill 作为分组提供无障碍合并读出。
24
+ const a11yLabel = hasBuild ? `${versionPrefix}${version},${buildPrefix}${build}` : `${versionPrefix}${version}`;
18
25
  return /*#__PURE__*/_jsxs(View, {
26
+ accessible: true,
27
+ accessibilityLabel: a11yLabel,
19
28
  style: [styles.pill, style],
29
+ testID: testID,
20
30
  children: [/*#__PURE__*/_jsx(View, {
21
31
  style: [styles.dot, {
22
32
  backgroundColor: dotColor
23
- }]
33
+ }],
34
+ accessibilityElementsHidden: true,
35
+ importantForAccessibility: "no"
24
36
  }), /*#__PURE__*/_jsxs(Text, {
25
37
  style: styles.version,
26
- children: ["\u7248\u672C ", version]
27
- }), build ? /*#__PURE__*/_jsxs(_Fragment, {
38
+ accessibilityElementsHidden: true,
39
+ importantForAccessibility: "no",
40
+ children: [versionPrefix, version]
41
+ }), hasBuild ? /*#__PURE__*/_jsxs(_Fragment, {
28
42
  children: [/*#__PURE__*/_jsx(Text, {
29
43
  style: styles.sep,
44
+ accessibilityElementsHidden: true,
45
+ importantForAccessibility: "no",
30
46
  children: "\xB7"
31
47
  }), /*#__PURE__*/_jsxs(Text, {
32
48
  style: styles.build,
33
- children: ["build ", build]
49
+ accessibilityElementsHidden: true,
50
+ importantForAccessibility: "no",
51
+ children: [buildPrefix, build]
34
52
  })]
35
53
  }) : null]
36
54
  });
@@ -1 +1 @@
1
- {"version":3,"names":["React","Text","View","useColors","useThemedStyles","makeVersionPillStyles","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","VersionPill","version","build","statusColor","style","c","styles","dotColor","success","pill","children","dot","backgroundColor","sep"],"sourceRoot":"../../../../../src","sources":["components/business/VersionPill/VersionPill.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SAASC,SAAS,EAAEC,eAAe,QAAQ,yBAAgB;AAC3D,SAASC,qBAAqB,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAGjD;AACA,OAAO,SAASC,WAAWA,CAAC;EAC1BC,OAAO;EACPC,KAAK;EACLC,WAAW;EACXC;AACgB,CAAC,EAAqB;EACtC,MAAMC,CAAC,GAAGd,SAAS,CAAC,CAAC;EACrB,MAAMe,MAAM,GAAGd,eAAe,CAACC,qBAAqB,CAAC;EACrD,MAAMc,QAAQ,GAAGJ,WAAW,IAAIE,CAAC,CAACG,OAAO;EACzC,oBACEX,KAAA,CAACP,IAAI;IAACc,KAAK,EAAE,CAACE,MAAM,CAACG,IAAI,EAAEL,KAAK,CAAE;IAAAM,QAAA,gBAChCf,IAAA,CAACL,IAAI;MAACc,KAAK,EAAE,CAACE,MAAM,CAACK,GAAG,EAAE;QAAEC,eAAe,EAAEL;MAAS,CAAC;IAAE,CAAE,CAAC,eAC5DV,KAAA,CAACR,IAAI;MAACe,KAAK,EAAEE,MAAM,CAACL,OAAQ;MAAAS,QAAA,GAAC,eAAG,EAACT,OAAO;IAAA,CAAO,CAAC,EAC/CC,KAAK,gBACJL,KAAA,CAAAE,SAAA;MAAAW,QAAA,gBACEf,IAAA,CAACN,IAAI;QAACe,KAAK,EAAEE,MAAM,CAACO,GAAI;QAAAH,QAAA,EAAC;MAAC,CAAM,CAAC,eACjCb,KAAA,CAACR,IAAI;QAACe,KAAK,EAAEE,MAAM,CAACJ,KAAM;QAAAQ,QAAA,GAAC,QAAM,EAACR,KAAK;MAAA,CAAO,CAAC;IAAA,CAC/C,CAAC,GACD,IAAI;EAAA,CACJ,CAAC;AAEX","ignoreList":[]}
1
+ {"version":3,"names":["React","Text","View","useColors","useThemedStyles","makeVersionPillStyles","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","VersionPill","version","build","statusColor","versionPrefix","buildPrefix","style","testID","c","styles","dotColor","success","hasBuild","a11yLabel","accessible","accessibilityLabel","pill","children","dot","backgroundColor","accessibilityElementsHidden","importantForAccessibility","sep"],"sourceRoot":"../../../../../src","sources":["components/business/VersionPill/VersionPill.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACzC,SAASC,SAAS,EAAEC,eAAe,QAAQ,yBAAgB;AAC3D,SAASC,qBAAqB,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAGjD;AACA,OAAO,SAASC,WAAWA,CAAC;EAC1BC,OAAO;EACPC,KAAK;EACLC,WAAW;EACXC,aAAa,GAAG,KAAK;EACrBC,WAAW,GAAG,QAAQ;EACtBC,KAAK;EACLC;AACgB,CAAC,EAAqB;EACtC,MAAMC,CAAC,GAAGjB,SAAS,CAAC,CAAC;EACrB,MAAMkB,MAAM,GAAGjB,eAAe,CAACC,qBAAqB,CAAC;EACrD,MAAMiB,QAAQ,GAAGP,WAAW,IAAIK,CAAC,CAACG,OAAO;EACzC;EACA,MAAMC,QAAQ,GAAGV,KAAK,IAAI,IAAI,IAAIA,KAAK,KAAK,EAAE;EAC9C;EACA,MAAMW,SAAS,GAAGD,QAAQ,GACtB,GAAGR,aAAa,GAAGH,OAAO,IAAII,WAAW,GAAGH,KAAK,EAAE,GACnD,GAAGE,aAAa,GAAGH,OAAO,EAAE;EAChC,oBACEJ,KAAA,CAACP,IAAI;IACHwB,UAAU;IACVC,kBAAkB,EAAEF,SAAU;IAC9BP,KAAK,EAAE,CAACG,MAAM,CAACO,IAAI,EAAEV,KAAK,CAAE;IAC5BC,MAAM,EAAEA,MAAO;IAAAU,QAAA,gBAGftB,IAAA,CAACL,IAAI;MACHgB,KAAK,EAAE,CAACG,MAAM,CAACS,GAAG,EAAE;QAAEC,eAAe,EAAET;MAAS,CAAC,CAAE;MACnDU,2BAA2B;MAC3BC,yBAAyB,EAAC;IAAI,CAC/B,CAAC,eACFxB,KAAA,CAACR,IAAI;MACHiB,KAAK,EAAEG,MAAM,CAACR,OAAQ;MACtBmB,2BAA2B;MAC3BC,yBAAyB,EAAC,IAAI;MAAAJ,QAAA,GAE7Bb,aAAa,EACbH,OAAO;IAAA,CACJ,CAAC,EACNW,QAAQ,gBACPf,KAAA,CAAAE,SAAA;MAAAkB,QAAA,gBAEEtB,IAAA,CAACN,IAAI;QACHiB,KAAK,EAAEG,MAAM,CAACa,GAAI;QAClBF,2BAA2B;QAC3BC,yBAAyB,EAAC,IAAI;QAAAJ,QAAA,EAC/B;MAED,CAAM,CAAC,eACPpB,KAAA,CAACR,IAAI;QACHiB,KAAK,EAAEG,MAAM,CAACP,KAAM;QACpBkB,2BAA2B;QAC3BC,yBAAyB,EAAC,IAAI;QAAAJ,QAAA,GAE7BZ,WAAW,EACXH,KAAK;MAAA,CACF,CAAC;IAAA,CACP,CAAC,GACD,IAAI;EAAA,CACJ,CAAC;AAEX","ignoreList":[]}
@@ -4,7 +4,7 @@ import { StyleSheet } from 'react-native';
4
4
  import { fontMono, r, radius, space, type } from "../../../theme/index.js";
5
5
 
6
6
  /** VersionPill 样式工厂 —— hairline 描边 + surface 底胶囊。
7
- * 字号走 type.microPlus(11.5),与 SplashScreen / profileCard / carousel 共用。 */
7
+ * 字号走 type.microPlus(11.5),现仓内仅 VersionPill 消费。 */
8
8
  export const makeVersionPillStyles = c => StyleSheet.create({
9
9
  pill: {
10
10
  flexDirection: 'row',
@@ -1 +1 @@
1
- {"version":3,"names":["GradientWash","RadialHalo","ScreenBackdrop","GlassStats","AvatarWithRing","VersionPill"],"sourceRoot":"../../../../src","sources":["components/business/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,EAAEC,UAAU,EAAEC,cAAc,QAAQ,wBAAe;AASxE,SAASC,UAAU,QAAQ,uBAAc;AAGzC,SAASC,cAAc,QAAQ,2BAAkB;AAGjD,SAASC,WAAW,QAAQ,wBAAe","ignoreList":[]}
1
+ {"version":3,"names":["GradientWash","RadialHalo","ScreenBackdrop","GlassStats","AvatarWithRing","VersionPill"],"sourceRoot":"../../../../src","sources":["components/business/index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAY,EAAEC,UAAU,EAAEC,cAAc,QAAQ,wBAAe;AAUxE,SAASC,UAAU,QAAQ,uBAAc;AAGzC,SAASC,cAAc,QAAQ,2BAAkB;AAGjD,SAASC,WAAW,QAAQ,wBAAe","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ import { useId } from 'react';
4
+
5
+ /**
6
+ * SVG 渐变 id 生成 hook —— 消毒 React 19 useId 中的冒号字符。
7
+ *
8
+ * Why:React 19 的 useId() 返回含冒号(`:r0:`)的字符串,不是合法的 SVG id 字符
9
+ * (XML NCName 规则),直接用在 `<LinearGradient id>` / `<RadialGradient id>`
10
+ * 会导致 SVG 引用失败。sanitize 后拼上 prefix 保证唯一且合法。
11
+ *
12
+ * @param prefix 短前缀,区分同屏多 gradient(如 "gw" / "rh" / "av")。
13
+ * @param override 可选:外部传入的 gradientId;有值时直接返回,跳过 useId 分配。
14
+ */
15
+ export function useSvgId(prefix, override) {
16
+ const autoId = useId();
17
+ if (override !== undefined) return override;
18
+ return `${prefix}-${autoId.replace(/[^a-zA-Z0-9_-]/g, '')}`;
19
+ }
20
+ //# sourceMappingURL=useSvgId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useId","useSvgId","prefix","override","autoId","undefined","replace"],"sourceRoot":"../../../../src","sources":["components/business/useSvgId.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,OAAO;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAACC,MAAc,EAAEC,QAAiB,EAAU;EAClE,MAAMC,MAAM,GAAGJ,KAAK,CAAC,CAAC;EACtB,IAAIG,QAAQ,KAAKE,SAAS,EAAE,OAAOF,QAAQ;EAC3C,OAAO,GAAGD,MAAM,IAAIE,MAAM,CAACE,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE;AAC7D","ignoreList":[]}