@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,705 @@
1
+ import React, {
2
+ createContext,
3
+ forwardRef,
4
+ useContext,
5
+ useEffect,
6
+ useId,
7
+ useMemo,
8
+ useState,
9
+ } from 'react';
10
+ import {
11
+ BackHandler,
12
+ Pressable,
13
+ StyleSheet,
14
+ Text,
15
+ View,
16
+ type GestureResponderEvent,
17
+ type LayoutChangeEvent,
18
+ type LayoutRectangle,
19
+ } from 'react-native';
20
+ import {
21
+ useAugmentedRef,
22
+ useControllableState,
23
+ useRelativePosition,
24
+ type LayoutPosition,
25
+ } from '../../helpers/internal/hooks';
26
+ import { Portal as PrimitivePortal } from '../portal';
27
+ import * as Slot from '../slot';
28
+ import type {
29
+ CloseProps,
30
+ CloseRef,
31
+ ContentRef,
32
+ DialogContentProps,
33
+ GroupLabelProps,
34
+ GroupLabelRef,
35
+ GroupProps,
36
+ GroupRef,
37
+ IRootContext,
38
+ ItemIndicatorProps,
39
+ ItemIndicatorRef,
40
+ ItemLabelProps,
41
+ ItemLabelRef,
42
+ ItemProps,
43
+ ItemRef,
44
+ OverlayProps,
45
+ OverlayRef,
46
+ PopoverContentProps,
47
+ PortalProps,
48
+ RootProps,
49
+ RootRef,
50
+ SelectionMode,
51
+ SelectValue,
52
+ TriggerIndicatorProps,
53
+ TriggerIndicatorRef,
54
+ TriggerProps,
55
+ TriggerRef,
56
+ ValueProps,
57
+ ValueRef,
58
+ } from './select.types';
59
+ import { formatSelectedLabels, isItemSelected } from './select.utils';
60
+
61
+ const RootContext = createContext<IRootContext | null>(null);
62
+
63
+ const useRootContext = () => {
64
+ const context = useContext(RootContext);
65
+ if (!context) {
66
+ throw new Error(
67
+ 'Select compound components cannot be rendered outside the Select component'
68
+ );
69
+ }
70
+ return context;
71
+ };
72
+
73
+ function Root<M extends SelectionMode = 'single'>({
74
+ asChild,
75
+ ref,
76
+ value: valueProp,
77
+ defaultValue,
78
+ onValueChange: onValueChangeProp,
79
+ isOpen: isOpenProp,
80
+ isDefaultOpen,
81
+ onOpenChange: onOpenChangeProp,
82
+ isDisabled,
83
+ selectionMode = 'single' as M,
84
+ presentation = 'popover',
85
+ ...viewProps
86
+ }: RootProps<M> & { ref?: React.Ref<RootRef> }) {
87
+ const nativeID = useId();
88
+
89
+ // Widen to SelectValue internally so the context can serve both modes.
90
+ const [value, onValueChange] = useControllableState<SelectValue>({
91
+ prop: valueProp as SelectValue,
92
+ defaultProp: defaultValue as SelectValue,
93
+ onChange: onValueChangeProp as ((value: SelectValue) => void) | undefined,
94
+ });
95
+
96
+ const [isOpen = false, onOpenChange] = useControllableState({
97
+ prop: isOpenProp,
98
+ defaultProp: isDefaultOpen,
99
+ onChange: onOpenChangeProp,
100
+ });
101
+
102
+ const [triggerPosition, setTriggerPosition] = useState<LayoutPosition | null>(
103
+ null
104
+ );
105
+ const [contentLayout, setContentLayout] = useState<LayoutRectangle | null>(
106
+ null
107
+ );
108
+
109
+ const Component = asChild ? Slot.View : View;
110
+ return (
111
+ <RootContext.Provider
112
+ value={{
113
+ value,
114
+ onValueChange,
115
+ isOpen,
116
+ onOpenChange,
117
+ isDefaultOpen,
118
+ isDisabled,
119
+ contentLayout,
120
+ nativeID,
121
+ selectionMode,
122
+ setContentLayout,
123
+ setTriggerPosition,
124
+ triggerPosition,
125
+ presentation,
126
+ }}
127
+ >
128
+ <Component ref={ref} {...viewProps} />
129
+ </RootContext.Provider>
130
+ );
131
+ }
132
+
133
+ // --------------------------------------------------
134
+
135
+ const Trigger = forwardRef<TriggerRef, TriggerProps>(
136
+ (
137
+ {
138
+ asChild,
139
+ onPress: onPressProp,
140
+ onLayout: onLayoutProp,
141
+ isDisabled = false,
142
+ ...props
143
+ },
144
+ ref
145
+ ) => {
146
+ const {
147
+ onOpenChange,
148
+ isOpen,
149
+ isDisabled: isDisabledRoot,
150
+ setTriggerPosition,
151
+ setContentLayout,
152
+ isDefaultOpen,
153
+ triggerPosition,
154
+ } = useRootContext();
155
+
156
+ const isDisabledValue = isDisabled || isDisabledRoot;
157
+
158
+ const augmentedRef = useAugmentedRef({
159
+ ref,
160
+ methods: {
161
+ open: () => {
162
+ onOpenChange(true);
163
+ augmentedRef.current?.measure(
164
+ (_x, _y, width, height, pageX, pageY) => {
165
+ setTriggerPosition({ width, pageX, pageY: pageY, height });
166
+ }
167
+ );
168
+ },
169
+ close: () => {
170
+ onOpenChange(false);
171
+ setTriggerPosition(null);
172
+ setContentLayout(null);
173
+ },
174
+ },
175
+ deps: [isOpen],
176
+ });
177
+
178
+ // Open popover on mount if isDefaultOpen is true or isOpen is true initially
179
+ useEffect(() => {
180
+ if ((isDefaultOpen || isOpen) && !triggerPosition) {
181
+ // Use setTimeout to ensure the component is mounted and can be measured
182
+ const timeoutId = setTimeout(() => {
183
+ augmentedRef.current?.measure(
184
+ (_x, _y, width, height, pageX, pageY) => {
185
+ setTriggerPosition({ width, pageX, pageY: pageY, height });
186
+ if (isDefaultOpen) {
187
+ onOpenChange(true);
188
+ }
189
+ }
190
+ );
191
+ }, 0);
192
+ return () => clearTimeout(timeoutId);
193
+ }
194
+ return undefined;
195
+ // eslint-disable-next-line react-hooks/exhaustive-deps
196
+ }, []);
197
+
198
+ function onPress(ev: GestureResponderEvent) {
199
+ if (isDisabledValue) return;
200
+ augmentedRef.current?.measure((_x, _y, width, height, pageX, pageY) => {
201
+ setTriggerPosition({ width, pageX, pageY: pageY, height });
202
+ });
203
+ onOpenChange(!isOpen);
204
+ onPressProp?.(ev);
205
+ }
206
+
207
+ function onLayout(event: LayoutChangeEvent) {
208
+ augmentedRef.current?.measure((_x, _y, width, height, pageX, pageY) => {
209
+ setTriggerPosition({ width, pageX, pageY: pageY, height });
210
+ if (isDefaultOpen) {
211
+ onOpenChange(true);
212
+ }
213
+ });
214
+ onLayoutProp?.(event);
215
+ }
216
+
217
+ const Component = asChild ? Slot.Pressable : Pressable;
218
+
219
+ return (
220
+ <Component
221
+ ref={augmentedRef}
222
+ aria-disabled={isDisabledValue}
223
+ role="combobox"
224
+ onPress={onPress}
225
+ disabled={isDisabledValue}
226
+ onLayout={onLayout}
227
+ {...props}
228
+ />
229
+ );
230
+ }
231
+ );
232
+
233
+ // --------------------------------------------------
234
+
235
+ const Value = React.forwardRef<ValueRef, ValueProps>(
236
+ ({ asChild, placeholder, ...props }, ref) => {
237
+ const { value, selectionMode } = useRootContext();
238
+
239
+ /** Resolves the display text based on selection mode and current value */
240
+ const displayText = useMemo(() => {
241
+ if (selectionMode === 'multiple') {
242
+ const values = Array.isArray(value) ? value : value ? [value] : [];
243
+ const labels = values
244
+ .map((v) => v?.label)
245
+ .filter((label): label is string => typeof label === 'string');
246
+
247
+ return formatSelectedLabels(labels) ?? placeholder;
248
+ }
249
+
250
+ // Single mode — preserve backward-compatible behavior
251
+ if (Array.isArray(value)) {
252
+ return value[0]?.label ?? placeholder;
253
+ }
254
+
255
+ return value?.label ?? placeholder;
256
+ }, [value, selectionMode, placeholder]);
257
+
258
+ const Component = asChild ? Slot.Text : Text;
259
+
260
+ return (
261
+ <Component ref={ref} {...props}>
262
+ {displayText}
263
+ </Component>
264
+ );
265
+ }
266
+ );
267
+
268
+ // --------------------------------------------------
269
+
270
+ const TriggerIndicator = forwardRef<TriggerIndicatorRef, TriggerIndicatorProps>(
271
+ ({ asChild, ...props }, ref) => {
272
+ const Component = asChild ? Slot.View : View;
273
+
274
+ return (
275
+ <Component ref={ref} role="presentation" aria-hidden={true} {...props} />
276
+ );
277
+ }
278
+ );
279
+
280
+ // --------------------------------------------------
281
+
282
+ /**
283
+ * @warning when using a custom `<PortalHost />`, you might have to adjust the Content's offset to account for nav elements like headers.
284
+ */
285
+ function Portal({ forceMount, hostName, children }: PortalProps) {
286
+ const value = useRootContext();
287
+
288
+ const isBottomSheet = value.presentation === 'bottom-sheet';
289
+ const isDialog = value.presentation === 'dialog';
290
+
291
+ // For popover presentation, triggerPosition is required
292
+ // For bottom-sheet and dialog, triggerPosition is not required
293
+ if (!value.triggerPosition && !isBottomSheet && !isDialog) {
294
+ return null;
295
+ }
296
+
297
+ if (!forceMount && !isBottomSheet) {
298
+ if (!value.isOpen) {
299
+ return null;
300
+ }
301
+ }
302
+
303
+ return (
304
+ <PrimitivePortal hostName={hostName} name={`${value.nativeID}_portal`}>
305
+ <RootContext.Provider value={value}>{children}</RootContext.Provider>
306
+ </PrimitivePortal>
307
+ );
308
+ }
309
+
310
+ // --------------------------------------------------
311
+
312
+ const Overlay = forwardRef<OverlayRef, OverlayProps>(
313
+ (
314
+ {
315
+ asChild,
316
+ forceMount,
317
+ onPress: OnPressProp,
318
+ closeOnPress = true,
319
+ ...props
320
+ },
321
+ ref
322
+ ) => {
323
+ const { isOpen, onOpenChange, setTriggerPosition, setContentLayout } =
324
+ useRootContext();
325
+
326
+ function onPress(ev: GestureResponderEvent) {
327
+ if (closeOnPress) {
328
+ setTriggerPosition(null);
329
+ setContentLayout(null);
330
+ onOpenChange(false);
331
+ }
332
+ OnPressProp?.(ev);
333
+ }
334
+
335
+ if (!forceMount) {
336
+ if (!isOpen) {
337
+ return null;
338
+ }
339
+ }
340
+
341
+ const Component = asChild ? Slot.Pressable : Pressable;
342
+ return <Component ref={ref} onPress={onPress} {...props} />;
343
+ }
344
+ );
345
+
346
+ // --------------------------------------------------
347
+
348
+ /**
349
+ * @info `position`, `top`, `left`, and `maxWidth` style properties are controlled internally. Opt out of this behavior by setting `disablePositioningStyle` to `true`.
350
+ */
351
+ const PopoverContent = forwardRef<ContentRef, PopoverContentProps>(
352
+ (
353
+ {
354
+ asChild = false,
355
+ forceMount,
356
+ align = 'start',
357
+ placement = 'bottom',
358
+ offset = 0,
359
+ alignOffset = 0,
360
+ avoidCollisions = true,
361
+ onLayout: onLayoutProp,
362
+ insets,
363
+ style,
364
+ disablePositioningStyle,
365
+ width = 'content-fit',
366
+ ...props
367
+ },
368
+ ref
369
+ ) => {
370
+ const {
371
+ isOpen,
372
+ onOpenChange,
373
+ contentLayout,
374
+ nativeID,
375
+ setContentLayout,
376
+ setTriggerPosition,
377
+ triggerPosition,
378
+ } = useRootContext();
379
+
380
+ useEffect(() => {
381
+ const backHandler = BackHandler.addEventListener(
382
+ 'hardwareBackPress',
383
+ () => {
384
+ onOpenChange(false);
385
+ setTriggerPosition(null);
386
+ setContentLayout(null);
387
+ return true;
388
+ }
389
+ );
390
+
391
+ return () => {
392
+ setContentLayout(null);
393
+ backHandler.remove();
394
+ };
395
+ // eslint-disable-next-line react-hooks/exhaustive-deps
396
+ }, []);
397
+
398
+ const positionStyle = useRelativePosition({
399
+ align,
400
+ avoidCollisions,
401
+ triggerPosition,
402
+ contentLayout,
403
+ alignOffset,
404
+ insets,
405
+ offset,
406
+ placement,
407
+ disablePositioningStyle,
408
+ });
409
+
410
+ // Calculate content width based on width prop
411
+ const widthStyle: { width?: number | `${number}%` } = {};
412
+ if (width === 'trigger' && triggerPosition) {
413
+ widthStyle.width = triggerPosition.width;
414
+ } else if (width === 'full') {
415
+ widthStyle.width = '100%';
416
+ } else if (typeof width === 'number') {
417
+ widthStyle.width = width;
418
+ }
419
+ // 'content-fit' is default - no explicit width set
420
+
421
+ const flatStyle = StyleSheet.flatten([positionStyle, widthStyle, style]);
422
+
423
+ function onLayout(event: LayoutChangeEvent) {
424
+ setContentLayout(event.nativeEvent.layout);
425
+ onLayoutProp?.(event);
426
+ }
427
+
428
+ if (!forceMount) {
429
+ if (!isOpen) {
430
+ return null;
431
+ }
432
+ }
433
+
434
+ const Component = asChild ? Slot.View : View;
435
+
436
+ return (
437
+ <Component
438
+ ref={ref}
439
+ role="dialog"
440
+ nativeID={nativeID}
441
+ aria-modal={true}
442
+ style={flatStyle}
443
+ onLayout={onLayout}
444
+ {...props}
445
+ />
446
+ );
447
+ }
448
+ );
449
+
450
+ // --------------------------------------------------
451
+
452
+ const DialogContent = forwardRef<ContentRef, DialogContentProps>(
453
+ ({ asChild, forceMount, ...props }, ref) => {
454
+ const { isOpen, nativeID, onOpenChange } = useRootContext();
455
+
456
+ useEffect(() => {
457
+ const backHandler = BackHandler.addEventListener(
458
+ 'hardwareBackPress',
459
+ () => {
460
+ onOpenChange(false);
461
+ return true;
462
+ }
463
+ );
464
+
465
+ return () => {
466
+ backHandler.remove();
467
+ };
468
+ // eslint-disable-next-line react-hooks/exhaustive-deps
469
+ }, []);
470
+
471
+ if (!forceMount) {
472
+ if (!isOpen) {
473
+ return null;
474
+ }
475
+ }
476
+
477
+ const Component = asChild ? Slot.View : View;
478
+
479
+ return (
480
+ <Component
481
+ ref={ref}
482
+ role="dialog"
483
+ nativeID={nativeID}
484
+ aria-labelledby={`${nativeID}_label`}
485
+ aria-describedby={`${nativeID}_desc`}
486
+ aria-modal={true}
487
+ {...props}
488
+ />
489
+ );
490
+ }
491
+ );
492
+
493
+ // --------------------------------------------------
494
+
495
+ const Close = forwardRef<CloseRef, CloseProps>(
496
+ ({ asChild, onPress: onPressProp, disabled = false, ...props }, ref) => {
497
+ const { onOpenChange, setContentLayout, setTriggerPosition } =
498
+ useRootContext();
499
+
500
+ function onPress(ev: GestureResponderEvent) {
501
+ if (disabled) return;
502
+ onOpenChange(false);
503
+ setTriggerPosition(null);
504
+ setContentLayout(null);
505
+ onPressProp?.(ev);
506
+ }
507
+
508
+ const Component = asChild ? Slot.Pressable : Pressable;
509
+
510
+ return (
511
+ <Component
512
+ ref={ref}
513
+ aria-disabled={disabled ?? undefined}
514
+ role="button"
515
+ onPress={onPress}
516
+ disabled={disabled ?? undefined}
517
+ {...props}
518
+ />
519
+ );
520
+ }
521
+ );
522
+
523
+ // --------------------------------------------------
524
+
525
+ const ItemContext = createContext<{
526
+ itemValue: string;
527
+ label: string;
528
+ } | null>(null);
529
+
530
+ function useItemContext() {
531
+ const context = useContext(ItemContext);
532
+ if (!context) {
533
+ throw new Error(
534
+ 'Item compound components cannot be rendered outside of an Item component'
535
+ );
536
+ }
537
+ return context;
538
+ }
539
+
540
+ // --------------------------------------------------
541
+
542
+ const Item = React.forwardRef<ItemRef, ItemProps>(
543
+ (
544
+ {
545
+ asChild,
546
+ value: itemValue,
547
+ label,
548
+ onPress: onPressProp,
549
+ disabled = false,
550
+ closeOnPress: closeOnPressProp,
551
+ ...props
552
+ },
553
+ ref
554
+ ) => {
555
+ const {
556
+ onOpenChange,
557
+ value,
558
+ onValueChange,
559
+ selectionMode,
560
+ setTriggerPosition,
561
+ setContentLayout,
562
+ } = useRootContext();
563
+
564
+ /** Default closeOnPress to `true` for single mode, `false` for multiple mode */
565
+ const closeOnPress = closeOnPressProp ?? selectionMode === 'single';
566
+ const checked = isItemSelected(value, itemValue);
567
+
568
+ function onPress(ev: GestureResponderEvent) {
569
+ if (selectionMode === 'multiple') {
570
+ // Toggle item in the selected values array
571
+ const currentValues = Array.isArray(value)
572
+ ? value
573
+ : value
574
+ ? [value]
575
+ : [];
576
+
577
+ const nextValues = checked
578
+ ? currentValues.filter((v) => v?.value !== itemValue)
579
+ : [...currentValues, { value: itemValue, label }];
580
+
581
+ onValueChange(nextValues);
582
+ } else {
583
+ onValueChange({ value: itemValue, label });
584
+ }
585
+
586
+ if (closeOnPress) {
587
+ onOpenChange(false);
588
+ setTriggerPosition(null);
589
+ setContentLayout(null);
590
+ }
591
+
592
+ onPressProp?.(ev);
593
+ }
594
+
595
+ const Component = asChild ? Slot.Pressable : Pressable;
596
+
597
+ return (
598
+ <ItemContext.Provider value={{ itemValue, label }}>
599
+ <Component
600
+ ref={ref}
601
+ role="option"
602
+ onPress={onPress}
603
+ disabled={disabled}
604
+ aria-checked={checked}
605
+ aria-valuetext={label}
606
+ aria-disabled={!!disabled}
607
+ accessibilityState={{
608
+ disabled: !!disabled,
609
+ checked,
610
+ }}
611
+ {...props}
612
+ />
613
+ </ItemContext.Provider>
614
+ );
615
+ }
616
+ );
617
+
618
+ // --------------------------------------------------
619
+
620
+ const ItemLabel = React.forwardRef<ItemLabelRef, ItemLabelProps>(
621
+ ({ asChild, ...props }, ref) => {
622
+ const { label } = useItemContext();
623
+
624
+ const Component = asChild ? Slot.Text : Text;
625
+
626
+ return (
627
+ <Component ref={ref} {...props}>
628
+ {label}
629
+ </Component>
630
+ );
631
+ }
632
+ );
633
+
634
+ // --------------------------------------------------
635
+
636
+ const ItemIndicator = React.forwardRef<ItemIndicatorRef, ItemIndicatorProps>(
637
+ ({ asChild, forceMount, ...props }, ref) => {
638
+ const { itemValue } = useItemContext();
639
+ const { value } = useRootContext();
640
+
641
+ if (!forceMount) {
642
+ if (!isItemSelected(value, itemValue)) {
643
+ return null;
644
+ }
645
+ }
646
+ const Component = asChild ? Slot.View : View;
647
+
648
+ return <Component ref={ref} role="presentation" {...props} />;
649
+ }
650
+ );
651
+
652
+ // --------------------------------------------------
653
+
654
+ const Group = React.forwardRef<GroupRef, GroupProps>(
655
+ ({ asChild, ...props }, ref) => {
656
+ const Component = asChild ? Slot.View : View;
657
+
658
+ return <Component ref={ref} role="group" {...props} />;
659
+ }
660
+ );
661
+
662
+ // --------------------------------------------------
663
+
664
+ const GroupLabel = React.forwardRef<GroupLabelRef, GroupLabelProps>(
665
+ ({ asChild, ...props }, ref) => {
666
+ const Component = asChild ? Slot.Text : Text;
667
+
668
+ return <Component ref={ref} {...props} />;
669
+ }
670
+ );
671
+
672
+ // --------------------------------------------------
673
+
674
+ Root.displayName = 'HeroUINative.Primitive.Select.Root';
675
+ Trigger.displayName = 'HeroUINative.Primitive.Select.Trigger';
676
+ TriggerIndicator.displayName = 'HeroUINative.Primitive.Select.TriggerIndicator';
677
+ Value.displayName = 'HeroUINative.Primitive.Select.Value';
678
+ Overlay.displayName = 'HeroUINative.Primitive.Select.Overlay';
679
+ PopoverContent.displayName = 'HeroUINative.Primitive.Select.PopoverContent';
680
+ DialogContent.displayName = 'HeroUINative.Primitive.Select.DialogContent';
681
+ Close.displayName = 'HeroUINative.Primitive.Select.Close';
682
+ Item.displayName = 'HeroUINative.Primitive.Select.Item';
683
+ ItemLabel.displayName = 'HeroUINative.Primitive.Select.ItemLabel';
684
+ ItemIndicator.displayName = 'HeroUINative.Primitive.Select.ItemIndicator';
685
+ Group.displayName = 'HeroUINative.Primitive.Select.Group';
686
+ GroupLabel.displayName = 'HeroUINative.Primitive.Select.GroupLabel';
687
+
688
+ export {
689
+ Close,
690
+ DialogContent,
691
+ Group,
692
+ GroupLabel,
693
+ Item,
694
+ ItemIndicator,
695
+ ItemLabel,
696
+ Overlay,
697
+ PopoverContent,
698
+ Portal,
699
+ Root,
700
+ Trigger,
701
+ TriggerIndicator,
702
+ useItemContext,
703
+ useRootContext,
704
+ Value,
705
+ };