@unif/react-native-design 0.19.0 → 0.21.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 (566) hide show
  1. package/README.md +68 -12
  2. package/lib/module/components/business/AvatarWithRing/AvatarWithRing.js +4 -5
  3. package/lib/module/components/business/AvatarWithRing/AvatarWithRing.js.map +1 -1
  4. package/lib/module/components/business/AvatarWithRing/styles.js +10 -9
  5. package/lib/module/components/business/AvatarWithRing/styles.js.map +1 -1
  6. package/lib/module/components/business/VersionPill/VersionPill.js +32 -15
  7. package/lib/module/components/business/VersionPill/VersionPill.js.map +1 -1
  8. package/lib/module/components/business/VersionPill/content.js +30 -0
  9. package/lib/module/components/business/VersionPill/content.js.map +1 -0
  10. package/lib/module/components/business/VersionPill/styles.js +4 -0
  11. package/lib/module/components/business/VersionPill/styles.js.map +1 -1
  12. package/lib/module/components/business/useSvgId.js +17 -8
  13. package/lib/module/components/business/useSvgId.js.map +1 -1
  14. package/lib/module/components/ui/Avatar/Avatar.js +22 -29
  15. package/lib/module/components/ui/Avatar/Avatar.js.map +1 -1
  16. package/lib/module/components/ui/Button/Button.js +40 -23
  17. package/lib/module/components/ui/Button/Button.js.map +1 -1
  18. package/lib/module/components/ui/Button/ButtonBase.js +13 -13
  19. package/lib/module/components/ui/Button/ButtonBase.js.map +1 -1
  20. package/lib/module/components/ui/Carousel/Carousel.js +89 -65
  21. package/lib/module/components/ui/Carousel/Carousel.js.map +1 -1
  22. package/lib/module/components/ui/Carousel/behavior.js +60 -0
  23. package/lib/module/components/ui/Carousel/behavior.js.map +1 -0
  24. package/lib/module/components/ui/Carousel/styles.js +9 -14
  25. package/lib/module/components/ui/Carousel/styles.js.map +1 -1
  26. package/lib/module/components/ui/Cell/Cell.js +76 -65
  27. package/lib/module/components/ui/Cell/Cell.js.map +1 -1
  28. package/lib/module/components/ui/Cell/Leading.js +11 -5
  29. package/lib/module/components/ui/Cell/Leading.js.map +1 -1
  30. package/lib/module/components/ui/Cell/content.js +34 -0
  31. package/lib/module/components/ui/Cell/content.js.map +1 -0
  32. package/lib/module/components/ui/Checkbox/Checkbox.js +25 -8
  33. package/lib/module/components/ui/Checkbox/Checkbox.js.map +1 -1
  34. package/lib/module/components/ui/Confirm/ConfirmHost.js +49 -25
  35. package/lib/module/components/ui/Confirm/ConfirmHost.js.map +1 -1
  36. package/lib/module/components/ui/Confirm/confirm.js +15 -29
  37. package/lib/module/components/ui/Confirm/confirm.js.map +1 -1
  38. package/lib/module/components/ui/Confirm/labels.js +10 -0
  39. package/lib/module/components/ui/Confirm/labels.js.map +1 -0
  40. package/lib/module/components/ui/Confirm/store.js +113 -0
  41. package/lib/module/components/ui/Confirm/store.js.map +1 -0
  42. package/lib/module/components/ui/Confirm/styles.js +4 -0
  43. package/lib/module/components/ui/Confirm/styles.js.map +1 -1
  44. package/lib/module/components/ui/DrawerHeader/DrawerHeader.js +17 -25
  45. package/lib/module/components/ui/DrawerHeader/DrawerHeader.js.map +1 -1
  46. package/lib/module/components/ui/Grid/Grid.js +26 -9
  47. package/lib/module/components/ui/Grid/Grid.js.map +1 -1
  48. package/lib/module/components/ui/Grid/accessibility.js +13 -0
  49. package/lib/module/components/ui/Grid/accessibility.js.map +1 -0
  50. package/lib/module/components/ui/IconButton/IconButton.js +16 -3
  51. package/lib/module/components/ui/IconButton/IconButton.js.map +1 -1
  52. package/lib/module/components/ui/Input/Input.js +8 -5
  53. package/lib/module/components/ui/Input/Input.js.map +1 -1
  54. package/lib/module/components/ui/Logo/Logo.js +22 -4
  55. package/lib/module/components/ui/Logo/Logo.js.map +1 -1
  56. package/lib/module/components/ui/NavBar/NavBar.js +23 -14
  57. package/lib/module/components/ui/NavBar/NavBar.js.map +1 -1
  58. package/lib/module/components/ui/NavBar/isSlot.js +297 -4
  59. package/lib/module/components/ui/NavBar/isSlot.js.map +1 -1
  60. package/lib/module/components/ui/PasswordInput/PasswordInput.js +61 -66
  61. package/lib/module/components/ui/PasswordInput/PasswordInput.js.map +1 -1
  62. package/lib/module/components/ui/Pulse/Pulse.js +1 -1
  63. package/lib/module/components/ui/Pulse/Pulse.js.map +1 -1
  64. package/lib/module/components/ui/Pulse/PulseDot.js +5 -7
  65. package/lib/module/components/ui/Pulse/PulseDot.js.map +1 -1
  66. package/lib/module/components/ui/Pulse/index.js +1 -1
  67. package/lib/module/components/ui/Pulse/index.js.map +1 -1
  68. package/lib/module/components/ui/Pulse/normalizePulseOptions.js +45 -0
  69. package/lib/module/components/ui/Pulse/normalizePulseOptions.js.map +1 -0
  70. package/lib/module/components/ui/Pulse/usePulse.js +61 -24
  71. package/lib/module/components/ui/Pulse/usePulse.js.map +1 -1
  72. package/lib/module/components/ui/Pulse/usePulseDriver.js +44 -0
  73. package/lib/module/components/ui/Pulse/usePulseDriver.js.map +1 -0
  74. package/lib/module/components/ui/Pulse/usePulseDriver.web.js +67 -0
  75. package/lib/module/components/ui/Pulse/usePulseDriver.web.js.map +1 -0
  76. package/lib/module/components/ui/Radio/Radio.js +31 -14
  77. package/lib/module/components/ui/Radio/Radio.js.map +1 -1
  78. package/lib/module/components/ui/Radio/RadioGroup.js +15 -2
  79. package/lib/module/components/ui/Radio/RadioGroup.js.map +1 -1
  80. package/lib/module/components/ui/Reveal/Reveal.js +4 -3
  81. package/lib/module/components/ui/Reveal/Reveal.js.map +1 -1
  82. package/lib/module/components/ui/Reveal/Reveal.web.js +55 -32
  83. package/lib/module/components/ui/Reveal/Reveal.web.js.map +1 -1
  84. package/lib/module/components/ui/Reveal/webTransition.js +157 -0
  85. package/lib/module/components/ui/Reveal/webTransition.js.map +1 -0
  86. package/lib/module/components/ui/Search/Search.js +85 -58
  87. package/lib/module/components/ui/Search/Search.js.map +1 -1
  88. package/lib/module/components/ui/Segmented/Segmented.js +4 -2
  89. package/lib/module/components/ui/Segmented/Segmented.js.map +1 -1
  90. package/lib/module/components/ui/Skeleton/Skeleton.js +5 -7
  91. package/lib/module/components/ui/Skeleton/Skeleton.js.map +1 -1
  92. package/lib/module/components/ui/Spinner/Spinner.js +18 -11
  93. package/lib/module/components/ui/Spinner/Spinner.js.map +1 -1
  94. package/lib/module/components/ui/Spinner/Spinner.web.js +18 -14
  95. package/lib/module/components/ui/Spinner/Spinner.web.js.map +1 -1
  96. package/lib/module/components/ui/Spinner/shared.js +6 -0
  97. package/lib/module/components/ui/Spinner/shared.js.map +1 -1
  98. package/lib/module/components/ui/Stepper/Stepper.js +131 -99
  99. package/lib/module/components/ui/Stepper/Stepper.js.map +1 -1
  100. package/lib/module/components/ui/Stepper/StepperPressable.js +4 -0
  101. package/lib/module/components/ui/Stepper/StepperPressable.js.map +1 -0
  102. package/lib/module/components/ui/Stepper/StepperPressable.web.js +4 -0
  103. package/lib/module/components/ui/Stepper/StepperPressable.web.js.map +1 -0
  104. package/lib/module/components/ui/Stepper/accessibility.js +30 -0
  105. package/lib/module/components/ui/Stepper/accessibility.js.map +1 -0
  106. package/lib/module/components/ui/Stepper/accessibility.types.js +4 -0
  107. package/lib/module/components/ui/Stepper/accessibility.types.js.map +1 -0
  108. package/lib/module/components/ui/Stepper/accessibility.web.js +57 -0
  109. package/lib/module/components/ui/Stepper/accessibility.web.js.map +1 -0
  110. package/lib/module/components/ui/Stepper/layout.js +28 -0
  111. package/lib/module/components/ui/Stepper/layout.js.map +1 -0
  112. package/lib/module/components/ui/Stepper/normalizeStepper.js +53 -0
  113. package/lib/module/components/ui/Stepper/normalizeStepper.js.map +1 -0
  114. package/lib/module/components/ui/Stepper/styles.js +9 -2
  115. package/lib/module/components/ui/Stepper/styles.js.map +1 -1
  116. package/lib/module/components/ui/Switch/Switch.js +45 -19
  117. package/lib/module/components/ui/Switch/Switch.js.map +1 -1
  118. package/lib/module/components/ui/Switch/Switch.web.js +47 -20
  119. package/lib/module/components/ui/Switch/Switch.web.js.map +1 -1
  120. package/lib/module/components/ui/Switch/styles.js +12 -5
  121. package/lib/module/components/ui/Switch/styles.js.map +1 -1
  122. package/lib/module/components/ui/Tag/Tag.js +3 -2
  123. package/lib/module/components/ui/Tag/Tag.js.map +1 -1
  124. package/lib/module/components/ui/TextField/TextFieldBase.js +131 -86
  125. package/lib/module/components/ui/TextField/TextFieldBase.js.map +1 -1
  126. package/lib/module/components/ui/TextField/TextFieldSlot.js +82 -0
  127. package/lib/module/components/ui/TextField/TextFieldSlot.js.map +1 -0
  128. package/lib/module/components/ui/TextField/normalize.js +238 -0
  129. package/lib/module/components/ui/TextField/normalize.js.map +1 -0
  130. package/lib/module/components/ui/TextField/styles.js +31 -0
  131. package/lib/module/components/ui/TextField/styles.js.map +1 -1
  132. package/lib/module/components/ui/TextField/useErrorAnnouncement.js +27 -0
  133. package/lib/module/components/ui/TextField/useErrorAnnouncement.js.map +1 -0
  134. package/lib/module/components/ui/TextField/useTextFieldValue.js +66 -0
  135. package/lib/module/components/ui/TextField/useTextFieldValue.js.map +1 -0
  136. package/lib/module/components/ui/TextField/valueState.js +93 -0
  137. package/lib/module/components/ui/TextField/valueState.js.map +1 -0
  138. package/lib/module/components/ui/Textarea/Textarea.js +7 -3
  139. package/lib/module/components/ui/Textarea/Textarea.js.map +1 -1
  140. package/lib/module/components/ui/Thumbnail/Thumbnail.js +67 -48
  141. package/lib/module/components/ui/Thumbnail/Thumbnail.js.map +1 -1
  142. package/lib/module/components/ui/Thumbnail/normalize.js +58 -0
  143. package/lib/module/components/ui/Thumbnail/normalize.js.map +1 -0
  144. package/lib/module/components/ui/Thumbnail/styles.js +6 -11
  145. package/lib/module/components/ui/Thumbnail/styles.js.map +1 -1
  146. package/lib/module/components/ui/Toast/ToastHost.js +64 -21
  147. package/lib/module/components/ui/Toast/ToastHost.js.map +1 -1
  148. package/lib/module/components/ui/Toast/ToastHost.web.js +73 -24
  149. package/lib/module/components/ui/Toast/ToastHost.web.js.map +1 -1
  150. package/lib/module/components/ui/Toast/store.js +110 -0
  151. package/lib/module/components/ui/Toast/store.js.map +1 -0
  152. package/lib/module/components/ui/Toast/toast.js +17 -7
  153. package/lib/module/components/ui/Toast/toast.js.map +1 -1
  154. package/lib/module/components/ui/index.js.map +1 -1
  155. package/lib/module/components/ui/shared/ImageAttempt.js +28 -0
  156. package/lib/module/components/ui/shared/ImageAttempt.js.map +1 -0
  157. package/lib/module/components/ui/shared/a11y.js +21 -0
  158. package/lib/module/components/ui/shared/a11y.js.map +1 -0
  159. package/lib/module/components/ui/shared/accessibilityName.js +9 -0
  160. package/lib/module/components/ui/shared/accessibilityName.js.map +1 -0
  161. package/lib/module/components/ui/shared/selectImageAttemptSource.js +5 -0
  162. package/lib/module/components/ui/shared/selectImageAttemptSource.js.map +1 -0
  163. package/lib/module/components/ui/shared/selectImageAttemptSource.shared.js +13 -0
  164. package/lib/module/components/ui/shared/selectImageAttemptSource.shared.js.map +1 -0
  165. package/lib/module/components/ui/shared/selectImageAttemptSource.web.js +5 -0
  166. package/lib/module/components/ui/shared/selectImageAttemptSource.web.js.map +1 -0
  167. package/lib/module/icons/data.js +1 -1
  168. package/lib/module/icons/data.js.map +1 -1
  169. package/lib/module/theme/ThemeProvider.js +14 -4
  170. package/lib/module/theme/ThemeProvider.js.map +1 -1
  171. package/lib/module/theme/fontScale.js +13 -0
  172. package/lib/module/theme/fontScale.js.map +1 -0
  173. package/lib/module/theme/index.js +2 -4
  174. package/lib/module/theme/index.js.map +1 -1
  175. package/lib/module/theme/themeContext.js +15 -0
  176. package/lib/module/theme/themeContext.js.map +1 -0
  177. package/lib/module/theme/themeDiagnostics.js +29 -0
  178. package/lib/module/theme/themeDiagnostics.js.map +1 -0
  179. package/lib/module/theme/usePrefersReducedMotion.js +11 -4
  180. package/lib/module/theme/usePrefersReducedMotion.js.map +1 -1
  181. package/lib/module/theme/usePrefersReducedMotion.web.js +5 -2
  182. package/lib/module/theme/usePrefersReducedMotion.web.js.map +1 -1
  183. package/lib/module/theme/useTheme.js +12 -25
  184. package/lib/module/theme/useTheme.js.map +1 -1
  185. package/lib/module/theme/useThemedStyles.js +9 -6
  186. package/lib/module/theme/useThemedStyles.js.map +1 -1
  187. package/lib/module/utils/imageSource.js +198 -0
  188. package/lib/module/utils/imageSource.js.map +1 -0
  189. package/lib/typescript/manual-tests/runtime-api/RuntimeApiScreen.d.ts +12 -0
  190. package/lib/typescript/manual-tests/runtime-api/RuntimeApiScreen.d.ts.map +1 -0
  191. package/lib/typescript/src/components/business/AvatarWithRing/AvatarWithRing.d.ts.map +1 -1
  192. package/lib/typescript/src/components/business/AvatarWithRing/styles.d.ts +8 -7
  193. package/lib/typescript/src/components/business/AvatarWithRing/styles.d.ts.map +1 -1
  194. package/lib/typescript/src/components/business/VersionPill/VersionPill.d.ts +1 -1
  195. package/lib/typescript/src/components/business/VersionPill/VersionPill.d.ts.map +1 -1
  196. package/lib/typescript/src/components/business/VersionPill/content.d.ts +19 -0
  197. package/lib/typescript/src/components/business/VersionPill/content.d.ts.map +1 -0
  198. package/lib/typescript/src/components/business/VersionPill/index.d.ts +1 -1
  199. package/lib/typescript/src/components/business/VersionPill/index.d.ts.map +1 -1
  200. package/lib/typescript/src/components/business/VersionPill/styles.d.ts +4 -0
  201. package/lib/typescript/src/components/business/VersionPill/styles.d.ts.map +1 -1
  202. package/lib/typescript/src/components/business/VersionPill/types.d.ts +6 -2
  203. package/lib/typescript/src/components/business/VersionPill/types.d.ts.map +1 -1
  204. package/lib/typescript/src/components/business/index.d.ts +1 -1
  205. package/lib/typescript/src/components/business/index.d.ts.map +1 -1
  206. package/lib/typescript/src/components/business/useSvgId.d.ts +6 -5
  207. package/lib/typescript/src/components/business/useSvgId.d.ts.map +1 -1
  208. package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts +2 -2
  209. package/lib/typescript/src/components/ui/Avatar/Avatar.d.ts.map +1 -1
  210. package/lib/typescript/src/components/ui/Avatar/types.d.ts +6 -2
  211. package/lib/typescript/src/components/ui/Avatar/types.d.ts.map +1 -1
  212. package/lib/typescript/src/components/ui/Button/Button.d.ts +1 -1
  213. package/lib/typescript/src/components/ui/Button/Button.d.ts.map +1 -1
  214. package/lib/typescript/src/components/ui/Button/ButtonBase.d.ts +5 -3
  215. package/lib/typescript/src/components/ui/Button/ButtonBase.d.ts.map +1 -1
  216. package/lib/typescript/src/components/ui/Button/types.d.ts +5 -3
  217. package/lib/typescript/src/components/ui/Button/types.d.ts.map +1 -1
  218. package/lib/typescript/src/components/ui/Carousel/Carousel.d.ts +3 -3
  219. package/lib/typescript/src/components/ui/Carousel/Carousel.d.ts.map +1 -1
  220. package/lib/typescript/src/components/ui/Carousel/behavior.d.ts +25 -0
  221. package/lib/typescript/src/components/ui/Carousel/behavior.d.ts.map +1 -0
  222. package/lib/typescript/src/components/ui/Carousel/index.d.ts +1 -1
  223. package/lib/typescript/src/components/ui/Carousel/index.d.ts.map +1 -1
  224. package/lib/typescript/src/components/ui/Carousel/styles.d.ts +7 -12
  225. package/lib/typescript/src/components/ui/Carousel/styles.d.ts.map +1 -1
  226. package/lib/typescript/src/components/ui/Carousel/types.d.ts +28 -17
  227. package/lib/typescript/src/components/ui/Carousel/types.d.ts.map +1 -1
  228. package/lib/typescript/src/components/ui/Cell/Cell.d.ts +1 -1
  229. package/lib/typescript/src/components/ui/Cell/Cell.d.ts.map +1 -1
  230. package/lib/typescript/src/components/ui/Cell/Leading.d.ts +2 -3
  231. package/lib/typescript/src/components/ui/Cell/Leading.d.ts.map +1 -1
  232. package/lib/typescript/src/components/ui/Cell/content.d.ts +18 -0
  233. package/lib/typescript/src/components/ui/Cell/content.d.ts.map +1 -0
  234. package/lib/typescript/src/components/ui/Cell/index.d.ts +1 -1
  235. package/lib/typescript/src/components/ui/Cell/index.d.ts.map +1 -1
  236. package/lib/typescript/src/components/ui/Cell/types.d.ts +66 -30
  237. package/lib/typescript/src/components/ui/Cell/types.d.ts.map +1 -1
  238. package/lib/typescript/src/components/ui/Checkbox/Checkbox.d.ts +1 -1
  239. package/lib/typescript/src/components/ui/Checkbox/Checkbox.d.ts.map +1 -1
  240. package/lib/typescript/src/components/ui/Checkbox/types.d.ts +12 -3
  241. package/lib/typescript/src/components/ui/Checkbox/types.d.ts.map +1 -1
  242. package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts +6 -3
  243. package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts.map +1 -1
  244. package/lib/typescript/src/components/ui/Confirm/confirm.d.ts +10 -4
  245. package/lib/typescript/src/components/ui/Confirm/confirm.d.ts.map +1 -1
  246. package/lib/typescript/src/components/ui/Confirm/labels.d.ts +6 -0
  247. package/lib/typescript/src/components/ui/Confirm/labels.d.ts.map +1 -0
  248. package/lib/typescript/src/components/ui/Confirm/store.d.ts +44 -0
  249. package/lib/typescript/src/components/ui/Confirm/store.d.ts.map +1 -0
  250. package/lib/typescript/src/components/ui/Confirm/styles.d.ts +3 -0
  251. package/lib/typescript/src/components/ui/Confirm/styles.d.ts.map +1 -1
  252. package/lib/typescript/src/components/ui/Confirm/types.d.ts +0 -9
  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.map +1 -1
  255. package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts +7 -1
  256. package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts.map +1 -1
  257. package/lib/typescript/src/components/ui/Grid/Grid.d.ts.map +1 -1
  258. package/lib/typescript/src/components/ui/Grid/accessibility.d.ts +5 -0
  259. package/lib/typescript/src/components/ui/Grid/accessibility.d.ts.map +1 -0
  260. package/lib/typescript/src/components/ui/Grid/types.d.ts +2 -0
  261. package/lib/typescript/src/components/ui/Grid/types.d.ts.map +1 -1
  262. package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts +1 -1
  263. package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts.map +1 -1
  264. package/lib/typescript/src/components/ui/IconButton/types.d.ts +4 -2
  265. package/lib/typescript/src/components/ui/IconButton/types.d.ts.map +1 -1
  266. package/lib/typescript/src/components/ui/Input/Input.d.ts +5 -383
  267. package/lib/typescript/src/components/ui/Input/Input.d.ts.map +1 -1
  268. package/lib/typescript/src/components/ui/Input/index.d.ts +1 -0
  269. package/lib/typescript/src/components/ui/Input/index.d.ts.map +1 -1
  270. package/lib/typescript/src/components/ui/Input/types.d.ts +3 -17
  271. package/lib/typescript/src/components/ui/Input/types.d.ts.map +1 -1
  272. package/lib/typescript/src/components/ui/Logo/Logo.d.ts +2 -2
  273. package/lib/typescript/src/components/ui/Logo/Logo.d.ts.map +1 -1
  274. package/lib/typescript/src/components/ui/Logo/types.d.ts +2 -2
  275. package/lib/typescript/src/components/ui/Logo/types.d.ts.map +1 -1
  276. package/lib/typescript/src/components/ui/NavBar/NavBar.d.ts.map +1 -1
  277. package/lib/typescript/src/components/ui/NavBar/index.d.ts +1 -1
  278. package/lib/typescript/src/components/ui/NavBar/index.d.ts.map +1 -1
  279. package/lib/typescript/src/components/ui/NavBar/isSlot.d.ts +24 -4
  280. package/lib/typescript/src/components/ui/NavBar/isSlot.d.ts.map +1 -1
  281. package/lib/typescript/src/components/ui/NavBar/types.d.ts +8 -8
  282. package/lib/typescript/src/components/ui/NavBar/types.d.ts.map +1 -1
  283. package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts +6 -14
  284. package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts.map +1 -1
  285. package/lib/typescript/src/components/ui/PasswordInput/types.d.ts +4 -14
  286. package/lib/typescript/src/components/ui/PasswordInput/types.d.ts.map +1 -1
  287. package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts +1 -1
  288. package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts.map +1 -1
  289. package/lib/typescript/src/components/ui/Pulse/normalizePulseOptions.d.ts +32 -0
  290. package/lib/typescript/src/components/ui/Pulse/normalizePulseOptions.d.ts.map +1 -0
  291. package/lib/typescript/src/components/ui/Pulse/usePulse.d.ts +10 -5
  292. package/lib/typescript/src/components/ui/Pulse/usePulse.d.ts.map +1 -1
  293. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.d.ts +11 -0
  294. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.d.ts.map +1 -0
  295. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.web.d.ts +18 -0
  296. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.web.d.ts.map +1 -0
  297. package/lib/typescript/src/components/ui/Radio/Radio.d.ts +1 -1
  298. package/lib/typescript/src/components/ui/Radio/Radio.d.ts.map +1 -1
  299. package/lib/typescript/src/components/ui/Radio/RadioGroup.d.ts +2 -2
  300. package/lib/typescript/src/components/ui/Radio/RadioGroup.d.ts.map +1 -1
  301. package/lib/typescript/src/components/ui/Radio/types.d.ts +14 -3
  302. package/lib/typescript/src/components/ui/Radio/types.d.ts.map +1 -1
  303. package/lib/typescript/src/components/ui/Reveal/Reveal.d.ts.map +1 -1
  304. package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts +2 -8
  305. package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts.map +1 -1
  306. package/lib/typescript/src/components/ui/Reveal/types.d.ts +1 -1
  307. package/lib/typescript/src/components/ui/Reveal/types.d.ts.map +1 -1
  308. package/lib/typescript/src/components/ui/Reveal/webTransition.d.ts +38 -0
  309. package/lib/typescript/src/components/ui/Reveal/webTransition.d.ts.map +1 -0
  310. package/lib/typescript/src/components/ui/Search/Search.d.ts +4 -214
  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 +13 -6
  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.map +1 -1
  315. package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts +3 -3
  316. package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts.map +1 -1
  317. package/lib/typescript/src/components/ui/Spinner/Spinner.d.ts +1 -1
  318. package/lib/typescript/src/components/ui/Spinner/Spinner.d.ts.map +1 -1
  319. package/lib/typescript/src/components/ui/Spinner/Spinner.web.d.ts +1 -1
  320. package/lib/typescript/src/components/ui/Spinner/Spinner.web.d.ts.map +1 -1
  321. package/lib/typescript/src/components/ui/Spinner/shared.d.ts +5 -0
  322. package/lib/typescript/src/components/ui/Spinner/shared.d.ts.map +1 -1
  323. package/lib/typescript/src/components/ui/Spinner/types.d.ts +1 -1
  324. package/lib/typescript/src/components/ui/Spinner/types.d.ts.map +1 -1
  325. package/lib/typescript/src/components/ui/Stepper/Stepper.d.ts +3 -3
  326. package/lib/typescript/src/components/ui/Stepper/Stepper.d.ts.map +1 -1
  327. package/lib/typescript/src/components/ui/Stepper/StepperPressable.d.ts +2 -0
  328. package/lib/typescript/src/components/ui/Stepper/StepperPressable.d.ts.map +1 -0
  329. package/lib/typescript/src/components/ui/Stepper/StepperPressable.web.d.ts +2 -0
  330. package/lib/typescript/src/components/ui/Stepper/StepperPressable.web.d.ts.map +1 -0
  331. package/lib/typescript/src/components/ui/Stepper/accessibility.d.ts +3 -0
  332. package/lib/typescript/src/components/ui/Stepper/accessibility.d.ts.map +1 -0
  333. package/lib/typescript/src/components/ui/Stepper/accessibility.types.d.ts +23 -0
  334. package/lib/typescript/src/components/ui/Stepper/accessibility.types.d.ts.map +1 -0
  335. package/lib/typescript/src/components/ui/Stepper/accessibility.web.d.ts +9 -0
  336. package/lib/typescript/src/components/ui/Stepper/accessibility.web.d.ts.map +1 -0
  337. package/lib/typescript/src/components/ui/Stepper/layout.d.ts +22 -0
  338. package/lib/typescript/src/components/ui/Stepper/layout.d.ts.map +1 -0
  339. package/lib/typescript/src/components/ui/Stepper/normalizeStepper.d.ts +31 -0
  340. package/lib/typescript/src/components/ui/Stepper/normalizeStepper.d.ts.map +1 -0
  341. package/lib/typescript/src/components/ui/Stepper/styles.d.ts +9 -2
  342. package/lib/typescript/src/components/ui/Stepper/styles.d.ts.map +1 -1
  343. package/lib/typescript/src/components/ui/Stepper/types.d.ts +3 -1
  344. package/lib/typescript/src/components/ui/Stepper/types.d.ts.map +1 -1
  345. package/lib/typescript/src/components/ui/Switch/Switch.d.ts.map +1 -1
  346. package/lib/typescript/src/components/ui/Switch/Switch.web.d.ts.map +1 -1
  347. package/lib/typescript/src/components/ui/Switch/styles.d.ts +9 -3
  348. package/lib/typescript/src/components/ui/Switch/styles.d.ts.map +1 -1
  349. package/lib/typescript/src/components/ui/Switch/types.d.ts +2 -2
  350. package/lib/typescript/src/components/ui/Switch/types.d.ts.map +1 -1
  351. package/lib/typescript/src/components/ui/Tag/Tag.d.ts.map +1 -1
  352. package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts +4 -401
  353. package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts.map +1 -1
  354. package/lib/typescript/src/components/ui/TextField/TextFieldSlot.d.ts +13 -0
  355. package/lib/typescript/src/components/ui/TextField/TextFieldSlot.d.ts.map +1 -0
  356. package/lib/typescript/src/components/ui/TextField/normalize.d.ts +51 -0
  357. package/lib/typescript/src/components/ui/TextField/normalize.d.ts.map +1 -0
  358. package/lib/typescript/src/components/ui/TextField/styles.d.ts +30 -0
  359. package/lib/typescript/src/components/ui/TextField/styles.d.ts.map +1 -1
  360. package/lib/typescript/src/components/ui/TextField/types.d.ts +92 -18
  361. package/lib/typescript/src/components/ui/TextField/types.d.ts.map +1 -1
  362. package/lib/typescript/src/components/ui/TextField/useErrorAnnouncement.d.ts +3 -0
  363. package/lib/typescript/src/components/ui/TextField/useErrorAnnouncement.d.ts.map +1 -0
  364. package/lib/typescript/src/components/ui/TextField/useTextFieldValue.d.ts +18 -0
  365. package/lib/typescript/src/components/ui/TextField/useTextFieldValue.d.ts.map +1 -0
  366. package/lib/typescript/src/components/ui/TextField/valueState.d.ts +50 -0
  367. package/lib/typescript/src/components/ui/TextField/valueState.d.ts.map +1 -0
  368. package/lib/typescript/src/components/ui/Textarea/Textarea.d.ts +4 -382
  369. package/lib/typescript/src/components/ui/Textarea/Textarea.d.ts.map +1 -1
  370. package/lib/typescript/src/components/ui/Textarea/index.d.ts +1 -0
  371. package/lib/typescript/src/components/ui/Textarea/index.d.ts.map +1 -1
  372. package/lib/typescript/src/components/ui/Textarea/types.d.ts +3 -14
  373. package/lib/typescript/src/components/ui/Textarea/types.d.ts.map +1 -1
  374. package/lib/typescript/src/components/ui/Thumbnail/Thumbnail.d.ts +5 -12
  375. package/lib/typescript/src/components/ui/Thumbnail/Thumbnail.d.ts.map +1 -1
  376. package/lib/typescript/src/components/ui/Thumbnail/index.d.ts +1 -1
  377. package/lib/typescript/src/components/ui/Thumbnail/index.d.ts.map +1 -1
  378. package/lib/typescript/src/components/ui/Thumbnail/normalize.d.ts +13 -0
  379. package/lib/typescript/src/components/ui/Thumbnail/normalize.d.ts.map +1 -0
  380. package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts +4 -8
  381. package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts.map +1 -1
  382. package/lib/typescript/src/components/ui/Thumbnail/types.d.ts +21 -13
  383. package/lib/typescript/src/components/ui/Thumbnail/types.d.ts.map +1 -1
  384. package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts +6 -2
  385. package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts.map +1 -1
  386. package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts +6 -3
  387. package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts.map +1 -1
  388. package/lib/typescript/src/components/ui/Toast/store.d.ts +39 -0
  389. package/lib/typescript/src/components/ui/Toast/store.d.ts.map +1 -0
  390. package/lib/typescript/src/components/ui/Toast/toast.d.ts +7 -2
  391. package/lib/typescript/src/components/ui/Toast/toast.d.ts.map +1 -1
  392. package/lib/typescript/src/components/ui/Toast/types.d.ts +5 -3
  393. package/lib/typescript/src/components/ui/Toast/types.d.ts.map +1 -1
  394. package/lib/typescript/src/components/ui/index.d.ts +5 -5
  395. package/lib/typescript/src/components/ui/index.d.ts.map +1 -1
  396. package/lib/typescript/src/components/ui/shared/ImageAttempt.d.ts +13 -0
  397. package/lib/typescript/src/components/ui/shared/ImageAttempt.d.ts.map +1 -0
  398. package/lib/typescript/src/components/ui/shared/a11y.d.ts +19 -0
  399. package/lib/typescript/src/components/ui/shared/a11y.d.ts.map +1 -0
  400. package/lib/typescript/src/components/ui/shared/accessibilityName.d.ts +3 -0
  401. package/lib/typescript/src/components/ui/shared/accessibilityName.d.ts.map +1 -0
  402. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.d.ts +3 -0
  403. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.d.ts.map +1 -0
  404. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.shared.d.ts +4 -0
  405. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.shared.d.ts.map +1 -0
  406. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.web.d.ts +3 -0
  407. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.web.d.ts.map +1 -0
  408. package/lib/typescript/src/theme/ThemeProvider.d.ts +2 -3
  409. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
  410. package/lib/typescript/src/theme/fontScale.d.ts +4 -0
  411. package/lib/typescript/src/theme/fontScale.d.ts.map +1 -0
  412. package/lib/typescript/src/theme/index.d.ts +2 -1
  413. package/lib/typescript/src/theme/index.d.ts.map +1 -1
  414. package/lib/typescript/src/theme/themeContext.d.ts +6 -0
  415. package/lib/typescript/src/theme/themeContext.d.ts.map +1 -0
  416. package/lib/typescript/src/theme/themeDiagnostics.d.ts +6 -0
  417. package/lib/typescript/src/theme/themeDiagnostics.d.ts.map +1 -0
  418. package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts +8 -3
  419. package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts.map +1 -1
  420. package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts +5 -2
  421. package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts.map +1 -1
  422. package/lib/typescript/src/theme/useTheme.d.ts +1 -1
  423. package/lib/typescript/src/theme/useTheme.d.ts.map +1 -1
  424. package/lib/typescript/src/theme/useThemedStyles.d.ts +1 -1
  425. package/lib/typescript/src/theme/useThemedStyles.d.ts.map +1 -1
  426. package/lib/typescript/src/utils/imageSource.d.ts +20 -0
  427. package/lib/typescript/src/utils/imageSource.d.ts.map +1 -0
  428. package/lib/typescript/type-tests/public-api.d.ts +2 -0
  429. package/lib/typescript/type-tests/public-api.d.ts.map +1 -0
  430. package/lib/typescript/website/src/components/iconCatalogCategories.d.ts +11 -0
  431. package/lib/typescript/website/src/components/iconCatalogCategories.d.ts.map +1 -0
  432. package/package.json +31 -17
  433. package/src/components/business/AvatarWithRing/AvatarWithRing.tsx +11 -4
  434. package/src/components/business/AvatarWithRing/styles.ts +11 -9
  435. package/src/components/business/VersionPill/VersionPill.tsx +31 -25
  436. package/src/components/business/VersionPill/content.ts +47 -0
  437. package/src/components/business/VersionPill/index.ts +1 -1
  438. package/src/components/business/VersionPill/styles.ts +4 -0
  439. package/src/components/business/VersionPill/types.ts +7 -2
  440. package/src/components/business/index.ts +1 -1
  441. package/src/components/business/useSvgId.ts +29 -8
  442. package/src/components/ui/Avatar/Avatar.tsx +25 -34
  443. package/src/components/ui/Avatar/types.ts +6 -2
  444. package/src/components/ui/Button/Button.tsx +39 -20
  445. package/src/components/ui/Button/ButtonBase.tsx +21 -12
  446. package/src/components/ui/Button/types.ts +5 -3
  447. package/src/components/ui/Carousel/Carousel.tsx +125 -71
  448. package/src/components/ui/Carousel/behavior.ts +78 -0
  449. package/src/components/ui/Carousel/index.ts +1 -1
  450. package/src/components/ui/Carousel/styles.ts +8 -13
  451. package/src/components/ui/Carousel/types.ts +35 -17
  452. package/src/components/ui/Cell/Cell.tsx +85 -74
  453. package/src/components/ui/Cell/Leading.tsx +14 -14
  454. package/src/components/ui/Cell/content.ts +53 -0
  455. package/src/components/ui/Cell/index.ts +7 -1
  456. package/src/components/ui/Cell/types.ts +64 -30
  457. package/src/components/ui/Checkbox/Checkbox.tsx +35 -8
  458. package/src/components/ui/Checkbox/types.ts +15 -3
  459. package/src/components/ui/Confirm/ConfirmHost.tsx +51 -26
  460. package/src/components/ui/Confirm/confirm.ts +17 -34
  461. package/src/components/ui/Confirm/labels.ts +14 -0
  462. package/src/components/ui/Confirm/store.ts +147 -0
  463. package/src/components/ui/Confirm/styles.ts +4 -0
  464. package/src/components/ui/Confirm/types.ts +2 -10
  465. package/src/components/ui/DrawerHeader/DrawerHeader.tsx +22 -27
  466. package/src/components/ui/DrawerHeader/types.ts +7 -1
  467. package/src/components/ui/Grid/Grid.tsx +44 -12
  468. package/src/components/ui/Grid/accessibility.ts +21 -0
  469. package/src/components/ui/Grid/types.ts +2 -0
  470. package/src/components/ui/IconButton/IconButton.tsx +20 -3
  471. package/src/components/ui/IconButton/types.ts +4 -2
  472. package/src/components/ui/Input/Input.tsx +16 -6
  473. package/src/components/ui/Input/index.ts +5 -0
  474. package/src/components/ui/Input/types.ts +12 -23
  475. package/src/components/ui/Logo/Logo.tsx +27 -4
  476. package/src/components/ui/Logo/types.ts +2 -2
  477. package/src/components/ui/NavBar/NavBar.tsx +27 -19
  478. package/src/components/ui/NavBar/index.ts +1 -1
  479. package/src/components/ui/NavBar/isSlot.ts +372 -5
  480. package/src/components/ui/NavBar/types.ts +9 -8
  481. package/src/components/ui/PasswordInput/PasswordInput.tsx +67 -69
  482. package/src/components/ui/PasswordInput/types.ts +12 -14
  483. package/src/components/ui/Pulse/PulseDot.tsx +5 -4
  484. package/src/components/ui/Pulse/normalizePulseOptions.ts +76 -0
  485. package/src/components/ui/Pulse/usePulse.ts +80 -34
  486. package/src/components/ui/Pulse/usePulseDriver.ts +49 -0
  487. package/src/components/ui/Pulse/usePulseDriver.web.ts +66 -0
  488. package/src/components/ui/Radio/Radio.tsx +44 -15
  489. package/src/components/ui/Radio/RadioGroup.tsx +21 -3
  490. package/src/components/ui/Radio/types.ts +17 -3
  491. package/src/components/ui/Reveal/Reveal.tsx +5 -3
  492. package/src/components/ui/Reveal/Reveal.web.tsx +72 -29
  493. package/src/components/ui/Reveal/types.ts +1 -1
  494. package/src/components/ui/Reveal/webTransition.ts +206 -0
  495. package/src/components/ui/Search/Search.tsx +127 -58
  496. package/src/components/ui/Search/types.ts +30 -9
  497. package/src/components/ui/Segmented/Segmented.tsx +10 -2
  498. package/src/components/ui/Skeleton/Skeleton.tsx +9 -5
  499. package/src/components/ui/Spinner/Spinner.tsx +25 -17
  500. package/src/components/ui/Spinner/Spinner.web.tsx +23 -18
  501. package/src/components/ui/Spinner/shared.ts +7 -0
  502. package/src/components/ui/Spinner/types.ts +1 -1
  503. package/src/components/ui/Stepper/Stepper.tsx +166 -86
  504. package/src/components/ui/Stepper/StepperPressable.tsx +1 -0
  505. package/src/components/ui/Stepper/StepperPressable.web.tsx +1 -0
  506. package/src/components/ui/Stepper/accessibility.ts +32 -0
  507. package/src/components/ui/Stepper/accessibility.types.ts +22 -0
  508. package/src/components/ui/Stepper/accessibility.web.ts +65 -0
  509. package/src/components/ui/Stepper/layout.ts +44 -0
  510. package/src/components/ui/Stepper/normalizeStepper.ts +85 -0
  511. package/src/components/ui/Stepper/styles.ts +9 -2
  512. package/src/components/ui/Stepper/types.ts +3 -1
  513. package/src/components/ui/Switch/Switch.tsx +54 -15
  514. package/src/components/ui/Switch/Switch.web.tsx +57 -19
  515. package/src/components/ui/Switch/styles.ts +11 -4
  516. package/src/components/ui/Switch/types.ts +2 -2
  517. package/src/components/ui/Tag/Tag.tsx +6 -2
  518. package/src/components/ui/TextField/TextFieldBase.tsx +175 -70
  519. package/src/components/ui/TextField/TextFieldSlot.tsx +91 -0
  520. package/src/components/ui/TextField/normalize.ts +280 -0
  521. package/src/components/ui/TextField/styles.ts +31 -0
  522. package/src/components/ui/TextField/types.ts +118 -22
  523. package/src/components/ui/TextField/useErrorAnnouncement.ts +27 -0
  524. package/src/components/ui/TextField/useTextFieldValue.ts +94 -0
  525. package/src/components/ui/TextField/valueState.ts +125 -0
  526. package/src/components/ui/Textarea/Textarea.tsx +11 -4
  527. package/src/components/ui/Textarea/index.ts +5 -0
  528. package/src/components/ui/Textarea/types.ts +14 -22
  529. package/src/components/ui/Thumbnail/Thumbnail.tsx +86 -51
  530. package/src/components/ui/Thumbnail/index.ts +5 -1
  531. package/src/components/ui/Thumbnail/normalize.ts +78 -0
  532. package/src/components/ui/Thumbnail/styles.ts +5 -10
  533. package/src/components/ui/Thumbnail/types.ts +43 -13
  534. package/src/components/ui/Toast/ToastHost.tsx +81 -22
  535. package/src/components/ui/Toast/ToastHost.web.tsx +91 -29
  536. package/src/components/ui/Toast/store.ts +148 -0
  537. package/src/components/ui/Toast/toast.ts +19 -10
  538. package/src/components/ui/Toast/types.ts +7 -3
  539. package/src/components/ui/index.ts +20 -5
  540. package/src/components/ui/shared/ImageAttempt.tsx +30 -0
  541. package/src/components/ui/shared/a11y.ts +18 -0
  542. package/src/components/ui/shared/accessibilityName.ts +6 -0
  543. package/src/components/ui/shared/selectImageAttemptSource.shared.ts +17 -0
  544. package/src/components/ui/shared/selectImageAttemptSource.ts +3 -0
  545. package/src/components/ui/shared/selectImageAttemptSource.web.ts +3 -0
  546. package/src/icons/data.ts +1 -1
  547. package/src/theme/ThemeProvider.tsx +18 -7
  548. package/src/theme/fontScale.ts +15 -0
  549. package/src/theme/index.ts +2 -3
  550. package/src/theme/themeContext.ts +24 -0
  551. package/src/theme/themeDiagnostics.ts +41 -0
  552. package/src/theme/usePrefersReducedMotion.ts +11 -4
  553. package/src/theme/usePrefersReducedMotion.web.ts +5 -2
  554. package/src/theme/useTheme.ts +19 -27
  555. package/src/theme/useThemedStyles.ts +12 -7
  556. package/src/utils/imageSource.ts +303 -0
  557. package/lib/module/components/ui/PasswordInput/styles.js +0 -12
  558. package/lib/module/components/ui/PasswordInput/styles.js.map +0 -1
  559. package/lib/module/components/ui/Pulse/usePulse.web.js +0 -76
  560. package/lib/module/components/ui/Pulse/usePulse.web.js.map +0 -1
  561. package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts +0 -7
  562. package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts.map +0 -1
  563. package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts +0 -21
  564. package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts.map +0 -1
  565. package/src/components/ui/PasswordInput/styles.ts +0 -7
  566. package/src/components/ui/Pulse/usePulse.web.ts +0 -74
@@ -16,6 +16,17 @@ export const makeStyles = c => StyleSheet.create({
16
16
  paddingVertical: space[4],
17
17
  alignItems: 'flex-start'
18
18
  },
19
+ /** Search 的可见底色/边框绝不承载命中区域。 */
20
+ searchInteractiveRow: {
21
+ borderWidth: 0
22
+ },
23
+ searchVisibleSurface: {
24
+ position: 'absolute',
25
+ left: 0,
26
+ right: 0,
27
+ borderRadius: radius.md,
28
+ borderWidth: 1
29
+ },
19
30
  wrapIdle: {
20
31
  backgroundColor: c.surfaceContainerHigh,
21
32
  borderColor: 'transparent'
@@ -47,6 +58,23 @@ export const makeStyles = c => StyleSheet.create({
47
58
  inputMultiline: {
48
59
  textAlignVertical: 'top'
49
60
  },
61
+ slotDisplay: {
62
+ alignItems: 'center',
63
+ justifyContent: 'center',
64
+ minWidth: 18,
65
+ minHeight: 18
66
+ },
67
+ slotText: {
68
+ color: c.foregroundMuted,
69
+ fontSize: t.sm
70
+ },
71
+ // 固定命中框不走 r()/fontScale:它是手指可达性约束,不是视觉 token。
72
+ actionFrame: {
73
+ width: 44,
74
+ height: 44,
75
+ alignItems: 'center',
76
+ justifyContent: 'center'
77
+ },
50
78
  errorMsg: {
51
79
  fontSize: t.micro,
52
80
  color: c.error,
@@ -56,6 +84,9 @@ export const makeStyles = c => StyleSheet.create({
56
84
  },
57
85
  containerDisabled: {
58
86
  opacity: 0.5
87
+ },
88
+ rootCentered: {
89
+ justifyContent: 'center'
59
90
  }
60
91
  });
61
92
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","fw","radius","space","type","t","makeStyles","c","create","wrap","flexDirection","alignItems","gap","paddingHorizontal","borderRadius","md","borderWidth","wrapMultiline","paddingVertical","wrapIdle","backgroundColor","surfaceContainerHigh","borderColor","wrapActive","surface","wrapFocus","primary","wrapFilled","outline","wrapError","error","input","flex","minWidth","fontSize","body","color","foreground","padding","margin","outlineWidth","inputMultiline","textAlignVertical","errorMsg","micro","marginTop","fontWeight","regular","containerDisabled","opacity"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,EAAE,EAAEC,MAAM,EAAEC,KAAK,EAAEC,IAAI,IAAIC,CAAC,QAAQ,yBAAgB;AAG7D;AACA,OAAO,MAAMC,UAAU,GAAIC,CAAc,IACvCP,UAAU,CAACQ,MAAM,CAAC;EAChBC,IAAI,EAAE;IACJC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,GAAG,EAAET,KAAK,CAAC,CAAC,CAAC;IACbU,iBAAiB,EAAEV,KAAK,CAAC,CAAC,CAAC;IAC3BW,YAAY,EAAEZ,MAAM,CAACa,EAAE;IACvBC,WAAW,EAAE;EACf,CAAC;EACDC,aAAa,EAAE;IACbC,eAAe,EAAEf,KAAK,CAAC,CAAC,CAAC;IACzBQ,UAAU,EAAE;EACd,CAAC;EACDQ,QAAQ,EAAE;IACRC,eAAe,EAAEb,CAAC,CAACc,oBAAoB;IACvCC,WAAW,EAAE;EACf,CAAC;EACD;EACAC,UAAU,EAAE;IACVH,eAAe,EAAEb,CAAC,CAACiB;EACrB,CAAC;EACDC,SAAS,EAAE;IACTH,WAAW,EAAEf,CAAC,CAACmB;EACjB,CAAC;EACDC,UAAU,EAAE;IACVL,WAAW,EAAEf,CAAC,CAACqB;EACjB,CAAC;EACDC,SAAS,EAAE;IACTP,WAAW,EAAEf,CAAC,CAACuB;EACjB,CAAC;EACDC,KAAK,EAAE;IACLC,IAAI,EAAE,CAAC;IACPC,QAAQ,EAAE,CAAC;IACXC,QAAQ,EAAE7B,CAAC,CAAC8B,IAAI;IAChBC,KAAK,EAAE7B,CAAC,CAAC8B,UAAU;IACnBC,OAAO,EAAE,CAAC;IACVC,MAAM,EAAE,CAAC;IACT;IACAC,YAAY,EAAE;EAChB,CAAC;EACD;EACAC,cAAc,EAAE;IACdC,iBAAiB,EAAE;EACrB,CAAC;EACDC,QAAQ,EAAE;IACRT,QAAQ,EAAE7B,CAAC,CAACuC,KAAK;IACjBR,KAAK,EAAE7B,CAAC,CAACuB,KAAK;IACde,SAAS,EAAE1C,KAAK,CAAC,CAAC,CAAC;IACnBU,iBAAiB,EAAEV,KAAK,CAAC,CAAC,CAAC;IAC3B2C,UAAU,EAAE7C,EAAE,CAAC8C;EACjB,CAAC;EACDC,iBAAiB,EAAE;IACjBC,OAAO,EAAE;EACX;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["StyleSheet","fw","radius","space","type","t","makeStyles","c","create","wrap","flexDirection","alignItems","gap","paddingHorizontal","borderRadius","md","borderWidth","wrapMultiline","paddingVertical","searchInteractiveRow","searchVisibleSurface","position","left","right","wrapIdle","backgroundColor","surfaceContainerHigh","borderColor","wrapActive","surface","wrapFocus","primary","wrapFilled","outline","wrapError","error","input","flex","minWidth","fontSize","body","color","foreground","padding","margin","outlineWidth","inputMultiline","textAlignVertical","slotDisplay","justifyContent","minHeight","slotText","foregroundMuted","sm","actionFrame","width","height","errorMsg","micro","marginTop","fontWeight","regular","containerDisabled","opacity","rootCentered"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,EAAE,EAAEC,MAAM,EAAEC,KAAK,EAAEC,IAAI,IAAIC,CAAC,QAAQ,yBAAgB;AAG7D;AACA,OAAO,MAAMC,UAAU,GAAIC,CAAc,IACvCP,UAAU,CAACQ,MAAM,CAAC;EAChBC,IAAI,EAAE;IACJC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,GAAG,EAAET,KAAK,CAAC,CAAC,CAAC;IACbU,iBAAiB,EAAEV,KAAK,CAAC,CAAC,CAAC;IAC3BW,YAAY,EAAEZ,MAAM,CAACa,EAAE;IACvBC,WAAW,EAAE;EACf,CAAC;EACDC,aAAa,EAAE;IACbC,eAAe,EAAEf,KAAK,CAAC,CAAC,CAAC;IACzBQ,UAAU,EAAE;EACd,CAAC;EACD;EACAQ,oBAAoB,EAAE;IACpBH,WAAW,EAAE;EACf,CAAC;EACDI,oBAAoB,EAAE;IACpBC,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRT,YAAY,EAAEZ,MAAM,CAACa,EAAE;IACvBC,WAAW,EAAE;EACf,CAAC;EACDQ,QAAQ,EAAE;IACRC,eAAe,EAAElB,CAAC,CAACmB,oBAAoB;IACvCC,WAAW,EAAE;EACf,CAAC;EACD;EACAC,UAAU,EAAE;IACVH,eAAe,EAAElB,CAAC,CAACsB;EACrB,CAAC;EACDC,SAAS,EAAE;IACTH,WAAW,EAAEpB,CAAC,CAACwB;EACjB,CAAC;EACDC,UAAU,EAAE;IACVL,WAAW,EAAEpB,CAAC,CAAC0B;EACjB,CAAC;EACDC,SAAS,EAAE;IACTP,WAAW,EAAEpB,CAAC,CAAC4B;EACjB,CAAC;EACDC,KAAK,EAAE;IACLC,IAAI,EAAE,CAAC;IACPC,QAAQ,EAAE,CAAC;IACXC,QAAQ,EAAElC,CAAC,CAACmC,IAAI;IAChBC,KAAK,EAAElC,CAAC,CAACmC,UAAU;IACnBC,OAAO,EAAE,CAAC;IACVC,MAAM,EAAE,CAAC;IACT;IACAC,YAAY,EAAE;EAChB,CAAC;EACD;EACAC,cAAc,EAAE;IACdC,iBAAiB,EAAE;EACrB,CAAC;EACDC,WAAW,EAAE;IACXrC,UAAU,EAAE,QAAQ;IACpBsC,cAAc,EAAE,QAAQ;IACxBX,QAAQ,EAAE,EAAE;IACZY,SAAS,EAAE;EACb,CAAC;EACDC,QAAQ,EAAE;IACRV,KAAK,EAAElC,CAAC,CAAC6C,eAAe;IACxBb,QAAQ,EAAElC,CAAC,CAACgD;EACd,CAAC;EACD;EACAC,WAAW,EAAE;IACXC,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACV7C,UAAU,EAAE,QAAQ;IACpBsC,cAAc,EAAE;EAClB,CAAC;EACDQ,QAAQ,EAAE;IACRlB,QAAQ,EAAElC,CAAC,CAACqD,KAAK;IACjBjB,KAAK,EAAElC,CAAC,CAAC4B,KAAK;IACdwB,SAAS,EAAExD,KAAK,CAAC,CAAC,CAAC;IACnBU,iBAAiB,EAAEV,KAAK,CAAC,CAAC,CAAC;IAC3ByD,UAAU,EAAE3D,EAAE,CAAC4D;EACjB,CAAC;EACDC,iBAAiB,EAAE;IACjBC,OAAO,EAAE;EACX,CAAC;EACDC,YAAY,EAAE;IACZf,cAAc,EAAE;EAClB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef } from 'react';
4
+ import { AccessibilityInfo, Platform } from 'react-native';
5
+
6
+ /** iOS 不会像 Android live region 一样自动播报动态错误,仅播报真实的后续变更。 */
7
+ export function useErrorAnnouncement(error) {
8
+ const previousError = useRef('');
9
+ const didCommit = useRef(false);
10
+ useEffect(() => {
11
+ const nextError = error ?? '';
12
+ const previous = previousError.current;
13
+ previousError.current = nextError;
14
+ if (!didCommit.current) {
15
+ didCommit.current = true;
16
+ return undefined;
17
+ }
18
+ if (Platform.OS !== 'ios' || nextError === '' || nextError === previous) {
19
+ return undefined;
20
+ }
21
+ const timer = setTimeout(() => {
22
+ AccessibilityInfo.announceForAccessibility(nextError);
23
+ }, 0);
24
+ return () => clearTimeout(timer);
25
+ }, [error]);
26
+ }
27
+ //# sourceMappingURL=useErrorAnnouncement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","AccessibilityInfo","Platform","useErrorAnnouncement","error","previousError","didCommit","nextError","previous","current","undefined","OS","timer","setTimeout","announceForAccessibility","clearTimeout"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/useErrorAnnouncement.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,iBAAiB,EAAEC,QAAQ,QAAQ,cAAc;;AAE1D;AACA,OAAO,SAASC,oBAAoBA,CAACC,KAAyB,EAAQ;EACpE,MAAMC,aAAa,GAAGL,MAAM,CAAC,EAAE,CAAC;EAChC,MAAMM,SAAS,GAAGN,MAAM,CAAC,KAAK,CAAC;EAE/BD,SAAS,CAAC,MAAM;IACd,MAAMQ,SAAS,GAAGH,KAAK,IAAI,EAAE;IAC7B,MAAMI,QAAQ,GAAGH,aAAa,CAACI,OAAO;IACtCJ,aAAa,CAACI,OAAO,GAAGF,SAAS;IAEjC,IAAI,CAACD,SAAS,CAACG,OAAO,EAAE;MACtBH,SAAS,CAACG,OAAO,GAAG,IAAI;MACxB,OAAOC,SAAS;IAClB;IACA,IAAIR,QAAQ,CAACS,EAAE,KAAK,KAAK,IAAIJ,SAAS,KAAK,EAAE,IAAIA,SAAS,KAAKC,QAAQ,EAAE;MACvE,OAAOE,SAAS;IAClB;IAEA,MAAME,KAAK,GAAGC,UAAU,CAAC,MAAM;MAC7BZ,iBAAiB,CAACa,wBAAwB,CAACP,SAAS,CAAC;IACvD,CAAC,EAAE,CAAC,CAAC;IACL,OAAO,MAAMQ,YAAY,CAACH,KAAK,CAAC;EAClC,CAAC,EAAE,CAACR,KAAK,CAAC,CAAC;AACb","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useEffect, useRef, useState } from 'react';
4
+ import { createLogger } from "../../../utils/logger/index.js";
5
+ import { applyTextChange, createValueState, reconcileValueState, resolveCanUpdate } from "./valueState.js";
6
+ const log = createLogger('TextField');
7
+ const DIAGNOSTIC_MESSAGE = {
8
+ 'controlled-to-uncontrolled': '受控输入的 value 变成了 undefined。mode 已在首次 render 锁定为受控,本次沿用上一个合法值 —— 请始终传字符串(清空用 "")。',
9
+ 'uncontrolled-to-controlled': '非受控输入后来收到了 value。mode 已在首次 render 锁定为非受控,该 value 被忽略 —— 请从一开始就同时传 value 与 onChangeText。',
10
+ 'invalid-controlled-value': '受控输入的 value 必须是字符串。已保持最后一个合法值,不会切换到非受控 mode。'
11
+ };
12
+ /**
13
+ * 把纯值状态机接到 React 上。
14
+ *
15
+ * state 放在 ref 而不是 useState:mode 与受控值必须在**本次 render 内**就正确,
16
+ * 不能等下一次提交 —— 否则受控组件会先渲染一帧旧值。非受控写入用一个递增 tick
17
+ * 触发重渲染,值本身仍以 ref 为准。
18
+ *
19
+ * 诊断只在 effect 里打:render 期打日志在 StrictMode 双调用下会重复,
20
+ * 且违反 render 必须纯净的约束。
21
+ */
22
+ export function useTextFieldValue({
23
+ value,
24
+ defaultValue,
25
+ onChangeText
26
+ }, scope) {
27
+ const stateRef = useRef(null);
28
+ if (stateRef.current === null) {
29
+ stateRef.current = createValueState(value, defaultValue);
30
+ }
31
+ const [, bumpTick] = useState(0);
32
+ const transition = reconcileValueState(stateRef.current, value);
33
+ stateRef.current = transition.state;
34
+ const mode = transition.state.mode;
35
+ const canUpdate = resolveCanUpdate(mode, onChangeText);
36
+ const diagnostic = transition.diagnostic;
37
+ useEffect(() => {
38
+ if (diagnostic) log.warn(`${scope}: ${DIAGNOSTIC_MESSAGE[diagnostic]}`);
39
+ }, [diagnostic, scope]);
40
+ useEffect(() => {
41
+ if (!canUpdate) {
42
+ log.warn(`${scope}: 受控输入缺少 onChangeText,输入将无法生效。请补上回调,或改用非受控(不传 value)。`);
43
+ }
44
+ }, [canUpdate, scope]);
45
+ const handleChangeText = useCallback(next => {
46
+ const current = stateRef.current;
47
+ if (!current) return;
48
+ if (current.mode === 'uncontrolled') {
49
+ stateRef.current = applyTextChange(current, next);
50
+ bumpTick(tick => tick + 1);
51
+ onChangeText?.(next);
52
+ return;
53
+ }
54
+ // 受控:内部永不写值,只把输入交给调用方。没有回调时直接 no-op ——
55
+ // 若照旧透传给原生,UI 会显示一个 state 里并不存在的值。
56
+ if (!canUpdate) return;
57
+ onChangeText?.(next);
58
+ }, [canUpdate, onChangeText]);
59
+ return {
60
+ mode,
61
+ value: transition.value,
62
+ canUpdate,
63
+ onChangeText: handleChangeText
64
+ };
65
+ }
66
+ //# sourceMappingURL=useTextFieldValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","createLogger","applyTextChange","createValueState","reconcileValueState","resolveCanUpdate","log","DIAGNOSTIC_MESSAGE","useTextFieldValue","value","defaultValue","onChangeText","scope","stateRef","current","bumpTick","transition","state","mode","canUpdate","diagnostic","warn","handleChangeText","next","tick"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/useTextFieldValue.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAChE,SAASC,YAAY,QAAQ,gCAAuB;AACpD,SACEC,eAAe,EACfC,gBAAgB,EAChBC,mBAAmB,EACnBC,gBAAgB,QACX,iBAAc;AAOrB,MAAMC,GAAG,GAAGL,YAAY,CAAC,WAAW,CAAC;AAErC,MAAMM,kBAAmD,GAAG;EAC1D,4BAA4B,EAC1B,iFAAiF;EACnF,4BAA4B,EAC1B,yFAAyF;EAC3F,0BAA0B,EACxB;AACJ,CAAC;AAQD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/B;EAAEC,KAAK;EAAEC,YAAY;EAAEC;AAAqC,CAAC,EAC7DC,KAAa,EACa;EAC1B,MAAMC,QAAQ,GAAGd,MAAM,CAAoB,IAAI,CAAC;EAChD,IAAIc,QAAQ,CAACC,OAAO,KAAK,IAAI,EAAE;IAC7BD,QAAQ,CAACC,OAAO,GAAGX,gBAAgB,CAACM,KAAK,EAAEC,YAAY,CAAC;EAC1D;EACA,MAAM,GAAGK,QAAQ,CAAC,GAAGf,QAAQ,CAAC,CAAC,CAAC;EAEhC,MAAMgB,UAAU,GAAGZ,mBAAmB,CAACS,QAAQ,CAACC,OAAO,EAAEL,KAAK,CAAC;EAC/DI,QAAQ,CAACC,OAAO,GAAGE,UAAU,CAACC,KAAK;EACnC,MAAMC,IAAI,GAAGF,UAAU,CAACC,KAAK,CAACC,IAAI;EAClC,MAAMC,SAAS,GAAGd,gBAAgB,CAACa,IAAI,EAAEP,YAAY,CAAC;EAEtD,MAAMS,UAAU,GAAGJ,UAAU,CAACI,UAAU;EACxCtB,SAAS,CAAC,MAAM;IACd,IAAIsB,UAAU,EAAEd,GAAG,CAACe,IAAI,CAAC,GAAGT,KAAK,KAAKL,kBAAkB,CAACa,UAAU,CAAC,EAAE,CAAC;EACzE,CAAC,EAAE,CAACA,UAAU,EAAER,KAAK,CAAC,CAAC;EAEvBd,SAAS,CAAC,MAAM;IACd,IAAI,CAACqB,SAAS,EAAE;MACdb,GAAG,CAACe,IAAI,CACN,GAAGT,KAAK,uDACV,CAAC;IACH;EACF,CAAC,EAAE,CAACO,SAAS,EAAEP,KAAK,CAAC,CAAC;EAEtB,MAAMU,gBAAgB,GAAGzB,WAAW,CACjC0B,IAAY,IAAK;IAChB,MAAMT,OAAO,GAAGD,QAAQ,CAACC,OAAO;IAChC,IAAI,CAACA,OAAO,EAAE;IACd,IAAIA,OAAO,CAACI,IAAI,KAAK,cAAc,EAAE;MACnCL,QAAQ,CAACC,OAAO,GAAGZ,eAAe,CAACY,OAAO,EAAES,IAAI,CAAC;MACjDR,QAAQ,CAAES,IAAI,IAAKA,IAAI,GAAG,CAAC,CAAC;MAC5Bb,YAAY,GAAGY,IAAI,CAAC;MACpB;IACF;IACA;IACA;IACA,IAAI,CAACJ,SAAS,EAAE;IAChBR,YAAY,GAAGY,IAAI,CAAC;EACtB,CAAC,EACD,CAACJ,SAAS,EAAER,YAAY,CAC1B,CAAC;EAED,OAAO;IACLO,IAAI;IACJT,KAAK,EAAEO,UAAU,CAACP,KAAK;IACvBU,SAAS;IACTR,YAAY,EAAEW;EAChB,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * TextField 家族的**纯值状态机** —— 无 React 依赖,可直接单测。
5
+ *
6
+ * 核心规则:**mode 在首次 render 锁定,之后永不切换**。
7
+ *
8
+ * 为什么 —— 受控 / 非受控中途互换是 React 里最难查的一类 bug:光标跳位、输入被回滚、
9
+ * 表单提交拿到过期值。与其在每次 render 猜测调用方意图,不如锁定一次并在偏离时报诊断。
10
+ *
11
+ * mode 判据是 `value !== undefined`,**不是** `'value' in props` 也不是
12
+ * `typeof value === 'string'`:前者会把 `<Input value={maybeUndefined} />` 这种
13
+ * 常见写法误判为受控(值一旦为 undefined 就锁死输入),后者对显式 `undefined` 与
14
+ * 缺省无法区分。显式 `undefined` 一律按非受控处理。
15
+ */
16
+
17
+ export function createValueState(value, defaultValue) {
18
+ if (value !== undefined) {
19
+ const safeValue = typeof value === 'string' ? value : '';
20
+ return {
21
+ mode: 'controlled',
22
+ value: safeValue,
23
+ lastValidControlledValue: safeValue
24
+ };
25
+ }
26
+ return {
27
+ mode: 'uncontrolled',
28
+ value: typeof defaultValue === 'string' ? defaultValue : ''
29
+ };
30
+ }
31
+
32
+ /**
33
+ * 用本轮 render 的 `value` 与已锁定的 state 对账。返回新 state(不原地修改)、
34
+ * 本轮应当显示的值,以及偏离锁定 mode 时的诊断。
35
+ */
36
+ export function reconcileValueState(state, incomingValue) {
37
+ if (state.mode === 'controlled') {
38
+ if (incomingValue === undefined) {
39
+ // 受控组件的 value 变成 undefined:保持受控,显示最后一个合法值。
40
+ // 若直接透传 undefined 给 TextInput,RN 会把它当成非受控并保留用户输入 —— 静默换 mode。
41
+ return {
42
+ state,
43
+ value: state.lastValidControlledValue,
44
+ diagnostic: 'controlled-to-uncontrolled'
45
+ };
46
+ }
47
+ if (typeof incomingValue !== 'string') {
48
+ return {
49
+ state,
50
+ value: state.lastValidControlledValue,
51
+ diagnostic: 'invalid-controlled-value'
52
+ };
53
+ }
54
+ return {
55
+ state: {
56
+ mode: 'controlled',
57
+ value: incomingValue,
58
+ lastValidControlledValue: incomingValue
59
+ },
60
+ value: incomingValue
61
+ };
62
+ }
63
+ if (incomingValue !== undefined) {
64
+ // 非受控组件后来又传了 value:忽略它,继续用内部值,只报诊断。
65
+ return {
66
+ state,
67
+ value: state.value,
68
+ diagnostic: 'uncontrolled-to-controlled'
69
+ };
70
+ }
71
+ return {
72
+ state,
73
+ value: state.value
74
+ };
75
+ }
76
+
77
+ /** 用户输入。只有非受控才写内部值;受控的值永远来自调用方。 */
78
+ export function applyTextChange(state, text) {
79
+ if (state.mode === 'controlled') return state;
80
+ return {
81
+ mode: 'uncontrolled',
82
+ value: text
83
+ };
84
+ }
85
+
86
+ /**
87
+ * 非受控恒可更新(内部持值);受控只有拿到 `onChangeText` 才可更新 ——
88
+ * 类型层已要求受控必须带回调,这里兜住未走类型的 JS 调用方。
89
+ */
90
+ export function resolveCanUpdate(mode, onChangeText) {
91
+ return mode === 'uncontrolled' || typeof onChangeText === 'function';
92
+ }
93
+ //# sourceMappingURL=valueState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createValueState","value","defaultValue","undefined","safeValue","mode","lastValidControlledValue","reconcileValueState","state","incomingValue","diagnostic","applyTextChange","text","resolveCanUpdate","onChangeText"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/valueState.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkCA,OAAO,SAASA,gBAAgBA,CAC9BC,KAAc,EACdC,YAAqB,EACT;EACZ,IAAID,KAAK,KAAKE,SAAS,EAAE;IACvB,MAAMC,SAAS,GAAG,OAAOH,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,EAAE;IACxD,OAAO;MACLI,IAAI,EAAE,YAAY;MAClBJ,KAAK,EAAEG,SAAS;MAChBE,wBAAwB,EAAEF;IAC5B,CAAC;EACH;EACA,OAAO;IACLC,IAAI,EAAE,cAAc;IACpBJ,KAAK,EAAE,OAAOC,YAAY,KAAK,QAAQ,GAAGA,YAAY,GAAG;EAC3D,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASK,mBAAmBA,CACjCC,KAAiB,EACjBC,aAAsB,EACL;EACjB,IAAID,KAAK,CAACH,IAAI,KAAK,YAAY,EAAE;IAC/B,IAAII,aAAa,KAAKN,SAAS,EAAE;MAC/B;MACA;MACA,OAAO;QACLK,KAAK;QACLP,KAAK,EAAEO,KAAK,CAACF,wBAAwB;QACrCI,UAAU,EAAE;MACd,CAAC;IACH;IACA,IAAI,OAAOD,aAAa,KAAK,QAAQ,EAAE;MACrC,OAAO;QACLD,KAAK;QACLP,KAAK,EAAEO,KAAK,CAACF,wBAAwB;QACrCI,UAAU,EAAE;MACd,CAAC;IACH;IACA,OAAO;MACLF,KAAK,EAAE;QACLH,IAAI,EAAE,YAAY;QAClBJ,KAAK,EAAEQ,aAAa;QACpBH,wBAAwB,EAAEG;MAC5B,CAAC;MACDR,KAAK,EAAEQ;IACT,CAAC;EACH;EACA,IAAIA,aAAa,KAAKN,SAAS,EAAE;IAC/B;IACA,OAAO;MACLK,KAAK;MACLP,KAAK,EAAEO,KAAK,CAACP,KAAK;MAClBS,UAAU,EAAE;IACd,CAAC;EACH;EACA,OAAO;IAAEF,KAAK;IAAEP,KAAK,EAAEO,KAAK,CAACP;EAAM,CAAC;AACtC;;AAEA;AACA,OAAO,SAASU,eAAeA,CAACH,KAAiB,EAAEI,IAAY,EAAc;EAC3E,IAAIJ,KAAK,CAACH,IAAI,KAAK,YAAY,EAAE,OAAOG,KAAK;EAC7C,OAAO;IAAEH,IAAI,EAAE,cAAc;IAAEJ,KAAK,EAAEW;EAAK,CAAC;AAC9C;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BR,IAAwB,EACxBS,YAAmD,EAC1C;EACT,OAAOT,IAAI,KAAK,cAAc,IAAI,OAAOS,YAAY,KAAK,UAAU;AACtE","ignoreList":[]}
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { forwardRef } from 'react';
4
4
  import { TextFieldBase } from "../TextField/TextFieldBase.js";
5
+ import { sanitizeTextFieldWrapperProps } from "../TextField/normalize.js";
5
6
  import { jsx as _jsx } from "react/jsx-runtime";
6
7
  /**
7
8
  * 多行文本输入框 —— 视觉与 Input 一致(idle/focus/filled/error/disabled)。
@@ -13,13 +14,16 @@ import { jsx as _jsx } from "react/jsx-runtime";
13
14
  *
14
15
  * 实现层走 `<TextFieldBase multiline>`,本组件是薄 wrap。
15
16
  *
16
- * Ref:forwardRef<TextInput>,业务可调 `ref.current?.focus()`。
17
+ * Ref:forwardRef<TextFieldHandle>,业务只可调 `focus()` / `blur()`。
17
18
  */
18
19
  export const Textarea = /*#__PURE__*/forwardRef(function Textarea(props, ref) {
20
+ const {
21
+ props: safeProps
22
+ } = sanitizeTextFieldWrapperProps(props);
19
23
  return /*#__PURE__*/_jsx(TextFieldBase, {
20
24
  ref: ref,
21
- multiline: true,
22
- ...props
25
+ ...safeProps,
26
+ multiline: true
23
27
  });
24
28
  });
25
29
  Textarea.displayName = 'Textarea';
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","TextFieldBase","jsx","_jsx","Textarea","props","ref","multiline","displayName"],"sourceRoot":"../../../../../src","sources":["components/ui/Textarea/Textarea.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,aAAa,QAA2B,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,gBAAGJ,UAAU,CAChC,SAASI,QAAQA,CAACC,KAAK,EAAEC,GAAG,EAAE;EAC5B,oBAAOH,IAAA,CAACF,aAAa;IAACK,GAAG,EAAEA,GAAI;IAACC,SAAS;IAAA,GAAKF;EAAK,CAAG,CAAC;AACzD,CACF,CAAC;AAEDD,QAAQ,CAACI,WAAW,GAAG,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","TextFieldBase","sanitizeTextFieldWrapperProps","jsx","_jsx","Textarea","props","ref","safeProps","multiline","displayName"],"sourceRoot":"../../../../../src","sources":["components/ui/Textarea/Textarea.tsx"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,OAAO;AAClC,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,6BAA6B,QAAQ,2BAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAIvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,gBAAGL,UAAU,CAChC,SAASK,QAAQA,CAACC,KAAK,EAAEC,GAAG,EAAE;EAC5B,MAAM;IAAED,KAAK,EAAEE;EAAU,CAAC,GAAGN,6BAA6B,CACxDI,KACF,CAAC;EACD,oBACEF,IAAA,CAACH,aAAa;IAACM,GAAG,EAAEA,GAAI;IAAA,GAAMC,SAAS;IAAoBC,SAAS;EAAA,CAAE,CAAC;AAE3E,CACF,CAAC;AAEDJ,QAAQ,CAACK,WAAW,GAAG,UAAU","ignoreList":[]}
@@ -1,60 +1,79 @@
1
1
  "use strict";
2
2
 
3
- import React from 'react';
4
- import { Image, View } from 'react-native';
5
- import { useThemedStyles } from "../../../theme/index.js";
3
+ import React, { useEffect, createElement as _createElement } from 'react';
4
+ import { StyleSheet, View } from 'react-native';
5
+ import { useColors, useThemedStyles } from "../../../theme/index.js";
6
+ import { resolveImageSource } from "../../../utils/imageSource.js";
6
7
  import { createLogger } from "../../../utils/logger/index.js";
7
- import { makeStyles, RING_EXTRA_RADIUS, sizingFor } from "./styles.js";
8
- import { jsx as _jsx } from "react/jsx-runtime";
8
+ import { ImageAttempt } from "../shared/ImageAttempt.js";
9
+ import { A11Y_HIDDEN_PROPS } from "../shared/a11y.js";
10
+ import { sanitizeThumbnailImageStyle } from "./normalize.js";
11
+ import { makeStyles, sizingFor } from "./styles.js";
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
13
  const log = createLogger('Thumbnail');
14
+ const hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);
10
15
 
11
- /** 缩略图基础组件 —— 列表 / 卡片 / chat 行内通用 16:9.5 小图。
12
- *
13
- * 尺寸阶梯:sm / md(默认 113×67)/ lg,与 NewsList / NewsArea 历史一致。
14
- * bg 占位 = c.surfaceContainer(图加载中 / 失败时不至于空白)。
15
- * `selected` 时外层套 View 画 2pt 品牌色 ring;不选中保持纯 Image 结构。
16
- *
17
- * 用法:
18
- * - 远程 URL:`<Thumbnail uri={item.coverUrl} />`
19
- * - 本地资源:`<Thumbnail source={require('./fallback.png')} />`
20
- * - 自定义尺寸:`<Thumbnail uri={...} size="lg" />`
21
- * - 选中态:`<Thumbnail uri={...} selected />` */
22
- export function Thumbnail({
23
- uri,
24
- source,
25
- size = 'md',
26
- selected,
27
- style,
28
- resizeMode = 'cover',
29
- accessibilityLabel,
30
- testID
31
- }) {
16
+ /**
17
+ * 稳定两层缩略图:outer 只管 caller layout,inner visual frame 固定尺寸并始终
18
+ * 保留 ring。无效 / 加载失败 source 只显示 frame placeholder,不改变布局结构。
19
+ */
20
+ export function Thumbnail(props) {
21
+ const {
22
+ uri,
23
+ source,
24
+ size = 'md',
25
+ selected,
26
+ containerStyle,
27
+ imageStyle,
28
+ resizeMode = 'cover',
29
+ accessibilityLabel,
30
+ testID
31
+ } = props;
32
+ const colors = useColors();
32
33
  const styles = useThemedStyles(makeStyles);
33
- if (!uri && !source) {
34
- // [L-18] uri/source 均未传:一次性告警,返回 null 而非空白区域。
35
- // types 注释已说明二选一语义;此 warn 用于开发期快速定位漏传。
36
- log.warn('Thumbnail: uri 和 source 均未提供,组件将渲染为 null');
37
- return null;
38
- }
39
34
  const dim = sizingFor(size);
40
- const image = /*#__PURE__*/_jsx(Image, {
41
- source: uri ? {
42
- uri
43
- } : source,
44
- style: [styles.base, dim, style],
45
- resizeMode: resizeMode,
46
- accessibilityLabel: accessibilityLabel,
47
- accessible: !!accessibilityLabel,
48
- testID: selected ? undefined : testID
49
- });
50
- if (!selected) return image;
51
- // ring 容器:borderRadius 比 image 大 (border + padding) 才能贴合包裹外圈
35
+ const hasUri = hasOwn(props, 'uri');
36
+ const hasSource = hasOwn(props, 'source');
37
+ const sourceCandidate = hasUri !== hasSource ? hasUri && typeof uri === 'string' ? {
38
+ uri: uri.trim()
39
+ } : source : undefined;
40
+ const resolvedSource = resolveImageSource(sourceCandidate);
41
+ const sanitizedImageStyle = sanitizeThumbnailImageStyle(imageStyle);
42
+ const diagnostics = [...(resolvedSource === undefined ? ['source'] : []), ...sanitizedImageStyle.diagnostics.map(field => field === 'style' ? 'imageStyle' : `imageStyle.${field}`)];
43
+ const diagnosticKey = diagnostics.join(',');
44
+ useEffect(() => {
45
+ if (__DEV__ && diagnosticKey.length > 0) {
46
+ log.warn(`Thumbnail: 非法运行时输入(${diagnosticKey})已回退。`);
47
+ }
48
+ }, [diagnosticKey]);
49
+ const normalizedLabel = typeof accessibilityLabel === 'string' ? accessibilityLabel.trim() : undefined;
50
+ const imageAccessibilityProps = normalizedLabel && normalizedLabel.length > 0 ? {
51
+ accessible: true,
52
+ accessibilityLabel: normalizedLabel,
53
+ accessibilityRole: 'image'
54
+ } : A11Y_HIDDEN_PROPS;
55
+ const ringStyle = {
56
+ borderRadius: dim.borderRadius,
57
+ borderColor: selected ? colors.primary : 'transparent'
58
+ };
52
59
  return /*#__PURE__*/_jsx(View, {
53
- style: [styles.ring, {
54
- borderRadius: dim.borderRadius + RING_EXTRA_RADIUS
55
- }],
60
+ style: containerStyle,
56
61
  testID: testID,
57
- children: image
62
+ children: /*#__PURE__*/_jsxs(View, {
63
+ style: [styles.visualFrame, dim],
64
+ children: [resolvedSource === undefined ? null : /*#__PURE__*/_createElement(ImageAttempt, {
65
+ ...imageAccessibilityProps,
66
+ key: resolvedSource.key,
67
+ source: resolvedSource.source,
68
+ fallback: null,
69
+ style: [sanitizedImageStyle.style, StyleSheet.absoluteFill],
70
+ resizeMode: resizeMode
71
+ }), /*#__PURE__*/_jsx(View, {
72
+ ...A11Y_HIDDEN_PROPS,
73
+ pointerEvents: "none",
74
+ style: [StyleSheet.absoluteFill, styles.ring, ringStyle]
75
+ })]
76
+ })
58
77
  });
59
78
  }
60
79
  //# sourceMappingURL=Thumbnail.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","Image","View","useThemedStyles","createLogger","makeStyles","RING_EXTRA_RADIUS","sizingFor","jsx","_jsx","log","Thumbnail","uri","source","size","selected","style","resizeMode","accessibilityLabel","testID","styles","warn","dim","image","base","accessible","undefined","ring","borderRadius","children"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/Thumbnail.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,KAAK,EAAEC,IAAI,QAAQ,cAAc;AAC1C,SAASC,eAAe,QAAQ,yBAAgB;AAChD,SAASC,YAAY,QAAQ,gCAAuB;AACpD,SAASC,UAAU,EAAEC,iBAAiB,EAAEC,SAAS,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGpE,MAAMC,GAAG,GAAGN,YAAY,CAAC,WAAW,CAAC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,SAASA,CAAC;EACxBC,GAAG;EACHC,MAAM;EACNC,IAAI,GAAG,IAAI;EACXC,QAAQ;EACRC,KAAK;EACLC,UAAU,GAAG,OAAO;EACpBC,kBAAkB;EAClBC;AACc,CAAC,EAA4B;EAC3C,MAAMC,MAAM,GAAGjB,eAAe,CAACE,UAAU,CAAC;EAC1C,IAAI,CAACO,GAAG,IAAI,CAACC,MAAM,EAAE;IACnB;IACA;IACAH,GAAG,CAACW,IAAI,CAAC,0CAA0C,CAAC;IACpD,OAAO,IAAI;EACb;EACA,MAAMC,GAAG,GAAGf,SAAS,CAACO,IAAI,CAAC;EAC3B,MAAMS,KAAK,gBACTd,IAAA,CAACR,KAAK;IACJY,MAAM,EAAED,GAAG,GAAG;MAAEA;IAAI,CAAC,GAAIC,MAAsC;IAC/DG,KAAK,EAAE,CAACI,MAAM,CAACI,IAAI,EAAEF,GAAG,EAAEN,KAAK,CAAE;IACjCC,UAAU,EAAEA,UAAW;IACvBC,kBAAkB,EAAEA,kBAAmB;IACvCO,UAAU,EAAE,CAAC,CAACP,kBAAmB;IACjCC,MAAM,EAAEJ,QAAQ,GAAGW,SAAS,GAAGP;EAAO,CACvC,CACF;EACD,IAAI,CAACJ,QAAQ,EAAE,OAAOQ,KAAK;EAC3B;EACA,oBACEd,IAAA,CAACP,IAAI;IACHc,KAAK,EAAE,CACLI,MAAM,CAACO,IAAI,EACX;MAAEC,YAAY,EAAEN,GAAG,CAACM,YAAY,GAAGtB;IAAkB,CAAC,CACtD;IACFa,MAAM,EAAEA,MAAO;IAAAU,QAAA,EAEdN;EAAK,CACF,CAAC;AAEX","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","createElement","_createElement","StyleSheet","View","useColors","useThemedStyles","resolveImageSource","createLogger","ImageAttempt","A11Y_HIDDEN_PROPS","sanitizeThumbnailImageStyle","makeStyles","sizingFor","jsx","_jsx","jsxs","_jsxs","log","hasOwn","value","key","Object","prototype","hasOwnProperty","call","Thumbnail","props","uri","source","size","selected","containerStyle","imageStyle","resizeMode","accessibilityLabel","testID","colors","styles","dim","hasUri","hasSource","sourceCandidate","trim","undefined","resolvedSource","sanitizedImageStyle","diagnostics","map","field","diagnosticKey","join","__DEV__","length","warn","normalizedLabel","imageAccessibilityProps","accessible","accessibilityRole","ringStyle","borderRadius","borderColor","primary","style","children","visualFrame","fallback","absoluteFill","pointerEvents","ring"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/Thumbnail.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAAC,aAAA,IAAAC,cAAA,QAAQ,OAAO;AACxC,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,SAASC,SAAS,EAAEC,eAAe,QAAQ,yBAAgB;AAC3D,SAASC,kBAAkB,QAAQ,+BAA4B;AAC/D,SAASC,YAAY,QAAQ,gCAAuB;AACpD,SAASC,YAAY,QAAQ,2BAAwB;AACrD,SAASC,iBAAiB,QAAQ,mBAAgB;AAClD,SAASC,2BAA2B,QAAQ,gBAAa;AACzD,SAASC,UAAU,EAAEC,SAAS,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGjD,MAAMC,GAAG,GAAGV,YAAY,CAAC,WAAW,CAAC;AACrC,MAAMW,MAAM,GAAGA,CAACC,KAAa,EAAEC,GAAgB,KAC7CC,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACL,KAAK,EAAEC,GAAG,CAAC;;AAElD;AACA;AACA;AACA;AACA,OAAO,SAASK,SAASA,CAACC,KAAqB,EAAqB;EAClE,MAAM;IACJC,GAAG;IACHC,MAAM;IACNC,IAAI,GAAG,IAAI;IACXC,QAAQ;IACRC,cAAc;IACdC,UAAU;IACVC,UAAU,GAAG,OAAO;IACpBC,kBAAkB;IAClBC;EACF,CAAC,GAAGT,KAAK;EACT,MAAMU,MAAM,GAAGhC,SAAS,CAAC,CAAC;EAC1B,MAAMiC,MAAM,GAAGhC,eAAe,CAACM,UAAU,CAAC;EAC1C,MAAM2B,GAAG,GAAG1B,SAAS,CAACiB,IAAI,CAAC;EAC3B,MAAMU,MAAM,GAAGrB,MAAM,CAACQ,KAAK,EAAE,KAAK,CAAC;EACnC,MAAMc,SAAS,GAAGtB,MAAM,CAACQ,KAAK,EAAE,QAAQ,CAAC;EACzC,MAAMe,eAAe,GACnBF,MAAM,KAAKC,SAAS,GAChBD,MAAM,IAAI,OAAOZ,GAAG,KAAK,QAAQ,GAC/B;IAAEA,GAAG,EAAEA,GAAG,CAACe,IAAI,CAAC;EAAE,CAAC,GACnBd,MAAM,GACRe,SAAS;EACf,MAAMC,cAAc,GAAGtC,kBAAkB,CAACmC,eAAe,CAAC;EAC1D,MAAMI,mBAAmB,GAAGnC,2BAA2B,CAACsB,UAAU,CAAC;EACnE,MAAMc,WAAW,GAAG,CAClB,IAAIF,cAAc,KAAKD,SAAS,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EACnD,GAAGE,mBAAmB,CAACC,WAAW,CAACC,GAAG,CAAEC,KAAK,IAC3CA,KAAK,KAAK,OAAO,GAAG,YAAY,GAAG,cAAcA,KAAK,EACxD,CAAC,CACF;EACD,MAAMC,aAAa,GAAGH,WAAW,CAACI,IAAI,CAAC,GAAG,CAAC;EAE3CnD,SAAS,CAAC,MAAM;IACd,IAAIoD,OAAO,IAAIF,aAAa,CAACG,MAAM,GAAG,CAAC,EAAE;MACvCnC,GAAG,CAACoC,IAAI,CAAC,sBAAsBJ,aAAa,OAAO,CAAC;IACtD;EACF,CAAC,EAAE,CAACA,aAAa,CAAC,CAAC;EAEnB,MAAMK,eAAe,GACnB,OAAOpB,kBAAkB,KAAK,QAAQ,GAClCA,kBAAkB,CAACQ,IAAI,CAAC,CAAC,GACzBC,SAAS;EACf,MAAMY,uBAAuB,GAC3BD,eAAe,IAAIA,eAAe,CAACF,MAAM,GAAG,CAAC,GACzC;IACEI,UAAU,EAAE,IAAI;IAChBtB,kBAAkB,EAAEoB,eAAe;IACnCG,iBAAiB,EAAE;EACrB,CAAC,GACDhD,iBAAiB;EACvB,MAAMiD,SAAS,GAAG;IAChBC,YAAY,EAAErB,GAAG,CAACqB,YAAY;IAC9BC,WAAW,EAAE9B,QAAQ,GAAGM,MAAM,CAACyB,OAAO,GAAG;EAC3C,CAAC;EAED,oBACE/C,IAAA,CAACX,IAAI;IAAC2D,KAAK,EAAE/B,cAAe;IAACI,MAAM,EAAEA,MAAO;IAAA4B,QAAA,eAC1C/C,KAAA,CAACb,IAAI;MAAC2D,KAAK,EAAE,CAACzB,MAAM,CAAC2B,WAAW,EAAE1B,GAAG,CAAE;MAAAyB,QAAA,GACpCnB,cAAc,KAAKD,SAAS,GAAG,IAAI,gBAClC1C,cAAA,CAACO,YAAY;QAAA,GACP+C,uBAAuB;QAC3BnC,GAAG,EAAEwB,cAAc,CAACxB,GAAI;QACxBQ,MAAM,EAAEgB,cAAc,CAAChB,MAAO;QAC9BqC,QAAQ,EAAE,IAAK;QACfH,KAAK,EAAE,CAACjB,mBAAmB,CAACiB,KAAK,EAAE5D,UAAU,CAACgE,YAAY,CAAE;QAC5DjC,UAAU,EAAEA;MAAW,CACxB,CACF,eACDnB,IAAA,CAACX,IAAI;QAAA,GACCM,iBAAiB;QACrB0D,aAAa,EAAC,MAAM;QACpBL,KAAK,EAAE,CAAC5D,UAAU,CAACgE,YAAY,EAAE7B,MAAM,CAAC+B,IAAI,EAAEV,SAAS;MAAE,CAC1D,CAAC;IAAA,CACE;EAAC,CACH,CAAC;AAEX","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet } from 'react-native';
4
+ const RESERVED_IMAGE_STYLE_KEYS = ['position', 'top', 'right', 'bottom', 'left', 'width', 'height', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight'];
5
+ function invalidStyle() {
6
+ return {
7
+ style: {},
8
+ diagnostics: ['style']
9
+ };
10
+ }
11
+ function isEmptyStyleInput(value) {
12
+ if (value === undefined || value === null || value === false) return true;
13
+ if (!Array.isArray(value)) return false;
14
+ return value.every(isEmptyStyleInput);
15
+ }
16
+
17
+ /**
18
+ * 先 flatten 再复制允许字段,兼容 registered / array style,同时不修改 caller。
19
+ * 任意异常或非对象产物都失败关闭,避免宽类型 JS 值穿透到原生 Image。
20
+ */
21
+ export function sanitizeThumbnailImageStyle(style) {
22
+ try {
23
+ if (isEmptyStyleInput(style)) {
24
+ return {
25
+ style: {},
26
+ diagnostics: []
27
+ };
28
+ }
29
+ if (typeof style !== 'object' && typeof style !== 'number') {
30
+ return invalidStyle();
31
+ }
32
+ const flattened = StyleSheet.flatten(style);
33
+ if (flattened === undefined || flattened === null || flattened === false) {
34
+ return invalidStyle();
35
+ }
36
+ if (typeof flattened !== 'object' || Array.isArray(flattened)) {
37
+ return invalidStyle();
38
+ }
39
+ const source = flattened;
40
+ const reserved = new Set(RESERVED_IMAGE_STYLE_KEYS);
41
+ const foundReserved = new Set();
42
+ const sanitized = {};
43
+ for (const [key, value] of Object.entries(source)) {
44
+ if (reserved.has(key)) {
45
+ foundReserved.add(key);
46
+ } else {
47
+ sanitized[key] = value;
48
+ }
49
+ }
50
+ return {
51
+ style: sanitized,
52
+ diagnostics: RESERVED_IMAGE_STYLE_KEYS.filter(key => foundReserved.has(key))
53
+ };
54
+ } catch {
55
+ return invalidStyle();
56
+ }
57
+ }
58
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","RESERVED_IMAGE_STYLE_KEYS","invalidStyle","style","diagnostics","isEmptyStyleInput","value","undefined","Array","isArray","every","sanitizeThumbnailImageStyle","flattened","flatten","source","reserved","Set","foundReserved","sanitized","key","Object","entries","has","add","filter"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/normalize.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AAIzC,MAAMC,yBAAyB,GAAG,CAChC,UAAU,EACV,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,CACH;AAOV,SAASC,YAAYA,CAAA,EAAiC;EACpD,OAAO;IAAEC,KAAK,EAAE,CAAC,CAAC;IAAEC,WAAW,EAAE,CAAC,OAAO;EAAE,CAAC;AAC9C;AAEA,SAASC,iBAAiBA,CAACC,KAAc,EAAW;EAClD,IAAIA,KAAK,KAAKC,SAAS,IAAID,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,KAAK,EAAE,OAAO,IAAI;EACzE,IAAI,CAACE,KAAK,CAACC,OAAO,CAACH,KAAK,CAAC,EAAE,OAAO,KAAK;EACvC,OAAOA,KAAK,CAACI,KAAK,CAACL,iBAAiB,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASM,2BAA2BA,CACzCR,KAAiD,EACnB;EAC9B,IAAI;IACF,IAAIE,iBAAiB,CAACF,KAAK,CAAC,EAAE;MAC5B,OAAO;QAAEA,KAAK,EAAE,CAAC,CAAC;QAAEC,WAAW,EAAE;MAAG,CAAC;IACvC;IACA,IAAI,OAAOD,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC1D,OAAOD,YAAY,CAAC,CAAC;IACvB;IAEA,MAAMU,SAAS,GAAGZ,UAAU,CAACa,OAAO,CAACV,KAAK,CAAY;IACtD,IAAIS,SAAS,KAAKL,SAAS,IAAIK,SAAS,KAAK,IAAI,IAAIA,SAAS,KAAK,KAAK,EAAE;MACxE,OAAOV,YAAY,CAAC,CAAC;IACvB;IACA,IAAI,OAAOU,SAAS,KAAK,QAAQ,IAAIJ,KAAK,CAACC,OAAO,CAACG,SAAS,CAAC,EAAE;MAC7D,OAAOV,YAAY,CAAC,CAAC;IACvB;IAEA,MAAMY,MAAM,GAAGF,SAAoC;IACnD,MAAMG,QAAQ,GAAG,IAAIC,GAAG,CAASf,yBAAyB,CAAC;IAC3D,MAAMgB,aAAa,GAAG,IAAID,GAAG,CAAS,CAAC;IACvC,MAAME,SAAkC,GAAG,CAAC,CAAC;IAC7C,KAAK,MAAM,CAACC,GAAG,EAAEb,KAAK,CAAC,IAAIc,MAAM,CAACC,OAAO,CAACP,MAAM,CAAC,EAAE;MACjD,IAAIC,QAAQ,CAACO,GAAG,CAACH,GAAG,CAAC,EAAE;QACrBF,aAAa,CAACM,GAAG,CAACJ,GAAG,CAAC;MACxB,CAAC,MAAM;QACLD,SAAS,CAACC,GAAG,CAAC,GAAGb,KAAK;MACxB;IACF;IAEA,OAAO;MACLH,KAAK,EAAEe,SAAgC;MACvCd,WAAW,EAAEH,yBAAyB,CAACuB,MAAM,CAAEL,GAAG,IAChDF,aAAa,CAACK,GAAG,CAACH,GAAG,CACvB;IACF,CAAC;EACH,CAAC,CAAC,MAAM;IACN,OAAOjB,YAAY,CAAC,CAAC;EACvB;AACF","ignoreList":[]}
@@ -2,21 +2,16 @@
2
2
 
3
3
  import { StyleSheet } from 'react-native';
4
4
  import { r } from "../../../theme/index.js";
5
- /** [L-94] ring 圆角外展量:border(2) + padding(1) = 3pt,让外圈圆角贴合内圆角。
6
- * Thumbnail.tsx 侧用此常量替代魔数 `+ 3`。 */
7
- export const RING_EXTRA_RADIUS = r(2) + r(1); // border + padding
8
-
9
5
  /** Thumbnail 静态样式 ——
10
- * - `base`:Image 占位色,加载中 / 失败时不至于空白
11
- * - `ring`:`selected` 态的外圈品牌色描边,padding 抵消 ring image 之间留 1pt gap */
6
+ * - `visualFrame`:固定尺寸、裁切、加载失败 placeholder
7
+ * - `ring`:始终存在的 2pt visual overlay,selected 只切颜色 */
12
8
  export const makeStyles = c => StyleSheet.create({
13
- base: {
14
- backgroundColor: c.surfaceContainer
9
+ visualFrame: {
10
+ backgroundColor: c.surfaceContainer,
11
+ overflow: 'hidden'
15
12
  },
16
13
  ring: {
17
- borderWidth: r(2),
18
- borderColor: c.primary,
19
- padding: r(1)
14
+ borderWidth: 2
20
15
  }
21
16
  });
22
17
 
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","r","RING_EXTRA_RADIUS","makeStyles","c","create","base","backgroundColor","surfaceContainer","ring","borderWidth","borderColor","primary","padding","sizingFor","size","width","height","borderRadius"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,CAAC,QAA0B,yBAAgB;AAGpD;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGD,CAAC,CAAC,CAAC,CAAC,GAAGA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE9C;AACA;AACA;AACA,OAAO,MAAME,UAAU,GAAIC,CAAc,IACvCJ,UAAU,CAACK,MAAM,CAAC;EAChBC,IAAI,EAAE;IACJC,eAAe,EAAEH,CAAC,CAACI;EACrB,CAAC;EACDC,IAAI,EAAE;IACJC,WAAW,EAAET,CAAC,CAAC,CAAC,CAAC;IACjBU,WAAW,EAAEP,CAAC,CAACQ,OAAO;IACtBC,OAAO,EAAEZ,CAAC,CAAC,CAAC;EACd;AACF,CAAC,CAAC;;AAEJ;AACA;AACA,OAAO,MAAMa,SAAS,GAAIC,IAAmB,IAAK;EAChD,QAAQA,IAAI;IACV,KAAK,IAAI;MACP,OAAO;QAAEC,KAAK,EAAEf,CAAC,CAAC,EAAE,CAAC;QAAEgB,MAAM,EAAEhB,CAAC,CAAC,EAAE,CAAC;QAAEiB,YAAY,EAAEjB,CAAC,CAAC,CAAC;MAAE,CAAC;IAC5D,KAAK,IAAI;MACP,OAAO;QAAEe,KAAK,EAAEf,CAAC,CAAC,GAAG,CAAC;QAAEgB,MAAM,EAAEhB,CAAC,CAAC,EAAE,CAAC;QAAEiB,YAAY,EAAEjB,CAAC,CAAC,EAAE;MAAE,CAAC;IAC9D,KAAK,IAAI;IACT;MACE;MACA,OAAO;QAAEe,KAAK,EAAEf,CAAC,CAAC,GAAG,CAAC;QAAEgB,MAAM,EAAEhB,CAAC,CAAC,EAAE,CAAC;QAAEiB,YAAY,EAAEjB,CAAC,CAAC,CAAC;MAAE,CAAC;EAC/D;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["StyleSheet","r","makeStyles","c","create","visualFrame","backgroundColor","surfaceContainer","overflow","ring","borderWidth","sizingFor","size","width","height","borderRadius"],"sourceRoot":"../../../../../src","sources":["components/ui/Thumbnail/styles.ts"],"mappings":";;AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,CAAC,QAA0B,yBAAgB;AAGpD;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAIC,CAAc,IACvCH,UAAU,CAACI,MAAM,CAAC;EAChBC,WAAW,EAAE;IACXC,eAAe,EAAEH,CAAC,CAACI,gBAAgB;IACnCC,QAAQ,EAAE;EACZ,CAAC;EACDC,IAAI,EAAE;IACJC,WAAW,EAAE;EACf;AACF,CAAC,CAAC;;AAEJ;AACA;AACA,OAAO,MAAMC,SAAS,GAAIC,IAAmB,IAAK;EAChD,QAAQA,IAAI;IACV,KAAK,IAAI;MACP,OAAO;QAAEC,KAAK,EAAEZ,CAAC,CAAC,EAAE,CAAC;QAAEa,MAAM,EAAEb,CAAC,CAAC,EAAE,CAAC;QAAEc,YAAY,EAAEd,CAAC,CAAC,CAAC;MAAE,CAAC;IAC5D,KAAK,IAAI;MACP,OAAO;QAAEY,KAAK,EAAEZ,CAAC,CAAC,GAAG,CAAC;QAAEa,MAAM,EAAEb,CAAC,CAAC,EAAE,CAAC;QAAEc,YAAY,EAAEd,CAAC,CAAC,EAAE;MAAE,CAAC;IAC9D,KAAK,IAAI;IACT;MACE;MACA,OAAO;QAAEY,KAAK,EAAEZ,CAAC,CAAC,GAAG,CAAC;QAAEa,MAAM,EAAEb,CAAC,CAAC,EAAE,CAAC;QAAEc,YAAY,EAAEd,CAAC,CAAC,CAAC;MAAE,CAAC;EAC/D;AACF,CAAC","ignoreList":[]}