@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,243 @@
1
+ import type { ViewStyle } from 'react-native';
2
+ import {
3
+ useAnimatedStyle,
4
+ useSharedValue,
5
+ withSpring,
6
+ withTiming,
7
+ } from 'react-native-reanimated';
8
+ import { useThemeColor } from '../../helpers/external/hooks';
9
+ import { useAnimationSettings } from '../../helpers/internal/contexts';
10
+ import {
11
+ useCombinedAnimationDisabledState,
12
+ useResolvedStyleProperty,
13
+ } from '../../helpers/internal/hooks';
14
+ import {
15
+ createContext,
16
+ getAnimationState,
17
+ getAnimationValueMergedConfig,
18
+ getAnimationValueProperty,
19
+ getIsAnimationDisabledValue,
20
+ getRootAnimationState,
21
+ } from '../../helpers/internal/utils';
22
+ import { useControlField } from '../control-field/control-field.context';
23
+ import {
24
+ DEFAULT_SPRING_CONFIG,
25
+ DEFAULT_THUMB_LEFT,
26
+ DEFAULT_THUMB_WIDTH,
27
+ DEFAULT_TIMING_CONFIG,
28
+ } from './switch.constants';
29
+ import type {
30
+ SwitchAnimationContextValue,
31
+ SwitchRootAnimation,
32
+ SwitchThumbAnimation,
33
+ } from './switch.types';
34
+
35
+ const [SwitchAnimationProvider, useSwitchAnimation] =
36
+ createContext<SwitchAnimationContextValue>({
37
+ name: 'SwitchAnimationContext',
38
+ });
39
+
40
+ export { SwitchAnimationProvider, useSwitchAnimation };
41
+
42
+ // --------------------------------------------------
43
+
44
+ /**
45
+ * Animation hook for Switch root component
46
+ * Handles scale and background color animations and provides context for child components
47
+ */
48
+ export function useSwitchRootAnimation(options: {
49
+ animation: SwitchRootAnimation | undefined;
50
+ isSelected: boolean | undefined;
51
+ }) {
52
+ const { animation, isSelected } = options;
53
+
54
+ const [themeColorAccent, themeColorDefault] = useThemeColor([
55
+ 'accent',
56
+ 'default',
57
+ ]);
58
+
59
+ const controlFieldContext = useControlField();
60
+
61
+ const isSwitchPressed = useSharedValue(false);
62
+ const contentContainerWidth = useSharedValue(0);
63
+
64
+ const { animationConfig, isAnimationDisabled } =
65
+ getRootAnimationState(animation);
66
+
67
+ const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
68
+
69
+ const isAnimationDisabledValue = getIsAnimationDisabledValue({
70
+ isAnimationDisabled,
71
+ isAllAnimationsDisabled,
72
+ });
73
+
74
+ // Scale animation
75
+ const scaleValue = getAnimationValueProperty({
76
+ animationValue: animationConfig?.scale,
77
+ property: 'value',
78
+ defaultValue: [1, 0.96] as [number, number],
79
+ });
80
+
81
+ const scaleTimingConfig = getAnimationValueMergedConfig({
82
+ animationValue: animationConfig?.scale,
83
+ property: 'timingConfig',
84
+ defaultValue: { duration: 150 },
85
+ });
86
+
87
+ // Background color animation
88
+ const backgroundColorValue = getAnimationValueProperty({
89
+ animationValue: animationConfig?.backgroundColor,
90
+ property: 'value',
91
+ defaultValue: [themeColorDefault, themeColorAccent] as [string, string],
92
+ });
93
+
94
+ const backgroundColorTimingConfig = getAnimationValueMergedConfig({
95
+ animationValue: animationConfig?.backgroundColor,
96
+ property: 'timingConfig',
97
+ defaultValue: DEFAULT_TIMING_CONFIG,
98
+ });
99
+
100
+ const rContainerStyle = useAnimatedStyle(() => {
101
+ if (isAnimationDisabledValue) {
102
+ return {
103
+ backgroundColor: isSelected
104
+ ? backgroundColorValue[1]
105
+ : backgroundColorValue[0],
106
+ };
107
+ }
108
+
109
+ const pressed =
110
+ isSwitchPressed.get() || (controlFieldContext?.isPressed.get() ?? false);
111
+
112
+ return {
113
+ backgroundColor: withTiming(
114
+ isSelected ? backgroundColorValue[1] : backgroundColorValue[0],
115
+ backgroundColorTimingConfig
116
+ ),
117
+ transform: [
118
+ {
119
+ scale: withTiming(
120
+ pressed ? scaleValue[1] : scaleValue[0],
121
+ scaleTimingConfig
122
+ ),
123
+ },
124
+ ],
125
+ };
126
+ });
127
+
128
+ return {
129
+ rContainerStyle,
130
+ isSwitchPressed,
131
+ contentContainerWidth,
132
+ isAllAnimationsDisabled,
133
+ };
134
+ }
135
+
136
+ // --------------------------------------------------
137
+
138
+ /**
139
+ * Animation hook for Switch thumb component
140
+ * Handles thumb position (left) and background color animations
141
+ */
142
+ export function useSwitchThumbAnimation(options: {
143
+ animation: SwitchThumbAnimation | undefined;
144
+ style: ViewStyle | undefined;
145
+ className: string;
146
+ isSelected: boolean | undefined;
147
+ }) {
148
+ const { animation, style, className, isSelected } = options;
149
+
150
+ const themeColorAccentForeground = useThemeColor('accent-foreground');
151
+
152
+ const [width, left] = useResolvedStyleProperty({
153
+ className,
154
+ style,
155
+ propertyNames: ['width', 'left'] as const,
156
+ });
157
+
158
+ const computedWidth = typeof width === 'number' ? width : DEFAULT_THUMB_WIDTH;
159
+ const computedLeft = typeof left === 'number' ? left : DEFAULT_THUMB_LEFT;
160
+
161
+ // Read from global animation context (always available in compound parts)
162
+ const { isAllAnimationsDisabled } = useAnimationSettings();
163
+
164
+ const { contentContainerWidth } = useSwitchAnimation();
165
+
166
+ const { animationConfig, isAnimationDisabled } = getAnimationState(animation);
167
+
168
+ const isAnimationDisabledValue = getIsAnimationDisabledValue({
169
+ isAnimationDisabled,
170
+ isAllAnimationsDisabled,
171
+ });
172
+
173
+ // Left position animation
174
+ const leftValue = getAnimationValueProperty({
175
+ animationValue: animationConfig?.left,
176
+ property: 'value',
177
+ defaultValue: computedLeft,
178
+ });
179
+
180
+ const leftSpringConfig = getAnimationValueMergedConfig({
181
+ animationValue: animationConfig?.left,
182
+ property: 'springConfig',
183
+ defaultValue: DEFAULT_SPRING_CONFIG,
184
+ });
185
+
186
+ // Background color animation
187
+ const backgroundColorValue = getAnimationValueProperty({
188
+ animationValue: animationConfig?.backgroundColor,
189
+ property: 'value',
190
+ defaultValue: ['white', themeColorAccentForeground] as [string, string],
191
+ });
192
+
193
+ const backgroundColorTimingConfig = getAnimationValueMergedConfig({
194
+ animationValue: animationConfig?.backgroundColor,
195
+ property: 'timingConfig',
196
+ defaultValue: DEFAULT_TIMING_CONFIG,
197
+ });
198
+
199
+ const rContainerStyle = useAnimatedStyle(() => {
200
+ const isMounted = contentContainerWidth.get() > 0;
201
+
202
+ // This is done to prevent the thumb from moving from the default position to the right
203
+ // when the component is mounted with `isSelected` set to `true`,
204
+ // and the user hasn't touched the switch yet.
205
+ if (!isMounted) {
206
+ if (isSelected) {
207
+ return {
208
+ right: leftValue,
209
+ backgroundColor: backgroundColorValue[1],
210
+ };
211
+ }
212
+ return {
213
+ left: leftValue,
214
+ backgroundColor: backgroundColorValue[0],
215
+ };
216
+ }
217
+
218
+ const targetLeft = isSelected
219
+ ? contentContainerWidth.get() - computedWidth - leftValue
220
+ : leftValue;
221
+
222
+ if (isAnimationDisabledValue) {
223
+ return {
224
+ left: targetLeft,
225
+ backgroundColor: isSelected
226
+ ? backgroundColorValue[1]
227
+ : backgroundColorValue[0],
228
+ };
229
+ }
230
+
231
+ return {
232
+ left: withSpring(targetLeft, leftSpringConfig),
233
+ backgroundColor: withTiming(
234
+ isSelected ? backgroundColorValue[1] : backgroundColorValue[0],
235
+ backgroundColorTimingConfig
236
+ ),
237
+ };
238
+ });
239
+
240
+ return {
241
+ rContainerStyle,
242
+ };
243
+ }
@@ -0,0 +1,26 @@
1
+ import { Easing } from 'react-native-reanimated';
2
+
3
+ export const DISPLAY_NAME = {
4
+ SWITCH_ROOT: 'HeroUINative.Switch.Root',
5
+ SWITCH_THUMB: 'HeroUINative.Switch.Thumb',
6
+ SWITCH_START_CONTENT: 'HeroUINative.Switch.StartContent',
7
+ SWITCH_END_CONTENT: 'HeroUINative.Switch.EndContent',
8
+ } as const;
9
+
10
+ export const ANIMATION_DURATION = 175;
11
+ export const ANIMATION_EASING = Easing.bezier(0.25, 0.1, 0.25, 1);
12
+
13
+ export const DEFAULT_TIMING_CONFIG = {
14
+ duration: ANIMATION_DURATION,
15
+ easing: ANIMATION_EASING,
16
+ };
17
+
18
+ export const DEFAULT_SPRING_CONFIG = {
19
+ damping: 120,
20
+ stiffness: 1600,
21
+ mass: 2,
22
+ };
23
+
24
+ export const DEFAULT_THUMB_WIDTH = 28;
25
+
26
+ export const DEFAULT_THUMB_LEFT = 2;
@@ -0,0 +1,334 @@
1
+ # Switch
2
+
3
+ A toggle control that allows users to switch between on and off states.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Switch } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <Switch>
15
+ <Switch.Thumb>...</Switch.Thumb>
16
+ <Switch.StartContent>...</Switch.StartContent>
17
+ <Switch.EndContent>...</Switch.EndContent>
18
+ </Switch>
19
+ ```
20
+
21
+ - **Switch**: Main container that handles toggle state and user interaction. Renders default thumb if no children provided. Animates scale (on press) and background color based on selection state. Acts as a pressable area for toggling.
22
+ - **Switch.Thumb**: Optional sliding thumb element that moves between positions. Uses spring animation for smooth transitions. Can contain custom content like icons or be customized with different styles and animations.
23
+ - **Switch.StartContent**: Optional content displayed on the left side of the switch. Typically used for icons or text that appear when switch is off. Positioned absolutely within the switch container.
24
+ - **Switch.EndContent**: Optional content displayed on the right side of the switch. Typically used for icons or text that appear when switch is on. Positioned absolutely within the switch container.
25
+
26
+ ## Usage
27
+
28
+ ### Basic Usage
29
+
30
+ The Switch component renders with default thumb if no children provided.
31
+
32
+ ```tsx
33
+ <Switch isSelected={isSelected} onSelectedChange={setIsSelected} />
34
+ ```
35
+
36
+ ### With Custom Thumb
37
+
38
+ Replace the default thumb with custom content using the Thumb component.
39
+
40
+ ```tsx
41
+ <Switch isSelected={isSelected} onSelectedChange={setIsSelected}>
42
+ <Switch.Thumb>...</Switch.Thumb>
43
+ </Switch>
44
+ ```
45
+
46
+ ### With Start and End Content
47
+
48
+ Add icons or text that appear on each side of the switch.
49
+
50
+ ```tsx
51
+ <Switch isSelected={isSelected} onSelectedChange={setIsSelected}>
52
+ <Switch.Thumb />
53
+ <Switch.StartContent>...</Switch.StartContent>
54
+ <Switch.EndContent>...</Switch.EndContent>
55
+ </Switch>
56
+ ```
57
+
58
+ ### With Render Function
59
+
60
+ Use render functions for dynamic content based on switch state.
61
+
62
+ ```tsx
63
+ <Switch isSelected={isSelected} onSelectedChange={setIsSelected}>
64
+ {({ isSelected, isDisabled }) => (
65
+ <>
66
+ <Switch.Thumb>
67
+ {({ isSelected }) => (isSelected ? <CheckIcon /> : <XIcon />)}
68
+ </Switch.Thumb>
69
+ </>
70
+ )}
71
+ </Switch>
72
+ ```
73
+
74
+ ### With Custom Animations
75
+
76
+ Customize animations for the switch root and thumb components.
77
+
78
+ ```tsx
79
+ <Switch
80
+ animation={{
81
+ scale: {
82
+ value: [1, 0.9],
83
+ timingConfig: { duration: 200 },
84
+ },
85
+ backgroundColor: {
86
+ value: ['#172554', '#eab308'],
87
+ },
88
+ }}
89
+ >
90
+ <Switch.Thumb
91
+ animation={{
92
+ left: {
93
+ value: 4,
94
+ springConfig: {
95
+ damping: 30,
96
+ stiffness: 300,
97
+ mass: 1,
98
+ },
99
+ },
100
+ backgroundColor: {
101
+ value: ['#dbeafe', '#854d0e'],
102
+ },
103
+ }}
104
+ />
105
+ </Switch>
106
+ ```
107
+
108
+ ### Disable Animations
109
+
110
+ Disable animations entirely or only for specific components.
111
+
112
+ ```tsx
113
+ {
114
+ /* Disable all animations including children */
115
+ }
116
+ <Switch animation="disable-all">
117
+ <Switch.Thumb />
118
+ </Switch>;
119
+
120
+ {
121
+ /* Disable only root animations, thumb can still animate */
122
+ }
123
+ <Switch>
124
+ <Switch.Thumb animation={false} />
125
+ </Switch>;
126
+ ```
127
+
128
+ ## Example
129
+
130
+ ```tsx
131
+ import { Switch } from '@/heroui';
132
+ import { Ionicons } from '@expo/vector-icons';
133
+ import React from 'react';
134
+ import { View } from 'react-native';
135
+ import Animated, { ZoomIn } from 'react-native-reanimated';
136
+
137
+ export default function SwitchExample() {
138
+ const [darkMode, setDarkMode] = React.useState(false);
139
+
140
+ return (
141
+ <View className="flex-row gap-4">
142
+ <Switch
143
+ isSelected={darkMode}
144
+ onSelectedChange={setDarkMode}
145
+ className="w-[56px] h-[32px]"
146
+ animation={{
147
+ backgroundColor: {
148
+ value: ['#172554', '#eab308'],
149
+ },
150
+ }}
151
+ >
152
+ <Switch.Thumb
153
+ className="size-[22px]"
154
+ animation={{
155
+ left: {
156
+ value: 4,
157
+ springConfig: {
158
+ damping: 30,
159
+ stiffness: 300,
160
+ mass: 1,
161
+ },
162
+ },
163
+ }}
164
+ />
165
+ <Switch.StartContent className="left-2">
166
+ {darkMode && (
167
+ <Animated.View key="sun" entering={ZoomIn.springify()}>
168
+ <Ionicons name="sunny" size={16} color="#854d0e" />
169
+ </Animated.View>
170
+ )}
171
+ </Switch.StartContent>
172
+ <Switch.EndContent className="right-2">
173
+ {!darkMode && (
174
+ <Animated.View key="moon" entering={ZoomIn.springify()}>
175
+ <Ionicons name="moon" size={16} color="#dbeafe" />
176
+ </Animated.View>
177
+ )}
178
+ </Switch.EndContent>
179
+ </Switch>
180
+ </View>
181
+ );
182
+ }
183
+ ```
184
+
185
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/switch.tsx>).
186
+
187
+ ## API Reference
188
+
189
+ ### Switch
190
+
191
+ | prop | type | default | description |
192
+ | --------------------------- | -------------------------------------------------------------------- | ----------- | ------------------------------------------------------------ |
193
+ | `children` | `React.ReactNode \| ((props: SwitchRenderProps) => React.ReactNode)` | `undefined` | Content to render inside the switch, or a render function |
194
+ | `isSelected` | `boolean` | `undefined` | Whether the switch is currently selected |
195
+ | `isDisabled` | `boolean` | `false` | Whether the switch is disabled and cannot be interacted with |
196
+ | `className` | `string` | `undefined` | Custom class name for the switch |
197
+ | `animation` | `SwitchRootAnimation` | - | Animation configuration |
198
+ | `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
199
+ | `onSelectedChange` | `(isSelected: boolean) => void` | - | Callback fired when the switch selection state changes |
200
+ | `...AnimatedPressableProps` | `AnimatedProps<PressableProps>` | - | All React Native Reanimated Pressable props are supported |
201
+
202
+ #### SwitchRenderProps
203
+
204
+ | prop | type | description |
205
+ | ------------ | --------- | ------------------------------ |
206
+ | `isSelected` | `boolean` | Whether the switch is selected |
207
+ | `isDisabled` | `boolean` | Whether the switch is disabled |
208
+
209
+ #### SwitchRootAnimation
210
+
211
+ Animation configuration for Switch component. Can be:
212
+
213
+ - `false` or `"disabled"`: Disable only root animations
214
+ - `"disable-all"`: Disable all animations including children
215
+ - `true` or `undefined`: Use default animations
216
+ - `object`: Custom animation configuration
217
+
218
+ | prop | type | default | description |
219
+ | ------------------------------ | ---------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------- |
220
+ | `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
221
+ | `scale.value` | `[number, number]` | `[1, 0.96]` | Scale values [unpressed, pressed] |
222
+ | `scale.timingConfig` | `WithTimingConfig` | `{ duration: 150 }` | Animation timing configuration |
223
+ | `backgroundColor.value` | `[string, string]` | Uses theme colors | Background color values [unselected, selected] |
224
+ | `backgroundColor.timingConfig` | `WithTimingConfig` | `{ duration: 175, easing: Easing.bezier(0.25, 0.1, 0.25, 1) }` | Animation timing configuration |
225
+
226
+ ### Switch.Thumb
227
+
228
+ | prop | type | default | description |
229
+ | ----------------------- | -------------------------------------------------------------------- | ----------- | ------------------------------------------------------------ |
230
+ | `children` | `React.ReactNode \| ((props: SwitchRenderProps) => React.ReactNode)` | `undefined` | Content to render inside the thumb, or a render function |
231
+ | `className` | `string` | `undefined` | Custom class name for the thumb element |
232
+ | `animation` | `SwitchThumbAnimation` | - | Animation configuration |
233
+ | `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
234
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
235
+
236
+ #### SwitchThumbAnimation
237
+
238
+ Animation configuration for Switch.Thumb component. Can be:
239
+
240
+ - `false` or `"disabled"`: Disable all animations
241
+ - `true` or `undefined`: Use default animations
242
+ - `object`: Custom animation configuration
243
+
244
+ | prop | type | default | description |
245
+ | ------------------------------ | ----------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------- |
246
+ | `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
247
+ | `left.value` | `number` | `2` | Offset value from the edges (left when unselected, right when selected) |
248
+ | `left.springConfig` | `WithSpringConfig` | `{ damping: 120, stiffness: 1600, mass: 2 }` | Spring animation configuration for thumb position |
249
+ | `backgroundColor.value` | `[string, string]` | `['white', theme accent-foreground color]` | Background color values [unselected, selected] |
250
+ | `backgroundColor.timingConfig` | `WithTimingConfig` | `{ duration: 175, easing: Easing.bezier(0.25, 0.1, 0.25, 1) }` | Animation timing configuration |
251
+
252
+ ### Switch.StartContent
253
+
254
+ | prop | type | default | description |
255
+ | -------------- | ----------------- | ----------- | -------------------------------------------------- |
256
+ | `children` | `React.ReactNode` | `undefined` | Content to render inside the switch content |
257
+ | `className` | `string` | `undefined` | Custom class name for the content element |
258
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
259
+
260
+ ### Switch.EndContent
261
+
262
+ | prop | type | default | description |
263
+ | -------------- | ----------------- | ----------- | -------------------------------------------------- |
264
+ | `children` | `React.ReactNode` | `undefined` | Content to render inside the switch content |
265
+ | `className` | `string` | `undefined` | Custom class name for the content element |
266
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
267
+
268
+ ## Hooks
269
+
270
+ ### useSwitch
271
+
272
+ A hook that provides access to the Switch context. This is useful when building custom switch components or when you need to access switch state in child components.
273
+
274
+ **Returns:**
275
+
276
+ | Property | Type | Description |
277
+ | ------------ | --------- | ------------------------------ |
278
+ | `isSelected` | `boolean` | Whether the switch is selected |
279
+ | `isDisabled` | `boolean` | Whether the switch is disabled |
280
+
281
+ **Example:**
282
+
283
+ ```tsx
284
+ import { useSwitch } from '@/heroui';
285
+
286
+ function CustomSwitchContent() {
287
+ const { isSelected, isDisabled } = useSwitch();
288
+
289
+ return (
290
+ <View>
291
+ <Text>Status: {isSelected ? 'On' : 'Off'}</Text>
292
+ {isDisabled && <Text>Disabled</Text>}
293
+ </View>
294
+ );
295
+ }
296
+
297
+ // Usage
298
+ <Switch>
299
+ <CustomSwitchContent />
300
+ <Switch.Thumb />
301
+ </Switch>;
302
+ ```
303
+
304
+ ## Special Notes
305
+
306
+ ### Border Styling
307
+
308
+ If you need to apply a border to the switch root, use the `outline` style properties instead of `border`. This ensures the border doesn't affect the internal layout calculations for the thumb position:
309
+
310
+ ```tsx
311
+ <Switch className="outline outline-accent">
312
+ <Switch.Thumb />
313
+ </Switch>
314
+ ```
315
+
316
+ Using `outline` keeps the border visual without impacting the switch's internal width calculations, ensuring the thumb animates correctly.
317
+
318
+ ### Integration with ControlField
319
+
320
+ The Switch component integrates seamlessly with ControlField for press state sharing:
321
+
322
+ ```tsx
323
+ import { Description, ControlField, Label } from '@/heroui';
324
+
325
+ <ControlField isSelected={isSelected} onSelectedChange={setIsSelected}>
326
+ <View className="flex-1">
327
+ <Label>Enable notifications</Label>
328
+ <Description>Receive push notifications</Description>
329
+ </View>
330
+ <ControlField.Indicator />
331
+ </ControlField>;
332
+ ```
333
+
334
+ When wrapped in ControlField, the Switch will automatically respond to press events on the entire ControlField container, creating a larger touch target and better user experience.
@@ -0,0 +1,83 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { tv } from 'tailwind-variants';
3
+ import { combineStyles } from '../../helpers/internal/utils';
4
+
5
+ /**
6
+ * Root style definition
7
+ *
8
+ * @note ANIMATED PROPERTIES (cannot be set via className):
9
+ * The following properties are animated and cannot be overridden using Tailwind classes:
10
+ * - `backgroundColor` - Animated for selection transitions (unselected: default, selected: accent)
11
+ * - `transform` (specifically `scale`) - Animated for press feedback transitions (unpressed: 1, pressed: 0.96)
12
+ *
13
+ * To customize these properties, use the `animation` prop on `Switch`:
14
+ * ```tsx
15
+ * <Switch
16
+ * animation={{
17
+ * backgroundColor: { value: ['#e5e5e5', '#007AFF'], timingConfig: { duration: 175 } },
18
+ * scale: { value: [1, 0.96], timingConfig: { duration: 150 } }
19
+ * }}
20
+ * />
21
+ * ```
22
+ *
23
+ * To completely disable animated styles and apply your own via className or style prop,
24
+ * set `isAnimatedStyleActive={false}` on `Switch`.
25
+ */
26
+ const root = tv({
27
+ base: 'w-[48px] h-[24px] rounded-full justify-center overflow-hidden',
28
+ variants: {
29
+ isDisabled: {
30
+ true: 'opacity-disabled pointer-events-none',
31
+ false: '',
32
+ },
33
+ },
34
+ defaultVariants: {
35
+ isDisabled: false,
36
+ },
37
+ });
38
+
39
+ /**
40
+ * Thumb style definition
41
+ *
42
+ * @note ANIMATED PROPERTIES (cannot be set via className):
43
+ * The following properties are animated and cannot be overridden using Tailwind classes:
44
+ * - `left` - Animated for thumb position transitions (unselected: left edge offset, selected: right edge offset)
45
+ * - `backgroundColor` - Animated for selection transitions (unselected: white, selected: accent-foreground)
46
+ *
47
+ * To customize these properties, use the `animation` prop on `Switch.Thumb`:
48
+ * ```tsx
49
+ * <Switch.Thumb
50
+ * animation={{
51
+ * left: { value: 2, springConfig: { damping: 120, stiffness: 1600, mass: 2 } },
52
+ * backgroundColor: { value: ['white', '#ffffff'], timingConfig: { duration: 175 } }
53
+ * }}
54
+ * />
55
+ * ```
56
+ *
57
+ * To completely disable animated styles and apply your own via className or style prop,
58
+ * set `isAnimatedStyleActive={false}` on `Switch.Thumb`.
59
+ */
60
+ const thumb = tv({
61
+ base: 'absolute left-[2px] items-center justify-center w-[28px] h-[20px] rounded-full shadow-field overflow-hidden',
62
+ });
63
+
64
+ const startContent = tv({
65
+ base: 'absolute left-[2px]',
66
+ });
67
+
68
+ const endContent = tv({
69
+ base: 'absolute right-[2px]',
70
+ });
71
+
72
+ export const switchClassNames = combineStyles({
73
+ root,
74
+ thumb,
75
+ startContent,
76
+ endContent,
77
+ });
78
+
79
+ export const switchStyleSheet = StyleSheet.create({
80
+ borderCurve: {
81
+ borderCurve: 'continuous',
82
+ },
83
+ });