@open-dy/vibecoding-sdk-taro 0.0.1-beta.5 → 0.0.1

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 (527) hide show
  1. package/dist/reference/llms.txt +52 -2
  2. package/dist/reference/sdk-api/build/taro/BuildContext.md +7 -2
  3. package/dist/reference/sdk-api/build/taro/CreateMicroappTaroConfigOptions.md +1 -2
  4. package/dist/reference/sdk-api/build/taro/createMicroappTaroConfig.md +1 -2
  5. package/dist/reference/sdk-api/runtime/CreateMicroappClientOptions.md +7 -2
  6. package/dist/reference/sdk-api/runtime/createMicroappClient.md +7 -2
  7. package/dist/reference/sdk-api/ui/accordion/Accordion.md +114 -0
  8. package/dist/reference/sdk-api/ui/accordion/AccordionContent.md +100 -0
  9. package/dist/reference/sdk-api/ui/accordion/AccordionItem.md +107 -0
  10. package/dist/reference/sdk-api/ui/accordion/AccordionTrigger.md +100 -0
  11. package/dist/reference/sdk-api/ui/accordion/index.md +12 -0
  12. package/dist/reference/sdk-api/ui/alert/Alert.md +106 -0
  13. package/dist/reference/sdk-api/ui/alert/AlertAction.md +100 -0
  14. package/dist/reference/sdk-api/ui/alert/AlertDescription.md +100 -0
  15. package/dist/reference/sdk-api/ui/alert/AlertTitle.md +100 -0
  16. package/dist/reference/sdk-api/ui/alert/index.md +12 -0
  17. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialog.md +58 -0
  18. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogAction.md +107 -0
  19. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogCancel.md +107 -0
  20. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogContent.md +106 -0
  21. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogDescription.md +100 -0
  22. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogFooter.md +100 -0
  23. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogHeader.md +100 -0
  24. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogOverlay.md +100 -0
  25. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogPortal.md +55 -0
  26. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogTitle.md +100 -0
  27. package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogTrigger.md +118 -0
  28. package/dist/reference/sdk-api/ui/alert-dialog/index.md +19 -0
  29. package/dist/reference/sdk-api/ui/aspect-ratio/AspectRatio.md +106 -0
  30. package/dist/reference/sdk-api/ui/aspect-ratio/index.md +9 -0
  31. package/dist/reference/sdk-api/ui/avatar/Avatar.md +106 -0
  32. package/dist/reference/sdk-api/ui/avatar/AvatarBadge.md +100 -0
  33. package/dist/reference/sdk-api/ui/avatar/AvatarFallback.md +100 -0
  34. package/dist/reference/sdk-api/ui/avatar/AvatarGroup.md +100 -0
  35. package/dist/reference/sdk-api/ui/avatar/AvatarGroupCount.md +100 -0
  36. package/dist/reference/sdk-api/ui/avatar/AvatarImage.md +108 -0
  37. package/dist/reference/sdk-api/ui/avatar/index.md +14 -0
  38. package/dist/reference/sdk-api/ui/badge/Badge.md +114 -0
  39. package/dist/reference/sdk-api/ui/badge/badgeVariants.md +70 -0
  40. package/dist/reference/sdk-api/ui/badge/index.md +10 -0
  41. package/dist/reference/sdk-api/ui/button/Button.md +210 -0
  42. package/dist/reference/sdk-api/ui/button/ButtonProps.md +188 -0
  43. package/dist/reference/sdk-api/ui/button/buttonVariants.md +84 -0
  44. package/dist/reference/sdk-api/ui/button/index.md +11 -0
  45. package/dist/reference/sdk-api/ui/button-group/ButtonGroup.md +106 -0
  46. package/dist/reference/sdk-api/ui/button-group/ButtonGroupSeparator.md +106 -0
  47. package/dist/reference/sdk-api/ui/button-group/ButtonGroupText.md +106 -0
  48. package/dist/reference/sdk-api/ui/button-group/buttonGroupVariants.md +70 -0
  49. package/dist/reference/sdk-api/ui/button-group/index.md +12 -0
  50. package/dist/reference/sdk-api/ui/calendar/Calendar.md +144 -0
  51. package/dist/reference/sdk-api/ui/calendar/CalendarProps.md +118 -0
  52. package/dist/reference/sdk-api/ui/calendar/index.md +10 -0
  53. package/dist/reference/sdk-api/ui/card/Card.md +106 -0
  54. package/dist/reference/sdk-api/ui/card/CardAction.md +100 -0
  55. package/dist/reference/sdk-api/ui/card/CardContent.md +100 -0
  56. package/dist/reference/sdk-api/ui/card/CardDescription.md +100 -0
  57. package/dist/reference/sdk-api/ui/card/CardFooter.md +100 -0
  58. package/dist/reference/sdk-api/ui/card/CardHeader.md +100 -0
  59. package/dist/reference/sdk-api/ui/card/CardTitle.md +100 -0
  60. package/dist/reference/sdk-api/ui/card/index.md +15 -0
  61. package/dist/reference/sdk-api/ui/carousel/Carousel.md +108 -0
  62. package/dist/reference/sdk-api/ui/carousel/CarouselContent.md +100 -0
  63. package/dist/reference/sdk-api/ui/carousel/CarouselItem.md +100 -0
  64. package/dist/reference/sdk-api/ui/carousel/CarouselNext.md +219 -0
  65. package/dist/reference/sdk-api/ui/carousel/CarouselPrevious.md +219 -0
  66. package/dist/reference/sdk-api/ui/carousel/index.md +14 -0
  67. package/dist/reference/sdk-api/ui/carousel/useCarousel.md +46 -0
  68. package/dist/reference/sdk-api/ui/checkbox/Checkbox.md +109 -0
  69. package/dist/reference/sdk-api/ui/checkbox/index.md +9 -0
  70. package/dist/reference/sdk-api/ui/collapsible/Collapsible.md +108 -0
  71. package/dist/reference/sdk-api/ui/collapsible/CollapsibleContent.md +100 -0
  72. package/dist/reference/sdk-api/ui/collapsible/CollapsibleTrigger.md +119 -0
  73. package/dist/reference/sdk-api/ui/collapsible/index.md +11 -0
  74. package/dist/reference/sdk-api/ui/combobox/Combobox.md +124 -0
  75. package/dist/reference/sdk-api/ui/combobox/ComboboxChip.md +107 -0
  76. package/dist/reference/sdk-api/ui/combobox/ComboboxChips.md +100 -0
  77. package/dist/reference/sdk-api/ui/combobox/ComboboxChipsInput.md +107 -0
  78. package/dist/reference/sdk-api/ui/combobox/ComboboxCollection.md +100 -0
  79. package/dist/reference/sdk-api/ui/combobox/ComboboxContent.md +106 -0
  80. package/dist/reference/sdk-api/ui/combobox/ComboboxEmpty.md +100 -0
  81. package/dist/reference/sdk-api/ui/combobox/ComboboxGroup.md +100 -0
  82. package/dist/reference/sdk-api/ui/combobox/ComboboxInput.md +113 -0
  83. package/dist/reference/sdk-api/ui/combobox/ComboboxItem.md +106 -0
  84. package/dist/reference/sdk-api/ui/combobox/ComboboxLabel.md +100 -0
  85. package/dist/reference/sdk-api/ui/combobox/ComboboxList.md +105 -0
  86. package/dist/reference/sdk-api/ui/combobox/ComboboxSeparator.md +100 -0
  87. package/dist/reference/sdk-api/ui/combobox/ComboboxTrigger.md +100 -0
  88. package/dist/reference/sdk-api/ui/combobox/ComboboxValue.md +105 -0
  89. package/dist/reference/sdk-api/ui/combobox/index.md +24 -0
  90. package/dist/reference/sdk-api/ui/combobox/useComboboxAnchor.md +43 -0
  91. package/dist/reference/sdk-api/ui/dialog/Dialog.md +58 -0
  92. package/dist/reference/sdk-api/ui/dialog/DialogClose.md +100 -0
  93. package/dist/reference/sdk-api/ui/dialog/DialogContent.md +107 -0
  94. package/dist/reference/sdk-api/ui/dialog/DialogDescription.md +100 -0
  95. package/dist/reference/sdk-api/ui/dialog/DialogFooter.md +100 -0
  96. package/dist/reference/sdk-api/ui/dialog/DialogHeader.md +100 -0
  97. package/dist/reference/sdk-api/ui/dialog/DialogOverlay.md +100 -0
  98. package/dist/reference/sdk-api/ui/dialog/DialogPortal.md +55 -0
  99. package/dist/reference/sdk-api/ui/dialog/DialogTitle.md +100 -0
  100. package/dist/reference/sdk-api/ui/dialog/DialogTrigger.md +106 -0
  101. package/dist/reference/sdk-api/ui/dialog/index.md +18 -0
  102. package/dist/reference/sdk-api/ui/drawer/Drawer.md +59 -0
  103. package/dist/reference/sdk-api/ui/drawer/DrawerClose.md +100 -0
  104. package/dist/reference/sdk-api/ui/drawer/DrawerContent.md +100 -0
  105. package/dist/reference/sdk-api/ui/drawer/DrawerDescription.md +100 -0
  106. package/dist/reference/sdk-api/ui/drawer/DrawerFooter.md +100 -0
  107. package/dist/reference/sdk-api/ui/drawer/DrawerHeader.md +100 -0
  108. package/dist/reference/sdk-api/ui/drawer/DrawerOverlay.md +100 -0
  109. package/dist/reference/sdk-api/ui/drawer/DrawerPortal.md +55 -0
  110. package/dist/reference/sdk-api/ui/drawer/DrawerTitle.md +100 -0
  111. package/dist/reference/sdk-api/ui/drawer/DrawerTrigger.md +100 -0
  112. package/dist/reference/sdk-api/ui/drawer/index.md +18 -0
  113. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenu.md +58 -0
  114. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuCheckboxItem.md +107 -0
  115. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuContent.md +106 -0
  116. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuGroup.md +100 -0
  117. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuItem.md +107 -0
  118. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuLabel.md +106 -0
  119. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuPortal.md +55 -0
  120. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuRadioGroup.md +100 -0
  121. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuRadioItem.md +106 -0
  122. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSeparator.md +100 -0
  123. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuShortcut.md +100 -0
  124. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSub.md +58 -0
  125. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSubContent.md +100 -0
  126. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSubTrigger.md +106 -0
  127. package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuTrigger.md +119 -0
  128. package/dist/reference/sdk-api/ui/dropdown-menu/index.md +23 -0
  129. package/dist/reference/sdk-api/ui/empty/Empty.md +100 -0
  130. package/dist/reference/sdk-api/ui/empty/EmptyContent.md +100 -0
  131. package/dist/reference/sdk-api/ui/empty/EmptyDescription.md +100 -0
  132. package/dist/reference/sdk-api/ui/empty/EmptyHeader.md +100 -0
  133. package/dist/reference/sdk-api/ui/empty/EmptyMedia.md +106 -0
  134. package/dist/reference/sdk-api/ui/empty/EmptyTitle.md +100 -0
  135. package/dist/reference/sdk-api/ui/empty/index.md +14 -0
  136. package/dist/reference/sdk-api/ui/field/Field.md +106 -0
  137. package/dist/reference/sdk-api/ui/field/FieldContent.md +100 -0
  138. package/dist/reference/sdk-api/ui/field/FieldDescription.md +100 -0
  139. package/dist/reference/sdk-api/ui/field/FieldError.md +112 -0
  140. package/dist/reference/sdk-api/ui/field/FieldGroup.md +100 -0
  141. package/dist/reference/sdk-api/ui/field/FieldLabel.md +85 -0
  142. package/dist/reference/sdk-api/ui/field/FieldLegend.md +106 -0
  143. package/dist/reference/sdk-api/ui/field/FieldSeparator.md +105 -0
  144. package/dist/reference/sdk-api/ui/field/FieldSet.md +100 -0
  145. package/dist/reference/sdk-api/ui/field/FieldTitle.md +100 -0
  146. package/dist/reference/sdk-api/ui/field/index.md +18 -0
  147. package/dist/reference/sdk-api/ui/helpers/collectDataIconState.md +66 -0
  148. package/dist/reference/sdk-api/ui/helpers/index.md +9 -0
  149. package/dist/reference/sdk-api/ui/index.md +57 -0
  150. package/dist/reference/sdk-api/ui/input/Input.md +141 -0
  151. package/dist/reference/sdk-api/ui/input/index.md +9 -0
  152. package/dist/reference/sdk-api/ui/input-group/InputGroup.md +100 -0
  153. package/dist/reference/sdk-api/ui/input-group/InputGroupAddon.md +109 -0
  154. package/dist/reference/sdk-api/ui/input-group/InputGroupButton.md +220 -0
  155. package/dist/reference/sdk-api/ui/input-group/InputGroupInput.md +135 -0
  156. package/dist/reference/sdk-api/ui/input-group/InputGroupText.md +100 -0
  157. package/dist/reference/sdk-api/ui/input-group/InputGroupTextarea.md +126 -0
  158. package/dist/reference/sdk-api/ui/input-group/index.md +14 -0
  159. package/dist/reference/sdk-api/ui/input-otp/InputOTP.md +111 -0
  160. package/dist/reference/sdk-api/ui/input-otp/InputOTPGroup.md +100 -0
  161. package/dist/reference/sdk-api/ui/input-otp/InputOTPSeparator.md +100 -0
  162. package/dist/reference/sdk-api/ui/input-otp/InputOTPSlot.md +107 -0
  163. package/dist/reference/sdk-api/ui/input-otp/index.md +12 -0
  164. package/dist/reference/sdk-api/ui/item/Item.md +115 -0
  165. package/dist/reference/sdk-api/ui/item/ItemActions.md +100 -0
  166. package/dist/reference/sdk-api/ui/item/ItemContent.md +100 -0
  167. package/dist/reference/sdk-api/ui/item/ItemDescription.md +100 -0
  168. package/dist/reference/sdk-api/ui/item/ItemFooter.md +100 -0
  169. package/dist/reference/sdk-api/ui/item/ItemGroup.md +100 -0
  170. package/dist/reference/sdk-api/ui/item/ItemHeader.md +100 -0
  171. package/dist/reference/sdk-api/ui/item/ItemMedia.md +106 -0
  172. package/dist/reference/sdk-api/ui/item/ItemSeparator.md +106 -0
  173. package/dist/reference/sdk-api/ui/item/ItemTitle.md +100 -0
  174. package/dist/reference/sdk-api/ui/item/index.md +18 -0
  175. package/dist/reference/sdk-api/ui/label/Label.md +85 -0
  176. package/dist/reference/sdk-api/ui/label/index.md +9 -0
  177. package/dist/reference/sdk-api/ui/menubar/Menubar.md +100 -0
  178. package/dist/reference/sdk-api/ui/menubar/MenubarCheckboxItem.md +111 -0
  179. package/dist/reference/sdk-api/ui/menubar/MenubarContent.md +108 -0
  180. package/dist/reference/sdk-api/ui/menubar/MenubarGroup.md +100 -0
  181. package/dist/reference/sdk-api/ui/menubar/MenubarItem.md +109 -0
  182. package/dist/reference/sdk-api/ui/menubar/MenubarLabel.md +106 -0
  183. package/dist/reference/sdk-api/ui/menubar/MenubarMenu.md +55 -0
  184. package/dist/reference/sdk-api/ui/menubar/MenubarPortal.md +55 -0
  185. package/dist/reference/sdk-api/ui/menubar/MenubarRadioGroup.md +108 -0
  186. package/dist/reference/sdk-api/ui/menubar/MenubarRadioItem.md +110 -0
  187. package/dist/reference/sdk-api/ui/menubar/MenubarSeparator.md +100 -0
  188. package/dist/reference/sdk-api/ui/menubar/MenubarShortcut.md +100 -0
  189. package/dist/reference/sdk-api/ui/menubar/MenubarSub.md +58 -0
  190. package/dist/reference/sdk-api/ui/menubar/MenubarSubContent.md +108 -0
  191. package/dist/reference/sdk-api/ui/menubar/MenubarSubTrigger.md +107 -0
  192. package/dist/reference/sdk-api/ui/menubar/MenubarTrigger.md +100 -0
  193. package/dist/reference/sdk-api/ui/menubar/index.md +24 -0
  194. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenu.md +100 -0
  195. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuContent.md +106 -0
  196. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuIndicator.md +100 -0
  197. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuItem.md +106 -0
  198. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuLink.md +106 -0
  199. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuList.md +100 -0
  200. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuPositioner.md +100 -0
  201. package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuTrigger.md +120 -0
  202. package/dist/reference/sdk-api/ui/navigation-menu/index.md +17 -0
  203. package/dist/reference/sdk-api/ui/navigation-menu/navigationMenuTriggerStyle.md +64 -0
  204. package/dist/reference/sdk-api/ui/pagination/Pagination.md +100 -0
  205. package/dist/reference/sdk-api/ui/pagination/PaginationContent.md +100 -0
  206. package/dist/reference/sdk-api/ui/pagination/PaginationEllipsis.md +100 -0
  207. package/dist/reference/sdk-api/ui/pagination/PaginationItem.md +100 -0
  208. package/dist/reference/sdk-api/ui/pagination/PaginationLink.md +107 -0
  209. package/dist/reference/sdk-api/ui/pagination/PaginationNext.md +121 -0
  210. package/dist/reference/sdk-api/ui/pagination/PaginationPrevious.md +121 -0
  211. package/dist/reference/sdk-api/ui/pagination/index.md +15 -0
  212. package/dist/reference/sdk-api/ui/popover/Popover.md +58 -0
  213. package/dist/reference/sdk-api/ui/popover/PopoverAnchor.md +100 -0
  214. package/dist/reference/sdk-api/ui/popover/PopoverContent.md +108 -0
  215. package/dist/reference/sdk-api/ui/popover/PopoverDescription.md +100 -0
  216. package/dist/reference/sdk-api/ui/popover/PopoverHeader.md +100 -0
  217. package/dist/reference/sdk-api/ui/popover/PopoverTitle.md +100 -0
  218. package/dist/reference/sdk-api/ui/popover/PopoverTrigger.md +119 -0
  219. package/dist/reference/sdk-api/ui/popover/index.md +15 -0
  220. package/dist/reference/sdk-api/ui/portal/Portal.md +55 -0
  221. package/dist/reference/sdk-api/ui/portal/index.md +9 -0
  222. package/dist/reference/sdk-api/ui/progress/Progress.md +109 -0
  223. package/dist/reference/sdk-api/ui/progress/ProgressIndicator.md +107 -0
  224. package/dist/reference/sdk-api/ui/progress/ProgressLabel.md +100 -0
  225. package/dist/reference/sdk-api/ui/progress/ProgressTrack.md +100 -0
  226. package/dist/reference/sdk-api/ui/progress/ProgressValue.md +105 -0
  227. package/dist/reference/sdk-api/ui/progress/index.md +13 -0
  228. package/dist/reference/sdk-api/ui/radio-group/RadioGroup.md +108 -0
  229. package/dist/reference/sdk-api/ui/radio-group/RadioGroupItem.md +107 -0
  230. package/dist/reference/sdk-api/ui/radio-group/index.md +10 -0
  231. package/dist/reference/sdk-api/ui/resizable/ResizableHandle.md +107 -0
  232. package/dist/reference/sdk-api/ui/resizable/ResizablePanel.md +108 -0
  233. package/dist/reference/sdk-api/ui/resizable/ResizablePanelGroup.md +107 -0
  234. package/dist/reference/sdk-api/ui/resizable/index.md +11 -0
  235. package/dist/reference/sdk-api/ui/scroll-area/ScrollArea.md +159 -0
  236. package/dist/reference/sdk-api/ui/scroll-area/ScrollBar.md +106 -0
  237. package/dist/reference/sdk-api/ui/scroll-area/index.md +10 -0
  238. package/dist/reference/sdk-api/ui/select/Select.md +80 -0
  239. package/dist/reference/sdk-api/ui/select/SelectContent.md +106 -0
  240. package/dist/reference/sdk-api/ui/select/SelectGroup.md +100 -0
  241. package/dist/reference/sdk-api/ui/select/SelectItem.md +106 -0
  242. package/dist/reference/sdk-api/ui/select/SelectLabel.md +100 -0
  243. package/dist/reference/sdk-api/ui/select/SelectScrollDownButton.md +100 -0
  244. package/dist/reference/sdk-api/ui/select/SelectScrollUpButton.md +100 -0
  245. package/dist/reference/sdk-api/ui/select/SelectSeparator.md +100 -0
  246. package/dist/reference/sdk-api/ui/select/SelectTrigger.md +106 -0
  247. package/dist/reference/sdk-api/ui/select/SelectValue.md +106 -0
  248. package/dist/reference/sdk-api/ui/select/index.md +18 -0
  249. package/dist/reference/sdk-api/ui/separator/Separator.md +106 -0
  250. package/dist/reference/sdk-api/ui/separator/index.md +9 -0
  251. package/dist/reference/sdk-api/ui/sheet/Sheet.md +58 -0
  252. package/dist/reference/sdk-api/ui/sheet/SheetClose.md +100 -0
  253. package/dist/reference/sdk-api/ui/sheet/SheetContent.md +113 -0
  254. package/dist/reference/sdk-api/ui/sheet/SheetDescription.md +100 -0
  255. package/dist/reference/sdk-api/ui/sheet/SheetFooter.md +100 -0
  256. package/dist/reference/sdk-api/ui/sheet/SheetHeader.md +100 -0
  257. package/dist/reference/sdk-api/ui/sheet/SheetOverlay.md +100 -0
  258. package/dist/reference/sdk-api/ui/sheet/SheetPortal.md +55 -0
  259. package/dist/reference/sdk-api/ui/sheet/SheetTitle.md +100 -0
  260. package/dist/reference/sdk-api/ui/sheet/SheetTrigger.md +100 -0
  261. package/dist/reference/sdk-api/ui/sheet/index.md +18 -0
  262. package/dist/reference/sdk-api/ui/skeleton/Skeleton.md +100 -0
  263. package/dist/reference/sdk-api/ui/skeleton/index.md +9 -0
  264. package/dist/reference/sdk-api/ui/slider/Slider.md +116 -0
  265. package/dist/reference/sdk-api/ui/slider/index.md +9 -0
  266. package/dist/reference/sdk-api/ui/sonner/Toaster.md +43 -0
  267. package/dist/reference/sdk-api/ui/sonner/index.md +10 -0
  268. package/dist/reference/sdk-api/ui/sonner/toast.md +58 -0
  269. package/dist/reference/sdk-api/ui/spinner/Spinner.md +100 -0
  270. package/dist/reference/sdk-api/ui/spinner/index.md +9 -0
  271. package/dist/reference/sdk-api/ui/switch/Switch.md +110 -0
  272. package/dist/reference/sdk-api/ui/switch/index.md +9 -0
  273. package/dist/reference/sdk-api/ui/table/Table.md +100 -0
  274. package/dist/reference/sdk-api/ui/table/TableBody.md +100 -0
  275. package/dist/reference/sdk-api/ui/table/TableCaption.md +100 -0
  276. package/dist/reference/sdk-api/ui/table/TableCell.md +106 -0
  277. package/dist/reference/sdk-api/ui/table/TableFooter.md +100 -0
  278. package/dist/reference/sdk-api/ui/table/TableHead.md +106 -0
  279. package/dist/reference/sdk-api/ui/table/TableHeader.md +100 -0
  280. package/dist/reference/sdk-api/ui/table/TableRow.md +100 -0
  281. package/dist/reference/sdk-api/ui/table/index.md +16 -0
  282. package/dist/reference/sdk-api/ui/tabs/Tabs.md +109 -0
  283. package/dist/reference/sdk-api/ui/tabs/TabsContent.md +106 -0
  284. package/dist/reference/sdk-api/ui/tabs/TabsList.md +106 -0
  285. package/dist/reference/sdk-api/ui/tabs/TabsTrigger.md +107 -0
  286. package/dist/reference/sdk-api/ui/tabs/index.md +13 -0
  287. package/dist/reference/sdk-api/ui/tabs/tabsListVariants.md +70 -0
  288. package/dist/reference/sdk-api/ui/textarea/Textarea.md +126 -0
  289. package/dist/reference/sdk-api/ui/textarea/index.md +9 -0
  290. package/dist/reference/sdk-api/ui/toggle/Toggle.md +118 -0
  291. package/dist/reference/sdk-api/ui/toggle/index.md +10 -0
  292. package/dist/reference/sdk-api/ui/toggle/toggleVariants.md +71 -0
  293. package/dist/reference/sdk-api/ui/toggle-group/ToggleGroup.md +122 -0
  294. package/dist/reference/sdk-api/ui/toggle-group/ToggleGroupItem.md +116 -0
  295. package/dist/reference/sdk-api/ui/toggle-group/index.md +10 -0
  296. package/dist/reference/sdk-api.json +73810 -2
  297. package/dist/reference/sdk-api.md +50 -2
  298. package/dist/ui/accordion.d.ts +48 -0
  299. package/dist/ui/accordion.js +40 -0
  300. package/dist/ui/accordion.js.map +1 -1
  301. package/dist/ui/alert-dialog.d.ts +123 -0
  302. package/dist/ui/alert-dialog.js +114 -0
  303. package/dist/ui/alert-dialog.js.map +1 -1
  304. package/dist/ui/alert.d.ts +41 -0
  305. package/dist/ui/alert.js +41 -0
  306. package/dist/ui/alert.js.map +1 -1
  307. package/dist/ui/aspect-ratio.d.ts +11 -0
  308. package/dist/ui/aspect-ratio.js +10 -0
  309. package/dist/ui/aspect-ratio.js.map +1 -1
  310. package/dist/ui/avatar.d.ts +65 -0
  311. package/dist/ui/avatar.js +63 -0
  312. package/dist/ui/avatar.js.map +1 -1
  313. package/dist/ui/badge.d.ts +22 -0
  314. package/dist/ui/badge.js +22 -0
  315. package/dist/ui/badge.js.map +1 -1
  316. package/dist/ui/button-group.d.ts +45 -0
  317. package/dist/ui/button-group.js +43 -0
  318. package/dist/ui/button-group.js.map +1 -1
  319. package/dist/ui/button.d.ts +52 -0
  320. package/dist/ui/button.js +30 -0
  321. package/dist/ui/button.js.map +1 -1
  322. package/dist/ui/calendar.d.ts +44 -0
  323. package/dist/ui/calendar.js +19 -0
  324. package/dist/ui/calendar.js.map +1 -1
  325. package/dist/ui/card.d.ts +71 -0
  326. package/dist/ui/card.js +70 -0
  327. package/dist/ui/card.js.map +1 -1
  328. package/dist/ui/carousel.d.ts +71 -0
  329. package/dist/ui/carousel.js +66 -0
  330. package/dist/ui/carousel.js.map +1 -1
  331. package/dist/ui/checkbox.d.ts +14 -0
  332. package/dist/ui/checkbox.js +10 -0
  333. package/dist/ui/checkbox.js.map +1 -1
  334. package/dist/ui/collapsible.d.ts +37 -0
  335. package/dist/ui/collapsible.js +30 -0
  336. package/dist/ui/collapsible.js.map +1 -1
  337. package/dist/ui/combobox.d.ts +190 -0
  338. package/dist/ui/combobox.js +167 -0
  339. package/dist/ui/combobox.js.map +1 -1
  340. package/dist/ui/dialog.d.ts +109 -0
  341. package/dist/ui/dialog.js +100 -0
  342. package/dist/ui/dialog.js.map +1 -1
  343. package/dist/ui/drawer.d.ts +106 -0
  344. package/dist/ui/drawer.js +100 -0
  345. package/dist/ui/drawer.js.map +1 -1
  346. package/dist/ui/dropdown-menu.d.ts +171 -0
  347. package/dist/ui/dropdown-menu.js +150 -0
  348. package/dist/ui/dropdown-menu.js.map +1 -1
  349. package/dist/ui/empty.d.ts +61 -0
  350. package/dist/ui/empty.js +61 -0
  351. package/dist/ui/empty.js.map +1 -1
  352. package/dist/ui/field.d.ts +105 -0
  353. package/dist/ui/field.js +101 -0
  354. package/dist/ui/field.js.map +1 -1
  355. package/dist/ui/helpers.d.ts +11 -0
  356. package/dist/ui/helpers.js +11 -0
  357. package/dist/ui/helpers.js.map +1 -1
  358. package/dist/ui/input-group.d.ts +65 -0
  359. package/dist/ui/input-group.js +65 -0
  360. package/dist/ui/input-group.js.map +1 -1
  361. package/dist/ui/input-otp.d.ts +48 -0
  362. package/dist/ui/input-otp.js +40 -0
  363. package/dist/ui/input-otp.js.map +1 -1
  364. package/dist/ui/input.d.ts +24 -2
  365. package/dist/ui/input.js +20 -0
  366. package/dist/ui/input.js.map +1 -1
  367. package/dist/ui/item.d.ts +103 -0
  368. package/dist/ui/item.js +103 -0
  369. package/dist/ui/item.js.map +1 -1
  370. package/dist/ui/label.d.ts +10 -0
  371. package/dist/ui/label.js +10 -0
  372. package/dist/ui/label.js.map +1 -1
  373. package/dist/ui/menubar.d.ts +193 -0
  374. package/dist/ui/menubar.js +160 -0
  375. package/dist/ui/menubar.js.map +1 -1
  376. package/dist/ui/navigation-menu.d.ts +98 -0
  377. package/dist/ui/navigation-menu.js +90 -0
  378. package/dist/ui/navigation-menu.js.map +1 -1
  379. package/dist/ui/pagination.d.ts +76 -0
  380. package/dist/ui/pagination.js +73 -0
  381. package/dist/ui/pagination.js.map +1 -1
  382. package/dist/ui/popover.d.ts +81 -0
  383. package/dist/ui/popover.js +70 -0
  384. package/dist/ui/popover.js.map +1 -1
  385. package/dist/ui/portal.d.ts +11 -0
  386. package/dist/ui/portal.js +10 -0
  387. package/dist/ui/portal.js.map +1 -1
  388. package/dist/ui/progress.d.ts +53 -26
  389. package/dist/ui/progress.js +50 -26
  390. package/dist/ui/progress.js.map +1 -1
  391. package/dist/ui/radio-group.d.ts +25 -0
  392. package/dist/ui/radio-group.js +20 -0
  393. package/dist/ui/radio-group.js.map +1 -1
  394. package/dist/ui/resizable.d.ts +37 -0
  395. package/dist/ui/resizable.js +30 -0
  396. package/dist/ui/resizable.js.map +1 -1
  397. package/dist/ui/scroll-area.d.ts +22 -0
  398. package/dist/ui/scroll-area.js +21 -0
  399. package/dist/ui/scroll-area.js.map +1 -1
  400. package/dist/ui/select.d.ts +122 -0
  401. package/dist/ui/select.js +108 -0
  402. package/dist/ui/select.js.map +1 -1
  403. package/dist/ui/separator.d.ts +11 -0
  404. package/dist/ui/separator.js +10 -0
  405. package/dist/ui/separator.js.map +1 -1
  406. package/dist/ui/sheet.d.ts +107 -0
  407. package/dist/ui/sheet.js +101 -0
  408. package/dist/ui/sheet.js.map +1 -1
  409. package/dist/ui/skeleton.d.ts +10 -0
  410. package/dist/ui/skeleton.js +10 -0
  411. package/dist/ui/skeleton.js.map +1 -1
  412. package/dist/ui/slider.d.ts +21 -0
  413. package/dist/ui/slider.js +14 -0
  414. package/dist/ui/slider.js.map +1 -1
  415. package/dist/ui/sonner.d.ts +23 -0
  416. package/dist/ui/sonner.js +21 -0
  417. package/dist/ui/sonner.js.map +1 -1
  418. package/dist/ui/spinner.d.ts +10 -0
  419. package/dist/ui/spinner.js +10 -0
  420. package/dist/ui/spinner.js.map +1 -1
  421. package/dist/ui/switch.d.ts +15 -0
  422. package/dist/ui/switch.js +10 -0
  423. package/dist/ui/switch.js.map +1 -1
  424. package/dist/ui/table.d.ts +81 -0
  425. package/dist/ui/table.js +80 -0
  426. package/dist/ui/table.js.map +1 -1
  427. package/dist/ui/tabs.d.ts +59 -0
  428. package/dist/ui/tabs.js +51 -0
  429. package/dist/ui/tabs.js.map +1 -1
  430. package/dist/ui/textarea.d.ts +13 -0
  431. package/dist/ui/textarea.js +13 -0
  432. package/dist/ui/textarea.js.map +1 -1
  433. package/dist/ui/toggle-group.d.ts +34 -0
  434. package/dist/ui/toggle-group.js +24 -0
  435. package/dist/ui/toggle-group.js.map +1 -1
  436. package/dist/ui/toggle.d.ts +28 -0
  437. package/dist/ui/toggle.js +24 -0
  438. package/dist/ui/toggle.js.map +1 -1
  439. package/package.json +5 -3
  440. package/release-provenance.json +15 -0
  441. package/src/adapters/interest-card/eslint/eslint-plugin-custom-navigation.mjs +290 -0
  442. package/src/adapters/interest-card/eslint/taro.mjs +55 -0
  443. package/src/adapters/interest-card/runtime/microapp.ts +11 -0
  444. package/src/adapters/interest-card/types/taro.d.ts +28 -0
  445. package/src/build/config-overrides.ts +39 -0
  446. package/src/build/index.ts +5 -0
  447. package/src/build/plugins/app-config.ts +47 -0
  448. package/src/build/plugins/depend-card/analyze.ts +122 -0
  449. package/src/build/plugins/depend-card/source.ts +97 -0
  450. package/src/build/plugins/vite-depend-card.ts +168 -0
  451. package/src/build/plugins/vite-image-asset-import.ts +178 -0
  452. package/src/build/plugins/vite-inline-json.ts +149 -0
  453. package/src/build/plugins/vite-taro-source-location.ts +224 -0
  454. package/src/build/plugins/vite-tt-components-entry.ts +33 -0
  455. package/src/build/taro.ts +830 -0
  456. package/src/components/miniapp-open-card.ts +49 -0
  457. package/src/components/native-miniapp-open-card.ts +7 -0
  458. package/src/eslint/eslint-plugin-microapp-pages.mjs +659 -0
  459. package/src/eslint/server.mjs +69 -0
  460. package/src/eslint/taro.mjs +553 -0
  461. package/src/index.ts +2 -0
  462. package/src/internal/runtime/douyin-open-button.d.ts +29 -0
  463. package/src/internal/runtime/iframe-auth/identity.ts +236 -0
  464. package/src/internal/runtime/iframe-auth/index.ts +2 -0
  465. package/src/internal/runtime/iframe-auth/sync.ts +37 -0
  466. package/src/internal/vendor-modules.d.ts +8 -0
  467. package/src/lib/measure.ts +115 -0
  468. package/src/lib/platform.ts +11 -0
  469. package/src/lib/utils.ts +6 -0
  470. package/src/runtime/client.ts +246 -0
  471. package/src/runtime/default-client.ts +26 -0
  472. package/src/runtime/default-iframe-auth.ts +13 -0
  473. package/src/runtime/douyin-container-request.ts +367 -0
  474. package/src/runtime/douyin-login-request.ts +514 -0
  475. package/src/runtime/globals.d.ts +342 -0
  476. package/src/runtime/index.ts +4 -0
  477. package/src/runtime/network-url.ts +63 -0
  478. package/src/ui/accordion.tsx +226 -0
  479. package/src/ui/alert-dialog.tsx +407 -0
  480. package/src/ui/alert.tsx +149 -0
  481. package/src/ui/aspect-ratio.tsx +37 -0
  482. package/src/ui/avatar.tsx +238 -0
  483. package/src/ui/badge.tsx +77 -0
  484. package/src/ui/button-group.tsx +173 -0
  485. package/src/ui/button.tsx +215 -0
  486. package/src/ui/calendar.tsx +353 -0
  487. package/src/ui/card.tsx +217 -0
  488. package/src/ui/carousel.tsx +259 -0
  489. package/src/ui/checkbox.tsx +62 -0
  490. package/src/ui/collapsible.tsx +148 -0
  491. package/src/ui/combobox.tsx +650 -0
  492. package/src/ui/dialog.tsx +290 -0
  493. package/src/ui/drawer.tsx +272 -0
  494. package/src/ui/dropdown-menu.tsx +547 -0
  495. package/src/ui/empty.tsx +166 -0
  496. package/src/ui/field.tsx +427 -0
  497. package/src/ui/helpers.tsx +39 -0
  498. package/src/ui/index.ts +47 -0
  499. package/src/ui/input-group.tsx +320 -0
  500. package/src/ui/input-otp.tsx +189 -0
  501. package/src/ui/input.tsx +60 -0
  502. package/src/ui/item.tsx +338 -0
  503. package/src/ui/label.tsx +31 -0
  504. package/src/ui/menubar.tsx +835 -0
  505. package/src/ui/navigation-menu.tsx +341 -0
  506. package/src/ui/pagination.tsx +195 -0
  507. package/src/ui/popover.tsx +363 -0
  508. package/src/ui/portal.tsx +31 -0
  509. package/src/ui/progress.tsx +182 -0
  510. package/src/ui/radio-group.tsx +111 -0
  511. package/src/ui/resizable.tsx +410 -0
  512. package/src/ui/scroll-area.tsx +102 -0
  513. package/src/ui/select.tsx +471 -0
  514. package/src/ui/separator.tsx +37 -0
  515. package/src/ui/sheet.tsx +289 -0
  516. package/src/ui/skeleton.tsx +25 -0
  517. package/src/ui/slider.tsx +176 -0
  518. package/src/ui/sonner.tsx +40 -0
  519. package/src/ui/spinner.tsx +23 -0
  520. package/src/ui/switch.tsx +94 -0
  521. package/src/ui/table.tsx +240 -0
  522. package/src/ui/tabs.tsx +233 -0
  523. package/src/ui/tailwind.css +2 -0
  524. package/src/ui/textarea.tsx +49 -0
  525. package/src/ui/theme.css +234 -0
  526. package/src/ui/toggle-group.tsx +215 -0
  527. package/src/ui/toggle.tsx +113 -0
@@ -0,0 +1,39 @@
1
+ import type { UserConfigExport } from '@tarojs/cli'
2
+ import type { BuildContext, CreateMicroappTaroConfigOptions } from './taro'
3
+
4
+ /**
5
+ * @desc 递归合并 Taro 配置,数组按顺序拼接。
6
+ * @params {any} base 基础配置。
7
+ * @params {any} override 覆盖配置。
8
+ * @return {any} 合并后的配置。
9
+ * @example mergeConfigValue({ plugins: ['a'] }, { plugins: ['b'] })
10
+ */
11
+ export function mergeConfigValue(base: any, override: any): any {
12
+ if (Array.isArray(base) && Array.isArray(override)) return [...base, ...override]
13
+ if (base && override && typeof base === 'object' && typeof override === 'object') {
14
+ const result = { ...base }
15
+ for (const [key, value] of Object.entries(override)) {
16
+ result[key] = key in result ? mergeConfigValue(result[key], value) : value
17
+ }
18
+ return result
19
+ }
20
+ return override
21
+ }
22
+
23
+ /**
24
+ * @desc 将对象或函数形式的覆盖项应用到 Taro 配置。
25
+ * @params {UserConfigExport} config 当前配置。
26
+ * @params {CreateMicroappTaroConfigOptions['overrides']} overrides 覆盖项。
27
+ * @params {BuildContext} ctx 构建上下文。
28
+ * @return {UserConfigExport} 应用覆盖后的配置。
29
+ * @example applyConfigOverrides(config, { h5: { publicPath: '/' } }, ctx)
30
+ */
31
+ export function applyConfigOverrides(
32
+ config: UserConfigExport,
33
+ overrides: CreateMicroappTaroConfigOptions['overrides'],
34
+ ctx: BuildContext,
35
+ ): UserConfigExport {
36
+ if (!overrides) return config
37
+ if (typeof overrides === 'function') return overrides(config, ctx) ?? config
38
+ return mergeConfigValue(config, overrides) as UserConfigExport
39
+ }
@@ -0,0 +1,5 @@
1
+ export {
2
+ createMicroappTaroConfig,
3
+ type BuildContext,
4
+ type CreateMicroappTaroConfigOptions,
5
+ } from './taro'
@@ -0,0 +1,47 @@
1
+ import path from 'path';
2
+
3
+ type AppConfigPluginContext = {
4
+ modifyAppConfig: (
5
+ modifier: (payload: { appConfig: Record<string, any> }) => Record<string, any>,
6
+ ) => void;
7
+ }
8
+
9
+ const withPreviewBasePath = (iconPath: string, previewBasePath: string) => {
10
+ if (!previewBasePath) {
11
+ return iconPath
12
+ }
13
+ const previewPath = path.join(previewBasePath, iconPath)
14
+ if (previewPath.startsWith('./')) {
15
+ return previewPath
16
+ }
17
+
18
+ if (previewPath.startsWith('/')) {
19
+ return `.${previewPath}`
20
+ }
21
+
22
+ return `./${previewPath}`
23
+ }
24
+
25
+ export default function appConfigPlugin(
26
+ ctx: AppConfigPluginContext,
27
+ options: { previewBasePath?: string } = {},
28
+ ) {
29
+ const previewBasePath = options.previewBasePath ?? ''
30
+ ctx.modifyAppConfig(({ appConfig }) => {
31
+ if (!(process.env.TARO_ENV === 'h5' && process.env.NODE_ENV === 'development')) {
32
+ return appConfig
33
+ }
34
+ if (Array.isArray(appConfig.tabBar?.list) && appConfig.tabBar.list.length > 0) {
35
+ const list = appConfig.tabBar.list;
36
+ list.forEach(item => {
37
+ if (item.iconPath) {
38
+ item.iconPath = withPreviewBasePath(item.iconPath, previewBasePath)
39
+ }
40
+ if (item.selectedIconPath) {
41
+ item.selectedIconPath = withPreviewBasePath(item.selectedIconPath, previewBasePath)
42
+ }
43
+ })
44
+ }
45
+ return appConfig
46
+ });
47
+ }
@@ -0,0 +1,122 @@
1
+ import { parse } from '@babel/parser'
2
+ import traverseModule from '@babel/traverse'
3
+
4
+ const traverse = (traverseModule as unknown as { default?: typeof traverseModule }).default ?? traverseModule
5
+ const cardComponentModules = new Set([
6
+ '@tarojs/components',
7
+ '@open-dy/vibecoding-sdk-taro/components/miniapp-open-card',
8
+ ])
9
+
10
+ /** @description 卡片原生标签,或尚待解析的模块导出引用。 */
11
+ export type CardReference = true | { source: string; name: string }
12
+ /** @description 单个源文件的紧凑分析结果;不保留 AST 和 Babel 作用域。 */
13
+ export interface CardModule {
14
+ uses: CardReference[]
15
+ exports: Map<string, CardReference | undefined>
16
+ stars: string[]
17
+ }
18
+
19
+ /**
20
+ * @desc 判断引用是否直接来自已支持的卡片组件入口。
21
+ * @params {CardReference} reference 组件引用。
22
+ * @return {boolean} 是否直接指向卡片。
23
+ * @example isDirectCard({ source: '@tarojs/components', name: 'MiniappOpenCard' })
24
+ */
25
+ export function isDirectCard(reference: CardReference) {
26
+ return reference === true ||
27
+ (cardComponentModules.has(reference.source) && reference.name === 'MiniappOpenCard')
28
+ }
29
+
30
+ /**
31
+ * @desc 一次解析并收集 JSX、React.createElement 和运行时导出之间的引用。
32
+ * 忽略类型导出及被遮蔽或重新赋值的局部别名;语法错误向调用方抛出。
33
+ * @params {string} source 源码内容。
34
+ * @params {string} filename 用于选择 TypeScript 和 JSX 语法的文件名。
35
+ * @return {CardModule} 使用点和导出关系,不递归读取其他文件。
36
+ * @example analyzeCardModule('export const Page = () => <miniapp-open-card />', 'page.tsx')
37
+ */
38
+ export function analyzeCardModule(source: string, filename: string): CardModule {
39
+ const ast = parse(source, {
40
+ sourceType: 'unambiguous',
41
+ plugins: [...(/\.[cm]?ts$/.test(filename) ? [] : ['jsx' as const]),
42
+ ...(/\.[cm]?tsx?$/.test(filename) ? ['typescript' as const] : []), 'decorators-legacy'],
43
+ })
44
+ const result: CardModule = { uses: [], exports: new Map(), stars: [] }
45
+
46
+ /** @description 按词法绑定追踪导入及不可变别名,避免将同名业务组件识别为卡片。 */
47
+ function reference(node, scope, seen = new Set(), allowUnbound = false): CardReference | undefined {
48
+ if (!node) return
49
+ if (node.type === 'StringLiteral') return node.value === 'miniapp-open-card' ? true : undefined
50
+ if (node.type === 'JSXMemberExpression' || node.type === 'MemberExpression') {
51
+ const binding = scope.getBinding(node.object.name)
52
+ const name = node.computed ? node.property.value : node.property.name
53
+ if (typeof name === 'string' && binding?.path.isImportNamespaceSpecifier() &&
54
+ binding.path.parent.importKind !== 'type') {
55
+ return { source: binding.path.parent.source.value, name }
56
+ }
57
+ return
58
+ }
59
+ if (!['Identifier', 'JSXIdentifier'].includes(node.type)) return
60
+ if (node.name === 'miniapp-open-card') return true
61
+ const binding = scope.getBinding(node.name)
62
+ if (!binding) return allowUnbound && node.name === 'MiniappOpenCard' ? true : undefined
63
+ if (seen.has(binding)) return
64
+ seen.add(binding)
65
+ if (binding.path.isImportSpecifier() || binding.path.isImportDefaultSpecifier()) {
66
+ if (binding.path.parent.importKind !== 'type' && binding.path.node.importKind !== 'type') {
67
+ return {
68
+ source: binding.path.parent.source.value,
69
+ name: binding.path.isImportDefaultSpecifier() ? 'default' :
70
+ (binding.path.node.imported.name ?? binding.path.node.imported.value),
71
+ }
72
+ }
73
+ } else if (binding.path.isVariableDeclarator() && binding.constant) {
74
+ return reference(binding.path.node.init, binding.path.scope, seen, allowUnbound)
75
+ }
76
+ }
77
+
78
+ /** @description 记录真实渲染点;仅导入或转导出不会被视为使用。 */
79
+ function use(node, scope) {
80
+ const target = reference(node, scope, new Set(), true)
81
+ if (target) result.uses.push(target)
82
+ }
83
+
84
+ traverse(ast, {
85
+ JSXOpeningElement(p) { use(p.node.name, p.scope) },
86
+ CallExpression(p) {
87
+ const callee = p.node.callee
88
+ const binding = callee.type === 'Identifier' ? p.scope.getBinding(callee.name) : null
89
+ const importedCreateElement = binding?.path.isImportSpecifier() &&
90
+ binding.path.parent.source.value === 'react' &&
91
+ binding.path.node.imported.name === 'createElement'
92
+ const reactBinding = callee.type === 'MemberExpression' ? p.scope.getBinding(callee.object.name) : null
93
+ const reactCreateElement = callee.type === 'MemberExpression' &&
94
+ callee.property.name === 'createElement' &&
95
+ ((reactBinding?.path.isImportDefaultSpecifier() || reactBinding?.path.isImportNamespaceSpecifier()) &&
96
+ reactBinding.path.parent.source.value === 'react')
97
+ if (importedCreateElement || reactCreateElement) use(p.node.arguments[0], p.scope)
98
+ },
99
+ ExportNamedDeclaration(p) {
100
+ if (p.node.exportKind === 'type') return
101
+ for (const specifier of p.node.specifiers) {
102
+ if (specifier.type !== 'ExportSpecifier' || specifier.exportKind === 'type') continue
103
+ const exported = specifier.exported.name ?? specifier.exported.value
104
+ result.exports.set(exported, p.node.source
105
+ ? { source: p.node.source.value, name: specifier.local.name }
106
+ : reference(specifier.local, p.scope))
107
+ }
108
+ if (p.node.declaration) {
109
+ for (const [name, identifier] of Object.entries(p.getBindingIdentifiers())) {
110
+ result.exports.set(name, reference(identifier, p.scope))
111
+ }
112
+ }
113
+ },
114
+ ExportDefaultDeclaration(p) {
115
+ result.exports.set('default', reference(p.node.declaration, p.scope))
116
+ },
117
+ ExportAllDeclaration(p) {
118
+ if (p.node.exportKind !== 'type') result.stars.push(p.node.source.value)
119
+ },
120
+ })
121
+ return result
122
+ }
@@ -0,0 +1,97 @@
1
+ import fs from 'node:fs'
2
+ import path from 'node:path'
3
+ import { analyzeCardModule, isDirectCard } from './analyze'
4
+ import type { CardModule, CardReference } from './analyze'
5
+
6
+ const extensions = ['.ts', '.tsx', '.js', '.jsx', '.mts', '.cts', '.mjs', '.cjs']
7
+
8
+ /**
9
+ * @desc 创建仅扫描 sourceDir 的检测器,按源码内容缓存解析结果,不访问依赖目录。
10
+ * 每次扫描重新计算导出关系,使转导出修改、新增和删除立即生效;循环引用不会无限递归。
11
+ * @return {Function} 返回卡片依赖标记和文件、目录监听列表的扫描函数。
12
+ * @example const scan = createCardSourceScanner(); scan('/workspace/project/src')
13
+ */
14
+ export function createCardSourceScanner() {
15
+ const cache = new Map<string, { source: string; module: CardModule }>()
16
+ return (sourceDir: string) => {
17
+ const files: string[] = []
18
+ const directories: string[] = []
19
+ const modules = new Map<string, CardModule>()
20
+
21
+ /** @description 仅遍历真实业务源码;符号链接、测试、配置及声明文件不进入解析范围。 */
22
+ function visit(directory: string) {
23
+ if (!fs.existsSync(directory)) return
24
+ directories.push(directory)
25
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
26
+ const file = path.join(directory, entry.name)
27
+ if (entry.isDirectory()) {
28
+ if (!['node_modules', '__tests__', '__mocks__'].includes(entry.name)) visit(file)
29
+ } else if (entry.isFile() && /\.[cm]?[jt]sx?$/.test(entry.name) &&
30
+ !/\.(?:d|test|spec|config)\.[cm]?[jt]sx?$/.test(entry.name)) {
31
+ files.push(file)
32
+ try {
33
+ const source = fs.readFileSync(file, 'utf8')
34
+ let cached = cache.get(file)
35
+ if (!cached || cached.source !== source) {
36
+ cached = { source, module: analyzeCardModule(source, file) }
37
+ cache.set(file, cached)
38
+ }
39
+ modules.set(file, cached.module)
40
+ } catch (error: any) {
41
+ throw new Error(`Cannot determine isDependCard from ${file}: ${error.message}`)
42
+ }
43
+ }
44
+ }
45
+ }
46
+ visit(path.resolve(sourceDir))
47
+ for (const file of cache.keys()) if (!modules.has(file)) cache.delete(file)
48
+
49
+ /** @description 从已扫描文件表解析相对导入;不读取 src 之外的文件,也不解析 npm 包。 */
50
+ function resolveLocal(importer: string, source: string) {
51
+ if (!source.startsWith('./') && !source.startsWith('../')) return
52
+ const target = path.resolve(path.dirname(importer), source)
53
+ const candidates = [target]
54
+ if (/\.[cm]?jsx?$/.test(target)) {
55
+ candidates.push(target.replace(/\.js$/, '.ts'), target.replace(/\.jsx?$/, '.tsx'),
56
+ target.replace(/\.mjs$/, '.mts'), target.replace(/\.cjs$/, '.cts'))
57
+ }
58
+ candidates.push(...extensions.map(ext => target + ext),
59
+ ...extensions.map(ext => path.join(target, 'index' + ext)))
60
+ return candidates.find(candidate => modules.has(candidate))
61
+ }
62
+
63
+ const resolved = new Map<string, boolean>()
64
+ /** @description 迭代追踪命名、默认及星号转导出,按文件和导出名去重并缓存查询结果。 */
65
+ function isCard(importer: string, reference: CardReference) {
66
+ if (isDirectCard(reference)) return true
67
+ if (reference === true) return true
68
+ const root = resolveLocal(importer, reference.source)
69
+ if (!root) return false
70
+ const key = `${root}\0${reference.name}`
71
+ if (resolved.has(key)) return resolved.get(key)!
72
+ const queue = [{ file: root, name: reference.name }]
73
+ const seen = new Set<string>()
74
+ let found = false
75
+ for (let index = 0; index < queue.length && !found; index++) {
76
+ const { file, name } = queue[index]
77
+ const itemKey = `${file}\0${name}`
78
+ if (seen.has(itemKey)) continue
79
+ seen.add(itemKey)
80
+ const module = modules.get(file)!
81
+ const target = module.exports.get(name)
82
+ const next = module.exports.has(name) ? (target ? [target] : []) :
83
+ (name === 'default' ? [] : module.stars.map(source => ({ source, name })))
84
+ for (const ref of next) {
85
+ if (isDirectCard(ref)) { found = true; break }
86
+ if (ref === true) continue
87
+ const dependency = resolveLocal(file, ref.source)
88
+ if (dependency) queue.push({ file: dependency, name: ref.name })
89
+ }
90
+ }
91
+ resolved.set(key, found)
92
+ return found
93
+ }
94
+ const depends = files.some(file => modules.get(file)!.uses.some(ref => isCard(file, ref)))
95
+ return { depends, files, directories }
96
+ }
97
+ }
@@ -0,0 +1,168 @@
1
+ import path from 'node:path'
2
+ import type { Plugin } from 'vite'
3
+ import { analyzeCardModule, isDirectCard } from './depend-card/analyze'
4
+ import { createCardSourceScanner } from './depend-card/source'
5
+
6
+ /**
7
+ * @desc 检测单个文件中直接来自卡片入口的 JSX 或 React.createElement 用法。
8
+ * @params {string} source 待分析的源码。
9
+ * @params {string} filename 用于选择 TypeScript、JSX 语法的文件名。
10
+ * @return {boolean} 是否检测到卡片组件使用;跨文件转导出由 scanSource 处理。
11
+ * @example usesCard('export const Page = () => <miniapp-open-card />', 'page.tsx')
12
+ */
13
+ export function usesCard(source: string, filename: string) {
14
+ return analyzeCardModule(source, filename).uses.some(isDirectCard)
15
+ }
16
+
17
+ /**
18
+ * @desc 扫描业务源码并追踪源码内的相对路径转导出,跳过依赖、测试、mock、声明和配置文件。
19
+ * @params {string} sourceDir Taro 编译上下文提供的源码目录,可为自定义 sourceRoot。
20
+ * @return {{ depends: boolean, files: string[], directories: string[] }} 检测结果及监听路径。
21
+ * @example scanSource('/workspace/project/src')
22
+ */
23
+ export function scanSource(sourceDir: string) {
24
+ return createCardSourceScanner()(sourceDir)
25
+ }
26
+
27
+ interface TaroCompilerContext {
28
+ /** @description Taro 解析后的源码目录,避免插件自行假设工程使用 src 目录。 */
29
+ sourceDir: string
30
+ /** @description Taro 共享的应用编译信息,修改后供后续入口及配置产物生成使用。 */
31
+ app: {
32
+ /** @description 应用配置对象,插件仅更新其中的卡片依赖标记。 */
33
+ config: {
34
+ /** @description 是否依赖卡片;显式布尔值优先,未配置时由源码扫描补齐。 */
35
+ isDependCard?: boolean
36
+ }
37
+ /** @description 应用入口脚本路径,用于识别并使序列化配置的入口模块缓存失效。 */
38
+ scriptPath: string
39
+ }
40
+ }
41
+
42
+ /**
43
+ * @desc 创建自动维护 isDependCard 的 Vite 插件,从 Taro 模块 metadata 获取编译上下文。
44
+ * 显式布尔配置优先;未配置时在入口序列化前扫描,开发期间复用未变化文件的解析结果。
45
+ * @return {Plugin} 注册到 compiler.vitePlugins 的插件实例。
46
+ * @example viteDependCardPlugin()
47
+ */
48
+ export function viteDependCardPlugin(): Plugin {
49
+ let sourceDir: string
50
+ let viteCompilerContext: TaroCompilerContext
51
+ const scan = createCardSourceScanner()
52
+ const settings = new WeakMap<TaroCompilerContext['app']['config'], {
53
+ explicit: boolean | undefined
54
+ lastValue: boolean
55
+ }>()
56
+ /**
57
+ * @description 重新扫描源码并更新共享应用配置,只记录依赖标记是否变化。
58
+ * @returns {{ depends: boolean, files: string[], directories: string[], changed: boolean }} 扫描结果及变化标记。
59
+ */
60
+ const update = () => {
61
+ const config = viteCompilerContext.app.config
62
+ const previous = settings.get(config)
63
+ // Do not mistake our own write on a previous watch pass for user configuration.
64
+ const explicit = previous && config.isDependCard === previous.lastValue
65
+ ? previous.explicit
66
+ : (typeof config.isDependCard === 'boolean' ? config.isDependCard : undefined)
67
+ const result = explicit === undefined ? scan(sourceDir) : {
68
+ depends: explicit, files: [], directories: [],
69
+ }
70
+ const changed = config.isDependCard !== result.depends
71
+ config.isDependCard = result.depends
72
+ settings.set(config, { explicit, lastValue: result.depends })
73
+ return { ...result, changed }
74
+ }
75
+ /**
76
+ * @description 识别应用入口及其带 entry-loader 查询参数的虚拟模块。
77
+ * @param {string} id Vite 或 Rollup 提供的模块标识。
78
+ * @returns {boolean} 是否为需要刷新配置的应用入口模块。
79
+ */
80
+ const isAppModule = (id) => id.includes(viteCompilerContext.app.scriptPath)
81
+ return {
82
+ name: 'vibecoding-depend-card',
83
+ enforce: 'pre',
84
+ buildStart: {
85
+ // Taro's pipeline publishes its compiler context in an earlier buildStart.
86
+ // Wait for that hook (including H5's asynchronous initialization).
87
+ sequential: true,
88
+ /**
89
+ * @description 等待前序 Taro pipeline 发布上下文,再更新配置并监听文件及目录。
90
+ * 缺少编译上下文时使构建失败;监听目录用于捕获尚不存在的新文件。
91
+ * @returns {void} 配置及监听关系写入当前构建。
92
+ */
93
+ handler() {
94
+ for (const id of this.getModuleIds()) {
95
+ const compiler = this.getModuleInfo(id)?.meta.viteCompilerContext
96
+ if (compiler?.app && typeof compiler.sourceDir === 'string' && compiler.sourceDir) {
97
+ viteCompilerContext = compiler
98
+ sourceDir = compiler.sourceDir
99
+ break
100
+ }
101
+ }
102
+ if (!viteCompilerContext) {
103
+ this.error('Cannot update isDependCard: Taro Vite compiler context is unavailable')
104
+ }
105
+ const result = update()
106
+ for (const file of [...result.files, ...result.directories]) this.addWatchFile(file)
107
+ },
108
+ },
109
+ // Taro serializes app.config in its app entry loader. Re-run that loader
110
+ // during watch builds even if only a child component changed.
111
+ /**
112
+ * @description 强制重新处理应用入口,避免 watch 构建复用含旧 isDependCard 的序列化代码。
113
+ * @param {object} options Rollup 的缓存模块信息。
114
+ * @param {string} options.id 模块标识。
115
+ * @returns {true | undefined} 应用入口返回 true;其他模块沿用默认缓存处理。
116
+ */
117
+ shouldTransformCachedModule({ id }) {
118
+ if (isAppModule(id)) return true
119
+ },
120
+ /**
121
+ * @description 注册开发服务器的文件新增、删除监听,并在服务器关闭时解除监听。
122
+ * @param {object} server Vite 开发服务器,提供文件监听、模块缓存及刷新通知能力。
123
+ * @returns {void} 监听回调直接注册到服务器。
124
+ */
125
+ configureServer(server) {
126
+ /**
127
+ * @description 文件新增或删除导致依赖标记变化时,刷新应用入口;解析失败则发送错误提示。
128
+ * @param {string} file 发生变化的文件路径,源码目录以外的事件会被忽略。
129
+ * @returns {void} 按需使缓存失效并发送整页刷新或错误通知。
130
+ */
131
+ const refresh = (file) => {
132
+ if (!viteCompilerContext || !file.startsWith(sourceDir + path.sep)) return
133
+ try {
134
+ if (!update().changed) return
135
+ } catch (error: any) {
136
+ server.config.logger.error(error.message)
137
+ server.ws.send({ type: 'error', err: { message: error.message, stack: error.stack } })
138
+ return
139
+ }
140
+ for (const [id, mod] of server.moduleGraph.idToModuleMap) {
141
+ if (isAppModule(id)) server.moduleGraph.invalidateModule(mod)
142
+ }
143
+ server.ws.send({ type: 'full-reload' })
144
+ }
145
+ server.watcher.on('add', refresh)
146
+ server.watcher.on('unlink', refresh)
147
+ server.httpServer?.once('close', () => {
148
+ server.watcher.off('add', refresh)
149
+ server.watcher.off('unlink', refresh)
150
+ })
151
+ },
152
+ /**
153
+ * @description 处理已有源码的修改;依赖标记变化时重载页面,避免继续使用旧应用配置。
154
+ * @param {object} context Vite 热更新上下文。
155
+ * @param {string} context.file 发生修改的文件路径。
156
+ * @param {object} context.server 当前开发服务器。
157
+ * @returns {Array<never> | undefined} 整页刷新后返回空数组取消本次模块热更新;否则沿用默认处理。
158
+ */
159
+ handleHotUpdate({ file, server }) {
160
+ if (!viteCompilerContext || !file.startsWith(sourceDir + path.sep) || !update().changed) return
161
+ for (const [id, mod] of server.moduleGraph.idToModuleMap) {
162
+ if (isAppModule(id)) server.moduleGraph.invalidateModule(mod)
163
+ }
164
+ server.ws.send({ type: 'full-reload' })
165
+ return []
166
+ },
167
+ }
168
+ }
@@ -0,0 +1,178 @@
1
+ import type { Plugin } from "vite";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { createHash } from "crypto";
5
+ import { parse } from "@babel/parser";
6
+ import babelTraverse from "@babel/traverse";
7
+ import babelGenerate from "@babel/generator";
8
+ import * as t from "@babel/types";
9
+
10
+ // Babel's CommonJS packages are exposed as either the callable itself or a
11
+ // `{ default }` namespace depending on the consumer's module loader.
12
+ const traverse = ((babelTraverse as any).default ?? babelTraverse) as typeof babelTraverse;
13
+ const generate = ((babelGenerate as any).default ?? babelGenerate) as typeof babelGenerate;
14
+
15
+ /**
16
+ * 将 <Image src="/assets/..."> 或 src="@/assets/..." 在构建时转为
17
+ * `import __taroAsset_xxx from '@/assets/...'` + `src={__taroAsset_xxx}`,
18
+ * 使 H5 云端 preview 的 publicPath 与小程序打包路径正确。
19
+ * 仅当解析到 `src/assets/**` 下真实文件时转换;否则保持原样。
20
+ */
21
+ export function viteImageAssetImportPlugin(options: {
22
+ projectRoot: string;
23
+ }): Plugin {
24
+ const { projectRoot } = options;
25
+
26
+ return {
27
+ name: "vite-image-asset-import",
28
+ enforce: "pre",
29
+ transform(code, id) {
30
+ if (!/\.(tsx|jsx)$/.test(id) || id.includes("node_modules")) {
31
+ return null;
32
+ }
33
+ if (!id.replace(/\\/g, "/").includes("/src/")) {
34
+ return null;
35
+ }
36
+
37
+ let ast;
38
+ try {
39
+ ast = parse(code, {
40
+ sourceType: "module",
41
+ errorRecovery: false,
42
+ plugins: ["typescript", "jsx"],
43
+ });
44
+ } catch {
45
+ return null;
46
+ }
47
+
48
+ const assetImports = new Map<
49
+ string,
50
+ { localName: string; importSource: string }
51
+ >();
52
+
53
+ function resolveUnderSrcAssets(raw: string): string | null {
54
+ let relUnderSrc: string | null = null;
55
+ if (raw.startsWith("@/")) {
56
+ relUnderSrc = raw.slice(2);
57
+ } else if (raw.startsWith("/assets/")) {
58
+ relUnderSrc = raw.slice(1);
59
+ } else {
60
+ return null;
61
+ }
62
+ if (!relUnderSrc.startsWith("assets/")) {
63
+ return null;
64
+ }
65
+ const abs = path.join(projectRoot, "src", relUnderSrc);
66
+ try {
67
+ if (fs.existsSync(abs) && fs.statSync(abs).isFile()) {
68
+ return abs;
69
+ }
70
+ } catch {
71
+ return null;
72
+ }
73
+ return null;
74
+ }
75
+
76
+ function getLocalName(absFile: string): string {
77
+ const relFromSrc = path
78
+ .relative(path.join(projectRoot, "src"), absFile)
79
+ .replace(/\\/g, "/");
80
+ const h = createHash("sha256").update(relFromSrc).digest("hex").slice(0, 10);
81
+ return `__taroAsset_${h}`;
82
+ }
83
+
84
+ function getImportSource(absFile: string): string {
85
+ const relFromSrc = path
86
+ .relative(path.join(projectRoot, "src"), absFile)
87
+ .replace(/\\/g, "/");
88
+ return `@/${relFromSrc}`;
89
+ }
90
+
91
+ traverse(ast, {
92
+ JSXOpeningElement(path) {
93
+ const el = path.node;
94
+ if (!t.isJSXIdentifier(el.name) || el.name.name !== "Image") {
95
+ return;
96
+ }
97
+
98
+ const srcAttr = el.attributes.find(
99
+ (a): a is t.JSXAttribute =>
100
+ t.isJSXAttribute(a) &&
101
+ t.isJSXIdentifier(a.name) &&
102
+ a.name.name === "src",
103
+ );
104
+ if (!srcAttr?.value) {
105
+ return;
106
+ }
107
+
108
+ let strVal: string | null = null;
109
+ if (t.isStringLiteral(srcAttr.value)) {
110
+ strVal = srcAttr.value.value;
111
+ } else if (t.isJSXExpressionContainer(srcAttr.value)) {
112
+ const ex = srcAttr.value.expression;
113
+ if (t.isStringLiteral(ex)) {
114
+ strVal = ex.value;
115
+ }
116
+ }
117
+ if (strVal == null) {
118
+ return;
119
+ }
120
+
121
+ const abs = resolveUnderSrcAssets(strVal);
122
+ if (!abs) {
123
+ return;
124
+ }
125
+
126
+ let entry = assetImports.get(abs);
127
+ if (!entry) {
128
+ entry = {
129
+ localName: getLocalName(abs),
130
+ importSource: getImportSource(abs),
131
+ };
132
+ assetImports.set(abs, entry);
133
+ }
134
+
135
+ srcAttr.value = t.jsxExpressionContainer(
136
+ t.identifier(entry.localName),
137
+ );
138
+ },
139
+ });
140
+
141
+ if (assetImports.size === 0) {
142
+ return null;
143
+ }
144
+
145
+ const program = ast.program;
146
+ const body = program.body;
147
+ let insertAt = 0;
148
+ for (let i = 0; i < body.length; i++) {
149
+ const n = body[i];
150
+ if (t.isImportDeclaration(n) || t.isTSImportEqualsDeclaration(n)) {
151
+ insertAt = i + 1;
152
+ } else {
153
+ break;
154
+ }
155
+ }
156
+
157
+ const importNodes: t.ImportDeclaration[] = [];
158
+ for (const { localName, importSource } of assetImports.values()) {
159
+ importNodes.push(
160
+ t.importDeclaration(
161
+ [t.importDefaultSpecifier(t.identifier(localName))],
162
+ t.stringLiteral(importSource),
163
+ ),
164
+ );
165
+ }
166
+ for (let i = importNodes.length - 1; i >= 0; i--) {
167
+ body.splice(insertAt, 0, importNodes[i]!);
168
+ }
169
+
170
+ const out = generate(ast, { retainLines: false }, code);
171
+
172
+ return {
173
+ code: out.code,
174
+ map: out.map ?? undefined,
175
+ };
176
+ },
177
+ };
178
+ }