@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,220 @@
1
+ import { forwardRef, useCallback, useMemo } from 'react';
2
+
3
+ import { useIsOnSurface } from '../../helpers/external/hooks';
4
+ import {
5
+ AnimationSettingsProvider,
6
+ FormFieldProvider,
7
+ } from '../../helpers/internal/contexts';
8
+ import { childrenToString } from '../../helpers/internal/utils';
9
+ import * as RadioGroupPrimitives from '../../primitives/radio-group';
10
+ import Label from '../label/label';
11
+ import Radio from '../radio/radio';
12
+ import { useRadioGroupRootAnimation } from './radio-group.animation';
13
+ import { DISPLAY_NAME } from './radio-group.constants';
14
+ import { RadioGroupItemProvider } from './radio-group.context';
15
+ import { radioGroupClassNames } from './radio-group.styles';
16
+ import type {
17
+ RadioGroupItemProps,
18
+ RadioGroupItemRenderProps,
19
+ RadioGroupProps,
20
+ } from './radio-group.types';
21
+
22
+ const useRadioGroup = RadioGroupPrimitives.useRadioGroupContext;
23
+
24
+ // --------------------------------------------------
25
+
26
+ const RadioGroupRoot = forwardRef<
27
+ RadioGroupPrimitives.RootRef,
28
+ RadioGroupProps
29
+ >((props, ref) => {
30
+ const {
31
+ className,
32
+ isDisabled = false,
33
+ isInvalid = false,
34
+ animation,
35
+ ...restProps
36
+ } = props;
37
+
38
+ const rootClassName = radioGroupClassNames.root({
39
+ className,
40
+ });
41
+
42
+ const { isAllAnimationsDisabled } = useRadioGroupRootAnimation({
43
+ animation,
44
+ });
45
+
46
+ const animationSettingsContextValue = useMemo(
47
+ () => ({
48
+ isAllAnimationsDisabled,
49
+ }),
50
+ [isAllAnimationsDisabled]
51
+ );
52
+
53
+ const formFieldContextValue = useMemo(
54
+ () => ({
55
+ isDisabled,
56
+ isInvalid,
57
+ isRequired: false,
58
+ hasFieldPadding: false,
59
+ }),
60
+ [isDisabled, isInvalid]
61
+ );
62
+
63
+ return (
64
+ <AnimationSettingsProvider value={animationSettingsContextValue}>
65
+ <FormFieldProvider value={formFieldContextValue}>
66
+ <RadioGroupPrimitives.Root
67
+ ref={ref}
68
+ className={rootClassName}
69
+ isDisabled={isDisabled}
70
+ isInvalid={isInvalid}
71
+ {...restProps}
72
+ />
73
+ </FormFieldProvider>
74
+ </AnimationSettingsProvider>
75
+ );
76
+ });
77
+
78
+ // --------------------------------------------------
79
+
80
+ const RadioGroupItem = forwardRef<
81
+ RadioGroupPrimitives.ItemRef,
82
+ RadioGroupItemProps
83
+ >((props, ref) => {
84
+ const {
85
+ children,
86
+ value,
87
+ isDisabled,
88
+ isInvalid,
89
+ variant,
90
+ className,
91
+ ...restProps
92
+ } = props;
93
+
94
+ const stringifiedChildren =
95
+ typeof children === 'function'
96
+ ? null
97
+ : childrenToString(children as React.ReactNode);
98
+
99
+ const {
100
+ value: groupValue,
101
+ onValueChange: groupOnValueChange,
102
+ isInvalid: groupIsInvalid,
103
+ isDisabled: groupIsDisabled,
104
+ variant: groupVariant,
105
+ } = useRadioGroup();
106
+
107
+ const isSelected = groupValue === value;
108
+ const isDisabledValue = isDisabled ?? groupIsDisabled ?? false;
109
+ const isInvalidValue = isInvalid ?? groupIsInvalid ?? false;
110
+
111
+ /** Selects this item in the group (radio behavior: always selects, never deselects) */
112
+ const handleSelectedChange = useCallback(() => {
113
+ groupOnValueChange(value);
114
+ }, [groupOnValueChange, value]);
115
+
116
+ const isOnSurfaceAutoDetected = useIsOnSurface();
117
+
118
+ const finalVariant =
119
+ variant !== undefined
120
+ ? variant
121
+ : groupVariant !== undefined
122
+ ? groupVariant
123
+ : isOnSurfaceAutoDetected
124
+ ? 'secondary'
125
+ : 'primary';
126
+
127
+ const itemClassName = radioGroupClassNames.item({
128
+ className,
129
+ });
130
+
131
+ const renderProps: RadioGroupItemRenderProps = {
132
+ isSelected,
133
+ isDisabled: isDisabledValue,
134
+ isInvalid: isInvalidValue,
135
+ };
136
+
137
+ const content = stringifiedChildren ? (
138
+ <>
139
+ <Label>{stringifiedChildren}</Label>
140
+ <Radio />
141
+ </>
142
+ ) : typeof children === 'function' ? (
143
+ children(renderProps)
144
+ ) : (
145
+ children
146
+ );
147
+
148
+ const contextValue = useMemo(
149
+ () => ({
150
+ isSelected,
151
+ isDisabled: isDisabledValue,
152
+ isInvalid: isInvalidValue,
153
+ variant: finalVariant,
154
+ onSelectedChange: handleSelectedChange,
155
+ }),
156
+ [
157
+ isSelected,
158
+ isDisabledValue,
159
+ isInvalidValue,
160
+ finalVariant,
161
+ handleSelectedChange,
162
+ ]
163
+ );
164
+
165
+ const formFieldContextValue = useMemo(
166
+ () => ({
167
+ isDisabled: isDisabledValue,
168
+ isInvalid: isInvalidValue,
169
+ isRequired: false,
170
+ hasFieldPadding: false,
171
+ }),
172
+ [isDisabledValue, isInvalidValue]
173
+ );
174
+
175
+ return (
176
+ <FormFieldProvider value={formFieldContextValue}>
177
+ <RadioGroupItemProvider value={contextValue}>
178
+ <RadioGroupPrimitives.Item
179
+ ref={ref}
180
+ value={value}
181
+ className={itemClassName}
182
+ isDisabled={isDisabledValue}
183
+ {...restProps}
184
+ >
185
+ {content}
186
+ </RadioGroupPrimitives.Item>
187
+ </RadioGroupItemProvider>
188
+ </FormFieldProvider>
189
+ );
190
+ });
191
+
192
+ RadioGroupRoot.displayName = DISPLAY_NAME.RADIO_GROUP_ROOT;
193
+ RadioGroupItem.displayName = DISPLAY_NAME.RADIO_GROUP_ITEM;
194
+
195
+ /**
196
+ * Compound RadioGroup component with sub-components.
197
+ *
198
+ * @component RadioGroup - Container that manages the selection state of RadioGroupItem components.
199
+ * Supports both horizontal and vertical orientations.
200
+ *
201
+ * @component RadioGroup.Item - Individual radio option within a RadioGroup. Must be used inside
202
+ * RadioGroup. Handles selection state and renders a default `<Radio />` indicator if text children
203
+ * are provided. Supports render function children to access state.
204
+ *
205
+ * Use the `Radio` component (and its sub-components `Radio.Indicator`, `Radio.IndicatorThumb`)
206
+ * inside RadioGroup.Item for custom indicator rendering. The Radio component automatically detects
207
+ * the RadioGroupItem context and derives selection state from it.
208
+ *
209
+ * Props flow from RadioGroup to RadioGroupItem to Radio via context (variant, value, isSelected).
210
+ * RadioGroup manages the overall selection state and orientation.
211
+ *
212
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/radio-group
213
+ */
214
+ const CompoundRadioGroup = Object.assign(RadioGroupRoot, {
215
+ /** Individual radio option within a RadioGroup */
216
+ Item: RadioGroupItem,
217
+ });
218
+
219
+ export default CompoundRadioGroup;
220
+ export { useRadioGroup };
@@ -0,0 +1,64 @@
1
+ import type { AnimationRootDisableAll } from '../../helpers/internal/types';
2
+ import type { ItemProps, RootProps } from '../../primitives/radio-group';
3
+
4
+ /**
5
+ * Props for RadioGroup root component
6
+ */
7
+ export interface RadioGroupProps extends Omit<RootProps, 'asChild'> {
8
+ /** Radio group content */
9
+ children?: React.ReactNode;
10
+ /** Custom class name */
11
+ className?: string;
12
+ /**
13
+ * Animation configuration for radio group
14
+ * - `"disable-all"`: Disable all animations including children
15
+ * - `undefined`: Use default animations
16
+ */
17
+ animation?: AnimationRootDisableAll;
18
+ }
19
+
20
+ /**
21
+ * Context values shared between RadioGroupItem compound components
22
+ */
23
+ export interface RadioGroupItemContextValue {
24
+ /** Whether the radio item is selected */
25
+ isSelected: boolean;
26
+ /** Whether the radio item is disabled */
27
+ isDisabled?: boolean;
28
+ /** Whether the radio item is invalid */
29
+ isInvalid?: boolean;
30
+ /** Variant style for the radio item */
31
+ variant?: 'primary' | 'secondary';
32
+ /** Callback to change the selection state (selects this item in the group) */
33
+ onSelectedChange?: (isSelected: boolean) => void;
34
+ }
35
+
36
+ /**
37
+ * Render function props for RadioGroupItem children
38
+ */
39
+ export interface RadioGroupItemRenderProps {
40
+ /** Whether the radio item is selected */
41
+ isSelected: boolean;
42
+ /** Whether the radio item is disabled */
43
+ isDisabled: boolean;
44
+ /** Whether the radio item is invalid */
45
+ isInvalid: boolean;
46
+ }
47
+
48
+ /**
49
+ * Props for the RadioGroupItem component
50
+ */
51
+ export interface RadioGroupItemProps extends Omit<ItemProps, 'children'> {
52
+ /** Radio item content, or a render function */
53
+ children?:
54
+ | React.ReactNode
55
+ | ((props: RadioGroupItemRenderProps) => React.ReactNode);
56
+ /** Whether the radio item is invalid @default false */
57
+ isInvalid?: boolean;
58
+ /** Variant style for the radio item
59
+ * @default 'primary'
60
+ */
61
+ variant?: 'primary' | 'secondary';
62
+ /** Custom class name */
63
+ className?: string;
64
+ }
@@ -0,0 +1,7 @@
1
+ export { default as ScrollShadow } from './scroll-shadow';
2
+ export { scrollShadowClassNames } from './scroll-shadow.styles';
3
+ export type {
4
+ ScrollShadowOrientation,
5
+ ScrollShadowProps,
6
+ ScrollShadowVisibility,
7
+ } from './scroll-shadow.types';
@@ -0,0 +1,132 @@
1
+ import {
2
+ Extrapolation,
3
+ interpolate,
4
+ useAnimatedScrollHandler,
5
+ useAnimatedStyle,
6
+ useDerivedValue,
7
+ useSharedValue,
8
+ withTiming,
9
+ } from 'react-native-reanimated';
10
+ import { useCombinedAnimationDisabledState } from '../../helpers/internal/hooks';
11
+ import {
12
+ getAnimationValueProperty,
13
+ getIsAnimationDisabledValue,
14
+ getRootAnimationState,
15
+ } from '../../helpers/internal/utils';
16
+ import { SHADOW_EXIT_ANIMATION_DURATION } from './scroll-shadow.constants';
17
+ import type {
18
+ ScrollShadowOrientation,
19
+ ScrollShadowRootAnimation,
20
+ ScrollShadowVisibility,
21
+ } from './scroll-shadow.types';
22
+
23
+ // --------------------------------------------------
24
+
25
+ /**
26
+ * Animation hook for ScrollShadow root component
27
+ * Handles cascading animation disabled state and all animation logic
28
+ */
29
+ export function useScrollShadowRootAnimation(options: {
30
+ animation: ScrollShadowRootAnimation | undefined;
31
+ orientation: ScrollShadowOrientation;
32
+ size: number;
33
+ visibility: ScrollShadowVisibility;
34
+ isEnabled: boolean;
35
+ }) {
36
+ const { animation, orientation, size, visibility, isEnabled } = options;
37
+
38
+ const { animationConfig, isAnimationDisabled } =
39
+ getRootAnimationState(animation);
40
+
41
+ const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
42
+
43
+ const isAnimationDisabledValue = getIsAnimationDisabledValue({
44
+ isAnimationDisabled,
45
+ isAllAnimationsDisabled,
46
+ });
47
+
48
+ // Opacity animation values
49
+ const topOpacityValue = getAnimationValueProperty({
50
+ animationValue: animationConfig?.opacity,
51
+ property: 'value',
52
+ defaultValue: [0, 1] as [number, number],
53
+ });
54
+
55
+ // Reverse array for bottom shadow: [1, 0]
56
+ const bottomOpacityValue: [number, number] = [
57
+ topOpacityValue[1],
58
+ topOpacityValue[0],
59
+ ];
60
+
61
+ const scrollOffset = useSharedValue(0);
62
+ const contentSize = useSharedValue(0);
63
+ const containerSize = useSharedValue(0);
64
+
65
+ const localScrollHandler = useAnimatedScrollHandler({
66
+ onScroll: (event) => {
67
+ const offset =
68
+ orientation === 'vertical'
69
+ ? event.contentOffset.y
70
+ : event.contentOffset.x;
71
+ scrollOffset.set(offset);
72
+ },
73
+ });
74
+
75
+ const topShadowOpacity = useDerivedValue(() => {
76
+ if (isAnimationDisabledValue) {
77
+ return 1;
78
+ }
79
+
80
+ if (!isEnabled)
81
+ return withTiming(0, { duration: SHADOW_EXIT_ANIMATION_DURATION });
82
+ if (visibility === 'none')
83
+ return withTiming(0, { duration: SHADOW_EXIT_ANIMATION_DURATION });
84
+ if (visibility === 'bottom' || visibility === 'right')
85
+ return withTiming(0, { duration: SHADOW_EXIT_ANIMATION_DURATION });
86
+
87
+ return interpolate(
88
+ scrollOffset.get(),
89
+ [0, size / 4],
90
+ topOpacityValue,
91
+ Extrapolation.CLAMP
92
+ );
93
+ });
94
+
95
+ const bottomShadowOpacity = useDerivedValue(() => {
96
+ if (isAnimationDisabledValue) {
97
+ return 1;
98
+ }
99
+
100
+ if (!isEnabled)
101
+ return withTiming(0, { duration: SHADOW_EXIT_ANIMATION_DURATION });
102
+ if (visibility === 'none')
103
+ return withTiming(0, { duration: SHADOW_EXIT_ANIMATION_DURATION });
104
+ if (visibility === 'top' || visibility === 'left')
105
+ return withTiming(0, { duration: SHADOW_EXIT_ANIMATION_DURATION });
106
+
107
+ return interpolate(
108
+ scrollOffset.get() + containerSize.get(),
109
+ [contentSize.get() - size / 4, contentSize.get()],
110
+ bottomOpacityValue,
111
+ Extrapolation.CLAMP
112
+ );
113
+ });
114
+
115
+ const topShadowStyle = useAnimatedStyle(() => ({
116
+ opacity: topShadowOpacity.get(),
117
+ }));
118
+
119
+ const bottomShadowStyle = useAnimatedStyle(() => ({
120
+ opacity: bottomShadowOpacity.get(),
121
+ }));
122
+
123
+ return {
124
+ scrollOffset,
125
+ contentSize,
126
+ containerSize,
127
+ localScrollHandler,
128
+ topShadowStyle,
129
+ bottomShadowStyle,
130
+ isAllAnimationsDisabled,
131
+ };
132
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Display name constants for ScrollShadow components
3
+ */
4
+ export const SCROLL_SHADOW_DISPLAY_NAME = {
5
+ ROOT: 'HeroUINative.ScrollShadow',
6
+ } as const;
7
+
8
+ /**
9
+ * Default size for gradient shadows in pixels
10
+ */
11
+ export const DEFAULT_SHADOW_SIZE = 50;
12
+
13
+ /**
14
+ * Animation duration for shadow opacity transitions in milliseconds
15
+ */
16
+ export const SHADOW_EXIT_ANIMATION_DURATION = 200;
17
+
18
+ /**
19
+ * Default scroll event throttle for performance
20
+ */
21
+ export const DEFAULT_SCROLL_EVENT_THROTTLE = 16;
@@ -0,0 +1,206 @@
1
+ # ScrollShadow
2
+
3
+ Adds dynamic gradient shadows to scrollable content based on scroll position and overflow.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { ScrollShadow } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <ScrollShadow LinearGradientComponent={LinearGradient}>
15
+ <ScrollView>...</ScrollView>
16
+ </ScrollShadow>
17
+ ```
18
+
19
+ - **ScrollShadow**: Main container that wraps scrollable components and adds dynamic gradient shadows at the edges based on scroll position and content overflow. Automatically detects scroll orientation (horizontal/vertical) and manages shadow visibility.
20
+ - **LinearGradientComponent**: Required prop that accepts a LinearGradient component from compatible libraries (expo-linear-gradient, react-native-linear-gradient, etc.) to render the gradient shadows.
21
+
22
+ ## Usage
23
+
24
+ ### Basic Usage
25
+
26
+ Wrap any scrollable component to automatically add edge shadows.
27
+
28
+ ```tsx
29
+ <ScrollShadow LinearGradientComponent={LinearGradient}>
30
+ <ScrollView>...</ScrollView>
31
+ </ScrollShadow>
32
+ ```
33
+
34
+ ### Horizontal Scrolling
35
+
36
+ The component auto-detects horizontal scrolling from the child's `horizontal` prop.
37
+
38
+ ```tsx
39
+ <ScrollShadow LinearGradientComponent={LinearGradient}>
40
+ <FlatList horizontal data={data} renderItem={...} />
41
+ </ScrollShadow>
42
+ ```
43
+
44
+ ### Custom Shadow Size
45
+
46
+ Control the gradient shadow height/width with the `size` prop.
47
+
48
+ ```tsx
49
+ <ScrollShadow size={100} LinearGradientComponent={LinearGradient}>
50
+ <ScrollView>...</ScrollView>
51
+ </ScrollShadow>
52
+ ```
53
+
54
+ ### Visibility Control
55
+
56
+ Specify which shadows to display using the `visibility` prop.
57
+
58
+ ```tsx
59
+ <ScrollShadow visibility="top" LinearGradientComponent={LinearGradient}>
60
+ <ScrollView>...</ScrollView>
61
+ </ScrollShadow>
62
+
63
+ <ScrollShadow visibility="bottom" LinearGradientComponent={LinearGradient}>
64
+ <ScrollView>...</ScrollView>
65
+ </ScrollShadow>
66
+
67
+ <ScrollShadow visibility="none" LinearGradientComponent={LinearGradient}>
68
+ <ScrollView>...</ScrollView>
69
+ </ScrollShadow>
70
+ ```
71
+
72
+ ### Custom Shadow Color
73
+
74
+ Override the default shadow color which uses the theme's background.
75
+
76
+ ```tsx
77
+ <ScrollShadow color="#ffffff" LinearGradientComponent={LinearGradient}>
78
+ <ScrollView>...</ScrollView>
79
+ </ScrollShadow>
80
+ ```
81
+
82
+ ### With Custom Scroll Handler
83
+
84
+ **Important:** ScrollShadow internally converts the child to a Reanimated animated component. If you need to use the `onScroll` prop, you must use `useAnimatedScrollHandler` from react-native-reanimated.
85
+
86
+ ```tsx
87
+ import { LinearGradient } from 'expo-linear-gradient';
88
+ import Animated, { useAnimatedScrollHandler } from 'react-native-reanimated';
89
+
90
+ const scrollHandler = useAnimatedScrollHandler({
91
+ onScroll: (event) => {
92
+ console.log(event.contentOffset.y);
93
+ },
94
+ });
95
+
96
+ <ScrollShadow LinearGradientComponent={LinearGradient}>
97
+ <Animated.ScrollView onScroll={scrollHandler}>...</Animated.ScrollView>
98
+ </ScrollShadow>;
99
+ ```
100
+
101
+ ## Example
102
+
103
+ ```tsx
104
+ import { ScrollShadow, Surface } from '@/heroui';
105
+ import { LinearGradient } from 'expo-linear-gradient';
106
+ import { FlatList, ScrollView, Text, View } from 'react-native';
107
+
108
+ export default function ScrollShadowExample() {
109
+ const horizontalData = Array.from({ length: 10 }, (_, i) => ({
110
+ id: i,
111
+ title: `Card ${i + 1}`,
112
+ }));
113
+
114
+ return (
115
+ <View className="flex-1 bg-background">
116
+ <Text className="px-5 py-3 text-lg font-semibold">Horizontal List</Text>
117
+ <ScrollShadow LinearGradientComponent={LinearGradient}>
118
+ <FlatList
119
+ data={horizontalData}
120
+ horizontal
121
+ renderItem={({ item }) => (
122
+ <Surface variant="2" className="w-32 h-24 justify-center px-4">
123
+ <Text>{item.title}</Text>
124
+ </Surface>
125
+ )}
126
+ showsHorizontalScrollIndicator={false}
127
+ contentContainerClassName="p-5 gap-4"
128
+ />
129
+ </ScrollShadow>
130
+
131
+ <Text className="px-5 py-3 text-lg font-semibold">Vertical Content</Text>
132
+ <ScrollShadow
133
+ size={80}
134
+ className="h-48"
135
+ LinearGradientComponent={LinearGradient}
136
+ >
137
+ <ScrollView
138
+ contentContainerClassName="p-5"
139
+ showsVerticalScrollIndicator={false}
140
+ >
141
+ <Text className="mb-4 text-2xl font-bold">Long Content</Text>
142
+ <Text className="mb-4 text-base leading-6">
143
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
144
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
145
+ ad minim veniam, quis nostrud exercitation ullamco laboris.
146
+ </Text>
147
+ <Text className="mb-4 text-base leading-6">
148
+ Sed ut perspiciatis unde omnis iste natus error sit voluptatem
149
+ accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
150
+ quae ab illo inventore veritatis et quasi architecto beatae vitae.
151
+ </Text>
152
+ </ScrollView>
153
+ </ScrollShadow>
154
+ </View>
155
+ );
156
+ }
157
+ ```
158
+
159
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/scroll-shadow.tsx>).
160
+
161
+ ## API Reference
162
+
163
+ ### ScrollShadow
164
+
165
+ | prop | type | default | description |
166
+ | ------------------------- | ---------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------- |
167
+ | `children` | `React.ReactElement` | - | The scrollable component to enhance with shadows. Must be a single React element (ScrollView, FlatList, etc.) |
168
+ | `LinearGradientComponent` | `ComponentType<`<br/>`LinearGradientProps>` | **required** | LinearGradient component from any compatible library (expo-linear-gradient, react-native-linear-gradient, etc.) |
169
+ | `size` | `number` | `50` | Size (height/width) of the gradient shadow in pixels |
170
+ | `orientation` | `'horizontal' \| 'vertical'` | auto-detect | Orientation of the scroll shadow. If not provided, will auto-detect from child's `horizontal` prop |
171
+ | `visibility` | `'auto' \| 'top' \| 'bottom' \| 'left' \| 'right' \| 'both' \| 'none'` | `'auto'` | Visibility mode for the shadows. 'auto' shows shadows based on scroll position and content overflow |
172
+ | `color` | `string` | theme color | Custom color for the gradient shadow. If not provided, uses the theme's background color |
173
+ | `isEnabled` | `boolean` | `true` | Whether the shadow effect is enabled |
174
+ | `animation` | `ScrollShadowRootAnimation` | - | Animation configuration |
175
+ | `className` | `string` | - | Additional CSS classes to apply to the container |
176
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
177
+
178
+ #### ScrollShadowRootAnimation
179
+
180
+ Animation configuration for ScrollShadow component. Can be:
181
+
182
+ - `false` or `"disabled"`: Disable only root animations
183
+ - `"disable-all"`: Disable all animations including children
184
+ - `true` or `undefined`: Use default animations
185
+ - `object`: Custom animation configuration
186
+
187
+ | prop | type | default | description |
188
+ | --------------- | ---------------------------------------- | -------- | ----------------------------------------------------------------------------------- |
189
+ | `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
190
+ | `opacity.value` | `[number, number]` | `[0, 1]` | `Opacity values [initial, active].`<br/>`For bottom/right shadow, this is reversed` |
191
+
192
+ ### LinearGradientProps
193
+
194
+ The `LinearGradientComponent` prop expects a component that accepts these props:
195
+
196
+ | prop | type | description |
197
+ | ----------- | --------------------------------- | ------------------------------------------------------------------ |
198
+ | `colors` | `any` | Array of colors for the gradient |
199
+ | `locations` | `any` (optional) | Array of numbers defining the location of each gradient color stop |
200
+ | `start` | `any` (optional) | Start point of the gradient (e.g., `{ x: 0, y: 0 }`) |
201
+ | `end` | `any` (optional) | End point of the gradient (e.g., `{ x: 1, y: 0 }`) |
202
+ | `style` | `StyleProp<ViewStyle>` (optional) | Style to apply to the gradient view |
203
+
204
+ ## Special Notes
205
+
206
+ **Important:** ScrollShadow internally converts the child to a Reanimated animated component. If you need to use the `onScroll` prop on your scrollable component, you must use `useAnimatedScrollHandler` from react-native-reanimated instead of the standard `onScroll` prop.