@unif/react-native-design 0.20.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 (562) 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 +68 -40
  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 +6 -8
  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.map +1 -1
  219. package/lib/typescript/src/components/ui/Carousel/behavior.d.ts +25 -0
  220. package/lib/typescript/src/components/ui/Carousel/behavior.d.ts.map +1 -0
  221. package/lib/typescript/src/components/ui/Carousel/styles.d.ts +4 -6
  222. package/lib/typescript/src/components/ui/Carousel/styles.d.ts.map +1 -1
  223. package/lib/typescript/src/components/ui/Carousel/types.d.ts +14 -6
  224. package/lib/typescript/src/components/ui/Carousel/types.d.ts.map +1 -1
  225. package/lib/typescript/src/components/ui/Cell/Cell.d.ts +1 -1
  226. package/lib/typescript/src/components/ui/Cell/Cell.d.ts.map +1 -1
  227. package/lib/typescript/src/components/ui/Cell/Leading.d.ts +2 -3
  228. package/lib/typescript/src/components/ui/Cell/Leading.d.ts.map +1 -1
  229. package/lib/typescript/src/components/ui/Cell/content.d.ts +18 -0
  230. package/lib/typescript/src/components/ui/Cell/content.d.ts.map +1 -0
  231. package/lib/typescript/src/components/ui/Cell/index.d.ts +1 -1
  232. package/lib/typescript/src/components/ui/Cell/index.d.ts.map +1 -1
  233. package/lib/typescript/src/components/ui/Cell/types.d.ts +66 -30
  234. package/lib/typescript/src/components/ui/Cell/types.d.ts.map +1 -1
  235. package/lib/typescript/src/components/ui/Checkbox/Checkbox.d.ts +1 -1
  236. package/lib/typescript/src/components/ui/Checkbox/Checkbox.d.ts.map +1 -1
  237. package/lib/typescript/src/components/ui/Checkbox/types.d.ts +12 -3
  238. package/lib/typescript/src/components/ui/Checkbox/types.d.ts.map +1 -1
  239. package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts +6 -3
  240. package/lib/typescript/src/components/ui/Confirm/ConfirmHost.d.ts.map +1 -1
  241. package/lib/typescript/src/components/ui/Confirm/confirm.d.ts +10 -4
  242. package/lib/typescript/src/components/ui/Confirm/confirm.d.ts.map +1 -1
  243. package/lib/typescript/src/components/ui/Confirm/labels.d.ts +6 -0
  244. package/lib/typescript/src/components/ui/Confirm/labels.d.ts.map +1 -0
  245. package/lib/typescript/src/components/ui/Confirm/store.d.ts +44 -0
  246. package/lib/typescript/src/components/ui/Confirm/store.d.ts.map +1 -0
  247. package/lib/typescript/src/components/ui/Confirm/styles.d.ts +3 -0
  248. package/lib/typescript/src/components/ui/Confirm/styles.d.ts.map +1 -1
  249. package/lib/typescript/src/components/ui/Confirm/types.d.ts +0 -9
  250. package/lib/typescript/src/components/ui/Confirm/types.d.ts.map +1 -1
  251. package/lib/typescript/src/components/ui/DrawerHeader/DrawerHeader.d.ts.map +1 -1
  252. package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts +7 -1
  253. package/lib/typescript/src/components/ui/DrawerHeader/types.d.ts.map +1 -1
  254. package/lib/typescript/src/components/ui/Grid/Grid.d.ts.map +1 -1
  255. package/lib/typescript/src/components/ui/Grid/accessibility.d.ts +5 -0
  256. package/lib/typescript/src/components/ui/Grid/accessibility.d.ts.map +1 -0
  257. package/lib/typescript/src/components/ui/Grid/types.d.ts +2 -0
  258. package/lib/typescript/src/components/ui/Grid/types.d.ts.map +1 -1
  259. package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts +1 -1
  260. package/lib/typescript/src/components/ui/IconButton/IconButton.d.ts.map +1 -1
  261. package/lib/typescript/src/components/ui/IconButton/types.d.ts +4 -2
  262. package/lib/typescript/src/components/ui/IconButton/types.d.ts.map +1 -1
  263. package/lib/typescript/src/components/ui/Input/Input.d.ts +5 -383
  264. package/lib/typescript/src/components/ui/Input/Input.d.ts.map +1 -1
  265. package/lib/typescript/src/components/ui/Input/index.d.ts +1 -0
  266. package/lib/typescript/src/components/ui/Input/index.d.ts.map +1 -1
  267. package/lib/typescript/src/components/ui/Input/types.d.ts +3 -17
  268. package/lib/typescript/src/components/ui/Input/types.d.ts.map +1 -1
  269. package/lib/typescript/src/components/ui/Logo/Logo.d.ts +2 -2
  270. package/lib/typescript/src/components/ui/Logo/Logo.d.ts.map +1 -1
  271. package/lib/typescript/src/components/ui/Logo/types.d.ts +2 -2
  272. package/lib/typescript/src/components/ui/Logo/types.d.ts.map +1 -1
  273. package/lib/typescript/src/components/ui/NavBar/NavBar.d.ts.map +1 -1
  274. package/lib/typescript/src/components/ui/NavBar/index.d.ts +1 -1
  275. package/lib/typescript/src/components/ui/NavBar/index.d.ts.map +1 -1
  276. package/lib/typescript/src/components/ui/NavBar/isSlot.d.ts +24 -4
  277. package/lib/typescript/src/components/ui/NavBar/isSlot.d.ts.map +1 -1
  278. package/lib/typescript/src/components/ui/NavBar/types.d.ts +8 -8
  279. package/lib/typescript/src/components/ui/NavBar/types.d.ts.map +1 -1
  280. package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts +6 -14
  281. package/lib/typescript/src/components/ui/PasswordInput/PasswordInput.d.ts.map +1 -1
  282. package/lib/typescript/src/components/ui/PasswordInput/types.d.ts +4 -14
  283. package/lib/typescript/src/components/ui/PasswordInput/types.d.ts.map +1 -1
  284. package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts +1 -1
  285. package/lib/typescript/src/components/ui/Pulse/PulseDot.d.ts.map +1 -1
  286. package/lib/typescript/src/components/ui/Pulse/normalizePulseOptions.d.ts +32 -0
  287. package/lib/typescript/src/components/ui/Pulse/normalizePulseOptions.d.ts.map +1 -0
  288. package/lib/typescript/src/components/ui/Pulse/usePulse.d.ts +10 -5
  289. package/lib/typescript/src/components/ui/Pulse/usePulse.d.ts.map +1 -1
  290. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.d.ts +11 -0
  291. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.d.ts.map +1 -0
  292. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.web.d.ts +18 -0
  293. package/lib/typescript/src/components/ui/Pulse/usePulseDriver.web.d.ts.map +1 -0
  294. package/lib/typescript/src/components/ui/Radio/Radio.d.ts +1 -1
  295. package/lib/typescript/src/components/ui/Radio/Radio.d.ts.map +1 -1
  296. package/lib/typescript/src/components/ui/Radio/RadioGroup.d.ts +2 -2
  297. package/lib/typescript/src/components/ui/Radio/RadioGroup.d.ts.map +1 -1
  298. package/lib/typescript/src/components/ui/Radio/types.d.ts +14 -3
  299. package/lib/typescript/src/components/ui/Radio/types.d.ts.map +1 -1
  300. package/lib/typescript/src/components/ui/Reveal/Reveal.d.ts.map +1 -1
  301. package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts +2 -8
  302. package/lib/typescript/src/components/ui/Reveal/Reveal.web.d.ts.map +1 -1
  303. package/lib/typescript/src/components/ui/Reveal/types.d.ts +1 -1
  304. package/lib/typescript/src/components/ui/Reveal/types.d.ts.map +1 -1
  305. package/lib/typescript/src/components/ui/Reveal/webTransition.d.ts +38 -0
  306. package/lib/typescript/src/components/ui/Reveal/webTransition.d.ts.map +1 -0
  307. package/lib/typescript/src/components/ui/Search/Search.d.ts +4 -214
  308. package/lib/typescript/src/components/ui/Search/Search.d.ts.map +1 -1
  309. package/lib/typescript/src/components/ui/Search/types.d.ts +13 -6
  310. package/lib/typescript/src/components/ui/Search/types.d.ts.map +1 -1
  311. package/lib/typescript/src/components/ui/Segmented/Segmented.d.ts.map +1 -1
  312. package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts +3 -3
  313. package/lib/typescript/src/components/ui/Skeleton/Skeleton.d.ts.map +1 -1
  314. package/lib/typescript/src/components/ui/Spinner/Spinner.d.ts +1 -1
  315. package/lib/typescript/src/components/ui/Spinner/Spinner.d.ts.map +1 -1
  316. package/lib/typescript/src/components/ui/Spinner/Spinner.web.d.ts +1 -1
  317. package/lib/typescript/src/components/ui/Spinner/Spinner.web.d.ts.map +1 -1
  318. package/lib/typescript/src/components/ui/Spinner/shared.d.ts +5 -0
  319. package/lib/typescript/src/components/ui/Spinner/shared.d.ts.map +1 -1
  320. package/lib/typescript/src/components/ui/Spinner/types.d.ts +1 -1
  321. package/lib/typescript/src/components/ui/Spinner/types.d.ts.map +1 -1
  322. package/lib/typescript/src/components/ui/Stepper/Stepper.d.ts +3 -3
  323. package/lib/typescript/src/components/ui/Stepper/Stepper.d.ts.map +1 -1
  324. package/lib/typescript/src/components/ui/Stepper/StepperPressable.d.ts +2 -0
  325. package/lib/typescript/src/components/ui/Stepper/StepperPressable.d.ts.map +1 -0
  326. package/lib/typescript/src/components/ui/Stepper/StepperPressable.web.d.ts +2 -0
  327. package/lib/typescript/src/components/ui/Stepper/StepperPressable.web.d.ts.map +1 -0
  328. package/lib/typescript/src/components/ui/Stepper/accessibility.d.ts +3 -0
  329. package/lib/typescript/src/components/ui/Stepper/accessibility.d.ts.map +1 -0
  330. package/lib/typescript/src/components/ui/Stepper/accessibility.types.d.ts +23 -0
  331. package/lib/typescript/src/components/ui/Stepper/accessibility.types.d.ts.map +1 -0
  332. package/lib/typescript/src/components/ui/Stepper/accessibility.web.d.ts +9 -0
  333. package/lib/typescript/src/components/ui/Stepper/accessibility.web.d.ts.map +1 -0
  334. package/lib/typescript/src/components/ui/Stepper/layout.d.ts +22 -0
  335. package/lib/typescript/src/components/ui/Stepper/layout.d.ts.map +1 -0
  336. package/lib/typescript/src/components/ui/Stepper/normalizeStepper.d.ts +31 -0
  337. package/lib/typescript/src/components/ui/Stepper/normalizeStepper.d.ts.map +1 -0
  338. package/lib/typescript/src/components/ui/Stepper/styles.d.ts +9 -2
  339. package/lib/typescript/src/components/ui/Stepper/styles.d.ts.map +1 -1
  340. package/lib/typescript/src/components/ui/Stepper/types.d.ts +3 -1
  341. package/lib/typescript/src/components/ui/Stepper/types.d.ts.map +1 -1
  342. package/lib/typescript/src/components/ui/Switch/Switch.d.ts.map +1 -1
  343. package/lib/typescript/src/components/ui/Switch/Switch.web.d.ts.map +1 -1
  344. package/lib/typescript/src/components/ui/Switch/styles.d.ts +9 -3
  345. package/lib/typescript/src/components/ui/Switch/styles.d.ts.map +1 -1
  346. package/lib/typescript/src/components/ui/Switch/types.d.ts +2 -2
  347. package/lib/typescript/src/components/ui/Switch/types.d.ts.map +1 -1
  348. package/lib/typescript/src/components/ui/Tag/Tag.d.ts.map +1 -1
  349. package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts +4 -401
  350. package/lib/typescript/src/components/ui/TextField/TextFieldBase.d.ts.map +1 -1
  351. package/lib/typescript/src/components/ui/TextField/TextFieldSlot.d.ts +13 -0
  352. package/lib/typescript/src/components/ui/TextField/TextFieldSlot.d.ts.map +1 -0
  353. package/lib/typescript/src/components/ui/TextField/normalize.d.ts +51 -0
  354. package/lib/typescript/src/components/ui/TextField/normalize.d.ts.map +1 -0
  355. package/lib/typescript/src/components/ui/TextField/styles.d.ts +30 -0
  356. package/lib/typescript/src/components/ui/TextField/styles.d.ts.map +1 -1
  357. package/lib/typescript/src/components/ui/TextField/types.d.ts +92 -18
  358. package/lib/typescript/src/components/ui/TextField/types.d.ts.map +1 -1
  359. package/lib/typescript/src/components/ui/TextField/useErrorAnnouncement.d.ts +3 -0
  360. package/lib/typescript/src/components/ui/TextField/useErrorAnnouncement.d.ts.map +1 -0
  361. package/lib/typescript/src/components/ui/TextField/useTextFieldValue.d.ts +18 -0
  362. package/lib/typescript/src/components/ui/TextField/useTextFieldValue.d.ts.map +1 -0
  363. package/lib/typescript/src/components/ui/TextField/valueState.d.ts +50 -0
  364. package/lib/typescript/src/components/ui/TextField/valueState.d.ts.map +1 -0
  365. package/lib/typescript/src/components/ui/Textarea/Textarea.d.ts +4 -382
  366. package/lib/typescript/src/components/ui/Textarea/Textarea.d.ts.map +1 -1
  367. package/lib/typescript/src/components/ui/Textarea/index.d.ts +1 -0
  368. package/lib/typescript/src/components/ui/Textarea/index.d.ts.map +1 -1
  369. package/lib/typescript/src/components/ui/Textarea/types.d.ts +3 -14
  370. package/lib/typescript/src/components/ui/Textarea/types.d.ts.map +1 -1
  371. package/lib/typescript/src/components/ui/Thumbnail/Thumbnail.d.ts +5 -12
  372. package/lib/typescript/src/components/ui/Thumbnail/Thumbnail.d.ts.map +1 -1
  373. package/lib/typescript/src/components/ui/Thumbnail/index.d.ts +1 -1
  374. package/lib/typescript/src/components/ui/Thumbnail/index.d.ts.map +1 -1
  375. package/lib/typescript/src/components/ui/Thumbnail/normalize.d.ts +13 -0
  376. package/lib/typescript/src/components/ui/Thumbnail/normalize.d.ts.map +1 -0
  377. package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts +4 -8
  378. package/lib/typescript/src/components/ui/Thumbnail/styles.d.ts.map +1 -1
  379. package/lib/typescript/src/components/ui/Thumbnail/types.d.ts +21 -13
  380. package/lib/typescript/src/components/ui/Thumbnail/types.d.ts.map +1 -1
  381. package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts +6 -2
  382. package/lib/typescript/src/components/ui/Toast/ToastHost.d.ts.map +1 -1
  383. package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts +6 -3
  384. package/lib/typescript/src/components/ui/Toast/ToastHost.web.d.ts.map +1 -1
  385. package/lib/typescript/src/components/ui/Toast/store.d.ts +39 -0
  386. package/lib/typescript/src/components/ui/Toast/store.d.ts.map +1 -0
  387. package/lib/typescript/src/components/ui/Toast/toast.d.ts +7 -2
  388. package/lib/typescript/src/components/ui/Toast/toast.d.ts.map +1 -1
  389. package/lib/typescript/src/components/ui/Toast/types.d.ts +5 -3
  390. package/lib/typescript/src/components/ui/Toast/types.d.ts.map +1 -1
  391. package/lib/typescript/src/components/ui/index.d.ts +4 -4
  392. package/lib/typescript/src/components/ui/index.d.ts.map +1 -1
  393. package/lib/typescript/src/components/ui/shared/ImageAttempt.d.ts +13 -0
  394. package/lib/typescript/src/components/ui/shared/ImageAttempt.d.ts.map +1 -0
  395. package/lib/typescript/src/components/ui/shared/a11y.d.ts +19 -0
  396. package/lib/typescript/src/components/ui/shared/a11y.d.ts.map +1 -0
  397. package/lib/typescript/src/components/ui/shared/accessibilityName.d.ts +3 -0
  398. package/lib/typescript/src/components/ui/shared/accessibilityName.d.ts.map +1 -0
  399. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.d.ts +3 -0
  400. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.d.ts.map +1 -0
  401. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.shared.d.ts +4 -0
  402. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.shared.d.ts.map +1 -0
  403. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.web.d.ts +3 -0
  404. package/lib/typescript/src/components/ui/shared/selectImageAttemptSource.web.d.ts.map +1 -0
  405. package/lib/typescript/src/theme/ThemeProvider.d.ts +2 -3
  406. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
  407. package/lib/typescript/src/theme/fontScale.d.ts +4 -0
  408. package/lib/typescript/src/theme/fontScale.d.ts.map +1 -0
  409. package/lib/typescript/src/theme/index.d.ts +2 -1
  410. package/lib/typescript/src/theme/index.d.ts.map +1 -1
  411. package/lib/typescript/src/theme/themeContext.d.ts +6 -0
  412. package/lib/typescript/src/theme/themeContext.d.ts.map +1 -0
  413. package/lib/typescript/src/theme/themeDiagnostics.d.ts +6 -0
  414. package/lib/typescript/src/theme/themeDiagnostics.d.ts.map +1 -0
  415. package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts +8 -3
  416. package/lib/typescript/src/theme/usePrefersReducedMotion.d.ts.map +1 -1
  417. package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts +5 -2
  418. package/lib/typescript/src/theme/usePrefersReducedMotion.web.d.ts.map +1 -1
  419. package/lib/typescript/src/theme/useTheme.d.ts +1 -1
  420. package/lib/typescript/src/theme/useTheme.d.ts.map +1 -1
  421. package/lib/typescript/src/theme/useThemedStyles.d.ts +1 -1
  422. package/lib/typescript/src/theme/useThemedStyles.d.ts.map +1 -1
  423. package/lib/typescript/src/utils/imageSource.d.ts +20 -0
  424. package/lib/typescript/src/utils/imageSource.d.ts.map +1 -0
  425. package/lib/typescript/type-tests/public-api.d.ts +2 -0
  426. package/lib/typescript/type-tests/public-api.d.ts.map +1 -0
  427. package/lib/typescript/website/src/components/iconCatalogCategories.d.ts +11 -0
  428. package/lib/typescript/website/src/components/iconCatalogCategories.d.ts.map +1 -0
  429. package/package.json +27 -13
  430. package/src/components/business/AvatarWithRing/AvatarWithRing.tsx +11 -4
  431. package/src/components/business/AvatarWithRing/styles.ts +11 -9
  432. package/src/components/business/VersionPill/VersionPill.tsx +31 -25
  433. package/src/components/business/VersionPill/content.ts +47 -0
  434. package/src/components/business/VersionPill/index.ts +1 -1
  435. package/src/components/business/VersionPill/styles.ts +4 -0
  436. package/src/components/business/VersionPill/types.ts +7 -2
  437. package/src/components/business/index.ts +1 -1
  438. package/src/components/business/useSvgId.ts +29 -8
  439. package/src/components/ui/Avatar/Avatar.tsx +25 -34
  440. package/src/components/ui/Avatar/types.ts +6 -2
  441. package/src/components/ui/Button/Button.tsx +39 -20
  442. package/src/components/ui/Button/ButtonBase.tsx +21 -12
  443. package/src/components/ui/Button/types.ts +5 -3
  444. package/src/components/ui/Carousel/Carousel.tsx +102 -40
  445. package/src/components/ui/Carousel/behavior.ts +78 -0
  446. package/src/components/ui/Carousel/styles.ts +5 -7
  447. package/src/components/ui/Carousel/types.ts +18 -6
  448. package/src/components/ui/Cell/Cell.tsx +85 -74
  449. package/src/components/ui/Cell/Leading.tsx +14 -14
  450. package/src/components/ui/Cell/content.ts +53 -0
  451. package/src/components/ui/Cell/index.ts +7 -1
  452. package/src/components/ui/Cell/types.ts +64 -30
  453. package/src/components/ui/Checkbox/Checkbox.tsx +35 -8
  454. package/src/components/ui/Checkbox/types.ts +15 -3
  455. package/src/components/ui/Confirm/ConfirmHost.tsx +51 -26
  456. package/src/components/ui/Confirm/confirm.ts +17 -34
  457. package/src/components/ui/Confirm/labels.ts +14 -0
  458. package/src/components/ui/Confirm/store.ts +147 -0
  459. package/src/components/ui/Confirm/styles.ts +4 -0
  460. package/src/components/ui/Confirm/types.ts +2 -10
  461. package/src/components/ui/DrawerHeader/DrawerHeader.tsx +22 -27
  462. package/src/components/ui/DrawerHeader/types.ts +7 -1
  463. package/src/components/ui/Grid/Grid.tsx +44 -12
  464. package/src/components/ui/Grid/accessibility.ts +21 -0
  465. package/src/components/ui/Grid/types.ts +2 -0
  466. package/src/components/ui/IconButton/IconButton.tsx +20 -3
  467. package/src/components/ui/IconButton/types.ts +4 -2
  468. package/src/components/ui/Input/Input.tsx +16 -6
  469. package/src/components/ui/Input/index.ts +5 -0
  470. package/src/components/ui/Input/types.ts +12 -23
  471. package/src/components/ui/Logo/Logo.tsx +27 -4
  472. package/src/components/ui/Logo/types.ts +2 -2
  473. package/src/components/ui/NavBar/NavBar.tsx +27 -19
  474. package/src/components/ui/NavBar/index.ts +1 -1
  475. package/src/components/ui/NavBar/isSlot.ts +372 -5
  476. package/src/components/ui/NavBar/types.ts +9 -8
  477. package/src/components/ui/PasswordInput/PasswordInput.tsx +67 -69
  478. package/src/components/ui/PasswordInput/types.ts +12 -14
  479. package/src/components/ui/Pulse/PulseDot.tsx +5 -4
  480. package/src/components/ui/Pulse/normalizePulseOptions.ts +76 -0
  481. package/src/components/ui/Pulse/usePulse.ts +80 -34
  482. package/src/components/ui/Pulse/usePulseDriver.ts +49 -0
  483. package/src/components/ui/Pulse/usePulseDriver.web.ts +66 -0
  484. package/src/components/ui/Radio/Radio.tsx +44 -15
  485. package/src/components/ui/Radio/RadioGroup.tsx +21 -3
  486. package/src/components/ui/Radio/types.ts +17 -3
  487. package/src/components/ui/Reveal/Reveal.tsx +5 -3
  488. package/src/components/ui/Reveal/Reveal.web.tsx +72 -29
  489. package/src/components/ui/Reveal/types.ts +1 -1
  490. package/src/components/ui/Reveal/webTransition.ts +206 -0
  491. package/src/components/ui/Search/Search.tsx +127 -58
  492. package/src/components/ui/Search/types.ts +30 -9
  493. package/src/components/ui/Segmented/Segmented.tsx +10 -2
  494. package/src/components/ui/Skeleton/Skeleton.tsx +9 -5
  495. package/src/components/ui/Spinner/Spinner.tsx +25 -17
  496. package/src/components/ui/Spinner/Spinner.web.tsx +23 -18
  497. package/src/components/ui/Spinner/shared.ts +7 -0
  498. package/src/components/ui/Spinner/types.ts +1 -1
  499. package/src/components/ui/Stepper/Stepper.tsx +166 -86
  500. package/src/components/ui/Stepper/StepperPressable.tsx +1 -0
  501. package/src/components/ui/Stepper/StepperPressable.web.tsx +1 -0
  502. package/src/components/ui/Stepper/accessibility.ts +32 -0
  503. package/src/components/ui/Stepper/accessibility.types.ts +22 -0
  504. package/src/components/ui/Stepper/accessibility.web.ts +65 -0
  505. package/src/components/ui/Stepper/layout.ts +44 -0
  506. package/src/components/ui/Stepper/normalizeStepper.ts +85 -0
  507. package/src/components/ui/Stepper/styles.ts +9 -2
  508. package/src/components/ui/Stepper/types.ts +3 -1
  509. package/src/components/ui/Switch/Switch.tsx +54 -15
  510. package/src/components/ui/Switch/Switch.web.tsx +57 -19
  511. package/src/components/ui/Switch/styles.ts +11 -4
  512. package/src/components/ui/Switch/types.ts +2 -2
  513. package/src/components/ui/Tag/Tag.tsx +6 -2
  514. package/src/components/ui/TextField/TextFieldBase.tsx +175 -70
  515. package/src/components/ui/TextField/TextFieldSlot.tsx +91 -0
  516. package/src/components/ui/TextField/normalize.ts +280 -0
  517. package/src/components/ui/TextField/styles.ts +31 -0
  518. package/src/components/ui/TextField/types.ts +118 -22
  519. package/src/components/ui/TextField/useErrorAnnouncement.ts +27 -0
  520. package/src/components/ui/TextField/useTextFieldValue.ts +94 -0
  521. package/src/components/ui/TextField/valueState.ts +125 -0
  522. package/src/components/ui/Textarea/Textarea.tsx +11 -4
  523. package/src/components/ui/Textarea/index.ts +5 -0
  524. package/src/components/ui/Textarea/types.ts +14 -22
  525. package/src/components/ui/Thumbnail/Thumbnail.tsx +86 -51
  526. package/src/components/ui/Thumbnail/index.ts +5 -1
  527. package/src/components/ui/Thumbnail/normalize.ts +78 -0
  528. package/src/components/ui/Thumbnail/styles.ts +5 -10
  529. package/src/components/ui/Thumbnail/types.ts +43 -13
  530. package/src/components/ui/Toast/ToastHost.tsx +81 -22
  531. package/src/components/ui/Toast/ToastHost.web.tsx +91 -29
  532. package/src/components/ui/Toast/store.ts +148 -0
  533. package/src/components/ui/Toast/toast.ts +19 -10
  534. package/src/components/ui/Toast/types.ts +7 -3
  535. package/src/components/ui/index.ts +19 -4
  536. package/src/components/ui/shared/ImageAttempt.tsx +30 -0
  537. package/src/components/ui/shared/a11y.ts +18 -0
  538. package/src/components/ui/shared/accessibilityName.ts +6 -0
  539. package/src/components/ui/shared/selectImageAttemptSource.shared.ts +17 -0
  540. package/src/components/ui/shared/selectImageAttemptSource.ts +3 -0
  541. package/src/components/ui/shared/selectImageAttemptSource.web.ts +3 -0
  542. package/src/icons/data.ts +1 -1
  543. package/src/theme/ThemeProvider.tsx +18 -7
  544. package/src/theme/fontScale.ts +15 -0
  545. package/src/theme/index.ts +2 -3
  546. package/src/theme/themeContext.ts +24 -0
  547. package/src/theme/themeDiagnostics.ts +41 -0
  548. package/src/theme/usePrefersReducedMotion.ts +11 -4
  549. package/src/theme/usePrefersReducedMotion.web.ts +5 -2
  550. package/src/theme/useTheme.ts +19 -27
  551. package/src/theme/useThemedStyles.ts +12 -7
  552. package/src/utils/imageSource.ts +303 -0
  553. package/lib/module/components/ui/PasswordInput/styles.js +0 -12
  554. package/lib/module/components/ui/PasswordInput/styles.js.map +0 -1
  555. package/lib/module/components/ui/Pulse/usePulse.web.js +0 -76
  556. package/lib/module/components/ui/Pulse/usePulse.web.js.map +0 -1
  557. package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts +0 -7
  558. package/lib/typescript/src/components/ui/PasswordInput/styles.d.ts.map +0 -1
  559. package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts +0 -21
  560. package/lib/typescript/src/components/ui/Pulse/usePulse.web.d.ts.map +0 -1
  561. package/src/components/ui/PasswordInput/styles.ts +0 -7
  562. package/src/components/ui/Pulse/usePulse.web.ts +0 -74
@@ -1,112 +1,157 @@
1
1
  "use strict";
2
2
 
3
- import React, { forwardRef, useState } from 'react';
4
- import { Text, TextInput, View } from 'react-native';
5
- import { control, r, space, useColors, useThemedStyles } from "../../../theme/index.js";
3
+ import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
4
+ import { Platform, Text, TextInput, View } from 'react-native';
5
+ import { fixed, space, useColors, useThemedStyles } from "../../../theme/index.js";
6
6
  import { childTestID } from "../../../utils/testID/index.js";
7
+ import { createLogger } from "../../../utils/logger/index.js";
8
+ import { normalizeInputHeight, normalizeTextareaHeights, sanitizeTextFieldContainerStyle } from "./normalize.js";
7
9
  import { makeStyles } from "./styles.js";
8
-
9
- /** `TextInput` react-native-strict-api 下是组件类型(`TextInputType`),
10
- * ref 实例类型走 `ComponentRef<typeof TextInput>`(对应内部 `_TextInputInstance`)。 */
10
+ import { TextFieldSlot } from "./TextFieldSlot.js";
11
+ import { useErrorAnnouncement } from "./useErrorAnnouncement.js";
12
+ import { useTextFieldValue } from "./useTextFieldValue.js";
11
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
- /**
13
- * Input / Textarea 共享 primitive —— internal,不在主 barrel 导出。
14
- *
15
- * 行为:
16
- * - 视觉 4 态:idle(浅灰)/ focus(白底 brand 边)/ filled(白底 outline 边)/ error
17
- * - leading / trailing 左右 slot
18
- * - disabled 优先于 editable
19
- * - multiline=false → 单行 fixed height(默认 control.lg)
20
- * - multiline=true → 多行 minHeight/maxHeight,文字顶对齐,wrap 上下加 padding
21
- * - forwardRef<TextInput> —— 业务表单 inputRef.current?.focus() 聚焦
22
- *
23
- * 公开 API 是 Input / Textarea(本组件不直接给业务用)。
24
- */
25
- export const TextFieldBase = /*#__PURE__*/forwardRef(function TextFieldBase({
26
- multiline = false,
27
- height = control.lg,
28
- // [L-81] multiline minHeight 裸 96 → r(96),随设备缩放
29
- minHeight = r(96),
30
- maxHeight,
31
- leading,
32
- trailing,
33
- error,
34
- disabled,
35
- editable,
36
- containerStyle,
37
- value,
38
- onFocus,
39
- onBlur,
40
- onChangeText,
41
- testID,
42
- ...rest
43
- }, ref) {
44
- const c = useColors();
14
+ const log = createLogger('TextField');
15
+
16
+ /** internal native ref type;公开 ref 一律用 TextFieldHandle。 */
17
+
18
+ /** Input / Textarea / Search 共享的严格输入 primitive internal,不进公共 barrel。 */
19
+ export const TextFieldBase = /*#__PURE__*/forwardRef(function TextFieldBase(props, forwardedRef) {
20
+ const {
21
+ multiline,
22
+ height,
23
+ minHeight,
24
+ maxHeight,
25
+ searchLayout,
26
+ leading,
27
+ trailing,
28
+ error,
29
+ disabled,
30
+ editable,
31
+ containerStyle,
32
+ value,
33
+ defaultValue,
34
+ onChangeText,
35
+ accessibilityState,
36
+ accessibilityRole,
37
+ placeholderTextColor: callerPlaceholder,
38
+ onFocus,
39
+ onBlur,
40
+ testID,
41
+ style: _style,
42
+ numberOfLines: _numberOfLines,
43
+ ['aria-disabled']: _ariaDisabled,
44
+ readOnly: _readOnly,
45
+ role: _role,
46
+ enterKeyHint: _enterKeyHint,
47
+ clearTextOnFocus: _clearTextOnFocus,
48
+ ...allowedNativeProps
49
+ } = props;
50
+ const removedNativeAliasKey = Object.entries({
51
+ 'style': _style,
52
+ 'numberOfLines': _numberOfLines,
53
+ 'aria-disabled': _ariaDisabled,
54
+ 'readOnly': _readOnly,
55
+ 'role': _role,
56
+ 'enterKeyHint': _enterKeyHint,
57
+ 'clearTextOnFocus': _clearTextOnFocus
58
+ }).filter(([, entry]) => entry !== undefined).map(([name]) => name).join(',');
59
+ const colors = useColors();
45
60
  const styles = useThemedStyles(makeStyles);
46
61
  const [focused, setFocused] = useState(false);
47
- // [M-9] 内部镜像 state:非受控场景 value 不传,用 _mirror 做 hasValue 判断
48
- const [_mirror, setMirror] = useState('');
49
- // [M-9] filled 在受控 value 和内部镜像 state 之间取 hasValue,
50
- // 保证非受控场景 filled 视觉态能正确响应用户输入,且受控用法行为不变
51
- const filled = value != null ? String(value).length > 0 : _mirror.length > 0;
52
- const isEditable = disabled ? false : editable;
53
- // [L-31] editable=false(非 disabled)时也应进入 disabled a11y state
54
- const isDisabledA11y = disabled || editable === false;
55
-
56
- // 视觉态优先级:error > focused > filled > idle。
57
- // active 三态(focus/filled/error)共享 wrapActive 白底,各自只覆 borderColor 差量。
62
+ const nativeRef = React.useRef(null);
63
+ const scope = multiline ? 'Textarea' : 'Input';
64
+ const controller = useTextFieldValue({
65
+ value,
66
+ defaultValue,
67
+ onChangeText: typeof onChangeText === 'function' ? onChangeText : undefined
68
+ }, scope);
69
+ const normalizedInputHeight = normalizeInputHeight(height === undefined ? fixed.hitTarget : height);
70
+ const normalizedTextareaHeights = normalizeTextareaHeights(minHeight, maxHeight);
71
+ const sanitizedContainer = sanitizeTextFieldContainerStyle(containerStyle);
72
+ const effectiveEditable = disabled !== true && editable !== false;
73
+ const mergedAccessibilityState = {
74
+ ...accessibilityState,
75
+ disabled: !effectiveEditable
76
+ };
77
+ const normalizedHeight = multiline ? normalizedTextareaHeights.minHeight : normalizedInputHeight.value;
78
+ const filled = controller.value.length > 0;
79
+ const diagnostics = [...normalizedInputHeight.diagnostics, ...normalizedTextareaHeights.diagnostics, ...sanitizedContainer.diagnostics];
80
+ const diagnosticKey = diagnostics.join(',');
81
+ useEffect(() => {
82
+ if (diagnosticKey.length > 0) {
83
+ log.warn(`${scope}: 非法布局值(${diagnosticKey})已回退。`);
84
+ }
85
+ }, [diagnosticKey, scope]);
86
+ useEffect(() => {
87
+ if (removedNativeAliasKey.length > 0) {
88
+ log.warn(`${scope}: 已忽略受管原生 props(${removedNativeAliasKey})。`);
89
+ }
90
+ }, [removedNativeAliasKey, scope]);
91
+ useErrorAnnouncement(error);
92
+ useImperativeHandle(forwardedRef, () => ({
93
+ focus: () => nativeRef.current?.focus(),
94
+ blur: () => nativeRef.current?.blur()
95
+ }), []);
58
96
  const wrapStateStyles = error ? [styles.wrapActive, styles.wrapError] : focused ? [styles.wrapActive, styles.wrapFocus] : filled ? [styles.wrapActive, styles.wrapFilled] : [styles.wrapIdle];
97
+ const interactiveHeight = searchLayout?.interactiveHeight ?? normalizedHeight;
59
98
  return /*#__PURE__*/_jsxs(View, {
60
- style: [containerStyle, disabled && styles.containerDisabled],
99
+ style: [sanitizedContainer.style, !effectiveEditable && styles.containerDisabled, searchLayout !== undefined && !multiline && styles.rootCentered, {
100
+ minWidth: fixed.hitTarget,
101
+ minHeight: normalizedHeight
102
+ }],
61
103
  testID: testID,
62
104
  children: [/*#__PURE__*/_jsxs(View, {
63
- style: [styles.wrap, multiline && styles.wrapMultiline, ...wrapStateStyles, multiline ? {
64
- minHeight,
65
- ...(maxHeight != null && {
66
- maxHeight
105
+ style: [styles.wrap, multiline && styles.wrapMultiline, searchLayout === undefined && wrapStateStyles, searchLayout !== undefined && styles.searchInteractiveRow, multiline ? {
106
+ minHeight: normalizedHeight,
107
+ ...(normalizedTextareaHeights.maxHeight !== undefined && {
108
+ maxHeight: normalizedTextareaHeights.maxHeight
67
109
  })
68
110
  } : {
69
- height
111
+ height: interactiveHeight
70
112
  }],
71
- children: [leading != null ? /*#__PURE__*/_jsx(View, {
72
- children: leading
73
- }) : null, /*#__PURE__*/_jsx(TextInput, {
74
- ref: ref,
75
- ...rest,
76
- editable: isEditable,
77
- value: value,
78
- onChangeText: text => {
79
- // [M-9] 同步内部镜像,非受控场景 filled 视觉态依赖此 state
80
- setMirror(text);
81
- onChangeText?.(text);
82
- },
113
+ children: [searchLayout ? /*#__PURE__*/_jsx(View, {
114
+ pointerEvents: "none",
115
+ style: [styles.searchVisibleSurface, ...wrapStateStyles, {
116
+ top: searchLayout.verticalInset,
117
+ bottom: searchLayout.verticalInset
118
+ }]
119
+ }) : null, /*#__PURE__*/_jsx(TextFieldSlot, {
120
+ slot: leading,
121
+ effectiveEditable: effectiveEditable,
122
+ testID: childTestID(testID, 'leading')
123
+ }), /*#__PURE__*/_jsx(TextInput, {
124
+ ref: nativeRef,
125
+ ...allowedNativeProps,
126
+ value: controller.value,
127
+ onChangeText: controller.onChangeText,
128
+ editable: effectiveEditable,
83
129
  multiline: multiline,
84
- onFocus: e => {
130
+ onFocus: event => {
85
131
  setFocused(true);
86
- onFocus?.(e);
132
+ onFocus?.(event);
87
133
  },
88
- onBlur: e => {
134
+ onBlur: event => {
89
135
  setFocused(false);
90
- onBlur?.(e);
136
+ onBlur?.(event);
91
137
  },
92
- style: [styles.input, multiline && styles.inputMultiline,
93
- // multiline:wrap 上下 padding space[4]*2=20,input 内部 minHeight 减掉避免溢出
94
- multiline && {
95
- minHeight: Math.max(0, minHeight - space[4] * 2)
138
+ style: [styles.input, multiline && styles.inputMultiline, multiline && {
139
+ minHeight: Math.max(0, normalizedHeight - space[4] * 2)
140
+ }, searchLayout !== undefined && {
141
+ minHeight: searchLayout.interactiveHeight
96
142
  }],
97
- placeholderTextColor: c.foregroundSubtle
98
- // [L-31] editable=false 并入 disabled a11y state,SR 能正确播报不可编辑
99
- ,
100
- accessibilityState: isDisabledA11y ? {
101
- disabled: true
102
- } : undefined,
143
+ placeholderTextColor: callerPlaceholder ?? colors.foregroundSubtle,
144
+ accessibilityRole: accessibilityRole,
145
+ accessibilityState: mergedAccessibilityState,
103
146
  testID: childTestID(testID, 'input')
104
- }), trailing != null ? /*#__PURE__*/_jsx(View, {
105
- children: trailing
106
- }) : null]
147
+ }), /*#__PURE__*/_jsx(TextFieldSlot, {
148
+ slot: trailing,
149
+ effectiveEditable: effectiveEditable,
150
+ testID: childTestID(testID, 'trailing')
151
+ })]
107
152
  }), error ? /*#__PURE__*/_jsx(Text, {
108
153
  style: styles.errorMsg,
109
- accessibilityLiveRegion: "polite",
154
+ accessibilityLiveRegion: Platform.OS === 'android' ? 'polite' : undefined,
110
155
  testID: childTestID(testID, 'error'),
111
156
  children: error
112
157
  }) : null]
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useState","Text","TextInput","View","control","r","space","useColors","useThemedStyles","childTestID","makeStyles","jsx","_jsx","jsxs","_jsxs","TextFieldBase","multiline","height","lg","minHeight","maxHeight","leading","trailing","error","disabled","editable","containerStyle","value","onFocus","onBlur","onChangeText","testID","rest","ref","c","styles","focused","setFocused","_mirror","setMirror","filled","String","length","isEditable","isDisabledA11y","wrapStateStyles","wrapActive","wrapError","wrapFocus","wrapFilled","wrapIdle","style","containerDisabled","children","wrap","wrapMultiline","text","e","input","inputMultiline","Math","max","placeholderTextColor","foregroundSubtle","accessibilityState","undefined","errorMsg","accessibilityLiveRegion","displayName"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/TextFieldBase.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useState","Platform","Text","TextInput","View","fixed","space","useColors","useThemedStyles","childTestID","createLogger","normalizeInputHeight","normalizeTextareaHeights","sanitizeTextFieldContainerStyle","makeStyles","TextFieldSlot","useErrorAnnouncement","useTextFieldValue","jsx","_jsx","jsxs","_jsxs","log","TextFieldBase","props","forwardedRef","multiline","height","minHeight","maxHeight","searchLayout","leading","trailing","error","disabled","editable","containerStyle","value","defaultValue","onChangeText","accessibilityState","accessibilityRole","placeholderTextColor","callerPlaceholder","onFocus","onBlur","testID","style","_style","numberOfLines","_numberOfLines","_ariaDisabled","readOnly","_readOnly","role","_role","enterKeyHint","_enterKeyHint","clearTextOnFocus","_clearTextOnFocus","allowedNativeProps","removedNativeAliasKey","Object","entries","filter","entry","undefined","map","name","join","colors","styles","focused","setFocused","nativeRef","useRef","scope","controller","normalizedInputHeight","hitTarget","normalizedTextareaHeights","sanitizedContainer","effectiveEditable","mergedAccessibilityState","normalizedHeight","filled","length","diagnostics","diagnosticKey","warn","focus","current","blur","wrapStateStyles","wrapActive","wrapError","wrapFocus","wrapFilled","wrapIdle","interactiveHeight","containerDisabled","rootCentered","minWidth","children","wrap","wrapMultiline","searchInteractiveRow","pointerEvents","searchVisibleSurface","top","verticalInset","bottom","slot","ref","event","input","inputMultiline","Math","max","foregroundSubtle","errorMsg","accessibilityLiveRegion","OS","displayName"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/TextFieldBase.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAEVC,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,QAAQ,QACH,OAAO;AACd,SAASC,QAAQ,EAAEC,IAAI,EAAEC,SAAS,EAAEC,IAAI,QAAQ,cAAc;AAE9D,SAASC,KAAK,EAAEC,KAAK,EAAEC,SAAS,EAAEC,eAAe,QAAQ,yBAAgB;AACzE,SAASC,WAAW,QAAQ,gCAAuB;AACnD,SAASC,YAAY,QAAQ,gCAAuB;AACpD,SACEC,oBAAoB,EACpBC,wBAAwB,EACxBC,+BAA+B,QAC1B,gBAAa;AACpB,SAASC,UAAU,QAAQ,aAAU;AACrC,SAASC,aAAa,QAAQ,oBAAiB;AAE/C,SAASC,oBAAoB,QAAQ,2BAAwB;AAC7D,SAASC,iBAAiB,QAAQ,wBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAExD,MAAMC,GAAG,GAAGZ,YAAY,CAAC,WAAW,CAAC;;AAErC;;AAGA;AACA,OAAO,MAAMa,aAAa,gBAAG1B,UAAU,CACrC,SAAS0B,aAAaA,CAACC,KAAK,EAAEC,YAAY,EAAqB;EAC7D,MAAM;IACJC,SAAS;IACTC,MAAM;IACNC,SAAS;IACTC,SAAS;IACTC,YAAY;IACZC,OAAO;IACPC,QAAQ;IACRC,KAAK;IACLC,QAAQ;IACRC,QAAQ;IACRC,cAAc;IACdC,KAAK;IACLC,YAAY;IACZC,YAAY;IACZC,kBAAkB;IAClBC,iBAAiB;IACjBC,oBAAoB,EAAEC,iBAAiB;IACvCC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,KAAK,EAAEC,MAAM;IACbC,aAAa,EAAEC,cAAc;IAC7B,CAAC,eAAe,GAAGC,aAAa;IAChCC,QAAQ,EAAEC,SAAS;IACnBC,IAAI,EAAEC,KAAK;IACXC,YAAY,EAAEC,aAAa;IAC3BC,gBAAgB,EAAEC,iBAAiB;IACnC,GAAGC;EACL,CAAC,GAAGpC,KAAqD;EACzD,MAAMqC,qBAAqB,GAAGC,MAAM,CAACC,OAAO,CAAC;IAC3C,OAAO,EAAEf,MAAM;IACf,eAAe,EAAEE,cAAc;IAC/B,eAAe,EAAEC,aAAa;IAC9B,UAAU,EAAEE,SAAS;IACrB,MAAM,EAAEE,KAAK;IACb,cAAc,EAAEE,aAAa;IAC7B,kBAAkB,EAAEE;EACtB,CAAC,CAAC,CACCK,MAAM,CAAC,CAAC,GAAGC,KAAK,CAAC,KAAKA,KAAK,KAAKC,SAAS,CAAC,CAC1CC,GAAG,CAAC,CAAC,CAACC,IAAI,CAAC,KAAKA,IAAI,CAAC,CACrBC,IAAI,CAAC,GAAG,CAAC;EACZ,MAAMC,MAAM,GAAG/D,SAAS,CAAC,CAAC;EAC1B,MAAMgE,MAAM,GAAG/D,eAAe,CAACM,UAAU,CAAC;EAC1C,MAAM,CAAC0D,OAAO,EAAEC,UAAU,CAAC,GAAGzE,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM0E,SAAS,GAAG9E,KAAK,CAAC+E,MAAM,CAAqB,IAAI,CAAC;EACxD,MAAMC,KAAK,GAAGlD,SAAS,GAAG,UAAU,GAAG,OAAO;EAC9C,MAAMmD,UAAU,GAAG5D,iBAAiB,CAClC;IACEoB,KAAK;IACLC,YAAY;IACZC,YAAY,EACV,OAAOA,YAAY,KAAK,UAAU,GAC7BA,YAAY,GACb2B;EACR,CAAC,EACDU,KACF,CAAC;EACD,MAAME,qBAAqB,GAAGnE,oBAAoB,CAChDgB,MAAM,KAAKuC,SAAS,GAAG7D,KAAK,CAAC0E,SAAS,GAAGpD,MAC3C,CAAC;EACD,MAAMqD,yBAAyB,GAAGpE,wBAAwB,CACxDgB,SAAS,EACTC,SACF,CAAC;EACD,MAAMoD,kBAAkB,GAAGpE,+BAA+B,CAACuB,cAAc,CAAC;EAC1E,MAAM8C,iBAAiB,GAAGhD,QAAQ,KAAK,IAAI,IAAIC,QAAQ,KAAK,KAAK;EACjE,MAAMgD,wBAAwB,GAAG;IAC/B,GAAG3C,kBAAkB;IACrBN,QAAQ,EAAE,CAACgD;EACb,CAAC;EACD,MAAME,gBAAgB,GAAG1D,SAAS,GAC9BsD,yBAAyB,CAACpD,SAAS,GACnCkD,qBAAqB,CAACzC,KAAK;EAC/B,MAAMgD,MAAM,GAAGR,UAAU,CAACxC,KAAK,CAACiD,MAAM,GAAG,CAAC;EAC1C,MAAMC,WAAW,GAAG,CAClB,GAAGT,qBAAqB,CAACS,WAAW,EACpC,GAAGP,yBAAyB,CAACO,WAAW,EACxC,GAAGN,kBAAkB,CAACM,WAAW,CAClC;EACD,MAAMC,aAAa,GAAGD,WAAW,CAAClB,IAAI,CAAC,GAAG,CAAC;EAE3CvE,SAAS,CAAC,MAAM;IACd,IAAI0F,aAAa,CAACF,MAAM,GAAG,CAAC,EAAE;MAC5BhE,GAAG,CAACmE,IAAI,CAAC,GAAGb,KAAK,WAAWY,aAAa,OAAO,CAAC;IACnD;EACF,CAAC,EAAE,CAACA,aAAa,EAAEZ,KAAK,CAAC,CAAC;EAC1B9E,SAAS,CAAC,MAAM;IACd,IAAI+D,qBAAqB,CAACyB,MAAM,GAAG,CAAC,EAAE;MACpChE,GAAG,CAACmE,IAAI,CAAC,GAAGb,KAAK,mBAAmBf,qBAAqB,IAAI,CAAC;IAChE;EACF,CAAC,EAAE,CAACA,qBAAqB,EAAEe,KAAK,CAAC,CAAC;EAClC5D,oBAAoB,CAACiB,KAAK,CAAC;EAE3BlC,mBAAmB,CACjB0B,YAAY,EACZ,OAAO;IACLiE,KAAK,EAAEA,CAAA,KAAMhB,SAAS,CAACiB,OAAO,EAAED,KAAK,CAAC,CAAC;IACvCE,IAAI,EAAEA,CAAA,KAAMlB,SAAS,CAACiB,OAAO,EAAEC,IAAI,CAAC;EACtC,CAAC,CAAC,EACF,EACF,CAAC;EAED,MAAMC,eAAe,GAAG5D,KAAK,GACzB,CAACsC,MAAM,CAACuB,UAAU,EAAEvB,MAAM,CAACwB,SAAS,CAAC,GACrCvB,OAAO,GACL,CAACD,MAAM,CAACuB,UAAU,EAAEvB,MAAM,CAACyB,SAAS,CAAC,GACrCX,MAAM,GACJ,CAACd,MAAM,CAACuB,UAAU,EAAEvB,MAAM,CAAC0B,UAAU,CAAC,GACtC,CAAC1B,MAAM,CAAC2B,QAAQ,CAAC;EACzB,MAAMC,iBAAiB,GACrBrE,YAAY,EAAEqE,iBAAiB,IAAIf,gBAAgB;EAErD,oBACE/D,KAAA,CAACjB,IAAI;IACH2C,KAAK,EAAE,CACLkC,kBAAkB,CAAClC,KAAK,EACxB,CAACmC,iBAAiB,IAAIX,MAAM,CAAC6B,iBAAiB,EAC9CtE,YAAY,KAAKoC,SAAS,IAAI,CAACxC,SAAS,IAAI6C,MAAM,CAAC8B,YAAY,EAC/D;MAAEC,QAAQ,EAAEjG,KAAK,CAAC0E,SAAS;MAAEnD,SAAS,EAAEwD;IAAiB,CAAC,CAC1D;IACFtC,MAAM,EAAEA,MAAO;IAAAyD,QAAA,gBAEflF,KAAA,CAACjB,IAAI;MACH2C,KAAK,EAAE,CACLwB,MAAM,CAACiC,IAAI,EACX9E,SAAS,IAAI6C,MAAM,CAACkC,aAAa,EACjC3E,YAAY,KAAKoC,SAAS,IAAI2B,eAAe,EAC7C/D,YAAY,KAAKoC,SAAS,IAAIK,MAAM,CAACmC,oBAAoB,EACzDhF,SAAS,GACL;QACEE,SAAS,EAAEwD,gBAAgB;QAC3B,IAAIJ,yBAAyB,CAACnD,SAAS,KAAKqC,SAAS,IAAI;UACvDrC,SAAS,EAAEmD,yBAAyB,CAACnD;QACvC,CAAC;MACH,CAAC,GACD;QAAEF,MAAM,EAAEwE;MAAkB,CAAC,CACjC;MAAAI,QAAA,GAEDzE,YAAY,gBACXX,IAAA,CAACf,IAAI;QACHuG,aAAa,EAAC,MAAM;QACpB5D,KAAK,EAAE,CACLwB,MAAM,CAACqC,oBAAoB,EAC3B,GAAGf,eAAe,EAClB;UACEgB,GAAG,EAAE/E,YAAY,CAACgF,aAAa;UAC/BC,MAAM,EAAEjF,YAAY,CAACgF;QACvB,CAAC;MACD,CACH,CAAC,GACA,IAAI,eACR3F,IAAA,CAACJ,aAAa;QACZiG,IAAI,EAAEjF,OAAQ;QACdmD,iBAAiB,EAAEA,iBAAkB;QACrCpC,MAAM,EAAErC,WAAW,CAACqC,MAAM,EAAE,SAAS;MAAE,CACxC,CAAC,eACF3B,IAAA,CAAChB,SAAS;QACR8G,GAAG,EAAEvC,SAAU;QAAA,GACVd,kBAAkB;QACvBvB,KAAK,EAAEwC,UAAU,CAACxC,KAAM;QACxBE,YAAY,EAAEsC,UAAU,CAACtC,YAAa;QACtCJ,QAAQ,EAAE+C,iBAAkB;QAC5BxD,SAAS,EAAEA,SAAU;QACrBkB,OAAO,EAAGsE,KAAK,IAAK;UAClBzC,UAAU,CAAC,IAAI,CAAC;UAChB7B,OAAO,GAAGsE,KAAK,CAAC;QAClB,CAAE;QACFrE,MAAM,EAAGqE,KAAK,IAAK;UACjBzC,UAAU,CAAC,KAAK,CAAC;UACjB5B,MAAM,GAAGqE,KAAK,CAAC;QACjB,CAAE;QACFnE,KAAK,EAAE,CACLwB,MAAM,CAAC4C,KAAK,EACZzF,SAAS,IAAI6C,MAAM,CAAC6C,cAAc,EAClC1F,SAAS,IAAI;UACXE,SAAS,EAAEyF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAElC,gBAAgB,GAAG9E,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,CAAC,EACDwB,YAAY,KAAKoC,SAAS,IAAI;UAC5BtC,SAAS,EAAEE,YAAY,CAACqE;QAC1B,CAAC,CACD;QACFzD,oBAAoB,EAAEC,iBAAiB,IAAI2B,MAAM,CAACiD,gBAAiB;QACnE9E,iBAAiB,EAAEA,iBAAkB;QACrCD,kBAAkB,EAAE2C,wBAAyB;QAC7CrC,MAAM,EAAErC,WAAW,CAACqC,MAAM,EAAE,OAAO;MAAE,CACtC,CAAC,eACF3B,IAAA,CAACJ,aAAa;QACZiG,IAAI,EAAEhF,QAAS;QACfkD,iBAAiB,EAAEA,iBAAkB;QACrCpC,MAAM,EAAErC,WAAW,CAACqC,MAAM,EAAE,UAAU;MAAE,CACzC,CAAC;IAAA,CACE,CAAC,EACNb,KAAK,gBACJd,IAAA,CAACjB,IAAI;MACH6C,KAAK,EAAEwB,MAAM,CAACiD,QAAS;MACvBC,uBAAuB,EACrBxH,QAAQ,CAACyH,EAAE,KAAK,SAAS,GAAG,QAAQ,GAAGxD,SACxC;MACDpB,MAAM,EAAErC,WAAW,CAACqC,MAAM,EAAE,OAAO,CAAE;MAAAyD,QAAA,EAEpCtE;IAAK,CACF,CAAC,GACL,IAAI;EAAA,CACJ,CAAC;AAEX,CACF,CAAC;AAEDV,aAAa,CAACoG,WAAW,GAAG,eAAe","ignoreList":[]}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ import { useEffect } from 'react';
4
+ import { Text, View } from 'react-native';
5
+ import { Pressable } from 'react-native-gesture-handler';
6
+ import { useColors, useThemedStyles } from "../../../theme/index.js";
7
+ import { createLogger } from "../../../utils/logger/index.js";
8
+ import { A11Y_HIDDEN_PROPS } from "../shared/a11y.js";
9
+ import { Icon } from "../Icon/index.js";
10
+ import { normalizeSlotIconSize, normalizeTextFieldSlot } from "./normalize.js";
11
+ import { makeStyles } from "./styles.js";
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ const log = createLogger('TextFieldSlot');
14
+ /**
15
+ * 受控 slot renderer。展示内容与真实操作在这里分叉,避免未知 ReactNode 绕过
16
+ * 44pt action frame 或可访问名称约束。
17
+ */
18
+ export function TextFieldSlot({
19
+ slot,
20
+ effectiveEditable,
21
+ testID
22
+ }) {
23
+ const colors = useColors();
24
+ const styles = useThemedStyles(makeStyles);
25
+ const normalizedSlot = normalizeTextFieldSlot(slot);
26
+ const safeSlot = normalizedSlot.slot;
27
+ const iconSize = safeSlot?.kind === 'icon' ? normalizeSlotIconSize(safeSlot.size) : undefined;
28
+ const iconDiagnosticKey = iconSize?.diagnostics.join(',') ?? '';
29
+ const slotDiagnosticKey = normalizedSlot.diagnostics.join(',');
30
+ useEffect(() => {
31
+ if (iconDiagnosticKey.length > 0) {
32
+ log.warn('slot.icon.size 非法,已回退为 18。');
33
+ }
34
+ }, [iconDiagnosticKey]);
35
+ useEffect(() => {
36
+ if (slotDiagnosticKey.length > 0) {
37
+ log.warn(`非法 TextField slot(${slotDiagnosticKey})已移除。`);
38
+ }
39
+ }, [slotDiagnosticKey]);
40
+ if (!safeSlot) return null;
41
+ switch (safeSlot.kind) {
42
+ case 'icon':
43
+ return /*#__PURE__*/_jsx(View, {
44
+ ...A11Y_HIDDEN_PROPS,
45
+ style: styles.slotDisplay,
46
+ testID: testID,
47
+ children: /*#__PURE__*/_jsx(Icon, {
48
+ name: safeSlot.icon,
49
+ size: iconSize?.value ?? 18,
50
+ color: safeSlot.color ?? colors.foregroundMuted
51
+ })
52
+ });
53
+ case 'text':
54
+ return /*#__PURE__*/_jsx(Text, {
55
+ ...A11Y_HIDDEN_PROPS,
56
+ style: [styles.slotDisplay, styles.slotText],
57
+ testID: testID,
58
+ children: safeSlot.value
59
+ });
60
+ case 'action':
61
+ {
62
+ const disabled = !effectiveEditable || safeSlot.disabled === true;
63
+ return /*#__PURE__*/_jsx(Pressable, {
64
+ onPress: disabled ? undefined : safeSlot.onPress,
65
+ disabled: disabled,
66
+ accessibilityRole: "button",
67
+ accessibilityLabel: safeSlot.accessibilityLabel,
68
+ accessibilityState: {
69
+ disabled
70
+ },
71
+ style: styles.actionFrame,
72
+ testID: testID,
73
+ children: /*#__PURE__*/_jsx(Icon, {
74
+ name: safeSlot.icon,
75
+ size: 18,
76
+ color: colors.foregroundMuted
77
+ })
78
+ });
79
+ }
80
+ }
81
+ }
82
+ //# sourceMappingURL=TextFieldSlot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","Text","View","Pressable","useColors","useThemedStyles","createLogger","A11Y_HIDDEN_PROPS","Icon","normalizeSlotIconSize","normalizeTextFieldSlot","makeStyles","jsx","_jsx","log","TextFieldSlot","slot","effectiveEditable","testID","colors","styles","normalizedSlot","safeSlot","iconSize","kind","size","undefined","iconDiagnosticKey","diagnostics","join","slotDiagnosticKey","length","warn","style","slotDisplay","children","name","icon","value","color","foregroundMuted","slotText","disabled","onPress","accessibilityRole","accessibilityLabel","accessibilityState","actionFrame"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/TextFieldSlot.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet } from 'react-native';
4
+ import { fixed } from "../../../theme/index.js";
5
+ import { ICONS } from "../../../icons/index.js";
6
+ import { normalizeNonBlankText } from "../shared/accessibilityName.js";
7
+ /**
8
+ * TextField 家族的**纯布局归一化** —— 无 React 依赖,可直接单测。
9
+ *
10
+ * 纪律与 Pulse 一致:非法值**整体回退默认值并记诊断**,不做 clamp、不做取整。
11
+ * 悄悄把 `height: 20` 夹成 44 会让调用方永远发现不了自己传了一个碰不到的输入框。
12
+ */
13
+
14
+ /** slot 图标的默认与合法上界。18 是 body 字号下视觉平衡的取值;>32 会撑破 44pt frame。 */
15
+ const DEFAULT_SLOT_ICON_SIZE = 18;
16
+ const MAX_SLOT_ICON_SIZE = 32;
17
+ /** Textarea 默认最小高度(约 5 行)。 */
18
+ const DEFAULT_TEXTAREA_MIN_HEIGHT = 96;
19
+ const DEFAULT_SEARCH_VISIBLE_HEIGHT = 36;
20
+
21
+ /** 这六个字段会破坏 TextField 自持的最小命中框,一律从 containerStyle 剥离。 */
22
+ const RESERVED_CONTAINER_KEYS = ['height', 'minHeight', 'maxHeight', 'minWidth', 'maxWidth', 'overflow'];
23
+ const isFiniteAtLeast = (value, min) => typeof value === 'number' && Number.isFinite(value) && value >= min;
24
+ const isFiniteWithin = (value, min, max) => typeof value === 'number' && Number.isFinite(value) && value >= min && value <= max;
25
+ /** 单行高度 —— 不得低于 `fixed.hitTarget`(44pt),否则整行都碰不满一个手指。 */
26
+ export function normalizeInputHeight(value) {
27
+ return isFiniteAtLeast(value, fixed.hitTarget) ? {
28
+ value,
29
+ diagnostics: []
30
+ } : {
31
+ value: fixed.hitTarget,
32
+ diagnostics: ['height']
33
+ };
34
+ }
35
+ /** 多行高度 —— `maxHeight` 只有在有限且不小于归一化后的 `minHeight` 时才保留。 */
36
+ export function normalizeTextareaHeights(minHeight, maxHeight) {
37
+ const diagnostics = [];
38
+ let safeMin;
39
+ if (minHeight === undefined) {
40
+ safeMin = DEFAULT_TEXTAREA_MIN_HEIGHT;
41
+ } else if (isFiniteAtLeast(minHeight, fixed.hitTarget)) {
42
+ safeMin = minHeight;
43
+ } else {
44
+ safeMin = DEFAULT_TEXTAREA_MIN_HEIGHT;
45
+ diagnostics.push('minHeight');
46
+ }
47
+ if (maxHeight === undefined) {
48
+ return {
49
+ minHeight: safeMin,
50
+ maxHeight: undefined,
51
+ diagnostics
52
+ };
53
+ }
54
+ // 注意用**归一化后**的 min 比较:min 被回退时 max 必须跟着重新判定,
55
+ // 否则会留下一个比实际 min 还小的 max,直接把内容压没。
56
+ if (isFiniteAtLeast(maxHeight, safeMin)) {
57
+ return {
58
+ minHeight: safeMin,
59
+ maxHeight,
60
+ diagnostics
61
+ };
62
+ }
63
+ diagnostics.push('maxHeight');
64
+ return {
65
+ minHeight: safeMin,
66
+ maxHeight: undefined,
67
+ diagnostics
68
+ };
69
+ }
70
+
71
+ /** slot 图标尺寸 —— 只接受有限的 `[1, 32]`。 */
72
+ export function normalizeSlotIconSize(value) {
73
+ return isFiniteWithin(value, 1, MAX_SLOT_ICON_SIZE) ? {
74
+ value,
75
+ diagnostics: []
76
+ } : {
77
+ value: DEFAULT_SLOT_ICON_SIZE,
78
+ diagnostics: ['slot.size']
79
+ };
80
+ }
81
+ function isIconName(value) {
82
+ return typeof value === 'string' && Object.prototype.hasOwnProperty.call(ICONS, value);
83
+ }
84
+
85
+ /** 未类型化 JS 必须完整匹配一个受支持分支,不能靠 discriminant 后 cast 绕过校验。 */
86
+ export function normalizeTextFieldSlot(slot) {
87
+ if (slot === undefined) {
88
+ return {
89
+ slot: undefined,
90
+ diagnostics: []
91
+ };
92
+ }
93
+ if (typeof slot !== 'object' || slot === null) {
94
+ return {
95
+ slot: undefined,
96
+ diagnostics: ['slot']
97
+ };
98
+ }
99
+ const candidate = slot;
100
+ switch (candidate.kind) {
101
+ case 'icon':
102
+ {
103
+ const size = typeof candidate.size === 'number' && Number.isFinite(candidate.size) ? candidate.size : undefined;
104
+ const color = typeof candidate.color === 'string' ? candidate.color : undefined;
105
+ const hasValidSize = candidate.size === undefined || size !== undefined;
106
+ const hasValidColor = candidate.color === undefined || color !== undefined;
107
+ if (!isIconName(candidate.icon) || !hasValidSize || !hasValidColor) {
108
+ return {
109
+ slot: undefined,
110
+ diagnostics: ['slot.icon']
111
+ };
112
+ }
113
+ return {
114
+ slot: {
115
+ kind: 'icon',
116
+ icon: candidate.icon,
117
+ ...(size !== undefined && {
118
+ size
119
+ }),
120
+ ...(color !== undefined && {
121
+ color
122
+ })
123
+ },
124
+ diagnostics: []
125
+ };
126
+ }
127
+ case 'text':
128
+ if (typeof candidate.value !== 'string' && typeof candidate.value !== 'number') {
129
+ return {
130
+ slot: undefined,
131
+ diagnostics: ['slot.text']
132
+ };
133
+ }
134
+ return {
135
+ slot: {
136
+ kind: 'text',
137
+ value: candidate.value
138
+ },
139
+ diagnostics: []
140
+ };
141
+ case 'action':
142
+ {
143
+ const accessibilityLabel = normalizeNonBlankText(candidate.accessibilityLabel);
144
+ const hasValidDisabled = candidate.disabled === undefined || typeof candidate.disabled === 'boolean';
145
+ const slotDisabled = typeof candidate.disabled === 'boolean' ? candidate.disabled : undefined;
146
+ if (!isIconName(candidate.icon) || typeof candidate.onPress !== 'function' || accessibilityLabel === undefined || !hasValidDisabled) {
147
+ return {
148
+ slot: undefined,
149
+ diagnostics: ['slot.action']
150
+ };
151
+ }
152
+ return {
153
+ slot: {
154
+ kind: 'action',
155
+ icon: candidate.icon,
156
+ onPress: candidate.onPress,
157
+ accessibilityLabel,
158
+ ...(slotDisabled !== undefined && {
159
+ disabled: slotDisabled
160
+ })
161
+ },
162
+ diagnostics: []
163
+ };
164
+ }
165
+ default:
166
+ return {
167
+ slot: undefined,
168
+ diagnostics: ['slot.kind']
169
+ };
170
+ }
171
+ }
172
+ /** 搜索框的可见面可为 36pt,但承载输入/操作的实际行永远不得小于 44pt。 */
173
+ export function normalizeSearchLayout(interactiveHeight, visibleHeight) {
174
+ const diagnostics = [];
175
+ const safeInteractive = isFiniteAtLeast(interactiveHeight, fixed.hitTarget) ? interactiveHeight : fixed.hitTarget;
176
+ if (safeInteractive !== interactiveHeight) {
177
+ diagnostics.push('interactiveHeight');
178
+ }
179
+ const safeVisible = typeof visibleHeight === 'number' && Number.isFinite(visibleHeight) && visibleHeight > 0 && visibleHeight <= safeInteractive ? visibleHeight : DEFAULT_SEARCH_VISIBLE_HEIGHT;
180
+ if (safeVisible !== visibleHeight) {
181
+ diagnostics.push('visibleHeight');
182
+ }
183
+ return {
184
+ interactiveHeight: safeInteractive,
185
+ visibleHeight: safeVisible,
186
+ verticalInset: (safeInteractive - safeVisible) / 2,
187
+ diagnostics
188
+ };
189
+ }
190
+ /**
191
+ * 公开 Input / Textarea 不允许未类型化 JS 覆盖内部 layout 开关。
192
+ *
193
+ * 返回新对象而不是 delete 原 props,既不改变调用方对象,也让 wrapper 能在安全 spread
194
+ * 后由可信边界写入自己的 `multiline`。
195
+ */
196
+ export function sanitizeTextFieldWrapperProps(props) {
197
+ const {
198
+ multiline,
199
+ searchLayout,
200
+ ...safeProps
201
+ } = props;
202
+ const diagnostics = [];
203
+ if (multiline !== undefined) {
204
+ diagnostics.push('multiline');
205
+ }
206
+ if (searchLayout !== undefined) {
207
+ diagnostics.push('searchLayout');
208
+ }
209
+ return {
210
+ props: safeProps,
211
+ diagnostics
212
+ };
213
+ }
214
+
215
+ /**
216
+ * 剥掉 containerStyle 里会覆盖最小 frame 的六个字段。
217
+ *
218
+ * 先 `StyleSheet.flatten` 再解构到新对象 —— 绝不原地修改调用方对象或已注册的
219
+ * StyleSheet 条目(那会污染同一 sheet 的其他使用者)。
220
+ */
221
+ export function sanitizeTextFieldContainerStyle(style) {
222
+ const flattened = StyleSheet.flatten(style) ?? {};
223
+ const reserved = RESERVED_CONTAINER_KEYS;
224
+ const sanitized = {};
225
+ const diagnostics = [];
226
+ for (const [key, entry] of Object.entries(flattened)) {
227
+ if (reserved.includes(key)) {
228
+ diagnostics.push(key);
229
+ continue;
230
+ }
231
+ sanitized[key] = entry;
232
+ }
233
+ return {
234
+ style: sanitized,
235
+ diagnostics
236
+ };
237
+ }
238
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","fixed","ICONS","normalizeNonBlankText","DEFAULT_SLOT_ICON_SIZE","MAX_SLOT_ICON_SIZE","DEFAULT_TEXTAREA_MIN_HEIGHT","DEFAULT_SEARCH_VISIBLE_HEIGHT","RESERVED_CONTAINER_KEYS","isFiniteAtLeast","value","min","Number","isFinite","isFiniteWithin","max","normalizeInputHeight","hitTarget","diagnostics","normalizeTextareaHeights","minHeight","maxHeight","safeMin","undefined","push","normalizeSlotIconSize","isIconName","Object","prototype","hasOwnProperty","call","normalizeTextFieldSlot","slot","candidate","kind","size","color","hasValidSize","hasValidColor","icon","accessibilityLabel","hasValidDisabled","disabled","slotDisabled","onPress","normalizeSearchLayout","interactiveHeight","visibleHeight","safeInteractive","safeVisible","verticalInset","sanitizeTextFieldWrapperProps","props","multiline","searchLayout","safeProps","sanitizeTextFieldContainerStyle","style","flattened","flatten","reserved","sanitized","key","entry","entries","includes"],"sourceRoot":"../../../../../src","sources":["components/ui/TextField/normalize.ts"],"mappings":"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","ignoreList":[]}