@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,129 @@
1
+ # Description
2
+
3
+ Text component for providing accessible descriptions and helper text for form fields and other UI elements.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Description } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <Description>...</Description>
15
+ ```
16
+
17
+ - **Description**: Text component that displays description or helper text with muted styling. Can be linked to form fields via `nativeID` for accessibility support.
18
+
19
+ ## Usage
20
+
21
+ ### Basic Usage
22
+
23
+ Display description text with default muted styling.
24
+
25
+ ```tsx
26
+ <Description>This is a helpful description.</Description>
27
+ ```
28
+
29
+ ### With Form Fields
30
+
31
+ Provide accessible descriptions for form fields using the `nativeID` prop.
32
+
33
+ ```tsx
34
+ <TextField>
35
+ <Label>Email address</Label>
36
+ <Input
37
+ placeholder="Enter your email"
38
+ keyboardType="email-address"
39
+ autoCapitalize="none"
40
+ />
41
+ <Description nativeID="email-desc">
42
+ We'll never share your email with anyone else.
43
+ </Description>
44
+ </TextField>
45
+ ```
46
+
47
+ ### Accessibility Linking
48
+
49
+ Link descriptions to form fields for screen reader support by using `nativeID` and `aria-describedby`.
50
+
51
+ ```tsx
52
+ <TextField>
53
+ <Label>Password</Label>
54
+ <Input
55
+ placeholder="Create a password"
56
+ secureTextEntry
57
+ aria-describedby="password-desc"
58
+ />
59
+ <Description nativeID="password-desc">
60
+ Use at least 8 characters with a mix of letters, numbers, and symbols.
61
+ </Description>
62
+ </TextField>
63
+ ```
64
+
65
+ ### Hiding on Invalid State
66
+
67
+ Control whether the description should be hidden when the form field is invalid using the `hideOnInvalid` prop.
68
+
69
+ ```tsx
70
+ <TextField isInvalid={isInvalid}>
71
+ <Label>Email</Label>
72
+ <Input placeholder="Enter your email" />
73
+ <Description hideOnInvalid>
74
+ We'll never share your email with anyone else.
75
+ </Description>
76
+ <FieldError>Please enter a valid email address</FieldError>
77
+ </TextField>
78
+ ```
79
+
80
+ When `hideOnInvalid` is `true`, the description will be hidden when the field is invalid. When `false` (default), the description remains visible even when invalid.
81
+
82
+ ## Example
83
+
84
+ ```tsx
85
+ import { Description, TextField } from '@/heroui';
86
+ import { View } from 'react-native';
87
+
88
+ export default function DescriptionExample() {
89
+ return (
90
+ <View className="flex-1 justify-center px-5 gap-8">
91
+ <TextField>
92
+ <Label>Email address</Label>
93
+ <Input
94
+ placeholder="Enter your email"
95
+ keyboardType="email-address"
96
+ autoCapitalize="none"
97
+ />
98
+ <Description nativeID="email-desc">
99
+ We'll never share your email with anyone else.
100
+ </Description>
101
+ </TextField>
102
+ <TextField>
103
+ <Label>Password</Label>
104
+ <Input placeholder="Create a password" secureTextEntry />
105
+ <Description nativeID="password-desc">
106
+ Use at least 8 characters with a mix of letters, numbers, and symbols.
107
+ </Description>
108
+ </TextField>
109
+ </View>
110
+ );
111
+ }
112
+ ```
113
+
114
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/description.tsx>).
115
+
116
+ ## API Reference
117
+
118
+ ### Description
119
+
120
+ | prop | type | default | description |
121
+ | --------------- | ----------------------------------- | ------- | ------------------------------------------------------------------------------------------ |
122
+ | `children` | `React.ReactNode` | - | Description text content |
123
+ | `className` | `string` | - | Additional CSS classes to apply |
124
+ | `nativeID` | `string` | - | Native ID for accessibility. Used to link description to form fields via aria-describedby. |
125
+ | `isInvalid` | `boolean` | - | Whether the description is in an invalid state (overrides context) |
126
+ | `isDisabled` | `boolean` | - | Whether the description is disabled (overrides context) |
127
+ | `hideOnInvalid` | `boolean` | `false` | Whether to hide the description when invalid |
128
+ | `animation` | `DescriptionAnimation \| undefined` | - | Animation configuration for description transitions |
129
+ | `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
@@ -0,0 +1,25 @@
1
+ import { tv } from 'tailwind-variants';
2
+ import { combineStyles } from '../../helpers/internal/utils';
3
+
4
+ const root = tv({
5
+ base: 'text-sm text-muted',
6
+ variants: {
7
+ isInsideField: {
8
+ true: 'px-1.5',
9
+ },
10
+ isInvalid: {
11
+ true: 'text-danger',
12
+ },
13
+ isDisabled: {
14
+ true: 'opacity-disabled',
15
+ false: '',
16
+ },
17
+ },
18
+ defaultVariants: {
19
+ isDisabled: false,
20
+ },
21
+ });
22
+
23
+ export const descriptionClassNames = combineStyles({
24
+ root,
25
+ });
@@ -0,0 +1,81 @@
1
+ import { forwardRef } from 'react';
2
+ import Animated from 'react-native-reanimated';
3
+ import { HeroText } from '../../helpers/internal/components';
4
+ import { useFormField } from '../../helpers/internal/contexts';
5
+ import type { TextRef } from '../../helpers/internal/types';
6
+ import { useDescriptionAnimation } from './description.animation';
7
+ import { DISPLAY_NAME } from './description.constants';
8
+ import { descriptionClassNames } from './description.styles';
9
+ import type { DescriptionProps } from './description.types';
10
+
11
+ const AnimatedText = Animated.createAnimatedComponent(HeroText);
12
+
13
+ // --------------------------------------------------
14
+
15
+ const Description = forwardRef<TextRef, DescriptionProps>((props, ref) => {
16
+ const {
17
+ children,
18
+ className,
19
+ nativeID,
20
+ isInvalid: localIsInvalid,
21
+ isDisabled: localIsDisabled,
22
+ hideOnInvalid = false,
23
+ animation,
24
+ ...restProps
25
+ } = props;
26
+
27
+ const formField = useFormField();
28
+
29
+ const isInvalid =
30
+ localIsInvalid !== undefined
31
+ ? localIsInvalid
32
+ : (formField?.isInvalid ?? false);
33
+
34
+ const isDisabled =
35
+ localIsDisabled !== undefined
36
+ ? localIsDisabled
37
+ : (formField?.isDisabled ?? false);
38
+
39
+ const isInsideField = formField?.hasFieldPadding ?? false;
40
+
41
+ const rootClassName = descriptionClassNames.root({
42
+ isInvalid,
43
+ isDisabled,
44
+ isInsideField,
45
+ className,
46
+ });
47
+
48
+ const { entering, exiting } = useDescriptionAnimation({
49
+ animation,
50
+ hideOnInvalid,
51
+ });
52
+
53
+ if (isInvalid && hideOnInvalid) return null;
54
+
55
+ return (
56
+ <AnimatedText
57
+ ref={ref}
58
+ entering={entering}
59
+ exiting={exiting}
60
+ className={rootClassName}
61
+ nativeID={nativeID}
62
+ {...restProps}
63
+ >
64
+ {children}
65
+ </AnimatedText>
66
+ );
67
+ });
68
+
69
+ // --------------------------------------------------
70
+
71
+ Description.displayName = DISPLAY_NAME.DESCRIPTION;
72
+
73
+ /**
74
+ * Description component for form fields and other UI elements.
75
+ *
76
+ * Provides accessible description text with proper styling. Can be linked to
77
+ * form fields via the nativeID prop for accessibility support.
78
+ *
79
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/description
80
+ */
81
+ export default Description;
@@ -0,0 +1,77 @@
1
+ import type { TextProps } from 'react-native';
2
+ import type {
3
+ AnimatedProps,
4
+ EntryOrExitLayoutType,
5
+ } from 'react-native-reanimated';
6
+ import type {
7
+ AnimationRoot,
8
+ AnimationValue,
9
+ TextRef,
10
+ } from '../../helpers/internal/types';
11
+
12
+ /**
13
+ * Animation configuration for Description component
14
+ * Used by the Description component for animation support
15
+ */
16
+ export type DescriptionAnimation = AnimationRoot<{
17
+ entering?: AnimationValue<{
18
+ /**
19
+ * Custom entering animation for description
20
+ */
21
+ value?: EntryOrExitLayoutType;
22
+ }>;
23
+ exiting?: AnimationValue<{
24
+ /**
25
+ * Custom exiting animation for description
26
+ */
27
+ value?: EntryOrExitLayoutType;
28
+ }>;
29
+ }>;
30
+
31
+ /**
32
+ * Props for the Description component
33
+ */
34
+ export interface DescriptionProps
35
+ extends Omit<AnimatedProps<TextProps>, 'entering' | 'exiting'> {
36
+ /**
37
+ * Description text content
38
+ */
39
+ children?: React.ReactNode;
40
+ /**
41
+ * Whether the description is in an invalid state (overrides context)
42
+ * @default undefined
43
+ */
44
+ isInvalid?: boolean;
45
+ /**
46
+ * Whether the description is disabled (overrides context)
47
+ * @default undefined
48
+ */
49
+ isDisabled?: boolean;
50
+ /**
51
+ * Whether to hide the description when invalid
52
+ * @default false
53
+ */
54
+ hideOnInvalid?: boolean;
55
+ /**
56
+ * Additional CSS classes
57
+ */
58
+ className?: string;
59
+ /**
60
+ * Native ID for accessibility. Used to link description to form fields via aria-describedby.
61
+ * When provided, form fields can reference this description using aria-describedby={nativeID}.
62
+ */
63
+ nativeID?: string;
64
+ /**
65
+ * Animation configuration for description
66
+ * - `true` or `undefined`: Use default animations
67
+ * - `false` or `"disabled"`: Disable only description animations (children can still animate)
68
+ * - `"disable-all"`: Disable all animations including children (cascades down)
69
+ * - `object`: Custom animation configuration
70
+ */
71
+ animation?: DescriptionAnimation;
72
+ }
73
+
74
+ /**
75
+ * Reference type for the Description component
76
+ */
77
+ export type DescriptionRef = TextRef;
@@ -0,0 +1,3 @@
1
+ export { default as Description } from './description';
2
+ export { descriptionClassNames } from './description.styles';
3
+ export type { DescriptionProps, DescriptionRef } from './description.types';
@@ -0,0 +1,9 @@
1
+ import { createContext } from '../../helpers/internal/utils';
2
+ import type { DialogAnimationContextValue } from './dialog.types';
3
+
4
+ const [DialogAnimationProvider, useDialogAnimation] =
5
+ createContext<DialogAnimationContextValue>({
6
+ name: 'DialogAnimationContext',
7
+ });
8
+
9
+ export { DialogAnimationProvider, useDialogAnimation };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Display names for Dialog components
3
+ */
4
+ export const DISPLAY_NAME = {
5
+ ROOT: 'HeroUINative.Dialog.Root',
6
+ TRIGGER: 'HeroUINative.Dialog.Trigger',
7
+ PORTAL: 'HeroUINative.Dialog.Portal',
8
+ OVERLAY: 'HeroUINative.Dialog.Overlay',
9
+ CONTENT: 'HeroUINative.Dialog.Content',
10
+ CLOSE: 'HeroUINative.Dialog.Close',
11
+ TITLE: 'HeroUINative.Dialog.Title',
12
+ DESCRIPTION: 'HeroUINative.Dialog.Description',
13
+ };
@@ -0,0 +1,288 @@
1
+ # Dialog
2
+
3
+ Displays a modal overlay with animated transitions and gesture-based dismissal.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Dialog } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <Dialog>
15
+ <Dialog.Trigger>...</Dialog.Trigger>
16
+ <Dialog.Portal>
17
+ <Dialog.Overlay>...</Dialog.Overlay>
18
+ <Dialog.Content>
19
+ <Dialog.Close>...</Dialog.Close>
20
+ <Dialog.Title>...</Dialog.Title>
21
+ <Dialog.Description>...</Dialog.Description>
22
+ </Dialog.Content>
23
+ </Dialog.Portal>
24
+ </Dialog>
25
+ ```
26
+
27
+ - **Dialog**: Root component that manages open state and provides context to child components.
28
+ - **Dialog.Trigger**: Pressable element that opens the dialog when pressed.
29
+ - **Dialog.Portal**: Renders dialog content in a portal with centered layout and animation control.
30
+ - **Dialog.Overlay**: Background overlay that appears behind the dialog content, typically closes dialog when pressed.
31
+ - **Dialog.Content**: Main dialog container with gesture support for drag-to-dismiss.
32
+ - **Dialog.Close**: Close button for the dialog. Can accept custom children or uses default close icon.
33
+ - **Dialog.Title**: Dialog title text with semantic heading role.
34
+ - **Dialog.Description**: Dialog description text that provides additional context.
35
+
36
+ ## Usage
37
+
38
+ ### Basic Dialog
39
+
40
+ Simple dialog with title, description, and close button.
41
+
42
+ ```tsx
43
+ <Dialog isOpen={isOpen} onOpenChange={setIsOpen}>
44
+ <Dialog.Trigger asChild>
45
+ <Button>Open Dialog</Button>
46
+ </Dialog.Trigger>
47
+ <Dialog.Portal>
48
+ <Dialog.Overlay />
49
+ <Dialog.Content>
50
+ <Dialog.Close />
51
+ <Dialog.Title>...</Dialog.Title>
52
+ <Dialog.Description>...</Dialog.Description>
53
+ </Dialog.Content>
54
+ </Dialog.Portal>
55
+ </Dialog>
56
+ ```
57
+
58
+ ### Scrollable Content
59
+
60
+ Handle long content with scroll views.
61
+
62
+ ```tsx
63
+ <Dialog isOpen={isOpen} onOpenChange={setIsOpen}>
64
+ <Dialog.Trigger>...</Dialog.Trigger>
65
+ <Dialog.Portal>
66
+ <Dialog.Overlay />
67
+ <Dialog.Content>
68
+ <Dialog.Close />
69
+ <Dialog.Title>...</Dialog.Title>
70
+ <View className="h-[300px]">
71
+ <ScrollView>...</ScrollView>
72
+ </View>
73
+ </Dialog.Content>
74
+ </Dialog.Portal>
75
+ </Dialog>
76
+ ```
77
+
78
+ ### Form Dialog
79
+
80
+ Dialog with text inputs and keyboard handling.
81
+
82
+ ```tsx
83
+ <Dialog isOpen={isOpen} onOpenChange={setIsOpen}>
84
+ <Dialog.Trigger>...</Dialog.Trigger>
85
+ <Dialog.Portal>
86
+ <Dialog.Overlay />
87
+ <KeyboardAvoidingView behavior="padding">
88
+ <Dialog.Content>
89
+ <Dialog.Close />
90
+ <Dialog.Title>...</Dialog.Title>
91
+ <TextField>...</TextField>
92
+ <Button onPress={handleSubmit}>Submit</Button>
93
+ </Dialog.Content>
94
+ </KeyboardAvoidingView>
95
+ </Dialog.Portal>
96
+ </Dialog>
97
+ ```
98
+
99
+ ## Example
100
+
101
+ ```tsx
102
+ import { Button, Dialog } from '@/heroui';
103
+ import { View } from 'react-native';
104
+ import { useState } from 'react';
105
+
106
+ export default function DialogExample() {
107
+ const [isOpen, setIsOpen] = useState(false);
108
+
109
+ return (
110
+ <Dialog isOpen={isOpen} onOpenChange={setIsOpen}>
111
+ <Dialog.Trigger asChild>
112
+ <Button variant="primary">Open Dialog</Button>
113
+ </Dialog.Trigger>
114
+ <Dialog.Portal>
115
+ <Dialog.Overlay />
116
+ <Dialog.Content>
117
+ <Dialog.Close variant="ghost" />
118
+ <View className="mb-5 gap-1.5">
119
+ <Dialog.Title>Confirm Action</Dialog.Title>
120
+ <Dialog.Description>
121
+ Are you sure you want to proceed with this action? This cannot be
122
+ undone.
123
+ </Dialog.Description>
124
+ </View>
125
+ <View className="flex-row justify-end gap-3">
126
+ <Button variant="ghost" size="sm" onPress={() => setIsOpen(false)}>
127
+ Cancel
128
+ </Button>
129
+ <Button size="sm">Confirm</Button>
130
+ </View>
131
+ </Dialog.Content>
132
+ </Dialog.Portal>
133
+ </Dialog>
134
+ );
135
+ }
136
+ ```
137
+
138
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/dialog.tsx>).
139
+
140
+ ## API Reference
141
+
142
+ ### Dialog
143
+
144
+ | prop | type | default | description |
145
+ | --------------- | -------------------------- | ------- | -------------------------------------------------- |
146
+ | `children` | `React.ReactNode` | - | Dialog content and trigger elements |
147
+ | `isOpen` | `boolean` | - | Controlled open state of the dialog |
148
+ | `isDefaultOpen` | `boolean` | `false` | Initial open state when uncontrolled |
149
+ | `animation` | `AnimationRootDisableAll` | - | Animation configuration |
150
+ | `onOpenChange` | `(value: boolean) => void` | - | Callback when open state changes |
151
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
152
+
153
+ #### AnimationRootDisableAll
154
+
155
+ Animation configuration for dialog root component. Can be:
156
+
157
+ - `false` or `"disabled"`: Disable only root animations
158
+ - `"disable-all"`: Disable all animations including children
159
+ - `true` or `undefined`: Use default animations
160
+
161
+ ### Dialog.Trigger
162
+
163
+ | prop | type | default | description |
164
+ | -------------------------- | ----------------------- | ------- | -------------------------------------------------------------- |
165
+ | `children` | `React.ReactNode` | - | Trigger element content |
166
+ | `asChild` | `boolean` | - | Render as child element without wrapper |
167
+ | `...TouchableOpacityProps` | `TouchableOpacityProps` | - | All standard React Native TouchableOpacity props are supported |
168
+
169
+ ### Dialog.Portal
170
+
171
+ | prop | type | default | description |
172
+ | -------------------------- | ---------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
173
+ | `children` | `React.ReactNode` | - | Portal content (overlay and dialog) |
174
+ | `disableFullWindowOverlay` | `boolean` | `false` | When true on iOS, uses View instead of FullWindowOverlay. Enables element inspector; overlay won't appear above native modals |
175
+ | `className` | `string` | - | Additional CSS classes for portal container |
176
+ | `style` | `StyleProp<ViewStyle>` | - | Additional styles for portal container |
177
+ | `hostName` | `string` | - | Optional portal host name for specific container |
178
+ | `forceMount` | `boolean` | - | Force mount when closed for animation purposes |
179
+
180
+ ### Dialog.Overlay
181
+
182
+ | prop | type | default | description |
183
+ | ----------------------- | ------------------------ | ------- | ------------------------------------------------------------ |
184
+ | `children` | `React.ReactNode` | - | Custom overlay content |
185
+ | `className` | `string` | - | Additional CSS classes for overlay |
186
+ | `style` | `ViewStyle` | - | Additional styles for overlay container |
187
+ | `animation` | `DialogOverlayAnimation` | - | Animation configuration |
188
+ | `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
189
+ | `isCloseOnPress` | `boolean` | `true` | Whether pressing overlay closes dialog |
190
+ | `forceMount` | `boolean` | - | Force mount when closed for animation purposes |
191
+ | `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported |
192
+
193
+ #### DialogOverlayAnimation
194
+
195
+ Animation configuration for dialog overlay component. Can be:
196
+
197
+ - `false` or `"disabled"`: Disable all animations
198
+ - `true` or `undefined`: Use default animations
199
+ - `object`: Custom animation configuration
200
+
201
+ | prop | type | default | description |
202
+ | --------------- | -------------------------- | ----------------------- | ---------------------------------------------------------------------------- |
203
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
204
+ | `opacity.value` | `[number, number, number]` | `[0, 1, 0]` | Opacity values [idle, open, close] (progress-based, for dialog presentation) |
205
+ | `entering` | `EntryOrExitLayoutType` | `FadeIn.duration(200)` | Custom entering animation (for popover presentation) |
206
+ | `exiting` | `EntryOrExitLayoutType` | `FadeOut.duration(150)` | Custom exiting animation (for popover presentation) |
207
+
208
+ ### Dialog.Content
209
+
210
+ | prop | type | default | description |
211
+ | ----------------------- | ------------------------ | ------- | --------------------------------------------------- |
212
+ | `children` | `React.ReactNode` | - | Dialog content |
213
+ | `className` | `string` | - | Additional CSS classes for content container |
214
+ | `style` | `StyleProp<ViewStyle>` | - | Additional styles for content container |
215
+ | `animation` | `DialogContentAnimation` | - | Animation configuration |
216
+ | `isSwipeable` | `boolean` | `true` | Whether the dialog content can be swiped to dismiss |
217
+ | `forceMount` | `boolean` | - | Force mount when closed for animation purposes |
218
+ | `...Animated.ViewProps` | `Animated.ViewProps` | - | All Reanimated Animated.View props are supported |
219
+
220
+ #### DialogContentAnimation
221
+
222
+ Animation configuration for dialog content component. Can be:
223
+
224
+ - `false` or `"disabled"`: Disable all animations
225
+ - `true` or `undefined`: Use default animations
226
+ - `object`: Custom animation configuration
227
+
228
+ | prop | type | default | description |
229
+ | ---------- | ----------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------- |
230
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
231
+ | `entering` | `EntryOrExitLayoutType` | Keyframe with `scale: 0.96→1` and `opacity: 0→1` (200ms, easing: `Easing.out(Easing.ease)`) | Custom entering animation |
232
+ | `exiting` | `EntryOrExitLayoutType` | Keyframe with `scale: 1→0.96` and `opacity: 1→0` (150ms, easing: `Easing.in(Easing.ease)`) | Custom exiting animation |
233
+
234
+ ### Dialog.Close
235
+
236
+ Dialog.Close extends [CloseButton](../close-button/close-button.md) and automatically handles dialog dismissal when pressed.
237
+
238
+ ### Dialog.Title
239
+
240
+ | prop | type | default | description |
241
+ | -------------- | ----------------- | ------- | -------------------------------------------------- |
242
+ | `children` | `React.ReactNode` | - | Title content |
243
+ | `className` | `string` | - | Additional CSS classes for title |
244
+ | `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
245
+
246
+ ### Dialog.Description
247
+
248
+ | prop | type | default | description |
249
+ | -------------- | ----------------- | ------- | -------------------------------------------------- |
250
+ | `children` | `React.ReactNode` | - | Description content |
251
+ | `className` | `string` | - | Additional CSS classes for description |
252
+ | `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
253
+
254
+ ## Hooks
255
+
256
+ ### useDialog
257
+
258
+ Hook to access dialog primitive context.
259
+
260
+ ```tsx
261
+ const { isOpen, onOpenChange } = useDialog();
262
+ ```
263
+
264
+ | property | type | description |
265
+ | -------------- | -------------------------- | ----------------------------- |
266
+ | `isOpen` | `boolean` | Current open state |
267
+ | `onOpenChange` | `(value: boolean) => void` | Function to change open state |
268
+
269
+ ### useDialogAnimation
270
+
271
+ Hook to access dialog animation context for advanced customization.
272
+
273
+ ```tsx
274
+ const { progress, isDragging, isGestureReleaseAnimationRunning } =
275
+ useDialogAnimation();
276
+ ```
277
+
278
+ | property | type | description |
279
+ | ---------------------------------- | ---------------------- | -------------------------------------------- |
280
+ | `progress` | `SharedValue<number>` | Animation progress (0=idle, 1=open, 2=close) |
281
+ | `isDragging` | `SharedValue<boolean>` | Whether dialog is being dragged |
282
+ | `isGestureReleaseAnimationRunning` | `SharedValue<boolean>` | Whether gesture release animation is running |
283
+
284
+ ## Special Notes
285
+
286
+ ### Element Inspector (iOS)
287
+
288
+ Dialog uses FullWindowOverlay on iOS. To enable the React Native element inspector during development, set `disableFullWindowOverlay={true}` on `Dialog.Portal`. Tradeoff: the dialog will not appear above native modals when disabled.