@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,94 @@
1
+ import React, { useMemo, type PropsWithChildren } from 'react';
2
+
3
+ import { View } from 'react-native';
4
+ import { createContext } from '../../helpers/internal/utils';
5
+ import Skeleton from '../skeleton/skeleton';
6
+ import { DISPLAY_NAME } from './skeleton-group.constants';
7
+ import { skeletonGroupClassNames } from './skeleton-group.styles';
8
+ import type {
9
+ SkeletonGroupContextValue,
10
+ SkeletonGroupItemProps,
11
+ SkeletonGroupRootProps,
12
+ } from './skeleton-group.types';
13
+
14
+ const [SkeletonGroupProvider, useSkeletonGroupContext] =
15
+ createContext<SkeletonGroupContextValue>({
16
+ name: 'SkeletonGroupContext',
17
+ errorMessage:
18
+ 'useSkeletonGroupContext: must be used within a SkeletonGroup',
19
+ });
20
+
21
+ // --------------------------------------------------
22
+
23
+ const SkeletonGroupRoot: React.FC<PropsWithChildren<SkeletonGroupRootProps>> = (
24
+ props
25
+ ) => {
26
+ const {
27
+ children,
28
+ className,
29
+ style,
30
+ isSkeletonOnly = false,
31
+ ...restProps
32
+ } = props;
33
+
34
+ const rootClassName = skeletonGroupClassNames.root({ className });
35
+
36
+ const contextValue = useMemo<SkeletonGroupContextValue>(
37
+ () => ({
38
+ ...restProps,
39
+ }),
40
+ [restProps]
41
+ );
42
+
43
+ if (isSkeletonOnly && !restProps.isLoading) {
44
+ return null;
45
+ }
46
+
47
+ return (
48
+ <SkeletonGroupProvider value={contextValue}>
49
+ <View className={rootClassName} style={style}>
50
+ {children}
51
+ </View>
52
+ </SkeletonGroupProvider>
53
+ );
54
+ };
55
+
56
+ // --------------------------------------------------
57
+
58
+ const SkeletonGroupItem: React.FC<SkeletonGroupItemProps> = (props) => {
59
+ const context = useSkeletonGroupContext();
60
+
61
+ const itemProps = {
62
+ ...context,
63
+ ...props,
64
+ };
65
+
66
+ return <Skeleton {...itemProps} />;
67
+ };
68
+
69
+ // --------------------------------------------------
70
+
71
+ SkeletonGroupRoot.displayName = DISPLAY_NAME.SKELETON_GROUP_ROOT;
72
+ SkeletonGroupItem.displayName = DISPLAY_NAME.SKELETON_GROUP_ITEM;
73
+
74
+ /**
75
+ * Compound SkeletonGroup component for managing multiple skeleton loading states
76
+ *
77
+ * @component SkeletonGroup - Root container that provides centralized control for all skeleton items.
78
+ * Passes isLoading, variant, and animation to child items via context.
79
+ *
80
+ * @component SkeletonGroup.Item - Individual skeleton item that inherits props from the parent group.
81
+ * Can override group props with its own props for specific customization.
82
+ *
83
+ * Props flow from SkeletonGroup to Items via context (isLoading, variant, animation).
84
+ * Items can override any inherited prop by passing their own values.
85
+ *
86
+ * @see Full documentation: https://v3.heroui.com/docs/native/components/skeleton-group
87
+ */
88
+ const SkeletonGroup = Object.assign(SkeletonGroupRoot, {
89
+ /** @optional Individual skeleton item that inherits group settings */
90
+ Item: SkeletonGroupItem,
91
+ });
92
+
93
+ export default SkeletonGroup;
94
+ export { useSkeletonGroupContext };
@@ -0,0 +1,28 @@
1
+ import type { StyleProp, ViewStyle } from 'react-native';
2
+ import type { SkeletonProps } from '../skeleton/skeleton.types';
3
+
4
+ /**
5
+ * Props for the SkeletonGroup root component
6
+ */
7
+ export interface SkeletonGroupRootProps extends Omit<SkeletonProps, 'style'> {
8
+ /**
9
+ * When true, hides the entire group when isLoading is false.
10
+ * Use this to prevent layout issues when skeleton contains wrapper elements.
11
+ * @default false
12
+ */
13
+ isSkeletonOnly?: boolean;
14
+ /**
15
+ * Style for the skeleton group container
16
+ */
17
+ style?: StyleProp<ViewStyle>;
18
+ }
19
+
20
+ /**
21
+ * Context value for SkeletonGroup provider
22
+ */
23
+ export interface SkeletonGroupContextValue extends SkeletonGroupRootProps {}
24
+
25
+ /**
26
+ * Props for the SkeletonGroup.Item component
27
+ */
28
+ export interface SkeletonGroupItemProps extends SkeletonProps {}
@@ -0,0 +1,23 @@
1
+ // Component export
2
+ export { default as Slider, useSlider } from './slider';
3
+
4
+ // ClassNames export for external reuse
5
+ export { sliderClassNames } from './slider.styles';
6
+
7
+ // Re-export primitive context and value types for consumer convenience
8
+ export type {
9
+ SliderContextValue,
10
+ SliderOrientation,
11
+ SliderRenderProps,
12
+ SliderState,
13
+ SliderValue,
14
+ } from '../../primitives/slider/slider.types';
15
+
16
+ // Component-level type exports
17
+ export type {
18
+ SliderFillProps,
19
+ SliderOutputProps,
20
+ SliderProps,
21
+ SliderThumbProps,
22
+ SliderTrackProps,
23
+ } from './slider.types';
@@ -0,0 +1,87 @@
1
+ import { useAnimatedStyle, withSpring } from 'react-native-reanimated';
2
+ import { useAnimationSettings } from '../../helpers/internal/contexts';
3
+ import { useCombinedAnimationDisabledState } from '../../helpers/internal/hooks';
4
+ import type { AnimationRootDisableAll } from '../../helpers/internal/types';
5
+ import {
6
+ getAnimationState,
7
+ getAnimationValueMergedConfig,
8
+ getAnimationValueProperty,
9
+ getIsAnimationDisabledValue,
10
+ } from '../../helpers/internal/utils';
11
+ import { THUMB_SPRING_CONFIG } from './slider.constants';
12
+ import type { SliderThumbAnimation } from './slider.types';
13
+
14
+ /**
15
+ * Animation hook for Slider root component.
16
+ * Handles root-level animation configuration and provides
17
+ * cascading disable-all state for child components.
18
+ */
19
+ export function useSliderRootAnimation(options: {
20
+ animation: AnimationRootDisableAll | undefined;
21
+ }) {
22
+ const { animation } = options;
23
+
24
+ const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
25
+
26
+ return {
27
+ isAllAnimationsDisabled,
28
+ };
29
+ }
30
+
31
+ // --------------------------------------------------
32
+
33
+ /**
34
+ * Animation hook for Slider.Thumb knob scale effect.
35
+ * Animates scale between idle and dragging states using spring physics,
36
+ * driven by the `isThumbDragging` state from the slider context.
37
+ */
38
+ export function useSliderThumbAnimation(options: {
39
+ animation: SliderThumbAnimation | undefined;
40
+ isDragging: boolean;
41
+ }) {
42
+ const { animation, isDragging } = options;
43
+
44
+ const { isAllAnimationsDisabled } = useAnimationSettings();
45
+
46
+ const { animationConfig, isAnimationDisabled } = getAnimationState(animation);
47
+
48
+ const isAnimationDisabledValue = getIsAnimationDisabledValue({
49
+ isAnimationDisabled,
50
+ isAllAnimationsDisabled,
51
+ });
52
+
53
+ const scaleValue = getAnimationValueProperty({
54
+ animationValue: animationConfig?.scale,
55
+ property: 'value',
56
+ defaultValue: [1, 0.9] as [number, number],
57
+ });
58
+
59
+ const scaleSpringConfig = getAnimationValueMergedConfig({
60
+ animationValue: animationConfig?.scale,
61
+ property: 'springConfig',
62
+ defaultValue: THUMB_SPRING_CONFIG,
63
+ });
64
+
65
+ const rKnobStyle = useAnimatedStyle(() => {
66
+ if (isAnimationDisabledValue) {
67
+ return {
68
+ transform: [{ scale: isDragging ? scaleValue[1] : scaleValue[0] }],
69
+ };
70
+ }
71
+
72
+ return {
73
+ transform: [
74
+ {
75
+ scale: withSpring(
76
+ isDragging ? scaleValue[1] : scaleValue[0],
77
+ scaleSpringConfig
78
+ ),
79
+ },
80
+ ],
81
+ };
82
+ });
83
+
84
+ return {
85
+ rKnobStyle,
86
+ };
87
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Display names for Slider components
3
+ */
4
+ export const DISPLAY_NAME = {
5
+ ROOT: 'HeroUI.Slider.Root',
6
+ OUTPUT: 'HeroUI.Slider.Output',
7
+ TRACK: 'HeroUI.Slider.Track',
8
+ FILL: 'HeroUI.Slider.Fill',
9
+ THUMB: 'HeroUI.Slider.Thumb',
10
+ };
11
+
12
+ /**
13
+ * Extra hit-slop around the thumb to improve touch target
14
+ */
15
+ export const THUMB_HIT_SLOP = 16;
16
+
17
+ /**
18
+ * Spring animation configuration for thumb scale feedback
19
+ */
20
+ export const THUMB_SPRING_CONFIG = {
21
+ damping: 15,
22
+ stiffness: 200,
23
+ mass: 0.5,
24
+ };
@@ -0,0 +1,348 @@
1
+ # Slider
2
+
3
+ A draggable input for selecting a value or range within a bounded interval.
4
+
5
+ ## Import
6
+
7
+ ```tsx
8
+ import { Slider } from '@/heroui';
9
+ ```
10
+
11
+ ## Anatomy
12
+
13
+ ```tsx
14
+ <Slider>
15
+ <Slider.Output />
16
+ <Slider.Track>
17
+ <Slider.Fill />
18
+ <Slider.Thumb />
19
+ </Slider.Track>
20
+ </Slider>
21
+ ```
22
+
23
+ - **Slider**: Main container that manages slider value state, orientation, and provides context to all sub-components. Supports single value and range modes.
24
+ - **Slider.Output**: Optional display of the current value(s). Supports render functions for custom formatting. Shows a formatted value label by default.
25
+ - **Slider.Track**: Sizing container for Fill and Thumb elements. Reports its layout size for position calculations. Supports tap-to-position and render-function children for dynamic content (e.g. multiple thumbs for range sliders).
26
+ - **Slider.Fill**: Responsive fill bar that stretches the full cross-axis of the Track. Only the main-axis position and size are computed.
27
+ - **Slider.Thumb**: Draggable thumb element using react-native-gesture-handler. Centered on the cross-axis by the Track layout. Animates scale on press via react-native-reanimated. Each thumb gets `role="slider"` with full `accessibilityValue`.
28
+
29
+ ## Usage
30
+
31
+ ### Basic Usage
32
+
33
+ The Slider component uses compound parts to create a draggable value input.
34
+
35
+ ```tsx
36
+ <Slider defaultValue={30}>
37
+ <Slider.Output />
38
+ <Slider.Track>
39
+ <Slider.Fill />
40
+ <Slider.Thumb />
41
+ </Slider.Track>
42
+ </Slider>
43
+ ```
44
+
45
+ ### With Label and Output
46
+
47
+ Display a label alongside the current value output.
48
+
49
+ ```tsx
50
+ <Slider defaultValue={50}>
51
+ <View className="flex-row items-center justify-between">
52
+ <Label>Volume</Label>
53
+ <Slider.Output />
54
+ </View>
55
+ <Slider.Track>
56
+ <Slider.Fill />
57
+ <Slider.Thumb />
58
+ </Slider.Track>
59
+ </Slider>
60
+ ```
61
+
62
+ ### Vertical Orientation
63
+
64
+ Render the slider vertically by setting `orientation` to `"vertical"`.
65
+
66
+ ```tsx
67
+ <View className="h-48">
68
+ <Slider defaultValue={50} orientation="vertical">
69
+ <Slider.Track>
70
+ <Slider.Fill />
71
+ <Slider.Thumb />
72
+ </Slider.Track>
73
+ </Slider>
74
+ </View>
75
+ ```
76
+
77
+ ### Range Slider
78
+
79
+ Pass an array as the value and use a render function on `Slider.Track` to create multiple thumbs.
80
+
81
+ ```tsx
82
+ <Slider
83
+ defaultValue={[200, 800]}
84
+ minValue={0}
85
+ maxValue={1000}
86
+ step={10}
87
+ formatOptions={{ style: 'currency', currency: 'USD' }}
88
+ >
89
+ <View className="flex-row items-center justify-between">
90
+ <Label>Price range</Label>
91
+ <Slider.Output />
92
+ </View>
93
+ <Slider.Track>
94
+ {({ state }) => (
95
+ <>
96
+ <Slider.Fill />
97
+ {state.values.map((_, i) => (
98
+ <Slider.Thumb key={i} index={i} />
99
+ ))}
100
+ </>
101
+ )}
102
+ </Slider.Track>
103
+ </Slider>
104
+ ```
105
+
106
+ ### Controlled Value
107
+
108
+ Use `value` and `onChange` for controlled mode. The `onChangeEnd` callback fires when a drag or tap interaction completes.
109
+
110
+ ```tsx
111
+ const [volume, setVolume] = useState(50);
112
+
113
+ <Slider value={volume} onChange={setVolume} onChangeEnd={(v) => save(v)}>
114
+ <Slider.Output />
115
+ <Slider.Track>
116
+ <Slider.Fill />
117
+ <Slider.Thumb />
118
+ </Slider.Track>
119
+ </Slider>;
120
+ ```
121
+
122
+ ### Custom Styling
123
+
124
+ Apply custom styles using `className`, `classNames`, or `styles` on the thumb and other sub-components.
125
+
126
+ ```tsx
127
+ <Slider defaultValue={65}>
128
+ <Slider.Track className="h-3 rounded-full bg-success/10">
129
+ <Slider.Fill className="rounded-full bg-success" />
130
+ <Slider.Thumb
131
+ classNames={{
132
+ thumbContainer: 'size-6 rounded-full bg-success',
133
+ thumbKnob: 'bg-success-foreground rounded-full',
134
+ }}
135
+ animation={{
136
+ scale: { value: [1, 0.7] },
137
+ }}
138
+ />
139
+ </Slider.Track>
140
+ </Slider>
141
+ ```
142
+
143
+ ### Disabled
144
+
145
+ Disable the entire slider to prevent interaction.
146
+
147
+ ```tsx
148
+ <Slider defaultValue={40} isDisabled>
149
+ <Slider.Track>
150
+ <Slider.Fill />
151
+ <Slider.Thumb />
152
+ </Slider.Track>
153
+ </Slider>
154
+ ```
155
+
156
+ ## Example
157
+
158
+ ```tsx
159
+ import { Label, Slider } from '@/heroui';
160
+ import { useState } from 'react';
161
+ import { View, Text } from 'react-native';
162
+
163
+ export default function SliderExample() {
164
+ const [price, setPrice] = useState<number[]>([200, 800]);
165
+
166
+ return (
167
+ <View className="px-8 gap-8">
168
+ <Slider defaultValue={30}>
169
+ <View className="flex-row items-center justify-between">
170
+ <Label>Volume</Label>
171
+ <Slider.Output />
172
+ </View>
173
+ <Slider.Track>
174
+ <Slider.Fill />
175
+ <Slider.Thumb />
176
+ </Slider.Track>
177
+ </Slider>
178
+
179
+ <Slider
180
+ value={price}
181
+ onChange={setPrice}
182
+ minValue={0}
183
+ maxValue={1000}
184
+ step={10}
185
+ formatOptions={{ style: 'currency', currency: 'USD' }}
186
+ >
187
+ <View className="flex-row items-center justify-between">
188
+ <Label>Price range</Label>
189
+ <Slider.Output />
190
+ </View>
191
+ <Slider.Track>
192
+ {({ state }) => (
193
+ <>
194
+ <Slider.Fill />
195
+ {state.values.map((_, i) => (
196
+ <Slider.Thumb key={i} index={i} />
197
+ ))}
198
+ </>
199
+ )}
200
+ </Slider.Track>
201
+ </Slider>
202
+ </View>
203
+ );
204
+ }
205
+ ```
206
+
207
+ You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/slider.tsx>).
208
+
209
+ ## API Reference
210
+
211
+ ### Slider
212
+
213
+ | prop | type | default | description |
214
+ | --------------- | ------------------------------------- | -------------- | --------------------------------------------------------------- |
215
+ | `children` | `React.ReactNode` | - | Children elements to be rendered inside the slider |
216
+ | `value` | `number \| number[]` | - | Current slider value (controlled mode) |
217
+ | `defaultValue` | `number \| number[]` | `0` | Default slider value (uncontrolled mode) |
218
+ | `minValue` | `number` | `0` | Minimum value of the slider |
219
+ | `maxValue` | `number` | `100` | Maximum value of the slider |
220
+ | `step` | `number` | `1` | Step increment for the slider |
221
+ | `formatOptions` | `Intl.NumberFormatOptions` | - | Number format options for value label formatting |
222
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Orientation of the slider |
223
+ | `isDisabled` | `boolean` | `false` | Whether the slider is disabled |
224
+ | `className` | `string` | - | Additional CSS classes |
225
+ | `animation` | `AnimationRootDisableAll` | - | Animation configuration for the slider |
226
+ | `onChange` | `(value: number \| number[]) => void` | - | Callback fired when the slider value changes during interaction |
227
+ | `onChangeEnd` | `(value: number \| number[]) => void` | - | Callback fired when an interaction completes (drag end or tap) |
228
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
229
+
230
+ #### AnimationRootDisableAll
231
+
232
+ Animation configuration for the slider root component. Can be:
233
+
234
+ - `"disable-all"`: Disable all animations including children
235
+ - `undefined`: Use default animations
236
+
237
+ ### Slider.Output
238
+
239
+ | prop | type | default | description |
240
+ | -------------- | -------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------- |
241
+ | `children` | `React.ReactNode \| ((props: SliderRenderProps) => React.ReactNode)` | - | Custom content or render function receiving slider state. Defaults to formatted value label |
242
+ | `className` | `string` | - | Additional CSS classes |
243
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
244
+
245
+ #### SliderRenderProps
246
+
247
+ | prop | type | description |
248
+ | ------------- | ------------------- | ------------------------------ |
249
+ | `state` | `SliderState` | Current slider state |
250
+ | `orientation` | `SliderOrientation` | Orientation of the slider |
251
+ | `isDisabled` | `boolean` | Whether the slider is disabled |
252
+
253
+ #### SliderState
254
+
255
+ | prop | type | description |
256
+ | -------------------- | --------------------------- | ---------------------------------------------- |
257
+ | `values` | `number[]` | Current slider value(s) by thumb index |
258
+ | `getThumbValueLabel` | `(index: number) => string` | Returns the formatted string label for a thumb |
259
+
260
+ ### Slider.Track
261
+
262
+ | prop | type | default | description |
263
+ | -------------- | -------------------------------------------------------------------- | ------- | ----------------------------------------------------------------------------- |
264
+ | `children` | `React.ReactNode \| ((props: SliderRenderProps) => React.ReactNode)` | - | Content or render function receiving slider state for dynamic thumb rendering |
265
+ | `className` | `string` | - | Additional CSS classes |
266
+ | `hitSlop` | `number` | `8` | Extra touch area around the track |
267
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
268
+
269
+ ### Slider.Fill
270
+
271
+ | prop | type | default | description |
272
+ | -------------- | ----------- | ------- | -------------------------------------------------- |
273
+ | `className` | `string` | - | Additional CSS classes |
274
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
275
+
276
+ ### Slider.Thumb
277
+
278
+ | prop | type | default | description |
279
+ | -------------- | ---------------------------------------- | ------- | -------------------------------------------------- |
280
+ | `children` | `React.ReactNode` | - | Custom thumb content. Defaults to an animated knob |
281
+ | `index` | `number` | `0` | Index of this thumb within the slider |
282
+ | `isDisabled` | `boolean` | - | Whether this individual thumb is disabled |
283
+ | `className` | `string` | - | Additional CSS classes for the thumb container |
284
+ | `classNames` | `ElementSlots<ThumbSlots>` | - | Additional CSS classes for thumb slots |
285
+ | `styles` | `Partial<Record<ThumbSlots, ViewStyle>>` | - | Inline styles for thumb slots |
286
+ | `hitSlop` | `number` | `12` | Extra touch area around the thumb |
287
+ | `animation` | `SliderThumbAnimation` | - | Animation configuration for the thumb knob |
288
+ | `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
289
+
290
+ #### ElementSlots\<ThumbSlots\>
291
+
292
+ | prop | type | description |
293
+ | ---------------- | -------- | ----------------------------------------------- |
294
+ | `thumbContainer` | `string` | Custom class name for the outer thumb container |
295
+ | `thumbKnob` | `string` | Custom class name for the inner thumb knob |
296
+
297
+ #### styles
298
+
299
+ | prop | type | description |
300
+ | ---------------- | ----------- | ------------------------------------ |
301
+ | `thumbContainer` | `ViewStyle` | Styles for the outer thumb container |
302
+ | `thumbKnob` | `ViewStyle` | Styles for the inner thumb knob |
303
+
304
+ #### SliderThumbAnimation
305
+
306
+ Animation configuration for the thumb knob scale effect. Can be:
307
+
308
+ - `false` or `"disabled"`: Disable thumb animation
309
+ - `undefined`: Use default animations
310
+ - `object`: Custom scale animation configuration
311
+
312
+ | prop | type | default | description |
313
+ | -------------------- | ------------------ | -------------------------------------------- | ----------------------------------------------- |
314
+ | `scale.value` | `[number, number]` | `[1, 0.9]` | Scale values [idle, dragging] |
315
+ | `scale.springConfig` | `WithSpringConfig` | `{ damping: 15, stiffness: 200, mass: 0.5 }` | Spring animation configuration for scale effect |
316
+
317
+ ## Hooks
318
+
319
+ ### useSlider
320
+
321
+ Hook to access the slider context. Must be used within a `Slider` component.
322
+
323
+ ```tsx
324
+ import { useSlider } from '@/heroui';
325
+
326
+ const { values, orientation, isDisabled, getThumbValueLabel } = useSlider();
327
+ ```
328
+
329
+ #### Returns
330
+
331
+ | property | type | description |
332
+ | -------------------- | -------------------------------------------- | -------------------------------------------------------------- |
333
+ | `values` | `number[]` | Current slider values (one per thumb) |
334
+ | `minValue` | `number` | Minimum value of the slider |
335
+ | `maxValue` | `number` | Maximum value of the slider |
336
+ | `step` | `number` | Step increment |
337
+ | `orientation` | `'horizontal' \| 'vertical'` | Current orientation |
338
+ | `isDisabled` | `boolean` | Whether the slider is disabled |
339
+ | `formatOptions` | `Intl.NumberFormatOptions \| undefined` | Number format options for labels |
340
+ | `getThumbPercent` | `(index: number) => number` | Returns the percentage position (0–1) for a given thumb index |
341
+ | `getThumbValueLabel` | `(index: number) => string` | Returns the formatted label for a given thumb index |
342
+ | `getThumbMinValue` | `(index: number) => number` | Returns the minimum allowed value for a thumb |
343
+ | `getThumbMaxValue` | `(index: number) => number` | Returns the maximum allowed value for a thumb |
344
+ | `updateValue` | `(index: number, newValue: number) => void` | Updates a thumb value by index |
345
+ | `isThumbDragging` | `(index: number) => boolean` | Returns whether a given thumb is currently being dragged |
346
+ | `setThumbDragging` | `(index: number, dragging: boolean) => void` | Sets the dragging state of a thumb |
347
+ | `trackSize` | `number` | Track layout width (horizontal) or height (vertical) in pixels |
348
+ | `thumbSize` | `number` | Measured thumb size (main-axis dimension) in pixels |
@@ -0,0 +1,85 @@
1
+ import { StyleSheet } from 'react-native';
2
+ import { tv } from 'tailwind-variants';
3
+ import { combineStyles } from '../../helpers/internal/utils';
4
+
5
+ const root = tv({
6
+ base: 'gap-2',
7
+ variants: {
8
+ orientation: {
9
+ horizontal: 'w-full',
10
+ vertical: 'h-full items-center',
11
+ },
12
+ isDisabled: {
13
+ true: 'opacity-disabled',
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ orientation: 'horizontal',
18
+ isDisabled: false,
19
+ },
20
+ });
21
+
22
+ const output = tv({
23
+ base: 'text-sm text-muted font-medium',
24
+ });
25
+
26
+ const track = tv({
27
+ base: 'rounded-xl bg-default',
28
+ variants: {
29
+ orientation: {
30
+ horizontal: 'w-full h-5 justify-center',
31
+ vertical: 'h-full w-5 items-center',
32
+ },
33
+ },
34
+ defaultVariants: {
35
+ orientation: 'horizontal',
36
+ },
37
+ });
38
+
39
+ const fill = tv({
40
+ base: 'absolute rounded-xl bg-accent',
41
+ variants: {
42
+ orientation: {
43
+ horizontal: 'inset-y-0',
44
+ vertical: 'inset-x-0',
45
+ },
46
+ },
47
+ defaultVariants: {
48
+ orientation: 'horizontal',
49
+ },
50
+ });
51
+
52
+ const thumb = tv({
53
+ slots: {
54
+ thumbContainer: 'absolute p-[2px] bg-accent rounded-xl',
55
+ thumbKnob: 'flex-1 bg-accent-foreground rounded-xl shadow-field',
56
+ },
57
+ variants: {
58
+ orientation: {
59
+ horizontal: { thumbContainer: 'w-7 h-5' },
60
+ vertical: { thumbContainer: 'w-5 h-7' },
61
+ },
62
+ },
63
+ defaultVariants: {
64
+ orientation: 'horizontal',
65
+ },
66
+ });
67
+
68
+ const sliderClassNames = combineStyles({
69
+ root,
70
+ output,
71
+ track,
72
+ fill,
73
+ thumb,
74
+ });
75
+
76
+ export const styleSheet = StyleSheet.create({
77
+ borderCurve: {
78
+ borderCurve: 'continuous',
79
+ },
80
+ });
81
+
82
+ export type ThumbSlots = keyof ReturnType<typeof thumb>;
83
+
84
+ export { sliderClassNames };
85
+ export default sliderClassNames;