@open-dy/vibecoding-sdk-taro 0.0.1-beta.4 → 0.0.1-beta.6
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.
- package/dist/adapters/interest-card/eslint/eslint-plugin-custom-navigation.mjs +2 -290
- package/dist/adapters/interest-card/eslint/taro.mjs +8 -42
- package/dist/build/plugins/vite-tt-components-entry.d.ts +10 -0
- package/dist/build/plugins/vite-tt-components-entry.js +32 -0
- package/dist/build/plugins/vite-tt-components-entry.js.map +1 -0
- package/dist/build/taro.js +3 -1
- package/dist/build/taro.js.map +1 -1
- package/dist/components/miniapp-open-card.d.ts +46 -1
- package/dist/components/miniapp-open-card.js +14 -1
- package/dist/components/miniapp-open-card.js.map +1 -1
- package/dist/eslint/eslint-plugin-custom-navigation.mjs +290 -0
- package/dist/eslint/taro.mjs +11 -0
- package/dist/reference/llms.txt +76 -34
- package/dist/reference/sdk-api/build/taro/BuildContext.md +7 -2
- package/dist/reference/sdk-api/build/taro/CreateMicroappTaroConfigOptions.md +1 -2
- package/dist/reference/sdk-api/build/taro/createMicroappTaroConfig.md +1 -2
- package/dist/reference/sdk-api/components/miniapp-open-card/MiniappOpenCard.md +109 -0
- package/dist/reference/sdk-api/components/miniapp-open-card/MiniappOpenCardEnvVersion.md +38 -0
- package/dist/reference/sdk-api/components/miniapp-open-card/MiniappOpenCardErrorDetail.md +52 -0
- package/dist/reference/sdk-api/components/miniapp-open-card/MiniappOpenCardProps.md +76 -0
- package/dist/reference/sdk-api/components/miniapp-open-card/index.md +12 -0
- package/dist/reference/sdk-api/libraries/lucide-taro.md +151 -0
- package/dist/reference/sdk-api/runtime/CreateMicroappClientOptions.md +7 -2
- package/dist/reference/sdk-api/runtime/createMicroappClient.md +8 -3
- package/dist/reference/sdk-api/ui/accordion/Accordion.md +114 -0
- package/dist/reference/sdk-api/ui/accordion/AccordionContent.md +100 -0
- package/dist/reference/sdk-api/ui/accordion/AccordionItem.md +107 -0
- package/dist/reference/sdk-api/ui/accordion/AccordionTrigger.md +100 -0
- package/dist/reference/sdk-api/ui/accordion/index.md +12 -0
- package/dist/reference/sdk-api/ui/alert/Alert.md +106 -0
- package/dist/reference/sdk-api/ui/alert/AlertAction.md +100 -0
- package/dist/reference/sdk-api/ui/alert/AlertDescription.md +100 -0
- package/dist/reference/sdk-api/ui/alert/AlertTitle.md +100 -0
- package/dist/reference/sdk-api/ui/alert/index.md +12 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialog.md +58 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogAction.md +107 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogCancel.md +107 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogContent.md +106 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogDescription.md +100 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogFooter.md +100 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogHeader.md +100 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogOverlay.md +100 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogPortal.md +55 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogTitle.md +100 -0
- package/dist/reference/sdk-api/ui/alert-dialog/AlertDialogTrigger.md +118 -0
- package/dist/reference/sdk-api/ui/alert-dialog/index.md +19 -0
- package/dist/reference/sdk-api/ui/aspect-ratio/AspectRatio.md +106 -0
- package/dist/reference/sdk-api/ui/aspect-ratio/index.md +9 -0
- package/dist/reference/sdk-api/ui/avatar/Avatar.md +106 -0
- package/dist/reference/sdk-api/ui/avatar/AvatarBadge.md +100 -0
- package/dist/reference/sdk-api/ui/avatar/AvatarFallback.md +100 -0
- package/dist/reference/sdk-api/ui/avatar/AvatarGroup.md +100 -0
- package/dist/reference/sdk-api/ui/avatar/AvatarGroupCount.md +100 -0
- package/dist/reference/sdk-api/ui/avatar/AvatarImage.md +108 -0
- package/dist/reference/sdk-api/ui/avatar/index.md +14 -0
- package/dist/reference/sdk-api/ui/badge/Badge.md +114 -0
- package/dist/reference/sdk-api/ui/badge/badgeVariants.md +70 -0
- package/dist/reference/sdk-api/ui/badge/index.md +10 -0
- package/dist/reference/sdk-api/ui/button/Button.md +210 -0
- package/dist/reference/sdk-api/ui/button/ButtonProps.md +188 -0
- package/dist/reference/sdk-api/ui/button/buttonVariants.md +84 -0
- package/dist/reference/sdk-api/ui/button/index.md +11 -0
- package/dist/reference/sdk-api/ui/button-group/ButtonGroup.md +106 -0
- package/dist/reference/sdk-api/ui/button-group/ButtonGroupSeparator.md +106 -0
- package/dist/reference/sdk-api/ui/button-group/ButtonGroupText.md +106 -0
- package/dist/reference/sdk-api/ui/button-group/buttonGroupVariants.md +70 -0
- package/dist/reference/sdk-api/ui/button-group/index.md +12 -0
- package/dist/reference/sdk-api/ui/calendar/Calendar.md +144 -0
- package/dist/reference/sdk-api/ui/calendar/CalendarProps.md +118 -0
- package/dist/reference/sdk-api/ui/calendar/index.md +10 -0
- package/dist/reference/sdk-api/ui/card/Card.md +106 -0
- package/dist/reference/sdk-api/ui/card/CardAction.md +100 -0
- package/dist/reference/sdk-api/ui/card/CardContent.md +100 -0
- package/dist/reference/sdk-api/ui/card/CardDescription.md +100 -0
- package/dist/reference/sdk-api/ui/card/CardFooter.md +100 -0
- package/dist/reference/sdk-api/ui/card/CardHeader.md +100 -0
- package/dist/reference/sdk-api/ui/card/CardTitle.md +100 -0
- package/dist/reference/sdk-api/ui/card/index.md +15 -0
- package/dist/reference/sdk-api/ui/carousel/Carousel.md +108 -0
- package/dist/reference/sdk-api/ui/carousel/CarouselContent.md +100 -0
- package/dist/reference/sdk-api/ui/carousel/CarouselItem.md +100 -0
- package/dist/reference/sdk-api/ui/carousel/CarouselNext.md +219 -0
- package/dist/reference/sdk-api/ui/carousel/CarouselPrevious.md +219 -0
- package/dist/reference/sdk-api/ui/carousel/index.md +14 -0
- package/dist/reference/sdk-api/ui/carousel/useCarousel.md +46 -0
- package/dist/reference/sdk-api/ui/checkbox/Checkbox.md +109 -0
- package/dist/reference/sdk-api/ui/checkbox/index.md +9 -0
- package/dist/reference/sdk-api/ui/collapsible/Collapsible.md +108 -0
- package/dist/reference/sdk-api/ui/collapsible/CollapsibleContent.md +100 -0
- package/dist/reference/sdk-api/ui/collapsible/CollapsibleTrigger.md +119 -0
- package/dist/reference/sdk-api/ui/collapsible/index.md +11 -0
- package/dist/reference/sdk-api/ui/combobox/Combobox.md +124 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxChip.md +107 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxChips.md +100 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxChipsInput.md +107 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxCollection.md +100 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxContent.md +106 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxEmpty.md +100 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxGroup.md +100 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxInput.md +113 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxItem.md +106 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxLabel.md +100 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxList.md +105 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxSeparator.md +100 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxTrigger.md +100 -0
- package/dist/reference/sdk-api/ui/combobox/ComboboxValue.md +105 -0
- package/dist/reference/sdk-api/ui/combobox/index.md +24 -0
- package/dist/reference/sdk-api/ui/combobox/useComboboxAnchor.md +43 -0
- package/dist/reference/sdk-api/ui/dialog/Dialog.md +58 -0
- package/dist/reference/sdk-api/ui/dialog/DialogClose.md +100 -0
- package/dist/reference/sdk-api/ui/dialog/DialogContent.md +107 -0
- package/dist/reference/sdk-api/ui/dialog/DialogDescription.md +100 -0
- package/dist/reference/sdk-api/ui/dialog/DialogFooter.md +100 -0
- package/dist/reference/sdk-api/ui/dialog/DialogHeader.md +100 -0
- package/dist/reference/sdk-api/ui/dialog/DialogOverlay.md +100 -0
- package/dist/reference/sdk-api/ui/dialog/DialogPortal.md +55 -0
- package/dist/reference/sdk-api/ui/dialog/DialogTitle.md +100 -0
- package/dist/reference/sdk-api/ui/dialog/DialogTrigger.md +106 -0
- package/dist/reference/sdk-api/ui/dialog/index.md +18 -0
- package/dist/reference/sdk-api/ui/drawer/Drawer.md +59 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerClose.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerContent.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerDescription.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerFooter.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerHeader.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerOverlay.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerPortal.md +55 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerTitle.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/DrawerTrigger.md +100 -0
- package/dist/reference/sdk-api/ui/drawer/index.md +18 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenu.md +58 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuCheckboxItem.md +107 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuContent.md +106 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuGroup.md +100 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuItem.md +107 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuLabel.md +106 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuPortal.md +55 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuRadioGroup.md +100 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuRadioItem.md +106 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSeparator.md +100 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuShortcut.md +100 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSub.md +58 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSubContent.md +100 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuSubTrigger.md +106 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/DropdownMenuTrigger.md +119 -0
- package/dist/reference/sdk-api/ui/dropdown-menu/index.md +23 -0
- package/dist/reference/sdk-api/ui/empty/Empty.md +100 -0
- package/dist/reference/sdk-api/ui/empty/EmptyContent.md +100 -0
- package/dist/reference/sdk-api/ui/empty/EmptyDescription.md +100 -0
- package/dist/reference/sdk-api/ui/empty/EmptyHeader.md +100 -0
- package/dist/reference/sdk-api/ui/empty/EmptyMedia.md +106 -0
- package/dist/reference/sdk-api/ui/empty/EmptyTitle.md +100 -0
- package/dist/reference/sdk-api/ui/empty/index.md +14 -0
- package/dist/reference/sdk-api/ui/field/Field.md +106 -0
- package/dist/reference/sdk-api/ui/field/FieldContent.md +100 -0
- package/dist/reference/sdk-api/ui/field/FieldDescription.md +100 -0
- package/dist/reference/sdk-api/ui/field/FieldError.md +112 -0
- package/dist/reference/sdk-api/ui/field/FieldGroup.md +100 -0
- package/dist/reference/sdk-api/ui/field/FieldLabel.md +85 -0
- package/dist/reference/sdk-api/ui/field/FieldLegend.md +106 -0
- package/dist/reference/sdk-api/ui/field/FieldSeparator.md +105 -0
- package/dist/reference/sdk-api/ui/field/FieldSet.md +100 -0
- package/dist/reference/sdk-api/ui/field/FieldTitle.md +100 -0
- package/dist/reference/sdk-api/ui/field/index.md +18 -0
- package/dist/reference/sdk-api/ui/helpers/collectDataIconState.md +66 -0
- package/dist/reference/sdk-api/ui/helpers/index.md +9 -0
- package/dist/reference/sdk-api/ui/index.md +57 -0
- package/dist/reference/sdk-api/ui/input/Input.md +141 -0
- package/dist/reference/sdk-api/ui/input/index.md +9 -0
- package/dist/reference/sdk-api/ui/input-group/InputGroup.md +100 -0
- package/dist/reference/sdk-api/ui/input-group/InputGroupAddon.md +109 -0
- package/dist/reference/sdk-api/ui/input-group/InputGroupButton.md +220 -0
- package/dist/reference/sdk-api/ui/input-group/InputGroupInput.md +135 -0
- package/dist/reference/sdk-api/ui/input-group/InputGroupText.md +100 -0
- package/dist/reference/sdk-api/ui/input-group/InputGroupTextarea.md +126 -0
- package/dist/reference/sdk-api/ui/input-group/index.md +14 -0
- package/dist/reference/sdk-api/ui/input-otp/InputOTP.md +111 -0
- package/dist/reference/sdk-api/ui/input-otp/InputOTPGroup.md +100 -0
- package/dist/reference/sdk-api/ui/input-otp/InputOTPSeparator.md +100 -0
- package/dist/reference/sdk-api/ui/input-otp/InputOTPSlot.md +107 -0
- package/dist/reference/sdk-api/ui/input-otp/index.md +12 -0
- package/dist/reference/sdk-api/ui/item/Item.md +115 -0
- package/dist/reference/sdk-api/ui/item/ItemActions.md +100 -0
- package/dist/reference/sdk-api/ui/item/ItemContent.md +100 -0
- package/dist/reference/sdk-api/ui/item/ItemDescription.md +100 -0
- package/dist/reference/sdk-api/ui/item/ItemFooter.md +100 -0
- package/dist/reference/sdk-api/ui/item/ItemGroup.md +100 -0
- package/dist/reference/sdk-api/ui/item/ItemHeader.md +100 -0
- package/dist/reference/sdk-api/ui/item/ItemMedia.md +106 -0
- package/dist/reference/sdk-api/ui/item/ItemSeparator.md +106 -0
- package/dist/reference/sdk-api/ui/item/ItemTitle.md +100 -0
- package/dist/reference/sdk-api/ui/item/index.md +18 -0
- package/dist/reference/sdk-api/ui/label/Label.md +85 -0
- package/dist/reference/sdk-api/ui/label/index.md +9 -0
- package/dist/reference/sdk-api/ui/menubar/Menubar.md +100 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarCheckboxItem.md +111 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarContent.md +108 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarGroup.md +100 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarItem.md +109 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarLabel.md +106 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarMenu.md +55 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarPortal.md +55 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarRadioGroup.md +108 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarRadioItem.md +110 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarSeparator.md +100 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarShortcut.md +100 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarSub.md +58 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarSubContent.md +108 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarSubTrigger.md +107 -0
- package/dist/reference/sdk-api/ui/menubar/MenubarTrigger.md +100 -0
- package/dist/reference/sdk-api/ui/menubar/index.md +24 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenu.md +100 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuContent.md +106 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuIndicator.md +100 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuItem.md +106 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuLink.md +106 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuList.md +100 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuPositioner.md +100 -0
- package/dist/reference/sdk-api/ui/navigation-menu/NavigationMenuTrigger.md +120 -0
- package/dist/reference/sdk-api/ui/navigation-menu/index.md +17 -0
- package/dist/reference/sdk-api/ui/navigation-menu/navigationMenuTriggerStyle.md +64 -0
- package/dist/reference/sdk-api/ui/pagination/Pagination.md +100 -0
- package/dist/reference/sdk-api/ui/pagination/PaginationContent.md +100 -0
- package/dist/reference/sdk-api/ui/pagination/PaginationEllipsis.md +100 -0
- package/dist/reference/sdk-api/ui/pagination/PaginationItem.md +100 -0
- package/dist/reference/sdk-api/ui/pagination/PaginationLink.md +107 -0
- package/dist/reference/sdk-api/ui/pagination/PaginationNext.md +121 -0
- package/dist/reference/sdk-api/ui/pagination/PaginationPrevious.md +121 -0
- package/dist/reference/sdk-api/ui/pagination/index.md +15 -0
- package/dist/reference/sdk-api/ui/popover/Popover.md +58 -0
- package/dist/reference/sdk-api/ui/popover/PopoverAnchor.md +100 -0
- package/dist/reference/sdk-api/ui/popover/PopoverContent.md +108 -0
- package/dist/reference/sdk-api/ui/popover/PopoverDescription.md +100 -0
- package/dist/reference/sdk-api/ui/popover/PopoverHeader.md +100 -0
- package/dist/reference/sdk-api/ui/popover/PopoverTitle.md +100 -0
- package/dist/reference/sdk-api/ui/popover/PopoverTrigger.md +119 -0
- package/dist/reference/sdk-api/ui/popover/index.md +15 -0
- package/dist/reference/sdk-api/ui/portal/Portal.md +55 -0
- package/dist/reference/sdk-api/ui/portal/index.md +9 -0
- package/dist/reference/sdk-api/ui/progress/Progress.md +109 -0
- package/dist/reference/sdk-api/ui/progress/ProgressIndicator.md +107 -0
- package/dist/reference/sdk-api/ui/progress/ProgressLabel.md +100 -0
- package/dist/reference/sdk-api/ui/progress/ProgressTrack.md +100 -0
- package/dist/reference/sdk-api/ui/progress/ProgressValue.md +105 -0
- package/dist/reference/sdk-api/ui/progress/index.md +13 -0
- package/dist/reference/sdk-api/ui/radio-group/RadioGroup.md +108 -0
- package/dist/reference/sdk-api/ui/radio-group/RadioGroupItem.md +107 -0
- package/dist/reference/sdk-api/ui/radio-group/index.md +10 -0
- package/dist/reference/sdk-api/ui/resizable/ResizableHandle.md +107 -0
- package/dist/reference/sdk-api/ui/resizable/ResizablePanel.md +108 -0
- package/dist/reference/sdk-api/ui/resizable/ResizablePanelGroup.md +107 -0
- package/dist/reference/sdk-api/ui/resizable/index.md +11 -0
- package/dist/reference/sdk-api/ui/scroll-area/ScrollArea.md +159 -0
- package/dist/reference/sdk-api/ui/scroll-area/ScrollBar.md +106 -0
- package/dist/reference/sdk-api/ui/scroll-area/index.md +10 -0
- package/dist/reference/sdk-api/ui/select/Select.md +80 -0
- package/dist/reference/sdk-api/ui/select/SelectContent.md +106 -0
- package/dist/reference/sdk-api/ui/select/SelectGroup.md +100 -0
- package/dist/reference/sdk-api/ui/select/SelectItem.md +106 -0
- package/dist/reference/sdk-api/ui/select/SelectLabel.md +100 -0
- package/dist/reference/sdk-api/ui/select/SelectScrollDownButton.md +100 -0
- package/dist/reference/sdk-api/ui/select/SelectScrollUpButton.md +100 -0
- package/dist/reference/sdk-api/ui/select/SelectSeparator.md +100 -0
- package/dist/reference/sdk-api/ui/select/SelectTrigger.md +106 -0
- package/dist/reference/sdk-api/ui/select/SelectValue.md +106 -0
- package/dist/reference/sdk-api/ui/select/index.md +18 -0
- package/dist/reference/sdk-api/ui/separator/Separator.md +106 -0
- package/dist/reference/sdk-api/ui/separator/index.md +9 -0
- package/dist/reference/sdk-api/ui/sheet/Sheet.md +58 -0
- package/dist/reference/sdk-api/ui/sheet/SheetClose.md +100 -0
- package/dist/reference/sdk-api/ui/sheet/SheetContent.md +113 -0
- package/dist/reference/sdk-api/ui/sheet/SheetDescription.md +100 -0
- package/dist/reference/sdk-api/ui/sheet/SheetFooter.md +100 -0
- package/dist/reference/sdk-api/ui/sheet/SheetHeader.md +100 -0
- package/dist/reference/sdk-api/ui/sheet/SheetOverlay.md +100 -0
- package/dist/reference/sdk-api/ui/sheet/SheetPortal.md +55 -0
- package/dist/reference/sdk-api/ui/sheet/SheetTitle.md +100 -0
- package/dist/reference/sdk-api/ui/sheet/SheetTrigger.md +100 -0
- package/dist/reference/sdk-api/ui/sheet/index.md +18 -0
- package/dist/reference/sdk-api/ui/skeleton/Skeleton.md +100 -0
- package/dist/reference/sdk-api/ui/skeleton/index.md +9 -0
- package/dist/reference/sdk-api/ui/slider/Slider.md +116 -0
- package/dist/reference/sdk-api/ui/slider/index.md +9 -0
- package/dist/reference/sdk-api/ui/sonner/Toaster.md +43 -0
- package/dist/reference/sdk-api/ui/sonner/index.md +10 -0
- package/dist/reference/sdk-api/ui/sonner/toast.md +58 -0
- package/dist/reference/sdk-api/ui/spinner/Spinner.md +100 -0
- package/dist/reference/sdk-api/ui/spinner/index.md +9 -0
- package/dist/reference/sdk-api/ui/switch/Switch.md +110 -0
- package/dist/reference/sdk-api/ui/switch/index.md +9 -0
- package/dist/reference/sdk-api/ui/table/Table.md +100 -0
- package/dist/reference/sdk-api/ui/table/TableBody.md +100 -0
- package/dist/reference/sdk-api/ui/table/TableCaption.md +100 -0
- package/dist/reference/sdk-api/ui/table/TableCell.md +106 -0
- package/dist/reference/sdk-api/ui/table/TableFooter.md +100 -0
- package/dist/reference/sdk-api/ui/table/TableHead.md +106 -0
- package/dist/reference/sdk-api/ui/table/TableHeader.md +100 -0
- package/dist/reference/sdk-api/ui/table/TableRow.md +100 -0
- package/dist/reference/sdk-api/ui/table/index.md +16 -0
- package/dist/reference/sdk-api/ui/tabs/Tabs.md +109 -0
- package/dist/reference/sdk-api/ui/tabs/TabsContent.md +106 -0
- package/dist/reference/sdk-api/ui/tabs/TabsList.md +106 -0
- package/dist/reference/sdk-api/ui/tabs/TabsTrigger.md +107 -0
- package/dist/reference/sdk-api/ui/tabs/index.md +13 -0
- package/dist/reference/sdk-api/ui/tabs/tabsListVariants.md +70 -0
- package/dist/reference/sdk-api/ui/textarea/Textarea.md +126 -0
- package/dist/reference/sdk-api/ui/textarea/index.md +9 -0
- package/dist/reference/sdk-api/ui/toggle/Toggle.md +118 -0
- package/dist/reference/sdk-api/ui/toggle/index.md +10 -0
- package/dist/reference/sdk-api/ui/toggle/toggleVariants.md +71 -0
- package/dist/reference/sdk-api/ui/toggle-group/ToggleGroup.md +122 -0
- package/dist/reference/sdk-api/ui/toggle-group/ToggleGroupItem.md +116 -0
- package/dist/reference/sdk-api/ui/toggle-group/index.md +10 -0
- package/dist/reference/sdk-api.json +74470 -146
- package/dist/reference/sdk-api.md +62 -3
- package/dist/ui/accordion.d.ts +48 -0
- package/dist/ui/accordion.js +40 -0
- package/dist/ui/accordion.js.map +1 -1
- package/dist/ui/alert-dialog.d.ts +123 -0
- package/dist/ui/alert-dialog.js +114 -0
- package/dist/ui/alert-dialog.js.map +1 -1
- package/dist/ui/alert.d.ts +41 -0
- package/dist/ui/alert.js +41 -0
- package/dist/ui/alert.js.map +1 -1
- package/dist/ui/aspect-ratio.d.ts +11 -0
- package/dist/ui/aspect-ratio.js +10 -0
- package/dist/ui/aspect-ratio.js.map +1 -1
- package/dist/ui/avatar.d.ts +65 -0
- package/dist/ui/avatar.js +63 -0
- package/dist/ui/avatar.js.map +1 -1
- package/dist/ui/badge.d.ts +22 -0
- package/dist/ui/badge.js +22 -0
- package/dist/ui/badge.js.map +1 -1
- package/dist/ui/button-group.d.ts +45 -0
- package/dist/ui/button-group.js +43 -0
- package/dist/ui/button-group.js.map +1 -1
- package/dist/ui/button.d.ts +52 -0
- package/dist/ui/button.js +30 -0
- package/dist/ui/button.js.map +1 -1
- package/dist/ui/calendar.d.ts +44 -0
- package/dist/ui/calendar.js +19 -0
- package/dist/ui/calendar.js.map +1 -1
- package/dist/ui/card.d.ts +71 -0
- package/dist/ui/card.js +70 -0
- package/dist/ui/card.js.map +1 -1
- package/dist/ui/carousel.d.ts +71 -0
- package/dist/ui/carousel.js +66 -0
- package/dist/ui/carousel.js.map +1 -1
- package/dist/ui/checkbox.d.ts +14 -0
- package/dist/ui/checkbox.js +10 -0
- package/dist/ui/checkbox.js.map +1 -1
- package/dist/ui/collapsible.d.ts +37 -0
- package/dist/ui/collapsible.js +30 -0
- package/dist/ui/collapsible.js.map +1 -1
- package/dist/ui/combobox.d.ts +190 -0
- package/dist/ui/combobox.js +167 -0
- package/dist/ui/combobox.js.map +1 -1
- package/dist/ui/dialog.d.ts +109 -0
- package/dist/ui/dialog.js +100 -0
- package/dist/ui/dialog.js.map +1 -1
- package/dist/ui/drawer.d.ts +106 -0
- package/dist/ui/drawer.js +100 -0
- package/dist/ui/drawer.js.map +1 -1
- package/dist/ui/dropdown-menu.d.ts +171 -0
- package/dist/ui/dropdown-menu.js +150 -0
- package/dist/ui/dropdown-menu.js.map +1 -1
- package/dist/ui/empty.d.ts +61 -0
- package/dist/ui/empty.js +61 -0
- package/dist/ui/empty.js.map +1 -1
- package/dist/ui/field.d.ts +105 -0
- package/dist/ui/field.js +101 -0
- package/dist/ui/field.js.map +1 -1
- package/dist/ui/helpers.d.ts +11 -0
- package/dist/ui/helpers.js +11 -0
- package/dist/ui/helpers.js.map +1 -1
- package/dist/ui/input-group.d.ts +65 -0
- package/dist/ui/input-group.js +65 -0
- package/dist/ui/input-group.js.map +1 -1
- package/dist/ui/input-otp.d.ts +48 -0
- package/dist/ui/input-otp.js +40 -0
- package/dist/ui/input-otp.js.map +1 -1
- package/dist/ui/input.d.ts +24 -2
- package/dist/ui/input.js +20 -0
- package/dist/ui/input.js.map +1 -1
- package/dist/ui/item.d.ts +103 -0
- package/dist/ui/item.js +103 -0
- package/dist/ui/item.js.map +1 -1
- package/dist/ui/label.d.ts +10 -0
- package/dist/ui/label.js +10 -0
- package/dist/ui/label.js.map +1 -1
- package/dist/ui/menubar.d.ts +193 -0
- package/dist/ui/menubar.js +160 -0
- package/dist/ui/menubar.js.map +1 -1
- package/dist/ui/navigation-menu.d.ts +98 -0
- package/dist/ui/navigation-menu.js +90 -0
- package/dist/ui/navigation-menu.js.map +1 -1
- package/dist/ui/pagination.d.ts +76 -0
- package/dist/ui/pagination.js +73 -0
- package/dist/ui/pagination.js.map +1 -1
- package/dist/ui/popover.d.ts +81 -0
- package/dist/ui/popover.js +70 -0
- package/dist/ui/popover.js.map +1 -1
- package/dist/ui/portal.d.ts +11 -0
- package/dist/ui/portal.js +10 -0
- package/dist/ui/portal.js.map +1 -1
- package/dist/ui/progress.d.ts +53 -26
- package/dist/ui/progress.js +50 -26
- package/dist/ui/progress.js.map +1 -1
- package/dist/ui/radio-group.d.ts +25 -0
- package/dist/ui/radio-group.js +20 -0
- package/dist/ui/radio-group.js.map +1 -1
- package/dist/ui/resizable.d.ts +37 -0
- package/dist/ui/resizable.js +30 -0
- package/dist/ui/resizable.js.map +1 -1
- package/dist/ui/scroll-area.d.ts +22 -0
- package/dist/ui/scroll-area.js +21 -0
- package/dist/ui/scroll-area.js.map +1 -1
- package/dist/ui/select.d.ts +122 -0
- package/dist/ui/select.js +108 -0
- package/dist/ui/select.js.map +1 -1
- package/dist/ui/separator.d.ts +11 -0
- package/dist/ui/separator.js +10 -0
- package/dist/ui/separator.js.map +1 -1
- package/dist/ui/sheet.d.ts +107 -0
- package/dist/ui/sheet.js +101 -0
- package/dist/ui/sheet.js.map +1 -1
- package/dist/ui/skeleton.d.ts +10 -0
- package/dist/ui/skeleton.js +10 -0
- package/dist/ui/skeleton.js.map +1 -1
- package/dist/ui/slider.d.ts +21 -0
- package/dist/ui/slider.js +14 -0
- package/dist/ui/slider.js.map +1 -1
- package/dist/ui/sonner.d.ts +23 -0
- package/dist/ui/sonner.js +21 -0
- package/dist/ui/sonner.js.map +1 -1
- package/dist/ui/spinner.d.ts +10 -0
- package/dist/ui/spinner.js +10 -0
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/switch.d.ts +15 -0
- package/dist/ui/switch.js +10 -0
- package/dist/ui/switch.js.map +1 -1
- package/dist/ui/table.d.ts +81 -0
- package/dist/ui/table.js +80 -0
- package/dist/ui/table.js.map +1 -1
- package/dist/ui/tabs.d.ts +59 -0
- package/dist/ui/tabs.js +51 -0
- package/dist/ui/tabs.js.map +1 -1
- package/dist/ui/textarea.d.ts +13 -0
- package/dist/ui/textarea.js +13 -0
- package/dist/ui/textarea.js.map +1 -1
- package/dist/ui/toggle-group.d.ts +34 -0
- package/dist/ui/toggle-group.js +24 -0
- package/dist/ui/toggle-group.js.map +1 -1
- package/dist/ui/toggle.d.ts +28 -0
- package/dist/ui/toggle.js +24 -0
- package/dist/ui/toggle.js.map +1 -1
- package/package.json +4 -2
- package/release-provenance.json +15 -0
- package/src/adapters/interest-card/eslint/eslint-plugin-custom-navigation.mjs +2 -0
- package/src/adapters/interest-card/eslint/taro.mjs +21 -0
- package/src/adapters/interest-card/runtime/microapp.ts +11 -0
- package/src/adapters/interest-card/types/taro.d.ts +28 -0
- package/src/build/config-overrides.ts +39 -0
- package/src/build/index.ts +5 -0
- package/src/build/plugins/app-config.ts +47 -0
- package/src/build/plugins/depend-card/analyze.ts +122 -0
- package/src/build/plugins/depend-card/source.ts +97 -0
- package/src/build/plugins/vite-depend-card.ts +168 -0
- package/src/build/plugins/vite-image-asset-import.ts +178 -0
- package/src/build/plugins/vite-inline-json.ts +149 -0
- package/src/build/plugins/vite-taro-source-location.ts +224 -0
- package/src/build/plugins/vite-tt-components-entry.ts +33 -0
- package/src/build/taro.ts +830 -0
- package/src/components/miniapp-open-card.ts +94 -0
- package/src/components/native-miniapp-open-card.ts +7 -0
- package/src/eslint/eslint-plugin-custom-navigation.mjs +290 -0
- package/src/eslint/eslint-plugin-microapp-pages.mjs +659 -0
- package/src/eslint/server.mjs +69 -0
- package/src/eslint/taro.mjs +564 -0
- package/src/index.ts +2 -0
- package/src/internal/runtime/douyin-open-button.d.ts +29 -0
- package/src/internal/runtime/iframe-auth/identity.ts +236 -0
- package/src/internal/runtime/iframe-auth/index.ts +2 -0
- package/src/internal/runtime/iframe-auth/sync.ts +37 -0
- package/src/internal/vendor-modules.d.ts +8 -0
- package/src/lib/measure.ts +115 -0
- package/src/lib/platform.ts +11 -0
- package/src/lib/utils.ts +6 -0
- package/src/runtime/client.ts +246 -0
- package/src/runtime/default-client.ts +26 -0
- package/src/runtime/default-iframe-auth.ts +13 -0
- package/src/runtime/douyin-container-request.ts +367 -0
- package/src/runtime/douyin-login-request.ts +514 -0
- package/src/runtime/globals.d.ts +342 -0
- package/src/runtime/index.ts +4 -0
- package/src/runtime/network-url.ts +63 -0
- package/src/ui/accordion.tsx +226 -0
- package/src/ui/alert-dialog.tsx +407 -0
- package/src/ui/alert.tsx +149 -0
- package/src/ui/aspect-ratio.tsx +37 -0
- package/src/ui/avatar.tsx +238 -0
- package/src/ui/badge.tsx +77 -0
- package/src/ui/button-group.tsx +173 -0
- package/src/ui/button.tsx +215 -0
- package/src/ui/calendar.tsx +353 -0
- package/src/ui/card.tsx +217 -0
- package/src/ui/carousel.tsx +259 -0
- package/src/ui/checkbox.tsx +62 -0
- package/src/ui/collapsible.tsx +148 -0
- package/src/ui/combobox.tsx +650 -0
- package/src/ui/dialog.tsx +290 -0
- package/src/ui/drawer.tsx +272 -0
- package/src/ui/dropdown-menu.tsx +547 -0
- package/src/ui/empty.tsx +166 -0
- package/src/ui/field.tsx +427 -0
- package/src/ui/helpers.tsx +39 -0
- package/src/ui/index.ts +47 -0
- package/src/ui/input-group.tsx +320 -0
- package/src/ui/input-otp.tsx +189 -0
- package/src/ui/input.tsx +60 -0
- package/src/ui/item.tsx +338 -0
- package/src/ui/label.tsx +31 -0
- package/src/ui/menubar.tsx +835 -0
- package/src/ui/navigation-menu.tsx +341 -0
- package/src/ui/pagination.tsx +195 -0
- package/src/ui/popover.tsx +363 -0
- package/src/ui/portal.tsx +31 -0
- package/src/ui/progress.tsx +182 -0
- package/src/ui/radio-group.tsx +111 -0
- package/src/ui/resizable.tsx +410 -0
- package/src/ui/scroll-area.tsx +102 -0
- package/src/ui/select.tsx +471 -0
- package/src/ui/separator.tsx +37 -0
- package/src/ui/sheet.tsx +289 -0
- package/src/ui/skeleton.tsx +25 -0
- package/src/ui/slider.tsx +176 -0
- package/src/ui/sonner.tsx +40 -0
- package/src/ui/spinner.tsx +23 -0
- package/src/ui/switch.tsx +94 -0
- package/src/ui/table.tsx +240 -0
- package/src/ui/tabs.tsx +233 -0
- package/src/ui/tailwind.css +2 -0
- package/src/ui/textarea.tsx +49 -0
- package/src/ui/theme.css +234 -0
- package/src/ui/toggle-group.tsx +215 -0
- package/src/ui/toggle.tsx +113 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { Button as TaroButton, View, type ViewProps } from "@tarojs/components"
|
|
3
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
4
|
+
|
|
5
|
+
import { cn } from "../lib/utils"
|
|
6
|
+
import { collectDataIconState } from "./helpers"
|
|
7
|
+
|
|
8
|
+
type TaroButtonProps = React.ComponentProps<typeof TaroButton>
|
|
9
|
+
|
|
10
|
+
type OpenTypeDetailEvent = {
|
|
11
|
+
/** @desc 原生能力回调的结果明细;平台未提供时可缺省,使用前需判空。 */
|
|
12
|
+
detail?: {
|
|
13
|
+
/** @desc 平台提供的结果或错误描述;可缺省,请保留原文用于判断和诊断。 */
|
|
14
|
+
errMsg?: string;
|
|
15
|
+
/** @desc 平台提供的数值结果码;可缺省,含义以所用原生能力的契约为准。 */
|
|
16
|
+
errNo?: number }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type DouyinButtonExtras = {
|
|
20
|
+
/** @desc 抖音原生按钮能力类型;非空时改用 Taro Button 并透传该值,否则渲染 View。可用值和授权要求以目标平台能力为准。 */
|
|
21
|
+
openType?: TaroButtonProps["openType"] | (string & {})
|
|
22
|
+
/** @desc navigateToVideoView 的视频标识;优先于 data-video-id,同时注入两种拼写给原生按钮。其他 openType 仅透传。 */
|
|
23
|
+
dataVideoId?: string
|
|
24
|
+
/** @desc 视频类型;优先于 data-video-type。navigateToVideoView 场景省略时为 "raw",其他场景不设置默认值。 */
|
|
25
|
+
dataVideoType?: string
|
|
26
|
+
/** @desc 原生视频能力的渠道参数;优先于 data-channel,未提供时不注入。不控制 SDK 网络通道。 */
|
|
27
|
+
dataChannel?: string
|
|
28
|
+
/** @desc dataVideoId 的兼容写法;两者都提供时以 dataVideoId 为准。 */
|
|
29
|
+
"data-video-id"?: string
|
|
30
|
+
/** @desc dataVideoType 的兼容写法;两者都提供时以 dataVideoType 为准。 */
|
|
31
|
+
"data-video-type"?: string
|
|
32
|
+
/** @desc dataChannel 的兼容写法;两者都提供时以 dataChannel 为准。 */
|
|
33
|
+
"data-channel"?: string
|
|
34
|
+
/** @desc 仅在原生 navigateToVideoView 能力分支中透传的结果回调;event.detail 可缺省,不代表业务点击回调。 */
|
|
35
|
+
onNavigateToVideoView?: (event: OpenTypeDetailEvent) => void
|
|
36
|
+
/** @desc 仅在原生 addShortcut 能力分支中透传的结果回调;结果从 event.detail 读取,普通 View 按钮不会主动调用。 */
|
|
37
|
+
onAddShortcut?: (event: OpenTypeDetailEvent) => void
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type NativeButtonProps = TaroButtonProps &
|
|
41
|
+
DouyinButtonExtras & {
|
|
42
|
+
plain?: boolean
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const NativeButton = TaroButton as React.ComponentType<NativeButtonProps>
|
|
46
|
+
|
|
47
|
+
type ButtonVariant = VariantProps<typeof buttonVariants>["variant"]
|
|
48
|
+
|
|
49
|
+
/** Taro Button `size`/`type` 与 CVA variant 同名,必须 Omit,否则 size 会收成只剩 `"default"`。 */
|
|
50
|
+
type TaroButtonNativeKeys =
|
|
51
|
+
| keyof ViewProps
|
|
52
|
+
| "className"
|
|
53
|
+
| "style"
|
|
54
|
+
| "children"
|
|
55
|
+
| "size"
|
|
56
|
+
| "type"
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @desc 按钮组件的属性类型;保留 Taro 原生能力,避免 size/type 与样式变体同名冲突。
|
|
60
|
+
* @property {ButtonProps["variant"]} variant 视觉变体,默认 default(主题色);outline 描边、secondary 次要、ghost 无底色、destructive 危险色、link 链接样式。只控制样式,不执行业务动作。
|
|
61
|
+
* @property {ButtonProps["size"]} size 尺寸,默认 default(h-8);xs/sm/lg 分别为 h-6/h-7/h-9;icon/icon-xs/icon-sm/icon-lg 为 size-8/6/7/9 正方形图标按钮。
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* import { ButtonProps } from '@open-dy/vibecoding-sdk-taro/ui/button'
|
|
65
|
+
* const props: ButtonProps = { children: '确认' }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export type ButtonProps = ViewProps &
|
|
69
|
+
VariantProps<typeof buttonVariants> &
|
|
70
|
+
Omit<TaroButtonProps, TaroButtonNativeKeys> &
|
|
71
|
+
DouyinButtonExtras
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @desc 生成按钮的样式类名;接受其声明的样式变体。
|
|
75
|
+
* @param {Parameters<typeof buttonVariants>[0]} props 样式变体以及附加的 class 或 className。
|
|
76
|
+
* @param {Parameters<typeof buttonVariants>[0]["variant"]} props.variant 视觉变体,默认 default(主题色);outline 描边、secondary 次要、ghost 无底色、destructive 危险色、link 链接样式。只控制样式,不执行业务动作。
|
|
77
|
+
* @param {Parameters<typeof buttonVariants>[0]["size"]} props.size 尺寸,默认 default(h-8);xs/sm/lg 分别为 h-6/h-7/h-9;icon/icon-xs/icon-sm/icon-lg 为 size-8/6/7/9 正方形图标按钮。
|
|
78
|
+
* @return {string} 合并后的样式类名。
|
|
79
|
+
* @example
|
|
80
|
+
* ```tsx
|
|
81
|
+
* import { buttonVariants } from '@open-dy/vibecoding-sdk-taro/ui/button'
|
|
82
|
+
* buttonVariants()
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
const buttonVariants = cva(
|
|
86
|
+
"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-[transform,opacity,background-color,color,box-shadow] duration-150 ease-out outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:scale-[0.98] active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
87
|
+
{
|
|
88
|
+
variants: {
|
|
89
|
+
variant: {
|
|
90
|
+
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
|
|
91
|
+
outline:
|
|
92
|
+
"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
|
93
|
+
secondary:
|
|
94
|
+
"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
95
|
+
ghost:
|
|
96
|
+
"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
97
|
+
destructive:
|
|
98
|
+
"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
|
|
99
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
100
|
+
},
|
|
101
|
+
size: {
|
|
102
|
+
default: "h-8 gap-1.5 px-2.5",
|
|
103
|
+
xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs [&_svg:not([class*='size-'])]:size-3",
|
|
104
|
+
sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] [&_svg:not([class*='size-'])]:size-3.5",
|
|
105
|
+
lg: "h-9 gap-1.5 px-2.5",
|
|
106
|
+
icon: "size-8",
|
|
107
|
+
"icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] [&_svg:not([class*='size-'])]:size-3",
|
|
108
|
+
"icon-sm": "size-7 rounded-[min(var(--radius-md),12px)]",
|
|
109
|
+
"icon-lg": "size-9",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
defaultVariants: {
|
|
113
|
+
variant: "default",
|
|
114
|
+
size: "default",
|
|
115
|
+
},
|
|
116
|
+
}
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
function getButtonHoverClass(variant: ButtonVariant) {
|
|
120
|
+
switch (variant) {
|
|
121
|
+
case "outline":
|
|
122
|
+
return "scale-[0.98] bg-muted/90 text-foreground"
|
|
123
|
+
case "secondary":
|
|
124
|
+
return "scale-[0.98] opacity-85"
|
|
125
|
+
case "ghost":
|
|
126
|
+
return "scale-[0.98] bg-muted/80 text-foreground"
|
|
127
|
+
case "destructive":
|
|
128
|
+
return "scale-[0.98] bg-destructive/20 text-destructive dark:bg-destructive/30"
|
|
129
|
+
case "link":
|
|
130
|
+
return "opacity-70"
|
|
131
|
+
case "default":
|
|
132
|
+
default:
|
|
133
|
+
return "scale-[0.98] opacity-88"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* @desc 支持主题样式和抖音 openType 的小程序按钮;用于普通小程序和兴趣卡落地页。
|
|
139
|
+
* @param {ButtonProps} props 按钮属性;variant 和 size 选择视觉样式,className 覆写容器,onClick 处理普通点击。
|
|
140
|
+
* @param {Parameters<typeof Button>[0]["variant"]} props.variant 视觉变体,默认 default(主题色);outline 描边、secondary 次要、ghost 无底色、destructive 危险色、link 链接样式。只控制样式,不执行业务动作。
|
|
141
|
+
* @param {Parameters<typeof Button>[0]["size"]} props.size 尺寸,默认 default(h-8);xs/sm/lg 分别为 h-6/h-7/h-9;icon/icon-xs/icon-sm/icon-lg 为 size-8/6/7/9 正方形图标按钮。
|
|
142
|
+
* @param {Parameters<typeof Button>[0]["className"]} props.className 追加到预置样式之后的容器类名,可覆写色彩、边框、圆角和尺寸。普通分支应用于 View,openType 分支应用于原生 Button。
|
|
143
|
+
* @param {Parameters<typeof Button>[0]["style"]} props.style 传给渲染根节点的内联样式;普通分支为 View,openType 分支为原生 Button。
|
|
144
|
+
* @param {Parameters<typeof Button>[0]["disabled"]} props.disabled 原生 Taro Button 的禁用属性,仅 openType 分支有原生禁用保证。普通 View 分支透传该值但未实现点击拦截,请在业务回调中处理。
|
|
145
|
+
* @return {React.JSX.Element} 普通交互返回 View;传入 openType 时返回原生 Taro Button。
|
|
146
|
+
* @remarks variant 默认 default(主题背景和前景色),size 默认 default(h-8)。className 合并在预置样式之后,可覆写背景、文字色、边框、圆角和尺寸。不要为获得另一种风格重写通用按钮;按 DESIGN.md 传入 className 或 variant。openType 走原生按钮能力,普通按钮走 View,两者使用同一组视觉样式。
|
|
147
|
+
* @example
|
|
148
|
+
* ```tsx
|
|
149
|
+
* import { Button } from '@open-dy/vibecoding-sdk-taro/ui/button'
|
|
150
|
+
* export function AddTaskButton() {
|
|
151
|
+
* return <Button className="h-11 rounded-none border-4 border-black bg-black text-white" onClick={() => console.log('add task')}>添加</Button>
|
|
152
|
+
* }
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
function Button({
|
|
156
|
+
className,
|
|
157
|
+
variant = "default",
|
|
158
|
+
size = "default",
|
|
159
|
+
openType,
|
|
160
|
+
dataVideoId,
|
|
161
|
+
dataVideoType,
|
|
162
|
+
dataChannel,
|
|
163
|
+
"data-video-id": dataVideoIdAttr,
|
|
164
|
+
"data-video-type": dataVideoTypeAttr,
|
|
165
|
+
"data-channel": dataChannelAttr,
|
|
166
|
+
style,
|
|
167
|
+
...props
|
|
168
|
+
}: ButtonProps) {
|
|
169
|
+
const { hasInlineStartIcon, hasInlineEndIcon } = React.useMemo(
|
|
170
|
+
() => collectDataIconState(props.children),
|
|
171
|
+
[props.children]
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
const sharedClassName = cn(
|
|
175
|
+
buttonVariants({ variant, size }),
|
|
176
|
+
hasInlineStartIcon && (size === "xs" || size === "sm" ? "pl-1.5" : "pl-2"),
|
|
177
|
+
hasInlineEndIcon && (size === "xs" || size === "sm" ? "pr-1.5" : "pr-2"),
|
|
178
|
+
className
|
|
179
|
+
)
|
|
180
|
+
const visualProps = {
|
|
181
|
+
"data-slot": "button",
|
|
182
|
+
className: sharedClassName,
|
|
183
|
+
hoverClass: getButtonHoverClass(variant),
|
|
184
|
+
hoverStartTime: 20,
|
|
185
|
+
hoverStayTime: 90,
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (openType) {
|
|
189
|
+
const videoId = dataVideoId ?? dataVideoIdAttr
|
|
190
|
+
const videoType =
|
|
191
|
+
dataVideoType ??
|
|
192
|
+
dataVideoTypeAttr ??
|
|
193
|
+
(openType === "navigateToVideoView" ? "raw" : undefined)
|
|
194
|
+
const channel = dataChannel ?? dataChannelAttr
|
|
195
|
+
|
|
196
|
+
// 不要 plain / 内联 transparent:会盖掉 Tailwind bg-primary(TT 编译已有 #9333ea 兜底)
|
|
197
|
+
return (
|
|
198
|
+
<NativeButton
|
|
199
|
+
{...props}
|
|
200
|
+
{...visualProps}
|
|
201
|
+
openType={openType}
|
|
202
|
+
{...(videoId ? { dataVideoId: videoId, "data-video-id": videoId } : {})}
|
|
203
|
+
{...(videoType
|
|
204
|
+
? { dataVideoType: videoType, "data-video-type": videoType }
|
|
205
|
+
: {})}
|
|
206
|
+
{...(channel ? { dataChannel: channel, "data-channel": channel } : {})}
|
|
207
|
+
style={style}
|
|
208
|
+
/>
|
|
209
|
+
)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return <View {...props} {...visualProps} style={style} />
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
export { Button, buttonVariants }
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { Picker, Text, View, type ViewProps } from "@tarojs/components"
|
|
3
|
+
|
|
4
|
+
import { cn } from "../lib/utils"
|
|
5
|
+
import { Button } from "./button"
|
|
6
|
+
import { ChevronLeft, ChevronRight } from "@open-dy/lucide-taro"
|
|
7
|
+
|
|
8
|
+
type DateRange = {
|
|
9
|
+
/** @desc 范围起始日;未选择起点时省略。组件仅在 mode="range" 下读取该字段。 */
|
|
10
|
+
from?: Date;
|
|
11
|
+
/** @desc 范围结束日;仅选好起点时省略,完成范围后必须不早于 from。 */
|
|
12
|
+
to?: Date }
|
|
13
|
+
|
|
14
|
+
type CalendarBaseProps = ViewProps & {
|
|
15
|
+
/** @desc 受控显示月份;传入后以该 Date 的年/月为准,需通过 onMonthChange 更新。省略时从 selected 或当前日期初始化内部月份。 */
|
|
16
|
+
month?: Date
|
|
17
|
+
/** @desc 切换上一月/下一月或下拉年月时调用,参数为新月份的第一天;受控 month 需由调用方同步。 */
|
|
18
|
+
onMonthChange?: (month: Date) => void
|
|
19
|
+
/** @desc 是否显示相邻月份的日期,默认 true;为 false 时保留日历网格空位,隐藏那些日期。 */
|
|
20
|
+
showOutsideDays?: boolean
|
|
21
|
+
/** @desc 禁选日期判定函数;对每个日期返回 true 表示不可选,省略时不禁用日期,禁用日期不会触发 onSelect。 */
|
|
22
|
+
disabled?: (date: Date) => boolean
|
|
23
|
+
/** @desc 标题布局,默认 label(年月文本);dropdown 使用原生年月 Picker。 */
|
|
24
|
+
captionLayout?: "label" | "dropdown"
|
|
25
|
+
/** @desc dropdown 年份选项的起始年,默认当前年减 100;会扩展以包含显示中的年份,不限制可选日期。 */
|
|
26
|
+
fromYear?: number
|
|
27
|
+
/** @desc dropdown 年份选项的结束年,默认当前年加 20;会扩展以包含显示中的年份,不限制可选日期。 */
|
|
28
|
+
toYear?: number
|
|
29
|
+
/** @desc 日历根 View 的附加类名,在基础样式之后合并;省略时使用 bg-background p-2。 */
|
|
30
|
+
className?: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type SingleCalendarProps = CalendarBaseProps & {
|
|
34
|
+
/** @desc 单日选择模式,省略时为 single;此分支的 selected 使用 Date,onSelect 接收单日。 */
|
|
35
|
+
mode?: "single"
|
|
36
|
+
/** @desc 外部维护的选中日;省略时没有选中日。组件不保存选中状态,需在 onSelect 中更新。 */
|
|
37
|
+
selected?: Date
|
|
38
|
+
/** @desc 点击未禁用日期时传入该 Date;类型允许 undefined,但当前实现不会通过再次点击自动取消选择。 */
|
|
39
|
+
onSelect?: (date: Date | undefined) => void
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
type RangeCalendarProps = CalendarBaseProps & {
|
|
43
|
+
/** @desc 必须为 range,启用范围选择;selected 使用 { from, to },不能与单日 props 混用。 */
|
|
44
|
+
mode: "range"
|
|
45
|
+
/** @desc 外部维护的范围;首次选择只有 from,完成后含 from/to。组件不保存选中范围,需在 onSelect 中更新。 */
|
|
46
|
+
selected?: DateRange
|
|
47
|
+
/** @desc 点击时返回下一范围:无起点/已完成时重新开始;只有起点时完成范围,早于起点的日期会交换端点。当前实现不发出 undefined。 */
|
|
48
|
+
onSelect?: (range: DateRange | undefined) => void
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @desc 日历属性联合类型;mode 区分单日选择和日期范围选择。
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* import { CalendarProps } from '@open-dy/vibecoding-sdk-taro/ui/calendar'
|
|
56
|
+
* const single: CalendarProps = { mode: 'single', selected: new Date(2026, 9, 1) }
|
|
57
|
+
* const range: CalendarProps = { mode: 'range', selected: { from: new Date(2026, 9, 1), to: new Date(2026, 9, 3) } }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
type CalendarProps = SingleCalendarProps | RangeCalendarProps
|
|
61
|
+
|
|
62
|
+
function isRangeCalendarProps(
|
|
63
|
+
props: CalendarProps
|
|
64
|
+
): props is RangeCalendarProps {
|
|
65
|
+
return props.mode === "range"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function getDaysInMonth(year: number, month: number) {
|
|
69
|
+
return new Date(year, month + 1, 0).getDate()
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function getFirstDayOfMonth(year: number, month: number) {
|
|
73
|
+
return new Date(year, month, 1).getDay()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function isSameDay(a: Date, b: Date) {
|
|
77
|
+
return (
|
|
78
|
+
a.getFullYear() === b.getFullYear() &&
|
|
79
|
+
a.getMonth() === b.getMonth() &&
|
|
80
|
+
a.getDate() === b.getDate()
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @desc 日期选择日历组件。
|
|
86
|
+
* @param {Parameters<typeof Calendar>[0]} calendarProps 组件属性;自有字段的用途及默认行为见下表,继承属性另列。
|
|
87
|
+
* @return {ReturnType<typeof Calendar>} 组件渲染结果;类型见返回值契约。
|
|
88
|
+
* @example
|
|
89
|
+
* ```tsx
|
|
90
|
+
* import { useState } from 'react'
|
|
91
|
+
* import { Calendar } from '@open-dy/vibecoding-sdk-taro/ui/calendar'
|
|
92
|
+
* export function SingleDatePicker() {
|
|
93
|
+
* const [selected, setSelected] = useState<Date>()
|
|
94
|
+
* const [month, setMonth] = useState(new Date(2026, 9, 1))
|
|
95
|
+
* return <Calendar month={month} onMonthChange={setMonth} selected={selected} onSelect={setSelected} />
|
|
96
|
+
* }
|
|
97
|
+
* export function DateRangePicker() {
|
|
98
|
+
* const [selected, setSelected] = useState<{ from?: Date; to?: Date }>({})
|
|
99
|
+
* return <Calendar mode="range" selected={selected} onSelect={(next) => setSelected(next ?? {})} />
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
function Calendar(calendarProps: CalendarProps) {
|
|
104
|
+
const {
|
|
105
|
+
className,
|
|
106
|
+
month: monthProp,
|
|
107
|
+
onMonthChange,
|
|
108
|
+
showOutsideDays = true,
|
|
109
|
+
disabled,
|
|
110
|
+
captionLayout = "label",
|
|
111
|
+
fromYear,
|
|
112
|
+
toYear,
|
|
113
|
+
mode = "single",
|
|
114
|
+
selected: _selected,
|
|
115
|
+
onSelect: _onSelect,
|
|
116
|
+
...viewProps
|
|
117
|
+
} = calendarProps
|
|
118
|
+
const selectedSingle = isRangeCalendarProps(calendarProps)
|
|
119
|
+
? undefined
|
|
120
|
+
: calendarProps.selected
|
|
121
|
+
const selectedRange = isRangeCalendarProps(calendarProps)
|
|
122
|
+
? calendarProps.selected
|
|
123
|
+
: undefined
|
|
124
|
+
const today = new Date()
|
|
125
|
+
const [internalMonth, setInternalMonth] = React.useState(
|
|
126
|
+
monthProp ?? selectedSingle ?? selectedRange?.from ?? today
|
|
127
|
+
)
|
|
128
|
+
const currentMonth = monthProp ?? internalMonth
|
|
129
|
+
|
|
130
|
+
const year = currentMonth.getFullYear()
|
|
131
|
+
const month = currentMonth.getMonth()
|
|
132
|
+
const daysInMonth = getDaysInMonth(year, month)
|
|
133
|
+
const firstDay = getFirstDayOfMonth(year, month)
|
|
134
|
+
const daysInPrevMonth = getDaysInMonth(year, month - 1)
|
|
135
|
+
|
|
136
|
+
const weekdays = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
|
|
137
|
+
const monthNames = [
|
|
138
|
+
"January", "February", "March", "April", "May", "June",
|
|
139
|
+
"July", "August", "September", "October", "November", "December",
|
|
140
|
+
]
|
|
141
|
+
const yearOptions = React.useMemo(() => {
|
|
142
|
+
const baseYear = new Date().getFullYear()
|
|
143
|
+
const minYear = fromYear ?? baseYear - 100
|
|
144
|
+
const maxYear = toYear ?? baseYear + 20
|
|
145
|
+
const start = Math.min(minYear, year)
|
|
146
|
+
const end = Math.max(maxYear, year)
|
|
147
|
+
return Array.from({ length: end - start + 1 }, (_, index) => start + index)
|
|
148
|
+
}, [fromYear, toYear, year])
|
|
149
|
+
const monthOptions = React.useMemo(
|
|
150
|
+
() => Array.from({ length: 12 }, (_, index) => index + 1),
|
|
151
|
+
[]
|
|
152
|
+
)
|
|
153
|
+
const yearIndex = Math.max(yearOptions.indexOf(year), 0)
|
|
154
|
+
const monthIndex = month
|
|
155
|
+
|
|
156
|
+
const goToPrevMonth = () => {
|
|
157
|
+
const prev = new Date(year, month - 1, 1)
|
|
158
|
+
setInternalMonth(prev)
|
|
159
|
+
onMonthChange?.(prev)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const goToNextMonth = () => {
|
|
163
|
+
const next = new Date(year, month + 1, 1)
|
|
164
|
+
setInternalMonth(next)
|
|
165
|
+
onMonthChange?.(next)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const setYear = (nextYear: number) => {
|
|
169
|
+
const next = new Date(nextYear, month, 1)
|
|
170
|
+
setInternalMonth(next)
|
|
171
|
+
onMonthChange?.(next)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const setMonthOfYear = (nextMonth: number) => {
|
|
175
|
+
const next = new Date(year, nextMonth - 1, 1)
|
|
176
|
+
setInternalMonth(next)
|
|
177
|
+
onMonthChange?.(next)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const handleDayClick = (date: Date) => {
|
|
181
|
+
if (disabled?.(date)) return
|
|
182
|
+
|
|
183
|
+
if (isRangeCalendarProps(calendarProps)) {
|
|
184
|
+
const range = calendarProps.selected
|
|
185
|
+
if (!range?.from || (range.from && range.to)) {
|
|
186
|
+
calendarProps.onSelect?.({ from: date, to: undefined })
|
|
187
|
+
} else {
|
|
188
|
+
if (date < range.from) {
|
|
189
|
+
calendarProps.onSelect?.({ from: date, to: range.from })
|
|
190
|
+
} else {
|
|
191
|
+
calendarProps.onSelect?.({ from: range.from, to: date })
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
} else {
|
|
195
|
+
calendarProps.onSelect?.(date)
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const isSelected = (date: Date) => {
|
|
200
|
+
if (selectedSingle) {
|
|
201
|
+
return isSameDay(date, selectedSingle)
|
|
202
|
+
}
|
|
203
|
+
if (selectedRange) {
|
|
204
|
+
if (selectedRange.from && isSameDay(date, selectedRange.from)) return true
|
|
205
|
+
if (selectedRange.to && isSameDay(date, selectedRange.to)) return true
|
|
206
|
+
}
|
|
207
|
+
return false
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const isInRange = (date: Date) => {
|
|
211
|
+
if (!selectedRange?.from || !selectedRange.to) return false
|
|
212
|
+
return date > selectedRange.from && date < selectedRange.to
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const days: Array<{ date: Date; isOutside: boolean }> = []
|
|
216
|
+
|
|
217
|
+
for (let i = firstDay - 1; i >= 0; i--) {
|
|
218
|
+
days.push({
|
|
219
|
+
date: new Date(year, month - 1, daysInPrevMonth - i),
|
|
220
|
+
isOutside: true,
|
|
221
|
+
})
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
for (let i = 1; i <= daysInMonth; i++) {
|
|
225
|
+
days.push({ date: new Date(year, month, i), isOutside: false })
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const remaining = 42 - days.length
|
|
229
|
+
for (let i = 1; i <= remaining; i++) {
|
|
230
|
+
days.push({ date: new Date(year, month + 1, i), isOutside: true })
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const weeks: typeof days[] = []
|
|
234
|
+
for (let i = 0; i < days.length; i += 7) {
|
|
235
|
+
weeks.push(days.slice(i, i + 7))
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return (
|
|
239
|
+
<View
|
|
240
|
+
data-slot="calendar"
|
|
241
|
+
className={cn("bg-background p-2", className)}
|
|
242
|
+
{...viewProps}
|
|
243
|
+
>
|
|
244
|
+
<View className="flex items-center justify-between">
|
|
245
|
+
<Button
|
|
246
|
+
variant="ghost"
|
|
247
|
+
size="icon"
|
|
248
|
+
onClick={goToPrevMonth}
|
|
249
|
+
onTap={goToPrevMonth}
|
|
250
|
+
>
|
|
251
|
+
<ChevronLeft className="size-4" />
|
|
252
|
+
</Button>
|
|
253
|
+
{captionLayout === "dropdown" ? (
|
|
254
|
+
<View className="flex items-center gap-2">
|
|
255
|
+
<Picker
|
|
256
|
+
mode="selector"
|
|
257
|
+
range={yearOptions}
|
|
258
|
+
value={yearIndex}
|
|
259
|
+
onChange={(event) =>
|
|
260
|
+
setYear(yearOptions[Number(event.detail.value)] ?? year)
|
|
261
|
+
}
|
|
262
|
+
>
|
|
263
|
+
<Button variant="ghost" className="h-8 px-2">
|
|
264
|
+
<Text className="text-sm font-medium">{year}</Text>
|
|
265
|
+
</Button>
|
|
266
|
+
</Picker>
|
|
267
|
+
<Picker
|
|
268
|
+
mode="selector"
|
|
269
|
+
range={monthOptions}
|
|
270
|
+
value={monthIndex}
|
|
271
|
+
onChange={(event) =>
|
|
272
|
+
setMonthOfYear(
|
|
273
|
+
monthOptions[Number(event.detail.value)] ?? month + 1
|
|
274
|
+
)
|
|
275
|
+
}
|
|
276
|
+
>
|
|
277
|
+
<Button variant="ghost" className="h-8 px-2">
|
|
278
|
+
<Text className="text-sm font-medium">
|
|
279
|
+
{String(month + 1).padStart(2, "0")}月
|
|
280
|
+
</Text>
|
|
281
|
+
</Button>
|
|
282
|
+
</Picker>
|
|
283
|
+
</View>
|
|
284
|
+
) : (
|
|
285
|
+
<View className="text-sm font-medium">
|
|
286
|
+
{monthNames[month]} {year}
|
|
287
|
+
</View>
|
|
288
|
+
)}
|
|
289
|
+
<Button
|
|
290
|
+
variant="ghost"
|
|
291
|
+
size="icon"
|
|
292
|
+
onClick={goToNextMonth}
|
|
293
|
+
onTap={goToNextMonth}
|
|
294
|
+
>
|
|
295
|
+
<ChevronRight className="size-4" />
|
|
296
|
+
</Button>
|
|
297
|
+
</View>
|
|
298
|
+
|
|
299
|
+
<View className="mt-2 flex">
|
|
300
|
+
{weekdays.map((day) => (
|
|
301
|
+
<View
|
|
302
|
+
key={day}
|
|
303
|
+
className="flex-1 text-center text-xs font-normal text-muted-foreground"
|
|
304
|
+
>
|
|
305
|
+
{day}
|
|
306
|
+
</View>
|
|
307
|
+
))}
|
|
308
|
+
</View>
|
|
309
|
+
|
|
310
|
+
{weeks.map((week, wi) => (
|
|
311
|
+
<View key={wi} className="mt-1 flex">
|
|
312
|
+
{week.map((day, di) => {
|
|
313
|
+
if (day.isOutside && !showOutsideDays) {
|
|
314
|
+
return <View key={di} className="flex-1" />
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const isDisabled = disabled?.(day.date)
|
|
318
|
+
const sel = isSelected(day.date)
|
|
319
|
+
const inRange = isInRange(day.date)
|
|
320
|
+
const isToday = isSameDay(day.date, today)
|
|
321
|
+
|
|
322
|
+
return (
|
|
323
|
+
<View
|
|
324
|
+
key={di}
|
|
325
|
+
className={cn(
|
|
326
|
+
"flex flex-1 items-center justify-center",
|
|
327
|
+
inRange && "bg-muted"
|
|
328
|
+
)}
|
|
329
|
+
>
|
|
330
|
+
<View
|
|
331
|
+
className={cn(
|
|
332
|
+
"flex size-7 items-center justify-center rounded-md text-sm",
|
|
333
|
+
day.isOutside && "text-muted-foreground opacity-50",
|
|
334
|
+
isDisabled && "opacity-50",
|
|
335
|
+
isToday && !sel && "bg-muted font-medium",
|
|
336
|
+
sel && "bg-primary text-primary-foreground",
|
|
337
|
+
!sel && !isDisabled && !day.isOutside && "active:bg-accent"
|
|
338
|
+
)}
|
|
339
|
+
onClick={() => !isDisabled && handleDayClick(day.date)}
|
|
340
|
+
onTap={() => !isDisabled && handleDayClick(day.date)}
|
|
341
|
+
>
|
|
342
|
+
{day.date.getDate()}
|
|
343
|
+
</View>
|
|
344
|
+
</View>
|
|
345
|
+
)
|
|
346
|
+
})}
|
|
347
|
+
</View>
|
|
348
|
+
))}
|
|
349
|
+
</View>
|
|
350
|
+
)
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export { Calendar, type CalendarProps }
|