@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,24 @@
1
+ import type { SlottableViewProps, ViewRef } from '../../helpers/internal/types';
2
+
3
+ /**
4
+ * Props for the activity indicator root component.
5
+ *
6
+ * @extends SlottableViewProps Inherits view props
7
+ */
8
+ export interface RootProps extends SlottableViewProps {
9
+ /** Whether the activity indicator is loading */
10
+ isLoading?: boolean;
11
+ }
12
+
13
+ /** Reference type for the activity indicator root component */
14
+ export type RootRef = ViewRef;
15
+
16
+ /**
17
+ * Props for the activity indicator indicator component.
18
+ *
19
+ * @extends SlottableViewProps Inherits view props
20
+ */
21
+ export interface IndicatorProps extends SlottableViewProps {}
22
+
23
+ /** Reference type for the activity indicator indicator component */
24
+ export type IndicatorRef = ViewRef;
@@ -0,0 +1,2 @@
1
+ export * from './activity-indicator';
2
+ export * from './activity-indicator.types';
@@ -0,0 +1,124 @@
1
+ import { createContext, forwardRef, useContext, useId } from 'react';
2
+ import { Text as RNText, View } from 'react-native';
3
+ import * as Slot from '../slot';
4
+ import type {
5
+ ContentProps,
6
+ ContentRef,
7
+ DescriptionProps,
8
+ DescriptionRef,
9
+ IndicatorProps,
10
+ IndicatorRef,
11
+ RootContext,
12
+ RootProps,
13
+ RootRef,
14
+ TitleProps,
15
+ TitleRef,
16
+ } from './alert.types';
17
+
18
+ const AlertContext = createContext<(RootContext & { nativeID: string }) | null>(
19
+ null
20
+ );
21
+
22
+ /**
23
+ * Hook to access alert root context.
24
+ * Throws when used outside Alert.Root.
25
+ */
26
+ function useRootContext(): RootContext & { nativeID: string } {
27
+ const context = useContext(AlertContext);
28
+ if (!context) {
29
+ throw new Error(
30
+ 'Alert compound components cannot be rendered outside the Alert component'
31
+ );
32
+ }
33
+ return context;
34
+ }
35
+
36
+ // --------------------------------------------------
37
+
38
+ const Root = forwardRef<RootRef, RootProps>(
39
+ ({ asChild, id, status = 'default', ...viewProps }, ref) => {
40
+ const generatedId = useId();
41
+ const nativeID = id != null ? String(id) : generatedId;
42
+
43
+ const Component = asChild ? Slot.View : View;
44
+
45
+ return (
46
+ <AlertContext.Provider value={{ nativeID, status }}>
47
+ <Component
48
+ ref={ref}
49
+ role="alert"
50
+ aria-labelledby={`${nativeID}_label`}
51
+ aria-describedby={`${nativeID}_desc`}
52
+ nativeID={nativeID}
53
+ {...viewProps}
54
+ />
55
+ </AlertContext.Provider>
56
+ );
57
+ }
58
+ );
59
+
60
+ Root.displayName = 'HeroUINative.Primitive.Alert.Root';
61
+
62
+ // --------------------------------------------------
63
+
64
+ const Indicator = forwardRef<IndicatorRef, IndicatorProps>(
65
+ ({ asChild, ...props }, ref) => {
66
+ const Component = asChild ? Slot.View : View;
67
+
68
+ return (
69
+ <Component ref={ref} role="presentation" aria-hidden={true} {...props} />
70
+ );
71
+ }
72
+ );
73
+
74
+ Indicator.displayName = 'HeroUINative.Primitive.Alert.Indicator';
75
+
76
+ // --------------------------------------------------
77
+
78
+ const Content = forwardRef<ContentRef, ContentProps>(
79
+ ({ asChild, ...props }, ref) => {
80
+ const Component = asChild ? Slot.View : View;
81
+
82
+ return <Component ref={ref} {...props} />;
83
+ }
84
+ );
85
+
86
+ Content.displayName = 'HeroUINative.Primitive.Alert.Content';
87
+
88
+ // --------------------------------------------------
89
+
90
+ const Title = forwardRef<TitleRef, TitleProps>(({ asChild, ...props }, ref) => {
91
+ const { nativeID } = useRootContext();
92
+
93
+ const Component = asChild ? Slot.Text : RNText;
94
+
95
+ return (
96
+ <Component
97
+ ref={ref}
98
+ role="heading"
99
+ aria-level={2}
100
+ nativeID={`${nativeID}_label`}
101
+ {...props}
102
+ />
103
+ );
104
+ });
105
+
106
+ Title.displayName = 'HeroUINative.Primitive.Alert.Title';
107
+
108
+ // --------------------------------------------------
109
+
110
+ const Description = forwardRef<DescriptionRef, DescriptionProps>(
111
+ ({ asChild, ...props }, ref) => {
112
+ const { nativeID } = useRootContext();
113
+
114
+ const Component = asChild ? Slot.Text : RNText;
115
+
116
+ return <Component ref={ref} nativeID={`${nativeID}_desc`} {...props} />;
117
+ }
118
+ );
119
+
120
+ Description.displayName = 'HeroUINative.Primitive.Alert.Description';
121
+
122
+ // --------------------------------------------------
123
+
124
+ export { Content, Description, Indicator, Root, Title, useRootContext };
@@ -0,0 +1,87 @@
1
+ import type {
2
+ SlottableTextProps,
3
+ SlottableViewProps,
4
+ TextRef,
5
+ ViewRef,
6
+ } from '../../helpers/internal/types';
7
+
8
+ /**
9
+ * Alert status type controlling the visual treatment and icon displayed.
10
+ */
11
+ export type AlertStatus =
12
+ | 'default'
13
+ | 'accent'
14
+ | 'success'
15
+ | 'warning'
16
+ | 'danger';
17
+
18
+ /**
19
+ * Context for the alert root component.
20
+ * Provides unique identifier for accessibility labelling and the current status.
21
+ */
22
+ export type RootContext = {
23
+ /** Unique identifier for the alert, used for aria-labelledby and aria-describedby */
24
+ nativeID: string;
25
+ /** Current alert status for sub-component styling */
26
+ status: AlertStatus;
27
+ };
28
+
29
+ /**
30
+ * Props for the Alert root component.
31
+ * Extends SlottableViewProps to support the asChild pattern.
32
+ *
33
+ * @extends SlottableViewProps Inherits view props for slot-based composition
34
+ */
35
+ export type RootProps = SlottableViewProps & {
36
+ /** Unique identifier for the alert. Auto-generated when not provided. */
37
+ id?: string | number;
38
+ /**
39
+ * The status of the alert, controlling its icon and color treatment.
40
+ *
41
+ * @default "default"
42
+ */
43
+ status?: AlertStatus;
44
+ };
45
+
46
+ /**
47
+ * Props for the Alert indicator component.
48
+ * Visual indicator (e.g., icon, status dot) - decorative, hidden from assistive tech.
49
+ *
50
+ * @extends SlottableViewProps Inherits view props for slot-based composition
51
+ */
52
+ export type IndicatorProps = SlottableViewProps;
53
+
54
+ /**
55
+ * Props for the Alert content wrapper component.
56
+ * Container for title and description, provides layout structure.
57
+ *
58
+ * @extends SlottableViewProps Inherits view props for slot-based composition
59
+ */
60
+ export type ContentProps = SlottableViewProps;
61
+
62
+ /**
63
+ * Props for the Alert title component.
64
+ * Primary heading of the alert, used for aria-labelledby association.
65
+ *
66
+ * @extends SlottableTextProps Inherits text props for slot-based composition
67
+ */
68
+ export type TitleProps = SlottableTextProps;
69
+
70
+ /**
71
+ * Props for the Alert description component.
72
+ * Secondary text of the alert, used for aria-describedby association.
73
+ *
74
+ * @extends SlottableTextProps Inherits text props for slot-based composition
75
+ */
76
+ export type DescriptionProps = SlottableTextProps;
77
+
78
+ /** Reference type for the Alert root component */
79
+ export type RootRef = ViewRef;
80
+ /** Reference type for the Alert indicator component */
81
+ export type IndicatorRef = ViewRef;
82
+ /** Reference type for the Alert content component */
83
+ export type ContentRef = ViewRef;
84
+ /** Reference type for the Alert title component */
85
+ export type TitleRef = TextRef;
86
+ /** Reference type for the Alert description component */
87
+ export type DescriptionRef = TextRef;
@@ -0,0 +1,2 @@
1
+ export * from './alert';
2
+ export * from './alert.types';
@@ -0,0 +1,171 @@
1
+ import * as React from 'react';
2
+ import { createContext, forwardRef, useEffect, useMemo, useState } from 'react';
3
+ import {
4
+ type ImageErrorEventData,
5
+ type ImageLoadEvent,
6
+ type NativeSyntheticEvent,
7
+ Image as RNImage,
8
+ View,
9
+ } from 'react-native';
10
+ import * as Slot from '../slot';
11
+ import type {
12
+ AvatarStatus,
13
+ FallbackProps,
14
+ FallbackRef,
15
+ ImageProps,
16
+ ImageRef,
17
+ RootProps,
18
+ RootRef,
19
+ } from './avatar.types';
20
+ import { isSameSource, isValidSource } from './avatar.utils';
21
+
22
+ interface IRootContext extends RootProps {
23
+ status: AvatarStatus;
24
+ setStatus: (status: AvatarStatus) => void;
25
+ }
26
+
27
+ const RootContext = createContext<IRootContext | null>(null);
28
+
29
+ export function useRootContext() {
30
+ const context = React.useContext(RootContext);
31
+ if (!context) {
32
+ throw new Error(
33
+ 'Avatar compound components cannot be rendered outside the Avatar component'
34
+ );
35
+ }
36
+ return context;
37
+ }
38
+
39
+ // --------------------------------------------------
40
+
41
+ const Root = forwardRef<RootRef, RootProps>(
42
+ ({ asChild, alt, ...viewProps }, ref) => {
43
+ const [status, setStatus] = useState<AvatarStatus>('error');
44
+
45
+ const Component = asChild ? Slot.View : View;
46
+
47
+ const value = useMemo(
48
+ () => ({
49
+ alt,
50
+ status,
51
+ setStatus,
52
+ }),
53
+ [alt, status, setStatus]
54
+ );
55
+
56
+ return (
57
+ <RootContext.Provider value={value}>
58
+ <Component ref={ref} {...viewProps} />
59
+ </RootContext.Provider>
60
+ );
61
+ }
62
+ );
63
+
64
+ Root.displayName = 'HeroUINative.Primitive.Avatar.Root';
65
+
66
+ // --------------------------------------------------
67
+
68
+ const Image = forwardRef<ImageRef, ImageProps>(
69
+ (
70
+ {
71
+ asChild,
72
+ onLoad: onLoadProps,
73
+ onError: onErrorProps,
74
+ onLoadingStatusChange,
75
+ ...props
76
+ },
77
+ ref
78
+ ) => {
79
+ const { alt, setStatus, status } = useRootContext();
80
+
81
+ // Use ref to track the previous source value for comparison
82
+ const previousSourceRef = React.useRef<ImageProps['source'] | undefined>(
83
+ undefined
84
+ );
85
+
86
+ useEffect(() => {
87
+ const currentSource = props?.source;
88
+ const previousSource = previousSourceRef.current;
89
+
90
+ // Only reset status if the source actually changed (not just reference)
91
+ const sourceChanged = !isSameSource(currentSource, previousSource);
92
+
93
+ if (sourceChanged) {
94
+ // Update the ref to track the new source
95
+ previousSourceRef.current = currentSource;
96
+
97
+ if (isValidSource(currentSource)) {
98
+ setStatus('loading');
99
+ } else {
100
+ setStatus('error');
101
+ }
102
+ }
103
+
104
+ // Cleanup: only reset to error if component unmounts or source becomes invalid
105
+ return () => {
106
+ // Only reset if source is no longer valid or component is unmounting
107
+ if (!isValidSource(currentSource)) {
108
+ setStatus('error');
109
+ }
110
+ };
111
+ }, [props?.source, setStatus]);
112
+
113
+ const onLoad = React.useCallback(
114
+ (e: ImageLoadEvent) => {
115
+ setStatus('loaded');
116
+ onLoadingStatusChange?.('loaded');
117
+ onLoadProps?.(e);
118
+ },
119
+ [onLoadProps, setStatus, onLoadingStatusChange]
120
+ );
121
+
122
+ const onError = React.useCallback(
123
+ (e: NativeSyntheticEvent<ImageErrorEventData>) => {
124
+ setStatus('error');
125
+ onLoadingStatusChange?.('error');
126
+ onErrorProps?.(e);
127
+ },
128
+ [onErrorProps, setStatus, onLoadingStatusChange]
129
+ );
130
+
131
+ const Component = asChild ? Slot.Image : RNImage;
132
+
133
+ if (status === 'error') {
134
+ return null;
135
+ }
136
+
137
+ return (
138
+ <Component
139
+ ref={ref}
140
+ alt={alt}
141
+ onLoad={onLoad}
142
+ onError={onError}
143
+ {...props}
144
+ />
145
+ );
146
+ }
147
+ );
148
+
149
+ Image.displayName = 'HeroUINative.Primitive.Avatar.Image';
150
+
151
+ // --------------------------------------------------
152
+
153
+ const Fallback = forwardRef<FallbackRef, FallbackProps>(
154
+ ({ asChild, ...props }, ref) => {
155
+ const { alt, status } = useRootContext();
156
+
157
+ if (status !== 'error') {
158
+ return null;
159
+ }
160
+
161
+ const Component = asChild ? Slot.View : View;
162
+
163
+ return <Component ref={ref} role={'img'} aria-label={alt} {...props} />;
164
+ }
165
+ );
166
+
167
+ Fallback.displayName = 'HeroUINative.Primitive.Avatar.Fallback';
168
+
169
+ // --------------------------------------------------
170
+
171
+ export { Fallback, Image, Root };
@@ -0,0 +1,62 @@
1
+ import type { Image, ImageProps as RNImageProps } from 'react-native';
2
+ import type {
3
+ ComponentPropsWithAsChild,
4
+ SlottableViewProps,
5
+ ViewRef,
6
+ } from '../../helpers/internal/types';
7
+
8
+ /**
9
+ * Represents the loading state of an avatar image.
10
+ * - 'loading': Image is currently being loaded
11
+ * - 'loaded': Image has successfully loaded
12
+ * - 'error': Image failed to load or source is invalid
13
+ */
14
+ type AvatarStatus = 'loading' | 'loaded' | 'error';
15
+
16
+ /**
17
+ * Props for the Avatar root component.
18
+ * Extends SlottableViewProps to support the asChild pattern.
19
+ */
20
+ type RootProps = SlottableViewProps & {
21
+ /** Alternative text description for the avatar, used for accessibility */
22
+ alt: string;
23
+ };
24
+
25
+ /**
26
+ * Props for the Avatar image component.
27
+ * Extends React Native Image props with additional avatar-specific functionality.
28
+ */
29
+ type ImageProps = Omit<
30
+ ComponentPropsWithAsChild<typeof Image>,
31
+ 'alt' | 'source'
32
+ > & {
33
+ /** Optional child elements to render within the image component */
34
+ children?: React.ReactNode;
35
+ /** Source of the image */
36
+ source: RNImageProps['source'];
37
+ /** Callback fired when the loading status changes */
38
+ onLoadingStatusChange?: (status: AvatarStatus) => void;
39
+ };
40
+
41
+ /**
42
+ * Props for the Avatar fallback component.
43
+ * Displayed when the image fails to load or is in error state.
44
+ */
45
+ type FallbackProps = SlottableViewProps;
46
+
47
+ /** Reference type for the Avatar root component */
48
+ type RootRef = ViewRef;
49
+ /** Reference type for the Avatar image component */
50
+ type ImageRef = React.ComponentRef<typeof Image>;
51
+ /** Reference type for the Avatar fallback component */
52
+ type FallbackRef = ViewRef;
53
+
54
+ export type {
55
+ AvatarStatus,
56
+ FallbackProps,
57
+ FallbackRef,
58
+ ImageProps,
59
+ ImageRef,
60
+ RootProps,
61
+ RootRef,
62
+ };
@@ -0,0 +1,102 @@
1
+ import type { ImageSourcePropType } from 'react-native';
2
+
3
+ /**
4
+ * Validates whether an image source is valid and can be loaded.
5
+ *
6
+ * @param source - The image source to validate. Can be a require() statement,
7
+ * URI object, or array of URI objects.
8
+ * @returns `true` if the source is valid and contains loadable content, `false` otherwise.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * // Valid sources
13
+ * isValidSource(require('./avatar.png')); // true (returns a number)
14
+ * isValidSource({ uri: 'https://example.com/avatar.jpg' }); // true
15
+ * isValidSource([{ uri: 'https://example.com/avatar.jpg' }]); // true
16
+ *
17
+ * // Invalid sources
18
+ * isValidSource(undefined); // false
19
+ * isValidSource({ uri: '' }); // false
20
+ * isValidSource([{ uri: '' }, { uri: null }]); // false
21
+ * ```
22
+ */
23
+ export function isValidSource(source?: ImageSourcePropType) {
24
+ if (!source) {
25
+ return false;
26
+ }
27
+ // Using require() for the source returns a number
28
+ if (typeof source === 'number') {
29
+ return true;
30
+ }
31
+
32
+ if (Array.isArray(source)) {
33
+ return source.some((s) => !!s.uri);
34
+ }
35
+
36
+ return !!source.uri;
37
+ }
38
+
39
+ /**
40
+ * Compares two image sources to determine if they represent the same image.
41
+ * Performs deep comparison of source values, not just reference equality.
42
+ *
43
+ * @param source1 - First image source to compare
44
+ * @param source2 - Second image source to compare
45
+ * @returns `true` if both sources represent the same image, `false` otherwise
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * // Same sources (different object references)
50
+ * isSameSource({ uri: 'https://example.com/img.jpg' }, { uri: 'https://example.com/img.jpg' }); // true
51
+ *
52
+ * // Different sources
53
+ * isSameSource({ uri: 'https://example.com/img1.jpg' }, { uri: 'https://example.com/img2.jpg' }); // false
54
+ *
55
+ * // Same require() values
56
+ * isSameSource(require('./img.png'), require('./img.png')); // true (if same number)
57
+ * ```
58
+ */
59
+ export function isSameSource(
60
+ source1?: ImageSourcePropType,
61
+ source2?: ImageSourcePropType
62
+ ): boolean {
63
+ // Both undefined/null
64
+ if (!source1 && !source2) {
65
+ return true;
66
+ }
67
+
68
+ // One is undefined/null, the other is not
69
+ if (!source1 || !source2) {
70
+ return false;
71
+ }
72
+
73
+ // Both are numbers (require() statements)
74
+ if (typeof source1 === 'number' && typeof source2 === 'number') {
75
+ return source1 === source2;
76
+ }
77
+
78
+ // One is a number, the other is not
79
+ if (typeof source1 === 'number' || typeof source2 === 'number') {
80
+ return false;
81
+ }
82
+
83
+ // Both are arrays
84
+ if (Array.isArray(source1) && Array.isArray(source2)) {
85
+ if (source1.length !== source2.length) {
86
+ return false;
87
+ }
88
+ // Compare each element's URI
89
+ return source1.every((s1, index) => {
90
+ const s2 = source2[index];
91
+ return s1?.uri === s2?.uri;
92
+ });
93
+ }
94
+
95
+ // One is an array, the other is not
96
+ if (Array.isArray(source1) || Array.isArray(source2)) {
97
+ return false;
98
+ }
99
+
100
+ // Both are objects - compare URI values
101
+ return source1.uri === source2.uri;
102
+ }
@@ -0,0 +1,2 @@
1
+ export * from './avatar';
2
+ export * from './avatar.types';