@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,353 @@
1
+ import * as React from 'react';
2
+ import {
3
+ Dimensions,
4
+ type LayoutRectangle,
5
+ type ScaledSize,
6
+ } from 'react-native';
7
+ import type { Insets } from '../types';
8
+
9
+ type UseRelativePositionArgs = Omit<
10
+ GetContentStyleArgs,
11
+ 'triggerPosition' | 'contentLayout' | 'dimensions'
12
+ > & {
13
+ triggerPosition: LayoutPosition | null;
14
+ contentLayout: LayoutRectangle | null;
15
+ disablePositioningStyle?: boolean;
16
+ };
17
+
18
+ export function useRelativePosition({
19
+ align,
20
+ avoidCollisions,
21
+ triggerPosition,
22
+ contentLayout,
23
+ alignOffset,
24
+ insets,
25
+ offset,
26
+ placement,
27
+ disablePositioningStyle,
28
+ }: UseRelativePositionArgs) {
29
+ const dimensions = Dimensions.get('screen');
30
+
31
+ return React.useMemo(() => {
32
+ if (disablePositioningStyle) {
33
+ return {};
34
+ }
35
+ if (!triggerPosition || !contentLayout) {
36
+ return {
37
+ position: 'absolute',
38
+ opacity: 0,
39
+ top: dimensions.height,
40
+ } as const;
41
+ }
42
+ return getContentStyle({
43
+ align,
44
+ avoidCollisions,
45
+ contentLayout,
46
+ placement,
47
+ triggerPosition,
48
+ alignOffset,
49
+ insets,
50
+ offset,
51
+ dimensions,
52
+ });
53
+ }, [
54
+ align,
55
+ avoidCollisions,
56
+ placement,
57
+ alignOffset,
58
+ insets,
59
+ triggerPosition,
60
+ contentLayout,
61
+ dimensions,
62
+ disablePositioningStyle,
63
+ offset,
64
+ ]);
65
+ }
66
+
67
+ export interface LayoutPosition {
68
+ pageY: number;
69
+ pageX: number;
70
+ width: number;
71
+ height: number;
72
+ }
73
+
74
+ interface GetPositionArgs {
75
+ dimensions: ScaledSize;
76
+ avoidCollisions: boolean;
77
+ triggerPosition: LayoutPosition;
78
+ contentLayout: LayoutRectangle;
79
+ insets?: Insets;
80
+ }
81
+
82
+ interface GetSidePositionArgs extends GetPositionArgs {
83
+ placement: 'top' | 'bottom' | 'left' | 'right';
84
+ offset: number;
85
+ }
86
+
87
+ function getSidePosition({
88
+ placement,
89
+ triggerPosition,
90
+ contentLayout,
91
+ offset,
92
+ insets,
93
+ avoidCollisions,
94
+ dimensions,
95
+ }: GetSidePositionArgs) {
96
+ const insetTop = insets?.top ?? 0;
97
+ const insetBottom = insets?.bottom ?? 0;
98
+ const insetLeft = insets?.left ?? 0;
99
+ const insetRight = insets?.right ?? 0;
100
+
101
+ // Handle vertical sides (top/bottom)
102
+ if (placement === 'top' || placement === 'bottom') {
103
+ const positionTop = triggerPosition?.pageY - offset - contentLayout.height;
104
+ const positionBottom =
105
+ triggerPosition.pageY + triggerPosition.height + offset;
106
+
107
+ if (!avoidCollisions) {
108
+ return {
109
+ top: placement === 'top' ? positionTop : positionBottom,
110
+ };
111
+ }
112
+
113
+ if (placement === 'top') {
114
+ return {
115
+ top: Math.min(
116
+ Math.max(insetTop, positionTop),
117
+ dimensions.height - insetBottom - contentLayout.height
118
+ ),
119
+ };
120
+ }
121
+
122
+ return {
123
+ top: Math.min(
124
+ dimensions.height - insetBottom - contentLayout.height,
125
+ positionBottom
126
+ ),
127
+ };
128
+ }
129
+
130
+ // Handle horizontal sides (left/right)
131
+ const maxContentWidth = dimensions.width - insetLeft - insetRight;
132
+ const contentWidth = Math.min(contentLayout.width, maxContentWidth);
133
+
134
+ const positionLeft = triggerPosition.pageX - offset - contentWidth;
135
+ const positionRight = triggerPosition.pageX + triggerPosition.width + offset;
136
+
137
+ if (!avoidCollisions) {
138
+ return {
139
+ left: placement === 'left' ? positionLeft : positionRight,
140
+ };
141
+ }
142
+
143
+ if (placement === 'left') {
144
+ return {
145
+ left: Math.min(
146
+ Math.max(insetLeft, positionLeft),
147
+ dimensions.width - insetRight - contentWidth
148
+ ),
149
+ };
150
+ }
151
+
152
+ // For right placement, ensure content doesn't go beyond left inset
153
+ return {
154
+ left: Math.max(
155
+ insetLeft,
156
+ Math.min(dimensions.width - insetRight - contentWidth, positionRight)
157
+ ),
158
+ };
159
+ }
160
+
161
+ interface GetAlignPositionArgs extends GetPositionArgs {
162
+ align: 'start' | 'center' | 'end';
163
+ alignOffset: number;
164
+ placement: 'top' | 'bottom' | 'left' | 'right';
165
+ }
166
+
167
+ function getAlignPosition({
168
+ align,
169
+ avoidCollisions,
170
+ contentLayout,
171
+ triggerPosition,
172
+ alignOffset,
173
+ insets,
174
+ dimensions,
175
+ placement,
176
+ }: GetAlignPositionArgs) {
177
+ const insetLeft = insets?.left ?? 0;
178
+ const insetRight = insets?.right ?? 0;
179
+ const insetTop = insets?.top ?? 0;
180
+ const insetBottom = insets?.bottom ?? 0;
181
+
182
+ // For top/bottom sides, align horizontally
183
+ if (placement === 'top' || placement === 'bottom') {
184
+ const maxContentWidth = dimensions.width - insetLeft - insetRight;
185
+ const contentWidth = Math.min(contentLayout.width, maxContentWidth);
186
+
187
+ let left = getHorizontalAlignPosition(
188
+ align,
189
+ triggerPosition.pageX,
190
+ triggerPosition.width,
191
+ contentWidth,
192
+ alignOffset,
193
+ insetLeft,
194
+ insetRight,
195
+ dimensions
196
+ );
197
+
198
+ if (avoidCollisions) {
199
+ const doesCollide =
200
+ left < insetLeft || left + contentWidth > dimensions.width - insetRight;
201
+ if (doesCollide) {
202
+ const spaceLeft = left - insetLeft;
203
+ const spaceRight =
204
+ dimensions.width - insetRight - (left + contentWidth);
205
+
206
+ if (spaceLeft > spaceRight && spaceLeft >= contentWidth) {
207
+ left = insetLeft;
208
+ } else if (spaceRight >= contentWidth) {
209
+ left = dimensions.width - insetRight - contentWidth;
210
+ } else {
211
+ const centeredPosition = Math.max(
212
+ insetLeft,
213
+ (dimensions.width - contentWidth - insetRight) / 2
214
+ );
215
+ left = centeredPosition;
216
+ }
217
+ }
218
+ }
219
+
220
+ return { left, maxWidth: maxContentWidth };
221
+ }
222
+
223
+ // For left/right sides, align vertically and constrain width
224
+ const maxContentHeight = dimensions.height - insetTop - insetBottom;
225
+ const maxContentWidth = dimensions.width - insetLeft - insetRight;
226
+ const contentHeight = Math.min(contentLayout.height, maxContentHeight);
227
+
228
+ let top = getVerticalAlignPosition(
229
+ align,
230
+ triggerPosition.pageY,
231
+ triggerPosition.height,
232
+ contentHeight,
233
+ alignOffset,
234
+ insetTop,
235
+ insetBottom,
236
+ dimensions
237
+ );
238
+
239
+ if (avoidCollisions) {
240
+ const doesCollide =
241
+ top < insetTop || top + contentHeight > dimensions.height - insetBottom;
242
+ if (doesCollide) {
243
+ const spaceTop = top - insetTop;
244
+ const spaceBottom =
245
+ dimensions.height - insetBottom - (top + contentHeight);
246
+
247
+ if (spaceTop > spaceBottom && spaceTop >= contentHeight) {
248
+ top = insetTop;
249
+ } else if (spaceBottom >= contentHeight) {
250
+ top = dimensions.height - insetBottom - contentHeight;
251
+ } else {
252
+ const centeredPosition = Math.max(
253
+ insetTop,
254
+ (dimensions.height - contentHeight - insetBottom) / 2
255
+ );
256
+ top = centeredPosition;
257
+ }
258
+ }
259
+ }
260
+
261
+ return { top, maxHeight: maxContentHeight, maxWidth: maxContentWidth };
262
+ }
263
+
264
+ function getHorizontalAlignPosition(
265
+ align: 'start' | 'center' | 'end',
266
+ triggerPageX: number,
267
+ triggerWidth: number,
268
+ contentWidth: number,
269
+ alignOffset: number,
270
+ insetLeft: number,
271
+ insetRight: number,
272
+ dimensions: ScaledSize
273
+ ) {
274
+ let left = 0;
275
+ if (align === 'start') {
276
+ left = triggerPageX;
277
+ }
278
+ if (align === 'center') {
279
+ left = triggerPageX + triggerWidth / 2 - contentWidth / 2;
280
+ }
281
+ if (align === 'end') {
282
+ left = triggerPageX + triggerWidth - contentWidth;
283
+ }
284
+ return Math.max(
285
+ insetLeft,
286
+ Math.min(left + alignOffset, dimensions.width - contentWidth - insetRight)
287
+ );
288
+ }
289
+
290
+ function getVerticalAlignPosition(
291
+ align: 'start' | 'center' | 'end',
292
+ triggerPageY: number,
293
+ triggerHeight: number,
294
+ contentHeight: number,
295
+ alignOffset: number,
296
+ insetTop: number,
297
+ insetBottom: number,
298
+ dimensions: ScaledSize
299
+ ) {
300
+ let top = 0;
301
+ if (align === 'start') {
302
+ top = triggerPageY;
303
+ }
304
+ if (align === 'center') {
305
+ top = triggerPageY + triggerHeight / 2 - contentHeight / 2;
306
+ }
307
+ if (align === 'end') {
308
+ top = triggerPageY + triggerHeight - contentHeight;
309
+ }
310
+ return Math.max(
311
+ insetTop,
312
+ Math.min(top + alignOffset, dimensions.height - contentHeight - insetBottom)
313
+ );
314
+ }
315
+
316
+ type GetContentStyleArgs = GetPositionArgs &
317
+ GetSidePositionArgs &
318
+ GetAlignPositionArgs;
319
+
320
+ function getContentStyle({
321
+ align,
322
+ avoidCollisions,
323
+ contentLayout,
324
+ placement,
325
+ triggerPosition,
326
+ alignOffset,
327
+ insets,
328
+ offset,
329
+ dimensions,
330
+ }: GetContentStyleArgs) {
331
+ return Object.assign(
332
+ { position: 'absolute' } as const,
333
+ getSidePosition({
334
+ placement,
335
+ triggerPosition,
336
+ contentLayout,
337
+ offset,
338
+ insets,
339
+ avoidCollisions,
340
+ dimensions,
341
+ }),
342
+ getAlignPosition({
343
+ align,
344
+ avoidCollisions,
345
+ triggerPosition,
346
+ contentLayout,
347
+ alignOffset,
348
+ insets,
349
+ dimensions,
350
+ placement,
351
+ })
352
+ );
353
+ }
@@ -0,0 +1,118 @@
1
+ import { useMemo } from 'react';
2
+ import type { ImageStyle, StyleProp, TextStyle, ViewStyle } from 'react-native';
3
+ import { StyleSheet } from 'react-native';
4
+ import { useResolveClassNames } from 'uniwind';
5
+
6
+ /**
7
+ * Combined style type from React Native
8
+ */
9
+ type Style = ViewStyle | TextStyle | ImageStyle;
10
+
11
+ /**
12
+ * Parameters for single property resolution
13
+ */
14
+ interface UseResolvedStylePropertyParamsSingle<K extends keyof Style> {
15
+ /** The className string to resolve styles from */
16
+ className?: string;
17
+ /** The style prop (can be object, array, or null) */
18
+ style?: StyleProp<ViewStyle> | StyleProp<TextStyle> | StyleProp<ImageStyle>;
19
+ /** The name of the style property to resolve */
20
+ propertyName: K;
21
+ }
22
+
23
+ /**
24
+ * Parameters for multiple properties resolution
25
+ */
26
+ interface UseResolvedStylePropertyParamsMultiple<K extends keyof Style> {
27
+ /** The className string to resolve styles from */
28
+ className?: string;
29
+ /** The style prop (can be object, array, or null) */
30
+ style?: StyleProp<ViewStyle> | StyleProp<TextStyle> | StyleProp<ImageStyle>;
31
+ /** Array of style property names to resolve */
32
+ propertyNames: readonly K[];
33
+ }
34
+
35
+ /**
36
+ * A hook that resolves specific style properties from both className and style props.
37
+ * The style prop takes precedence over className.
38
+ *
39
+ * This is useful when you need to extract specific style values (like width, height)
40
+ * that might come from either Tailwind classes or inline styles.
41
+ *
42
+ * @param params - Configuration object with className, style, and propertyName(s)
43
+ * @returns The resolved style property value(s) or undefined if not found
44
+ *
45
+ * @example Single property
46
+ * ```tsx
47
+ * const width = useResolvedStyleProperty({
48
+ * className: 'w-10 h-8',
49
+ * style: { width: 50 },
50
+ * propertyName: 'width',
51
+ * });
52
+ * // Returns: 50 (from style, takes precedence)
53
+ * ```
54
+ *
55
+ * @example Multiple properties
56
+ * ```tsx
57
+ * const [width, left] = useResolvedStyleProperty({
58
+ * className: 'w-10 left-2',
59
+ * propertyNames: ['width', 'left'],
60
+ * });
61
+ * // Returns: [40, 8] (from className)
62
+ * ```
63
+ */
64
+ function useResolvedStyleProperty<K extends keyof Style>(
65
+ params: UseResolvedStylePropertyParamsSingle<K>
66
+ ): Style[K] | undefined;
67
+ function useResolvedStyleProperty<K extends keyof Style>(
68
+ params: UseResolvedStylePropertyParamsMultiple<K>
69
+ ): (Style[K] | undefined)[];
70
+ function useResolvedStyleProperty<K extends keyof Style>(
71
+ params:
72
+ | UseResolvedStylePropertyParamsSingle<K>
73
+ | UseResolvedStylePropertyParamsMultiple<K>
74
+ ): Style[K] | undefined | (Style[K] | undefined)[] {
75
+ const { className, style } = params;
76
+
77
+ const resolvedClassName = useResolveClassNames(className ?? '');
78
+ const resolvedStyle = useMemo(
79
+ () => (style ? StyleSheet.flatten(style) : undefined),
80
+ [style]
81
+ );
82
+
83
+ return useMemo(() => {
84
+ // Check if we're resolving multiple properties
85
+ if ('propertyNames' in params) {
86
+ return params.propertyNames.map((propertyName) => {
87
+ // Style prop takes precedence over className
88
+ if (resolvedStyle && propertyName in resolvedStyle) {
89
+ return resolvedStyle[propertyName];
90
+ }
91
+
92
+ // Fall back to className-resolved styles
93
+ if (resolvedClassName && propertyName in resolvedClassName) {
94
+ return resolvedClassName[propertyName];
95
+ }
96
+
97
+ return undefined;
98
+ });
99
+ }
100
+
101
+ // Single property resolution
102
+ const propertyName = params.propertyName;
103
+
104
+ // Style prop takes precedence over className
105
+ if (resolvedStyle && propertyName in resolvedStyle) {
106
+ return resolvedStyle[propertyName];
107
+ }
108
+
109
+ // Fall back to className-resolved styles
110
+ if (resolvedClassName && propertyName in resolvedClassName) {
111
+ return resolvedClassName[propertyName];
112
+ }
113
+
114
+ return undefined;
115
+ }, [resolvedStyle, resolvedClassName, params]);
116
+ }
117
+
118
+ export { useResolvedStyleProperty };
@@ -0,0 +1,131 @@
1
+ import type {
2
+ BaseAnimationBuilder,
3
+ EntryOrExitLayoutType,
4
+ LayoutAnimationFunction,
5
+ WithSpringConfig,
6
+ WithTimingConfig,
7
+ } from 'react-native-reanimated';
8
+
9
+ /**
10
+ * Universal animation prop type
11
+ * - `true` or `undefined`: Use default animations
12
+ * - `false` or `"disabled"`: Disable all animations
13
+ * - `object`: Custom animation configuration
14
+ * - Can include `state?: 'disabled' | boolean | undefined` to disable animations while customizing properties
15
+ */
16
+ export type Animation<
17
+ TConfig extends Record<string, any> = Record<string, any>,
18
+ > = boolean | 'disabled' | (TConfig & { state?: 'disabled' | boolean });
19
+
20
+ export type AnimationDisabled = 'disabled' | false;
21
+
22
+ /**
23
+ * Root-level animation prop type with cascading control
24
+ * - `true` or `undefined`: Use default animations
25
+ * - `false` or `"disabled"`: Disable only root animations (children can still animate)
26
+ * - `"disable-all"`: Disable all animations including children (cascades down)
27
+ * - `object`: Custom animation configuration
28
+ * - Can include `state?: 'disabled' | 'disable-all' | boolean` to disable animations while customizing properties
29
+ */
30
+ export type AnimationRoot<
31
+ TConfig extends Record<string, any> = Record<string, any>,
32
+ > =
33
+ | boolean
34
+ | 'disabled'
35
+ | 'disable-all'
36
+ | (TConfig & { state?: 'disabled' | 'disable-all' | boolean });
37
+
38
+ export type AnimationRootDisableAll = Extract<AnimationRoot, 'disable-all'>;
39
+
40
+ /**
41
+ * Animation value that can be a custom config
42
+ * Used for granular animation control within a component
43
+ */
44
+ export type AnimationValue<
45
+ TConfig extends Record<string, any> = Record<string, any>,
46
+ > = TConfig;
47
+
48
+ export type LayoutTransition =
49
+ | BaseAnimationBuilder
50
+ | LayoutAnimationFunction
51
+ | typeof BaseAnimationBuilder
52
+ | undefined;
53
+
54
+ /**
55
+ * Spring animation configuration
56
+ */
57
+ export interface SpringAnimationConfig {
58
+ type: 'spring';
59
+ config?: WithSpringConfig;
60
+ }
61
+
62
+ /**
63
+ * Timing animation configuration
64
+ */
65
+ export interface TimingAnimationConfig {
66
+ type: 'timing';
67
+ config?: WithTimingConfig;
68
+ }
69
+
70
+ /**
71
+ * Animation configuration for popup overlay components (Dialog, Select, BottomSheet, Popover, etc.)
72
+ * Supports both progress-based opacity animation and entering/exiting animations
73
+ */
74
+ export type PopupOverlayAnimation = Animation<{
75
+ /**
76
+ * Opacity animation configuration (progress-based)
77
+ * Takes effect for bottom-sheet/dialog presentation
78
+ * @default [0, 1, 0] - opacity values for [idle, open, close] states
79
+ */
80
+ opacity?: AnimationValue<{
81
+ /**
82
+ * Opacity values [idle, open, close]
83
+ * @default [0, 1, 0]
84
+ */
85
+ value?: [number, number, number];
86
+ }>;
87
+ /**
88
+ * Takes effect for popover presentation
89
+ * @default FadeIn with duration 200ms
90
+ */
91
+ entering?: EntryOrExitLayoutType;
92
+ /**
93
+ * Takes effect for popover presentation
94
+ * @default FadeOut with duration 150ms
95
+ */
96
+ exiting?: EntryOrExitLayoutType;
97
+ }>;
98
+
99
+ /**
100
+ * Animation configuration for popup dialog content components (Dialog, Select dialog presentation)
101
+ * Supports opacity and scale animations
102
+ */
103
+ export type PopupDialogContentAnimation = Animation<{
104
+ /**
105
+ * Custom Keyframe animation for entering transition
106
+ * @default Keyframe with scale, and opacity (200ms)
107
+ */
108
+ entering?: EntryOrExitLayoutType;
109
+ /**
110
+ * Custom Keyframe animation for exiting transition
111
+ * @default Keyframe mirroring entering animation (150ms)
112
+ */
113
+ exiting?: EntryOrExitLayoutType;
114
+ }>;
115
+
116
+ /**
117
+ * Animation configuration for popup popover content components (Popover, Select popover presentation)
118
+ * Supports custom Keyframe animations for entering and exiting transitions
119
+ */
120
+ export type PopupPopoverContentAnimation = Animation<{
121
+ /**
122
+ * Custom Keyframe animation for entering transition
123
+ * @default Keyframe with translateY/translateX, scale, and opacity (200ms)
124
+ */
125
+ entering?: EntryOrExitLayoutType;
126
+ /**
127
+ * Custom Keyframe animation for exiting transition
128
+ * @default Keyframe mirroring entering animation (150ms)
129
+ */
130
+ exiting?: EntryOrExitLayoutType;
131
+ }>;
@@ -0,0 +1,99 @@
1
+ import type { BottomSheetViewProps } from '@gorhom/bottom-sheet/lib/typescript/components/bottomSheetView/types';
2
+ import type { ReactNode } from 'react';
3
+ import type { SharedValue } from 'react-native-reanimated';
4
+ import type { AnimationDisabled } from './animation';
5
+
6
+ /**
7
+ * State type for bottom sheet content container animation coordination
8
+ */
9
+ export type BottomSheetContentContainerState = 'idle' | 'open' | 'close';
10
+
11
+ /**
12
+ * Props for the reusable BottomSheetContentContainer component
13
+ */
14
+ export interface BottomSheetContentContainerProps {
15
+ /**
16
+ * The content to be rendered inside the container
17
+ */
18
+ children?: ReactNode;
19
+ /**
20
+ * Additional CSS class for the content container
21
+ */
22
+ contentContainerClassName?: string;
23
+ /**
24
+ * Props for the content container
25
+ */
26
+ contentContainerProps?: Omit<BottomSheetViewProps, 'children'>;
27
+ /**
28
+ * Whether the bottom sheet is open
29
+ */
30
+ isOpen: boolean;
31
+ /**
32
+ * Animation progress shared value (0=idle, 1=open, 2=close)
33
+ */
34
+ progress: SharedValue<number>;
35
+ /**
36
+ * Whether the bottom sheet is dragging
37
+ */
38
+ isDragging: SharedValue<boolean>;
39
+ /**
40
+ * Whether the bottom sheet is pan activated
41
+ */
42
+ isPanActivated: SharedValue<boolean>;
43
+ /**
44
+ * Whether the bottom sheet is closing on swipe
45
+ */
46
+ isClosingOnSwipe: SharedValue<boolean>;
47
+ /**
48
+ * Initial index of the bottom sheet
49
+ */
50
+ initialIndex: number;
51
+ /**
52
+ * Callback when the bottom sheet is opened
53
+ */
54
+ onOpenChange: (open: boolean) => void;
55
+ }
56
+
57
+ /**
58
+ * Base props shared across BottomSheet Content components
59
+ * Used by BottomSheet, Popover, and Select components when using bottom-sheet presentation
60
+ */
61
+ export interface BaseBottomSheetContentProps {
62
+ /**
63
+ * The bottom sheet content
64
+ */
65
+ children?: ReactNode;
66
+ /**
67
+ * Additional CSS class for the bottom sheet
68
+ */
69
+ className?: string;
70
+ /**
71
+ * Additional CSS class for the container
72
+ */
73
+ containerClassName?: string;
74
+ /**
75
+ * Additional CSS class for the content container
76
+ */
77
+ contentContainerClassName?: string;
78
+ /**
79
+ * Additional CSS class for the background
80
+ */
81
+ backgroundClassName?: string;
82
+ /**
83
+ * Additional CSS class for the handle
84
+ */
85
+ handleClassName?: string;
86
+ /**
87
+ * Additional CSS class for the handle indicator
88
+ */
89
+ handleIndicatorClassName?: string;
90
+ /**
91
+ * Props for the content container
92
+ */
93
+ contentContainerProps?: Omit<BottomSheetViewProps, 'children'>;
94
+ /**
95
+ * Animation configuration for bottom sheet content
96
+ * - `false` or `"disabled"`: Disable all animations
97
+ */
98
+ animation?: AnimationDisabled;
99
+ }
@@ -0,0 +1,5 @@
1
+ export * from './animation';
2
+ export * from './bottom-sheet';
3
+ export * from './misc';
4
+ export * from './primitives';
5
+ export * from './theme';