@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,77 @@
1
+ import type {
2
+ ForceMountable,
3
+ PressableRef,
4
+ SlottablePressableProps,
5
+ SlottableTextProps,
6
+ SlottableViewProps,
7
+ TextRef,
8
+ ViewRef,
9
+ } from '../../helpers/internal/types';
10
+
11
+ /**
12
+ * Props for the Tabs root component
13
+ */
14
+ type RootProps = SlottableViewProps & {
15
+ /** Currently active tab value */
16
+ value: string;
17
+ /** Callback when the active tab changes */
18
+ onValueChange: (value: string) => void;
19
+ };
20
+
21
+ /** Ref type for Tabs root */
22
+ type RootRef = ViewRef;
23
+
24
+ /** Props for the Tabs list container */
25
+ type ListProps = SlottableViewProps;
26
+ /** Ref type for Tabs list */
27
+ type ListRef = ViewRef;
28
+
29
+ /**
30
+ * Props for individual tab triggers
31
+ */
32
+ type TriggerProps = SlottablePressableProps & {
33
+ /** Unique value to identify this tab */
34
+ value: string;
35
+ };
36
+ /** Ref type for tab trigger */
37
+ type TriggerRef = PressableRef;
38
+
39
+ /**
40
+ * Props for tab trigger labels
41
+ */
42
+ type LabelProps = SlottableTextProps;
43
+ /** Ref type for tab label */
44
+ type LabelRef = TextRef;
45
+
46
+ /**
47
+ * Props for tab indicator
48
+ */
49
+ type IndicatorProps = SlottableViewProps;
50
+ /** Ref type for tab indicator */
51
+ type IndicatorRef = ViewRef;
52
+
53
+ /**
54
+ * Props for tab content panels
55
+ */
56
+ type ContentProps = SlottableViewProps &
57
+ ForceMountable & {
58
+ /** Value of the tab this content belongs to */
59
+ value: string;
60
+ };
61
+ /** Ref type for tab content */
62
+ type ContentRef = ViewRef;
63
+
64
+ export type {
65
+ ContentProps,
66
+ ContentRef,
67
+ IndicatorProps,
68
+ IndicatorRef,
69
+ LabelProps,
70
+ LabelRef,
71
+ ListProps,
72
+ ListRef,
73
+ RootProps,
74
+ RootRef,
75
+ TriggerProps,
76
+ TriggerRef,
77
+ };
@@ -0,0 +1,2 @@
1
+ export * from './tag-group';
2
+ export * from './tag-group.types';
@@ -0,0 +1,324 @@
1
+ import {
2
+ createContext,
3
+ forwardRef,
4
+ useCallback,
5
+ useContext,
6
+ useMemo,
7
+ useState,
8
+ } from 'react';
9
+ import {
10
+ Pressable,
11
+ Text,
12
+ View,
13
+ type GestureResponderEvent,
14
+ } from 'react-native';
15
+ import * as Slot from '../slot';
16
+ import type {
17
+ ItemLabelProps,
18
+ ItemLabelRef,
19
+ ItemProps,
20
+ ItemRef,
21
+ ListProps,
22
+ ListRef,
23
+ RemoveButtonProps,
24
+ RemoveButtonRef,
25
+ RootContextValue,
26
+ RootProps,
27
+ RootRef,
28
+ TagKey,
29
+ } from './tag-group.types';
30
+
31
+ // --------------------------------------------------
32
+ // Root Context
33
+ // --------------------------------------------------
34
+
35
+ const RootContext = createContext<RootContextValue | null>(null);
36
+
37
+ /**
38
+ * Hook to access TagGroup root context.
39
+ * Provides selection state, disabled state, and remove handler.
40
+ *
41
+ * @throws Error if used outside a TagGroup Root component
42
+ */
43
+ export function useRootContext() {
44
+ const context = useContext(RootContext);
45
+
46
+ if (!context) {
47
+ throw new Error(
48
+ 'TagGroup compound components cannot be rendered outside the TagGroup component'
49
+ );
50
+ }
51
+
52
+ return context;
53
+ }
54
+
55
+ // --------------------------------------------------
56
+ // Item Context
57
+ // --------------------------------------------------
58
+
59
+ interface IItemContext {
60
+ id: TagKey;
61
+ isSelected: boolean;
62
+ isDisabled: boolean;
63
+ allowsRemoving: boolean;
64
+ }
65
+
66
+ const ItemContext = createContext<IItemContext | null>(null);
67
+
68
+ /**
69
+ * Hook to access TagGroup Item context.
70
+ * Provides the item's id, selected state, disabled state, and remove capability.
71
+ *
72
+ * @throws Error if used outside a TagGroup Item component
73
+ */
74
+ export function useItemContext() {
75
+ const context = useContext(ItemContext);
76
+
77
+ if (!context) {
78
+ throw new Error(
79
+ 'TagGroup.Item compound components cannot be rendered outside TagGroup.Item'
80
+ );
81
+ }
82
+
83
+ return context;
84
+ }
85
+
86
+ // --------------------------------------------------
87
+ // Root
88
+ // --------------------------------------------------
89
+
90
+ const Root = forwardRef<RootRef, RootProps>(
91
+ (
92
+ {
93
+ asChild,
94
+ selectionMode = 'none',
95
+ selectedKeys: selectedKeysProp,
96
+ defaultSelectedKeys,
97
+ onSelectionChange: onSelectionChangeProp,
98
+ disabledKeys: disabledKeysProp,
99
+ isDisabled = false,
100
+ isInvalid = false,
101
+ isRequired = false,
102
+ onRemove,
103
+ ...viewProps
104
+ },
105
+ ref
106
+ ) => {
107
+ const isControlled = selectedKeysProp !== undefined;
108
+
109
+ const [internalSelectedKeys, setInternalSelectedKeys] = useState<
110
+ Set<TagKey>
111
+ >(() => new Set(defaultSelectedKeys ?? []));
112
+
113
+ const selectedKeys = useMemo(
114
+ () =>
115
+ isControlled ? new Set(selectedKeysProp ?? []) : internalSelectedKeys,
116
+ [isControlled, selectedKeysProp, internalSelectedKeys]
117
+ );
118
+
119
+ const disabledKeys = useMemo(
120
+ () => new Set(disabledKeysProp ?? []),
121
+ [disabledKeysProp]
122
+ );
123
+
124
+ const onSelectionChange = useCallback(
125
+ (keys: Set<TagKey>) => {
126
+ if (!isControlled) {
127
+ setInternalSelectedKeys(keys);
128
+ }
129
+ onSelectionChangeProp?.(keys);
130
+ },
131
+ [isControlled, onSelectionChangeProp]
132
+ );
133
+
134
+ const contextValue = useMemo<RootContextValue>(
135
+ () => ({
136
+ selectionMode,
137
+ selectedKeys,
138
+ onSelectionChange,
139
+ disabledKeys,
140
+ isDisabled,
141
+ isInvalid,
142
+ isRequired,
143
+ onRemove,
144
+ }),
145
+ [
146
+ selectionMode,
147
+ selectedKeys,
148
+ onSelectionChange,
149
+ disabledKeys,
150
+ isDisabled,
151
+ isInvalid,
152
+ isRequired,
153
+ onRemove,
154
+ ]
155
+ );
156
+
157
+ const Component = asChild ? Slot.View : View;
158
+
159
+ return (
160
+ <RootContext.Provider value={contextValue}>
161
+ <Component ref={ref} {...viewProps} />
162
+ </RootContext.Provider>
163
+ );
164
+ }
165
+ );
166
+
167
+ Root.displayName = 'HeroUINative.Primitive.TagGroup.Root';
168
+
169
+ // --------------------------------------------------
170
+ // List
171
+ // --------------------------------------------------
172
+
173
+ const List = forwardRef<ListRef, ListProps>(({ asChild, ...props }, ref) => {
174
+ const Component = asChild ? Slot.View : View;
175
+
176
+ return <Component ref={ref} role="list" {...props} />;
177
+ });
178
+
179
+ List.displayName = 'HeroUINative.Primitive.TagGroup.List';
180
+
181
+ // --------------------------------------------------
182
+ // Item
183
+ // --------------------------------------------------
184
+
185
+ const Item = forwardRef<ItemRef, ItemProps>(
186
+ (
187
+ {
188
+ asChild,
189
+ id: itemId,
190
+ isDisabled: isDisabledProp = false,
191
+ onPress: onPressProp,
192
+ ...props
193
+ },
194
+ ref
195
+ ) => {
196
+ const {
197
+ selectionMode,
198
+ selectedKeys,
199
+ onSelectionChange,
200
+ disabledKeys,
201
+ isDisabled: isGroupDisabled,
202
+ onRemove,
203
+ } = useRootContext();
204
+
205
+ const effectiveDisabled =
206
+ isGroupDisabled || isDisabledProp || disabledKeys.has(itemId);
207
+ const isSelected = selectedKeys.has(itemId);
208
+ const allowsRemoving = onRemove !== undefined;
209
+
210
+ const onPress = useCallback(
211
+ (ev: GestureResponderEvent) => {
212
+ if (effectiveDisabled) return;
213
+
214
+ if (selectionMode === 'single') {
215
+ const newKeys = isSelected
216
+ ? new Set<TagKey>()
217
+ : new Set<TagKey>([itemId]);
218
+ onSelectionChange(newKeys);
219
+ } else if (selectionMode === 'multiple') {
220
+ const newKeys = new Set(selectedKeys);
221
+ if (isSelected) {
222
+ newKeys.delete(itemId);
223
+ } else {
224
+ newKeys.add(itemId);
225
+ }
226
+ onSelectionChange(newKeys);
227
+ }
228
+
229
+ onPressProp?.(ev);
230
+ },
231
+ [
232
+ effectiveDisabled,
233
+ selectionMode,
234
+ isSelected,
235
+ itemId,
236
+ selectedKeys,
237
+ onSelectionChange,
238
+ onPressProp,
239
+ ]
240
+ );
241
+
242
+ const itemContextValue = useMemo<IItemContext>(
243
+ () => ({
244
+ id: itemId,
245
+ isSelected,
246
+ isDisabled: effectiveDisabled,
247
+ allowsRemoving,
248
+ }),
249
+ [itemId, isSelected, effectiveDisabled, allowsRemoving]
250
+ );
251
+
252
+ const Component = asChild ? Slot.Pressable : Pressable;
253
+
254
+ return (
255
+ <ItemContext.Provider value={itemContextValue}>
256
+ <Component
257
+ ref={ref}
258
+ role="listitem"
259
+ aria-selected={isSelected}
260
+ disabled={effectiveDisabled}
261
+ accessibilityState={{
262
+ selected: isSelected,
263
+ disabled: effectiveDisabled,
264
+ }}
265
+ onPress={onPress}
266
+ {...props}
267
+ />
268
+ </ItemContext.Provider>
269
+ );
270
+ }
271
+ );
272
+
273
+ Item.displayName = 'HeroUINative.Primitive.TagGroup.Item';
274
+
275
+ // --------------------------------------------------
276
+ // ItemLabel
277
+ // --------------------------------------------------
278
+
279
+ const ItemLabel = forwardRef<ItemLabelRef, ItemLabelProps>(
280
+ ({ asChild, ...props }, ref) => {
281
+ const Component = asChild ? Slot.Text : Text;
282
+
283
+ return <Component ref={ref} {...props} />;
284
+ }
285
+ );
286
+
287
+ ItemLabel.displayName = 'HeroUINative.Primitive.TagGroup.ItemLabel';
288
+
289
+ // --------------------------------------------------
290
+ // RemoveButton
291
+ // --------------------------------------------------
292
+
293
+ const RemoveButton = forwardRef<RemoveButtonRef, RemoveButtonProps>(
294
+ ({ asChild, onPress: onPressProp, ...props }, ref) => {
295
+ const { onRemove } = useRootContext();
296
+ const { id, isDisabled } = useItemContext();
297
+
298
+ const onPress = useCallback(
299
+ (ev: GestureResponderEvent) => {
300
+ if (isDisabled) return;
301
+ onRemove?.(new Set([id]));
302
+ onPressProp?.(ev);
303
+ },
304
+ [isDisabled, onRemove, id, onPressProp]
305
+ );
306
+
307
+ const Component = asChild ? Slot.Pressable : Pressable;
308
+
309
+ return (
310
+ <Component
311
+ ref={ref}
312
+ role="button"
313
+ aria-label="Remove"
314
+ disabled={isDisabled}
315
+ onPress={onPress}
316
+ {...props}
317
+ />
318
+ );
319
+ }
320
+ );
321
+
322
+ RemoveButton.displayName = 'HeroUINative.Primitive.TagGroup.RemoveButton';
323
+
324
+ export { Item, ItemLabel, List, RemoveButton, Root };
@@ -0,0 +1,119 @@
1
+ import type {
2
+ PressableRef,
3
+ SlottablePressableProps,
4
+ SlottableTextProps,
5
+ SlottableViewProps,
6
+ TextRef,
7
+ ViewRef,
8
+ } from '../../helpers/internal/types';
9
+
10
+ /** Key type for identifying tags within a TagGroup */
11
+ type TagKey = string | number;
12
+
13
+ /** Selection mode for the TagGroup */
14
+ type SelectionMode = 'none' | 'single' | 'multiple';
15
+
16
+ /**
17
+ * Props for the TagGroup root component.
18
+ * Manages selection state, disabled keys, and remove functionality.
19
+ *
20
+ * @extends SlottableViewProps Inherits view props with asChild support
21
+ */
22
+ type RootProps = SlottableViewProps & {
23
+ /** The type of selection allowed in the tag group @default "none" */
24
+ selectionMode?: SelectionMode;
25
+ /** The currently selected keys (controlled) */
26
+ selectedKeys?: Iterable<TagKey>;
27
+ /** The initial selected keys (uncontrolled) */
28
+ defaultSelectedKeys?: Iterable<TagKey>;
29
+ /** Handler called when the selection changes */
30
+ onSelectionChange?: (keys: Set<TagKey>) => void;
31
+ /** Keys of tags that should be disabled */
32
+ disabledKeys?: Iterable<TagKey>;
33
+ /** Whether the entire tag group is disabled */
34
+ isDisabled?: boolean;
35
+ /** Whether the tag group is in an invalid state (e.g. form validation) */
36
+ isInvalid?: boolean;
37
+ /** Whether the tag group is required (e.g. form validation) */
38
+ isRequired?: boolean;
39
+ /** Handler called when tags are removed */
40
+ onRemove?: (keys: Set<TagKey>) => void;
41
+ };
42
+
43
+ /**
44
+ * Root context value for TagGroup.
45
+ * Derived from RootProps with internal Set representation for key collections.
46
+ */
47
+ type RootContextValue = Required<
48
+ Pick<RootProps, 'selectionMode' | 'isDisabled' | 'isInvalid' | 'isRequired'>
49
+ > &
50
+ Pick<RootProps, 'onRemove'> & {
51
+ selectedKeys: Set<TagKey>;
52
+ disabledKeys: Set<TagKey>;
53
+ onSelectionChange: NonNullable<RootProps['onSelectionChange']>;
54
+ };
55
+
56
+ /**
57
+ * Props for the TagGroup list container component.
58
+ *
59
+ * @extends SlottableViewProps Inherits view props with asChild support
60
+ */
61
+ type ListProps = SlottableViewProps;
62
+
63
+ /**
64
+ * Props for an individual tag item component.
65
+ *
66
+ * @extends SlottablePressableProps Inherits pressable props with asChild support
67
+ */
68
+ type ItemProps = Omit<SlottablePressableProps, 'id'> & {
69
+ /** Unique identifier for this tag */
70
+ id: TagKey;
71
+ /** Whether this specific tag is disabled */
72
+ isDisabled?: boolean;
73
+ };
74
+
75
+ /**
76
+ * Props for the tag item label component.
77
+ * Renders the text content of a tag and provides accessibility labeling.
78
+ *
79
+ * @extends SlottableTextProps Inherits text props with asChild support
80
+ */
81
+ type ItemLabelProps = SlottableTextProps;
82
+
83
+ /**
84
+ * Props for the tag remove button component.
85
+ *
86
+ * @extends SlottablePressableProps Inherits pressable props with asChild support
87
+ */
88
+ type RemoveButtonProps = SlottablePressableProps;
89
+
90
+ /** Reference type for the TagGroup root component */
91
+ type RootRef = ViewRef;
92
+
93
+ /** Reference type for the TagGroup list component */
94
+ type ListRef = ViewRef;
95
+
96
+ /** Reference type for the tag item component */
97
+ type ItemRef = PressableRef;
98
+
99
+ /** Reference type for the tag item label component */
100
+ type ItemLabelRef = TextRef;
101
+
102
+ /** Reference type for the tag remove button component */
103
+ type RemoveButtonRef = PressableRef;
104
+
105
+ export type {
106
+ ItemLabelProps,
107
+ ItemLabelRef,
108
+ ItemProps,
109
+ ItemRef,
110
+ ListProps,
111
+ ListRef,
112
+ RemoveButtonProps,
113
+ RemoveButtonRef,
114
+ RootContextValue,
115
+ RootProps,
116
+ RootRef,
117
+ SelectionMode,
118
+ TagKey,
119
+ };
@@ -0,0 +1,2 @@
1
+ export * from './toast';
2
+ export * from './toast.types';
@@ -0,0 +1,138 @@
1
+ import { createContext, forwardRef, useContext, useId } from 'react';
2
+ import {
3
+ Pressable,
4
+ Text,
5
+ View,
6
+ type GestureResponderEvent,
7
+ } from 'react-native';
8
+ import * as Slot from '../slot';
9
+ import type {
10
+ ActionProps,
11
+ ActionRef,
12
+ CloseProps,
13
+ CloseRef,
14
+ DescriptionProps,
15
+ DescriptionRef,
16
+ RootContext,
17
+ RootProps,
18
+ RootRef,
19
+ TitleProps,
20
+ TitleRef,
21
+ } from './toast.types';
22
+
23
+ const ToastContext = createContext<RootContext | null>(null);
24
+
25
+ const Root = forwardRef<RootRef, RootProps>(
26
+ ({ asChild, id, ...viewProps }, ref) => {
27
+ const generatedId = useId();
28
+ const nativeID = id || generatedId;
29
+
30
+ const Component = asChild ? Slot.View : View;
31
+ return (
32
+ <ToastContext.Provider
33
+ value={{
34
+ nativeID,
35
+ }}
36
+ >
37
+ <Component
38
+ ref={ref}
39
+ role="status"
40
+ aria-live="polite"
41
+ aria-atomic={true}
42
+ nativeID={nativeID}
43
+ {...viewProps}
44
+ />
45
+ </ToastContext.Provider>
46
+ );
47
+ }
48
+ );
49
+
50
+ function useRootContext() {
51
+ const context = useContext(ToastContext);
52
+ if (!context) {
53
+ throw new Error(
54
+ 'Toast compound components cannot be rendered outside the Toast component'
55
+ );
56
+ }
57
+ return context;
58
+ }
59
+
60
+ Root.displayName = 'HeroUINative.Primitive.Toast.Root';
61
+
62
+ // --------------------------------------------------
63
+
64
+ const Title = forwardRef<TitleRef, TitleProps>((props, ref) => {
65
+ const { nativeID } = useRootContext();
66
+ return (
67
+ <Text
68
+ ref={ref}
69
+ role="heading"
70
+ aria-level={3}
71
+ nativeID={`${nativeID}_label`}
72
+ {...props}
73
+ />
74
+ );
75
+ });
76
+
77
+ Title.displayName = 'HeroUINative.Primitive.Toast.Title';
78
+
79
+ // --------------------------------------------------
80
+
81
+ const Description = forwardRef<DescriptionRef, DescriptionProps>(
82
+ (props, ref) => {
83
+ const { nativeID } = useRootContext();
84
+ return <Text ref={ref} nativeID={`${nativeID}_desc`} {...props} />;
85
+ }
86
+ );
87
+
88
+ Description.displayName = 'HeroUINative.Primitive.Toast.Description';
89
+
90
+ // --------------------------------------------------
91
+
92
+ const Action = forwardRef<ActionRef, ActionProps>(
93
+ ({ asChild, altText, disabled = false, ...props }, ref) => {
94
+ const Component = asChild ? Slot.Pressable : Pressable;
95
+ return (
96
+ <Component
97
+ ref={ref}
98
+ role="button"
99
+ aria-disabled={disabled ?? undefined}
100
+ aria-label={altText}
101
+ disabled={disabled ?? undefined}
102
+ {...props}
103
+ />
104
+ );
105
+ }
106
+ );
107
+
108
+ Action.displayName = 'HeroUINative.Primitive.Toast.Action';
109
+
110
+ // --------------------------------------------------
111
+
112
+ const Close = forwardRef<CloseRef, CloseProps>(
113
+ ({ asChild, disabled = false, onPress: onPressProp, ...props }, ref) => {
114
+ function onPress(ev: GestureResponderEvent) {
115
+ if (disabled) return;
116
+ onPressProp?.(ev);
117
+ }
118
+
119
+ const Component = asChild ? Slot.Pressable : Pressable;
120
+ return (
121
+ <Component
122
+ ref={ref}
123
+ role="button"
124
+ aria-label="Close"
125
+ aria-disabled={disabled ?? undefined}
126
+ onPress={onPress}
127
+ disabled={disabled ?? undefined}
128
+ {...props}
129
+ />
130
+ );
131
+ }
132
+ );
133
+
134
+ Close.displayName = 'HeroUINative.Primitive.Toast.Close';
135
+
136
+ // --------------------------------------------------
137
+
138
+ export { Action, Close, Description, Root, Title, useRootContext };