@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,183 @@
1
+ import React, {
2
+ useCallback,
3
+ useMemo,
4
+ useState,
5
+ type PropsWithChildren,
6
+ } from 'react';
7
+ import {
8
+ StyleSheet,
9
+ useWindowDimensions,
10
+ type LayoutChangeEvent,
11
+ } from 'react-native';
12
+ import Animated, { useSharedValue } from 'react-native-reanimated';
13
+
14
+ import { AnimationSettingsProvider } from '../../helpers/internal/contexts';
15
+
16
+ import LinearGradientComponent from './linear-gradient';
17
+ import {
18
+ SkeletonAnimationProvider,
19
+ useSkeletonAnimation,
20
+ useSkeletonPulseAnimation,
21
+ useSkeletonRootAnimation,
22
+ useSkeletonShimmerAnimation,
23
+ } from './skeleton.animation';
24
+ import { DISPLAY_NAME } from './skeleton.constants';
25
+ import { skeletonClassNames, skeletonStyleSheet } from './skeleton.styles';
26
+ import type { SkeletonProps } from './skeleton.types';
27
+
28
+ // --------------------------------------------------
29
+
30
+ const ShimmerAnimation: React.FC<{
31
+ animation: SkeletonProps['animation'];
32
+ isAnimatedStyleActive?: boolean;
33
+ }> = ({ animation, isAnimatedStyleActive = true }) => {
34
+ const { rContainerStyle, gradientColors } = useSkeletonShimmerAnimation({
35
+ animation,
36
+ });
37
+
38
+ const shimmerStyle = isAnimatedStyleActive
39
+ ? [StyleSheet.absoluteFill, skeletonStyleSheet.borderCurve, rContainerStyle]
40
+ : [StyleSheet.absoluteFill, skeletonStyleSheet.borderCurve];
41
+
42
+ return (
43
+ <Animated.View style={shimmerStyle}>
44
+ <LinearGradientComponent colors={gradientColors} />
45
+ </Animated.View>
46
+ );
47
+ };
48
+
49
+ // --------------------------------------------------
50
+
51
+ const PulseAnimation: React.FC<
52
+ PropsWithChildren<{
53
+ animation: SkeletonProps['animation'];
54
+ isAnimatedStyleActive?: boolean;
55
+ }>
56
+ > = ({ children, animation, isAnimatedStyleActive = true }) => {
57
+ const { variant } = useSkeletonAnimation();
58
+
59
+ const { rContainerStyle } = useSkeletonPulseAnimation({
60
+ animation,
61
+ });
62
+
63
+ if (variant === 'pulse') {
64
+ const pulseStyle = isAnimatedStyleActive ? rContainerStyle : undefined;
65
+ return <Animated.View style={pulseStyle}>{children}</Animated.View>;
66
+ }
67
+
68
+ return children;
69
+ };
70
+
71
+ // --------------------------------------------------
72
+
73
+ const Skeleton: React.FC<SkeletonProps> = (props) => {
74
+ const {
75
+ children,
76
+ isLoading = true,
77
+ variant = 'shimmer',
78
+ animation,
79
+ isAnimatedStyleActive = true,
80
+ className,
81
+ style,
82
+ ...restProps
83
+ } = props;
84
+
85
+ const [componentWidth, setComponentWidth] = useState(0);
86
+ const [offset, setOffset] = useState(0);
87
+
88
+ const progress = useSharedValue(0);
89
+
90
+ const { width: screenWidth } = useWindowDimensions();
91
+
92
+ const { isAllAnimationsDisabled, entering, exiting } =
93
+ useSkeletonRootAnimation({
94
+ animation,
95
+ isLoading,
96
+ variant,
97
+ progress,
98
+ });
99
+
100
+ const rootClassName = skeletonClassNames.root({ className });
101
+
102
+ const handleLayout = useCallback(
103
+ (event: LayoutChangeEvent) => {
104
+ if (componentWidth === 0) {
105
+ const { width, x } = event.nativeEvent.layout;
106
+ setComponentWidth(width);
107
+ setOffset(x);
108
+ }
109
+ },
110
+ [componentWidth]
111
+ );
112
+
113
+ const animationContextValue = useMemo(
114
+ () => ({
115
+ isLoading,
116
+ variant,
117
+ progress,
118
+ componentWidth,
119
+ offset,
120
+ screenWidth,
121
+ }),
122
+ [isLoading, variant, progress, componentWidth, offset, screenWidth]
123
+ );
124
+
125
+ const animationSettingsContextValue = useMemo(
126
+ () => ({
127
+ isAllAnimationsDisabled,
128
+ }),
129
+ [isAllAnimationsDisabled]
130
+ );
131
+
132
+ if (!isLoading) {
133
+ return (
134
+ <Animated.View key="content" entering={entering} exiting={exiting}>
135
+ {children}
136
+ </Animated.View>
137
+ );
138
+ }
139
+
140
+ return (
141
+ <AnimationSettingsProvider value={animationSettingsContextValue}>
142
+ <SkeletonAnimationProvider value={animationContextValue}>
143
+ <PulseAnimation
144
+ animation={animation}
145
+ isAnimatedStyleActive={isAnimatedStyleActive}
146
+ >
147
+ <Animated.View
148
+ key="skeleton"
149
+ entering={entering}
150
+ exiting={exiting}
151
+ onLayout={handleLayout}
152
+ style={[skeletonStyleSheet.borderCurve, style]}
153
+ className={rootClassName}
154
+ {...restProps}
155
+ >
156
+ {variant === 'shimmer' && componentWidth > 0 && (
157
+ <ShimmerAnimation
158
+ animation={animation}
159
+ isAnimatedStyleActive={isAnimatedStyleActive}
160
+ />
161
+ )}
162
+ </Animated.View>
163
+ </PulseAnimation>
164
+ </SkeletonAnimationProvider>
165
+ </AnimationSettingsProvider>
166
+ );
167
+ };
168
+
169
+ // --------------------------------------------------
170
+
171
+ Skeleton.displayName = DISPLAY_NAME.SKELETON;
172
+
173
+ /**
174
+ * Skeleton component for displaying loading placeholders
175
+ *
176
+ * @component Skeleton - Animated loading placeholder that can display shimmer or pulse effects.
177
+ * Shows skeleton state when isLoading is true, otherwise displays children content.
178
+ * Supports customizable animations through the animation prop with shimmer and pulse configurations.
179
+ * Shape and size are controlled via className for maximum flexibility.
180
+ *
181
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/skeleton
182
+ */
183
+ export default Skeleton;
@@ -0,0 +1,191 @@
1
+ import type { ViewProps } from 'react-native';
2
+ import type {
3
+ AnimatedProps,
4
+ EasingFunction,
5
+ EntryOrExitLayoutType,
6
+ SharedValue,
7
+ } from 'react-native-reanimated';
8
+ import type { Animation, AnimationRoot } from '../../helpers/internal/types';
9
+
10
+ /**
11
+ * Skeleton animation type - defines the animation style
12
+ */
13
+ export type SkeletonAnimation = 'shimmer' | 'pulse' | 'none';
14
+
15
+ /**
16
+ * Shimmer animation configuration for Skeleton root component
17
+ */
18
+ export type SkeletonShimmerAnimation = Animation<{
19
+ /**
20
+ * Animation duration in milliseconds
21
+ * @default 1500
22
+ */
23
+ duration?: number;
24
+ /**
25
+ * Speed multiplier for the animation
26
+ * @default 1
27
+ */
28
+ speed?: number;
29
+ /**
30
+ * Highlight color for the shimmer effect
31
+ */
32
+ highlightColor?: string;
33
+ /**
34
+ * Easing function for the animation
35
+ */
36
+ easing?: EasingFunction;
37
+ }>;
38
+
39
+ /**
40
+ * Pulse animation configuration for Skeleton root component
41
+ */
42
+ export type SkeletonPulseAnimation = Animation<{
43
+ /**
44
+ * Animation duration in milliseconds
45
+ * @default 1000
46
+ */
47
+ duration?: number;
48
+ /**
49
+ * Minimum opacity value
50
+ * @default 0.5
51
+ */
52
+ minOpacity?: number;
53
+ /**
54
+ * Maximum opacity value
55
+ * @default 1
56
+ */
57
+ maxOpacity?: number;
58
+ /**
59
+ * Easing function for the animation
60
+ */
61
+ easing?: EasingFunction;
62
+ }>;
63
+
64
+ /**
65
+ * Animation configuration for Skeleton root component
66
+ */
67
+ export type SkeletonRootAnimation = AnimationRoot<{
68
+ entering?: Animation<{
69
+ /**
70
+ * Custom entering animation for skeleton
71
+ */
72
+ value?: EntryOrExitLayoutType;
73
+ }>;
74
+ /**
75
+ * Exiting animation for the skeleton
76
+ */
77
+ exiting?: Animation<{
78
+ /**
79
+ * Custom exiting animation for skeleton
80
+ */
81
+ value?: EntryOrExitLayoutType;
82
+ }>;
83
+ /**
84
+ * Shimmer animation configuration
85
+ */
86
+ shimmer?: SkeletonShimmerAnimation;
87
+ /**
88
+ * Pulse animation configuration
89
+ */
90
+ pulse?: SkeletonPulseAnimation;
91
+ /**
92
+ * Entering animation for the skeleton
93
+ */
94
+ }>;
95
+
96
+ /**
97
+ * Props for the main Skeleton component
98
+ */
99
+ export interface SkeletonProps extends AnimatedProps<ViewProps> {
100
+ /**
101
+ * Child components to show when not loading
102
+ */
103
+ children?: React.ReactNode;
104
+
105
+ /**
106
+ * Whether the skeleton is currently loading
107
+ * @default true
108
+ */
109
+ isLoading?: boolean;
110
+
111
+ /**
112
+ * Animation variant
113
+ * @default 'shimmer'
114
+ */
115
+ variant?: SkeletonAnimation;
116
+
117
+ /**
118
+ * Animation configuration
119
+ */
120
+ animation?: SkeletonRootAnimation;
121
+
122
+ /**
123
+ * Whether animated styles (react-native-reanimated) are active
124
+ * When `false`, the animated style is removed and you can implement custom logic
125
+ * This prop should only be used when you want to write custom styling logic instead of the default animated styles
126
+ * @default true
127
+ */
128
+ isAnimatedStyleActive?: boolean;
129
+
130
+ /**
131
+ * Additional CSS classes for styling
132
+ *
133
+ * @note The following style properties are occupied by animations and cannot be set via className:
134
+ * - `opacity` - Animated for pulse variant transitions (min: 0.5, max: 1)
135
+ *
136
+ * The shimmer variant uses an internal overlay with `transform` (translateX) animation, which doesn't affect the className prop.
137
+ *
138
+ * To customize these properties, use the `animation` prop:
139
+ * ```tsx
140
+ * <Skeleton
141
+ * variant="pulse"
142
+ * animation={{
143
+ * pulse: { minOpacity: 0.5, maxOpacity: 1, duration: 1000, easing: Easing.inOut(Easing.ease) }
144
+ * }}
145
+ * />
146
+ * ```
147
+ *
148
+ * For shimmer variant:
149
+ * ```tsx
150
+ * <Skeleton
151
+ * variant="shimmer"
152
+ * animation={{
153
+ * shimmer: { duration: 1500, speed: 1, highlightColor: '#ffffff', easing: Easing.linear }
154
+ * }}
155
+ * />
156
+ * ```
157
+ *
158
+ * To completely disable animated styles and use your own via className or style prop, set `isAnimatedStyleActive={false}`.
159
+ */
160
+ className?: string;
161
+ }
162
+
163
+ /**
164
+ * Context value for skeleton animation provider
165
+ */
166
+ export interface SkeletonAnimationContextValue {
167
+ /**
168
+ * Whether the skeleton is currently loading
169
+ */
170
+ isLoading: boolean;
171
+ /**
172
+ * Animation variant
173
+ */
174
+ variant: SkeletonAnimation;
175
+ /**
176
+ * Shared animation progress value
177
+ */
178
+ progress: SharedValue<number>;
179
+ /**
180
+ * Component width for shimmer calculation
181
+ */
182
+ componentWidth: number;
183
+ /**
184
+ * Component offset for shimmer calculation
185
+ */
186
+ offset: number;
187
+ /**
188
+ * Screen width for animation calculation
189
+ */
190
+ screenWidth: number;
191
+ }
@@ -0,0 +1,7 @@
1
+ export { default as SkeletonGroup } from './skeleton-group';
2
+ export { skeletonGroupClassNames } from './skeleton-group.styles';
3
+ export type {
4
+ SkeletonGroupContextValue,
5
+ SkeletonGroupItemProps,
6
+ SkeletonGroupRootProps,
7
+ } from './skeleton-group.types';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Display names for SkeletonGroup components
3
+ */
4
+ export const DISPLAY_NAME = {
5
+ SKELETON_GROUP_ROOT: 'HeroUINative.SkeletonGroup.Root',
6
+ SKELETON_GROUP_ITEM: 'HeroUINative.SkeletonGroup.Item',
7
+ };
@@ -0,0 +1,247 @@
1
+ # SkeletonGroup
2
+
3
+ Coordinates multiple skeleton loading placeholders with centralized animation control.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { SkeletonGroup } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <SkeletonGroup>
15
+ <SkeletonGroup.Item />
16
+ </SkeletonGroup>
17
+ ```
18
+
19
+ - **SkeletonGroup**: Root container that provides centralized control for all skeleton items
20
+ - **SkeletonGroup.Item**: Individual skeleton item that inherits props from the parent group
21
+
22
+ ## Usage
23
+
24
+ ### Basic Usage
25
+
26
+ The SkeletonGroup component manages multiple skeleton items with shared loading state and animation.
27
+
28
+ ```tsx
29
+ <SkeletonGroup isLoading={isLoading}>
30
+ <SkeletonGroup.Item className="h-4 w-full rounded-md" />
31
+ <SkeletonGroup.Item className="h-4 w-3/4 rounded-md" />
32
+ <SkeletonGroup.Item className="h-4 w-1/2 rounded-md" />
33
+ </SkeletonGroup>
34
+ ```
35
+
36
+ ### With Container Layout
37
+
38
+ Use className on the group to control layout of skeleton items.
39
+
40
+ ```tsx
41
+ <SkeletonGroup isLoading={isLoading} className="flex-row items-center gap-3">
42
+ <SkeletonGroup.Item className="h-12 w-12 rounded-lg" />
43
+ <View className="flex-1 gap-1.5">
44
+ <SkeletonGroup.Item className="h-4 w-full rounded-md" />
45
+ <SkeletonGroup.Item className="h-3 w-2/3 rounded-md" />
46
+ </View>
47
+ </SkeletonGroup>
48
+ ```
49
+
50
+ ### With isSkeletonOnly for Pure Skeleton Layouts
51
+
52
+ Use `isSkeletonOnly` when the group contains only skeleton placeholders with layout wrappers (like View) that have no content to render in the loaded state. This prop hides the entire group when `isLoading` is false, preventing empty containers from affecting your layout.
53
+
54
+ ```tsx
55
+ <SkeletonGroup
56
+ isLoading={isLoading}
57
+ isSkeletonOnly // Hides entire group when isLoading is false
58
+ className="flex-row items-center gap-3"
59
+ >
60
+ <SkeletonGroup.Item className="h-12 w-12 rounded-lg" />
61
+ {/* This View is only for layout, no content */}
62
+ <View className="flex-1 gap-1.5">
63
+ <SkeletonGroup.Item className="h-4 w-full rounded-md" />
64
+ <SkeletonGroup.Item className="h-3 w-2/3 rounded-md" />
65
+ </View>
66
+ </SkeletonGroup>
67
+ ```
68
+
69
+ ### With Animation Variants
70
+
71
+ Control animation style for all items in the group.
72
+
73
+ ```tsx
74
+ <SkeletonGroup isLoading={isLoading} variant="pulse">
75
+ <SkeletonGroup.Item className="h-10 w-10 rounded-full" />
76
+ <SkeletonGroup.Item className="h-4 w-32 rounded-md" />
77
+ <SkeletonGroup.Item className="h-3 w-24 rounded-md" />
78
+ </SkeletonGroup>
79
+ ```
80
+
81
+ ### With Custom Animation Configuration
82
+
83
+ Configure shimmer or pulse animations for the entire group.
84
+
85
+ ```tsx
86
+ <SkeletonGroup
87
+ isLoading={isLoading}
88
+ variant="shimmer"
89
+ animation={{
90
+ shimmer: {
91
+ duration: 2000,
92
+ highlightColor: 'rgba(59, 130, 246, 0.3)',
93
+ },
94
+ }}
95
+ >
96
+ <SkeletonGroup.Item className="h-16 w-full rounded-lg" />
97
+ <SkeletonGroup.Item className="h-4 w-3/4 rounded-md" />
98
+ </SkeletonGroup>
99
+ ```
100
+
101
+ ### With Enter/Exit Animations
102
+
103
+ Apply Reanimated transitions when the group appears or disappears.
104
+
105
+ ```tsx
106
+ <SkeletonGroup
107
+ entering={FadeInLeft}
108
+ exiting={FadeOutRight}
109
+ isLoading={isLoading}
110
+ className="w-full gap-2"
111
+ >
112
+ <SkeletonGroup.Item className="h-4 w-full rounded-md" />
113
+ <SkeletonGroup.Item className="h-4 w-3/4 rounded-md" />
114
+ </SkeletonGroup>
115
+ ```
116
+
117
+ ## Example
118
+
119
+ ```tsx
120
+ import { Card, SkeletonGroup, Avatar } from '@/heroui';
121
+ import { useState } from 'react';
122
+ import { Text, View, Image } from 'react-native';
123
+
124
+ export default function SkeletonGroupExample() {
125
+ const [isLoading, setIsLoading] = useState(true);
126
+
127
+ return (
128
+ <SkeletonGroup isLoading={isLoading}>
129
+ <Card className="p-4">
130
+ <Card.Header>
131
+ <View className="flex-row items-center gap-3 mb-4">
132
+ <SkeletonGroup.Item className="h-10 w-10 rounded-full">
133
+ <Avatar size="sm" alt="Avatar">
134
+ <Avatar.Image
135
+ source={{ uri: 'https://i.pravatar.cc/150?img=4' }}
136
+ />
137
+ <Avatar.Fallback />
138
+ </Avatar>
139
+ </SkeletonGroup.Item>
140
+
141
+ <View className="flex-1 gap-1">
142
+ <SkeletonGroup.Item className="h-3 w-32 rounded-md">
143
+ <Text className="font-semibold text-foreground">John Doe</Text>
144
+ </SkeletonGroup.Item>
145
+ <SkeletonGroup.Item className="h-3 w-24 rounded-md">
146
+ <Text className="text-sm text-muted">@johndoe</Text>
147
+ </SkeletonGroup.Item>
148
+ </View>
149
+ </View>
150
+
151
+ <View className="mb-4 gap-1.5">
152
+ <SkeletonGroup.Item className="h-4 w-full rounded-md">
153
+ <Text className="text-base text-foreground">
154
+ This is the first line of the post content.
155
+ </Text>
156
+ </SkeletonGroup.Item>
157
+ <SkeletonGroup.Item className="h-4 w-full rounded-md">
158
+ <Text className="text-base text-foreground">
159
+ Second line with more interesting content to read.
160
+ </Text>
161
+ </SkeletonGroup.Item>
162
+ <SkeletonGroup.Item className="h-4 w-2/3 rounded-md">
163
+ <Text className="text-base text-foreground">
164
+ Last line is shorter.
165
+ </Text>
166
+ </SkeletonGroup.Item>
167
+ </View>
168
+ </Card.Header>
169
+
170
+ <SkeletonGroup.Item className="h-48 w-full rounded-lg">
171
+ <View className="h-48 bg-surface-tertiary rounded-lg overflow-hidden">
172
+ <Image
173
+ source={{
174
+ uri: 'https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/backgrounds/cards/car1.jpg',
175
+ }}
176
+ className="h-full w-full"
177
+ />
178
+ </View>
179
+ </SkeletonGroup.Item>
180
+ </Card>
181
+ </SkeletonGroup>
182
+ );
183
+ }
184
+ ```
185
+
186
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/skeleton-group.tsx>).
187
+
188
+ ## API Reference
189
+
190
+ ### SkeletonGroup
191
+
192
+ | prop | type | default | description |
193
+ | ----------------------- | -------------------------------- | ----------- | ---------------------------------------------------------------------- |
194
+ | `children` | `React.ReactNode` | - | SkeletonGroup.Item components and layout elements |
195
+ | `isLoading` | `boolean` | `true` | Whether the skeleton items are currently loading |
196
+ | `isSkeletonOnly` | `boolean` | `false` | Hides entire group when isLoading is false (for skeleton-only layouts) |
197
+ | `variant` | `'shimmer' \| 'pulse' \| 'none'` | `'shimmer'` | Animation variant for all items in the group |
198
+ | `animation` | `SkeletonRootAnimation` | - | Animation configuration |
199
+ | `className` | `string` | - | Additional CSS classes for the group container |
200
+ | `style` | `StyleProp<ViewStyle>` | - | Custom styles for the group container |
201
+ | `...Animated.ViewProps` | `AnimatedProps<ViewProps>` | - | All Reanimated Animated.View props are supported |
202
+
203
+ #### SkeletonRootAnimation
204
+
205
+ Animation configuration for SkeletonGroup component. Can be:
206
+
207
+ - `false` or `"disabled"`: Disable only root animations
208
+ - `"disable-all"`: Disable all animations including children
209
+ - `true` or `undefined`: Use default animations
210
+ - `object`: Custom animation configuration
211
+
212
+ | prop | type | default | description |
213
+ | ------------------------ | ---------------------------------------- | --------------------------- | ----------------------------------------------- |
214
+ | `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
215
+ | `entering.value` | `EntryOrExitLayoutType` | `FadeIn` | Custom entering animation |
216
+ | `exiting.value` | `EntryOrExitLayoutType` | `FadeOut` | Custom exiting animation |
217
+ | `shimmer.duration` | `number` | `1500` | Animation duration in milliseconds |
218
+ | `shimmer.speed` | `number` | `1` | Speed multiplier for the animation |
219
+ | `shimmer.highlightColor` | `string` | - | Highlight color for the shimmer effect |
220
+ | `shimmer.easing` | `EasingFunction` | `Easing.linear` | Easing function for the animation |
221
+ | `pulse.duration` | `number` | `1000` | Animation duration in milliseconds |
222
+ | `pulse.minOpacity` | `number` | `0.5` | Minimum opacity value |
223
+ | `pulse.maxOpacity` | `number` | `1` | Maximum opacity value |
224
+ | `pulse.easing` | `EasingFunction` | `Easing.inOut(Easing.ease)` | Easing function for the animation |
225
+
226
+ ### SkeletonGroup.Item
227
+
228
+ | prop | type | default | description |
229
+ | ----------------------- | -------------------------------- | --------- | ------------------------------------------------------------------- |
230
+ | `children` | `React.ReactNode` | - | Content to show when not loading |
231
+ | `isLoading` | `boolean` | inherited | Whether the skeleton is currently loading (overrides group setting) |
232
+ | `variant` | `'shimmer' \| 'pulse' \| 'none'` | inherited | Animation variant (overrides group setting) |
233
+ | `animation` | `SkeletonRootAnimation` | inherited | Animation configuration (overrides group setting) |
234
+ | `className` | `string` | - | Additional CSS classes for styling the item |
235
+ | `...Animated.ViewProps` | `AnimatedProps<ViewProps>` | - | All Reanimated Animated.View props are supported |
236
+
237
+ ## Special Notes
238
+
239
+ ### Props Inheritance
240
+
241
+ SkeletonGroup.Item components inherit all animation-related props from their parent SkeletonGroup:
242
+
243
+ - `isLoading`
244
+ - `variant`
245
+ - `animation`
246
+
247
+ Individual items can override any inherited prop by providing their own value.
@@ -0,0 +1,10 @@
1
+ import { tv } from 'tailwind-variants';
2
+ import { combineStyles } from '../../helpers/internal/utils';
3
+
4
+ const root = tv({
5
+ base: '',
6
+ });
7
+
8
+ export const skeletonGroupClassNames = combineStyles({
9
+ root,
10
+ });