@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,311 @@
1
+ # Checkbox
2
+
3
+ A selectable control that allows users to toggle between checked and unchecked states.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Checkbox } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <Checkbox>
15
+ <Checkbox.Indicator>...</Checkbox.Indicator>
16
+ </Checkbox>
17
+ ```
18
+
19
+ - **Checkbox**: Main container that handles selection state and user interaction. Renders default indicator with animated checkmark if no children provided. Automatically detects surface context for proper styling. Features press scale animation that can be customized or disabled. Supports render function children to access state (`isSelected`, `isInvalid`, `isDisabled`).
20
+ - **Checkbox.Indicator**: Optional checkmark container with default slide, scale, opacity, and border radius animations when selected. Renders animated check icon with SVG path drawing animation if no children provided. All animations can be individually customized or disabled. Supports render function children to access state.
21
+
22
+ ## Usage
23
+
24
+ ### Basic Usage
25
+
26
+ The Checkbox component renders with a default animated indicator if no children are provided. It automatically detects whether it's on a surface background for proper styling.
27
+
28
+ ```tsx
29
+ <Checkbox isSelected={isSelected} onSelectedChange={setIsSelected} />
30
+ ```
31
+
32
+ ### With Custom Indicator
33
+
34
+ Use a render function in the Indicator to show/hide custom icons based on state.
35
+
36
+ ```tsx
37
+ <Checkbox isSelected={isSelected} onSelectedChange={setIsSelected}>
38
+ <Checkbox.Indicator>
39
+ {({ isSelected }) => (isSelected ? <CheckIcon /> : null)}
40
+ </Checkbox.Indicator>
41
+ </Checkbox>
42
+ ```
43
+
44
+ ### Invalid State
45
+
46
+ Show validation errors with the `isInvalid` prop, which applies danger color styling.
47
+
48
+ ```tsx
49
+ <Checkbox
50
+ isSelected={isSelected}
51
+ onSelectedChange={setIsSelected}
52
+ isInvalid={hasError}
53
+ />
54
+ ```
55
+
56
+ ### Custom Animations
57
+
58
+ Customize or disable animations for both the root checkbox and indicator.
59
+
60
+ ```tsx
61
+ {
62
+ /* Disable all animations (root and indicator) */
63
+ }
64
+ <Checkbox
65
+ animation="disable-all"
66
+ isSelected={isSelected}
67
+ onSelectedChange={setIsSelected}
68
+ >
69
+ <Checkbox.Indicator />
70
+ </Checkbox>;
71
+
72
+ {
73
+ /* Disable only root animation */
74
+ }
75
+ <Checkbox
76
+ animation="disabled"
77
+ isSelected={isSelected}
78
+ onSelectedChange={setIsSelected}
79
+ >
80
+ <Checkbox.Indicator />
81
+ </Checkbox>;
82
+
83
+ {
84
+ /* Disable only indicator animation */
85
+ }
86
+ <Checkbox isSelected={isSelected} onSelectedChange={setIsSelected}>
87
+ <Checkbox.Indicator animation="disabled" />
88
+ </Checkbox>;
89
+
90
+ {
91
+ /* Custom animation configuration */
92
+ }
93
+ <Checkbox
94
+ animation={{ scale: { value: [1, 0.9], timingConfig: { duration: 200 } } }}
95
+ isSelected={isSelected}
96
+ onSelectedChange={setIsSelected}
97
+ >
98
+ <Checkbox.Indicator
99
+ animation={{
100
+ scale: { value: [0.5, 1] },
101
+ opacity: { value: [0, 1] },
102
+ translateX: { value: [-8, 0] },
103
+ borderRadius: { value: [12, 0] },
104
+ }}
105
+ />
106
+ </Checkbox>;
107
+ ```
108
+
109
+ ## Example
110
+
111
+ ```tsx
112
+ import {
113
+ Checkbox,
114
+ Description,
115
+ ControlField,
116
+ Label,
117
+ Separator,
118
+ Surface,
119
+ } from '@/heroui';
120
+ import React from 'react';
121
+ import { View, Text } from 'react-native';
122
+
123
+ interface CheckboxFieldProps {
124
+ isSelected: boolean;
125
+ onSelectedChange: (value: boolean) => void;
126
+ title: string;
127
+ description: string;
128
+ }
129
+
130
+ const CheckboxField: React.FC<CheckboxFieldProps> = ({
131
+ isSelected,
132
+ onSelectedChange,
133
+ title,
134
+ description,
135
+ }) => {
136
+ return (
137
+ <ControlField isSelected={isSelected} onSelectedChange={onSelectedChange}>
138
+ <ControlField.Indicator>
139
+ <Checkbox className="mt-0.5" />
140
+ </ControlField.Indicator>
141
+ <View className="flex-1">
142
+ <Label className="text-lg">{title}</Label>
143
+ <Description className="text-base">{description}</Description>
144
+ </View>
145
+ </ControlField>
146
+ );
147
+ };
148
+
149
+ export default function BasicUsage() {
150
+ const [fields, setFields] = React.useState({
151
+ newsletter: true,
152
+ marketing: false,
153
+ terms: false,
154
+ });
155
+
156
+ const fieldConfigs: Record<
157
+ keyof typeof fields,
158
+ { title: string; description: string }
159
+ > = {
160
+ newsletter: {
161
+ title: 'Subscribe to newsletter',
162
+ description: 'Get weekly updates about new features and tips',
163
+ },
164
+ marketing: {
165
+ title: 'Marketing communications',
166
+ description: 'Receive promotional emails and special offers',
167
+ },
168
+ terms: {
169
+ title: 'Accept terms and conditions',
170
+ description: 'Agree to our Terms of Service and Privacy Policy',
171
+ },
172
+ };
173
+
174
+ const handleFieldChange = (key: keyof typeof fields) => (value: boolean) => {
175
+ setFields((prev) => ({ ...prev, [key]: value }));
176
+ };
177
+
178
+ const fieldKeys = Object.keys(fields) as Array<keyof typeof fields>;
179
+
180
+ return (
181
+ <View className="flex-1 items-center justify-center px-5">
182
+ <Surface className="py-5 w-full">
183
+ {fieldKeys.map((key, index) => (
184
+ <React.Fragment key={key}>
185
+ {index > 0 && <Separator className="my-4" />}
186
+ <CheckboxField
187
+ isSelected={fields[key]}
188
+ onSelectedChange={handleFieldChange(key)}
189
+ title={fieldConfigs[key].title}
190
+ description={fieldConfigs[key].description}
191
+ />
192
+ </React.Fragment>
193
+ ))}
194
+ </Surface>
195
+ </View>
196
+ );
197
+ }
198
+ ```
199
+
200
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/checkbox.tsx>).
201
+
202
+ ## API Reference
203
+
204
+ ### Checkbox
205
+
206
+ | prop | type | default | description |
207
+ | ----------------------- | ---------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------- |
208
+ | `children` | `React.ReactNode \| ((props: CheckboxRenderProps) => React.ReactNode)` | `undefined` | Child elements or render function to customize the checkbox |
209
+ | `isSelected` | `boolean` | `undefined` | Whether the checkbox is currently selected |
210
+ | `onSelectedChange` | `(isSelected: boolean) => void` | `undefined` | Callback fired when the checkbox selection state changes |
211
+ | `isDisabled` | `boolean` | `false` | Whether the checkbox is disabled and cannot be interacted with |
212
+ | `isInvalid` | `boolean` | `false` | Whether the checkbox is invalid (shows danger color) |
213
+ | `variant` | `'primary' \| 'secondary'` | `'primary'` | Variant style for the checkbox |
214
+ | `hitSlop` | `number` | `6` | Hit slop for the pressable area |
215
+ | `animation` | `CheckboxRootAnimation` | - | Animation configuration |
216
+ | `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
217
+ | `className` | `string` | `undefined` | Additional CSS classes to apply |
218
+ | `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported (except disabled) |
219
+
220
+ #### CheckboxRenderProps
221
+
222
+ | prop | type | description |
223
+ | ------------ | --------- | -------------------------------- |
224
+ | `isSelected` | `boolean` | Whether the checkbox is selected |
225
+ | `isInvalid` | `boolean` | Whether the checkbox is invalid |
226
+ | `isDisabled` | `boolean` | Whether the checkbox is disabled |
227
+
228
+ #### CheckboxRootAnimation
229
+
230
+ Animation configuration for checkbox root component. Can be:
231
+
232
+ - `false` or `"disabled"`: Disable only root animations
233
+ - `"disable-all"`: Disable all animations including children
234
+ - `true` or `undefined`: Use default animations
235
+ - `object`: Custom animation configuration
236
+
237
+ | prop | type | default | description |
238
+ | -------------------- | ---------------------------------------- | ------------------- | ----------------------------------------------- |
239
+ | `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
240
+ | `scale.value` | `[number, number]` | `[1, 0.96]` | Scale values [unpressed, pressed] |
241
+ | `scale.timingConfig` | `WithTimingConfig` | `{ duration: 150 }` | Animation timing configuration |
242
+
243
+ ### Checkbox.Indicator
244
+
245
+ | prop | type | default | description |
246
+ | ----------------------- | ---------------------------------------------------------------------- | ----------- | ------------------------------------------------------------ |
247
+ | `children` | `React.ReactNode \| ((props: CheckboxRenderProps) => React.ReactNode)` | `undefined` | Content or render function for the checkbox indicator |
248
+ | `className` | `string` | `undefined` | Additional CSS classes for the indicator |
249
+ | `iconProps` | `CheckboxIndicatorIconProps` | `undefined` | Custom props for the default animated check icon |
250
+ | `animation` | `CheckboxIndicatorAnimation` | - | Animation configuration |
251
+ | `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
252
+ | `...AnimatedViewProps` | `AnimatedProps<ViewProps>` | - | All standard React Native Animated View props are supported |
253
+
254
+ #### CheckboxIndicatorIconProps
255
+
256
+ Props for customizing the default animated check icon.
257
+
258
+ | prop | type | description |
259
+ | --------------- | -------- | ------------------------------------------------ |
260
+ | `size` | `number` | Icon size |
261
+ | `strokeWidth` | `number` | Icon stroke width |
262
+ | `color` | `string` | Icon color (defaults to theme accent-foreground) |
263
+ | `enterDuration` | `number` | Duration of enter animation (check appearing) |
264
+ | `exitDuration` | `number` | Duration of exit animation (check disappearing) |
265
+
266
+ #### CheckboxIndicatorAnimation
267
+
268
+ Animation configuration for checkbox indicator component. Can be:
269
+
270
+ - `false` or `"disabled"`: Disable all animations
271
+ - `true` or `undefined`: Use default animations
272
+ - `object`: Custom animation configuration
273
+
274
+ | prop | type | default | description |
275
+ | --------------------------- | ----------------------- | ------------------- | ----------------------------------------------- |
276
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
277
+ | `opacity.value` | `[number, number]` | `[0, 1]` | Opacity values [unselected, selected] |
278
+ | `opacity.timingConfig` | `WithTimingConfig` | `{ duration: 100 }` | Animation timing configuration |
279
+ | `borderRadius.value` | `[number, number]` | `[8, 0]` | Border radius values [unselected, selected] |
280
+ | `borderRadius.timingConfig` | `WithTimingConfig` | `{ duration: 50 }` | Animation timing configuration |
281
+ | `translateX.value` | `[number, number]` | `[-4, 0]` | TranslateX values [unselected, selected] |
282
+ | `translateX.timingConfig` | `WithTimingConfig` | `{ duration: 100 }` | Animation timing configuration |
283
+ | `scale.value` | `[number, number]` | `[0.8, 1]` | Scale values [unselected, selected] |
284
+ | `scale.timingConfig` | `WithTimingConfig` | `{ duration: 100 }` | Animation timing configuration |
285
+
286
+ ## Hooks
287
+
288
+ ### useCheckbox
289
+
290
+ Hook to access checkbox context values within custom components or compound components.
291
+
292
+ ```tsx
293
+ import { useCheckbox } from '@/heroui';
294
+
295
+ const CustomIndicator = () => {
296
+ const { isSelected, isInvalid, isDisabled } = useCheckbox();
297
+ // ... your implementation
298
+ };
299
+ ```
300
+
301
+ **Returns:** `UseCheckboxReturn`
302
+
303
+ | property | type | description |
304
+ | ------------------ | ---------------------------------------------- | -------------------------------------------------------------- |
305
+ | `isSelected` | `boolean \| undefined` | Whether the checkbox is currently selected |
306
+ | `onSelectedChange` | `((isSelected: boolean) => void) \| undefined` | Callback function to change the checkbox selection state |
307
+ | `isDisabled` | `boolean` | Whether the checkbox is disabled and cannot be interacted with |
308
+ | `isInvalid` | `boolean` | Whether the checkbox is invalid (shows danger color) |
309
+ | `nativeID` | `string \| undefined` | Native ID for the checkbox element |
310
+
311
+ **Note:** This hook must be used within a `Checkbox` component. It will throw an error if called outside of the checkbox context.
@@ -0,0 +1,105 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { tv } from 'tailwind-variants';
3
+ import { combineStyles } from '../../helpers/internal/utils';
4
+
5
+ /**
6
+ * Root style definition
7
+ *
8
+ * @note ANIMATED PROPERTIES (cannot be set via className):
9
+ * The following property is animated and cannot be overridden using Tailwind classes:
10
+ * - `transform` (specifically `scale`) - Animated for press feedback transitions (unpressed: 1, pressed: 0.96)
11
+ *
12
+ * To customize this property, use the `animation` prop on `Checkbox`:
13
+ * ```tsx
14
+ * <Checkbox
15
+ * animation={{
16
+ * scale: { value: [1, 0.96], timingConfig: { duration: 150 } }
17
+ * }}
18
+ * />
19
+ * ```
20
+ *
21
+ * To completely disable animated styles and apply your own via className or style prop,
22
+ * set `isAnimatedStyleActive={false}` on `Checkbox`.
23
+ */
24
+ const root = tv({
25
+ base: 'size-6 rounded-lg overflow-hidden',
26
+ variants: {
27
+ variant: {
28
+ primary: 'bg-field shadow-field',
29
+ secondary: 'bg-default',
30
+ },
31
+ isSelected: {
32
+ true: '',
33
+ false: '',
34
+ },
35
+ isDisabled: {
36
+ true: 'opacity-disabled pointer-events-none',
37
+ false: '',
38
+ },
39
+ isInvalid: {
40
+ true: 'border border-danger',
41
+ false: 'border-0',
42
+ },
43
+ },
44
+ compoundVariants: [
45
+ {
46
+ isSelected: false,
47
+ isInvalid: true,
48
+ className: 'bg-transparent',
49
+ },
50
+ ],
51
+ defaultVariants: {
52
+ variant: 'primary',
53
+ isSelected: false,
54
+ isDisabled: false,
55
+ isInvalid: false,
56
+ },
57
+ });
58
+
59
+ /**
60
+ * Indicator style definition
61
+ *
62
+ * @note ANIMATED PROPERTIES (cannot be set via className):
63
+ * The following properties are animated and cannot be overridden using Tailwind classes:
64
+ * - `opacity` - Animated for selection transitions (unselected: 0, selected: 1)
65
+ * - `borderRadius` - Animated for selection transitions (unselected: 8, selected: 0)
66
+ * - `transform` (specifically `translateX` and `scale`) - Animated for selection transitions (translateX: unselected: -4, selected: 0; scale: unselected: 0.8, selected: 1)
67
+ *
68
+ * To customize these properties, use the `animation` prop on `Checkbox.Indicator`:
69
+ * ```tsx
70
+ * <Checkbox.Indicator
71
+ * animation={{
72
+ * opacity: { value: [0, 1], timingConfig: { duration: 100 } },
73
+ * borderRadius: { value: [8, 0], timingConfig: { duration: 50 } },
74
+ * translateX: { value: [-4, 0], timingConfig: { duration: 100 } },
75
+ * scale: { value: [0.8, 1], timingConfig: { duration: 100 } }
76
+ * }}
77
+ * />
78
+ * ```
79
+ *
80
+ * To completely disable animated styles and apply your own via className or style prop,
81
+ * set `isAnimatedStyleActive={false}` on `Checkbox.Indicator`.
82
+ */
83
+ const indicator = tv({
84
+ base: 'absolute inset-0 items-center justify-center',
85
+ variants: {
86
+ isInvalid: {
87
+ true: 'bg-danger',
88
+ false: 'bg-accent',
89
+ },
90
+ },
91
+ defaultVariants: {
92
+ isInvalid: false,
93
+ },
94
+ });
95
+
96
+ export const checkboxClassNames = combineStyles({
97
+ root,
98
+ indicator,
99
+ });
100
+
101
+ export const checkboxStyleSheet = StyleSheet.create({
102
+ root: {
103
+ borderCurve: 'continuous',
104
+ },
105
+ });
@@ -0,0 +1,251 @@
1
+ import { forwardRef, useCallback, useMemo } from 'react';
2
+ import { View, type GestureResponderEvent } from 'react-native';
3
+ import Animated from 'react-native-reanimated';
4
+ import { useIsOnSurface, useThemeColor } from '../../helpers/external/hooks';
5
+ import {
6
+ AnimatedCheckIcon,
7
+ CheckIcon,
8
+ } from '../../helpers/internal/components';
9
+ import { AnimationSettingsProvider } from '../../helpers/internal/contexts';
10
+ import * as CheckboxPrimitives from '../../primitives/checkbox';
11
+ import * as CheckboxPrimitivesTypes from '../../primitives/checkbox/checkbox.types';
12
+ import {
13
+ CheckboxAnimationProvider,
14
+ useCheckboxIndicatorAnimation,
15
+ useCheckboxRootAnimation,
16
+ } from './checkbox.animation';
17
+ import { DEFAULT_HIT_SLOP, DISPLAY_NAME } from './checkbox.constants';
18
+ import { checkboxClassNames, checkboxStyleSheet } from './checkbox.styles';
19
+ import type {
20
+ CheckboxIndicatorProps,
21
+ CheckboxProps,
22
+ CheckboxRenderProps,
23
+ } from './checkbox.types';
24
+
25
+ const AnimatedRootView = Animated.createAnimatedComponent(
26
+ CheckboxPrimitives.Root
27
+ );
28
+
29
+ const AnimatedIndicatorView = Animated.createAnimatedComponent(
30
+ CheckboxPrimitives.Indicator
31
+ );
32
+
33
+ const useCheckbox = CheckboxPrimitives.useCheckboxContext;
34
+
35
+ // --------------------------------------------------
36
+
37
+ const CheckboxRoot = forwardRef<CheckboxPrimitivesTypes.RootRef, CheckboxProps>(
38
+ (props, ref) => {
39
+ const {
40
+ children,
41
+ isSelected,
42
+ onSelectedChange,
43
+ isDisabled = false,
44
+ isInvalid = false,
45
+ variant,
46
+ hitSlop = DEFAULT_HIT_SLOP,
47
+ className,
48
+ style,
49
+ onPressIn,
50
+ onPressOut,
51
+ animation,
52
+ isAnimatedStyleActive = true,
53
+ ...restProps
54
+ } = props;
55
+
56
+ const isOnSurfaceAutoDetected = useIsOnSurface();
57
+ const finalVariant =
58
+ variant !== undefined
59
+ ? variant
60
+ : isOnSurfaceAutoDetected
61
+ ? 'secondary'
62
+ : 'primary';
63
+
64
+ const rootClassName = checkboxClassNames.root({
65
+ variant: finalVariant,
66
+ isSelected,
67
+ isDisabled,
68
+ isInvalid,
69
+ className,
70
+ });
71
+
72
+ const { rContainerStyle, isCheckboxPressed, isAllAnimationsDisabled } =
73
+ useCheckboxRootAnimation({
74
+ animation,
75
+ });
76
+
77
+ const rootStyle = isAnimatedStyleActive
78
+ ? [rContainerStyle, checkboxStyleSheet.root, style]
79
+ : [checkboxStyleSheet.root, style];
80
+
81
+ const animationContextValue = useMemo(
82
+ () => ({
83
+ isCheckboxPressed,
84
+ }),
85
+ [isCheckboxPressed]
86
+ );
87
+
88
+ const animationSettingsContextValue = useMemo(
89
+ () => ({
90
+ isAllAnimationsDisabled,
91
+ }),
92
+ [isAllAnimationsDisabled]
93
+ );
94
+
95
+ const handlePressIn = useCallback(
96
+ (event: GestureResponderEvent) => {
97
+ isCheckboxPressed.set(true);
98
+ onPressIn?.(event);
99
+ },
100
+ [isCheckboxPressed, onPressIn]
101
+ );
102
+
103
+ const handlePressOut = useCallback(
104
+ (event: GestureResponderEvent) => {
105
+ isCheckboxPressed.set(false);
106
+ onPressOut?.(event);
107
+ },
108
+ [isCheckboxPressed, onPressOut]
109
+ );
110
+
111
+ const renderProps: CheckboxRenderProps = {
112
+ isSelected,
113
+ isInvalid,
114
+ isDisabled,
115
+ };
116
+
117
+ const content =
118
+ typeof children === 'function'
119
+ ? children(renderProps)
120
+ : (children ?? <CheckboxIndicator />);
121
+
122
+ return (
123
+ <AnimationSettingsProvider value={animationSettingsContextValue}>
124
+ <CheckboxAnimationProvider value={animationContextValue}>
125
+ <AnimatedRootView
126
+ ref={ref}
127
+ className={rootClassName}
128
+ isSelected={isSelected}
129
+ onSelectedChange={onSelectedChange}
130
+ isDisabled={isDisabled}
131
+ isInvalid={isInvalid}
132
+ hitSlop={hitSlop}
133
+ onPressIn={handlePressIn}
134
+ onPressOut={handlePressOut}
135
+ style={rootStyle}
136
+ {...restProps}
137
+ >
138
+ {content}
139
+ </AnimatedRootView>
140
+ </CheckboxAnimationProvider>
141
+ </AnimationSettingsProvider>
142
+ );
143
+ }
144
+ );
145
+
146
+ // --------------------------------------------------
147
+
148
+ const CheckboxIndicator = forwardRef<
149
+ CheckboxPrimitivesTypes.IndicatorRef,
150
+ CheckboxIndicatorProps
151
+ >((props, ref) => {
152
+ const {
153
+ children,
154
+ iconProps,
155
+ className,
156
+ style,
157
+ animation,
158
+ isAnimatedStyleActive = true,
159
+ ...restProps
160
+ } = props;
161
+
162
+ const { isSelected, isDisabled, isInvalid } = useCheckbox();
163
+
164
+ const themeColorAccentForeground = useThemeColor('accent-foreground');
165
+
166
+ const iconSize = iconProps?.size;
167
+ const iconStrokeWidth = iconProps?.strokeWidth;
168
+ const iconColor = iconProps?.color ?? themeColorAccentForeground;
169
+ const iconEnterDuration = iconProps?.enterDuration;
170
+ const iconExitDuration = iconProps?.exitDuration;
171
+
172
+ const indicatorClassName = checkboxClassNames.indicator({
173
+ isInvalid,
174
+ className,
175
+ });
176
+
177
+ const { rContainerStyle, isAnimationDisabled } =
178
+ useCheckboxIndicatorAnimation({
179
+ animation,
180
+ isSelected,
181
+ });
182
+
183
+ const indicatorStyle = isAnimatedStyleActive
184
+ ? [rContainerStyle, style]
185
+ : style;
186
+
187
+ const renderProps: CheckboxRenderProps = {
188
+ isSelected,
189
+ isInvalid: isInvalid ?? false,
190
+ isDisabled: isDisabled ?? false,
191
+ };
192
+
193
+ const content =
194
+ typeof children === 'function'
195
+ ? children(renderProps)
196
+ : (children ??
197
+ (isAnimationDisabled ? (
198
+ <View className="translate-y-px">
199
+ <CheckIcon size={iconSize} color={iconColor} />
200
+ </View>
201
+ ) : (
202
+ <AnimatedCheckIcon
203
+ size={iconSize}
204
+ strokeWidth={iconStrokeWidth}
205
+ color={iconColor}
206
+ isSelected={isSelected}
207
+ enterDuration={iconEnterDuration}
208
+ exitDuration={iconExitDuration}
209
+ />
210
+ )));
211
+
212
+ return (
213
+ <AnimatedIndicatorView
214
+ ref={ref}
215
+ className={indicatorClassName}
216
+ style={indicatorStyle}
217
+ {...restProps}
218
+ >
219
+ {content}
220
+ </AnimatedIndicatorView>
221
+ );
222
+ });
223
+
224
+ // --------------------------------------------------
225
+
226
+ CheckboxRoot.displayName = DISPLAY_NAME.CHECKBOX_ROOT;
227
+ CheckboxIndicator.displayName = DISPLAY_NAME.CHECKBOX_INDICATOR;
228
+
229
+ /**
230
+ * Compound Checkbox component with sub-components
231
+ *
232
+ * @component Checkbox - Main container that handles selection state and user interaction.
233
+ * Renders default indicator with checkmark if no children provided.
234
+ * Animates background and border color based on selection state.
235
+ *
236
+ * @component Checkbox.Indicator - Optional checkmark container that scales in when selected.
237
+ * Renders default check icon if no children provided. Handles enter/exit animations
238
+ * and can be replaced with custom indicators.
239
+ *
240
+ * Props flow from Checkbox to sub-components via context (isSelected).
241
+ * The checkbox supports controlled and uncontrolled modes through isSelected/onSelectedChange.
242
+ *
243
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/checkbox
244
+ */
245
+ const CompoundCheckbox = Object.assign(CheckboxRoot, {
246
+ /** @optional Custom indicator with scale animations */
247
+ Indicator: CheckboxIndicator,
248
+ });
249
+
250
+ export { useCheckbox };
251
+ export default CompoundCheckbox;