@neut/ui 0.0.1 → 0.0.3
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/README.md +6 -4
- package/dist/components/accordion/Accordion/Accordion.context.d.ts +9 -10
- package/dist/components/accordion/Accordion/Accordion.context.js +23 -25
- package/dist/components/accordion/Accordion/Accordion.context.js.map +1 -0
- package/dist/components/accordion/Accordion/Accordion.d.ts +1 -1
- package/dist/components/accordion/Accordion/Accordion.js +25 -21
- package/dist/components/accordion/Accordion/Accordion.js.map +1 -0
- package/dist/components/accordion/Accordion/Accordion.types.d.ts +8 -7
- package/dist/components/accordion/Accordion/index.d.ts +2 -0
- package/dist/components/accordion/Accordion/useAccordion.d.ts +3 -0
- package/dist/components/accordion/Accordion/useAccordion.js +34 -0
- package/dist/components/accordion/Accordion/useAccordion.js.map +1 -0
- package/dist/components/accordion/AccordionContent/AccordionContent.js +25 -32
- package/dist/components/accordion/AccordionContent/AccordionContent.js.map +1 -0
- package/dist/components/accordion/AccordionItem/AccordionItem.context.d.ts +5 -7
- package/dist/components/accordion/AccordionItem/AccordionItem.context.js +6 -20
- package/dist/components/accordion/AccordionItem/AccordionItem.context.js.map +1 -0
- package/dist/components/accordion/AccordionItem/AccordionItem.d.ts +1 -1
- package/dist/components/accordion/AccordionItem/AccordionItem.js +20 -19
- package/dist/components/accordion/AccordionItem/AccordionItem.js.map +1 -0
- package/dist/components/accordion/AccordionItem/AccordionItem.types.d.ts +4 -3
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js +18 -21
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js.map +1 -0
- package/dist/components/accordion/index.js +5 -0
- package/dist/components/aspect-ratio/AspectRatio.js +3 -1
- package/dist/components/aspect-ratio/AspectRatio.js.map +1 -0
- package/dist/components/aspect-ratio/AspectRatio.styles.js +3 -1
- package/dist/components/aspect-ratio/AspectRatio.styles.js.map +1 -0
- package/dist/components/aspect-ratio/index.js +2 -0
- package/dist/components/avatar/Avatar/Avatar.context.js +2 -0
- package/dist/components/avatar/Avatar/Avatar.context.js.map +1 -0
- package/dist/components/avatar/Avatar/Avatar.js +3 -1
- package/dist/components/avatar/Avatar/Avatar.js.map +1 -0
- package/dist/components/avatar/AvatarBadge/AvatarBadge.js +3 -1
- package/dist/components/avatar/AvatarBadge/AvatarBadge.js.map +1 -0
- package/dist/components/avatar/AvatarFallback/AvatarFallback.js +3 -1
- package/dist/components/avatar/AvatarFallback/AvatarFallback.js.map +1 -0
- package/dist/components/avatar/AvatarGroup/AvatarGroup.js +3 -1
- package/dist/components/avatar/AvatarGroup/AvatarGroup.js.map +1 -0
- package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js +3 -1
- package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js.map +1 -0
- package/dist/components/avatar/AvatarImage/AvatarImage.js +3 -1
- package/dist/components/avatar/AvatarImage/AvatarImage.js.map +1 -0
- package/dist/components/avatar/index.js +7 -0
- package/dist/components/badge/Badge.js +3 -1
- package/dist/components/badge/Badge.js.map +1 -0
- package/dist/components/badge/Badge.styles.js +3 -1
- package/dist/components/badge/Badge.styles.js.map +1 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/button/Button.js +28 -25
- package/dist/components/button/Button.js.map +1 -0
- package/dist/components/button/Button.styles.js +3 -1
- package/dist/components/button/Button.styles.js.map +1 -0
- package/dist/components/button/Button.types.d.ts +1 -0
- package/dist/components/button/index.js +2 -0
- package/dist/components/button-group/ButtonGroup/ButtonGroup.js +3 -1
- package/dist/components/button-group/ButtonGroup/ButtonGroup.js.map +1 -0
- package/dist/components/button-group/ButtonGroup/ButtonGroup.styles.js +2 -0
- package/dist/components/button-group/ButtonGroup/ButtonGroup.styles.js.map +1 -0
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js +3 -1
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js.map +1 -0
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js +3 -1
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js.map +1 -0
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js +3 -1
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js.map +1 -0
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js +3 -1
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js.map +1 -0
- package/dist/components/button-group/index.js +4 -0
- package/dist/components/card/Card/Card.js +3 -1
- package/dist/components/card/Card/Card.js.map +1 -0
- package/dist/components/card/Card/Card.styles.d.ts +1 -1
- package/dist/components/card/Card/Card.styles.js +3 -1
- package/dist/components/card/Card/Card.styles.js.map +1 -0
- package/dist/components/card/CardAction/CardAction.js +3 -1
- package/dist/components/card/CardAction/CardAction.js.map +1 -0
- package/dist/components/card/CardAction/CardAction.styles.js +2 -0
- package/dist/components/card/CardAction/CardAction.styles.js.map +1 -0
- package/dist/components/card/CardContent/CardContent.js +3 -1
- package/dist/components/card/CardContent/CardContent.js.map +1 -0
- package/dist/components/card/CardContent/CardContent.styles.d.ts +1 -1
- package/dist/components/card/CardContent/CardContent.styles.js +3 -1
- package/dist/components/card/CardContent/CardContent.styles.js.map +1 -0
- package/dist/components/card/CardDescription/CardDescription.js +3 -1
- package/dist/components/card/CardDescription/CardDescription.js.map +1 -0
- package/dist/components/card/CardDescription/CardDescription.styles.js +2 -0
- package/dist/components/card/CardDescription/CardDescription.styles.js.map +1 -0
- package/dist/components/card/CardFooter/CardFooter.js +3 -1
- package/dist/components/card/CardFooter/CardFooter.js.map +1 -0
- package/dist/components/card/CardFooter/CardFooter.styles.js +2 -0
- package/dist/components/card/CardFooter/CardFooter.styles.js.map +1 -0
- package/dist/components/card/CardHeader/CardHeader.js +3 -1
- package/dist/components/card/CardHeader/CardHeader.js.map +1 -0
- package/dist/components/card/CardHeader/CardHeader.styles.js +2 -0
- package/dist/components/card/CardHeader/CardHeader.styles.js.map +1 -0
- package/dist/components/card/CardTitle/CardTitle.js +3 -1
- package/dist/components/card/CardTitle/CardTitle.js.map +1 -0
- package/dist/components/card/CardTitle/CardTitle.styles.js +2 -0
- package/dist/components/card/CardTitle/CardTitle.styles.js.map +1 -0
- package/dist/components/card/index.js +8 -0
- package/dist/components/carousel/Carousel/Carousel.context.js +2 -0
- package/dist/components/carousel/Carousel/Carousel.context.js.map +1 -0
- package/dist/components/carousel/Carousel/Carousel.js +3 -1
- package/dist/components/carousel/Carousel/Carousel.js.map +1 -0
- package/dist/components/carousel/Carousel/useAutoPlay.js +2 -0
- package/dist/components/carousel/Carousel/useAutoPlay.js.map +1 -0
- package/dist/components/carousel/Carousel/useCarousel.js +2 -0
- package/dist/components/carousel/Carousel/useCarousel.js.map +1 -0
- package/dist/components/carousel/Carousel/useKeyboardNavigation.js +2 -0
- package/dist/components/carousel/Carousel/useKeyboardNavigation.js.map +1 -0
- package/dist/components/carousel/CarouselContent/CarouselContent.js +3 -1
- package/dist/components/carousel/CarouselContent/CarouselContent.js.map +1 -0
- package/dist/components/carousel/CarouselContent/useItemSizeMeasure.js +2 -0
- package/dist/components/carousel/CarouselContent/useItemSizeMeasure.js.map +1 -0
- package/dist/components/carousel/CarouselDots/CarouselDots.js +2 -0
- package/dist/components/carousel/CarouselDots/CarouselDots.js.map +1 -0
- package/dist/components/carousel/CarouselItem/CarouselItem.js +3 -1
- package/dist/components/carousel/CarouselItem/CarouselItem.js.map +1 -0
- package/dist/components/carousel/CarouselNext/CarouselNext.js +3 -1
- package/dist/components/carousel/CarouselNext/CarouselNext.js.map +1 -0
- package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js +3 -1
- package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js.map +1 -0
- package/dist/components/carousel/index.js +7 -0
- package/dist/components/field/Field/Field.js +3 -1
- package/dist/components/field/Field/Field.js.map +1 -0
- package/dist/components/field/Field/Field.styles.js +2 -0
- package/dist/components/field/Field/Field.styles.js.map +1 -0
- package/dist/components/field/FieldContent/FieldContent.js +3 -1
- package/dist/components/field/FieldContent/FieldContent.js.map +1 -0
- package/dist/components/field/FieldDescription/FieldDescription.js +3 -1
- package/dist/components/field/FieldDescription/FieldDescription.js.map +1 -0
- package/dist/components/field/FieldError/FieldError.js +3 -1
- package/dist/components/field/FieldError/FieldError.js.map +1 -0
- package/dist/components/field/FieldGroup/FieldGroup.js +3 -1
- package/dist/components/field/FieldGroup/FieldGroup.js.map +1 -0
- package/dist/components/field/FieldLabel/FieldLabel.js +3 -1
- package/dist/components/field/FieldLabel/FieldLabel.js.map +1 -0
- package/dist/components/field/FieldLegend/FieldLegend.js +3 -1
- package/dist/components/field/FieldLegend/FieldLegend.js.map +1 -0
- package/dist/components/field/FieldSeparator/FieldSeparator.js +3 -1
- package/dist/components/field/FieldSeparator/FieldSeparator.js.map +1 -0
- package/dist/components/field/FieldSet/FieldSet.js +3 -1
- package/dist/components/field/FieldSet/FieldSet.js.map +1 -0
- package/dist/components/field/FieldTitle/FieldTitle.js +3 -1
- package/dist/components/field/FieldTitle/FieldTitle.js.map +1 -0
- package/dist/components/field/index.js +11 -0
- package/dist/components/image/Image.config.js +2 -0
- package/dist/components/image/Image.config.js.map +1 -0
- package/dist/components/image/Image.js +2 -0
- package/dist/components/image/Image.js.map +1 -0
- package/dist/components/image/Image.utils.js +2 -0
- package/dist/components/image/Image.utils.js.map +1 -0
- package/dist/components/image/ImageElement.js +2 -0
- package/dist/components/image/ImageElement.js.map +1 -0
- package/dist/components/image/ImagePreload.js +2 -0
- package/dist/components/image/ImagePreload.js.map +1 -0
- package/dist/components/image/index.js +2 -0
- package/dist/components/input/Input.js +3 -1
- package/dist/components/input/Input.js.map +1 -0
- package/dist/components/input/index.js +2 -0
- package/dist/components/input-group/InputGroup/InputGroup.js +3 -1
- package/dist/components/input-group/InputGroup/InputGroup.js.map +1 -0
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js +3 -1
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js.map +1 -0
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js +2 -0
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js.map +1 -0
- package/dist/components/input-group/InputGroupButton/InputGroupButton.js +3 -1
- package/dist/components/input-group/InputGroupButton/InputGroupButton.js.map +1 -0
- package/dist/components/input-group/InputGroupButton/InputGroupButton.styles.js +2 -0
- package/dist/components/input-group/InputGroupButton/InputGroupButton.styles.js.map +1 -0
- package/dist/components/input-group/InputGroupInput/InputGroupInput.js +3 -1
- package/dist/components/input-group/InputGroupInput/InputGroupInput.js.map +1 -0
- package/dist/components/input-group/InputGroupText/InputGroupText.js +3 -1
- package/dist/components/input-group/InputGroupText/InputGroupText.js.map +1 -0
- package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js +3 -1
- package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js.map +1 -0
- package/dist/components/input-group/index.js +7 -0
- package/dist/components/item/Item/Item.js +3 -1
- package/dist/components/item/Item/Item.js.map +1 -0
- package/dist/components/item/Item/Item.styles.js +2 -0
- package/dist/components/item/Item/Item.styles.js.map +1 -0
- package/dist/components/item/ItemActions/ItemActions.js +3 -1
- package/dist/components/item/ItemActions/ItemActions.js.map +1 -0
- package/dist/components/item/ItemContent/ItemContent.js +3 -1
- package/dist/components/item/ItemContent/ItemContent.js.map +1 -0
- package/dist/components/item/ItemDescription/ItemDescription.js +3 -1
- package/dist/components/item/ItemDescription/ItemDescription.js.map +1 -0
- package/dist/components/item/ItemFooter/ItemFooter.js +3 -1
- package/dist/components/item/ItemFooter/ItemFooter.js.map +1 -0
- package/dist/components/item/ItemGroup/ItemGroup.js +3 -1
- package/dist/components/item/ItemGroup/ItemGroup.js.map +1 -0
- package/dist/components/item/ItemHeader/ItemHeader.js +3 -1
- package/dist/components/item/ItemHeader/ItemHeader.js.map +1 -0
- package/dist/components/item/ItemMedia/ItemMedia.js +3 -1
- package/dist/components/item/ItemMedia/ItemMedia.js.map +1 -0
- package/dist/components/item/ItemMedia/ItemMedia.styles.js +2 -0
- package/dist/components/item/ItemMedia/ItemMedia.styles.js.map +1 -0
- package/dist/components/item/ItemSeparator/ItemSeparator.js +3 -1
- package/dist/components/item/ItemSeparator/ItemSeparator.js.map +1 -0
- package/dist/components/item/ItemTitle/ItemTitle.js +3 -1
- package/dist/components/item/ItemTitle/ItemTitle.js.map +1 -0
- package/dist/components/item/index.js +11 -0
- package/dist/components/kbd/Kbd.js +3 -1
- package/dist/components/kbd/Kbd.js.map +1 -0
- package/dist/components/kbd/index.js +2 -0
- package/dist/components/label/Label.js +3 -1
- package/dist/components/label/Label.js.map +1 -0
- package/dist/components/label/index.js +2 -0
- package/dist/components/pagination/Pagination/Pagination.js +3 -1
- package/dist/components/pagination/Pagination/Pagination.js.map +1 -0
- package/dist/components/pagination/PaginationContent/PaginationContent.js +3 -1
- package/dist/components/pagination/PaginationContent/PaginationContent.js.map +1 -0
- package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js +3 -1
- package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js.map +1 -0
- package/dist/components/pagination/PaginationItem/PaginationItem.js +2 -0
- package/dist/components/pagination/PaginationItem/PaginationItem.js.map +1 -0
- package/dist/components/pagination/PaginationLink/PaginationLink.js +3 -1
- package/dist/components/pagination/PaginationLink/PaginationLink.js.map +1 -0
- package/dist/components/pagination/PaginationNext/PaginationNext.js +3 -1
- package/dist/components/pagination/PaginationNext/PaginationNext.js.map +1 -0
- package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js +3 -1
- package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js.map +1 -0
- package/dist/components/pagination/index.js +8 -0
- package/dist/components/scroll-area/ScrollArea/ScrollArea.context.d.ts +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js +2 -0
- package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js.map +1 -0
- package/dist/components/scroll-area/ScrollArea/ScrollArea.js +32 -30
- package/dist/components/scroll-area/ScrollArea/ScrollArea.js.map +1 -0
- package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js +2 -0
- package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js.map +1 -0
- package/dist/components/scroll-area/ScrollBar/ScrollBar.js +3 -1
- package/dist/components/scroll-area/ScrollBar/ScrollBar.js.map +1 -0
- package/dist/components/scroll-area/index.js +3 -0
- package/dist/components/separator/Separator.js +3 -1
- package/dist/components/separator/Separator.js.map +1 -0
- package/dist/components/separator/Separator.styles.js +3 -1
- package/dist/components/separator/Separator.styles.js.map +1 -0
- package/dist/components/separator/index.js +2 -0
- package/dist/components/sidebar/Sidebar/Sidebar.js +3 -1
- package/dist/components/sidebar/Sidebar/Sidebar.js.map +1 -0
- package/dist/components/sidebar/SidebarContent/SidebarContent.js +3 -1
- package/dist/components/sidebar/SidebarContent/SidebarContent.js.map +1 -0
- package/dist/components/sidebar/SidebarFooter/SidebarFooter.js +3 -1
- package/dist/components/sidebar/SidebarFooter/SidebarFooter.js.map +1 -0
- package/dist/components/sidebar/SidebarGroup/SidebarGroup.js +3 -1
- package/dist/components/sidebar/SidebarGroup/SidebarGroup.js.map +1 -0
- package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js +3 -1
- package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js.map +1 -0
- package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js +3 -1
- package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js.map +1 -0
- package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js +3 -1
- package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js.map +1 -0
- package/dist/components/sidebar/SidebarHeader/SidebarHeader.js +3 -1
- package/dist/components/sidebar/SidebarHeader/SidebarHeader.js.map +1 -0
- package/dist/components/sidebar/SidebarInput/SidebarInput.js +3 -1
- package/dist/components/sidebar/SidebarInput/SidebarInput.js.map +1 -0
- package/dist/components/sidebar/SidebarInset/SidebarInset.js +3 -1
- package/dist/components/sidebar/SidebarInset/SidebarInset.js.map +1 -0
- package/dist/components/sidebar/SidebarMenu/SidebarMenu.js +3 -1
- package/dist/components/sidebar/SidebarMenu/SidebarMenu.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js +3 -1
- package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js +3 -1
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js +8 -5
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.types.d.ts +1 -1
- package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js +3 -1
- package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js +3 -1
- package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js +3 -1
- package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js +3 -1
- package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js.map +1 -0
- package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js +3 -1
- package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js.map +1 -0
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js +2 -0
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js.map +1 -0
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js +2 -0
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js.map +1 -0
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.js +3 -1
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.js.map +1 -0
- package/dist/components/sidebar/SidebarRail/SidebarRail.js +3 -1
- package/dist/components/sidebar/SidebarRail/SidebarRail.js.map +1 -0
- package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js +3 -1
- package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js.map +1 -0
- package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js +2 -0
- package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js.map +1 -0
- package/dist/components/sidebar/index.js +23 -0
- package/dist/components/skeleton/Skeleton.js +3 -1
- package/dist/components/skeleton/Skeleton.js.map +1 -0
- package/dist/components/skeleton/index.js +2 -0
- package/dist/components/spinner/Spinner.js +3 -1
- package/dist/components/spinner/Spinner.js.map +1 -0
- package/dist/components/spinner/Spinner.styles.js +3 -1
- package/dist/components/spinner/Spinner.styles.js.map +1 -0
- package/dist/components/spinner/index.js +2 -0
- package/dist/components/switch/Switch.js +3 -1
- package/dist/components/switch/Switch.js.map +1 -0
- package/dist/components/switch/Switch.styles.js +3 -1
- package/dist/components/switch/Switch.styles.js.map +1 -0
- package/dist/components/switch/index.js +2 -0
- package/dist/components/textarea/Textarea.js +3 -1
- package/dist/components/textarea/Textarea.js.map +1 -0
- package/dist/components/textarea/index.js +2 -0
- package/dist/components/toast/components/Assets.js +2 -0
- package/dist/components/toast/components/Assets.js.map +1 -0
- package/dist/components/toast/components/Toast.js +3 -1
- package/dist/components/toast/components/Toast.js.map +1 -0
- package/dist/components/toast/components/ToastActions.js +3 -1
- package/dist/components/toast/components/ToastActions.js.map +1 -0
- package/dist/components/toast/components/ToastContent.js +3 -1
- package/dist/components/toast/components/ToastContent.js.map +1 -0
- package/dist/components/toast/components/ToastIcon.js +3 -1
- package/dist/components/toast/components/ToastIcon.js.map +1 -0
- package/dist/components/toast/components/Toaster.js +2 -0
- package/dist/components/toast/components/Toaster.js.map +1 -0
- package/dist/components/toast/constants.js +2 -0
- package/dist/components/toast/constants.js.map +1 -0
- package/dist/components/toast/hooks/useSwipe.js +2 -0
- package/dist/components/toast/hooks/useSwipe.js.map +1 -0
- package/dist/components/toast/hooks/useTheme.js +2 -0
- package/dist/components/toast/hooks/useTheme.js.map +1 -0
- package/dist/components/toast/hooks/useToastHeight.js +2 -0
- package/dist/components/toast/hooks/useToastHeight.js.map +1 -0
- package/dist/components/toast/hooks/useToastSubscription.js +2 -0
- package/dist/components/toast/hooks/useToastSubscription.js.map +1 -0
- package/dist/components/toast/hooks/useToastTimer.js +2 -0
- package/dist/components/toast/hooks/useToastTimer.js.map +1 -0
- package/dist/components/toast/hooks/useToasterKeyboard.js +2 -0
- package/dist/components/toast/hooks/useToasterKeyboard.js.map +1 -0
- package/dist/components/toast/hooks.js +2 -0
- package/dist/components/toast/hooks.js.map +1 -0
- package/dist/components/toast/index.js +5 -0
- package/dist/components/toast/state.js +2 -0
- package/dist/components/toast/state.js.map +1 -0
- package/dist/components/toast/types.js +2 -0
- package/dist/components/toast/types.js.map +1 -0
- package/dist/components/toast/utils.js +2 -0
- package/dist/components/toast/utils.js.map +1 -0
- package/dist/components/tooltip/Tooltip/Tooltip.context.d.ts +1 -1
- package/dist/components/tooltip/Tooltip/Tooltip.context.js +2 -0
- package/dist/components/tooltip/Tooltip/Tooltip.context.js.map +1 -0
- package/dist/components/tooltip/Tooltip/Tooltip.js +24 -16
- package/dist/components/tooltip/Tooltip/Tooltip.js.map +1 -0
- package/dist/components/tooltip/TooltipArrow/TooltipArrow.js +13 -10
- package/dist/components/tooltip/TooltipArrow/TooltipArrow.js.map +1 -0
- package/dist/components/tooltip/TooltipContent/TooltipContent.context.d.ts +2 -1
- package/dist/components/tooltip/TooltipContent/TooltipContent.context.js +2 -0
- package/dist/components/tooltip/TooltipContent/TooltipContent.context.js.map +1 -0
- package/dist/components/tooltip/TooltipContent/TooltipContent.js +29 -19
- package/dist/components/tooltip/TooltipContent/TooltipContent.js.map +1 -0
- package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js +2 -0
- package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js.map +1 -0
- package/dist/components/tooltip/TooltipContent/useTooltipContent.js +28 -31
- package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -0
- package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.d.ts +2 -2
- package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js +7 -5
- package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js.map +1 -0
- package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js +21 -7
- package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js.map +1 -0
- package/dist/components/tooltip/index.js +5 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useFontLoader.d.ts +86 -0
- package/dist/hooks/useFontLoader.js +89 -0
- package/dist/hooks/useFontLoader.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +108 -104
- package/dist/ui.css +3 -0
- package/dist/{lib/utils → utils}/clsx.js +3 -1
- package/dist/utils/clsx.js.map +1 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/warn-once.js +6 -0
- package/dist/utils/warn-once.js.map +1 -0
- package/package.json +54 -9
- package/dist/styles/animate.css +0 -250
- package/dist/styles/index.css +0 -100
- package/dist/styles/toast.css +0 -745
- /package/dist/{lib/utils → utils}/clsx.d.ts +0 -0
- /package/dist/{lib/utils → utils}/get-style.d.ts +0 -0
- /package/dist/{lib/utils → utils}/index.d.ts +0 -0
- /package/dist/{lib/utils → utils}/warn-once.d.ts +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { clsx as e } from "../../../
|
|
1
|
+
import { clsx as e } from "../../../utils/clsx.js";
|
|
2
2
|
import { useTooltipContext as t } from "../Tooltip/Tooltip.context.js";
|
|
3
3
|
import { TooltipContentContext as n } from "./TooltipContent.context.js";
|
|
4
4
|
import { useTooltipContent as r } from "./useTooltipContent.js";
|
|
5
5
|
import { Portal as i, createComponent as a, insert as o, mergeProps as s, spread as c, template as l, use as u } from "solid-js/web";
|
|
6
|
-
import { Show as d,
|
|
6
|
+
import { Show as d, createMemo as f, createSignal as p, mergeProps as m, splitProps as h } from "solid-js";
|
|
7
7
|
//#region src/components/tooltip/TooltipContent/TooltipContent.tsx
|
|
8
|
-
var
|
|
9
|
-
let [
|
|
8
|
+
var g = /* @__PURE__ */ l("<div data-slot=tooltip-content role=tooltip>"), _ = (l) => {
|
|
9
|
+
let _ = t(), [v, y] = h(m({
|
|
10
10
|
side: "top",
|
|
11
11
|
align: "center",
|
|
12
12
|
alignOffset: 0,
|
|
@@ -19,43 +19,51 @@ var m = /* @__PURE__ */ l("<div data-slot=tooltip-content role=tooltip>"), h = (
|
|
|
19
19
|
"class",
|
|
20
20
|
"classList",
|
|
21
21
|
"children"
|
|
22
|
-
]),
|
|
22
|
+
]), [b, x] = p(), { shouldRender: S, position: C } = r(b, () => v), w = f(() => _.open());
|
|
23
23
|
return a(d, {
|
|
24
24
|
get when() {
|
|
25
|
-
return
|
|
25
|
+
return S();
|
|
26
26
|
},
|
|
27
27
|
get children() {
|
|
28
28
|
return a(i, { get children() {
|
|
29
|
-
var t =
|
|
30
|
-
return
|
|
29
|
+
var t = g();
|
|
30
|
+
return u(x, t), c(t, s({
|
|
31
31
|
get "data-open"() {
|
|
32
|
-
return
|
|
32
|
+
return w() || void 0;
|
|
33
33
|
},
|
|
34
34
|
get "data-closed"() {
|
|
35
|
-
return
|
|
35
|
+
return !w() || void 0;
|
|
36
36
|
},
|
|
37
37
|
get "data-align"() {
|
|
38
|
-
return
|
|
38
|
+
return C.align;
|
|
39
39
|
},
|
|
40
40
|
get "data-side"() {
|
|
41
|
-
return
|
|
41
|
+
return C.side;
|
|
42
42
|
},
|
|
43
43
|
get id() {
|
|
44
44
|
return _.contentId;
|
|
45
45
|
},
|
|
46
46
|
get class() {
|
|
47
|
-
return e("fixed z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-neutral-950 dark:bg-neutral-50 px-3 py-1.5 text-xs text-white dark:text-neutral-950 has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
47
|
+
return e("fixed z-50 pointer-events-none inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-neutral-950 dark:bg-neutral-50 px-3 py-1.5 text-xs text-white dark:text-neutral-950 has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", v.class);
|
|
48
48
|
},
|
|
49
49
|
get style() {
|
|
50
50
|
return {
|
|
51
|
-
top: `${
|
|
52
|
-
left: `${
|
|
51
|
+
top: `${C.top}px`,
|
|
52
|
+
left: `${C.left}px`,
|
|
53
|
+
visibility: C.top === 0 ? "hidden" : "visible"
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
|
-
},
|
|
56
|
-
value: {
|
|
56
|
+
}, y), !1, !0), o(t, a(n.Provider, {
|
|
57
|
+
value: {
|
|
58
|
+
get side() {
|
|
59
|
+
return C.side;
|
|
60
|
+
},
|
|
61
|
+
get align() {
|
|
62
|
+
return C.align;
|
|
63
|
+
}
|
|
64
|
+
},
|
|
57
65
|
get children() {
|
|
58
|
-
return
|
|
66
|
+
return v.children;
|
|
59
67
|
}
|
|
60
68
|
})), t;
|
|
61
69
|
} });
|
|
@@ -63,4 +71,6 @@ var m = /* @__PURE__ */ l("<div data-slot=tooltip-content role=tooltip>"), h = (
|
|
|
63
71
|
});
|
|
64
72
|
};
|
|
65
73
|
//#endregion
|
|
66
|
-
export {
|
|
74
|
+
export { _ as TooltipContent };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=TooltipContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipContent.js","names":["createMemo","createSignal","mergeProps","Show","splitProps","useTooltipContext","Portal","TooltipContentProps","clsx","TooltipContentContext","useTooltipContent","TooltipContent","props","ctx","merged","side","align","alignOffset","sideOffset","const","local","others","ref","setRef","HTMLDivElement","shouldRender","position","isOpen","open","_$createComponent","when","children","_el$","_tmpl$","_$use","_$spread","_$mergeProps","data-open","undefined","data-closed","data-align","data-side","id","contentId","class","style","top","left","visibility","_$insert","Provider","value"],"sources":["../../../../src/components/tooltip/TooltipContent/TooltipContent.tsx"],"sourcesContent":["import {\n createMemo,\n createSignal,\n mergeProps,\n Show,\n splitProps,\n} from \"solid-js\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\nimport { Portal } from \"solid-js/web\";\nimport type { TooltipContentProps } from \"./TooltipContent.types\";\nimport { clsx } from \"~/utils\";\nimport { TooltipContentContext } from \"./TooltipContent.context\";\nimport { useTooltipContent } from \"./useTooltipContent\";\n\nexport const TooltipContent = (props: TooltipContentProps) => {\n const ctx = useTooltipContext();\n\n const merged = mergeProps(\n { side: \"top\", align: \"center\", alignOffset: 0, sideOffset: 4 } as const,\n props,\n );\n const [local, others] = splitProps(merged, [\n \"side\",\n \"align\",\n \"alignOffset\",\n \"sideOffset\",\n \"class\",\n \"classList\",\n \"children\",\n ]);\n\n const [ref, setRef] = createSignal<HTMLDivElement>();\n\n const { shouldRender, position } = useTooltipContent(ref, () => local);\n\n const isOpen = createMemo(() => ctx.open());\n\n return (\n <Show when={shouldRender()}>\n <Portal>\n <div\n ref={setRef}\n data-slot=\"tooltip-content\"\n data-open={isOpen() || undefined}\n data-closed={!isOpen() || undefined}\n data-align={position.align}\n data-side={position.side}\n id={ctx.contentId}\n role=\"tooltip\"\n class={clsx(\n \"fixed z-50 pointer-events-none inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-neutral-950 dark:bg-neutral-50 px-3 py-1.5 text-xs text-white dark:text-neutral-950 has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n local.class,\n )}\n style={{\n top: `${position.top}px`,\n left: `${position.left}px`,\n visibility: position.top === 0 ? \"hidden\" : \"visible\",\n }}\n {...others}\n >\n <TooltipContentContext.Provider\n value={{\n get side() {\n return position.side;\n },\n get align() {\n return position.align;\n },\n }}\n >\n {local.children}\n </TooltipContentContext.Provider>\n </div>\n </Portal>\n </Show>\n );\n};\n"],"mappings":";;;;;;;2EAcaW,KAAkBC,MAA+B;CAC5D,IAAMC,IAAMR,GAAmB,EAMzB,CAACe,GAAOC,KAAUjB,EAJTF,EACb;EAAEa,MAAM;EAAOC,OAAO;EAAUC,aAAa;EAAGC,YAAY;EAAG,EAC/DN,EACD,EAC0C;EACzC;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,EAEI,CAACU,GAAKC,KAAUtB,GAA8B,EAE9C,EAAEwB,iBAAcC,gBAAahB,EAAkBY,SAAWF,EAAM,EAEhEO,IAAS3B,QAAiBa,EAAIe,MAAM,CAAC;AAE3C,QAAAC,EACG1B,GAAI;EAAA,IAAC2B,OAAI;AAAA,UAAEL,GAAc;;EAAA,IAAAM,WAAA;AAAA,UAAAF,EACvBvB,GAAM,EAAA,IAAAyB,WAAA;IAAA,IAAAC,IAAAC,GAAA;AA+Bc,WA/BdC,EAEEX,GAAMS,EAAA,EAAAG,EAAAH,GAAAI,EAAA;KAAA,IAAA,cAAA;AAAA,aAEAT,GAAQ,IAAIW,KAAAA;;KAAS,IAAA,gBAAA;AAAA,aACnB,CAACX,GAAQ,IAAIW,KAAAA;;KAAS,IAAA,eAAA;AAAA,aACvBZ,EAASV;;KAAK,IAAA,cAAA;AAAA,aACfU,EAASX;;KAAI,IACxB2B,KAAE;AAAA,aAAE7B,EAAI8B;;KAAS,IAAA,QAAA;AAAA,aAEVnC,EACL,k0BACAY,EAAMwB,MACP;;KAAA,IACDC,QAAK;AAAA,aAAE;OACLC,KAAK,GAAGpB,EAASoB,IAAG;OACpBC,MAAM,GAAGrB,EAASqB,KAAI;OACtBC,YAAYtB,EAASoB,QAAQ,IAAI,WAAW;OAC7C;;KAAA,EACGzB,EAAM,EAAA,IAAA,GAAA,EAAA4B,EAAAjB,GAAAH,EAETpB,EAAsByC,UAAQ;KAC7BC,OAAO;MACL,IAAIpC,OAAO;AACT,cAAOW,EAASX;;MAElB,IAAIC,QAAQ;AACV,cAAOU,EAASV;;MAEnB;KAAA,IAAAe,WAAA;AAAA,aAEAX,EAAMW;;KAAQ,CAAA,CAAA,EAAAC;MAAA,CAAA;;EAAA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipContent.utils.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/TooltipContent.utils.ts"],"sourcesContent":["export function computePosition(\n trigger: HTMLElement,\n content: HTMLElement,\n side: \"top\" | \"bottom\" | \"left\" | \"right\",\n align: \"start\" | \"center\" | \"end\",\n alignOffset: number,\n sideOffset: number,\n) {\n const rect = trigger.getBoundingClientRect();\n const contentWidth = content.offsetWidth;\n const contentHeight = content.offsetHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const MARGIN = 4;\n\n let top = 0;\n let left = 0;\n let resolvedSide = side;\n let resolvedAlign = align;\n\n // --- Flip:优先检测对侧是否有足够空间,再决定最终 side ---\n switch (side) {\n case \"top\":\n if (\n rect.top < contentHeight + sideOffset &&\n rect.bottom + sideOffset + contentHeight <= vh\n ) {\n resolvedSide = \"bottom\";\n }\n break;\n case \"bottom\":\n if (\n rect.bottom + sideOffset + contentHeight > vh &&\n rect.top - sideOffset - contentHeight >= 0\n ) {\n resolvedSide = \"top\";\n }\n break;\n case \"left\":\n if (\n rect.left < contentWidth + sideOffset &&\n rect.right + sideOffset + contentWidth <= vw\n ) {\n resolvedSide = \"right\";\n }\n break;\n case \"right\":\n if (\n rect.right + sideOffset + contentWidth > vw &&\n rect.left - sideOffset - contentWidth >= 0\n ) {\n resolvedSide = \"left\";\n }\n break;\n }\n\n // --- 主轴位置(基于 resolvedSide)---\n switch (resolvedSide) {\n case \"top\":\n top = rect.top - contentHeight - sideOffset;\n break;\n case \"bottom\":\n top = rect.bottom + sideOffset;\n break;\n case \"left\":\n left = rect.left - contentWidth - sideOffset;\n break;\n case \"right\":\n left = rect.right + sideOffset;\n break;\n }\n\n // --- 交叉轴位置(align)---\n if (resolvedSide === \"top\" || resolvedSide === \"bottom\") {\n switch (align) {\n case \"start\":\n left = rect.left + alignOffset;\n break;\n case \"center\":\n left = rect.left + rect.width / 2 - contentWidth / 2 + alignOffset;\n break;\n case \"end\":\n left = rect.right - contentWidth - alignOffset;\n break;\n }\n } else {\n switch (align) {\n case \"start\":\n top = rect.top + alignOffset;\n break;\n case \"center\":\n top = rect.top + rect.height / 2 - contentHeight / 2 + alignOffset;\n break;\n case \"end\":\n top = rect.bottom - contentHeight - alignOffset;\n break;\n }\n }\n\n // --- Shift:贴边平移,并更新 resolvedAlign ---\n if (resolvedSide === \"top\" || resolvedSide === \"bottom\") {\n if (left < MARGIN) {\n left = MARGIN;\n resolvedAlign = \"start\";\n } else if (left + contentWidth > vw - MARGIN) {\n left = vw - contentWidth - MARGIN;\n resolvedAlign = \"end\";\n }\n } else {\n if (top < MARGIN) {\n top = MARGIN;\n resolvedAlign = \"start\";\n } else if (top + contentHeight > vh - MARGIN) {\n top = vh - contentHeight - MARGIN;\n resolvedAlign = \"end\";\n }\n }\n\n return { top, left, side: resolvedSide, align: resolvedAlign };\n}\n"],"mappings":";AAAA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACA,GACA;CACA,IAAM,IAAO,EAAQ,uBAAuB,EACtC,IAAe,EAAQ,aACvB,IAAgB,EAAQ,cACxB,IAAK,OAAO,YACZ,IAAK,OAAO,aAGd,IAAM,GACN,IAAO,GACP,IAAe,GACf,IAAgB;AAGpB,SAAQ,GAAR;EACE,KAAK;AACH,GACE,EAAK,MAAM,IAAgB,KAC3B,EAAK,SAAS,IAAa,KAAiB,MAE5C,IAAe;AAEjB;EACF,KAAK;AACH,GACE,EAAK,SAAS,IAAa,IAAgB,KAC3C,EAAK,MAAM,IAAa,KAAiB,MAEzC,IAAe;AAEjB;EACF,KAAK;AACH,GACE,EAAK,OAAO,IAAe,KAC3B,EAAK,QAAQ,IAAa,KAAgB,MAE1C,IAAe;AAEjB;EACF,KAAK;AACH,GACE,EAAK,QAAQ,IAAa,IAAe,KACzC,EAAK,OAAO,IAAa,KAAgB,MAEzC,IAAe;AAEjB;;AAIJ,SAAQ,GAAR;EACE,KAAK;AACH,OAAM,EAAK,MAAM,IAAgB;AACjC;EACF,KAAK;AACH,OAAM,EAAK,SAAS;AACpB;EACF,KAAK;AACH,OAAO,EAAK,OAAO,IAAe;AAClC;EACF,KAAK;AACH,OAAO,EAAK,QAAQ;AACpB;;AAIJ,KAAI,MAAiB,SAAS,MAAiB,SAC7C,SAAQ,GAAR;EACE,KAAK;AACH,OAAO,EAAK,OAAO;AACnB;EACF,KAAK;AACH,OAAO,EAAK,OAAO,EAAK,QAAQ,IAAI,IAAe,IAAI;AACvD;EACF,KAAK;AACH,OAAO,EAAK,QAAQ,IAAe;AACnC;;KAGJ,SAAQ,GAAR;EACE,KAAK;AACH,OAAM,EAAK,MAAM;AACjB;EACF,KAAK;AACH,OAAM,EAAK,MAAM,EAAK,SAAS,IAAI,IAAgB,IAAI;AACvD;EACF,KAAK;AACH,OAAM,EAAK,SAAS,IAAgB;AACpC;;AAuBN,QAlBI,MAAiB,SAAS,MAAiB,WACzC,IAAO,KACT,IAAO,GACP,IAAgB,WACP,IAAO,IAAe,IAAK,MACpC,IAAO,IAAK,IAAe,GAC3B,IAAgB,SAGd,IAAM,KACR,IAAM,GACN,IAAgB,WACP,IAAM,IAAgB,IAAK,MACpC,IAAM,IAAK,IAAgB,GAC3B,IAAgB,QAIb;EAAE;EAAK;EAAM,MAAM;EAAc,OAAO;EAAe"}
|
|
@@ -1,51 +1,48 @@
|
|
|
1
1
|
import { useTooltipContext as e } from "../Tooltip/Tooltip.context.js";
|
|
2
2
|
import { computePosition as t } from "./TooltipContent.utils.js";
|
|
3
|
-
import { createEffect as n, createSignal as r, onCleanup as i, onMount as a } from "solid-js";
|
|
4
|
-
import { createStore as
|
|
3
|
+
import { createEffect as n, createSignal as r, onCleanup as i, onMount as a, untrack as o } from "solid-js";
|
|
4
|
+
import { createStore as s } from "solid-js/store";
|
|
5
5
|
//#region src/components/tooltip/TooltipContent/useTooltipContent.ts
|
|
6
|
-
var
|
|
7
|
-
let
|
|
8
|
-
top:
|
|
9
|
-
left:
|
|
10
|
-
side:
|
|
11
|
-
align:
|
|
12
|
-
}), [p, m] = r(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
let { top: n, left: r, side: i, align: a } = t(e, s(), c().side, c().align, c().alignOffset, c().sideOffset);
|
|
6
|
+
var c = (c, l) => {
|
|
7
|
+
let u = e(), [d, f] = s({
|
|
8
|
+
top: 0,
|
|
9
|
+
left: 0,
|
|
10
|
+
side: o(() => l().side),
|
|
11
|
+
align: o(() => l().align)
|
|
12
|
+
}), [p, m] = r(o(u.open)), h = (e) => {
|
|
13
|
+
if (!u.triggerRef || !e) return;
|
|
14
|
+
let { top: n, left: r, side: i, align: a } = t(u.triggerRef, e, l().side, l().align, l().alignOffset, l().sideOffset);
|
|
16
15
|
f({
|
|
17
16
|
top: n,
|
|
18
17
|
left: r,
|
|
19
18
|
side: i,
|
|
20
19
|
align: a
|
|
21
20
|
});
|
|
22
|
-
},
|
|
23
|
-
requestAnimationFrame(() => {
|
|
24
|
-
requestAnimationFrame(g);
|
|
25
|
-
});
|
|
26
|
-
};
|
|
21
|
+
}, g = () => h(c());
|
|
27
22
|
return a(() => {
|
|
28
|
-
window.addEventListener("scroll", g), window.addEventListener("resize", g
|
|
23
|
+
window.addEventListener("scroll", g, { passive: !0 }), window.addEventListener("resize", g, { passive: !0 });
|
|
29
24
|
}), i(() => {
|
|
30
25
|
window.removeEventListener("scroll", g), window.removeEventListener("resize", g);
|
|
31
26
|
}), n(() => {
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let t = () => {
|
|
38
|
-
m(!1), e.removeEventListener("animationend", t), e.removeEventListener("transitionend", t);
|
|
39
|
-
};
|
|
40
|
-
e.addEventListener("animationend", t), e.addEventListener("transitionend", t), h = setTimeout(() => m(!1), 300);
|
|
41
|
-
} else m(!1);
|
|
27
|
+
if (u.open()) {
|
|
28
|
+
m(!0), requestAnimationFrame(() => {
|
|
29
|
+
requestAnimationFrame(() => h(c()));
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
42
32
|
}
|
|
43
|
-
|
|
44
|
-
|
|
33
|
+
let e = c();
|
|
34
|
+
if (!e) {
|
|
35
|
+
m(!1);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
let t = () => m(!1);
|
|
39
|
+
e.addEventListener("animationend", t, { once: !0 }), e.addEventListener("transitionend", t, { once: !0 });
|
|
45
40
|
}), {
|
|
46
41
|
shouldRender: p,
|
|
47
42
|
position: d
|
|
48
43
|
};
|
|
49
44
|
};
|
|
50
45
|
//#endregion
|
|
51
|
-
export {
|
|
46
|
+
export { c as useTooltipContent };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=useTooltipContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTooltipContent.js","names":[],"sources":["../../../../src/components/tooltip/TooltipContent/useTooltipContent.ts"],"sourcesContent":["import {\n createEffect,\n createSignal,\n onCleanup,\n onMount,\n untrack,\n} from \"solid-js\";\nimport { computePosition } from \"./TooltipContent.utils\";\nimport { createStore } from \"solid-js/store\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\nimport type { TooltipContentProps } from \"./TooltipContent.types\";\n\nexport const useTooltipContent = (\n ref: () => HTMLDivElement | undefined,\n local: () => Required<\n Pick<TooltipContentProps, \"side\" | \"align\" | \"alignOffset\" | \"sideOffset\">\n >,\n) => {\n const ctx = useTooltipContext();\n\n const [position, setPosition] = createStore({\n top: 0,\n left: 0,\n side: untrack(() => local().side),\n align: untrack(() => local().align),\n });\n const [shouldRender, setShouldRender] = createSignal(untrack(ctx.open));\n\n const updatePosition = (content: HTMLElement | undefined) => {\n if (!ctx.triggerRef || !content) return;\n\n const { top, left, side, align } = computePosition(\n ctx.triggerRef,\n content,\n local().side,\n local().align,\n local().alignOffset,\n local().sideOffset,\n );\n setPosition({ top, left, side, align });\n };\n\n const updatePositionWithContentRef = () => updatePosition(ref());\n\n onMount(() => {\n window.addEventListener(\"scroll\", updatePositionWithContentRef, {\n passive: true,\n });\n window.addEventListener(\"resize\", updatePositionWithContentRef, {\n passive: true,\n });\n });\n\n onCleanup(() => {\n window.removeEventListener(\"scroll\", updatePositionWithContentRef);\n window.removeEventListener(\"resize\", updatePositionWithContentRef);\n });\n\n createEffect(() => {\n const isOpen = ctx.open();\n\n if (isOpen) {\n setShouldRender(true);\n // 等待 DOM 完成布局后再计算,双 rAF 确保内容节点已完成首次渲染\n requestAnimationFrame(() => {\n requestAnimationFrame(() => updatePosition(ref()));\n });\n return;\n }\n\n const el = ref();\n if (!el) {\n setShouldRender(false);\n return;\n }\n\n const onFinish = () => setShouldRender(false);\n el.addEventListener(\"animationend\", onFinish, { once: true });\n el.addEventListener(\"transitionend\", onFinish, { once: true });\n });\n\n return { shouldRender, position };\n};\n"],"mappings":";;;;;AAYA,IAAa,KACX,GACA,MAGG;CACH,IAAM,IAAM,GAAmB,EAEzB,CAAC,GAAU,KAAe,EAAY;EAC1C,KAAK;EACL,MAAM;EACN,MAAM,QAAc,GAAO,CAAC,KAAK;EACjC,OAAO,QAAc,GAAO,CAAC,MAAM;EACpC,CAAC,EACI,CAAC,GAAc,KAAmB,EAAa,EAAQ,EAAI,KAAK,CAAC,EAEjE,KAAkB,MAAqC;AAC3D,MAAI,CAAC,EAAI,cAAc,CAAC,EAAS;EAEjC,IAAM,EAAE,QAAK,SAAM,SAAM,aAAU,EACjC,EAAI,YACJ,GACA,GAAO,CAAC,MACR,GAAO,CAAC,OACR,GAAO,CAAC,aACR,GAAO,CAAC,WACT;AACD,IAAY;GAAE;GAAK;GAAM;GAAM;GAAO,CAAC;IAGnC,UAAqC,EAAe,GAAK,CAAC;AAuChE,QArCA,QAAc;AAIZ,EAHA,OAAO,iBAAiB,UAAU,GAA8B,EAC9D,SAAS,IACV,CAAC,EACF,OAAO,iBAAiB,UAAU,GAA8B,EAC9D,SAAS,IACV,CAAC;GACF,EAEF,QAAgB;AAEd,EADA,OAAO,oBAAoB,UAAU,EAA6B,EAClE,OAAO,oBAAoB,UAAU,EAA6B;GAClE,EAEF,QAAmB;AAGjB,MAFe,EAAI,MAAM,EAEb;AAGV,GAFA,EAAgB,GAAK,EAErB,4BAA4B;AAC1B,gCAA4B,EAAe,GAAK,CAAC,CAAC;KAClD;AACF;;EAGF,IAAM,IAAK,GAAK;AAChB,MAAI,CAAC,GAAI;AACP,KAAgB,GAAM;AACtB;;EAGF,IAAM,UAAiB,EAAgB,GAAM;AAE7C,EADA,EAAG,iBAAiB,gBAAgB,GAAU,EAAE,MAAM,IAAM,CAAC,EAC7D,EAAG,iBAAiB,iBAAiB,GAAU,EAAE,MAAM,IAAM,CAAC;GAC9D,EAEK;EAAE;EAAc;EAAU"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ParentProps } from 'solid-js';
|
|
2
|
-
export declare const TooltipTrigger: (props: ParentProps) =>
|
|
1
|
+
import { JSXElement, ParentProps } from 'solid-js';
|
|
2
|
+
export declare const TooltipTrigger: (props: ParentProps) => JSXElement;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { useTooltipTrigger as e } from "./useTooltipTrigger.js";
|
|
2
|
-
import { children as t } from "solid-js";
|
|
2
|
+
import { children as t, untrack as n } from "solid-js";
|
|
3
3
|
//#region src/components/tooltip/TooltipTrigger/TooltipTrigger.tsx
|
|
4
|
-
var
|
|
5
|
-
let
|
|
6
|
-
return e(
|
|
4
|
+
var r = (r) => {
|
|
5
|
+
let i = t(() => n(() => r.children));
|
|
6
|
+
return e(i), i;
|
|
7
7
|
};
|
|
8
8
|
//#endregion
|
|
9
|
-
export {
|
|
9
|
+
export { r as TooltipTrigger };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=TooltipTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipTrigger.js","names":["children","untrack","JSXElement","ParentProps","useTooltipTrigger","TooltipTrigger","props","resolved"],"sources":["../../../../src/components/tooltip/TooltipTrigger/TooltipTrigger.tsx"],"sourcesContent":["import { children, untrack, type JSXElement, type ParentProps } from \"solid-js\";\nimport { useTooltipTrigger } from \"./useTooltipTrigger\";\n\nexport const TooltipTrigger = (props: ParentProps) => {\n const resolved = children(() => untrack(() => props.children));\n useTooltipTrigger(resolved);\n\n return resolved as unknown as JSXElement;\n};\n"],"mappings":";;;AAGA,IAAaK,KAAkBC,MAAuB;CACpD,IAAMC,IAAWP,QAAeC,QAAcK,EAAMN,SAAS,CAAC;AAG9D,QAFAI,EAAkBG,EAAS,EAEpBA"}
|
|
@@ -6,15 +6,29 @@ var r = (r) => {
|
|
|
6
6
|
clearTimeout(l), c = setTimeout(() => i(!0), a);
|
|
7
7
|
}, d = () => {
|
|
8
8
|
clearTimeout(c), l = setTimeout(() => i(!1), o);
|
|
9
|
-
}, f = () =>
|
|
9
|
+
}, f = (e) => {
|
|
10
|
+
console.log("鼠标移入", e.type), u();
|
|
11
|
+
}, p = (e) => {
|
|
12
|
+
console.log("鼠标移出", e.type), d();
|
|
13
|
+
}, m = (e) => {
|
|
14
|
+
console.log("鼠标按下", e.type), d();
|
|
15
|
+
};
|
|
10
16
|
n(() => {
|
|
11
|
-
let e = r();
|
|
12
|
-
e &&
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
let e = r.toArray();
|
|
18
|
+
e.length !== 1 && console.warn("[Tooltip] TooltipTrigger should have exactly one child");
|
|
19
|
+
let n = e[0];
|
|
20
|
+
if (n) {
|
|
21
|
+
if (!(n instanceof HTMLElement)) {
|
|
22
|
+
console.error("[Tooltip] TooltipTrigger child should be an HTMLElement");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
s(n), n.addEventListener("pointerenter", f), n.addEventListener("pointerleave", p), n.addEventListener("mousedown", m), n.addEventListener("blur", p), t(() => {
|
|
26
|
+
clearTimeout(c), clearTimeout(l), n && (n.removeEventListener("pointerenter", f), n.removeEventListener("pointerleave", p), n.removeEventListener("mousedown", m), n.removeEventListener("blur", p));
|
|
27
|
+
});
|
|
28
|
+
}
|
|
17
29
|
});
|
|
18
30
|
};
|
|
19
31
|
//#endregion
|
|
20
32
|
export { r as useTooltipTrigger };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=useTooltipTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTooltipTrigger.js","names":[],"sources":["../../../../src/components/tooltip/TooltipTrigger/useTooltipTrigger.ts"],"sourcesContent":["import { onCleanup, onMount, type ChildrenReturn } from \"solid-js\";\nimport type { TimeoutID } from \"~/types\";\nimport { useTooltipContext } from \"../Tooltip/Tooltip.context\";\n\nexport const useTooltipTrigger = (resolved: ChildrenReturn) => {\n const { setOpen, openDelay, closeDelay, setTriggerRef } = useTooltipContext();\n\n let openTimer: TimeoutID;\n let closeTimer: TimeoutID;\n\n const open = () => {\n clearTimeout(closeTimer);\n openTimer = setTimeout(() => setOpen(true), openDelay);\n };\n\n const close = () => {\n clearTimeout(openTimer);\n closeTimer = setTimeout(() => setOpen(false), closeDelay);\n };\n\n const handleMouseEnter = (ev: PointerEvent) => {\n console.log(\"鼠标移入\", ev.type);\n open();\n };\n const handleMouseLeave = (ev: PointerEvent | FocusEvent) => {\n console.log(\"鼠标移出\", ev.type);\n close();\n };\n const handleMouseDown = (ev: Event) => {\n console.log(\"鼠标按下\", ev.type);\n close();\n };\n\n onMount(() => {\n const trigger = resolved.toArray();\n if (trigger.length !== 1) {\n console.warn(\"[Tooltip] TooltipTrigger should have exactly one child\");\n }\n\n const el = trigger[0] as HTMLElement | undefined;\n\n if (!el) return;\n\n if (!(el instanceof HTMLElement)) {\n console.error(\"[Tooltip] TooltipTrigger child should be an HTMLElement\");\n return;\n }\n\n setTriggerRef(el);\n el.addEventListener(\"pointerenter\", handleMouseEnter);\n el.addEventListener(\"pointerleave\", handleMouseLeave);\n el.addEventListener(\"mousedown\", handleMouseDown);\n el.addEventListener(\"blur\", handleMouseLeave);\n\n onCleanup(() => {\n clearTimeout(openTimer);\n clearTimeout(closeTimer);\n\n if (!el) return;\n el.removeEventListener(\"pointerenter\", handleMouseEnter);\n el.removeEventListener(\"pointerleave\", handleMouseLeave);\n el.removeEventListener(\"mousedown\", handleMouseDown);\n el.removeEventListener(\"blur\", handleMouseLeave);\n });\n });\n\n // createEffect(() => {\n // el = resolved() as HTMLElement | undefined;\n // if (!el) return;\n\n // const handleMouseEnter = () => {\n // open();\n // };\n // const handleMouseLeave = () => {\n // close();\n // };\n // const handleMouseDown = () => close();\n\n // untrack(() => setTriggerRef(el!));\n // el.addEventListener(\"mouseenter\", handleMouseEnter);\n // el.addEventListener(\"mouseleave\", handleMouseLeave);\n // el.addEventListener(\"mousedown\", handleMouseDown);\n // el.addEventListener(\"blur\", handleMouseLeave);\n\n // onCleanup(() => {\n // el!.removeEventListener(\"mouseenter\", handleMouseEnter);\n // el!.removeEventListener(\"mouseleave\", handleMouseLeave);\n // el!.removeEventListener(\"mousedown\", handleMouseDown);\n // el!.removeEventListener(\"blur\", handleMouseLeave);\n // });\n // });\n\n // onCleanup(() => {\n // clearTimeout(openTimer);\n // clearTimeout(closeTimer);\n // });\n};\n"],"mappings":";;;AAIA,IAAa,KAAqB,MAA6B;CAC7D,IAAM,EAAE,YAAS,cAAW,eAAY,qBAAkB,GAAmB,EAEzE,GACA,GAEE,UAAa;AAEjB,EADA,aAAa,EAAW,EACxB,IAAY,iBAAiB,EAAQ,GAAK,EAAE,EAAU;IAGlD,UAAc;AAElB,EADA,aAAa,EAAU,EACvB,IAAa,iBAAiB,EAAQ,GAAM,EAAE,EAAW;IAGrD,KAAoB,MAAqB;AAE7C,EADA,QAAQ,IAAI,QAAQ,EAAG,KAAK,EAC5B,GAAM;IAEF,KAAoB,MAAkC;AAE1D,EADA,QAAQ,IAAI,QAAQ,EAAG,KAAK,EAC5B,GAAO;IAEH,KAAmB,MAAc;AAErC,EADA,QAAQ,IAAI,QAAQ,EAAG,KAAK,EAC5B,GAAO;;AAGT,SAAc;EACZ,IAAM,IAAU,EAAS,SAAS;AAClC,EAAI,EAAQ,WAAW,KACrB,QAAQ,KAAK,yDAAyD;EAGxE,IAAM,IAAK,EAAQ;AAEd,SAEL;OAAI,EAAE,aAAc,cAAc;AAChC,YAAQ,MAAM,0DAA0D;AACxE;;AASF,GANA,EAAc,EAAG,EACjB,EAAG,iBAAiB,gBAAgB,EAAiB,EACrD,EAAG,iBAAiB,gBAAgB,EAAiB,EACrD,EAAG,iBAAiB,aAAa,EAAgB,EACjD,EAAG,iBAAiB,QAAQ,EAAiB,EAE7C,QAAgB;AACd,iBAAa,EAAU,EACvB,aAAa,EAAW,EAEnB,MACL,EAAG,oBAAoB,gBAAgB,EAAiB,EACxD,EAAG,oBAAoB,gBAAgB,EAAiB,EACxD,EAAG,oBAAoB,aAAa,EAAgB,EACpD,EAAG,oBAAoB,QAAQ,EAAiB;KAChD;;GACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Tooltip as e } from "./Tooltip/Tooltip.js";
|
|
2
|
+
import { TooltipTrigger as t } from "./TooltipTrigger/TooltipTrigger.js";
|
|
3
|
+
import { TooltipContent as n } from "./TooltipContent/TooltipContent.js";
|
|
4
|
+
import { TooltipArrow as r } from "./TooltipArrow/TooltipArrow.js";
|
|
5
|
+
export { e as Tooltip, r as TooltipArrow, n as TooltipContent, t as TooltipTrigger };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useFontLoader';
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
declare const FONT_MAP: {
|
|
2
|
+
readonly en: {
|
|
3
|
+
readonly family: "Inter";
|
|
4
|
+
readonly weights: "400;500;700";
|
|
5
|
+
};
|
|
6
|
+
readonly fr: {
|
|
7
|
+
readonly family: "Inter";
|
|
8
|
+
readonly weights: "400;500;700";
|
|
9
|
+
};
|
|
10
|
+
readonly de: {
|
|
11
|
+
readonly family: "Inter";
|
|
12
|
+
readonly weights: "400;500;700";
|
|
13
|
+
};
|
|
14
|
+
readonly ru: {
|
|
15
|
+
readonly family: "Noto+Sans";
|
|
16
|
+
readonly weights: "400;500;700";
|
|
17
|
+
};
|
|
18
|
+
readonly "zh-hans": {
|
|
19
|
+
readonly family: "Noto+Sans+SC";
|
|
20
|
+
readonly weights: "400;500;700";
|
|
21
|
+
};
|
|
22
|
+
readonly "zh-hant": {
|
|
23
|
+
readonly family: "Noto+Sans+TC";
|
|
24
|
+
readonly weights: "400;500;700";
|
|
25
|
+
};
|
|
26
|
+
readonly ja: {
|
|
27
|
+
readonly family: "Noto+Sans+JP";
|
|
28
|
+
readonly weights: "400;500;700";
|
|
29
|
+
};
|
|
30
|
+
readonly ko: {
|
|
31
|
+
readonly family: "Noto+Sans+KR";
|
|
32
|
+
readonly weights: "400;500;700";
|
|
33
|
+
};
|
|
34
|
+
readonly hi: {
|
|
35
|
+
readonly family: "Noto+Sans+Devanagari";
|
|
36
|
+
readonly weights: "400;500;700";
|
|
37
|
+
};
|
|
38
|
+
readonly th: {
|
|
39
|
+
readonly family: "Noto+Sans+Thai";
|
|
40
|
+
readonly weights: "400;500;700";
|
|
41
|
+
};
|
|
42
|
+
readonly bn: {
|
|
43
|
+
readonly family: "Noto+Sans+Bengali";
|
|
44
|
+
readonly weights: "400;500;700";
|
|
45
|
+
};
|
|
46
|
+
readonly ar: {
|
|
47
|
+
readonly family: "Noto+Sans+Arabic";
|
|
48
|
+
readonly weights: "400;500;700";
|
|
49
|
+
};
|
|
50
|
+
readonly he: {
|
|
51
|
+
readonly family: "Noto+Sans+Hebrew";
|
|
52
|
+
readonly weights: "400;500;700";
|
|
53
|
+
};
|
|
54
|
+
readonly fa: {
|
|
55
|
+
readonly family: "Noto+Sans+Arabic";
|
|
56
|
+
readonly weights: "400;500;700";
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export type Lang = keyof typeof FONT_MAP;
|
|
60
|
+
export interface UseFontLoaderOptions {
|
|
61
|
+
/**
|
|
62
|
+
* 要加载的字体对应的语言
|
|
63
|
+
*
|
|
64
|
+
* 默认为`en`
|
|
65
|
+
*/
|
|
66
|
+
langs?: Lang | Lang[];
|
|
67
|
+
/**
|
|
68
|
+
* 指定 data-lang 写入的目标元素。
|
|
69
|
+
* - 传入 ref:仅在该元素上生效,适合局部语言切换。
|
|
70
|
+
* - 不传(undefined):写入 ,全局生效。
|
|
71
|
+
* 卸载时自动恢复目标元素的原始 data-lang 值。
|
|
72
|
+
*
|
|
73
|
+
* apply 为 false 时此选项无效。
|
|
74
|
+
*/
|
|
75
|
+
targetRef?: HTMLElement;
|
|
76
|
+
/**
|
|
77
|
+
* 是否将 data-lang 写入目标元素以应用字体样式。
|
|
78
|
+
* - true(默认):写入 data-lang,字体立即生效。
|
|
79
|
+
* - false:仅预加载字体资源,不修改任何 DOM,
|
|
80
|
+
* 适合提前预热用户可能切换到的语言字体。
|
|
81
|
+
* @default
|
|
82
|
+
*/
|
|
83
|
+
apply?: boolean;
|
|
84
|
+
}
|
|
85
|
+
export declare function useFontLoader(options?: UseFontLoaderOptions): void;
|
|
86
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createEffect as e, onCleanup as t } from "solid-js";
|
|
2
|
+
//#region src/hooks/useFontLoader.ts
|
|
3
|
+
var n = {
|
|
4
|
+
en: {
|
|
5
|
+
family: "Inter",
|
|
6
|
+
weights: "400;500;700"
|
|
7
|
+
},
|
|
8
|
+
fr: {
|
|
9
|
+
family: "Inter",
|
|
10
|
+
weights: "400;500;700"
|
|
11
|
+
},
|
|
12
|
+
de: {
|
|
13
|
+
family: "Inter",
|
|
14
|
+
weights: "400;500;700"
|
|
15
|
+
},
|
|
16
|
+
ru: {
|
|
17
|
+
family: "Noto+Sans",
|
|
18
|
+
weights: "400;500;700"
|
|
19
|
+
},
|
|
20
|
+
"zh-hans": {
|
|
21
|
+
family: "Noto+Sans+SC",
|
|
22
|
+
weights: "400;500;700"
|
|
23
|
+
},
|
|
24
|
+
"zh-hant": {
|
|
25
|
+
family: "Noto+Sans+TC",
|
|
26
|
+
weights: "400;500;700"
|
|
27
|
+
},
|
|
28
|
+
ja: {
|
|
29
|
+
family: "Noto+Sans+JP",
|
|
30
|
+
weights: "400;500;700"
|
|
31
|
+
},
|
|
32
|
+
ko: {
|
|
33
|
+
family: "Noto+Sans+KR",
|
|
34
|
+
weights: "400;500;700"
|
|
35
|
+
},
|
|
36
|
+
hi: {
|
|
37
|
+
family: "Noto+Sans+Devanagari",
|
|
38
|
+
weights: "400;500;700"
|
|
39
|
+
},
|
|
40
|
+
th: {
|
|
41
|
+
family: "Noto+Sans+Thai",
|
|
42
|
+
weights: "400;500;700"
|
|
43
|
+
},
|
|
44
|
+
bn: {
|
|
45
|
+
family: "Noto+Sans+Bengali",
|
|
46
|
+
weights: "400;500;700"
|
|
47
|
+
},
|
|
48
|
+
ar: {
|
|
49
|
+
family: "Noto+Sans+Arabic",
|
|
50
|
+
weights: "400;500;700"
|
|
51
|
+
},
|
|
52
|
+
he: {
|
|
53
|
+
family: "Noto+Sans+Hebrew",
|
|
54
|
+
weights: "400;500;700"
|
|
55
|
+
},
|
|
56
|
+
fa: {
|
|
57
|
+
family: "Noto+Sans+Arabic",
|
|
58
|
+
weights: "400;500;700"
|
|
59
|
+
}
|
|
60
|
+
}, r = /* @__PURE__ */ new Set();
|
|
61
|
+
function i(e) {
|
|
62
|
+
return e.filter((e) => e in n ? !0 : (process.env.NODE_ENV !== "production" && console.warn(`[useFontLoader] unsupported lang: "${e}". Supported values: ${Object.keys(n).join(", ")}`), !1));
|
|
63
|
+
}
|
|
64
|
+
function a(e) {
|
|
65
|
+
let t = e.filter((e) => !r.has(n[e].family));
|
|
66
|
+
if (t.length === 0) return;
|
|
67
|
+
let i = [...new Set(t.map((e) => {
|
|
68
|
+
let { family: t, weights: r } = n[e];
|
|
69
|
+
return `family=${t}:wght@${r}`;
|
|
70
|
+
}))], a = document.createElement("link");
|
|
71
|
+
a.rel = "stylesheet", a.href = `https://fonts.googleapis.com/css2?${i.join("&")}&display=swap`, document.head.appendChild(a);
|
|
72
|
+
for (let e of t) r.add(n[e].family);
|
|
73
|
+
}
|
|
74
|
+
function o(n) {
|
|
75
|
+
let { langs: r = "en", targetRef: o = document.documentElement, apply: s = !0 } = n ?? {}, c = i(Array.isArray(r) ? r : [r]);
|
|
76
|
+
e(() => {
|
|
77
|
+
a(c);
|
|
78
|
+
}), e(() => {
|
|
79
|
+
if (!s || c.length === 0) return;
|
|
80
|
+
let e = o ?? document.documentElement, n = c[0], r = e.getAttribute("data-lang");
|
|
81
|
+
e.setAttribute("data-lang", n), t(() => {
|
|
82
|
+
r === null ? e.removeAttribute("data-lang") : e.setAttribute("data-lang", r);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { o as useFontLoader };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=useFontLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFontLoader.js","names":[],"sources":["../../src/hooks/useFontLoader.ts"],"sourcesContent":["import { createEffect, onCleanup } from \"solid-js\";\n\n// ─── 字体配置表 ────────────────────────────────────────────────\nconst FONT_MAP = {\n en: { family: \"Inter\", weights: \"400;500;700\" },\n fr: { family: \"Inter\", weights: \"400;500;700\" },\n de: { family: \"Inter\", weights: \"400;500;700\" },\n ru: { family: \"Noto+Sans\", weights: \"400;500;700\" },\n \"zh-hans\": { family: \"Noto+Sans+SC\", weights: \"400;500;700\" },\n \"zh-hant\": { family: \"Noto+Sans+TC\", weights: \"400;500;700\" },\n ja: { family: \"Noto+Sans+JP\", weights: \"400;500;700\" },\n ko: { family: \"Noto+Sans+KR\", weights: \"400;500;700\" },\n hi: { family: \"Noto+Sans+Devanagari\", weights: \"400;500;700\" },\n th: { family: \"Noto+Sans+Thai\", weights: \"400;500;700\" },\n bn: { family: \"Noto+Sans+Bengali\", weights: \"400;500;700\" },\n ar: { family: \"Noto+Sans+Arabic\", weights: \"400;500;700\" },\n he: { family: \"Noto+Sans+Hebrew\", weights: \"400;500;700\" },\n fa: { family: \"Noto+Sans+Arabic\", weights: \"400;500;700\" },\n} as const satisfies Record<string, { family: string; weights: string }>;\n\nexport type Lang = keyof typeof FONT_MAP;\n\n// ─── 已加载字体缓存(模块级单例,避免重复插入) ──────────────\nconst loaded = new Set<string>();\n\nfunction filterValidLangs(langs: string[]): Lang[] {\n return langs.filter((lang): lang is Lang => {\n if (lang in FONT_MAP) return true;\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n `[useFontLoader] unsupported lang: \"${lang}\". ` +\n `Supported values: ${Object.keys(FONT_MAP).join(\", \")}`,\n );\n }\n return false;\n });\n}\n\nexport interface UseFontLoaderOptions {\n /**\n * 要加载的字体对应的语言\n *\n * 默认为`en`\n */\n langs?: Lang | Lang[];\n\n /**\n * 指定 data-lang 写入的目标元素。\n * - 传入 ref:仅在该元素上生效,适合局部语言切换。\n * - 不传(undefined):写入 ,全局生效。\n * 卸载时自动恢复目标元素的原始 data-lang 值。\n *\n * apply 为 false 时此选项无效。\n */\n targetRef?: HTMLElement;\n\n /**\n * 是否将 data-lang 写入目标元素以应用字体样式。\n * - true(默认):写入 data-lang,字体立即生效。\n * - false:仅预加载字体资源,不修改任何 DOM,\n * 适合提前预热用户可能切换到的语言字体。\n * @default\n */\n apply?: boolean;\n}\n\n/* ----------------------------------------------------------------\n 工具:插入 Google Fonts\n ---------------------------------------------------------------- */\nfunction loadGoogleFonts(langs: Lang[]): void {\n const toLoad = langs.filter((lang) => !loaded.has(FONT_MAP[lang].family));\n if (toLoad.length === 0) return;\n\n const families = [\n ...new Set(\n toLoad.map((lang) => {\n const { family, weights } = FONT_MAP[lang];\n return `family=${family}:wght@${weights}`;\n }),\n ),\n ];\n\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = `https://fonts.googleapis.com/css2?${families.join(\"&\")}&display=swap`;\n\n document.head.appendChild(link);\n for (const lang of toLoad) {\n loaded.add(FONT_MAP[lang].family);\n }\n}\n\n// ─── Hook ─────────────────────────────────────────────────────\nexport function useFontLoader(options?: UseFontLoaderOptions) {\n const {\n langs = \"en\",\n targetRef = document.documentElement,\n apply = true,\n } = options ?? {};\n\n const langList = Array.isArray(langs) ? langs : [langs];\n const validLangs = filterValidLangs(langList);\n\n // --- 加载字体资源 ---\n createEffect(() => {\n loadGoogleFonts(validLangs);\n });\n\n // --- 将 data-lang 写入目标元素 ---\n createEffect(() => {\n if (!apply || validLangs.length === 0) return;\n\n // targetRef 未传或 ref.current 尚未挂载时,回退到\n const el = targetRef ?? document.documentElement;\n const lang = validLangs[0];\n const prev = el.getAttribute(\"data-lang\");\n\n el.setAttribute(\"data-lang\", lang);\n\n onCleanup(() => {\n // 卸载时恢复:原本有值则还原,原本无则移除\n if (prev === null) {\n el.removeAttribute(\"data-lang\");\n } else {\n el.setAttribute(\"data-lang\", prev);\n }\n });\n });\n}\n"],"mappings":";;AAGA,IAAM,IAAW;CACf,IAAI;EAAE,QAAQ;EAAS,SAAS;EAAe;CAC/C,IAAI;EAAE,QAAQ;EAAS,SAAS;EAAe;CAC/C,IAAI;EAAE,QAAQ;EAAS,SAAS;EAAe;CAC/C,IAAI;EAAE,QAAQ;EAAa,SAAS;EAAe;CACnD,WAAW;EAAE,QAAQ;EAAgB,SAAS;EAAe;CAC7D,WAAW;EAAE,QAAQ;EAAgB,SAAS;EAAe;CAC7D,IAAI;EAAE,QAAQ;EAAgB,SAAS;EAAe;CACtD,IAAI;EAAE,QAAQ;EAAgB,SAAS;EAAe;CACtD,IAAI;EAAE,QAAQ;EAAwB,SAAS;EAAe;CAC9D,IAAI;EAAE,QAAQ;EAAkB,SAAS;EAAe;CACxD,IAAI;EAAE,QAAQ;EAAqB,SAAS;EAAe;CAC3D,IAAI;EAAE,QAAQ;EAAoB,SAAS;EAAe;CAC1D,IAAI;EAAE,QAAQ;EAAoB,SAAS;EAAe;CAC1D,IAAI;EAAE,QAAQ;EAAoB,SAAS;EAAe;CAC3D,EAKK,oBAAS,IAAI,KAAa;AAEhC,SAAS,EAAiB,GAAyB;AACjD,QAAO,EAAM,QAAQ,MACf,KAAQ,IAAiB,MAC7B,QAAA,IAAA,aAA6B,gBAC3B,QAAQ,KACN,sCAAsC,EAAK,uBACpB,OAAO,KAAK,EAAS,CAAC,KAAK,KAAK,GACxD,EAEI,IACP;;AAkCJ,SAAS,EAAgB,GAAqB;CAC5C,IAAM,IAAS,EAAM,QAAQ,MAAS,CAAC,EAAO,IAAI,EAAS,GAAM,OAAO,CAAC;AACzE,KAAI,EAAO,WAAW,EAAG;CAEzB,IAAM,IAAW,CACf,GAAG,IAAI,IACL,EAAO,KAAK,MAAS;EACnB,IAAM,EAAE,WAAQ,eAAY,EAAS;AACrC,SAAO,UAAU,EAAO,QAAQ;GAChC,CACH,CACF,EAEK,IAAO,SAAS,cAAc,OAAO;AAI3C,CAHA,EAAK,MAAM,cACX,EAAK,OAAO,qCAAqC,EAAS,KAAK,IAAI,CAAC,gBAEpE,SAAS,KAAK,YAAY,EAAK;AAC/B,MAAK,IAAM,KAAQ,EACjB,GAAO,IAAI,EAAS,GAAM,OAAO;;AAKrC,SAAgB,EAAc,GAAgC;CAC5D,IAAM,EACJ,WAAQ,MACR,eAAY,SAAS,iBACrB,WAAQ,OACN,KAAW,EAAE,EAGX,IAAa,EADF,MAAM,QAAQ,EAAM,GAAG,IAAQ,CAAC,EAAM,CACV;AAQ7C,CALA,QAAmB;AACjB,IAAgB,EAAW;GAC3B,EAGF,QAAmB;AACjB,MAAI,CAAC,KAAS,EAAW,WAAW,EAAG;EAGvC,IAAM,IAAK,KAAa,SAAS,iBAC3B,IAAO,EAAW,IAClB,IAAO,EAAG,aAAa,YAAY;AAIzC,EAFA,EAAG,aAAa,aAAa,EAAK,EAElC,QAAgB;AAEd,GAAI,MAAS,OACX,EAAG,gBAAgB,YAAY,GAE/B,EAAG,aAAa,aAAa,EAAK;IAEpC;GACF"}
|