@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,217 @@
1
+ import { forwardRef, useMemo } from 'react';
2
+ import { View } from 'react-native';
3
+ import Animated from 'react-native-reanimated';
4
+
5
+ import { useIsOnSurface } from '../../helpers/external/hooks';
6
+ import { AnimationSettingsProvider } from '../../helpers/internal/contexts';
7
+ import * as RadioPrimitives from '../../primitives/radio';
8
+ import { useRadioGroupItem } from '../radio-group/radio-group.context';
9
+ import {
10
+ useRadioIndicatorThumbAnimation,
11
+ useRadioRootAnimation,
12
+ } from './radio.animation';
13
+ import { DEFAULT_HIT_SLOP, DISPLAY_NAME } from './radio.constants';
14
+ import { radioClassNames, radioStyleSheet } from './radio.styles';
15
+ import type {
16
+ RadioIndicatorProps,
17
+ RadioIndicatorThumbProps,
18
+ RadioProps,
19
+ RadioRenderProps,
20
+ } from './radio.types';
21
+
22
+ const useRadio = RadioPrimitives.useRadioContext;
23
+
24
+ const AnimatedRadioIndicator = Animated.createAnimatedComponent(
25
+ RadioPrimitives.Indicator
26
+ );
27
+
28
+ // --------------------------------------------------
29
+
30
+ /**
31
+ * Radio root component.
32
+ *
33
+ * Operates in two modes:
34
+ * - **Standalone**: Renders a Pressable trigger with `isSelected`/`onSelectedChange`.
35
+ * - **Inside RadioGroupItem**: Detects parent context automatically, derives state from
36
+ * the RadioGroupItem, and pressing selects this item in the group.
37
+ */
38
+ const RadioRoot = forwardRef<RadioPrimitives.RootRef, RadioProps>(
39
+ (props, ref) => {
40
+ const {
41
+ children,
42
+ isSelected: isSelectedProp,
43
+ onSelectedChange: onSelectedChangeProp,
44
+ isDisabled: isDisabledProp,
45
+ isInvalid: isInvalidProp,
46
+ variant: variantProp,
47
+ className,
48
+ animation,
49
+ ...restProps
50
+ } = props;
51
+
52
+ // Detect RadioGroupItem context (non-strict: returns undefined outside a group)
53
+ const radioGroupItemContext = useRadioGroupItem();
54
+
55
+ // Merge props with RadioGroupItem context (explicit props take precedence)
56
+ const isSelected = isSelectedProp ?? radioGroupItemContext?.isSelected;
57
+ const isDisabled = isDisabledProp ?? radioGroupItemContext?.isDisabled;
58
+ const isInvalid = isInvalidProp ?? radioGroupItemContext?.isInvalid;
59
+ const onSelectedChange =
60
+ onSelectedChangeProp ?? radioGroupItemContext?.onSelectedChange;
61
+
62
+ const isOnSurfaceAutoDetected = useIsOnSurface();
63
+ const finalVariant =
64
+ variantProp !== undefined
65
+ ? variantProp
66
+ : radioGroupItemContext?.variant !== undefined
67
+ ? radioGroupItemContext.variant
68
+ : isOnSurfaceAutoDetected
69
+ ? 'secondary'
70
+ : 'primary';
71
+
72
+ const rootClassName = radioClassNames.root({
73
+ className,
74
+ });
75
+
76
+ const renderProps: RadioRenderProps = {
77
+ isSelected: isSelected ?? false,
78
+ isDisabled: isDisabled ?? false,
79
+ isInvalid: isInvalid ?? false,
80
+ };
81
+
82
+ const content =
83
+ typeof children === 'function'
84
+ ? children(renderProps)
85
+ : (children ?? <RadioIndicator />);
86
+
87
+ const { isAllAnimationsDisabled } = useRadioRootAnimation({
88
+ animation,
89
+ });
90
+
91
+ const animationSettingsContextValue = useMemo(
92
+ () => ({
93
+ isAllAnimationsDisabled,
94
+ }),
95
+ [isAllAnimationsDisabled]
96
+ );
97
+
98
+ return (
99
+ <AnimationSettingsProvider value={animationSettingsContextValue}>
100
+ <RadioPrimitives.Root
101
+ ref={ref}
102
+ variant={finalVariant}
103
+ className={rootClassName}
104
+ isSelected={isSelected}
105
+ onSelectedChange={onSelectedChange}
106
+ isDisabled={isDisabled}
107
+ isInvalid={isInvalid}
108
+ hitSlop={props.hitSlop ?? DEFAULT_HIT_SLOP}
109
+ {...restProps}
110
+ >
111
+ {content}
112
+ </RadioPrimitives.Root>
113
+ </AnimationSettingsProvider>
114
+ );
115
+ }
116
+ );
117
+
118
+ // --------------------------------------------------
119
+
120
+ const RadioIndicator = forwardRef<Animated.View, RadioIndicatorProps>(
121
+ (props, ref) => {
122
+ const { children, className, style, ...restProps } = props;
123
+
124
+ const { isSelected, isInvalid, variant } = useRadio();
125
+
126
+ const indicatorClassName = radioClassNames.indicator({
127
+ variant,
128
+ isSelected,
129
+ isInvalid,
130
+ className,
131
+ });
132
+
133
+ return (
134
+ <AnimatedRadioIndicator
135
+ ref={ref}
136
+ className={indicatorClassName}
137
+ style={[radioStyleSheet.borderCurve, style]}
138
+ {...restProps}
139
+ >
140
+ {children ?? <RadioIndicatorThumb />}
141
+ </AnimatedRadioIndicator>
142
+ );
143
+ }
144
+ );
145
+
146
+ // --------------------------------------------------
147
+
148
+ const RadioIndicatorThumb = forwardRef<View, RadioIndicatorThumbProps>(
149
+ (props, ref) => {
150
+ const {
151
+ className,
152
+ style,
153
+ animation,
154
+ isAnimatedStyleActive = true,
155
+ ...restProps
156
+ } = props;
157
+
158
+ const { isSelected } = useRadio();
159
+
160
+ const thumbClassName = radioClassNames.indicatorThumb({
161
+ isSelected,
162
+ className,
163
+ });
164
+
165
+ const { rContainerStyle } = useRadioIndicatorThumbAnimation({
166
+ animation,
167
+ isSelected,
168
+ });
169
+
170
+ const thumbStyle = isAnimatedStyleActive ? [rContainerStyle, style] : style;
171
+
172
+ return (
173
+ <Animated.View
174
+ ref={ref}
175
+ className={thumbClassName}
176
+ style={thumbStyle}
177
+ {...restProps}
178
+ />
179
+ );
180
+ }
181
+ );
182
+
183
+ // --------------------------------------------------
184
+
185
+ RadioRoot.displayName = DISPLAY_NAME.RADIO_ROOT;
186
+ RadioIndicator.displayName = DISPLAY_NAME.RADIO_INDICATOR;
187
+ RadioIndicatorThumb.displayName = DISPLAY_NAME.RADIO_INDICATOR_THUMB;
188
+
189
+ /**
190
+ * Compound Radio component with sub-components.
191
+ *
192
+ * @component Radio - Individual radio option that operates in two modes:
193
+ * - **Standalone**: Uses `isSelected`/`onSelectedChange` directly.
194
+ * - **Inside RadioGroupItem**: Automatically detects the parent context, derives
195
+ * `isSelected`/`isDisabled`/`isInvalid`/`variant` from it. Pressing selects this
196
+ * item in the group via the group's `onValueChange`.
197
+ *
198
+ * Renders a default indicator if no children are provided. Supports render function
199
+ * children to access state (`isSelected`, `isInvalid`, `isDisabled`).
200
+ *
201
+ * @component Radio.Indicator - Optional container for the radio circle. Renders default thumb
202
+ * if no children provided. Manages the visual selection state.
203
+ *
204
+ * @component Radio.IndicatorThumb - Optional inner circle that appears when selected. Animates
205
+ * scale based on selection. Can be replaced with custom content.
206
+ *
207
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/radio
208
+ */
209
+ const CompoundRadio = Object.assign(RadioRoot, {
210
+ /** @optional Custom radio indicator container */
211
+ Indicator: RadioIndicator,
212
+ /** @optional Custom indicator thumb that appears when selected */
213
+ IndicatorThumb: RadioIndicatorThumb,
214
+ });
215
+
216
+ export { useRadio };
217
+ export default CompoundRadio;
@@ -0,0 +1,106 @@
1
+ import type { ViewProps } from 'react-native';
2
+ import type { AnimatedProps, WithTimingConfig } from 'react-native-reanimated';
3
+ import type {
4
+ Animation,
5
+ AnimationRootDisableAll,
6
+ AnimationValue,
7
+ } from '../../helpers/internal/types';
8
+ import type { RootProps as RadioPrimitiveRootProps } from '../../primitives/radio';
9
+
10
+ /**
11
+ * Render function props for Radio children
12
+ */
13
+ export interface RadioRenderProps {
14
+ /** Whether the radio is selected */
15
+ isSelected: boolean;
16
+ /** Whether the radio is disabled */
17
+ isDisabled: boolean;
18
+ /** Whether the radio is invalid */
19
+ isInvalid: boolean;
20
+ }
21
+
22
+ /**
23
+ * Props for the Radio root component.
24
+ *
25
+ * Works in two modes:
26
+ * - **Standalone**: Uses `isSelected` / `onSelectedChange` directly.
27
+ * - **Inside RadioGroup**: Uses `value` prop; `isSelected` is derived from group context.
28
+ */
29
+ export interface RadioProps extends Omit<RadioPrimitiveRootProps, 'children'> {
30
+ /** Radio content, or a render function */
31
+ children?: React.ReactNode | ((props: RadioRenderProps) => React.ReactNode);
32
+ /** Custom class name */
33
+ className?: string;
34
+ /**
35
+ * Animation configuration for radio
36
+ * - `"disable-all"`: Disable all animations including children (Indicator, IndicatorThumb)
37
+ * - `undefined`: Use default animations
38
+ */
39
+ animation?: AnimationRootDisableAll;
40
+ }
41
+
42
+ /**
43
+ * Props for Radio.Indicator component
44
+ */
45
+ export interface RadioIndicatorProps extends AnimatedProps<ViewProps> {
46
+ /** Indicator content */
47
+ children?: React.ReactNode;
48
+ /** Custom class name */
49
+ className?: string;
50
+ }
51
+
52
+ /**
53
+ * Animation configuration for RadioIndicatorThumb component
54
+ */
55
+ export type RadioIndicatorThumbAnimation = Animation<{
56
+ scale?: AnimationValue<{
57
+ /**
58
+ * Scale values [unselected, selected]
59
+ * @default [1.5, 1]
60
+ */
61
+ value?: [number, number];
62
+ /**
63
+ * Animation timing configuration
64
+ * @default { duration: 300, easing: Easing.out(Easing.ease) }
65
+ */
66
+ timingConfig?: WithTimingConfig;
67
+ }>;
68
+ }>;
69
+
70
+ /**
71
+ * Props for Radio.IndicatorThumb component
72
+ */
73
+ export interface RadioIndicatorThumbProps
74
+ extends Omit<AnimatedProps<ViewProps>, 'children'> {
75
+ /** Custom class name
76
+ *
77
+ * @note The following style properties are occupied by animations and cannot be set via className:
78
+ * - `transform` (specifically `scale`) - Animated for selection transitions (unselected: 1.5, selected: 1)
79
+ *
80
+ * To customize this property, use the `animation` prop:
81
+ * ```tsx
82
+ * <Radio.IndicatorThumb
83
+ * animation={{
84
+ * scale: { value: [1.5, 1], timingConfig: { duration: 300, easing: Easing.out(Easing.ease) } }
85
+ * }}
86
+ * />
87
+ * ```
88
+ *
89
+ * To completely disable animated styles and use your own via className or style prop, set `isAnimatedStyleActive={false}`.
90
+ */
91
+ className?: string;
92
+ /**
93
+ * Animation configuration
94
+ * - `false` or `"disabled"`: Disable all animations
95
+ * - `true` or `undefined`: Use default animations
96
+ * - `object`: Custom animation configuration
97
+ */
98
+ animation?: RadioIndicatorThumbAnimation;
99
+ /**
100
+ * Whether animated styles (react-native-reanimated) are active
101
+ * When `false`, the animated style is removed and you can implement custom logic
102
+ * This prop should only be used when you want to write custom styling logic instead of the default animated styles
103
+ * @default true
104
+ */
105
+ isAnimatedStyleActive?: boolean;
106
+ }
@@ -0,0 +1,9 @@
1
+ export { default as RadioGroup, useRadioGroup } from './radio-group';
2
+ export { useRadioGroupItem } from './radio-group.context';
3
+ export { radioGroupClassNames } from './radio-group.styles';
4
+ export type {
5
+ RadioGroupItemContextValue,
6
+ RadioGroupItemProps,
7
+ RadioGroupItemRenderProps,
8
+ RadioGroupProps,
9
+ } from './radio-group.types';
@@ -0,0 +1,20 @@
1
+ import { useCombinedAnimationDisabledState } from '../../helpers/internal/hooks';
2
+ import type { AnimationRootDisableAll } from '../../helpers/internal/types';
3
+
4
+ // --------------------------------------------------
5
+
6
+ /**
7
+ * Animation hook for RadioGroup root component.
8
+ * Handles cascading animation disabled state to child components.
9
+ */
10
+ export function useRadioGroupRootAnimation(options: {
11
+ animation: AnimationRootDisableAll | undefined;
12
+ }) {
13
+ const { animation } = options;
14
+
15
+ const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
16
+
17
+ return {
18
+ isAllAnimationsDisabled,
19
+ };
20
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Display names for RadioGroup components
3
+ */
4
+ export const DISPLAY_NAME = {
5
+ RADIO_GROUP_ROOT: 'HeroUINative.RadioGroup.Root',
6
+ RADIO_GROUP_ITEM: 'HeroUINative.RadioGroup.Item',
7
+ } as const;
@@ -0,0 +1,14 @@
1
+ import { createContext } from '../../helpers/internal/utils';
2
+ import type { RadioGroupItemContextValue } from './radio-group.types';
3
+
4
+ /**
5
+ * RadioGroupItem context provider and hook
6
+ * Extracted to separate file to avoid circular dependencies with Label component
7
+ */
8
+ const [RadioGroupItemProvider, useRadioGroupItem] =
9
+ createContext<RadioGroupItemContextValue>({
10
+ name: 'RadioGroupItemContext',
11
+ strict: false,
12
+ });
13
+
14
+ export { RadioGroupItemProvider, useRadioGroupItem };
@@ -0,0 +1,273 @@
1
+ # RadioGroup
2
+
3
+ A set of radio buttons where only one option can be selected at a time.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { RadioGroup } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <RadioGroup>
15
+ <RadioGroup.Item>
16
+ <Label>...</Label>
17
+ <Description>...</Description>
18
+ <Radio>
19
+ <Radio.Indicator>
20
+ <Radio.IndicatorThumb />
21
+ </Radio.Indicator>
22
+ </Radio>
23
+ </RadioGroup.Item>
24
+ <FieldError>...</FieldError>
25
+ </RadioGroup>
26
+ ```
27
+
28
+ - **RadioGroup**: Container that manages the selection state of radio items. Supports both horizontal and vertical orientations.
29
+ - **RadioGroup.Item**: Individual radio option within a RadioGroup. Must be used inside RadioGroup. Handles selection state and renders a default `<Radio />` indicator when text children are provided. Supports render function children to access state (`isSelected`, `isInvalid`, `isDisabled`).
30
+ - **Label**: Optional clickable text label for the radio option. Linked to the radio for accessibility. Use the [Label](../label/label.md) component directly.
31
+ - **Description**: Optional secondary text below the label. Provides additional context about the radio option. Use the [Description](../description/description.md) component directly.
32
+ - **Radio**: The [Radio](../radio/radio.md) component used inside `RadioGroup.Item` to render the radio indicator. Automatically detects the `RadioGroupItem` context and derives `isSelected`, `isDisabled`, `isInvalid`, and `variant` from it.
33
+ - **Radio.Indicator**: Optional container for the radio circle. Renders default thumb if no children provided. Manages the visual selection state. See [Radio](../radio/radio.md) for full API.
34
+ - **Radio.IndicatorThumb**: Optional inner circle that appears when selected. Animates scale based on selection. Can be replaced with custom content. See [Radio](../radio/radio.md) for full API.
35
+ - **FieldError**: Error message displayed when radio group is invalid. Shown with animation below the radio group content. Use the [FieldError](../field-error/field-error.md) component directly.
36
+
37
+ ## Usage
38
+
39
+ ### Basic Usage
40
+
41
+ RadioGroup with simple string children automatically renders title and indicator.
42
+
43
+ ```tsx
44
+ <RadioGroup value={value} onValueChange={setValue}>
45
+ <RadioGroup.Item value="option1">Option 1</RadioGroup.Item>
46
+ <RadioGroup.Item value="option2">Option 2</RadioGroup.Item>
47
+ <RadioGroup.Item value="option3">Option 3</RadioGroup.Item>
48
+ </RadioGroup>
49
+ ```
50
+
51
+ ### With Descriptions
52
+
53
+ Add descriptive text below each radio option for additional context.
54
+
55
+ ```tsx
56
+ import { RadioGroup, Radio, Label, Description } from '@/heroui';
57
+ import { View } from 'react-native';
58
+
59
+ <RadioGroup value={value} onValueChange={setValue}>
60
+ <RadioGroup.Item value="standard">
61
+ <View>
62
+ <Label>Standard Shipping</Label>
63
+ <Description>Delivered in 5-7 business days</Description>
64
+ </View>
65
+ <Radio />
66
+ </RadioGroup.Item>
67
+ <RadioGroup.Item value="express">
68
+ <View>
69
+ <Label>Express Shipping</Label>
70
+ <Description>Delivered in 2-3 business days</Description>
71
+ </View>
72
+ <Radio />
73
+ </RadioGroup.Item>
74
+ </RadioGroup>;
75
+ ```
76
+
77
+ ### Custom Indicator
78
+
79
+ Replace the default indicator thumb with custom content using `Radio` sub-components.
80
+
81
+ ```tsx
82
+ import { RadioGroup, Radio, Label } from '@/heroui';
83
+
84
+ <RadioGroup value={value} onValueChange={setValue}>
85
+ <RadioGroup.Item value="custom">
86
+ {({ isSelected }) => (
87
+ <>
88
+ <Label>Custom Option</Label>
89
+ <Radio>
90
+ <Radio.Indicator>
91
+ {isSelected && (
92
+ <Animated.View entering={FadeIn}>
93
+ <Icon name="check" size={12} />
94
+ </Animated.View>
95
+ )}
96
+ </Radio.Indicator>
97
+ </Radio>
98
+ </>
99
+ )}
100
+ </RadioGroup.Item>
101
+ </RadioGroup>;
102
+ ```
103
+
104
+ ### With Render Function
105
+
106
+ Use a render function on RadioGroup.Item to access state and customize the entire content.
107
+
108
+ ```tsx
109
+ import { RadioGroup, Radio, Label } from '@/heroui';
110
+
111
+ <RadioGroup value={value} onValueChange={setValue}>
112
+ <RadioGroup.Item value="option1">
113
+ {({ isSelected, isInvalid, isDisabled }) => (
114
+ <>
115
+ <Label>Option 1</Label>
116
+ <Radio>
117
+ <Radio.Indicator>{isSelected && <CustomIcon />}</Radio.Indicator>
118
+ </Radio>
119
+ </>
120
+ )}
121
+ </RadioGroup.Item>
122
+ </RadioGroup>;
123
+ ```
124
+
125
+ ### With Error Message
126
+
127
+ Display validation errors below the radio group.
128
+
129
+ ```tsx
130
+ import { RadioGroup, FieldError } from '@/heroui';
131
+
132
+ function RadioGroupWithError() {
133
+ const [value, setValue] = React.useState<string | undefined>(undefined);
134
+
135
+ return (
136
+ <RadioGroup value={value} onValueChange={setValue} isInvalid={!value}>
137
+ <RadioGroup.Item value="agree">I agree to the terms</RadioGroup.Item>
138
+ <RadioGroup.Item value="disagree">I do not agree</RadioGroup.Item>
139
+ <FieldError isInvalid={!value}>
140
+ Please select an option to continue
141
+ </FieldError>
142
+ </RadioGroup>
143
+ );
144
+ }
145
+ ```
146
+
147
+ ## Example
148
+
149
+ ```tsx
150
+ import {
151
+ Description,
152
+ Label,
153
+ Radio,
154
+ RadioGroup,
155
+ Separator,
156
+ Surface,
157
+ } from '@/heroui';
158
+ import React from 'react';
159
+ import { View } from 'react-native';
160
+
161
+ export default function RadioGroupExample() {
162
+ const [selection, setSelection] = React.useState('desc1');
163
+
164
+ return (
165
+ <Surface className="w-full">
166
+ <RadioGroup value={selection} onValueChange={setSelection}>
167
+ <RadioGroup.Item value="desc1">
168
+ <View>
169
+ <Label>Standard Shipping</Label>
170
+ <Description>Delivered in 5-7 business days</Description>
171
+ </View>
172
+ <Radio />
173
+ </RadioGroup.Item>
174
+ <Separator className="my-1" />
175
+ <RadioGroup.Item value="desc2">
176
+ <View>
177
+ <Label>Express Shipping</Label>
178
+ <Description>Delivered in 2-3 business days</Description>
179
+ </View>
180
+ <Radio />
181
+ </RadioGroup.Item>
182
+ <Separator className="my-1" />
183
+ <RadioGroup.Item value="desc3">
184
+ <View>
185
+ <Label>Overnight Shipping</Label>
186
+ <Description>Delivered next business day</Description>
187
+ </View>
188
+ <Radio />
189
+ </RadioGroup.Item>
190
+ </RadioGroup>
191
+ </Surface>
192
+ );
193
+ }
194
+ ```
195
+
196
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/radio-group.tsx>).
197
+
198
+ ## API Reference
199
+
200
+ ### RadioGroup
201
+
202
+ | prop | type | default | description |
203
+ | --------------- | ---------------------------- | ----------- | ----------------------------------------------------------------------------------------- |
204
+ | `children` | `React.ReactNode` | `undefined` | Radio group content |
205
+ | `value` | `string \| undefined` | `undefined` | The currently selected value of the radio group |
206
+ | `onValueChange` | `(val: string) => void` | `undefined` | Callback fired when the selected value changes |
207
+ | `isDisabled` | `boolean` | `false` | Whether the entire radio group is disabled |
208
+ | `isInvalid` | `boolean` | `false` | Whether the radio group is invalid |
209
+ | `variant` | `'primary' \| 'secondary'` | `undefined` | Variant style for the radio group (inherited by items if not set on item) |
210
+ | `animation` | `"disable-all" \| undefined` | `undefined` | Animation configuration. Use `"disable-all"` to disable all animations including children |
211
+ | `className` | `string` | `undefined` | Custom class name |
212
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
213
+
214
+ ### RadioGroup.Item
215
+
216
+ | prop | type | default | description |
217
+ | ------------------- | ---------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------- |
218
+ | `children` | `React.ReactNode \| ((props: RadioGroupItemRenderProps) => React.ReactNode)` | `undefined` | Radio item content or render function to customize the radio item |
219
+ | `value` | `string` | `undefined` | The value associated with this radio item |
220
+ | `isDisabled` | `boolean` | `false` | Whether this specific radio item is disabled |
221
+ | `isInvalid` | `boolean` | `false` | Whether the radio item is invalid |
222
+ | `variant` | `'primary' \| 'secondary'` | `'primary'` | Variant style for the radio item |
223
+ | `hitSlop` | `number` | `6` | Hit slop for the pressable area |
224
+ | `className` | `string` | `undefined` | Custom class name |
225
+ | `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported (except disabled) |
226
+
227
+ #### RadioGroupItemRenderProps
228
+
229
+ | prop | type | description |
230
+ | ------------ | --------- | ---------------------------------- |
231
+ | `isSelected` | `boolean` | Whether the radio item is selected |
232
+ | `isInvalid` | `boolean` | Whether the radio item is invalid |
233
+ | `isDisabled` | `boolean` | Whether the radio item is disabled |
234
+
235
+ ### Radio (inside RadioGroup.Item)
236
+
237
+ The [Radio](../radio/radio.md) component is used inside `RadioGroup.Item` to render the radio indicator. When placed inside a `RadioGroup.Item`, the Radio component automatically detects the `RadioGroupItem` context and derives `isSelected`, `isDisabled`, `isInvalid`, and `variant` from it — no manual prop passing is needed.
238
+
239
+ Use `<Radio />` for the default indicator, or compose with `Radio.Indicator` and `Radio.IndicatorThumb` for custom styling.
240
+
241
+ **Note:** For complete Radio prop documentation (including `Radio.Indicator` and `Radio.IndicatorThumb`), see the [Radio component documentation](../radio/radio.md).
242
+
243
+ **Note:** For labels, descriptions, and error messages, use the base components directly:
244
+
245
+ - Use [Label](../label/label.md) component for labels
246
+ - Use [Description](../description/description.md) component for descriptions
247
+ - Use [FieldError](../field-error/field-error.md) component for error messages
248
+
249
+ ## Hooks
250
+
251
+ ### useRadioGroup
252
+
253
+ **Returns:**
254
+
255
+ | Property | Type | Description |
256
+ | --------------- | -------------------------- | ---------------------------------------------- |
257
+ | `value` | `string \| undefined` | Currently selected value |
258
+ | `isDisabled` | `boolean` | Whether the radio group is disabled |
259
+ | `isInvalid` | `boolean` | Whether the radio group is in an invalid state |
260
+ | `variant` | `'primary' \| 'secondary'` | Variant style for the radio group |
261
+ | `onValueChange` | `(value: string) => void` | Function to change the selected value |
262
+
263
+ ### useRadioGroupItem
264
+
265
+ **Returns:**
266
+
267
+ | Property | Type | Description |
268
+ | ------------------ | ---------------------------------------------- | ----------------------------------------------------------------------- |
269
+ | `isSelected` | `boolean` | Whether the radio item is selected |
270
+ | `isDisabled` | `boolean \| undefined` | Whether the radio item is disabled |
271
+ | `isInvalid` | `boolean \| undefined` | Whether the radio item is invalid |
272
+ | `variant` | `'primary' \| 'secondary' \| undefined` | Variant style for the radio item |
273
+ | `onSelectedChange` | `((isSelected: boolean) => void) \| undefined` | Callback to change the selection state (selects this item in the group) |
@@ -0,0 +1,15 @@
1
+ import { tv } from 'tailwind-variants';
2
+ import { combineStyles } from '../../helpers/internal/utils';
3
+
4
+ const root = tv({
5
+ base: 'gap-3',
6
+ });
7
+
8
+ const item = tv({
9
+ base: 'flex-row items-center justify-between gap-3',
10
+ });
11
+
12
+ export const radioGroupClassNames = combineStyles({
13
+ root,
14
+ item,
15
+ });