@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,828 @@
1
+ import BottomSheet from '@gorhom/bottom-sheet';
2
+ import { forwardRef, useLayoutEffect, useMemo, useRef } from 'react';
3
+ import type { GestureResponderEvent, Text as RNText } from 'react-native';
4
+ import { StyleSheet, useWindowDimensions, View } from 'react-native';
5
+ import { GestureDetector } from 'react-native-gesture-handler';
6
+ import Animated from 'react-native-reanimated';
7
+ import { useSafeAreaInsets } from 'react-native-safe-area-context';
8
+ import { useThemeColor } from '../../helpers/external/hooks';
9
+ import { cn } from '../../helpers/external/utils';
10
+ import {
11
+ BottomSheetContent,
12
+ CheckIcon,
13
+ ChevronDownIcon,
14
+ FullWindowOverlay,
15
+ HeroText,
16
+ } from '../../helpers/internal/components';
17
+ import {
18
+ AnimationSettingsProvider,
19
+ useAnimationSettings,
20
+ } from '../../helpers/internal/contexts';
21
+ import {
22
+ usePopupDialogContentAnimation,
23
+ usePopupOverlayAnimation,
24
+ usePopupPopoverContentAnimation,
25
+ usePopupRootAnimation,
26
+ } from '../../helpers/internal/hooks';
27
+ import type { PressableRef, ViewRef } from '../../helpers/internal/types';
28
+ import * as SelectPrimitives from '../../primitives/select';
29
+ import * as SelectPrimitivesTypes from '../../primitives/select/select.types';
30
+ import { CloseButton } from '../close-button';
31
+ import {
32
+ SelectAnimationProvider,
33
+ useSelectAnimation,
34
+ useSelectTriggerIndicatorAnimation,
35
+ } from './select.animation';
36
+ import {
37
+ DEFAULT_ALIGN_OFFSET,
38
+ DEFAULT_ICON_SIZE,
39
+ DEFAULT_INSETS,
40
+ DEFAULT_OFFSET,
41
+ DISPLAY_NAME,
42
+ } from './select.constants';
43
+ import { selectClassNames, selectStyleSheet } from './select.styles';
44
+ import type {
45
+ SelectCloseProps,
46
+ SelectContentBottomSheetProps,
47
+ SelectContentDialogProps,
48
+ SelectContentPopoverProps,
49
+ SelectContentProps,
50
+ SelectItemDescriptionProps,
51
+ SelectItemIndicatorProps,
52
+ SelectItemLabelProps,
53
+ SelectItemProps,
54
+ SelectItemRenderProps,
55
+ SelectListLabelProps,
56
+ SelectOverlayProps,
57
+ SelectPortalProps,
58
+ SelectRootProps,
59
+ SelectTriggerIndicatorProps,
60
+ SelectTriggerProps,
61
+ SelectValueProps,
62
+ } from './select.types';
63
+
64
+ const AnimatedOverlay = Animated.createAnimatedComponent(
65
+ SelectPrimitives.Overlay
66
+ );
67
+
68
+ const AnimatedPopoverContent = Animated.createAnimatedComponent(
69
+ SelectPrimitives.PopoverContent
70
+ );
71
+
72
+ const AnimatedTriggerIndicator = Animated.createAnimatedComponent(
73
+ SelectPrimitives.TriggerIndicator
74
+ );
75
+
76
+ const useSelect = SelectPrimitives.useRootContext;
77
+
78
+ const useSelectItem = SelectPrimitives.useItemContext;
79
+
80
+ // --------------------------------------------------
81
+
82
+ function SelectRoot<M extends SelectPrimitivesTypes.SelectionMode = 'single'>({
83
+ children,
84
+ ref,
85
+ isOpen,
86
+ isDefaultOpen,
87
+ onOpenChange,
88
+ animation,
89
+ ...props
90
+ }: SelectRootProps<M> & {
91
+ ref?: React.Ref<SelectPrimitivesTypes.RootRef>;
92
+ }) {
93
+ const {
94
+ progress,
95
+ isDragging,
96
+ isGestureReleaseAnimationRunning,
97
+ isAllAnimationsDisabled,
98
+ } = usePopupRootAnimation({
99
+ animation,
100
+ });
101
+
102
+ const animationContextValue = useMemo(
103
+ () => ({
104
+ progress,
105
+ isDragging,
106
+ isGestureReleaseAnimationRunning,
107
+ }),
108
+ [progress, isDragging, isGestureReleaseAnimationRunning]
109
+ );
110
+
111
+ const animationSettingsContextValue = useMemo(
112
+ () => ({
113
+ isAllAnimationsDisabled,
114
+ }),
115
+ [isAllAnimationsDisabled]
116
+ );
117
+
118
+ return (
119
+ <AnimationSettingsProvider value={animationSettingsContextValue}>
120
+ <SelectAnimationProvider value={animationContextValue}>
121
+ <SelectPrimitives.Root
122
+ ref={ref}
123
+ isOpen={isOpen}
124
+ isDefaultOpen={isDefaultOpen}
125
+ onOpenChange={onOpenChange}
126
+ {...props}
127
+ >
128
+ {children}
129
+ </SelectPrimitives.Root>
130
+ </SelectAnimationProvider>
131
+ </AnimationSettingsProvider>
132
+ );
133
+ }
134
+
135
+ // --------------------------------------------------
136
+
137
+ const SelectTrigger = forwardRef<
138
+ SelectPrimitivesTypes.TriggerRef,
139
+ SelectTriggerProps
140
+ >(
141
+ (
142
+ { variant = 'default', isDisabled: isDisabledProp, className, ...props },
143
+ ref
144
+ ) => {
145
+ const { isDisabled } = useSelect();
146
+
147
+ const triggerClassName = selectClassNames.trigger({
148
+ variant,
149
+ isDisabled: isDisabledProp || isDisabled,
150
+ className,
151
+ });
152
+
153
+ return (
154
+ <SelectPrimitives.Trigger
155
+ ref={ref}
156
+ className={triggerClassName}
157
+ {...props}
158
+ />
159
+ );
160
+ }
161
+ );
162
+
163
+ // --------------------------------------------------
164
+
165
+ const SelectValue = forwardRef<
166
+ SelectPrimitivesTypes.ValueRef,
167
+ SelectValueProps
168
+ >(({ className, ...props }, ref) => {
169
+ const { value } = useSelect();
170
+
171
+ const isSelected = Array.isArray(value)
172
+ ? value.length > 0
173
+ : Boolean(value?.value);
174
+
175
+ const valueClassName = selectClassNames.value({
176
+ isSelected,
177
+ className,
178
+ });
179
+
180
+ return (
181
+ <SelectPrimitives.Value ref={ref} className={valueClassName} {...props} />
182
+ );
183
+ });
184
+
185
+ // --------------------------------------------------
186
+
187
+ const SelectTriggerIndicator = forwardRef<ViewRef, SelectTriggerIndicatorProps>(
188
+ (props, ref) => {
189
+ const {
190
+ children,
191
+ className,
192
+ iconProps,
193
+ animation,
194
+ isAnimatedStyleActive = true,
195
+ style,
196
+ ...restProps
197
+ } = props;
198
+
199
+ const { isOpen } = useSelect();
200
+
201
+ const themeColorForeground = useThemeColor('foreground');
202
+
203
+ const triggerIndicatorClassName = selectClassNames.triggerIndicator({
204
+ className,
205
+ });
206
+
207
+ const { rContainerStyle } = useSelectTriggerIndicatorAnimation({
208
+ animation,
209
+ isOpen,
210
+ });
211
+
212
+ const triggerIndicatorStyle = isAnimatedStyleActive
213
+ ? [rContainerStyle, style]
214
+ : style;
215
+
216
+ if (children) {
217
+ return (
218
+ <AnimatedTriggerIndicator
219
+ ref={ref}
220
+ className={triggerIndicatorClassName}
221
+ style={style}
222
+ {...restProps}
223
+ >
224
+ {children}
225
+ </AnimatedTriggerIndicator>
226
+ );
227
+ }
228
+
229
+ return (
230
+ <AnimatedTriggerIndicator
231
+ ref={ref}
232
+ className={triggerIndicatorClassName}
233
+ style={triggerIndicatorStyle}
234
+ {...restProps}
235
+ >
236
+ <ChevronDownIcon
237
+ size={iconProps?.size ?? DEFAULT_ICON_SIZE}
238
+ color={iconProps?.color ?? themeColorForeground}
239
+ />
240
+ </AnimatedTriggerIndicator>
241
+ );
242
+ }
243
+ );
244
+
245
+ // --------------------------------------------------
246
+
247
+ const SelectPortal = ({
248
+ className,
249
+ children,
250
+ disableFullWindowOverlay = false,
251
+ ...props
252
+ }: SelectPortalProps) => {
253
+ const animationSettingsContext = useAnimationSettings();
254
+ const animationContext = useSelectAnimation();
255
+
256
+ const portalClassName = selectClassNames.portal({ className });
257
+
258
+ return (
259
+ <SelectPrimitives.Portal {...props}>
260
+ <AnimationSettingsProvider value={animationSettingsContext}>
261
+ <SelectAnimationProvider value={animationContext}>
262
+ <FullWindowOverlay
263
+ disableFullWindowOverlay={disableFullWindowOverlay}
264
+ >
265
+ <View className={portalClassName} pointerEvents="box-none">
266
+ {children}
267
+ </View>
268
+ </FullWindowOverlay>
269
+ </SelectAnimationProvider>
270
+ </AnimationSettingsProvider>
271
+ </SelectPrimitives.Portal>
272
+ );
273
+ };
274
+
275
+ // --------------------------------------------------
276
+
277
+ const SelectOverlay = forwardRef<
278
+ SelectPrimitivesTypes.OverlayRef,
279
+ SelectOverlayProps
280
+ >(
281
+ (
282
+ { className, style, animation, isAnimatedStyleActive = true, ...props },
283
+ ref
284
+ ) => {
285
+ const { isOpen, presentation } = useSelect();
286
+ const { progress, isDragging, isGestureReleaseAnimationRunning } =
287
+ useSelectAnimation();
288
+
289
+ const overlayClassName = selectClassNames.overlay({
290
+ className,
291
+ });
292
+
293
+ const { rContainerStyle, entering, exiting } = usePopupOverlayAnimation({
294
+ progress: presentation !== 'popover' ? progress : undefined,
295
+ isDragging: presentation === 'popover' ? isDragging : undefined,
296
+ isGestureReleaseAnimationRunning:
297
+ presentation === 'dialog'
298
+ ? isGestureReleaseAnimationRunning
299
+ : undefined,
300
+ animation,
301
+ });
302
+
303
+ const overlayStyle = isAnimatedStyleActive
304
+ ? [rContainerStyle, style]
305
+ : style;
306
+
307
+ return (
308
+ <Animated.View
309
+ entering={entering}
310
+ exiting={exiting}
311
+ style={StyleSheet.absoluteFill}
312
+ pointerEvents="box-none"
313
+ >
314
+ <AnimatedOverlay
315
+ ref={ref}
316
+ className={overlayClassName}
317
+ style={overlayStyle}
318
+ forceMount={presentation === 'bottom-sheet' ? true : undefined}
319
+ pointerEvents={isOpen ? 'auto' : 'none'}
320
+ {...props}
321
+ />
322
+ </Animated.View>
323
+ );
324
+ }
325
+ );
326
+
327
+ // --------------------------------------------------
328
+
329
+ const SelectContentPopover = forwardRef<
330
+ SelectPrimitivesTypes.ContentRef,
331
+ SelectContentProps & { presentation?: 'popover' }
332
+ >(
333
+ (
334
+ {
335
+ placement = 'bottom',
336
+ align = 'center',
337
+ avoidCollisions = true,
338
+ offset = DEFAULT_OFFSET,
339
+ alignOffset = DEFAULT_ALIGN_OFFSET,
340
+ className,
341
+ children,
342
+ style,
343
+ animation,
344
+ ...props
345
+ },
346
+ ref
347
+ ) => {
348
+ const { contentLayout } = useSelect();
349
+
350
+ const safeAreaInsets = useSafeAreaInsets();
351
+ const { height: screenHeight } = useWindowDimensions();
352
+
353
+ // Initially useRelativePosition returns { position: 'absolute', opacity: 0, top: dimensions.height }
354
+ // So we need to wait for the content to be ready before showing it
355
+ const isReady = Boolean(contentLayout?.y && contentLayout.y < screenHeight);
356
+
357
+ const insets = {
358
+ top: DEFAULT_INSETS.top + safeAreaInsets.top,
359
+ bottom: DEFAULT_INSETS.bottom + safeAreaInsets.bottom,
360
+ left: DEFAULT_INSETS.left + safeAreaInsets.left,
361
+ right: DEFAULT_INSETS.right + safeAreaInsets.right,
362
+ };
363
+
364
+ const contentClassName = selectClassNames.content({
365
+ className,
366
+ });
367
+
368
+ const { entering, exiting } = usePopupPopoverContentAnimation({
369
+ placement,
370
+ offset,
371
+ animation,
372
+ });
373
+
374
+ return (
375
+ <>
376
+ {isReady && (
377
+ <AnimatedPopoverContent
378
+ ref={ref}
379
+ entering={entering}
380
+ exiting={exiting}
381
+ placement={placement}
382
+ align={align}
383
+ avoidCollisions={avoidCollisions}
384
+ offset={offset}
385
+ alignOffset={alignOffset}
386
+ insets={insets}
387
+ className={contentClassName}
388
+ style={[selectStyleSheet.contentContainer, style]}
389
+ {...props}
390
+ >
391
+ {children}
392
+ </AnimatedPopoverContent>
393
+ )}
394
+ <AnimatedPopoverContent
395
+ placement={placement}
396
+ accessible={false}
397
+ accessibilityElementsHidden={true}
398
+ importantForAccessibility="no"
399
+ pointerEvents="none"
400
+ collapsable={false}
401
+ align={align}
402
+ avoidCollisions={avoidCollisions}
403
+ offset={offset}
404
+ alignOffset={alignOffset}
405
+ insets={insets}
406
+ className={cn(contentClassName, 'absolute opacity-0')}
407
+ style={[selectStyleSheet.contentContainer, style]}
408
+ {...props}
409
+ >
410
+ {children}
411
+ </AnimatedPopoverContent>
412
+ </>
413
+ );
414
+ }
415
+ );
416
+
417
+ // --------------------------------------------------
418
+
419
+ const SelectContentBottomSheet = forwardRef<
420
+ BottomSheet,
421
+ SelectContentProps & { presentation: 'bottom-sheet' }
422
+ >(
423
+ (
424
+ {
425
+ children,
426
+ index: initialIndex,
427
+ backgroundClassName,
428
+ handleIndicatorClassName,
429
+ contentContainerClassName: contentContainerClassNameProp,
430
+ contentContainerProps,
431
+ animation,
432
+ animationConfigs,
433
+ ...restProps
434
+ },
435
+ ref
436
+ ) => {
437
+ const { isOpen, onOpenChange } = useSelect();
438
+
439
+ const { progress, isDragging } = useSelectAnimation();
440
+
441
+ return (
442
+ <BottomSheetContent
443
+ ref={ref}
444
+ index={initialIndex}
445
+ backgroundClassName={backgroundClassName}
446
+ handleIndicatorClassName={handleIndicatorClassName}
447
+ contentContainerClassName={contentContainerClassNameProp}
448
+ contentContainerProps={contentContainerProps}
449
+ animation={animation}
450
+ animationConfigs={animationConfigs}
451
+ backgroundStyle={[
452
+ selectStyleSheet.contentContainer,
453
+ restProps.backgroundStyle,
454
+ ]}
455
+ isOpen={isOpen}
456
+ progress={progress}
457
+ isDragging={isDragging}
458
+ onOpenChange={onOpenChange}
459
+ {...restProps}
460
+ >
461
+ {children}
462
+ </BottomSheetContent>
463
+ );
464
+ }
465
+ );
466
+
467
+ // --------------------------------------------------
468
+
469
+ const SelectContentDialog = forwardRef<
470
+ SelectPrimitivesTypes.ContentRef,
471
+ SelectContentProps & { presentation: 'dialog' }
472
+ >(
473
+ (
474
+ {
475
+ classNames,
476
+ styles,
477
+ style,
478
+ children,
479
+ animation,
480
+ isSwipeable = true,
481
+ ...props
482
+ },
483
+ ref
484
+ ) => {
485
+ const { isOpen, onOpenChange } = useSelect();
486
+
487
+ const { progress, isDragging, isGestureReleaseAnimationRunning } =
488
+ useSelectAnimation();
489
+
490
+ const { wrapper, content } = selectClassNames.dialogContent();
491
+
492
+ const wrapperClassName = wrapper({ className: classNames?.wrapper });
493
+ const contentClassName = content({ className: classNames?.content });
494
+
495
+ const dragContainerRef = useRef<View>(null);
496
+
497
+ const {
498
+ contentY,
499
+ contentHeight,
500
+ panGesture,
501
+ rDragContainerStyle,
502
+ entering,
503
+ exiting,
504
+ } = usePopupDialogContentAnimation({
505
+ progress,
506
+ isDragging,
507
+ isGestureReleaseAnimationRunning,
508
+ isOpen,
509
+ onOpenChange,
510
+ animation,
511
+ isSwipeable,
512
+ });
513
+
514
+ useLayoutEffect(() => {
515
+ dragContainerRef.current?.measure(
516
+ (_x, _y, _width, height, _pageX, pageY) => {
517
+ contentY.set(pageY);
518
+ contentHeight.set(height);
519
+ }
520
+ );
521
+ // eslint-disable-next-line react-hooks/exhaustive-deps
522
+ }, []);
523
+
524
+ return (
525
+ <View className={wrapperClassName} style={styles?.wrapper}>
526
+ <GestureDetector gesture={panGesture}>
527
+ <Animated.View
528
+ ref={dragContainerRef}
529
+ entering={entering}
530
+ exiting={exiting}
531
+ >
532
+ <Animated.View style={rDragContainerStyle} pointerEvents="box-none">
533
+ <SelectPrimitives.DialogContent
534
+ ref={ref}
535
+ className={contentClassName}
536
+ style={[
537
+ selectStyleSheet.contentContainer,
538
+ styles?.content,
539
+ style,
540
+ ]}
541
+ {...props}
542
+ >
543
+ {children}
544
+ </SelectPrimitives.DialogContent>
545
+ </Animated.View>
546
+ </Animated.View>
547
+ </GestureDetector>
548
+ </View>
549
+ );
550
+ }
551
+ );
552
+
553
+ // --------------------------------------------------
554
+
555
+ const SelectContent = forwardRef<
556
+ SelectPrimitivesTypes.ContentRef | BottomSheet,
557
+ SelectContentProps
558
+ >((props, ref) => {
559
+ const presentation = props.presentation || 'popover';
560
+ const { presentation: contextPresentation } = useSelect();
561
+
562
+ if (__DEV__) {
563
+ if (presentation !== contextPresentation) {
564
+ throw new Error(
565
+ `Select.Content presentation prop ("${props.presentation}") does not match Select.Root presentation prop ("${contextPresentation}"). They must be the same.`
566
+ );
567
+ }
568
+ }
569
+
570
+ if (presentation === 'bottom-sheet') {
571
+ return (
572
+ <SelectContentBottomSheet
573
+ ref={ref as React.Ref<BottomSheet>}
574
+ {...(props as SelectContentBottomSheetProps)}
575
+ />
576
+ );
577
+ }
578
+
579
+ if (presentation === 'dialog') {
580
+ return (
581
+ <SelectContentDialog
582
+ ref={ref as React.Ref<SelectPrimitivesTypes.ContentRef>}
583
+ {...(props as SelectContentDialogProps)}
584
+ />
585
+ );
586
+ }
587
+
588
+ return (
589
+ <SelectContentPopover
590
+ ref={ref as React.Ref<SelectPrimitivesTypes.ContentRef>}
591
+ {...(props as SelectContentPopoverProps)}
592
+ />
593
+ );
594
+ });
595
+
596
+ // --------------------------------------------------
597
+
598
+ const SelectClose = forwardRef<PressableRef, SelectCloseProps>((props, ref) => {
599
+ const { onPress: onPressProp, ...restProps } = props;
600
+ const { onOpenChange } = useSelect();
601
+
602
+ const onPress = (ev: GestureResponderEvent) => {
603
+ onOpenChange(false);
604
+ if (typeof onPressProp === 'function') {
605
+ onPressProp(ev);
606
+ }
607
+ };
608
+
609
+ return <CloseButton ref={ref} onPress={onPress} {...restProps} />;
610
+ });
611
+
612
+ // --------------------------------------------------
613
+
614
+ const SelectItem = forwardRef<SelectPrimitivesTypes.ItemRef, SelectItemProps>(
615
+ (
616
+ {
617
+ children,
618
+ className,
619
+ disabled = false,
620
+ value: itemValue,
621
+ label,
622
+ ...props
623
+ },
624
+ ref
625
+ ) => {
626
+ const { value } = useSelect();
627
+
628
+ const isSelected = Array.isArray(value)
629
+ ? value.some((v) => v?.value === itemValue)
630
+ : value?.value === itemValue;
631
+ const isDisabled = disabled ?? false;
632
+
633
+ const itemClassName = selectClassNames.item({ className });
634
+
635
+ const renderProps: SelectItemRenderProps = {
636
+ isSelected,
637
+ value: itemValue,
638
+ isDisabled,
639
+ };
640
+
641
+ const content =
642
+ typeof children === 'function'
643
+ ? children(renderProps)
644
+ : (children ?? (
645
+ <>
646
+ <SelectItemLabel />
647
+ <SelectItemIndicator />
648
+ </>
649
+ ));
650
+
651
+ return (
652
+ <SelectPrimitives.Item
653
+ ref={ref}
654
+ className={itemClassName}
655
+ disabled={disabled}
656
+ value={itemValue}
657
+ label={label}
658
+ {...props}
659
+ >
660
+ {content}
661
+ </SelectPrimitives.Item>
662
+ );
663
+ }
664
+ );
665
+
666
+ // --------------------------------------------------
667
+
668
+ const SelectItemLabel = forwardRef<
669
+ SelectPrimitivesTypes.ItemLabelRef,
670
+ SelectItemLabelProps
671
+ >(({ className, ...props }, ref) => {
672
+ const { label } = useSelectItem();
673
+
674
+ const itemLabelClassName = selectClassNames.itemLabel({ className });
675
+
676
+ return (
677
+ <HeroText
678
+ ref={ref}
679
+ accessibilityRole="text"
680
+ className={itemLabelClassName}
681
+ {...props}
682
+ >
683
+ {label}
684
+ </HeroText>
685
+ );
686
+ });
687
+
688
+ // --------------------------------------------------
689
+
690
+ const SelectItemDescription = forwardRef<RNText, SelectItemDescriptionProps>(
691
+ ({ className, ...props }, ref) => {
692
+ const itemDescriptionClassName = selectClassNames.itemDescription({
693
+ className,
694
+ });
695
+
696
+ return (
697
+ <HeroText
698
+ ref={ref}
699
+ accessibilityRole="summary"
700
+ className={itemDescriptionClassName}
701
+ {...props}
702
+ />
703
+ );
704
+ }
705
+ );
706
+
707
+ // --------------------------------------------------
708
+
709
+ const SelectItemIndicator = forwardRef<
710
+ SelectPrimitivesTypes.ItemIndicatorRef,
711
+ SelectItemIndicatorProps
712
+ >(({ className, children, iconProps, ...props }, ref) => {
713
+ const themeColorAccent = useThemeColor('accent');
714
+
715
+ const iconSize = iconProps?.size ?? 16;
716
+ const iconColor = iconProps?.color ?? themeColorAccent;
717
+
718
+ const itemIndicatorClassName = selectClassNames.itemIndicator({ className });
719
+
720
+ return (
721
+ <SelectPrimitives.ItemIndicator
722
+ ref={ref}
723
+ className={itemIndicatorClassName}
724
+ {...props}
725
+ >
726
+ {children || <CheckIcon size={iconSize} color={iconColor} />}
727
+ </SelectPrimitives.ItemIndicator>
728
+ );
729
+ });
730
+
731
+ // --------------------------------------------------
732
+
733
+ const SelectListLabel = forwardRef<
734
+ SelectPrimitivesTypes.GroupLabelRef,
735
+ SelectListLabelProps
736
+ >(({ className, ...props }, ref) => {
737
+ const listLabelClassName = selectClassNames.listLabel({
738
+ className,
739
+ });
740
+
741
+ return (
742
+ <HeroText
743
+ ref={ref}
744
+ className={listLabelClassName}
745
+ accessibilityRole="header"
746
+ {...props}
747
+ />
748
+ );
749
+ });
750
+
751
+ // --------------------------------------------------
752
+
753
+ SelectRoot.displayName = DISPLAY_NAME.ROOT;
754
+ SelectTrigger.displayName = DISPLAY_NAME.TRIGGER;
755
+ SelectTriggerIndicator.displayName = DISPLAY_NAME.TRIGGER_INDICATOR;
756
+ SelectValue.displayName = DISPLAY_NAME.VALUE;
757
+ SelectPortal.displayName = DISPLAY_NAME.PORTAL;
758
+ SelectOverlay.displayName = DISPLAY_NAME.OVERLAY;
759
+ SelectContent.displayName = DISPLAY_NAME.CONTENT;
760
+ SelectClose.displayName = DISPLAY_NAME.CLOSE;
761
+ SelectItemDescription.displayName = DISPLAY_NAME.ITEM_DESCRIPTION;
762
+ SelectItem.displayName = DISPLAY_NAME.ITEM;
763
+ SelectItemLabel.displayName = DISPLAY_NAME.ITEM_LABEL;
764
+ SelectItemIndicator.displayName = DISPLAY_NAME.ITEM_INDICATOR;
765
+ SelectListLabel.displayName = DISPLAY_NAME.LIST_LABEL;
766
+
767
+ /**
768
+ * Compound Select component with sub-components
769
+ *
770
+ * @component Select - Main container that manages open/close state, positioning,
771
+ * value selection and provides context to child components. Handles placement, alignment, and collision detection.
772
+ *
773
+ * @component Select.Trigger - Clickable element that toggles the select visibility.
774
+ * Wraps any child element with press handlers.
775
+ *
776
+ * @component Select.TriggerIndicator - Optional visual indicator showing open/close state.
777
+ * Defaults to an animated chevron icon that rotates based on select state.
778
+ * Supports custom animation configuration.
779
+ *
780
+ * @component Select.Value - Displays the selected value or placeholder text.
781
+ * Automatically updates when selection changes.
782
+ *
783
+ * @component Select.Portal - Renders select content in a portal layer above other content.
784
+ * Ensures proper stacking and positioning.
785
+ *
786
+ * @component Select.Overlay - Optional background overlay. Can be transparent or
787
+ * semi-transparent to capture outside clicks.
788
+ *
789
+ * @component Select.Content - Container for select content with three presentation modes:
790
+ * popover (default floating with positioning and collision detection), bottom sheet modal, or dialog modal.
791
+ * Supports custom animations.
792
+ *
793
+ * @component Select.Item - Selectable option item. Handles selection state and press events.
794
+ *
795
+ * @component Select.ItemLabel - Displays the label text for an item.
796
+ *
797
+ * @component Select.ItemIndicator - Optional indicator shown for selected items.
798
+ *
799
+ * @component Select.ListLabel - Label for the list of items.
800
+ *
801
+ * @component Select.Close - Close button for the select.
802
+ * Can accept custom children or uses default close icon.
803
+ *
804
+ * @component Select.ItemDescription - Optional description text for items with muted styling.
805
+ *
806
+ * Props flow from Select to sub-components via context (placement, align, offset, value, etc.).
807
+ * The select automatically positions itself relative to the trigger element.
808
+ *
809
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/select
810
+ */
811
+ const Select = Object.assign(SelectRoot, {
812
+ Trigger: SelectTrigger,
813
+ /** @optional Visual indicator showing open/close state (defaults to chevron) */
814
+ TriggerIndicator: SelectTriggerIndicator,
815
+ Value: SelectValue,
816
+ Portal: SelectPortal,
817
+ Overlay: SelectOverlay,
818
+ Content: SelectContent,
819
+ Item: SelectItem,
820
+ ItemLabel: SelectItemLabel,
821
+ ItemDescription: SelectItemDescription,
822
+ ItemIndicator: SelectItemIndicator,
823
+ ListLabel: SelectListLabel,
824
+ Close: SelectClose,
825
+ });
826
+
827
+ export { useSelect, useSelectAnimation, useSelectItem };
828
+ export default Select;