@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,51 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { tv } from 'tailwind-variants';
3
+ import { combineStyles } from '../../helpers/internal/utils';
4
+
5
+ const input = tv({
6
+ base: 'py-3.5 px-3 rounded-2xl text-foreground font-normal border-2 focus:border-accent',
7
+ variants: {
8
+ variant: {
9
+ primary: 'bg-field border-field ios:shadow-field android:shadow-sm',
10
+ secondary: 'bg-default border-default',
11
+ },
12
+ isInvalid: {
13
+ true: 'border-danger focus:border-danger',
14
+ false: '',
15
+ },
16
+ isDisabled: {
17
+ true: 'opacity-disabled',
18
+ false: '',
19
+ },
20
+ },
21
+ defaultVariants: {
22
+ variant: 'primary',
23
+ isInvalid: false,
24
+ isDisabled: false,
25
+ },
26
+ });
27
+
28
+ const placeholderTextColor = tv({
29
+ base: 'accent-field-placeholder',
30
+ });
31
+
32
+ const inputSelectionColor = tv({
33
+ base: 'accent-accent',
34
+ variants: {
35
+ isInvalid: {
36
+ true: 'accent-danger',
37
+ },
38
+ },
39
+ });
40
+
41
+ export const inputClassNames = combineStyles({
42
+ input,
43
+ inputSelectionColor,
44
+ placeholderTextColor,
45
+ });
46
+
47
+ export const inputStyleSheet = StyleSheet.create({
48
+ borderCurve: {
49
+ borderCurve: 'continuous',
50
+ },
51
+ });
@@ -0,0 +1,96 @@
1
+ import { forwardRef } from 'react';
2
+ import { TextInput, type TextInput as TextInputType } from 'react-native';
3
+ import { useIsOnSurface } from '../../helpers/external/hooks';
4
+ import { useFormField } from '../../helpers/internal/contexts';
5
+ import { useBottomSheetAwareHandlers } from '../../helpers/internal/hooks';
6
+ import { DISPLAY_NAME } from './input.constants';
7
+ import { inputClassNames, inputStyleSheet } from './input.styles';
8
+ import type { InputProps } from './input.types';
9
+
10
+ // --------------------------------------------------
11
+
12
+ const InputRoot = forwardRef<TextInputType, InputProps>((props, ref) => {
13
+ const {
14
+ isInvalid: localIsInvalid,
15
+ isDisabled: localIsDisabled,
16
+ isBottomSheetAware,
17
+ variant,
18
+ className,
19
+ style,
20
+ selectionColorClassName: selectionColorClassNameProp,
21
+ placeholderColorClassName: placeholderColorClassNameProp,
22
+ onFocus: onFocusProp,
23
+ onBlur: onBlurProp,
24
+ ...restProps
25
+ } = props;
26
+ const formField = useFormField();
27
+
28
+ const isInvalid =
29
+ localIsInvalid !== undefined
30
+ ? localIsInvalid
31
+ : (formField?.isInvalid ?? false);
32
+
33
+ const isDisabled =
34
+ localIsDisabled !== undefined
35
+ ? localIsDisabled
36
+ : (formField?.isDisabled ?? false);
37
+
38
+ const isOnSurfaceAutoDetected = useIsOnSurface();
39
+ const finalVariant =
40
+ variant !== undefined
41
+ ? variant
42
+ : isOnSurfaceAutoDetected
43
+ ? 'secondary'
44
+ : 'primary';
45
+
46
+ /** Merge user-provided onFocus/onBlur with bottom sheet keyboard handlers */
47
+ const { onFocus, onBlur } = useBottomSheetAwareHandlers({
48
+ onFocus: onFocusProp,
49
+ onBlur: onBlurProp,
50
+ isBottomSheetAware,
51
+ });
52
+
53
+ const inputClassName = inputClassNames.input({
54
+ variant: finalVariant,
55
+ isInvalid,
56
+ isDisabled,
57
+ className,
58
+ });
59
+
60
+ const placeholderColorClassName = inputClassNames.placeholderTextColor({
61
+ className: placeholderColorClassNameProp,
62
+ });
63
+
64
+ const selectionColorClassName = inputClassNames.inputSelectionColor({
65
+ isInvalid,
66
+ className: selectionColorClassNameProp,
67
+ });
68
+
69
+ return (
70
+ <TextInput
71
+ ref={ref}
72
+ className={inputClassName}
73
+ style={[inputStyleSheet.borderCurve, style]}
74
+ placeholderTextColorClassName={placeholderColorClassName}
75
+ selectionColorClassName={selectionColorClassName}
76
+ editable={!isDisabled}
77
+ onFocus={onFocus}
78
+ onBlur={onBlur}
79
+ {...restProps}
80
+ />
81
+ );
82
+ });
83
+
84
+ // --------------------------------------------------
85
+
86
+ InputRoot.displayName = DISPLAY_NAME.INPUT;
87
+
88
+ /**
89
+ * Input component - A text input component with styled border and background for collecting user input.
90
+ * Supports primary and secondary variants, and integrates with form item state context.
91
+ *
92
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/input
93
+ */
94
+ const Input = InputRoot;
95
+
96
+ export default Input;
@@ -0,0 +1,44 @@
1
+ import type { TextInputProps } from 'react-native';
2
+
3
+ /**
4
+ * Props for the Input component
5
+ */
6
+ export interface InputProps extends TextInputProps {
7
+ /**
8
+ * Whether the input is in an invalid state (overrides context)
9
+ * @default undefined
10
+ */
11
+ isInvalid?: boolean;
12
+ /**
13
+ * Whether the input is disabled (overrides context)
14
+ * @default undefined
15
+ */
16
+ isDisabled?: boolean;
17
+ /**
18
+ * Variant style for the input
19
+ * @default 'primary'
20
+ */
21
+ variant?: 'primary' | 'secondary';
22
+ /**
23
+ * Whether the input automatically handles keyboard state when rendered
24
+ * inside a BottomSheet. When `true` (default), onFocus/onBlur handlers
25
+ * are automatically wired to the bottom sheet's keyboard avoidance system.
26
+ * Set to `false` to disable this automatic behavior.
27
+ * @default true
28
+ */
29
+ isBottomSheetAware?: boolean;
30
+ /**
31
+ * Additional CSS classes
32
+ */
33
+ className?: string;
34
+ /**
35
+ * Custom className for the selection color
36
+ * @default "accent-accent"
37
+ */
38
+ selectionColorClassName?: string;
39
+ /**
40
+ * Custom className for the placeholder text color
41
+ * @default "field-placeholder"
42
+ */
43
+ placeholderColorClassName?: string;
44
+ }
@@ -0,0 +1,9 @@
1
+ export { default as InputGroup } from './input-group';
2
+ export { inputGroupClassNames } from './input-group.styles';
3
+ export type {
4
+ InputGroupContextType,
5
+ InputGroupInputProps,
6
+ InputGroupPrefixProps,
7
+ InputGroupProps,
8
+ InputGroupSuffixProps,
9
+ } from './input-group.types';
@@ -0,0 +1,14 @@
1
+ import { useCombinedAnimationDisabledState } from '../../helpers/internal/hooks';
2
+ import type { AnimationRootDisableAll } from '../../helpers/internal/types';
3
+
4
+ export function useInputGroupRootAnimation(options: {
5
+ animation: AnimationRootDisableAll | undefined;
6
+ }) {
7
+ const { animation } = options;
8
+
9
+ const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
10
+
11
+ return {
12
+ isAllAnimationsDisabled,
13
+ };
14
+ }
@@ -0,0 +1,6 @@
1
+ export const DISPLAY_NAME = {
2
+ INPUT_GROUP: 'HeroUINative.InputGroup',
3
+ INPUT_GROUP_PREFIX: 'HeroUINative.InputGroup.Prefix',
4
+ INPUT_GROUP_SUFFIX: 'HeroUINative.InputGroup.Suffix',
5
+ INPUT_GROUP_INPUT: 'HeroUINative.InputGroup.Input',
6
+ } as const;
@@ -0,0 +1,197 @@
1
+ # InputGroup
2
+
3
+ A compound layout component that groups an input with optional prefix and suffix decorators.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { InputGroup } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <InputGroup>
15
+ <InputGroup.Prefix>...</InputGroup.Prefix>
16
+ <InputGroup.Input />
17
+ <InputGroup.Suffix>...</InputGroup.Suffix>
18
+ </InputGroup>
19
+ ```
20
+
21
+ - **InputGroup**: Layout container that wraps Prefix, Input, and Suffix. Provides animation settings and a measurement context so Prefix/Suffix widths are automatically applied as padding on the Input.
22
+ - **InputGroup.Prefix**: Absolutely positioned View anchored to the left side of the Input. Its measured width is applied as `paddingLeft` on InputGroup.Input automatically.
23
+ - **InputGroup.Suffix**: Absolutely positioned View anchored to the right side of the Input. Its measured width is applied as `paddingRight` on InputGroup.Input automatically.
24
+ - **InputGroup.Input**: Pass-through to the Input component. Accepts all Input props directly. Automatically receives paddingLeft/paddingRight from measured Prefix/Suffix.
25
+
26
+ ## Usage
27
+
28
+ ### Basic Usage
29
+
30
+ The InputGroup component uses compound parts to attach prefix and suffix content to an input.
31
+
32
+ ```tsx
33
+ <InputGroup>
34
+ <InputGroup.Prefix>...</InputGroup.Prefix>
35
+ <InputGroup.Input placeholder="Enter text" />
36
+ <InputGroup.Suffix>...</InputGroup.Suffix>
37
+ </InputGroup>
38
+ ```
39
+
40
+ ### With Prefix Only
41
+
42
+ Attach leading content such as icons to the input.
43
+
44
+ ```tsx
45
+ <InputGroup>
46
+ <InputGroup.Prefix isDecorative>
47
+ <PersonIcon size={16} />
48
+ </InputGroup.Prefix>
49
+ <InputGroup.Input placeholder="Username" />
50
+ </InputGroup>
51
+ ```
52
+
53
+ ### With Suffix Only
54
+
55
+ Attach trailing content such as icons to the input.
56
+
57
+ ```tsx
58
+ <InputGroup>
59
+ <InputGroup.Input placeholder="Search products..." />
60
+ <InputGroup.Suffix isDecorative>
61
+ <MagnifierIcon size={16} />
62
+ </InputGroup.Suffix>
63
+ </InputGroup>
64
+ ```
65
+
66
+ ### Decorative vs Interactive
67
+
68
+ Set `isDecorative` on Prefix or Suffix to make touches pass through to the Input and hide the content from screen readers. Omit it when the decorator contains interactive elements.
69
+
70
+ ```tsx
71
+ <InputGroup>
72
+ <InputGroup.Prefix isDecorative>
73
+ <LockIcon size={16} />
74
+ </InputGroup.Prefix>
75
+ <InputGroup.Input placeholder="Enter your password" secureTextEntry />
76
+ <InputGroup.Suffix>
77
+ <Pressable onPress={togglePasswordVisibility}>
78
+ <EyeIcon size={16} />
79
+ </Pressable>
80
+ </InputGroup.Suffix>
81
+ </InputGroup>
82
+ ```
83
+
84
+ ### Disabled State
85
+
86
+ Disable the entire input group. The disabled state cascades to all child components.
87
+
88
+ ```tsx
89
+ <InputGroup isDisabled>
90
+ <InputGroup.Prefix isDecorative>
91
+ <LockIcon size={16} />
92
+ </InputGroup.Prefix>
93
+ <InputGroup.Input placeholder="Disabled input" />
94
+ </InputGroup>
95
+ ```
96
+
97
+ ### With TextField Integration
98
+
99
+ Combine with TextField, Label, and Description for full form field support.
100
+
101
+ ```tsx
102
+ <TextField isRequired>
103
+ <Label>Email</Label>
104
+ <InputGroup>
105
+ <InputGroup.Prefix isDecorative>
106
+ <MailIcon size={16} />
107
+ </InputGroup.Prefix>
108
+ <InputGroup.Input placeholder="you@example.com" keyboardType="email-address" />
109
+ </InputGroup>
110
+ <Description>We'll never share your email</Description>
111
+ </TextField>
112
+ ```
113
+
114
+ ## Example
115
+
116
+ ```tsx
117
+ import { InputGroup } from '@/heroui';
118
+ import { Ionicons } from '@expo/vector-icons';
119
+ import { useState } from 'react';
120
+ import { Pressable, View } from 'react-native';
121
+
122
+ export default function InputGroupExample() {
123
+ const [value, setValue] = useState('');
124
+ const [isPasswordVisible, setIsPasswordVisible] = useState(false);
125
+
126
+ return (
127
+ <View className="px-5">
128
+ <InputGroup>
129
+ <InputGroup.Prefix isDecorative>
130
+ <Ionicons name="lock-closed-outline" size={16} color="#888" />
131
+ </InputGroup.Prefix>
132
+ <InputGroup.Input
133
+ value={value}
134
+ onChangeText={setValue}
135
+ placeholder="Enter your password"
136
+ secureTextEntry={!isPasswordVisible}
137
+ />
138
+ <InputGroup.Suffix>
139
+ <Pressable
140
+ onPress={() => setIsPasswordVisible(!isPasswordVisible)}
141
+ hitSlop={20}
142
+ >
143
+ <Ionicons
144
+ name={isPasswordVisible ? 'eye-off-outline' : 'eye-outline'}
145
+ size={16}
146
+ color="#888"
147
+ />
148
+ </Pressable>
149
+ </InputGroup.Suffix>
150
+ </InputGroup>
151
+ </View>
152
+ );
153
+ }
154
+ ```
155
+
156
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/input-group.tsx>).
157
+
158
+ ## API Reference
159
+
160
+ ### InputGroup
161
+
162
+ | prop | type | default | description |
163
+ | -------------- | ------------------------ | ------- | ---------------------------------------------------------------------------- |
164
+ | `children` | `React.ReactNode` | - | Children elements to be rendered inside the input group |
165
+ | `className` | `string` | - | Additional CSS classes |
166
+ | `isDisabled` | `boolean` | `false` | Whether the entire input group and its children are disabled |
167
+ | `animation` | `AnimationRootDisableAll`| - | Animation configuration for input group |
168
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
169
+
170
+ #### AnimationRootDisableAll
171
+
172
+ Animation configuration for the InputGroup root component. Can be:
173
+
174
+ - `"disable-all"`: Disable all animations including children (cascades down)
175
+ - `undefined`: Use default animations
176
+
177
+ ### InputGroup.Prefix
178
+
179
+ | prop | type | default | description |
180
+ | ---------------- | ----------------- | ------- | -------------------------------------------------------------------------------------------- |
181
+ | `children` | `React.ReactNode` | - | Content to render inside the prefix |
182
+ | `className` | `string` | - | Additional CSS classes |
183
+ | `isDecorative` | `boolean` | `false` | When true, touches pass through to the Input and content is hidden from screen readers |
184
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
185
+
186
+ ### InputGroup.Suffix
187
+
188
+ | prop | type | default | description |
189
+ | ---------------- | ----------------- | ------- | -------------------------------------------------------------------------------------------- |
190
+ | `children` | `React.ReactNode` | - | Content to render inside the suffix |
191
+ | `className` | `string` | - | Additional CSS classes |
192
+ | `isDecorative` | `boolean` | `false` | When true, touches pass through to the Input and content is hidden from screen readers |
193
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
194
+
195
+ ### InputGroup.Input
196
+
197
+ Pass-through to the [Input](../input/input.md) component. Accepts all Input props directly.
@@ -0,0 +1,31 @@
1
+ import { tv } from 'tailwind-variants';
2
+ import { combineStyles } from '../../helpers/internal/utils';
3
+
4
+ const prefix = tv({
5
+ base: 'absolute left-0 top-0 bottom-0 items-center justify-center z-10 px-3 gap-3',
6
+ variants: {
7
+ isDisabled: {
8
+ true: 'opacity-disabled',
9
+ },
10
+ },
11
+ defaultVariants: {
12
+ isDisabled: false,
13
+ },
14
+ });
15
+
16
+ const suffix = tv({
17
+ base: 'absolute right-0 top-0 bottom-0 items-center justify-center z-10 px-3 gap-3',
18
+ variants: {
19
+ isDisabled: {
20
+ true: 'opacity-disabled',
21
+ },
22
+ },
23
+ defaultVariants: {
24
+ isDisabled: false,
25
+ },
26
+ });
27
+
28
+ export const inputGroupClassNames = combineStyles({
29
+ prefix,
30
+ suffix,
31
+ });
@@ -0,0 +1,239 @@
1
+ import { forwardRef, useCallback, useMemo, useState } from 'react';
2
+ import {
3
+ type LayoutChangeEvent,
4
+ type TextInput as TextInputType,
5
+ View,
6
+ } from 'react-native';
7
+ import {
8
+ AnimationSettingsProvider,
9
+ useFormField,
10
+ } from '../../helpers/internal/contexts';
11
+ import type { ViewRef } from '../../helpers/internal/types';
12
+ import { createContext } from '../../helpers/internal/utils';
13
+ import { Input } from '../input';
14
+ import { useInputGroupRootAnimation } from './input-group.animation';
15
+ import { DISPLAY_NAME } from './input-group.constants';
16
+ import { inputGroupClassNames } from './input-group.styles';
17
+ import type {
18
+ InputGroupContextType,
19
+ InputGroupInputProps,
20
+ InputGroupPrefixProps,
21
+ InputGroupProps,
22
+ InputGroupSuffixProps,
23
+ } from './input-group.types';
24
+
25
+ const [InputGroupProvider, useInputGroup] =
26
+ createContext<InputGroupContextType>({
27
+ name: 'InputGroupContext',
28
+ strict: false,
29
+ });
30
+
31
+ // --------------------------------------------------
32
+
33
+ const InputGroupRoot = forwardRef<ViewRef, InputGroupProps>((props, ref) => {
34
+ const { children, animation, isDisabled = false, ...restProps } = props;
35
+
36
+ const [prefixWidth, setPrefixWidth] = useState(0);
37
+ const [suffixWidth, setSuffixWidth] = useState(0);
38
+
39
+ const { isAllAnimationsDisabled } = useInputGroupRootAnimation({ animation });
40
+
41
+ const animationSettingsContextValue = useMemo(
42
+ () => ({ isAllAnimationsDisabled }),
43
+ [isAllAnimationsDisabled]
44
+ );
45
+
46
+ const inputGroupContextValue = useMemo<InputGroupContextType>(
47
+ () => ({
48
+ isDisabled,
49
+ prefixWidth,
50
+ suffixWidth,
51
+ setPrefixWidth,
52
+ setSuffixWidth,
53
+ }),
54
+ [isDisabled, prefixWidth, suffixWidth]
55
+ );
56
+
57
+ return (
58
+ <InputGroupProvider value={inputGroupContextValue}>
59
+ <AnimationSettingsProvider value={animationSettingsContextValue}>
60
+ <View ref={ref} {...restProps}>
61
+ {children}
62
+ </View>
63
+ </AnimationSettingsProvider>
64
+ </InputGroupProvider>
65
+ );
66
+ });
67
+
68
+ // --------------------------------------------------
69
+
70
+ const InputGroupPrefix = forwardRef<ViewRef, InputGroupPrefixProps>(
71
+ (props, ref) => {
72
+ const {
73
+ children,
74
+ className,
75
+ isDecorative = false,
76
+ onLayout: onLayoutProp,
77
+ ...restProps
78
+ } = props;
79
+
80
+ const context = useInputGroup();
81
+ const formField = useFormField();
82
+ const isDisabled = context?.isDisabled ?? formField?.isDisabled ?? false;
83
+
84
+ const onLayout = useCallback(
85
+ (event: LayoutChangeEvent) => {
86
+ context?.setPrefixWidth(event.nativeEvent.layout.width);
87
+ onLayoutProp?.(event);
88
+ },
89
+ [context, onLayoutProp]
90
+ );
91
+
92
+ const prefixClassName = inputGroupClassNames.prefix({
93
+ className,
94
+ isDisabled,
95
+ });
96
+
97
+ return (
98
+ <View
99
+ ref={ref}
100
+ className={prefixClassName}
101
+ onLayout={onLayout}
102
+ pointerEvents={isDecorative || isDisabled ? 'none' : undefined}
103
+ accessibilityElementsHidden={isDecorative || undefined}
104
+ importantForAccessibility={
105
+ isDecorative ? 'no-hide-descendants' : undefined
106
+ }
107
+ {...restProps}
108
+ >
109
+ {children}
110
+ </View>
111
+ );
112
+ }
113
+ );
114
+
115
+ // --------------------------------------------------
116
+
117
+ const InputGroupSuffix = forwardRef<ViewRef, InputGroupSuffixProps>(
118
+ (props, ref) => {
119
+ const {
120
+ children,
121
+ className,
122
+ isDecorative = false,
123
+ onLayout: onLayoutProp,
124
+ ...restProps
125
+ } = props;
126
+
127
+ const context = useInputGroup();
128
+ const formField = useFormField();
129
+ const isDisabled = context?.isDisabled ?? formField?.isDisabled ?? false;
130
+
131
+ const suffixClassName = inputGroupClassNames.suffix({
132
+ className,
133
+ isDisabled,
134
+ });
135
+
136
+ const onLayout = useCallback(
137
+ (event: LayoutChangeEvent) => {
138
+ context?.setSuffixWidth(event.nativeEvent.layout.width);
139
+ onLayoutProp?.(event);
140
+ },
141
+ [context, onLayoutProp]
142
+ );
143
+
144
+ return (
145
+ <View
146
+ ref={ref}
147
+ className={suffixClassName}
148
+ onLayout={onLayout}
149
+ pointerEvents={isDecorative || isDisabled ? 'none' : undefined}
150
+ accessibilityElementsHidden={isDecorative || undefined}
151
+ importantForAccessibility={
152
+ isDecorative ? 'no-hide-descendants' : undefined
153
+ }
154
+ {...restProps}
155
+ >
156
+ {children}
157
+ </View>
158
+ );
159
+ }
160
+ );
161
+
162
+ // --------------------------------------------------
163
+
164
+ const InputGroupInput = forwardRef<TextInputType, InputGroupInputProps>(
165
+ (props, ref) => {
166
+ const { style, isDisabled: localIsDisabled, ...restProps } = props;
167
+
168
+ const context = useInputGroup();
169
+ const isDisabled = localIsDisabled ?? context?.isDisabled ?? undefined;
170
+
171
+ const autoPaddingStyle = useMemo(() => {
172
+ const paddingLeft =
173
+ context?.prefixWidth && context.prefixWidth > 0
174
+ ? context.prefixWidth
175
+ : undefined;
176
+ const paddingRight =
177
+ context?.suffixWidth && context.suffixWidth > 0
178
+ ? context.suffixWidth
179
+ : undefined;
180
+
181
+ if (paddingLeft === undefined && paddingRight === undefined) {
182
+ return undefined;
183
+ }
184
+
185
+ return { paddingLeft, paddingRight };
186
+ }, [context?.prefixWidth, context?.suffixWidth]);
187
+
188
+ return (
189
+ <Input
190
+ ref={ref}
191
+ style={[autoPaddingStyle, style]}
192
+ isDisabled={isDisabled}
193
+ {...restProps}
194
+ />
195
+ );
196
+ }
197
+ );
198
+
199
+ // --------------------------------------------------
200
+
201
+ InputGroupRoot.displayName = DISPLAY_NAME.INPUT_GROUP;
202
+ InputGroupPrefix.displayName = DISPLAY_NAME.INPUT_GROUP_PREFIX;
203
+ InputGroupSuffix.displayName = DISPLAY_NAME.INPUT_GROUP_SUFFIX;
204
+ InputGroupInput.displayName = DISPLAY_NAME.INPUT_GROUP_INPUT;
205
+
206
+ /**
207
+ * Compound InputGroup component with sub-components.
208
+ *
209
+ * @component InputGroup - Layout container (plain View) that wraps
210
+ * Prefix, Input, and Suffix. Provides animation settings and a
211
+ * measurement context so Prefix/Suffix widths are automatically applied
212
+ * as padding on the Input.
213
+ *
214
+ * @component InputGroup.Prefix - Absolutely positioned View anchored to
215
+ * the left side of the Input. Its measured width is applied as
216
+ * `paddingLeft` on InputGroup.Input automatically. Set `isDecorative`
217
+ * to make touches pass through to the Input and hide from accessibility.
218
+ *
219
+ * @component InputGroup.Suffix - Absolutely positioned View anchored to
220
+ * the right side of the Input. Its measured width is applied as
221
+ * `paddingRight` on InputGroup.Input automatically. Set `isDecorative`
222
+ * to make touches pass through to the Input and hide from accessibility.
223
+ *
224
+ * @component InputGroup.Input - Pass-through to the Input component.
225
+ * Accepts all Input props directly (value, onChangeText, isDisabled, etc.).
226
+ * Automatically receives paddingLeft/paddingRight from measured Prefix/Suffix.
227
+ *
228
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/input-group
229
+ */
230
+ const CompoundInputGroup = Object.assign(InputGroupRoot, {
231
+ /** Absolutely positioned View for leading prefix content */
232
+ Prefix: InputGroupPrefix,
233
+ /** Absolutely positioned View for trailing suffix content */
234
+ Suffix: InputGroupSuffix,
235
+ /** Pass-through to Input — accepts all Input props directly */
236
+ Input: InputGroupInput,
237
+ });
238
+
239
+ export default CompoundInputGroup;