@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,241 @@
1
+ # ControlField
2
+
3
+ A field component that combines a label, description (or other content), and a control component (Switch, Checkbox, or Radio) into a single pressable area.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { ControlField } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <ControlField>
15
+ <Label>...</Label>
16
+ <Description>...</Description>
17
+ <ControlField.Indicator>...</ControlField.Indicator>
18
+ <FieldError>...</FieldError>
19
+ </ControlField>
20
+ ```
21
+
22
+ - **ControlField**: Root container that manages layout and state propagation
23
+ - **Label**: Primary text label for the control (from [Label](../label/label.md) component)
24
+ - **Description**: Secondary descriptive helper text (from [Description](../description/description.md) component)
25
+ - **ControlField.Indicator**: Container for the form control component ([Switch](../switch/switch.md), [Checkbox](../checkbox/checkbox.md), [Radio](../radio/radio.md))
26
+ - **FieldError**: Validation error message display (from [FieldError](../field-error/field-error.md) component)
27
+
28
+ ## Usage
29
+
30
+ ### Basic Usage
31
+
32
+ ControlField wraps form controls to provide consistent layout and state management.
33
+
34
+ ```tsx
35
+ <ControlField isSelected={value} onSelectedChange={setValue}>
36
+ <Label className="flex-1">Label text</Label>
37
+ <ControlField.Indicator />
38
+ </ControlField>
39
+ ```
40
+
41
+ ### With Description
42
+
43
+ Add helper text below the label using the Description component.
44
+
45
+ ```tsx
46
+ <ControlField isSelected={value} onSelectedChange={setValue}>
47
+ <View className="flex-1">
48
+ <Label>Enable notifications</Label>
49
+ <Description>
50
+ Receive push notifications about your account activity
51
+ </Description>
52
+ </View>
53
+ <ControlField.Indicator />
54
+ </ControlField>
55
+ ```
56
+
57
+ ### With Error Message
58
+
59
+ Display validation errors using the ErrorMessage component.
60
+
61
+ ```tsx
62
+ <ControlField
63
+ isSelected={value}
64
+ onSelectedChange={setValue}
65
+ isInvalid={!value}
66
+ className="flex-col items-start gap-1"
67
+ >
68
+ <View className="flex-row items-center gap-2">
69
+ <View className="flex-1">
70
+ <Label>I agree to the terms</Label>
71
+ <Description>
72
+ By checking this box, you agree to our Terms of Service
73
+ </Description>
74
+ </View>
75
+ <ControlField.Indicator variant="checkbox" />
76
+ </View>
77
+ <FieldError>This field is required</FieldError>
78
+ </ControlField>
79
+ ```
80
+
81
+ ### Disabled State
82
+
83
+ Control interactivity with the disabled prop.
84
+
85
+ ```tsx
86
+ <ControlField isSelected={value} onSelectedChange={setValue} isDisabled>
87
+ <View className="flex-1">
88
+ <Label>Disabled field</Label>
89
+ <Description>This field is disabled</Description>
90
+ </View>
91
+ <ControlField.Indicator />
92
+ </ControlField>
93
+ ```
94
+
95
+ ### Disabling All Animations
96
+
97
+ Disable all animations including children by using `"disable-all"`. This cascades down to all child components.
98
+
99
+ ```tsx
100
+ <ControlField
101
+ isSelected={value}
102
+ onSelectedChange={setValue}
103
+ animation="disable-all"
104
+ >
105
+ <View className="flex-1">
106
+ <Label>Label text</Label>
107
+ <Description>Description text</Description>
108
+ </View>
109
+ <ControlField.Indicator />
110
+ </ControlField>
111
+ ```
112
+
113
+ ## Example
114
+
115
+ ```tsx
116
+ import {
117
+ Checkbox,
118
+ Description,
119
+ FieldError,
120
+ ControlField,
121
+ Label,
122
+ Switch,
123
+ } from '@/heroui';
124
+ import React from 'react';
125
+ import { ScrollView, View } from 'react-native';
126
+
127
+ export default function ControlFieldExample() {
128
+ const [notifications, setNotifications] = React.useState(false);
129
+ const [terms, setTerms] = React.useState(false);
130
+ const [newsletter, setNewsletter] = React.useState(true);
131
+
132
+ return (
133
+ <ScrollView className="bg-background p-4">
134
+ <View className="gap-4">
135
+ <ControlField
136
+ isSelected={notifications}
137
+ onSelectedChange={setNotifications}
138
+ >
139
+ <View className="flex-1">
140
+ <Label>Enable notifications</Label>
141
+ <Description>
142
+ Receive push notifications about your account activity
143
+ </Description>
144
+ </View>
145
+ <ControlField.Indicator />
146
+ </ControlField>
147
+
148
+ <ControlField
149
+ isSelected={terms}
150
+ onSelectedChange={setTerms}
151
+ isInvalid={!terms}
152
+ className="flex-col items-start gap-1"
153
+ >
154
+ <View className="flex-row items-center gap-2">
155
+ <View className="flex-1">
156
+ <Label>I agree to the terms and conditions</Label>
157
+ <Description>
158
+ By checking this box, you agree to our Terms of Service
159
+ </Description>
160
+ </View>
161
+ <ControlField.Indicator className="mt-0.5">
162
+ <Checkbox />
163
+ </ControlField.Indicator>
164
+ </View>
165
+ <FieldError>This field is required</FieldError>
166
+ </ControlField>
167
+
168
+ <ControlField isSelected={newsletter} onSelectedChange={setNewsletter}>
169
+ <View className="flex-1">
170
+ <Label>Subscribe to newsletter</Label>
171
+ </View>
172
+ <ControlField.Indicator>
173
+ <Checkbox color="warning" />
174
+ </ControlField.Indicator>
175
+ </ControlField>
176
+ </View>
177
+ </ScrollView>
178
+ );
179
+ }
180
+ ```
181
+
182
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/control-field.tsx>).
183
+
184
+ ## API Reference
185
+
186
+ ### ControlField
187
+
188
+ | prop | type | default | description |
189
+ | ----------------- | -------------------------------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------- |
190
+ | children | `React.ReactNode \| ((props: ControlFieldRenderProps) => React.ReactNode)` | - | Content to render inside the form control, or a render function |
191
+ | isSelected | `boolean` | `undefined` | Whether the control is selected/checked |
192
+ | isDisabled | `boolean` | `false` | Whether the form control is disabled |
193
+ | isInvalid | `boolean` | `false` | Whether the form control is invalid |
194
+ | isRequired | `boolean` | `false` | Whether the form control is required |
195
+ | className | `string` | - | Custom class name for the root element |
196
+ | onSelectedChange | `(isSelected: boolean) => void` | - | Callback when selection state changes |
197
+ | animation | `"disable-all" \| undefined` | `undefined` | Animation configuration. Use `"disable-all"` to disable all animations including children |
198
+ | ...PressableProps | `PressableProps` | - | All React Native Pressable props are supported |
199
+
200
+ ### Label
201
+
202
+ The `Label` component automatically consumes form state (`isDisabled`, `isInvalid`) from the ControlField context.
203
+
204
+ **Note**: For complete prop documentation, see the [Label component documentation](../label/label.md).
205
+
206
+ ### Description
207
+
208
+ The `Description` component automatically consumes form state (`isDisabled`, `isInvalid`) from the ControlField context.
209
+
210
+ **Note**: For complete prop documentation, see the [Description component documentation](../description/description.md).
211
+
212
+ ### ControlField.Indicator
213
+
214
+ | prop | type | default | description |
215
+ | ------------ | ----------------------------------- | ---------- | ---------------------------------------------------------- |
216
+ | children | `React.ReactNode` | - | Control component to render (Switch, Checkbox, Radio) |
217
+ | variant | `'checkbox' \| 'radio' \| 'switch'` | `'switch'` | Variant of the control to render when no children provided |
218
+ | className | `string` | - | Custom class name for the indicator element |
219
+ | ...ViewProps | `ViewProps` | - | All React Native View props are supported |
220
+
221
+ **Note**: When children are provided, the component automatically passes down `isSelected`, `onSelectedChange`, `isDisabled`, and `isInvalid` props from the ControlField context if they are not already present on the child component. When using the `radio` variant, the Radio component renders in standalone mode (outside of a RadioGroup).
222
+
223
+ ### FieldError
224
+
225
+ The `FieldError` component automatically consumes form state (`isInvalid`) from the ControlField context.
226
+
227
+ **Note**: For complete prop documentation, see the [FieldError component documentation](../field-error/field-error.md). The error message visibility is controlled by the `isInvalid` state of the parent ControlField.
228
+
229
+ ## Hooks
230
+
231
+ ### useControlField
232
+
233
+ **Returns:**
234
+
235
+ | property | type | description |
236
+ | ------------------ | ---------------------------------------------- | ---------------------------------------------- |
237
+ | `isSelected` | `boolean \| undefined` | Whether the control is selected/checked |
238
+ | `onSelectedChange` | `((isSelected: boolean) => void) \| undefined` | Callback when selection state changes |
239
+ | `isDisabled` | `boolean` | Whether the form control is disabled |
240
+ | `isInvalid` | `boolean` | Whether the form control is invalid |
241
+ | `isPressed` | `SharedValue<boolean>` | Reanimated shared value indicating press state |
@@ -0,0 +1,15 @@
1
+ import { tv } from 'tailwind-variants';
2
+ import { combineStyles } from '../../helpers/internal/utils';
3
+
4
+ const root = tv({
5
+ base: 'flex-row items-center gap-3',
6
+ });
7
+
8
+ const indicator = tv({
9
+ base: '',
10
+ });
11
+
12
+ export const controlFieldClassNames = combineStyles({
13
+ root,
14
+ indicator,
15
+ });
@@ -0,0 +1,245 @@
1
+ import React, { cloneElement, forwardRef, useCallback, useMemo } from 'react';
2
+ import { Pressable, View, type GestureResponderEvent } from 'react-native';
3
+ import { hasProp } from '../../helpers/internal/utils';
4
+
5
+ import { useSharedValue } from 'react-native-reanimated';
6
+ import {
7
+ AnimationSettingsProvider,
8
+ FormFieldProvider,
9
+ } from '../../helpers/internal/contexts';
10
+ import type { PressableRef } from '../../helpers/internal/types';
11
+ import { Checkbox } from '../checkbox';
12
+ import { Radio } from '../radio';
13
+ import { Switch } from '../switch';
14
+ import { useControlFieldRootAnimation } from './control-field.animation';
15
+ import { DISPLAY_NAME } from './control-field.constants';
16
+ import { ControlFieldProvider, useControlField } from './control-field.context';
17
+ import { controlFieldClassNames } from './control-field.styles';
18
+ import type {
19
+ ControlFieldContextValue,
20
+ ControlFieldIndicatorProps,
21
+ ControlFieldProps,
22
+ ControlFieldRenderProps,
23
+ } from './control-field.types';
24
+
25
+ // --------------------------------------------------
26
+
27
+ const ControlField = forwardRef<PressableRef, ControlFieldProps>(
28
+ (props, ref) => {
29
+ const {
30
+ children,
31
+ className,
32
+ isSelected,
33
+ onSelectedChange,
34
+ isDisabled = false,
35
+ isInvalid = false,
36
+ isRequired = false,
37
+ onPressIn,
38
+ onPressOut,
39
+ animation,
40
+ ...restProps
41
+ } = props;
42
+
43
+ const renderProps: ControlFieldRenderProps = useMemo(
44
+ () => ({
45
+ isSelected,
46
+ isDisabled: isDisabled ?? false,
47
+ isInvalid: isInvalid ?? false,
48
+ }),
49
+ [isSelected, isDisabled, isInvalid]
50
+ );
51
+
52
+ const content =
53
+ typeof children === 'function' ? children(renderProps) : children;
54
+
55
+ const rootClassName = controlFieldClassNames.root({
56
+ className,
57
+ });
58
+
59
+ const { isAllAnimationsDisabled } = useControlFieldRootAnimation({
60
+ animation,
61
+ });
62
+
63
+ const animationSettingsContextValue = useMemo(
64
+ () => ({
65
+ isAllAnimationsDisabled,
66
+ }),
67
+ [isAllAnimationsDisabled]
68
+ );
69
+
70
+ const isPressed = useSharedValue<boolean>(false);
71
+
72
+ const handlePress = (e: GestureResponderEvent) => {
73
+ if (!isDisabled && onSelectedChange && isSelected !== undefined) {
74
+ onSelectedChange(!isSelected);
75
+
76
+ if (props.onPress && typeof props.onPress === 'function') {
77
+ props.onPress(e);
78
+ }
79
+ }
80
+ };
81
+
82
+ const handlePressIn = useCallback(
83
+ (e: GestureResponderEvent) => {
84
+ isPressed.set(true);
85
+ if (onPressIn && typeof onPressIn === 'function') {
86
+ onPressIn(e);
87
+ }
88
+ },
89
+ [isPressed, onPressIn]
90
+ );
91
+
92
+ const handlePressOut = useCallback(
93
+ (e: GestureResponderEvent) => {
94
+ isPressed.set(false);
95
+ if (onPressOut && typeof onPressOut === 'function') {
96
+ onPressOut(e);
97
+ }
98
+ },
99
+ [isPressed, onPressOut]
100
+ );
101
+
102
+ const contextValue: ControlFieldContextValue = useMemo(
103
+ () => ({
104
+ isSelected,
105
+ onSelectedChange,
106
+ isDisabled,
107
+ isInvalid,
108
+ isPressed,
109
+ }),
110
+ [isSelected, onSelectedChange, isDisabled, isInvalid, isPressed]
111
+ );
112
+
113
+ const formFieldContextValue = useMemo(
114
+ () => ({
115
+ isDisabled: isDisabled ?? false,
116
+ isInvalid: isInvalid ?? false,
117
+ isRequired: isRequired ?? false,
118
+ hasFieldPadding: false,
119
+ }),
120
+ [isDisabled, isInvalid, isRequired]
121
+ );
122
+
123
+ return (
124
+ <AnimationSettingsProvider value={animationSettingsContextValue}>
125
+ <FormFieldProvider value={formFieldContextValue}>
126
+ <ControlFieldProvider value={contextValue}>
127
+ <Pressable
128
+ ref={ref}
129
+ className={rootClassName}
130
+ onPress={handlePress}
131
+ onPressIn={handlePressIn}
132
+ onPressOut={handlePressOut}
133
+ disabled={isDisabled}
134
+ {...restProps}
135
+ >
136
+ {content}
137
+ </Pressable>
138
+ </ControlFieldProvider>
139
+ </FormFieldProvider>
140
+ </AnimationSettingsProvider>
141
+ );
142
+ }
143
+ );
144
+
145
+ // --------------------------------------------------
146
+
147
+ const ControlFieldIndicator = forwardRef<View, ControlFieldIndicatorProps>(
148
+ (props, ref) => {
149
+ const { children, className, variant = 'switch', ...restProps } = props;
150
+ const { isSelected, onSelectedChange, isDisabled, isInvalid } =
151
+ useControlField();
152
+
153
+ const indicatorClassName = controlFieldClassNames.indicator({
154
+ className,
155
+ });
156
+
157
+ const enhancedChildren = useMemo(() => {
158
+ if (children) {
159
+ if (typeof children !== 'object') return children;
160
+
161
+ const child = children as React.ReactElement;
162
+
163
+ return cloneElement(child, {
164
+ // Only pass props from context if child doesn't already have them
165
+ ...(isSelected !== undefined &&
166
+ !hasProp(child, 'isSelected') && { isSelected }),
167
+ ...(onSelectedChange &&
168
+ !hasProp(child, 'onSelectedChange') && { onSelectedChange }),
169
+ ...(isDisabled !== undefined &&
170
+ !hasProp(child, 'isDisabled') && { isDisabled }),
171
+ ...(isInvalid !== undefined &&
172
+ !hasProp(child, 'isInvalid') && { isInvalid }),
173
+ });
174
+ }
175
+
176
+ // Render default component based on variant when no children provided
177
+ if (variant === 'checkbox') {
178
+ return (
179
+ <Checkbox
180
+ isSelected={isSelected}
181
+ onSelectedChange={onSelectedChange}
182
+ isDisabled={isDisabled}
183
+ isInvalid={isInvalid}
184
+ />
185
+ );
186
+ }
187
+
188
+ if (variant === 'radio') {
189
+ return (
190
+ <Radio
191
+ isSelected={isSelected}
192
+ onSelectedChange={onSelectedChange}
193
+ isDisabled={isDisabled}
194
+ isInvalid={isInvalid}
195
+ />
196
+ );
197
+ }
198
+
199
+ return (
200
+ <Switch
201
+ isSelected={isSelected}
202
+ onSelectedChange={onSelectedChange}
203
+ isDisabled={isDisabled}
204
+ />
205
+ );
206
+ }, [
207
+ children,
208
+ variant,
209
+ isSelected,
210
+ onSelectedChange,
211
+ isDisabled,
212
+ isInvalid,
213
+ ]);
214
+
215
+ return (
216
+ <View ref={ref} className={indicatorClassName} {...restProps}>
217
+ {enhancedChildren}
218
+ </View>
219
+ );
220
+ }
221
+ );
222
+
223
+ // --------------------------------------------------
224
+
225
+ ControlField.displayName = DISPLAY_NAME.CONTROL_FIELD;
226
+ ControlFieldIndicator.displayName = DISPLAY_NAME.CONTROL_FIELD_INDICATOR;
227
+
228
+ /**
229
+ * Compound ControlField component with sub-components
230
+ *
231
+ * @component ControlField - Wrapper that provides consistent layout and interaction for form controls.
232
+ * Handles press events to toggle selection state and manages disabled states.
233
+ *
234
+ * @component ControlField.Indicator - Container for the control component (Switch, Checkbox, Radio).
235
+ * Automatically passes down isSelected, onSelectedChange, isDisabled, and isInvalid props.
236
+ *
237
+ * Props flow from ControlField to sub-components via context.
238
+ */
239
+ const CompoundControlField = Object.assign(ControlField, {
240
+ /** @optional Container for control component */
241
+ Indicator: ControlFieldIndicator,
242
+ });
243
+
244
+ export { useControlField } from './control-field.context';
245
+ export default CompoundControlField;
@@ -0,0 +1,67 @@
1
+ import type { PressableProps, ViewProps } from 'react-native';
2
+ import type { SharedValue } from 'react-native-reanimated';
3
+ import type { AnimationRootDisableAll } from '../../helpers/internal/types';
4
+
5
+ /**
6
+ * Render function props for control field children
7
+ */
8
+ export type ControlFieldRenderProps = Pick<
9
+ ControlFieldProps,
10
+ 'isSelected' | 'isDisabled' | 'isInvalid'
11
+ >;
12
+
13
+ /**
14
+ * ControlField component props
15
+ */
16
+ export interface ControlFieldProps extends Omit<PressableProps, 'children'> {
17
+ /** Content to render inside the form control, or a render function */
18
+ children?:
19
+ | React.ReactNode
20
+ | ((props: ControlFieldRenderProps) => React.ReactNode);
21
+
22
+ /** Custom class name for the root element */
23
+ className?: string;
24
+
25
+ /** Whether the control is selected/checked @default undefined */
26
+ isSelected?: boolean;
27
+
28
+ /** Whether the form control is disabled @default false */
29
+ isDisabled?: boolean;
30
+
31
+ /** Whether the form control is invalid @default false */
32
+ isInvalid?: boolean;
33
+
34
+ /** Whether the form control is required @default false */
35
+ isRequired?: boolean;
36
+
37
+ /** Callback when selection state changes */
38
+ onSelectedChange?: (isSelected: boolean) => void;
39
+
40
+ /** Animation configuration. Use `"disable-all"` to disable all animations including children */
41
+ animation?: AnimationRootDisableAll;
42
+ }
43
+
44
+ /**
45
+ * Props for the ControlFieldIndicator component
46
+ */
47
+ export interface ControlFieldIndicatorProps extends ViewProps {
48
+ /** Control component to render (Switch, Checkbox) */
49
+ children?: React.ReactNode;
50
+
51
+ /** Custom class name for the indicator element */
52
+ className?: string;
53
+
54
+ /** Variant of the control to render when no children provided @default 'switch' */
55
+ variant?: 'checkbox' | 'radio' | 'switch';
56
+ }
57
+
58
+ /**
59
+ * Context value for form control components
60
+ */
61
+ export interface ControlFieldContextValue
62
+ extends Pick<
63
+ ControlFieldProps,
64
+ 'isSelected' | 'onSelectedChange' | 'isDisabled' | 'isInvalid'
65
+ > {
66
+ isPressed: SharedValue<boolean>;
67
+ }
@@ -0,0 +1,6 @@
1
+ export { default as ControlField, useControlField } from './control-field';
2
+ export { controlFieldClassNames } from './control-field.styles';
3
+ export type {
4
+ ControlFieldIndicatorProps,
5
+ ControlFieldProps,
6
+ } from './control-field.types';
@@ -0,0 +1,53 @@
1
+ import { useCombinedAnimationDisabledState } from '../../helpers/internal/hooks';
2
+ import {
3
+ getAnimationValueProperty,
4
+ getIsAnimationDisabledValue,
5
+ getRootAnimationState,
6
+ } from '../../helpers/internal/utils';
7
+ import {
8
+ ENTERING_ANIMATION_CONFIG,
9
+ EXITING_ANIMATION_CONFIG,
10
+ } from './description.constants';
11
+ import type { DescriptionAnimation } from './description.types';
12
+
13
+ // --------------------------------------------------
14
+
15
+ /**
16
+ * Animation hook for Description component
17
+ * Handles entering and exiting animations for the description text
18
+ */
19
+ export function useDescriptionAnimation(options: {
20
+ animation: DescriptionAnimation | undefined;
21
+ hideOnInvalid: boolean;
22
+ }) {
23
+ const { animation, hideOnInvalid } = options;
24
+
25
+ const { animationConfig, isAnimationDisabled } =
26
+ getRootAnimationState(animation);
27
+
28
+ const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
29
+
30
+ const isAnimationDisabledValue = getIsAnimationDisabledValue({
31
+ isAnimationDisabled,
32
+ isAllAnimationsDisabled,
33
+ });
34
+
35
+ const enteringValue = getAnimationValueProperty({
36
+ animationValue: animationConfig?.entering,
37
+ property: 'value',
38
+ defaultValue: ENTERING_ANIMATION_CONFIG,
39
+ });
40
+
41
+ const exitingValue = getAnimationValueProperty({
42
+ animationValue: animationConfig?.exiting,
43
+ property: 'value',
44
+ defaultValue: EXITING_ANIMATION_CONFIG,
45
+ });
46
+
47
+ return {
48
+ entering:
49
+ isAnimationDisabledValue || !hideOnInvalid ? undefined : enteringValue,
50
+ exiting:
51
+ isAnimationDisabledValue || !hideOnInvalid ? undefined : exitingValue,
52
+ };
53
+ }
@@ -0,0 +1,30 @@
1
+ import { Easing, FadeIn, FadeOut } from 'react-native-reanimated';
2
+
3
+ /**
4
+ * Display names for Description components
5
+ */
6
+ export const DISPLAY_NAME = {
7
+ DESCRIPTION: 'HeroUINative.Description',
8
+ } as const;
9
+
10
+ /**
11
+ * Animation duration for description transitions
12
+ */
13
+ export const ANIMATION_DURATION = 150;
14
+
15
+ /**
16
+ * Animation easing function for description transitions
17
+ */
18
+ export const ANIMATION_EASING = Easing.out(Easing.ease);
19
+
20
+ /**
21
+ * Animation configuration for entering transitions
22
+ */
23
+ export const ENTERING_ANIMATION_CONFIG =
24
+ FadeIn.duration(ANIMATION_DURATION).easing(ANIMATION_EASING);
25
+
26
+ /**
27
+ * Animation configuration for exiting transitions
28
+ */
29
+ export const EXITING_ANIMATION_CONFIG =
30
+ FadeOut.duration(ANIMATION_DURATION).easing(ANIMATION_EASING);