@coze-arch/cli 0.0.10 → 0.0.11

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 (437) hide show
  1. package/lib/__templates__/expo/AGENTS.md +3 -3
  2. package/lib/__templates__/expo/README.md +3 -3
  3. package/lib/__templates__/expo/client/components/Provider.tsx +4 -1
  4. package/lib/__templates__/expo/client/components/Screen.tsx +4 -1
  5. package/lib/__templates__/expo/client/eslint.config.mjs +2 -0
  6. package/lib/__templates__/expo/client/global.css +1 -0
  7. package/lib/__templates__/expo/client/heroui/components/accordion/accordion.animation.ts +178 -0
  8. package/lib/__templates__/expo/client/heroui/components/accordion/accordion.constants.ts +62 -0
  9. package/lib/__templates__/expo/client/heroui/components/accordion/accordion.md +437 -0
  10. package/lib/__templates__/expo/client/heroui/components/accordion/accordion.styles.ts +95 -0
  11. package/lib/__templates__/expo/client/heroui/components/accordion/accordion.tsx +340 -0
  12. package/lib/__templates__/expo/client/heroui/components/accordion/accordion.types.ts +267 -0
  13. package/lib/__templates__/expo/client/heroui/components/accordion/index.ts +17 -0
  14. package/lib/__templates__/expo/client/heroui/components/alert/alert.constants.ts +13 -0
  15. package/lib/__templates__/expo/client/heroui/components/alert/alert.hooks.ts +28 -0
  16. package/lib/__templates__/expo/client/heroui/components/alert/alert.md +263 -0
  17. package/lib/__templates__/expo/client/heroui/components/alert/alert.styles.ts +65 -0
  18. package/lib/__templates__/expo/client/heroui/components/alert/alert.tsx +181 -0
  19. package/lib/__templates__/expo/client/heroui/components/alert/alert.types.ts +99 -0
  20. package/lib/__templates__/expo/client/heroui/components/alert/alert.utils.tsx +25 -0
  21. package/lib/__templates__/expo/client/heroui/components/alert/default-icon.tsx +28 -0
  22. package/lib/__templates__/expo/client/heroui/components/alert/index.ts +15 -0
  23. package/lib/__templates__/expo/client/heroui/components/alert/success-icon.tsx +28 -0
  24. package/lib/__templates__/expo/client/heroui/components/alert/warning-icon.tsx +28 -0
  25. package/lib/__templates__/expo/client/heroui/components/avatar/avatar.animation.ts +123 -0
  26. package/lib/__templates__/expo/client/heroui/components/avatar/avatar.constants.ts +19 -0
  27. package/lib/__templates__/expo/client/heroui/components/avatar/avatar.context.ts +11 -0
  28. package/lib/__templates__/expo/client/heroui/components/avatar/avatar.md +386 -0
  29. package/lib/__templates__/expo/client/heroui/components/avatar/avatar.styles.ts +145 -0
  30. package/lib/__templates__/expo/client/heroui/components/avatar/avatar.tsx +307 -0
  31. package/lib/__templates__/expo/client/heroui/components/avatar/avatar.types.ts +239 -0
  32. package/lib/__templates__/expo/client/heroui/components/avatar/index.ts +13 -0
  33. package/lib/__templates__/expo/client/heroui/components/avatar/person-icon.tsx +23 -0
  34. package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.animation.ts +42 -0
  35. package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.constants.ts +13 -0
  36. package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.md +349 -0
  37. package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.styles.ts +66 -0
  38. package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.tsx +351 -0
  39. package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.types.ts +150 -0
  40. package/lib/__templates__/expo/client/heroui/components/bottom-sheet/index.ts +16 -0
  41. package/lib/__templates__/expo/client/heroui/components/button/button.constants.ts +7 -0
  42. package/lib/__templates__/expo/client/heroui/components/button/button.md +381 -0
  43. package/lib/__templates__/expo/client/heroui/components/button/button.styles.ts +89 -0
  44. package/lib/__templates__/expo/client/heroui/components/button/button.tsx +284 -0
  45. package/lib/__templates__/expo/client/heroui/components/button/button.types.ts +175 -0
  46. package/lib/__templates__/expo/client/heroui/components/button/button.utils.ts +34 -0
  47. package/lib/__templates__/expo/client/heroui/components/button/index.ts +9 -0
  48. package/lib/__templates__/expo/client/heroui/components/card/card.constants.ts +11 -0
  49. package/lib/__templates__/expo/client/heroui/components/card/card.md +186 -0
  50. package/lib/__templates__/expo/client/heroui/components/card/card.styles.ts +35 -0
  51. package/lib/__templates__/expo/client/heroui/components/card/card.tsx +153 -0
  52. package/lib/__templates__/expo/client/heroui/components/card/card.types.ts +77 -0
  53. package/lib/__templates__/expo/client/heroui/components/card/index.ts +10 -0
  54. package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.animation.ts +202 -0
  55. package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.constants.ts +6 -0
  56. package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.md +311 -0
  57. package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.styles.ts +105 -0
  58. package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.tsx +251 -0
  59. package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.types.ts +216 -0
  60. package/lib/__templates__/expo/client/heroui/components/checkbox/index.ts +3 -0
  61. package/lib/__templates__/expo/client/heroui/components/chip/chip.animation.ts +18 -0
  62. package/lib/__templates__/expo/client/heroui/components/chip/chip.constants.ts +7 -0
  63. package/lib/__templates__/expo/client/heroui/components/chip/chip.md +190 -0
  64. package/lib/__templates__/expo/client/heroui/components/chip/chip.styles.ts +234 -0
  65. package/lib/__templates__/expo/client/heroui/components/chip/chip.tsx +125 -0
  66. package/lib/__templates__/expo/client/heroui/components/chip/chip.types.ts +69 -0
  67. package/lib/__templates__/expo/client/heroui/components/chip/index.ts +3 -0
  68. package/lib/__templates__/expo/client/heroui/components/close-button/close-button.constants.ts +6 -0
  69. package/lib/__templates__/expo/client/heroui/components/close-button/close-button.md +109 -0
  70. package/lib/__templates__/expo/client/heroui/components/close-button/close-button.styles.ts +13 -0
  71. package/lib/__templates__/expo/client/heroui/components/close-button/close-button.tsx +57 -0
  72. package/lib/__templates__/expo/client/heroui/components/close-button/close-button.types.ts +30 -0
  73. package/lib/__templates__/expo/client/heroui/components/close-button/index.ts +6 -0
  74. package/lib/__templates__/expo/client/heroui/components/control-field/control-field.animation.ts +18 -0
  75. package/lib/__templates__/expo/client/heroui/components/control-field/control-field.constants.ts +7 -0
  76. package/lib/__templates__/expo/client/heroui/components/control-field/control-field.context.ts +14 -0
  77. package/lib/__templates__/expo/client/heroui/components/control-field/control-field.md +241 -0
  78. package/lib/__templates__/expo/client/heroui/components/control-field/control-field.styles.ts +15 -0
  79. package/lib/__templates__/expo/client/heroui/components/control-field/control-field.tsx +245 -0
  80. package/lib/__templates__/expo/client/heroui/components/control-field/control-field.types.ts +67 -0
  81. package/lib/__templates__/expo/client/heroui/components/control-field/index.ts +6 -0
  82. package/lib/__templates__/expo/client/heroui/components/description/description.animation.ts +53 -0
  83. package/lib/__templates__/expo/client/heroui/components/description/description.constants.ts +30 -0
  84. package/lib/__templates__/expo/client/heroui/components/description/description.md +129 -0
  85. package/lib/__templates__/expo/client/heroui/components/description/description.styles.ts +25 -0
  86. package/lib/__templates__/expo/client/heroui/components/description/description.tsx +81 -0
  87. package/lib/__templates__/expo/client/heroui/components/description/description.types.ts +77 -0
  88. package/lib/__templates__/expo/client/heroui/components/description/index.ts +3 -0
  89. package/lib/__templates__/expo/client/heroui/components/dialog/dialog.animation.ts +9 -0
  90. package/lib/__templates__/expo/client/heroui/components/dialog/dialog.constants.ts +13 -0
  91. package/lib/__templates__/expo/client/heroui/components/dialog/dialog.md +288 -0
  92. package/lib/__templates__/expo/client/heroui/components/dialog/dialog.styles.ts +77 -0
  93. package/lib/__templates__/expo/client/heroui/components/dialog/dialog.tsx +379 -0
  94. package/lib/__templates__/expo/client/heroui/components/dialog/dialog.types.ts +199 -0
  95. package/lib/__templates__/expo/client/heroui/components/dialog/index.ts +12 -0
  96. package/lib/__templates__/expo/client/heroui/components/field-error/field-error.animation.ts +50 -0
  97. package/lib/__templates__/expo/client/heroui/components/field-error/field-error.constants.ts +31 -0
  98. package/lib/__templates__/expo/client/heroui/components/field-error/field-error.md +204 -0
  99. package/lib/__templates__/expo/client/heroui/components/field-error/field-error.styles.ts +23 -0
  100. package/lib/__templates__/expo/client/heroui/components/field-error/field-error.tsx +91 -0
  101. package/lib/__templates__/expo/client/heroui/components/field-error/field-error.types.ts +79 -0
  102. package/lib/__templates__/expo/client/heroui/components/field-error/index.ts +3 -0
  103. package/lib/__templates__/expo/client/heroui/components/input/index.ts +3 -0
  104. package/lib/__templates__/expo/client/heroui/components/input/input.constants.ts +6 -0
  105. package/lib/__templates__/expo/client/heroui/components/input/input.md +193 -0
  106. package/lib/__templates__/expo/client/heroui/components/input/input.styles.ts +51 -0
  107. package/lib/__templates__/expo/client/heroui/components/input/input.tsx +96 -0
  108. package/lib/__templates__/expo/client/heroui/components/input/input.types.ts +44 -0
  109. package/lib/__templates__/expo/client/heroui/components/input-group/index.ts +9 -0
  110. package/lib/__templates__/expo/client/heroui/components/input-group/input-group.animation.ts +14 -0
  111. package/lib/__templates__/expo/client/heroui/components/input-group/input-group.constants.ts +6 -0
  112. package/lib/__templates__/expo/client/heroui/components/input-group/input-group.md +197 -0
  113. package/lib/__templates__/expo/client/heroui/components/input-group/input-group.styles.ts +31 -0
  114. package/lib/__templates__/expo/client/heroui/components/input-group/input-group.tsx +239 -0
  115. package/lib/__templates__/expo/client/heroui/components/input-group/input-group.types.ts +98 -0
  116. package/lib/__templates__/expo/client/heroui/components/input-otp/index.ts +9 -0
  117. package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.animation.ts +199 -0
  118. package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.constants.ts +12 -0
  119. package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.md +376 -0
  120. package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.styles.ts +68 -0
  121. package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.tsx +414 -0
  122. package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.types.ts +275 -0
  123. package/lib/__templates__/expo/client/heroui/components/label/index.ts +3 -0
  124. package/lib/__templates__/expo/client/heroui/components/label/label.animation.ts +18 -0
  125. package/lib/__templates__/expo/client/heroui/components/label/label.constants.ts +7 -0
  126. package/lib/__templates__/expo/client/heroui/components/label/label.md +187 -0
  127. package/lib/__templates__/expo/client/heroui/components/label/label.styles.ts +44 -0
  128. package/lib/__templates__/expo/client/heroui/components/label/label.tsx +172 -0
  129. package/lib/__templates__/expo/client/heroui/components/label/label.types.ts +86 -0
  130. package/lib/__templates__/expo/client/heroui/components/list-group/index.ts +17 -0
  131. package/lib/__templates__/expo/client/heroui/components/list-group/list-group.constants.ts +17 -0
  132. package/lib/__templates__/expo/client/heroui/components/list-group/list-group.md +387 -0
  133. package/lib/__templates__/expo/client/heroui/components/list-group/list-group.styles.ts +40 -0
  134. package/lib/__templates__/expo/client/heroui/components/list-group/list-group.tsx +206 -0
  135. package/lib/__templates__/expo/client/heroui/components/list-group/list-group.types.ts +132 -0
  136. package/lib/__templates__/expo/client/heroui/components/menu/index.ts +38 -0
  137. package/lib/__templates__/expo/client/heroui/components/menu/menu.animation.ts +121 -0
  138. package/lib/__templates__/expo/client/heroui/components/menu/menu.constants.ts +37 -0
  139. package/lib/__templates__/expo/client/heroui/components/menu/menu.md +620 -0
  140. package/lib/__templates__/expo/client/heroui/components/menu/menu.styles.ts +107 -0
  141. package/lib/__templates__/expo/client/heroui/components/menu/menu.tsx +664 -0
  142. package/lib/__templates__/expo/client/heroui/components/menu/menu.types.ts +394 -0
  143. package/lib/__templates__/expo/client/heroui/components/popover/arrow-svg.tsx +180 -0
  144. package/lib/__templates__/expo/client/heroui/components/popover/index.ts +18 -0
  145. package/lib/__templates__/expo/client/heroui/components/popover/popover.animation.ts +9 -0
  146. package/lib/__templates__/expo/client/heroui/components/popover/popover.constants.ts +34 -0
  147. package/lib/__templates__/expo/client/heroui/components/popover/popover.md +508 -0
  148. package/lib/__templates__/expo/client/heroui/components/popover/popover.styles.ts +98 -0
  149. package/lib/__templates__/expo/client/heroui/components/popover/popover.tsx +624 -0
  150. package/lib/__templates__/expo/client/heroui/components/popover/popover.types.ts +290 -0
  151. package/lib/__templates__/expo/client/heroui/components/pressable-feedback/index.ts +3 -0
  152. package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.animation.ts +450 -0
  153. package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.constants.ts +12 -0
  154. package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.md +328 -0
  155. package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.styles.ts +84 -0
  156. package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.tsx +330 -0
  157. package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.types.ts +386 -0
  158. package/lib/__templates__/expo/client/heroui/components/radio/index.ts +9 -0
  159. package/lib/__templates__/expo/client/heroui/components/radio/radio.animation.ts +92 -0
  160. package/lib/__templates__/expo/client/heroui/components/radio/radio.constants.ts +11 -0
  161. package/lib/__templates__/expo/client/heroui/components/radio/radio.md +339 -0
  162. package/lib/__templates__/expo/client/heroui/components/radio/radio.styles.ts +80 -0
  163. package/lib/__templates__/expo/client/heroui/components/radio/radio.tsx +217 -0
  164. package/lib/__templates__/expo/client/heroui/components/radio/radio.types.ts +106 -0
  165. package/lib/__templates__/expo/client/heroui/components/radio-group/index.ts +9 -0
  166. package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.animation.ts +20 -0
  167. package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.constants.ts +7 -0
  168. package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.context.ts +14 -0
  169. package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.md +273 -0
  170. package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.styles.ts +15 -0
  171. package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.tsx +220 -0
  172. package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.types.ts +64 -0
  173. package/lib/__templates__/expo/client/heroui/components/scroll-shadow/index.ts +7 -0
  174. package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.animation.ts +132 -0
  175. package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.constants.ts +21 -0
  176. package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.md +206 -0
  177. package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.styles.ts +52 -0
  178. package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.tsx +262 -0
  179. package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.types.ts +121 -0
  180. package/lib/__templates__/expo/client/heroui/components/search-field/index.ts +17 -0
  181. package/lib/__templates__/expo/client/heroui/components/search-field/search-field.animation.ts +18 -0
  182. package/lib/__templates__/expo/client/heroui/components/search-field/search-field.constants.ts +10 -0
  183. package/lib/__templates__/expo/client/heroui/components/search-field/search-field.md +231 -0
  184. package/lib/__templates__/expo/client/heroui/components/search-field/search-field.styles.ts +35 -0
  185. package/lib/__templates__/expo/client/heroui/components/search-field/search-field.tsx +253 -0
  186. package/lib/__templates__/expo/client/heroui/components/search-field/search-field.types.ts +160 -0
  187. package/lib/__templates__/expo/client/heroui/components/search-field/search-icon.tsx +37 -0
  188. package/lib/__templates__/expo/client/heroui/components/select/index.ts +28 -0
  189. package/lib/__templates__/expo/client/heroui/components/select/select.animation.ts +92 -0
  190. package/lib/__templates__/expo/client/heroui/components/select/select.constants.ts +53 -0
  191. package/lib/__templates__/expo/client/heroui/components/select/select.md +796 -0
  192. package/lib/__templates__/expo/client/heroui/components/select/select.styles.ts +149 -0
  193. package/lib/__templates__/expo/client/heroui/components/select/select.tsx +828 -0
  194. package/lib/__templates__/expo/client/heroui/components/select/select.types.ts +438 -0
  195. package/lib/__templates__/expo/client/heroui/components/separator/index.ts +7 -0
  196. package/lib/__templates__/expo/client/heroui/components/separator/separator.constants.ts +6 -0
  197. package/lib/__templates__/expo/client/heroui/components/separator/separator.md +106 -0
  198. package/lib/__templates__/expo/client/heroui/components/separator/separator.styles.ts +50 -0
  199. package/lib/__templates__/expo/client/heroui/components/separator/separator.tsx +62 -0
  200. package/lib/__templates__/expo/client/heroui/components/separator/separator.types.ts +40 -0
  201. package/lib/__templates__/expo/client/heroui/components/skeleton/index.ts +7 -0
  202. package/lib/__templates__/expo/client/heroui/components/skeleton/linear-gradient.tsx +45 -0
  203. package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.animation.ts +351 -0
  204. package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.constants.ts +39 -0
  205. package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.md +208 -0
  206. package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.styles.ts +49 -0
  207. package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.tsx +183 -0
  208. package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.types.ts +191 -0
  209. package/lib/__templates__/expo/client/heroui/components/skeleton-group/index.ts +7 -0
  210. package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.constants.ts +7 -0
  211. package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.md +247 -0
  212. package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.styles.ts +10 -0
  213. package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.tsx +94 -0
  214. package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.types.ts +28 -0
  215. package/lib/__templates__/expo/client/heroui/components/slider/index.ts +23 -0
  216. package/lib/__templates__/expo/client/heroui/components/slider/slider.animation.ts +87 -0
  217. package/lib/__templates__/expo/client/heroui/components/slider/slider.constants.ts +24 -0
  218. package/lib/__templates__/expo/client/heroui/components/slider/slider.md +348 -0
  219. package/lib/__templates__/expo/client/heroui/components/slider/slider.styles.ts +85 -0
  220. package/lib/__templates__/expo/client/heroui/components/slider/slider.tsx +413 -0
  221. package/lib/__templates__/expo/client/heroui/components/slider/slider.types.ts +120 -0
  222. package/lib/__templates__/expo/client/heroui/components/spinner/index.ts +10 -0
  223. package/lib/__templates__/expo/client/heroui/components/spinner/spinner-icon.tsx +49 -0
  224. package/lib/__templates__/expo/client/heroui/components/spinner/spinner.animation.ts +150 -0
  225. package/lib/__templates__/expo/client/heroui/components/spinner/spinner.constants.ts +36 -0
  226. package/lib/__templates__/expo/client/heroui/components/spinner/spinner.md +199 -0
  227. package/lib/__templates__/expo/client/heroui/components/spinner/spinner.styles.ts +44 -0
  228. package/lib/__templates__/expo/client/heroui/components/spinner/spinner.tsx +198 -0
  229. package/lib/__templates__/expo/client/heroui/components/spinner/spinner.types.ts +158 -0
  230. package/lib/__templates__/expo/client/heroui/components/surface/index.ts +3 -0
  231. package/lib/__templates__/expo/client/heroui/components/surface/surface.animation.ts +18 -0
  232. package/lib/__templates__/expo/client/heroui/components/surface/surface.constants.ts +6 -0
  233. package/lib/__templates__/expo/client/heroui/components/surface/surface.md +136 -0
  234. package/lib/__templates__/expo/client/heroui/components/surface/surface.styles.ts +28 -0
  235. package/lib/__templates__/expo/client/heroui/components/surface/surface.tsx +66 -0
  236. package/lib/__templates__/expo/client/heroui/components/surface/surface.types.ts +46 -0
  237. package/lib/__templates__/expo/client/heroui/components/switch/index.ts +3 -0
  238. package/lib/__templates__/expo/client/heroui/components/switch/switch.animation.ts +243 -0
  239. package/lib/__templates__/expo/client/heroui/components/switch/switch.constants.ts +26 -0
  240. package/lib/__templates__/expo/client/heroui/components/switch/switch.md +334 -0
  241. package/lib/__templates__/expo/client/heroui/components/switch/switch.styles.ts +83 -0
  242. package/lib/__templates__/expo/client/heroui/components/switch/switch.tsx +280 -0
  243. package/lib/__templates__/expo/client/heroui/components/switch/switch.types.ts +208 -0
  244. package/lib/__templates__/expo/client/heroui/components/tabs/index.ts +8 -0
  245. package/lib/__templates__/expo/client/heroui/components/tabs/tabs.animation.ts +246 -0
  246. package/lib/__templates__/expo/client/heroui/components/tabs/tabs.constants.ts +17 -0
  247. package/lib/__templates__/expo/client/heroui/components/tabs/tabs.context.ts +28 -0
  248. package/lib/__templates__/expo/client/heroui/components/tabs/tabs.md +565 -0
  249. package/lib/__templates__/expo/client/heroui/components/tabs/tabs.styles.ts +168 -0
  250. package/lib/__templates__/expo/client/heroui/components/tabs/tabs.tsx +445 -0
  251. package/lib/__templates__/expo/client/heroui/components/tabs/tabs.types.ts +341 -0
  252. package/lib/__templates__/expo/client/heroui/components/tag-group/index.ts +15 -0
  253. package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.animation.ts +17 -0
  254. package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.constants.ts +10 -0
  255. package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.md +404 -0
  256. package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.styles.ts +74 -0
  257. package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.tsx +325 -0
  258. package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.types.ts +125 -0
  259. package/lib/__templates__/expo/client/heroui/components/text-area/index.ts +3 -0
  260. package/lib/__templates__/expo/client/heroui/components/text-area/text-area.constants.ts +6 -0
  261. package/lib/__templates__/expo/client/heroui/components/text-area/text-area.md +133 -0
  262. package/lib/__templates__/expo/client/heroui/components/text-area/text-area.styles.ts +10 -0
  263. package/lib/__templates__/expo/client/heroui/components/text-area/text-area.tsx +44 -0
  264. package/lib/__templates__/expo/client/heroui/components/text-area/text-area.types.ts +6 -0
  265. package/lib/__templates__/expo/client/heroui/components/text-field/index.ts +3 -0
  266. package/lib/__templates__/expo/client/heroui/components/text-field/text-field.animation.ts +20 -0
  267. package/lib/__templates__/expo/client/heroui/components/text-field/text-field.constants.ts +6 -0
  268. package/lib/__templates__/expo/client/heroui/components/text-field/text-field.md +256 -0
  269. package/lib/__templates__/expo/client/heroui/components/text-field/text-field.styles.ts +10 -0
  270. package/lib/__templates__/expo/client/heroui/components/text-field/text-field.tsx +82 -0
  271. package/lib/__templates__/expo/client/heroui/components/text-field/text-field.types.ts +56 -0
  272. package/lib/__templates__/expo/client/heroui/components/toast/index.ts +4 -0
  273. package/lib/__templates__/expo/client/heroui/components/toast/toast.animation.ts +381 -0
  274. package/lib/__templates__/expo/client/heroui/components/toast/toast.constants.ts +10 -0
  275. package/lib/__templates__/expo/client/heroui/components/toast/toast.hooks.ts +73 -0
  276. package/lib/__templates__/expo/client/heroui/components/toast/toast.md +420 -0
  277. package/lib/__templates__/expo/client/heroui/components/toast/toast.styles.ts +89 -0
  278. package/lib/__templates__/expo/client/heroui/components/toast/toast.tsx +472 -0
  279. package/lib/__templates__/expo/client/heroui/components/toast/toast.types.ts +320 -0
  280. package/lib/__templates__/expo/client/heroui/docs.md +47 -0
  281. package/lib/__templates__/expo/client/heroui/helpers/external/hooks/index.ts +3 -0
  282. package/lib/__templates__/expo/client/heroui/helpers/external/hooks/use-is-on-surface.ts +8 -0
  283. package/lib/__templates__/expo/client/heroui/helpers/external/hooks/use-theme-color.ts +137 -0
  284. package/lib/__templates__/expo/client/heroui/helpers/external/utils/cn.ts +12 -0
  285. package/lib/__templates__/expo/client/heroui/helpers/external/utils/color-kit/index.ts +2395 -0
  286. package/lib/__templates__/expo/client/heroui/helpers/external/utils/color-kit/types.ts +212 -0
  287. package/lib/__templates__/expo/client/heroui/helpers/external/utils/index.ts +2 -0
  288. package/lib/__templates__/expo/client/heroui/helpers/internal/components/animated-check-icon.tsx +78 -0
  289. package/lib/__templates__/expo/client/heroui/helpers/internal/components/bottom-sheet-content-container.tsx +97 -0
  290. package/lib/__templates__/expo/client/heroui/helpers/internal/components/bottom-sheet-content.tsx +158 -0
  291. package/lib/__templates__/expo/client/heroui/helpers/internal/components/check-icon.tsx +28 -0
  292. package/lib/__templates__/expo/client/heroui/helpers/internal/components/chevron-down-icon.tsx +28 -0
  293. package/lib/__templates__/expo/client/heroui/helpers/internal/components/chevron-right-icon.tsx +29 -0
  294. package/lib/__templates__/expo/client/heroui/helpers/internal/components/close-icon.tsx +29 -0
  295. package/lib/__templates__/expo/client/heroui/helpers/internal/components/full-window-overlay.tsx +48 -0
  296. package/lib/__templates__/expo/client/heroui/helpers/internal/components/hero-text.tsx +71 -0
  297. package/lib/__templates__/expo/client/heroui/helpers/internal/components/index.ts +9 -0
  298. package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/animation-settings-context.ts +19 -0
  299. package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/bottom-sheet-is-dragging-context.ts +11 -0
  300. package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/form-field-context.ts +36 -0
  301. package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/index.ts +3 -0
  302. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/index.ts +14 -0
  303. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-augmented-ref.ts +32 -0
  304. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-bottom-sheet-aware-handlers.ts +94 -0
  305. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-bottom-sheet-gesture-handlers.ts +52 -0
  306. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-combined-animation-disabled-state.ts +49 -0
  307. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-controllable-state.ts +124 -0
  308. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-dev-info.ts +38 -0
  309. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-keyboard-status.ts +22 -0
  310. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-bottom-sheet-content-animation.ts +67 -0
  311. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-dialog-content-animation.ts +296 -0
  312. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-overlay-animation.ts +91 -0
  313. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-popover-content-animation.ts +199 -0
  314. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-root-animation.ts +26 -0
  315. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-relative-position.ts +353 -0
  316. package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-resolved-style-property.ts +118 -0
  317. package/lib/__templates__/expo/client/heroui/helpers/internal/types/animation.ts +131 -0
  318. package/lib/__templates__/expo/client/heroui/helpers/internal/types/bottom-sheet.ts +99 -0
  319. package/lib/__templates__/expo/client/heroui/helpers/internal/types/index.ts +5 -0
  320. package/lib/__templates__/expo/client/heroui/helpers/internal/types/misc.ts +10 -0
  321. package/lib/__templates__/expo/client/heroui/helpers/internal/types/primitives.ts +146 -0
  322. package/lib/__templates__/expo/client/heroui/helpers/internal/types/theme.ts +18 -0
  323. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/animation.ts +266 -0
  324. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/children-to-string.ts +117 -0
  325. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/combine-styles.ts +17 -0
  326. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/create-context.ts +60 -0
  327. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/ease-gradient/create-interpolation.ts +35 -0
  328. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/ease-gradient/index.ts +97 -0
  329. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/get-element-by-display-name.ts +15 -0
  330. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/get-element-with-default.ts +17 -0
  331. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/has-prop.ts +18 -0
  332. package/lib/__templates__/expo/client/heroui/helpers/internal/utils/index.ts +8 -0
  333. package/lib/__templates__/expo/client/heroui/index.tsx +51 -0
  334. package/lib/__templates__/expo/client/heroui/primitives/README.md +27 -0
  335. package/lib/__templates__/expo/client/heroui/primitives/accordion/accordion.tsx +270 -0
  336. package/lib/__templates__/expo/client/heroui/primitives/accordion/accordion.types.ts +117 -0
  337. package/lib/__templates__/expo/client/heroui/primitives/accordion/accordion.utils.ts +12 -0
  338. package/lib/__templates__/expo/client/heroui/primitives/accordion/index.ts +2 -0
  339. package/lib/__templates__/expo/client/heroui/primitives/activity-indicator/activity-indicator.tsx +50 -0
  340. package/lib/__templates__/expo/client/heroui/primitives/activity-indicator/activity-indicator.types.ts +24 -0
  341. package/lib/__templates__/expo/client/heroui/primitives/activity-indicator/index.ts +2 -0
  342. package/lib/__templates__/expo/client/heroui/primitives/alert/alert.tsx +124 -0
  343. package/lib/__templates__/expo/client/heroui/primitives/alert/alert.types.ts +87 -0
  344. package/lib/__templates__/expo/client/heroui/primitives/alert/index.ts +2 -0
  345. package/lib/__templates__/expo/client/heroui/primitives/avatar/avatar.tsx +171 -0
  346. package/lib/__templates__/expo/client/heroui/primitives/avatar/avatar.types.ts +62 -0
  347. package/lib/__templates__/expo/client/heroui/primitives/avatar/avatar.utils.ts +102 -0
  348. package/lib/__templates__/expo/client/heroui/primitives/avatar/index.ts +2 -0
  349. package/lib/__templates__/expo/client/heroui/primitives/bottom-sheet/bottom-sheet.tsx +235 -0
  350. package/lib/__templates__/expo/client/heroui/primitives/bottom-sheet/bottom-sheet.types.ts +127 -0
  351. package/lib/__templates__/expo/client/heroui/primitives/bottom-sheet/index.ts +2 -0
  352. package/lib/__templates__/expo/client/heroui/primitives/checkbox/checkbox.tsx +119 -0
  353. package/lib/__templates__/expo/client/heroui/primitives/checkbox/checkbox.types.ts +37 -0
  354. package/lib/__templates__/expo/client/heroui/primitives/checkbox/index.ts +2 -0
  355. package/lib/__templates__/expo/client/heroui/primitives/dialog/dialog.tsx +274 -0
  356. package/lib/__templates__/expo/client/heroui/primitives/dialog/dialog.types.ts +129 -0
  357. package/lib/__templates__/expo/client/heroui/primitives/dialog/index.ts +2 -0
  358. package/lib/__templates__/expo/client/heroui/primitives/input-otp/index.ts +3 -0
  359. package/lib/__templates__/expo/client/heroui/primitives/input-otp/input-otp.tsx +431 -0
  360. package/lib/__templates__/expo/client/heroui/primitives/input-otp/input-otp.types.ts +169 -0
  361. package/lib/__templates__/expo/client/heroui/primitives/input-otp/input-otp.utils.ts +31 -0
  362. package/lib/__templates__/expo/client/heroui/primitives/label/index.ts +2 -0
  363. package/lib/__templates__/expo/client/heroui/primitives/label/label.tsx +24 -0
  364. package/lib/__templates__/expo/client/heroui/primitives/label/label.types.ts +39 -0
  365. package/lib/__templates__/expo/client/heroui/primitives/menu/index.ts +2 -0
  366. package/lib/__templates__/expo/client/heroui/primitives/menu/menu.tsx +765 -0
  367. package/lib/__templates__/expo/client/heroui/primitives/menu/menu.types.ts +401 -0
  368. package/lib/__templates__/expo/client/heroui/primitives/popover/index.ts +2 -0
  369. package/lib/__templates__/expo/client/heroui/primitives/popover/popover.tsx +382 -0
  370. package/lib/__templates__/expo/client/heroui/primitives/popover/popover.types.ts +201 -0
  371. package/lib/__templates__/expo/client/heroui/primitives/portal/index.ts +1 -0
  372. package/lib/__templates__/expo/client/heroui/primitives/portal/portal.tsx +126 -0
  373. package/lib/__templates__/expo/client/heroui/primitives/radio/index.ts +2 -0
  374. package/lib/__templates__/expo/client/heroui/primitives/radio/radio.tsx +133 -0
  375. package/lib/__templates__/expo/client/heroui/primitives/radio/radio.types.ts +47 -0
  376. package/lib/__templates__/expo/client/heroui/primitives/radio-group/index.ts +2 -0
  377. package/lib/__templates__/expo/client/heroui/primitives/radio-group/radio-group.tsx +114 -0
  378. package/lib/__templates__/expo/client/heroui/primitives/radio-group/radio-group.types.ts +65 -0
  379. package/lib/__templates__/expo/client/heroui/primitives/select/index.ts +2 -0
  380. package/lib/__templates__/expo/client/heroui/primitives/select/select.tsx +705 -0
  381. package/lib/__templates__/expo/client/heroui/primitives/select/select.types.ts +409 -0
  382. package/lib/__templates__/expo/client/heroui/primitives/select/select.utils.ts +35 -0
  383. package/lib/__templates__/expo/client/heroui/primitives/slider/index.ts +3 -0
  384. package/lib/__templates__/expo/client/heroui/primitives/slider/slider.tsx +464 -0
  385. package/lib/__templates__/expo/client/heroui/primitives/slider/slider.types.ts +208 -0
  386. package/lib/__templates__/expo/client/heroui/primitives/slider/slider.utils.ts +93 -0
  387. package/lib/__templates__/expo/client/heroui/primitives/slot/index.ts +1 -0
  388. package/lib/__templates__/expo/client/heroui/primitives/slot/slot.tsx +122 -0
  389. package/lib/__templates__/expo/client/heroui/primitives/slot/types.ts +19 -0
  390. package/lib/__templates__/expo/client/heroui/primitives/slot/utils.ts +96 -0
  391. package/lib/__templates__/expo/client/heroui/primitives/switch/index.ts +2 -0
  392. package/lib/__templates__/expo/client/heroui/primitives/switch/switch.tsx +61 -0
  393. package/lib/__templates__/expo/client/heroui/primitives/switch/switch.types.ts +55 -0
  394. package/lib/__templates__/expo/client/heroui/primitives/tabs/index.ts +2 -0
  395. package/lib/__templates__/expo/client/heroui/primitives/tabs/tabs.tsx +202 -0
  396. package/lib/__templates__/expo/client/heroui/primitives/tabs/tabs.types.ts +77 -0
  397. package/lib/__templates__/expo/client/heroui/primitives/tag-group/index.ts +2 -0
  398. package/lib/__templates__/expo/client/heroui/primitives/tag-group/tag-group.tsx +324 -0
  399. package/lib/__templates__/expo/client/heroui/primitives/tag-group/tag-group.types.ts +119 -0
  400. package/lib/__templates__/expo/client/heroui/primitives/toast/index.ts +2 -0
  401. package/lib/__templates__/expo/client/heroui/primitives/toast/toast.tsx +138 -0
  402. package/lib/__templates__/expo/client/heroui/primitives/toast/toast.types.ts +86 -0
  403. package/lib/__templates__/expo/client/heroui/providers/animation-settings/index.ts +8 -0
  404. package/lib/__templates__/expo/client/heroui/providers/animation-settings/provider.tsx +47 -0
  405. package/lib/__templates__/expo/client/heroui/providers/animation-settings/types.ts +27 -0
  406. package/lib/__templates__/expo/client/heroui/providers/hero-ui-native/index.ts +2 -0
  407. package/lib/__templates__/expo/client/heroui/providers/hero-ui-native/provider.tsx +67 -0
  408. package/lib/__templates__/expo/client/heroui/providers/hero-ui-native/types.ts +114 -0
  409. package/lib/__templates__/expo/client/heroui/providers/hero-ui-native-raw/index.ts +2 -0
  410. package/lib/__templates__/expo/client/heroui/providers/hero-ui-native-raw/provider.tsx +50 -0
  411. package/lib/__templates__/expo/client/heroui/providers/hero-ui-native-raw/types.ts +39 -0
  412. package/lib/__templates__/expo/client/heroui/providers/text-component/index.ts +2 -0
  413. package/lib/__templates__/expo/client/heroui/providers/text-component/provider.tsx +9 -0
  414. package/lib/__templates__/expo/client/heroui/providers/text-component/types.ts +52 -0
  415. package/lib/__templates__/expo/client/heroui/providers/toast/index.ts +3 -0
  416. package/lib/__templates__/expo/client/heroui/providers/toast/insets-container.tsx +87 -0
  417. package/lib/__templates__/expo/client/heroui/providers/toast/provider.tsx +431 -0
  418. package/lib/__templates__/expo/client/heroui/providers/toast/reducer.ts +34 -0
  419. package/lib/__templates__/expo/client/heroui/providers/toast/toast-config.context.ts +27 -0
  420. package/lib/__templates__/expo/client/heroui/providers/toast/toast-item-renderer.tsx +45 -0
  421. package/lib/__templates__/expo/client/heroui/providers/toast/types.ts +373 -0
  422. package/lib/__templates__/expo/client/heroui/styles/index.css +3 -0
  423. package/lib/__templates__/expo/client/heroui/styles/theme.css +112 -0
  424. package/lib/__templates__/expo/client/heroui/styles/utilities.css +8 -0
  425. package/lib/__templates__/expo/client/heroui/styles/variables.css +146 -0
  426. package/lib/__templates__/expo/client/package.json +4 -1
  427. package/lib/__templates__/expo/package.json +1 -1
  428. package/lib/__templates__/expo/pnpm-lock.yaml +68 -0
  429. package/lib/__templates__/nextjs/AGENTS.md +6 -4
  430. package/lib/__templates__/nextjs/eslint.config.mjs +9 -0
  431. package/lib/__templates__/taro/.coze +2 -0
  432. package/lib/__templates__/taro/.cozeproj/scripts/pack.sh +1 -2
  433. package/lib/__templates__/taro/config/index.ts +1 -1
  434. package/lib/__templates__/taro/package.json +1 -0
  435. package/lib/__templates__/taro/project.config.json +1 -1
  436. package/lib/cli.js +246 -252
  437. package/package.json +3 -2
@@ -0,0 +1,50 @@
1
+ import { useCombinedAnimationDisabledState } from '../../helpers/internal/hooks';
2
+ import {
3
+ getAnimationValueProperty,
4
+ getIsAnimationDisabledValue,
5
+ getRootAnimationState,
6
+ } from '../../helpers/internal/utils';
7
+ import {
8
+ ENTERING_ANIMATION_CONFIG,
9
+ EXITING_ANIMATION_CONFIG,
10
+ } from './field-error.constants';
11
+ import type { FieldErrorRootAnimation } from './field-error.types';
12
+
13
+ // --------------------------------------------------
14
+
15
+ /**
16
+ * Animation hook for FieldError root component
17
+ * Handles entering and exiting animations for error messages
18
+ */
19
+ export function useFieldErrorRootAnimation(options: {
20
+ animation: FieldErrorRootAnimation | undefined;
21
+ }) {
22
+ const { animation } = options;
23
+
24
+ const { animationConfig, isAnimationDisabled } =
25
+ getRootAnimationState(animation);
26
+
27
+ const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
28
+
29
+ const isAnimationDisabledValue = getIsAnimationDisabledValue({
30
+ isAnimationDisabled,
31
+ isAllAnimationsDisabled,
32
+ });
33
+
34
+ const enteringValue = getAnimationValueProperty({
35
+ animationValue: animationConfig?.entering,
36
+ property: 'value',
37
+ defaultValue: ENTERING_ANIMATION_CONFIG,
38
+ });
39
+
40
+ const exitingValue = getAnimationValueProperty({
41
+ animationValue: animationConfig?.exiting,
42
+ property: 'value',
43
+ defaultValue: EXITING_ANIMATION_CONFIG,
44
+ });
45
+
46
+ return {
47
+ entering: isAnimationDisabledValue ? undefined : enteringValue,
48
+ exiting: isAnimationDisabledValue ? undefined : exitingValue,
49
+ };
50
+ }
@@ -0,0 +1,31 @@
1
+ import { Easing, FadeIn, FadeOut } from 'react-native-reanimated';
2
+
3
+ /**
4
+ * Display names for the FieldError component parts
5
+ */
6
+ export const DISPLAY_NAME = {
7
+ ROOT: 'HeroUINative.FieldError',
8
+ };
9
+
10
+ /**
11
+ * Animation duration for focus/blur transitions
12
+ */
13
+ export const ANIMATION_DURATION = 150;
14
+
15
+ /**
16
+ * Animation easing function for focus/blur transitions
17
+ */
18
+ export const ANIMATION_EASING = Easing.out(Easing.ease);
19
+
20
+ /**
21
+ * Default entering animation configuration
22
+ */
23
+ export const ENTERING_ANIMATION_CONFIG =
24
+ FadeIn.duration(ANIMATION_DURATION).easing(ANIMATION_EASING);
25
+
26
+ /**
27
+ * Default exiting animation configuration
28
+ */
29
+ export const EXITING_ANIMATION_CONFIG = FadeOut.duration(
30
+ ANIMATION_DURATION / 1.5
31
+ ).easing(ANIMATION_EASING);
@@ -0,0 +1,204 @@
1
+ # FieldError
2
+
3
+ Displays validation error message content with smooth animations.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { FieldError } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <FieldError>Error message content</FieldError>
15
+ ```
16
+
17
+ - **FieldError**: Main container that displays error messages with smooth animations. Accepts string children which are automatically wrapped with Text component, or custom React components for more complex layouts. Controls visibility through the `isInvalid` prop and supports custom entering/exiting animations.
18
+
19
+ ## Usage
20
+
21
+ ### Basic Usage
22
+
23
+ The FieldError component displays error messages when validation fails.
24
+
25
+ ```tsx
26
+ <FieldError isInvalid={true}>This field is required</FieldError>
27
+ ```
28
+
29
+ ### Controlled Visibility
30
+
31
+ Control when the error appears using the `isInvalid` prop. When used inside a form field component (like TextField), FieldError automatically consumes the form-item-state context.
32
+
33
+ ```tsx
34
+ const [isInvalid, setIsInvalid] = useState(false);
35
+
36
+ <FieldError isInvalid={isInvalid}>
37
+ Please enter a valid email address
38
+ </FieldError>;
39
+ ```
40
+
41
+ ### With Form Fields
42
+
43
+ FieldError automatically consumes form state from TextField via the form-item-state context.
44
+
45
+ ```tsx
46
+ import { FieldError, Label, TextField } from '@/heroui';
47
+
48
+ <TextField isRequired isInvalid={true}>
49
+ <Label>Email</Label>
50
+ <Input placeholder="Enter your email" />
51
+ <FieldError>Please enter a valid email address</FieldError>
52
+ </TextField>;
53
+ ```
54
+
55
+ ### Custom Content
56
+
57
+ Pass custom React components as children instead of strings.
58
+
59
+ ```tsx
60
+ <FieldError isInvalid={true}>
61
+ <View className="flex-row items-center">
62
+ <Icon name="alert-circle" />
63
+ <Text className="ml-2 text-danger">Invalid input</Text>
64
+ </View>
65
+ </FieldError>
66
+ ```
67
+
68
+ ### Custom Animations
69
+
70
+ Override default entering and exiting animations using the `animation` prop.
71
+
72
+ ```tsx
73
+ import { SlideInDown, SlideOutUp } from 'react-native-reanimated';
74
+
75
+ <FieldError
76
+ isInvalid={true}
77
+ animation={{
78
+ entering: { value: SlideInDown.duration(200) },
79
+ exiting: { value: SlideOutUp.duration(150) },
80
+ }}
81
+ >
82
+ Field validation failed
83
+ </FieldError>;
84
+ ```
85
+
86
+ Disable animations entirely:
87
+
88
+ ```tsx
89
+ <FieldError isInvalid={true} animation={false}>
90
+ Field validation failed
91
+ </FieldError>
92
+ ```
93
+
94
+ ### Custom Styling
95
+
96
+ Apply custom styles to the container and text elements.
97
+
98
+ ```tsx
99
+ <FieldError
100
+ isInvalid={true}
101
+ className="mt-2"
102
+ classNames={{
103
+ container: 'bg-danger/10 p-2 rounded',
104
+ text: 'text-xs font-medium',
105
+ }}
106
+ >
107
+ Password must be at least 8 characters
108
+ </FieldError>
109
+ ```
110
+
111
+ ### Custom Text Props
112
+
113
+ Pass additional props to the Text component when children is a string.
114
+
115
+ ```tsx
116
+ <FieldError
117
+ isInvalid={true}
118
+ textProps={{
119
+ numberOfLines: 1,
120
+ ellipsizeMode: 'tail',
121
+ style: { letterSpacing: 0.5 },
122
+ }}
123
+ >
124
+ This is a very long error message that might need to be truncated
125
+ </FieldError>
126
+ ```
127
+
128
+ ## Example
129
+
130
+ ```tsx
131
+ import { Description, FieldError, Label, TextField } from '@/heroui';
132
+ import { useState } from 'react';
133
+ import { View } from 'react-native';
134
+
135
+ export default function FieldErrorExample() {
136
+ const [email, setEmail] = useState('');
137
+ const [isInvalid, setIsInvalid] = useState(false);
138
+
139
+ const isValidEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
140
+
141
+ const handleBlur = () => {
142
+ setIsInvalid(email !== '' && !isValidEmail);
143
+ };
144
+
145
+ return (
146
+ <View className="p-4">
147
+ <TextField isInvalid={isInvalid}>
148
+ <Label>Email Address</Label>
149
+ <Input
150
+ placeholder="Enter your email"
151
+ value={email}
152
+ onChangeText={setEmail}
153
+ onBlur={handleBlur}
154
+ keyboardType="email-address"
155
+ autoCapitalize="none"
156
+ />
157
+ <Description>We'll use this to contact you</Description>
158
+ <FieldError>Please enter a valid email address</FieldError>
159
+ </TextField>
160
+ </View>
161
+ );
162
+ }
163
+ ```
164
+
165
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/field-error.tsx>).
166
+
167
+ ## API Reference
168
+
169
+ ### FieldError
170
+
171
+ | prop | type | default | description |
172
+ | ---------------------- | --------------------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
173
+ | `children` | `React.ReactNode` | `undefined` | The content of the error field. String children are wrapped with Text |
174
+ | `isInvalid` | `boolean` | `undefined` | Controls the visibility of the error field (overrides form-item-state context). When used inside TextField, automatically consumes form state |
175
+ | `animation` | `FieldErrorRootAnimation` | - | Animation configuration |
176
+ | `className` | `string` | `undefined` | Additional CSS classes for the container |
177
+ | `classNames` | `ElementSlots<FieldErrorSlots>` | `undefined` | Additional CSS classes for different parts of the component |
178
+ | `styles` | `{ container?: ViewStyle; text?: TextStyle }` | `undefined` | Styles for different parts of the field error |
179
+ | `textProps` | `TextProps` | `undefined` | Additional props to pass to the Text component when children is a string |
180
+ | `...AnimatedViewProps` | `AnimatedProps<ViewProps>` | - | All Reanimated Animated.View props are supported |
181
+
182
+ **classNames prop:** `ElementSlots<FieldErrorSlots>` provides type-safe CSS classes for different parts of the field error component. Available slots: `container`, `text`.
183
+
184
+ #### `styles`
185
+
186
+ | prop | type | description |
187
+ | ----------- | ----------- | --------------------------- |
188
+ | `container` | `ViewStyle` | Styles for the container |
189
+ | `text` | `TextStyle` | Styles for the text content |
190
+
191
+ #### FieldErrorRootAnimation
192
+
193
+ Animation configuration for field error root component. Can be:
194
+
195
+ - `false` or `"disabled"`: Disable only root animations
196
+ - `"disable-all"`: Disable all animations including children
197
+ - `true` or `undefined`: Use default animations
198
+ - `object`: Custom animation configuration
199
+
200
+ | prop | type | default | description |
201
+ | ---------------- | ---------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------- |
202
+ | `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
203
+ | `entering.value` | `EntryOrExitLayoutType` | `FadeIn`<br/>`.duration(150)`<br/>`.easing(Easing.out(Easing.ease))` | Custom entering animation for field error |
204
+ | `exiting.value` | `EntryOrExitLayoutType` | `FadeOut`<br/>`.duration(100)`<br/>`.easing(Easing.out(Easing.ease))` | Custom exiting animation for field error |
@@ -0,0 +1,23 @@
1
+ import { tv } from 'tailwind-variants';
2
+ import { combineStyles } from '../../helpers/internal/utils';
3
+
4
+ const root = tv({
5
+ slots: {
6
+ container: '',
7
+ text: 'text-sm text-danger',
8
+ },
9
+ variants: {
10
+ isInsideField: {
11
+ true: {
12
+ container: 'px-1.5',
13
+ text: '',
14
+ },
15
+ },
16
+ },
17
+ });
18
+
19
+ export const fieldErrorClassNames = combineStyles({
20
+ root,
21
+ });
22
+
23
+ export type FieldErrorSlots = keyof ReturnType<typeof root>;
@@ -0,0 +1,91 @@
1
+ import { forwardRef } from 'react';
2
+ import Animated from 'react-native-reanimated';
3
+ import { HeroText } from '../../helpers/internal/components';
4
+ import { useFormField } from '../../helpers/internal/contexts';
5
+ import type { ViewRef } from '../../helpers/internal/types';
6
+ import { childrenToString } from '../../helpers/internal/utils';
7
+ import { useFieldErrorRootAnimation } from './field-error.animation';
8
+ import { DISPLAY_NAME } from './field-error.constants';
9
+ import { fieldErrorClassNames } from './field-error.styles';
10
+ import type { FieldErrorRootProps } from './field-error.types';
11
+
12
+ // --------------------------------------------------
13
+
14
+ const FieldErrorRoot = forwardRef<ViewRef, FieldErrorRootProps>(
15
+ (props, ref) => {
16
+ const {
17
+ children,
18
+ className,
19
+ classNames,
20
+ style,
21
+ styles,
22
+ textProps,
23
+ isInvalid: localIsInvalid,
24
+ animation,
25
+ ...restProps
26
+ } = props;
27
+
28
+ const formField = useFormField();
29
+
30
+ // Merge form field state with local props (local takes precedence)
31
+ const isInvalid =
32
+ localIsInvalid !== undefined
33
+ ? localIsInvalid
34
+ : (formField?.isInvalid ?? false);
35
+
36
+ const isInsideField = formField?.hasFieldPadding ?? false;
37
+
38
+ const { container, text } = fieldErrorClassNames.root({
39
+ isInsideField,
40
+ });
41
+
42
+ const containerClassName = container({
43
+ className: [className, classNames?.container],
44
+ });
45
+
46
+ const textClassName = text({
47
+ className: [classNames?.text, textProps?.className],
48
+ });
49
+
50
+ const { entering, exiting } = useFieldErrorRootAnimation({ animation });
51
+
52
+ if (!isInvalid) return null;
53
+
54
+ const stringifiedChildren = childrenToString(children);
55
+ const renderedChildren = stringifiedChildren ? (
56
+ <HeroText className={textClassName} style={styles?.text} {...textProps}>
57
+ {stringifiedChildren}
58
+ </HeroText>
59
+ ) : (
60
+ children
61
+ );
62
+
63
+ return (
64
+ <Animated.View
65
+ ref={ref}
66
+ entering={entering}
67
+ exiting={exiting}
68
+ className={containerClassName}
69
+ style={[style, styles?.container]}
70
+ {...restProps}
71
+ >
72
+ {renderedChildren}
73
+ </Animated.View>
74
+ );
75
+ }
76
+ );
77
+
78
+ // --------------------------------------------------
79
+
80
+ FieldErrorRoot.displayName = DISPLAY_NAME.ROOT;
81
+
82
+ /**
83
+ * FieldError component for displaying validation errors
84
+ *
85
+ * @component FieldError - Error message container with entering/exiting animations.
86
+ * Automatically wraps string children with Text component.
87
+ * Hidden when isInvalid is false.
88
+ */
89
+ const FieldError = FieldErrorRoot;
90
+
91
+ export default FieldError;
@@ -0,0 +1,79 @@
1
+ import type { TextProps, TextStyle, ViewProps, ViewStyle } from 'react-native';
2
+ import type {
3
+ AnimatedProps,
4
+ EntryOrExitLayoutType,
5
+ } from 'react-native-reanimated';
6
+ import type {
7
+ AnimationRoot,
8
+ AnimationValue,
9
+ ElementSlots,
10
+ } from '../../helpers/internal/types';
11
+ import type { FieldErrorSlots } from './field-error.styles';
12
+
13
+ /**
14
+ * Animation configuration for FieldError root component
15
+ */
16
+ export type FieldErrorRootAnimation = AnimationRoot<{
17
+ entering?: AnimationValue<{
18
+ /**
19
+ * Custom entering animation for field error
20
+ */
21
+ value?: EntryOrExitLayoutType;
22
+ }>;
23
+ exiting?: AnimationValue<{
24
+ /**
25
+ * Custom exiting animation for field error
26
+ */
27
+ value?: EntryOrExitLayoutType;
28
+ }>;
29
+ }>;
30
+
31
+ /**
32
+ * Props for the FieldError root component
33
+ */
34
+ export interface FieldErrorRootProps
35
+ extends Omit<AnimatedProps<ViewProps>, 'entering' | 'exiting'> {
36
+ /**
37
+ * The content of the error field
38
+ * When passed as string, it will be wrapped with Text component
39
+ */
40
+ children?: React.ReactNode;
41
+
42
+ /**
43
+ * Controls the visibility of the error field (overrides context)
44
+ * When false, the field error is hidden
45
+ * @default undefined - uses form-item-state context value
46
+ */
47
+ isInvalid?: boolean;
48
+
49
+ /**
50
+ * Additional CSS class for styling
51
+ */
52
+ className?: string;
53
+
54
+ /**
55
+ * Additional CSS classes for different parts of the component
56
+ */
57
+ classNames?: ElementSlots<FieldErrorSlots>;
58
+
59
+ /**
60
+ * Styles for different parts of the field error
61
+ */
62
+ styles?: {
63
+ container?: ViewStyle;
64
+ text?: TextStyle;
65
+ };
66
+
67
+ /**
68
+ * Additional props to pass to the Text component when children is a string
69
+ */
70
+ textProps?: TextProps;
71
+
72
+ /**
73
+ * Animation configuration for field error
74
+ * - `false` or `"disabled"`: Disable all animations
75
+ * - `true` or `undefined`: Use default animations
76
+ * - `object`: Custom animation configuration
77
+ */
78
+ animation?: FieldErrorRootAnimation;
79
+ }
@@ -0,0 +1,3 @@
1
+ export { default as FieldError } from './field-error';
2
+ export { fieldErrorClassNames } from './field-error.styles';
3
+ export type { FieldErrorRootProps } from './field-error.types';
@@ -0,0 +1,3 @@
1
+ export { default as Input } from './input';
2
+ export { inputClassNames } from './input.styles';
3
+ export type { InputProps } from './input.types';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Display name for Input component
3
+ */
4
+ export const DISPLAY_NAME = {
5
+ INPUT: 'HeroUINative.Input',
6
+ } as const;
@@ -0,0 +1,193 @@
1
+ # Input
2
+
3
+ A text input component with styled border and background for collecting user input.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Input } from '@/heroui';
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Basic Usage
14
+
15
+ Input can be used standalone or within a TextField component.
16
+
17
+ ```tsx
18
+ import { Input } from '@/heroui';
19
+
20
+ <Input placeholder="Enter your email" />;
21
+ ```
22
+
23
+ ### Within TextField
24
+
25
+ Input works seamlessly with TextField for complete form structure.
26
+
27
+ ```tsx
28
+ import { Input, Label, TextField } from '@/heroui';
29
+
30
+ <TextField>
31
+ <Label>Email</Label>
32
+ <Input placeholder="Enter your email" />
33
+ </TextField>;
34
+ ```
35
+
36
+ ### With Validation
37
+
38
+ Display error state when the input is invalid.
39
+
40
+ ```tsx
41
+ import { FieldError, Input, Label, TextField } from '@/heroui';
42
+
43
+ <TextField isRequired isInvalid={true}>
44
+ <Label>Email</Label>
45
+ <Input placeholder="Enter your email" />
46
+ <FieldError>Please enter a valid email</FieldError>
47
+ </TextField>;
48
+ ```
49
+
50
+ ### With Local Invalid State Override
51
+
52
+ Override the context's invalid state for the input.
53
+
54
+ ```tsx
55
+ import { FieldError, Input, Label, TextField } from '@/heroui';
56
+
57
+ <TextField isInvalid={true}>
58
+ <Label isInvalid={false}>Email</Label>
59
+ <Input placeholder="Enter your email" isInvalid={false} />
60
+ <FieldError>Email format is incorrect</FieldError>
61
+ </TextField>;
62
+ ```
63
+
64
+ ### Disabled State
65
+
66
+ Disable the input to prevent interaction.
67
+
68
+ ```tsx
69
+ import { Input, Label, TextField } from '@/heroui';
70
+
71
+ <TextField isDisabled>
72
+ <Label>Disabled Field</Label>
73
+ <Input placeholder="Cannot edit" value="Read only value" />
74
+ </TextField>;
75
+ ```
76
+
77
+ ### With Variant
78
+
79
+ Use different variants to style the input based on context.
80
+
81
+ ```tsx
82
+ import { Input, Label, TextField } from '@/heroui';
83
+
84
+ <TextField>
85
+ <Label>Primary Variant</Label>
86
+ <Input placeholder="Primary style" variant="primary" />
87
+ </TextField>
88
+
89
+ <TextField>
90
+ <Label>Secondary Variant</Label>
91
+ <Input placeholder="Secondary style" variant="secondary" />
92
+ </TextField>
93
+ ```
94
+
95
+ ### Custom Styling
96
+
97
+ Customize the input appearance using className.
98
+
99
+ ```tsx
100
+ import { Input, Label, TextField } from '@/heroui';
101
+
102
+ <TextField>
103
+ <Label>Custom Styled</Label>
104
+ <Input
105
+ placeholder="Custom colors"
106
+ className="bg-blue-50 border-blue-500 focus:border-blue-700"
107
+ />
108
+ </TextField>;
109
+ ```
110
+
111
+ ## Example
112
+
113
+ ```tsx
114
+ import { Ionicons } from '@expo/vector-icons';
115
+ import { Description, Input, Label, TextField } from '@/heroui';
116
+ import { useState } from 'react';
117
+ import { Pressable, View } from 'react-native';
118
+ import { withUniwind } from 'uniwind';
119
+
120
+ const StyledIonicons = withUniwind(Ionicons);
121
+
122
+ export const TextInputContent = () => {
123
+ const [email, setEmail] = useState('');
124
+ const [password, setPassword] = useState('');
125
+ const [isPasswordVisible, setIsPasswordVisible] = useState(false);
126
+
127
+ return (
128
+ <View className="gap-4">
129
+ <TextField isRequired>
130
+ <Label>Email</Label>
131
+ <Input
132
+ placeholder="Enter your email"
133
+ keyboardType="email-address"
134
+ autoCapitalize="none"
135
+ value={email}
136
+ onChangeText={setEmail}
137
+ />
138
+ <Description>
139
+ We'll never share your email with anyone else.
140
+ </Description>
141
+ </TextField>
142
+
143
+ <TextField isRequired>
144
+ <Label>New password</Label>
145
+ <View className="w-full flex-row items-center">
146
+ <Input
147
+ value={password}
148
+ onChangeText={setPassword}
149
+ className="flex-1 px-10"
150
+ placeholder="Enter your password"
151
+ secureTextEntry={!isPasswordVisible}
152
+ />
153
+ <StyledIonicons
154
+ name="lock-closed-outline"
155
+ size={16}
156
+ className="absolute left-3.5 text-muted"
157
+ pointerEvents="none"
158
+ />
159
+ <Pressable
160
+ className="absolute right-4"
161
+ onPress={() => setIsPasswordVisible(!isPasswordVisible)}
162
+ >
163
+ <StyledIonicons
164
+ name={isPasswordVisible ? 'eye-off-outline' : 'eye-outline'}
165
+ size={16}
166
+ className="text-muted"
167
+ />
168
+ </Pressable>
169
+ </View>
170
+ <Description>Password must be at least 6 characters</Description>
171
+ </TextField>
172
+ </View>
173
+ );
174
+ };
175
+ ```
176
+
177
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/input.tsx>).
178
+
179
+ ## API Reference
180
+
181
+ ### Input
182
+
183
+ | prop | type | default | description |
184
+ | ------------------------- | -------------------------- | --------------------- | ------------------------------------------------------------ |
185
+ | isInvalid | `boolean` | `undefined` | Whether the input is in an invalid state (overrides context) |
186
+ | variant | `'primary' \| 'secondary'` | `'primary'` | Variant style for the input |
187
+ | className | `string` | - | Custom class name for the input |
188
+ | selectionColorClassName | `string` | `"accent-accent"` | Custom className for the selection color |
189
+ | placeholderColorClassName | `string` | `"field-placeholder"` | Custom className for the placeholder text color |
190
+ | animation | `AnimationRoot` | `undefined` | Animation configuration for the input |
191
+ | ...TextInputProps | `TextInputProps` | - | All standard React Native TextInput props are supported |
192
+
193
+ > **Note**: When used within a TextField component, Input automatically consumes form state (isDisabled, isInvalid) from TextField via the form-item-state context.