@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,796 @@
1
+ # Select
2
+
3
+ Displays a list of options for the user to pick from—triggered by a button.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Select } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <Select>
15
+ <Select.Trigger>
16
+ <Select.Value />
17
+ <Select.TriggerIndicator />
18
+ </Select.Trigger>
19
+ <Select.Portal>
20
+ <Select.Overlay />
21
+ <Select.Content>
22
+ <Select.Close />
23
+ <Select.ListLabel>...</Select.ListLabel>
24
+ <Select.Item>
25
+ <Select.ItemLabel />
26
+ <Select.ItemDescription>...</Select.ItemDescription>
27
+ <Select.ItemIndicator />
28
+ </Select.Item>
29
+ </Select.Content>
30
+ </Select.Portal>
31
+ </Select>
32
+ ```
33
+
34
+ - **Select**: Main container that manages open/close state, value selection and provides context to child components.
35
+ - **Select.Trigger**: Clickable element that toggles the select visibility. Wraps any child element with press handlers. Supports `variant` prop (`'default'` or `'unstyled'`).
36
+ - **Select.Value**: Displays the selected value or placeholder text. Automatically updates when selection changes. Styling changes based on selection state.
37
+ - **Select.TriggerIndicator**: Optional visual indicator showing open/close state. Renders an animated chevron icon by default that rotates when the select opens/closes.
38
+ - **Select.Portal**: Renders select content in a portal layer above other content. Ensures proper stacking and positioning.
39
+ - **Select.Overlay**: Optional background overlay. Can be transparent or semi-transparent to capture outside clicks.
40
+ - **Select.Content**: Container for select content with three presentation modes: popover (floating with positioning), bottom sheet modal, or dialog modal.
41
+ - **Select.Close**: Close button for the select. Can accept custom children or uses default close icon.
42
+ - **Select.ListLabel**: Label for the list of items with pre-styled typography.
43
+ - **Select.Item**: Selectable option item. Handles selection state and press events.
44
+ - **Select.ItemLabel**: Displays the label text for an item.
45
+ - **Select.ItemDescription**: Optional description text for items with muted styling.
46
+ - **Select.ItemIndicator**: Optional indicator shown for selected items. Renders a check icon by default.
47
+
48
+ ## Usage
49
+
50
+ ### Basic Usage
51
+
52
+ The Select component uses compound parts to create dropdown selection interfaces.
53
+
54
+ ```tsx
55
+ <Select>
56
+ <Select.Trigger>...</Select.Trigger>
57
+ <Select.Portal>
58
+ <Select.Overlay />
59
+ <Select.Content presentation="popover">
60
+ <Select.Item value="1" label="Option 1" />
61
+ <Select.Item value="2" label="Option 2" />
62
+ </Select.Content>
63
+ </Select.Portal>
64
+ </Select>
65
+ ```
66
+
67
+ ### With Value Display
68
+
69
+ Display the selected value in the trigger using the Value component.
70
+
71
+ ```tsx
72
+ <Select>
73
+ <Select.Trigger>
74
+ <Select.Value placeholder="Choose an option" />
75
+ <Select.TriggerIndicator />
76
+ </Select.Trigger>
77
+ <Select.Portal>
78
+ <Select.Overlay />
79
+ <Select.Content presentation="popover">
80
+ <Select.Item value="apple" label="Apple" />
81
+ <Select.Item value="orange" label="Orange" />
82
+ <Select.Item value="banana" label="Banana" />
83
+ </Select.Content>
84
+ </Select.Portal>
85
+ </Select>
86
+ ```
87
+
88
+ ### Popover Presentation
89
+
90
+ Use popover presentation for floating content with automatic positioning.
91
+
92
+ ```tsx
93
+ <Select>
94
+ <Select.Trigger>...</Select.Trigger>
95
+ <Select.Portal>
96
+ <Select.Overlay />
97
+ <Select.Content presentation="popover" placement="bottom" align="center">
98
+ <Select.Item value="1" label="Item 1" />
99
+ <Select.Item value="2" label="Item 2" />
100
+ </Select.Content>
101
+ </Select.Portal>
102
+ </Select>
103
+ ```
104
+
105
+ ### Width Control
106
+
107
+ Control the width of the select content using the `width` prop. This only works with popover presentation.
108
+
109
+ ```tsx
110
+ {
111
+ /* Fixed width in pixels */
112
+ }
113
+ <Select>
114
+ <Select.Trigger>...</Select.Trigger>
115
+ <Select.Portal>
116
+ <Select.Overlay />
117
+ <Select.Content presentation="popover" width={280}>
118
+ <Select.Item value="1" label="Item 1" />
119
+ </Select.Content>
120
+ </Select.Portal>
121
+ </Select>;
122
+
123
+ {
124
+ /* Match trigger width */
125
+ }
126
+ <Select>
127
+ <Select.Trigger>...</Select.Trigger>
128
+ <Select.Portal>
129
+ <Select.Overlay />
130
+ <Select.Content presentation="popover" width="trigger">
131
+ <Select.Item value="1" label="Item 1" />
132
+ </Select.Content>
133
+ </Select.Portal>
134
+ </Select>;
135
+
136
+ {
137
+ /* Full width (100%) */
138
+ }
139
+ <Select>
140
+ <Select.Trigger>...</Select.Trigger>
141
+ <Select.Portal>
142
+ <Select.Overlay />
143
+ <Select.Content presentation="popover" width="full">
144
+ <Select.Item value="1" label="Item 1" />
145
+ </Select.Content>
146
+ </Select.Portal>
147
+ </Select>;
148
+
149
+ {
150
+ /* Auto-size to content (default) */
151
+ }
152
+ <Select>
153
+ <Select.Trigger>...</Select.Trigger>
154
+ <Select.Portal>
155
+ <Select.Overlay />
156
+ <Select.Content presentation="popover" width="content-fit">
157
+ <Select.Item value="1" label="Item 1" />
158
+ </Select.Content>
159
+ </Select.Portal>
160
+ </Select>;
161
+ ```
162
+
163
+ ### Bottom Sheet Presentation
164
+
165
+ Use bottom sheet for mobile-optimized selection experience.
166
+
167
+ ```tsx
168
+ <Select presentation="bottom-sheet">
169
+ <Select.Trigger>...</Select.Trigger>
170
+ <Select.Portal>
171
+ <Select.Overlay />
172
+ <Select.Content presentation="bottom-sheet" snapPoints={['35%']}>
173
+ <Select.Item value="1" label="Item 1" />
174
+ <Select.Item value="2" label="Item 2" />
175
+ </Select.Content>
176
+ </Select.Portal>
177
+ </Select>
178
+ ```
179
+
180
+ ### Dialog Presentation
181
+
182
+ Use dialog presentation for centered modal-style selection.
183
+
184
+ ```tsx
185
+ <Select presentation="dialog">
186
+ <Select.Trigger>...</Select.Trigger>
187
+ <Select.Portal>
188
+ <Select.Overlay />
189
+ <Select.Content presentation="dialog">
190
+ <Select.Close />
191
+ <Select.ListLabel>Choose an option</Select.ListLabel>
192
+ <Select.Item value="1" label="Item 1" />
193
+ <Select.Item value="2" label="Item 2" />
194
+ </Select.Content>
195
+ </Select.Portal>
196
+ </Select>
197
+ ```
198
+
199
+ ### Custom Item Content
200
+
201
+ Customize item appearance with custom content and indicators.
202
+
203
+ ```tsx
204
+ <Select>
205
+ <Select.Trigger>...</Select.Trigger>
206
+ <Select.Portal>
207
+ <Select.Overlay />
208
+ <Select.Content presentation="popover">
209
+ <Select.Item value="us" label="United States">
210
+ <View className="flex-row items-center gap-3 flex-1">
211
+ <Text>🇺🇸</Text>
212
+ <Select.ItemLabel />
213
+ </View>
214
+ <Select.ItemIndicator />
215
+ </Select.Item>
216
+ <Select.Item value="uk" label="United Kingdom">
217
+ <View className="flex-row items-center gap-3 flex-1">
218
+ <Text>🇬🇧</Text>
219
+ <Select.ItemLabel />
220
+ </View>
221
+ <Select.ItemIndicator />
222
+ </Select.Item>
223
+ </Select.Content>
224
+ </Select.Portal>
225
+ </Select>
226
+ ```
227
+
228
+ ### With Render Function
229
+
230
+ Use a render function on `Select.Item` to access state and customize content based on selection.
231
+
232
+ ```tsx
233
+ <Select>
234
+ <Select.Trigger>...</Select.Trigger>
235
+ <Select.Portal>
236
+ <Select.Overlay />
237
+ <Select.Content presentation="popover">
238
+ <Select.Item value="us" label="United States">
239
+ {({ isSelected, value, isDisabled }) => (
240
+ <>
241
+ <View className="flex-row items-center gap-3 flex-1">
242
+ <Text>🇺🇸</Text>
243
+ <Select.ItemLabel
244
+ className={
245
+ isSelected ? 'text-accent font-medium' : 'text-foreground'
246
+ }
247
+ />
248
+ </View>
249
+ <Select.ItemIndicator />
250
+ </>
251
+ )}
252
+ </Select.Item>
253
+ <Select.Item value="uk" label="United Kingdom">
254
+ {({ isSelected }) => (
255
+ <>
256
+ <View className="flex-row items-center gap-3 flex-1">
257
+ <Text>🇬🇧</Text>
258
+ <Select.ItemLabel
259
+ className={
260
+ isSelected ? 'text-accent font-medium' : 'text-foreground'
261
+ }
262
+ />
263
+ </View>
264
+ <Select.ItemIndicator />
265
+ </>
266
+ )}
267
+ </Select.Item>
268
+ </Select.Content>
269
+ </Select.Portal>
270
+ </Select>
271
+ ```
272
+
273
+ ### With Item Description
274
+
275
+ Add descriptions to items for additional context.
276
+
277
+ ```tsx
278
+ <Select>
279
+ <Select.Trigger>...</Select.Trigger>
280
+ <Select.Portal>
281
+ <Select.Overlay />
282
+ <Select.Content presentation="popover">
283
+ <Select.Item value="basic" label="Basic">
284
+ <View className="flex-1">
285
+ <Select.ItemLabel />
286
+ <Select.ItemDescription>
287
+ Essential features for personal use
288
+ </Select.ItemDescription>
289
+ </View>
290
+ <Select.ItemIndicator />
291
+ </Select.Item>
292
+ </Select.Content>
293
+ </Select.Portal>
294
+ </Select>
295
+ ```
296
+
297
+ ### With Trigger Indicator
298
+
299
+ Add a visual indicator to show the open/close state of the select. The indicator rotates when the select opens/closes.
300
+
301
+ ```tsx
302
+ <Select>
303
+ <Select.Trigger>
304
+ <Select.Value placeholder="Select one" />
305
+ <Select.TriggerIndicator />
306
+ </Select.Trigger>
307
+ <Select.Portal>
308
+ <Select.Overlay />
309
+ <Select.Content presentation="popover">
310
+ <Select.Item value="1" label="Option 1" />
311
+ <Select.Item value="2" label="Option 2" />
312
+ </Select.Content>
313
+ </Select.Portal>
314
+ </Select>
315
+ ```
316
+
317
+ ### Custom Trigger with Unstyled Variant
318
+
319
+ Use the `unstyled` variant when composing a custom trigger with other components like Button.
320
+
321
+ ```tsx
322
+ <Select>
323
+ <Select.Trigger variant="unstyled" asChild>
324
+ <Button variant="secondary">
325
+ <Select.Value placeholder="Select..." />
326
+ <Select.TriggerIndicator />
327
+ </Button>
328
+ </Select.Trigger>
329
+ <Select.Portal>
330
+ <Select.Overlay />
331
+ <Select.Content presentation="popover">
332
+ <Select.Item value="1" label="Option 1" />
333
+ <Select.Item value="2" label="Option 2" />
334
+ </Select.Content>
335
+ </Select.Portal>
336
+ </Select>
337
+ ```
338
+
339
+ ### Controlled Mode
340
+
341
+ Control the select state programmatically.
342
+
343
+ ```tsx
344
+ const [value, setValue] = useState();
345
+ const [isOpen, setIsOpen] = useState(false);
346
+
347
+ <Select
348
+ value={value}
349
+ onValueChange={setValue}
350
+ isOpen={isOpen}
351
+ onOpenChange={setIsOpen}
352
+ >
353
+ <Select.Trigger>
354
+ <Select.Value placeholder="Select..." />
355
+ <Select.TriggerIndicator />
356
+ </Select.Trigger>
357
+ <Select.Portal>
358
+ <Select.Overlay />
359
+ <Select.Content presentation="popover">
360
+ <Select.Item value="1" label="Option 1" />
361
+ <Select.Item value="2" label="Option 2" />
362
+ </Select.Content>
363
+ </Select.Portal>
364
+ </Select>;
365
+ ```
366
+
367
+ ## Example
368
+
369
+ ```tsx
370
+ import { Select, Separator } from '@/heroui';
371
+ import React, { useState } from 'react';
372
+
373
+ type SelectOption = {
374
+ value: string;
375
+ label: string;
376
+ };
377
+
378
+ const US_STATES: SelectOption[] = [
379
+ { value: 'CA', label: 'California' },
380
+ { value: 'NY', label: 'New York' },
381
+ { value: 'TX', label: 'Texas' },
382
+ { value: 'FL', label: 'Florida' },
383
+ ];
384
+
385
+ export default function SelectExample() {
386
+ const [value, setValue] = useState<SelectOption | undefined>();
387
+
388
+ return (
389
+ <Select value={value} onValueChange={setValue}>
390
+ <Select.Trigger>
391
+ <Select.Value placeholder="Select one" />
392
+ <Select.TriggerIndicator />
393
+ </Select.Trigger>
394
+ <Select.Portal>
395
+ <Select.Overlay />
396
+ <Select.Content presentation="popover" width="trigger">
397
+ <Select.ListLabel className="mb-2">Choose a state</Select.ListLabel>
398
+ {US_STATES.map((state, index) => (
399
+ <React.Fragment key={state.value}>
400
+ <Select.Item value={state.value} label={state.label} />
401
+ {index < US_STATES.length - 1 && <Separator />}
402
+ </React.Fragment>
403
+ ))}
404
+ </Select.Content>
405
+ </Select.Portal>
406
+ </Select>
407
+ );
408
+ }
409
+ ```
410
+
411
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/select.tsx>).
412
+
413
+ ## API Reference
414
+
415
+ ### Select
416
+
417
+ | prop | type | default | description |
418
+ | --------------- | ------------------------------------------------- | ----------- | ---------------------------------------------------------------------- |
419
+ | `children` | `ReactNode` | - | The content of the select |
420
+ | `value` | `SelectOption \| SelectOption[]` | - | The selected value(s) (controlled mode) |
421
+ | `onValueChange` | `(value: SelectOption \| SelectOption[]) => void` | - | Callback when the value changes |
422
+ | `defaultValue` | `SelectOption \| SelectOption[]` | - | The default selected value(s) (uncontrolled mode) |
423
+ | `isOpen` | `boolean` | - | Whether the select is open (controlled mode) |
424
+ | `isDefaultOpen` | `boolean` | - | Whether the select is open when initially rendered (uncontrolled mode) |
425
+ | `onOpenChange` | `(isOpen: boolean) => void` | - | Callback when the select open state changes |
426
+ | `isDisabled` | `boolean` | `false` | Whether the select is disabled |
427
+ | `presentation` | `'popover' \| 'bottom-sheet' \| 'dialog'` | `'popover'` | Presentation mode for the select content |
428
+ | `animation` | `SelectRootAnimation` | - | Animation configuration |
429
+ | `asChild` | `boolean` | `false` | Whether to render as a child element |
430
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
431
+
432
+ #### SelectRootAnimation
433
+
434
+ Animation configuration for Select component. Can be:
435
+
436
+ - `false` or `"disabled"`: Disable only root animations
437
+ - `"disable-all"`: Disable all animations including children
438
+ - `true` or `undefined`: Use default animations
439
+ - `object`: Custom animation configuration
440
+
441
+ | prop | type | default | description |
442
+ | ---------------- | ------------------------------------------------ | ------- | ----------------------------------------------- |
443
+ | `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
444
+ | `entering.value` | `SpringAnimationConfig \| TimingAnimationConfig` | - | Animation configuration for when select opens |
445
+ | `exiting.value` | `SpringAnimationConfig \| TimingAnimationConfig` | - | Animation configuration for when select closes |
446
+
447
+ #### SpringAnimationConfig
448
+
449
+ | prop | type | default | description |
450
+ | -------- | ------------------ | ------- | ----------------------------------------- |
451
+ | `type` | `'spring'` | - | Animation type (must be `'spring'`) |
452
+ | `config` | `WithSpringConfig` | - | Reanimated spring animation configuration |
453
+
454
+ #### TimingAnimationConfig
455
+
456
+ | prop | type | default | description |
457
+ | -------- | ------------------ | ------- | ----------------------------------------- |
458
+ | `type` | `'timing'` | - | Animation type (must be `'timing'`) |
459
+ | `config` | `WithTimingConfig` | - | Reanimated timing animation configuration |
460
+
461
+ ### Select.Trigger
462
+
463
+ | prop | type | default | description |
464
+ | ------------------- | ------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------- |
465
+ | `variant` | `'default' \| 'unstyled'` | `'default'` | The variant of the trigger. `'default'` applies pre-styled container styles, `'unstyled'` removes default styling |
466
+ | `children` | `ReactNode` | - | The trigger element content |
467
+ | `className` | `string` | - | Additional CSS classes for the trigger |
468
+ | `asChild` | `boolean` | `true` | Whether to render as a child element |
469
+ | `isDisabled` | `boolean` | - | Whether the trigger is disabled |
470
+ | `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported |
471
+
472
+ ### Select.Value
473
+
474
+ | prop | type | default | description |
475
+ | -------------- | ----------- | ------- | -------------------------------------------------- |
476
+ | `placeholder` | `string` | - | Placeholder text when no value is selected |
477
+ | `className` | `string` | - | Additional CSS classes for the value |
478
+ | `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
479
+
480
+ **Note:** The value component automatically applies different text colors based on selection state:
481
+
482
+ - When a value is selected: `text-foreground`
483
+ - When no value is selected (placeholder): `text-field-placeholder`
484
+
485
+ ### Select.TriggerIndicator
486
+
487
+ | prop | type | default | description |
488
+ | ----------------------- | --------------------------------- | ------- | ------------------------------------------------------------ |
489
+ | `children` | `ReactNode` | - | Custom indicator content. Defaults to animated chevron icon |
490
+ | `className` | `string` | - | Additional CSS classes for the trigger indicator |
491
+ | `style` | `ViewStyle` | - | Custom styles for the trigger indicator |
492
+ | `iconProps` | `SelectTriggerIndicatorIconProps` | - | Chevron icon configuration |
493
+ | `animation` | `SelectTriggerIndicatorAnimation` | - | Animation configuration |
494
+ | `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
495
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
496
+
497
+ **Note:** The following style properties are occupied by animations and cannot be set via className:
498
+
499
+ - `transform` (specifically `rotate`) - Animated for open/close rotation transitions
500
+
501
+ To customize this property, use the `animation` prop. To completely disable animated styles and use your own via className or style prop, set `isAnimatedStyleActive={false}`.
502
+
503
+ #### SelectTriggerIndicatorIconProps
504
+
505
+ | prop | type | default | description |
506
+ | ------- | -------- | ------- | ------------------------------------------------------ |
507
+ | `size` | `number` | `16` | Size of the icon |
508
+ | `color` | `string` | - | Color of the icon (defaults to foreground theme color) |
509
+
510
+ #### SelectTriggerIndicatorAnimation
511
+
512
+ Animation configuration for Select.TriggerIndicator component. Can be:
513
+
514
+ - `false` or `"disabled"`: Disable all animations
515
+ - `true` or `undefined`: Use default animations (rotation from 0° to -180°)
516
+ - `object`: Custom animation configuration
517
+
518
+ | prop | type | default | description |
519
+ | ----------------------- | ----------------------- | -------------------------------------------- | ----------------------------------------------- |
520
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
521
+ | `rotation.value` | `[number, number]` | `[0, -180]` | Rotation values [closed, open] in degrees |
522
+ | `rotation.springConfig` | `WithSpringConfig` | `{ damping: 140, stiffness: 1000, mass: 4 }` | Spring animation configuration for rotation |
523
+
524
+ ### Select.Portal
525
+
526
+ | prop | type | default | description |
527
+ | -------------------------- | ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
528
+ | `children` | `ReactNode` | - | The portal content (required) |
529
+ | `disableFullWindowOverlay` | `boolean` | `false` | When true on iOS, uses View instead of FullWindowOverlay. Enables element inspector; overlay won't appear above native modals |
530
+ | `className` | `string` | - | Additional CSS classes for the portal container |
531
+ | `hostName` | `string` | - | Optional name of the host element for the portal |
532
+ | `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
533
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
534
+
535
+ ### Select.Overlay
536
+
537
+ | prop | type | default | description |
538
+ | ----------------------- | ------------------------ | ------- | ------------------------------------------------------------ |
539
+ | `className` | `string` | - | Additional CSS classes for the overlay |
540
+ | `animation` | `SelectOverlayAnimation` | - | Animation configuration |
541
+ | `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
542
+ | `closeOnPress` | `boolean` | `true` | Whether to close the select when overlay is pressed |
543
+ | `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
544
+ | `asChild` | `boolean` | `false` | Whether to render as a child element |
545
+ | `...Animated.ViewProps` | `Animated.ViewProps` | - | All Reanimated Animated.View props are supported |
546
+
547
+ #### SelectOverlayAnimation
548
+
549
+ Animation configuration for Select.Overlay component. Can be:
550
+
551
+ - `false` or `"disabled"`: Disable all animations
552
+ - `true` or `undefined`: Use default animations (progress-based opacity for bottom-sheet/dialog, Keyframe animations for popover)
553
+ - `object`: Custom animation configuration
554
+
555
+ | prop | type | default | description |
556
+ | --------------- | -------------------------- | ----------- | ---------------------------------------------------------------------------- |
557
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
558
+ | `opacity.value` | `[number, number, number]` | `[0, 1, 0]` | Opacity values [idle, open, close] (for bottom-sheet/dialog presentation) |
559
+ | `entering` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for entering transition (for popover presentation) |
560
+ | `exiting` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for exiting transition (for popover presentation) |
561
+
562
+ ### Select.Content (Popover Presentation)
563
+
564
+ | prop | type | default | description |
565
+ | ----------------------- | ------------------------------------------------ | --------------- | ------------------------------------------------------ |
566
+ | `children` | `ReactNode` | - | The select content |
567
+ | `width` | `number \| 'trigger' \| 'content-fit' \| 'full'` | `'content-fit'` | Width sizing strategy for the content |
568
+ | `presentation` | `'popover'` | `'popover'` | Presentation mode for the select |
569
+ | `placement` | `'top' \| 'bottom' \| 'left' \| 'right'` | `'bottom'` | Placement of the content relative to trigger |
570
+ | `align` | `'start' \| 'center' \| 'end'` | `'center'` | Alignment along the placement axis |
571
+ | `avoidCollisions` | `boolean` | `true` | Whether to flip placement when close to viewport edges |
572
+ | `offset` | `number` | `8` | Distance from trigger element in pixels |
573
+ | `alignOffset` | `number` | `0` | Offset along the alignment axis in pixels |
574
+ | `className` | `string` | - | Additional CSS classes for the content container |
575
+ | `animation` | `SelectContentPopoverAnimation` | - | Animation configuration |
576
+ | `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
577
+ | `insets` | `Insets` | - | Screen edge insets to respect when positioning |
578
+ | `asChild` | `boolean` | `false` | Whether to render as a child element |
579
+ | `...Animated.ViewProps` | `Animated.ViewProps` | - | All Reanimated Animated.View props are supported |
580
+
581
+ #### SelectContentPopoverAnimation
582
+
583
+ Animation configuration for Select.Content component (popover presentation). Can be:
584
+
585
+ - `false` or `"disabled"`: Disable all animations
586
+ - `true` or `undefined`: Use default Keyframe animations (translateY/translateX, scale, opacity based on placement)
587
+ - `object`: Custom animation configuration with `entering` and/or `exiting` Keyframe animations
588
+
589
+ | prop | type | default | description |
590
+ | ---------- | ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
591
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
592
+ | `entering` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for entering transition (default: Keyframe with translateY/translateX, scale, opacity based on placement, 200ms) |
593
+ | `exiting` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for exiting transition (default: Keyframe mirroring entering animation, 150ms) |
594
+
595
+ ### Select.Content (Bottom Sheet Presentation)
596
+
597
+ | prop | type | default | description |
598
+ | --------------------------- | ------------------ | ------- | ------------------------------------------------ |
599
+ | `children` | `ReactNode` | - | The bottom sheet content |
600
+ | `presentation` | `'bottom-sheet'` | - | Presentation mode for the select |
601
+ | `contentContainerClassName` | `string` | - | Additional CSS classes for the content container |
602
+ | `...BottomSheetProps` | `BottomSheetProps` | - | All @gorhom/bottom-sheet props are supported |
603
+
604
+ ### Select.Content (Dialog Presentation)
605
+
606
+ | prop | type | default | description |
607
+ | -------------- | -------------------------------------------------------- | ------- | --------------------------------------------------- |
608
+ | `children` | `ReactNode` | - | The dialog content |
609
+ | `presentation` | `'dialog'` | - | Presentation mode for the select |
610
+ | `classNames` | `{ wrapper?: string; content?: string }` | - | Additional CSS classes for wrapper and content |
611
+ | `styles` | `Partial<Record<DialogContentFallbackSlots, ViewStyle>>` | - | Styles for different parts of the dialog content |
612
+ | `animation` | `SelectContentAnimation` | - | Animation configuration |
613
+ | `isSwipeable` | `boolean` | `true` | Whether the dialog content can be swiped to dismiss |
614
+ | `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
615
+ | `asChild` | `boolean` | `false` | Whether to render as a child element |
616
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
617
+
618
+ #### `styles`
619
+
620
+ | prop | type | description |
621
+ | --------- | ----------- | -------------------------------- |
622
+ | `wrapper` | `ViewStyle` | Styles for the wrapper container |
623
+ | `content` | `ViewStyle` | Styles for the dialog content |
624
+
625
+ #### SelectContentAnimation
626
+
627
+ Animation configuration for Select.Content component (dialog presentation). Can be:
628
+
629
+ - `false` or `"disabled"`: Disable all animations
630
+ - `true` or `undefined`: Use default Keyframe animations (scale and opacity transitions)
631
+ - `object`: Custom animation configuration with `entering` and/or `exiting` Keyframe animations
632
+
633
+ | prop | type | default | description |
634
+ | ---------- | ----------------------- | ------- | -------------------------------------------------------------------------------------------------------- |
635
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
636
+ | `entering` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for entering transition (default: Keyframe with scale and opacity, 200ms) |
637
+ | `exiting` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for exiting transition (default: Keyframe mirroring entering animation, 150ms) |
638
+
639
+ ### Select.Close
640
+
641
+ Select.Close extends [CloseButton](../close-button/close-button.md) and automatically handles select dismissal when pressed.
642
+
643
+ ### Select.ListLabel
644
+
645
+ | prop | type | default | description |
646
+ | -------------- | ----------- | ------- | -------------------------------------------------- |
647
+ | `children` | `ReactNode` | - | The label text content |
648
+ | `className` | `string` | - | Additional CSS classes for the list label |
649
+ | `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
650
+
651
+ ### Select.Item
652
+
653
+ | prop | type | default | description |
654
+ | ------------------- | ------------------------------------------------------------ | ------- | -------------------------------------------------------------------------- |
655
+ | `children` | `ReactNode \| ((props: SelectItemRenderProps) => ReactNode)` | - | Custom item content. Defaults to label and indicator, or a render function |
656
+ | `value` | `any` | - | The value associated with this item (required) |
657
+ | `label` | `string` | - | The label text for this item (required) |
658
+ | `isDisabled` | `boolean` | `false` | Whether this item is disabled |
659
+ | `className` | `string` | - | Additional CSS classes for the item |
660
+ | `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported |
661
+
662
+ #### SelectItemRenderProps
663
+
664
+ When using a render function for `children`, the following props are provided:
665
+
666
+ | property | type | description |
667
+ | ------------ | --------- | --------------------------------------- |
668
+ | `isSelected` | `boolean` | Whether this item is currently selected |
669
+ | `value` | `string` | The value of the item |
670
+ | `isDisabled` | `boolean` | Whether the item is disabled |
671
+
672
+ ### Select.ItemLabel
673
+
674
+ | prop | type | default | description |
675
+ | -------------- | ----------- | ------- | -------------------------------------------------- |
676
+ | `className` | `string` | - | Additional CSS classes for the item label |
677
+ | `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
678
+
679
+ ### Select.ItemDescription
680
+
681
+ | prop | type | default | description |
682
+ | -------------- | ----------- | ------- | -------------------------------------------------- |
683
+ | `children` | `ReactNode` | - | The description text content |
684
+ | `className` | `string` | - | Additional CSS classes for the item description |
685
+ | `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
686
+
687
+ ### Select.ItemIndicator
688
+
689
+ | prop | type | default | description |
690
+ | -------------- | ------------------------------ | ------- | -------------------------------------------------- |
691
+ | `children` | `ReactNode` | - | Custom indicator content. Defaults to check icon |
692
+ | `className` | `string` | - | Additional CSS classes for the item indicator |
693
+ | `iconProps` | `SelectItemIndicatorIconProps` | - | Check icon configuration |
694
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
695
+
696
+ #### SelectItemIndicatorIconProps
697
+
698
+ | prop | type | default | description |
699
+ | ------- | -------- | ---------------- | ----------------- |
700
+ | `size` | `number` | `16` | Size of the icon |
701
+ | `color` | `string` | `--colors-muted` | Color of the icon |
702
+
703
+ ## Hooks
704
+
705
+ ### useSelect
706
+
707
+ Hook to access the Select root context. Returns the select state and control functions.
708
+
709
+ ```tsx
710
+ import { useSelect } from '@/heroui';
711
+
712
+ const {
713
+ isOpen,
714
+ onOpenChange,
715
+ isDefaultOpen,
716
+ isDisabled,
717
+ presentation,
718
+ triggerPosition,
719
+ setTriggerPosition,
720
+ contentLayout,
721
+ setContentLayout,
722
+ nativeID,
723
+ value,
724
+ onValueChange,
725
+ } = useSelect();
726
+ ```
727
+
728
+ #### Return Value
729
+
730
+ | property | type | description |
731
+ | -------------------- | -------------------------------------------------- | --------------------------------------------------------- |
732
+ | `isOpen` | `boolean` | Whether the select is currently open |
733
+ | `onOpenChange` | `(open: boolean) => void` | Callback to change the open state |
734
+ | `isDefaultOpen` | `boolean \| undefined` | Whether the select is open by default (uncontrolled mode) |
735
+ | `isDisabled` | `boolean \| undefined` | Whether the select is disabled |
736
+ | `presentation` | `'popover' \| 'bottom-sheet' \| 'dialog'` | Presentation mode for the select content |
737
+ | `triggerPosition` | `LayoutPosition \| null` | Position of the trigger element relative to viewport |
738
+ | `setTriggerPosition` | `(position: LayoutPosition \| null) => void` | Updates the trigger element's position |
739
+ | `contentLayout` | `LayoutRectangle \| null` | Layout measurements of the select content |
740
+ | `setContentLayout` | `(layout: LayoutRectangle \| null) => void` | Updates the content layout measurements |
741
+ | `nativeID` | `string` | Unique identifier for the select instance |
742
+ | `value` | `SelectOption \| SelectOption[]` | Currently selected option |
743
+ | `onValueChange` | `(option: SelectOption \| SelectOption[]) => void` | Callback fired when the selected value changes |
744
+
745
+ **Note:** This hook must be used within a `Select` component. It will throw an error if called outside of the select context.
746
+
747
+ ### useSelectAnimation
748
+
749
+ Hook to access the Select animation state values within custom components or compound components.
750
+
751
+ ```tsx
752
+ import { useSelectAnimation } from '@/heroui';
753
+
754
+ const { selectState, progress, isDragging, isGestureReleaseAnimationRunning } =
755
+ useSelectAnimation();
756
+ ```
757
+
758
+ #### Return Value
759
+
760
+ | property | type | description |
761
+ | ---------------------------------- | ---------------------- | ---------------------------------------------------------- |
762
+ | `progress` | `SharedValue<number>` | Progress value for animations (0=idle, 1=open, 2=close) |
763
+ | `isDragging` | `SharedValue<boolean>` | Whether the select content is currently being dragged |
764
+ | `isGestureReleaseAnimationRunning` | `SharedValue<boolean>` | Whether the gesture release animation is currently running |
765
+
766
+ **Note:** This hook must be used within a `Select` component. It will throw an error if called outside of the select animation context.
767
+
768
+ #### SelectOption
769
+
770
+ | property | type | description |
771
+ | -------- | -------- | ---------------------------- |
772
+ | `value` | `string` | The value of the option |
773
+ | `label` | `string` | The label text of the option |
774
+
775
+ ### useSelectItem
776
+
777
+ Hook to access the Select Item context. Returns the item's value and label.
778
+
779
+ ```tsx
780
+ import { useSelectItem } from '@/heroui';
781
+
782
+ const { itemValue, label } = useSelectItem();
783
+ ```
784
+
785
+ #### Return Value
786
+
787
+ | property | type | description |
788
+ | ----------- | -------- | ---------------------------------- |
789
+ | `itemValue` | `string` | The value of the current item |
790
+ | `label` | `string` | The label text of the current item |
791
+
792
+ ## Special Notes
793
+
794
+ ### Element Inspector (iOS)
795
+
796
+ Select uses FullWindowOverlay on iOS. To enable the React Native element inspector during development, set `disableFullWindowOverlay={true}` on `Select.Portal`. Tradeoff: the select dropdown will not appear above native modals when disabled.