@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,48 @@
1
+ import type { ReactNode } from 'react';
2
+ import { Platform } from 'react-native';
3
+ import { FullWindowOverlay as NativeFullWindowOverlay } from 'react-native-screens';
4
+
5
+ /**
6
+ * Props for the FullWindowOverlay component
7
+ *
8
+ * @description
9
+ * FullWindowOverlay renders content in a separate native window on iOS,
10
+ * which allows overlays (bottom sheets, dialogs, toasts) to appear above
11
+ * native modals and the keyboard. However, this breaks the React Native
12
+ * element inspector because it attaches to the main window.
13
+ *
14
+ * Set `disableFullWindowOverlay={true}` when you need to use the element
15
+ * inspector during development. Note: when disabled, overlay content will
16
+ * not render above native modals. iOS only; has no effect on Android.
17
+ */
18
+ export interface FullWindowOverlayProps {
19
+ /**
20
+ * When true, uses a regular View instead of FullWindowOverlay on iOS.
21
+ * Enables element inspector but overlay content won't appear above native modals.
22
+ * @default false
23
+ */
24
+ disableFullWindowOverlay: boolean;
25
+ /**
26
+ * Content to render inside the overlay
27
+ */
28
+ children: ReactNode;
29
+ }
30
+
31
+ /**
32
+ * Wrapper for react-native-screens FullWindowOverlay with optional disable prop.
33
+ *
34
+ * @description
35
+ * On iOS, FullWindowOverlay creates a separate native window for overlay content,
36
+ * which breaks the React Native element inspector. Use `disableFullWindowOverlay`
37
+ * when debugging to render content in the main window instead.
38
+ */
39
+ export function FullWindowOverlay({
40
+ disableFullWindowOverlay,
41
+ children,
42
+ }: FullWindowOverlayProps) {
43
+ if (Platform.OS !== 'ios' || disableFullWindowOverlay) {
44
+ return <>{children}</>;
45
+ }
46
+
47
+ return <NativeFullWindowOverlay>{children}</NativeFullWindowOverlay>;
48
+ }
@@ -0,0 +1,71 @@
1
+ import React from 'react';
2
+ import { Text as RNText, type TextProps as RNTextProps } from 'react-native';
3
+ import { useTextComponent } from '../../external/hooks';
4
+ import { cn } from '../../external/utils';
5
+
6
+ /**
7
+ * Props for HeroText component
8
+ */
9
+ export interface HeroTextProps extends RNTextProps {
10
+ /**
11
+ * Additional CSS classes that will be merged with the default 'font-normal' class
12
+ */
13
+ className?: string;
14
+ }
15
+
16
+ /**
17
+ * HeroText component that automatically applies global text configuration
18
+ * from HeroUINativeProvider.
19
+ *
20
+ * This component is distinct from React Native's Text component and includes
21
+ * a default 'font-normal' className that can be extended via the className prop.
22
+ *
23
+ * Global text props that can be configured:
24
+ * - adjustsFontSizeToFit: Auto-scale text to fit constraints
25
+ * - allowFontScaling: Respect Text Size accessibility settings
26
+ * - maxFontSizeMultiplier: Maximum font scale when allowFontScaling is enabled
27
+ * - minimumFontScale: Minimum scale when adjustsFontSizeToFit is enabled (iOS only)
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <HeroText>Hello World</HeroText>
32
+ * ```
33
+ *
34
+ * @example
35
+ * With custom className:
36
+ * ```tsx
37
+ * <HeroText className="text-lg font-bold">Hello World</HeroText>
38
+ * ```
39
+ *
40
+ * @example
41
+ * Global configuration in HeroUINativeProvider:
42
+ * ```tsx
43
+ * <HeroUINativeProvider config={{
44
+ * textProps: {
45
+ * allowFontScaling: false,
46
+ * adjustsFontSizeToFit: false,
47
+ * maxFontSizeMultiplier: 1.5
48
+ * }
49
+ * }}>
50
+ * <App />
51
+ * </HeroUINativeProvider>
52
+ * ```
53
+ */
54
+ export const HeroText = React.forwardRef<RNText, HeroTextProps>(
55
+ (props, ref) => {
56
+ const { className, ...restProps } = props;
57
+ const { textProps } = useTextComponent();
58
+
59
+ const mergedProps = Object.assign({}, textProps, restProps);
60
+
61
+ return (
62
+ <RNText
63
+ ref={ref}
64
+ className={cn('font-normal', className)}
65
+ {...mergedProps}
66
+ />
67
+ );
68
+ }
69
+ );
70
+
71
+ HeroText.displayName = 'HeroText';
@@ -0,0 +1,9 @@
1
+ export * from './animated-check-icon';
2
+ export * from './bottom-sheet-content';
3
+ export * from './bottom-sheet-content-container';
4
+ export * from './check-icon';
5
+ export * from './chevron-down-icon';
6
+ export * from './chevron-right-icon';
7
+ export * from './close-icon';
8
+ export * from './full-window-overlay';
9
+ export * from './hero-text';
@@ -0,0 +1,19 @@
1
+ import { createContext } from '../utils';
2
+
3
+ /**
4
+ * Context value for global animation settings
5
+ */
6
+ export interface AnimationSettingsContextValue {
7
+ /**
8
+ * Whether all animations should be disabled (cascading from parent)
9
+ */
10
+ isAllAnimationsDisabled: boolean;
11
+ }
12
+
13
+ const [AnimationSettingsProvider, useAnimationSettings] =
14
+ createContext<AnimationSettingsContextValue>({
15
+ name: 'AnimationSettingsContext',
16
+ strict: false,
17
+ });
18
+
19
+ export { AnimationSettingsProvider, useAnimationSettings };
@@ -0,0 +1,11 @@
1
+ import type { SharedValue } from 'react-native-reanimated';
2
+ import { createContext } from '../utils';
3
+
4
+ const [BottomSheetIsDraggingProvider, useBottomSheetIsDragging] =
5
+ createContext<{
6
+ isDragging: SharedValue<boolean>;
7
+ }>({
8
+ name: 'BottomSheetIsDraggingContext',
9
+ });
10
+
11
+ export { BottomSheetIsDraggingProvider, useBottomSheetIsDragging };
@@ -0,0 +1,36 @@
1
+ import { createContext } from '../utils';
2
+
3
+ /**
4
+ * Combined context value for form field state and layout (shared across form field components).
5
+ *
6
+ * Providers: TextField, SearchField, ControlField, RadioGroup.
7
+ * Consumers: Label, Description, FieldError, Input.
8
+ */
9
+ export interface FormFieldContextValue {
10
+ /**
11
+ * Whether the form field is required
12
+ */
13
+ isRequired: boolean;
14
+ /**
15
+ * Whether the form field is disabled
16
+ */
17
+ isDisabled: boolean;
18
+ /**
19
+ * Whether the form field is in an invalid state
20
+ */
21
+ isInvalid: boolean;
22
+ /**
23
+ * When true, child components (Label, Description, FieldError) apply
24
+ * additional horizontal padding (`px-1.5`) for consistent field layout.
25
+ *
26
+ * Set to `true` by container components like TextField and SearchField.
27
+ */
28
+ hasFieldPadding: boolean;
29
+ }
30
+
31
+ const [FormFieldProvider, useFormField] = createContext<FormFieldContextValue>({
32
+ name: 'FormFieldContext',
33
+ strict: false,
34
+ });
35
+
36
+ export { FormFieldProvider, useFormField };
@@ -0,0 +1,3 @@
1
+ export * from './animation-settings-context';
2
+ export * from './bottom-sheet-is-dragging-context';
3
+ export * from './form-field-context';
@@ -0,0 +1,14 @@
1
+ export * from './use-augmented-ref';
2
+ export * from './use-bottom-sheet-aware-handlers';
3
+ export * from './use-bottom-sheet-gesture-handlers';
4
+ export * from './use-combined-animation-disabled-state';
5
+ export * from './use-controllable-state';
6
+ export * from './use-dev-info';
7
+ export * from './use-keyboard-status';
8
+ export * from './use-popup-bottom-sheet-content-animation';
9
+ export * from './use-popup-dialog-content-animation';
10
+ export * from './use-popup-overlay-animation';
11
+ export * from './use-popup-popover-content-animation';
12
+ export * from './use-popup-root-animation';
13
+ export * from './use-relative-position';
14
+ export * from './use-resolved-style-property';
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { useImperativeHandle, useRef } from 'react';
3
+
4
+ interface AugmentRefProps<T> {
5
+ ref: React.Ref<T>;
6
+ methods?: Record<string, (...args: any[]) => any>;
7
+ deps?: any[];
8
+ }
9
+
10
+ export function useAugmentedRef<T>({
11
+ ref,
12
+ methods,
13
+ deps = [],
14
+ }: AugmentRefProps<T>) {
15
+ const augmentedRef = useRef<T>(null);
16
+
17
+ useImperativeHandle(
18
+ ref,
19
+ () => {
20
+ if (typeof augmentedRef === 'function' || !augmentedRef?.current) {
21
+ return {} as T;
22
+ }
23
+ return {
24
+ ...augmentedRef.current,
25
+ ...methods,
26
+ };
27
+ },
28
+ // eslint-disable-next-line react-hooks/exhaustive-deps
29
+ deps
30
+ );
31
+ return augmentedRef;
32
+ }
@@ -0,0 +1,94 @@
1
+ import { useBottomSheetInternal } from '@gorhom/bottom-sheet';
2
+ import { useCallback } from 'react';
3
+ import {
4
+ findNodeHandle,
5
+ TextInput,
6
+ type BlurEvent,
7
+ type FocusEvent,
8
+ } from 'react-native';
9
+
10
+ /**
11
+ * Parameters for the bottom-sheet-aware handlers hook
12
+ */
13
+ interface UseBottomSheetAwareHandlersParams {
14
+ /** User-provided onFocus handler to preserve */
15
+ onFocus?: ((e: FocusEvent) => void) | undefined;
16
+ /** User-provided onBlur handler to preserve */
17
+ onBlur?: ((e: BlurEvent) => void) | undefined;
18
+ /** Whether automatic bottom sheet keyboard handling is enabled */
19
+ isBottomSheetAware?: boolean;
20
+ }
21
+
22
+ /**
23
+ * Internal hook that automatically manages bottom sheet keyboard state
24
+ * when the component is rendered inside a BottomSheet context.
25
+ *
26
+ * Uses `useBottomSheetInternal(true)` (unsafe mode) so it returns `null`
27
+ * instead of throwing when called outside a BottomSheet. When inside a
28
+ * BottomSheet and `isBottomSheetAware` is true, it wraps the provided
29
+ * `onFocus`/`onBlur` handlers with the keyboard state management logic
30
+ * required by `@gorhom/bottom-sheet`.
31
+ *
32
+ * @param params - The handler parameters
33
+ * @returns Merged onFocus and onBlur handlers
34
+ */
35
+ export function useBottomSheetAwareHandlers({
36
+ onFocus: onFocusProp,
37
+ onBlur: onBlurProp,
38
+ isBottomSheetAware = true,
39
+ }: UseBottomSheetAwareHandlersParams) {
40
+ const bottomSheetContext = useBottomSheetInternal(true);
41
+
42
+ /** Whether the bottom sheet keyboard handling should be active */
43
+ const isActive = isBottomSheetAware && bottomSheetContext !== null;
44
+
45
+ /**
46
+ * Handles focus event: notifies the bottom sheet about the keyboard target,
47
+ * then delegates to the user-provided onFocus handler.
48
+ */
49
+ const onFocus = useCallback(
50
+ (e: FocusEvent) => {
51
+ if (isActive && bottomSheetContext) {
52
+ bottomSheetContext.animatedKeyboardState.set((state) => ({
53
+ ...state,
54
+ target: e.nativeEvent.target,
55
+ }));
56
+ }
57
+
58
+ onFocusProp?.(e);
59
+ },
60
+ [isActive, bottomSheetContext, onFocusProp]
61
+ );
62
+
63
+ /**
64
+ * Handles blur event: conditionally clears the keyboard target in the
65
+ * bottom sheet state, then delegates to the user-provided onBlur handler.
66
+ */
67
+ const onBlur = useCallback(
68
+ (e: BlurEvent) => {
69
+ if (isActive && bottomSheetContext) {
70
+ const keyboardState = bottomSheetContext.animatedKeyboardState.get();
71
+ const currentFocusedInput = findNodeHandle(
72
+ TextInput.State.currentlyFocusedInput() as TextInput | null
73
+ );
74
+ const shouldRemoveCurrentTarget =
75
+ keyboardState.target === e.nativeEvent.target;
76
+ const shouldIgnoreBlurEvent =
77
+ currentFocusedInput &&
78
+ bottomSheetContext.textInputNodesRef.current.has(currentFocusedInput);
79
+
80
+ if (shouldRemoveCurrentTarget && !shouldIgnoreBlurEvent) {
81
+ bottomSheetContext.animatedKeyboardState.set((state) => ({
82
+ ...state,
83
+ target: undefined,
84
+ }));
85
+ }
86
+ }
87
+
88
+ onBlurProp?.(e);
89
+ },
90
+ [isActive, bottomSheetContext, onBlurProp]
91
+ );
92
+
93
+ return { onFocus, onBlur };
94
+ }
@@ -0,0 +1,52 @@
1
+ import {
2
+ useGestureEventsHandlersDefault,
3
+ type GestureEventHandlerCallbackType,
4
+ type GestureEventsHandlersHookType,
5
+ } from '@gorhom/bottom-sheet';
6
+ import { useBottomSheetIsDragging } from '../contexts/bottom-sheet-is-dragging-context';
7
+
8
+ export const useBottomSheetGestureHandlers: GestureEventsHandlersHookType =
9
+ () => {
10
+ const { isDragging } = useBottomSheetIsDragging();
11
+
12
+ const defaultHandlers = useGestureEventsHandlersDefault();
13
+
14
+ const handleOnStart: GestureEventHandlerCallbackType = (
15
+ source,
16
+ payload
17
+ ) => {
18
+ 'worklet';
19
+ isDragging.set(true);
20
+ defaultHandlers.handleOnStart(source, payload);
21
+ };
22
+
23
+ const handleOnChange: GestureEventHandlerCallbackType = (
24
+ source,
25
+ payload
26
+ ) => {
27
+ 'worklet';
28
+ defaultHandlers.handleOnChange(source, payload);
29
+ };
30
+
31
+ const handleOnEnd: GestureEventHandlerCallbackType = (source, payload) => {
32
+ 'worklet';
33
+ isDragging.set(false);
34
+ defaultHandlers.handleOnEnd(source, payload);
35
+ };
36
+
37
+ const handleOnFinalize: GestureEventHandlerCallbackType = (
38
+ source,
39
+ payload
40
+ ) => {
41
+ 'worklet';
42
+ isDragging.set(false);
43
+ defaultHandlers.handleOnFinalize(source, payload);
44
+ };
45
+
46
+ return {
47
+ handleOnStart,
48
+ handleOnChange,
49
+ handleOnEnd,
50
+ handleOnFinalize,
51
+ };
52
+ };
@@ -0,0 +1,49 @@
1
+ import { useGlobalAnimationSettings } from '../../../providers/animation-settings';
2
+ import { useAnimationSettings } from '../contexts/animation-settings-context';
3
+ import type { AnimationRoot } from '../types/animation';
4
+ import {
5
+ getCombinedAnimationDisabledState,
6
+ getRootAnimationState,
7
+ } from '../utils/animation';
8
+
9
+ /**
10
+ * Hook to combine global, parent, and own animation disabled states
11
+ *
12
+ * @description
13
+ * This hook combines three sources of animation disabled state:
14
+ * 1. Global state from GlobalAnimationSettingsProvider
15
+ * 2. Parent state from AnimationSettingsContext (component tree cascading)
16
+ * 3. Own state from the component's animation prop
17
+ *
18
+ * Priority: Global > Parent > Own (global wins if enabled)
19
+ *
20
+ * @param animation - Root animation configuration for the component
21
+ * @returns Combined isAllAnimationsDisabled value
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
26
+ * ```
27
+ */
28
+ export function useCombinedAnimationDisabledState<
29
+ TConfig extends Record<string, any>,
30
+ >(animation: AnimationRoot<TConfig> | undefined): boolean {
31
+ // Get global animation disabled state
32
+ const { globalIsAllAnimationsDisabled } = useGlobalAnimationSettings();
33
+
34
+ // Read parent animation disabled state from global context
35
+ const parentAnimationSettingsContext = useAnimationSettings();
36
+ const parentIsAllAnimationsDisabled =
37
+ parentAnimationSettingsContext?.isAllAnimationsDisabled;
38
+
39
+ // Get own animation disabled state
40
+ const { isAllAnimationsDisabled: ownIsAllAnimationsDisabled } =
41
+ getRootAnimationState(animation);
42
+
43
+ // Combine global, parent, and own disable-all states (global > parent > own)
44
+ return getCombinedAnimationDisabledState({
45
+ globalIsAllAnimationsDisabled,
46
+ parentIsAllAnimationsDisabled,
47
+ ownIsAllAnimationsDisabled,
48
+ });
49
+ }
@@ -0,0 +1,124 @@
1
+ // This project uses code from WorkOS/Radix Primitives.
2
+ // The code is licensed under the MIT License.
3
+ // https://github.com/radix-ui/primitives/tree/main
4
+
5
+ import {
6
+ useCallback,
7
+ useEffect,
8
+ useLayoutEffect,
9
+ useMemo,
10
+ useRef,
11
+ useState,
12
+ } from 'react';
13
+
14
+ /**
15
+ * Parameters for the useControllableState hook
16
+ */
17
+ type UseControllableStateParams<T> = {
18
+ /** The controlled value prop */
19
+ prop?: T | undefined;
20
+ /** The default value for uncontrolled mode */
21
+ defaultProp?: T | undefined;
22
+ /** Callback fired when the value changes */
23
+ onChange?: (state: T) => void;
24
+ };
25
+
26
+ /**
27
+ * Function type for state setter callbacks
28
+ */
29
+ type SetStateFn<T> = (prevState?: T) => T;
30
+
31
+ /**
32
+ * A hook that supports both controlled and uncontrolled state.
33
+ * When a value prop is provided, the component is controlled.
34
+ * When no value prop is provided, the component manages its own state.
35
+ *
36
+ * @param params - Configuration object with prop, defaultProp, and onChange
37
+ * @returns A tuple of [value, setValue] similar to useState
38
+ */
39
+ function useControllableState<T>({
40
+ prop,
41
+ defaultProp,
42
+ onChange = () => {}, // eslint-disable-line @typescript-eslint/no-empty-function
43
+ }: UseControllableStateParams<T>) {
44
+ const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({
45
+ defaultProp,
46
+ onChange,
47
+ });
48
+ const isControlled = prop !== undefined;
49
+ const value = isControlled ? prop : uncontrolledProp;
50
+ const handleChange = useCallbackRef(onChange);
51
+
52
+ /**
53
+ * When the component transitions from controlled (prop !== undefined)
54
+ * back to uncontrolled (prop === undefined), the internal uncontrolled
55
+ * state may hold a stale value from a previous selection. Reset it so
56
+ * the component correctly reflects the "no value" state.
57
+ */
58
+ const prevPropRef = useRef(prop);
59
+ useLayoutEffect(() => {
60
+ const wasControlled = prevPropRef.current !== undefined;
61
+ if (wasControlled && prop === undefined) {
62
+ setUncontrolledProp(undefined);
63
+ }
64
+ prevPropRef.current = prop;
65
+ }, [prop, setUncontrolledProp]);
66
+
67
+ const setValue: React.Dispatch<React.SetStateAction<T | undefined>> =
68
+ useCallback(
69
+ (nextValue) => {
70
+ if (isControlled) {
71
+ const setter = nextValue as SetStateFn<T>;
72
+ const val =
73
+ typeof nextValue === 'function' ? setter(prop) : nextValue;
74
+ if (val !== prop) handleChange(val as T);
75
+ } else {
76
+ setUncontrolledProp(nextValue);
77
+ }
78
+ },
79
+ [isControlled, prop, setUncontrolledProp, handleChange]
80
+ );
81
+
82
+ return [value, setValue] as const;
83
+ }
84
+
85
+ /**
86
+ * Internal hook for managing uncontrolled state with change callbacks
87
+ */
88
+ function useUncontrolledState<T>({
89
+ defaultProp,
90
+ onChange,
91
+ }: Omit<UseControllableStateParams<T>, 'prop'>) {
92
+ const uncontrolledState = useState<T | undefined>(defaultProp);
93
+ const [value] = uncontrolledState;
94
+ const prevValueRef = useRef(value);
95
+ const handleChange = useCallbackRef(onChange);
96
+
97
+ useEffect(() => {
98
+ if (prevValueRef.current !== value) {
99
+ handleChange(value as T);
100
+ prevValueRef.current = value;
101
+ }
102
+ }, [value, prevValueRef, handleChange]);
103
+
104
+ return uncontrolledState;
105
+ }
106
+
107
+ /**
108
+ * A custom hook that converts a callback to a ref to avoid triggering re-renders when passed as a
109
+ * prop or avoid re-executing effects when passed as a dependency
110
+ */
111
+ function useCallbackRef<T extends (...args: any[]) => any>(
112
+ callback: T | undefined
113
+ ): T {
114
+ const callbackRef = useRef(callback);
115
+
116
+ useEffect(() => {
117
+ callbackRef.current = callback;
118
+ });
119
+
120
+ // https://github.com/facebook/react/issues/19240
121
+ return useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);
122
+ }
123
+
124
+ export { useControllableState };
@@ -0,0 +1,38 @@
1
+ import { useEffect } from 'react';
2
+ import type { DevInfoConfig } from '../../../providers/hero-ui-native/types';
3
+
4
+ const LOG_COLOR = {
5
+ BLUE: '\x1b[34m',
6
+ YELLOW: '\x1b[33m',
7
+ RESET: '\x1b[0m',
8
+ };
9
+
10
+ /**
11
+ * Hook that displays developer information messages in the console.
12
+ *
13
+ * @description
14
+ * Logs helpful styling principles and best practices during development.
15
+ * Messages are only shown in __DEV__ mode and can be disabled via the
16
+ * devInfo configuration.
17
+ *
18
+ * @param {DevInfoConfig} [devInfo] - Developer information configuration
19
+ */
20
+ export function useDevInfo(devInfo?: DevInfoConfig): void {
21
+ const { stylingPrinciples = true } = devInfo || {};
22
+
23
+ useEffect(() => {
24
+ if (__DEV__ && stylingPrinciples) {
25
+ console.info(
26
+ `${LOG_COLOR.BLUE}HeroUI Native Styling Principles${LOG_COLOR.RESET}\n` +
27
+ `• className: this is your go-to styling solution. Use Tailwind CSS classes via className prop on all components.\n` +
28
+ `• StyleSheet precedence: The style prop (StyleSheet API) has precedence over className when both are provided. This allows you to override Tailwind classes when needed.\n` +
29
+ `• Animated styles: Some style properties are animated using react-native-reanimated and have precedence over className. To identify which styles are animated:\n` +
30
+ ` - Hover over className in your IDE - TypeScript definitions show which properties are occupied by animated styles\n` +
31
+ ` - Check component documentation - Each component page includes a link to the component's style source\n` +
32
+ `• If styles are occupied by animation, modify them via the animation prop on components that support it.\n` +
33
+ `• To deactivate animated style completely and apply your own styles, use isAnimatedStyleActive prop.\n` +
34
+ `${LOG_COLOR.YELLOW} To disable this message, set config.devInfo.stylingPrinciples to false${LOG_COLOR.RESET}`
35
+ );
36
+ }
37
+ }, [stylingPrinciples]);
38
+ }
@@ -0,0 +1,22 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { Keyboard } from 'react-native';
3
+
4
+ export const useKeyboardStatus = () => {
5
+ const [keyboardStatus, setKeyboardStatus] = useState<boolean>(false);
6
+
7
+ useEffect(() => {
8
+ const showSubscription = Keyboard.addListener('keyboardDidShow', () => {
9
+ setKeyboardStatus(true);
10
+ });
11
+ const hideSubscription = Keyboard.addListener('keyboardDidHide', () => {
12
+ setKeyboardStatus(false);
13
+ });
14
+
15
+ return () => {
16
+ showSubscription.remove();
17
+ hideSubscription.remove();
18
+ };
19
+ }, [keyboardStatus]);
20
+
21
+ return keyboardStatus;
22
+ };