@neut/ui 0.0.9 → 0.0.10
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/components/accordion/Accordion/Accordion.context.js.map +1 -1
- package/dist/components/accordion/Accordion/Accordion.js +21 -20
- package/dist/components/accordion/Accordion/Accordion.js.map +1 -1
- package/dist/components/accordion/Accordion/Accordion.styles.d.ts +2 -0
- package/dist/components/accordion/Accordion/Accordion.styles.js +7 -0
- package/dist/components/accordion/Accordion/Accordion.styles.js.map +1 -0
- package/dist/components/accordion/Accordion/useAccordion.js +1 -3
- package/dist/components/accordion/Accordion/useAccordion.js.map +1 -1
- package/dist/components/accordion/AccordionContent/AccordionContent.js +25 -21
- package/dist/components/accordion/AccordionContent/AccordionContent.js.map +1 -1
- package/dist/components/accordion/AccordionContent/AccordionContent.styles.d.ts +5 -0
- package/dist/components/accordion/AccordionContent/AccordionContent.styles.js +9 -0
- package/dist/components/accordion/AccordionContent/AccordionContent.styles.js.map +1 -0
- package/dist/components/accordion/AccordionContent/index.d.ts +1 -0
- package/dist/components/accordion/AccordionItem/AccordionItem.context.js.map +1 -1
- package/dist/components/accordion/AccordionItem/AccordionItem.js +19 -18
- package/dist/components/accordion/AccordionItem/AccordionItem.js.map +1 -1
- package/dist/components/accordion/AccordionItem/AccordionItem.styles.d.ts +2 -0
- package/dist/components/accordion/AccordionItem/AccordionItem.styles.js +6 -0
- package/dist/components/accordion/AccordionItem/AccordionItem.styles.js.map +1 -0
- package/dist/components/accordion/AccordionItem/index.d.ts +1 -0
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js +26 -18
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js.map +1 -1
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.styles.d.ts +6 -0
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.styles.js +10 -0
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.styles.js.map +1 -0
- package/dist/components/accordion/AccordionTrigger/index.d.ts +1 -0
- package/dist/components/accordion/index.d.ts +4 -4
- package/dist/components/accordion/index.js +6 -5
- package/dist/components/alert/Alert/Alert.js +1 -1
- package/dist/components/alert/Alert/Alert.js.map +1 -1
- package/dist/components/alert/Alert/Alert.styles.js +3 -3
- package/dist/components/alert/Alert/Alert.styles.js.map +1 -1
- package/dist/components/alert/AlertAction/AlertAction.js +2 -2
- package/dist/components/alert/AlertAction/AlertAction.js.map +1 -1
- package/dist/components/alert/AlertAction/AlertAction.styles.d.ts +2 -1
- package/dist/components/alert/AlertAction/AlertAction.styles.js +1 -1
- package/dist/components/alert/AlertAction/AlertAction.styles.js.map +1 -1
- package/dist/components/alert/AlertDescription/AlertDescription.js +2 -2
- package/dist/components/alert/AlertDescription/AlertDescription.js.map +1 -1
- package/dist/components/alert/AlertDescription/AlertDescription.styles.d.ts +2 -1
- package/dist/components/alert/AlertDescription/AlertDescription.styles.js +2 -2
- package/dist/components/alert/AlertDescription/AlertDescription.styles.js.map +1 -1
- package/dist/components/alert/AlertTitle/AlertTitle.js +2 -2
- package/dist/components/alert/AlertTitle/AlertTitle.js.map +1 -1
- package/dist/components/alert/AlertTitle/AlertTitle.styles.d.ts +2 -1
- package/dist/components/alert/AlertTitle/AlertTitle.styles.js +2 -2
- package/dist/components/alert/AlertTitle/AlertTitle.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialog/AlertDialog.context.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/alert-dialog/AlertDialog/AlertDialog.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogAction/AlertDialogAction.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js +3 -3
- package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.context.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.js +11 -11
- package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.styles.d.ts +2 -1
- package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.styles.js +2 -2
- package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js +2 -2
- package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.styles.d.ts +2 -1
- package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.styles.js +2 -2
- package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js +2 -2
- package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.styles.d.ts +2 -1
- package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.styles.js +2 -2
- package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js +2 -2
- package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.styles.d.ts +2 -1
- package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.styles.js +2 -2
- package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js +2 -2
- package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.styles.d.ts +2 -1
- package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.styles.js +2 -2
- package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.js +2 -2
- package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.styles.d.ts +2 -1
- package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.styles.js +2 -2
- package/dist/components/alert-dialog/AlertDialogOverlay/AlertDialogOverlay.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogPortal/AlertDialogPortal.js +1 -1
- package/dist/components/alert-dialog/AlertDialogPortal/AlertDialogPortal.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js +2 -2
- package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.styles.d.ts +2 -1
- package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.styles.js +2 -2
- package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.styles.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTrigger/AlertDialogTrigger.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTrigger/useAlertDialogTrigger.js.map +1 -1
- package/dist/components/aspect-ratio/AspectRatio.js +1 -1
- package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
- package/dist/components/aspect-ratio/AspectRatio.styles.js.map +1 -1
- package/dist/components/avatar/Avatar/Avatar.context.js.map +1 -1
- package/dist/components/avatar/Avatar/Avatar.js +9 -9
- package/dist/components/avatar/Avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/AvatarBadge/AvatarBadge.js +1 -1
- package/dist/components/avatar/AvatarBadge/AvatarBadge.js.map +1 -1
- package/dist/components/avatar/AvatarFallback/AvatarFallback.js +1 -1
- package/dist/components/avatar/AvatarFallback/AvatarFallback.js.map +1 -1
- package/dist/components/avatar/AvatarGroup/AvatarGroup.js +1 -1
- package/dist/components/avatar/AvatarGroup/AvatarGroup.js.map +1 -1
- package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js +1 -1
- package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js.map +1 -1
- package/dist/components/avatar/AvatarImage/AvatarImage.js +1 -1
- package/dist/components/avatar/AvatarImage/AvatarImage.js.map +1 -1
- package/dist/components/badge/Badge.js +1 -1
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/badge/Badge.styles.js +9 -10
- package/dist/components/badge/Badge.styles.js.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb/Breadcrumb.js +1 -1
- package/dist/components/breadcrumb/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js +1 -1
- package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js +1 -1
- package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js +6 -6
- package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js +1 -1
- package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js +1 -1
- package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js +1 -1
- package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js.map +1 -1
- package/dist/components/button/Button.js +34 -31
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/button/Button.styles.d.ts +1 -1
- package/dist/components/button/Button.styles.js +10 -10
- package/dist/components/button/Button.styles.js.map +1 -1
- package/dist/components/button/Button.types.d.ts +4 -30
- package/dist/components/button-group/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/button-group/ButtonGroup/ButtonGroup.js.map +1 -1
- package/dist/components/button-group/ButtonGroup/ButtonGroup.styles.js.map +1 -1
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js +1 -1
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.js.map +1 -1
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.d.ts +2 -1
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js +2 -3
- package/dist/components/button-group/ButtonGroupSeparator/ButtonGroupSeparator.styles.js.map +1 -1
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js +2 -2
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js.map +1 -1
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.d.ts +2 -1
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js +2 -3
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.styles.js.map +1 -1
- package/dist/components/card/Card/Card.js +6 -6
- package/dist/components/card/Card/Card.js.map +1 -1
- package/dist/components/card/Card/Card.styles.d.ts +2 -1
- package/dist/components/card/Card/Card.styles.js +2 -2
- package/dist/components/card/Card/Card.styles.js.map +1 -1
- package/dist/components/card/CardAction/CardAction.js +2 -2
- package/dist/components/card/CardAction/CardAction.js.map +1 -1
- package/dist/components/card/CardAction/CardAction.styles.d.ts +2 -1
- package/dist/components/card/CardAction/CardAction.styles.js +1 -1
- package/dist/components/card/CardAction/CardAction.styles.js.map +1 -1
- package/dist/components/card/CardContent/CardContent.js +2 -2
- package/dist/components/card/CardContent/CardContent.js.map +1 -1
- package/dist/components/card/CardContent/CardContent.styles.d.ts +2 -1
- package/dist/components/card/CardContent/CardContent.styles.js +2 -2
- package/dist/components/card/CardContent/CardContent.styles.js.map +1 -1
- package/dist/components/card/CardDescription/CardDescription.js +2 -2
- package/dist/components/card/CardDescription/CardDescription.js.map +1 -1
- package/dist/components/card/CardDescription/CardDescription.styles.d.ts +2 -1
- package/dist/components/card/CardDescription/CardDescription.styles.js +2 -2
- package/dist/components/card/CardDescription/CardDescription.styles.js.map +1 -1
- package/dist/components/card/CardFooter/CardFooter.js +2 -2
- package/dist/components/card/CardFooter/CardFooter.js.map +1 -1
- package/dist/components/card/CardFooter/CardFooter.styles.d.ts +2 -1
- package/dist/components/card/CardFooter/CardFooter.styles.js +2 -2
- package/dist/components/card/CardFooter/CardFooter.styles.js.map +1 -1
- package/dist/components/card/CardHeader/CardHeader.js +2 -2
- package/dist/components/card/CardHeader/CardHeader.js.map +1 -1
- package/dist/components/card/CardHeader/CardHeader.styles.d.ts +2 -1
- package/dist/components/card/CardHeader/CardHeader.styles.js +2 -2
- package/dist/components/card/CardHeader/CardHeader.styles.js.map +1 -1
- package/dist/components/card/CardTitle/CardTitle.js +2 -2
- package/dist/components/card/CardTitle/CardTitle.js.map +1 -1
- package/dist/components/card/CardTitle/CardTitle.styles.d.ts +2 -1
- package/dist/components/card/CardTitle/CardTitle.styles.js +1 -1
- package/dist/components/card/CardTitle/CardTitle.styles.js.map +1 -1
- package/dist/components/carousel/Carousel/Carousel.context.js.map +1 -1
- package/dist/components/carousel/Carousel/Carousel.js +14 -13
- package/dist/components/carousel/Carousel/Carousel.js.map +1 -1
- package/dist/components/carousel/Carousel/Carousel.styles.d.ts +2 -0
- package/dist/components/carousel/Carousel/Carousel.styles.js +6 -0
- package/dist/components/carousel/Carousel/Carousel.styles.js.map +1 -0
- package/dist/components/carousel/Carousel/useAutoPlay.js.map +1 -1
- package/dist/components/carousel/Carousel/useCarousel.js.map +1 -1
- package/dist/components/carousel/Carousel/useKeyboardNavigation.js.map +1 -1
- package/dist/components/carousel/CarouselContent/CarouselContent.js +1 -1
- package/dist/components/carousel/CarouselContent/CarouselContent.js.map +1 -1
- package/dist/components/carousel/CarouselContent/useItemSizeMeasure.js.map +1 -1
- package/dist/components/carousel/CarouselDots/CarouselDots.js +1 -1
- package/dist/components/carousel/CarouselDots/CarouselDots.js.map +1 -1
- package/dist/components/carousel/CarouselItem/CarouselItem.js +4 -3
- package/dist/components/carousel/CarouselItem/CarouselItem.js.map +1 -1
- package/dist/components/carousel/CarouselNext/CarouselNext.js +4 -4
- package/dist/components/carousel/CarouselNext/CarouselNext.js.map +1 -1
- package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js +4 -4
- package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js.map +1 -1
- package/dist/components/checkbox/Checkbox/Checkbox.js +18 -18
- package/dist/components/checkbox/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/checkbox/Checkbox/Checkbox.styles.js.map +1 -1
- package/dist/components/checkbox/CheckboxIndicator/CheckboxIndicator.js +1 -1
- package/dist/components/checkbox/CheckboxIndicator/CheckboxIndicator.js.map +1 -1
- package/dist/components/collapsible/Collapsible/Collapsible.context.js.map +1 -1
- package/dist/components/collapsible/Collapsible/Collapsible.js +1 -1
- package/dist/components/collapsible/Collapsible/Collapsible.js.map +1 -1
- package/dist/components/collapsible/CollapsibleContent/CollapsibleContent.js +1 -1
- package/dist/components/collapsible/CollapsibleContent/CollapsibleContent.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js +1 -1
- package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.types.d.ts +1 -1
- package/dist/components/dialog/Dialog/Dialog.context.js.map +1 -1
- package/dist/components/dialog/Dialog/Dialog.js +1 -1
- package/dist/components/dialog/Dialog/Dialog.js.map +1 -1
- package/dist/components/dialog/DialogClose/DialogClose.js +4 -6
- package/dist/components/dialog/DialogClose/DialogClose.js.map +1 -1
- package/dist/components/dialog/DialogClose/DialogClose.types.d.ts +2 -2
- package/dist/components/dialog/DialogContent/DialogContent.context.js.map +1 -1
- package/dist/components/dialog/DialogContent/DialogContent.js +10 -10
- package/dist/components/dialog/DialogContent/DialogContent.js.map +1 -1
- package/dist/components/dialog/DialogDescription/DialogDescription.js +1 -1
- package/dist/components/dialog/DialogDescription/DialogDescription.js.map +1 -1
- package/dist/components/dialog/DialogFooter/DialogFooter.js +1 -1
- package/dist/components/dialog/DialogFooter/DialogFooter.js.map +1 -1
- package/dist/components/dialog/DialogHeader/DialogHeader.js +1 -1
- package/dist/components/dialog/DialogHeader/DialogHeader.js.map +1 -1
- package/dist/components/dialog/DialogOverlay/DialogOverlay.js +1 -1
- package/dist/components/dialog/DialogOverlay/DialogOverlay.js.map +1 -1
- package/dist/components/dialog/DialogPortal/DialogPortal.js +1 -1
- package/dist/components/dialog/DialogPortal/DialogPortal.js.map +1 -1
- package/dist/components/dialog/DialogTitle/DialogTitle.js +1 -1
- package/dist/components/dialog/DialogTitle/DialogTitle.js.map +1 -1
- package/dist/components/dialog/DialogTrigger/DialogTrigger.js.map +1 -1
- package/dist/components/dialog/DialogTrigger/useDialogTrigger.js.map +1 -1
- package/dist/components/field/Field/Field.js +5 -5
- package/dist/components/field/Field/Field.js.map +1 -1
- package/dist/components/field/Field/Field.styles.js +1 -1
- package/dist/components/field/Field/Field.styles.js.map +1 -1
- package/dist/components/field/FieldContent/FieldContent.js +1 -1
- package/dist/components/field/FieldContent/FieldContent.js.map +1 -1
- package/dist/components/field/FieldDescription/FieldDescription.js +2 -2
- package/dist/components/field/FieldDescription/FieldDescription.js.map +1 -1
- package/dist/components/field/FieldError/FieldError.js +2 -2
- package/dist/components/field/FieldError/FieldError.js.map +1 -1
- package/dist/components/field/FieldGroup/FieldGroup.js +1 -1
- package/dist/components/field/FieldGroup/FieldGroup.js.map +1 -1
- package/dist/components/field/FieldLabel/FieldLabel.js +1 -1
- package/dist/components/field/FieldLabel/FieldLabel.js.map +1 -1
- package/dist/components/field/FieldLegend/FieldLegend.js +5 -5
- package/dist/components/field/FieldLegend/FieldLegend.js.map +1 -1
- package/dist/components/field/FieldSeparator/FieldSeparator.js +14 -14
- package/dist/components/field/FieldSeparator/FieldSeparator.js.map +1 -1
- package/dist/components/field/FieldSet/FieldSet.js +1 -1
- package/dist/components/field/FieldSet/FieldSet.js.map +1 -1
- package/dist/components/field/FieldTitle/FieldTitle.js +1 -1
- package/dist/components/field/FieldTitle/FieldTitle.js.map +1 -1
- package/dist/components/image/Image.config.js +1 -1
- package/dist/components/image/Image.config.js.map +1 -1
- package/dist/components/image/Image.js +13 -13
- package/dist/components/image/Image.js.map +1 -1
- package/dist/components/image/Image.utils.js +67 -67
- package/dist/components/image/Image.utils.js.map +1 -1
- package/dist/components/image/ImageElement.js +19 -19
- package/dist/components/image/ImageElement.js.map +1 -1
- package/dist/components/image/ImagePreload.js +1 -1
- package/dist/components/image/ImagePreload.js.map +1 -1
- package/dist/components/input/Input.js +13 -13
- package/dist/components/input/Input.js.map +1 -1
- package/dist/components/input-group/InputGroup/InputGroup.js +2 -2
- package/dist/components/input-group/InputGroup/InputGroup.js.map +1 -1
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js +5 -5
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js.map +1 -1
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js +1 -1
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.styles.js.map +1 -1
- package/dist/components/input-group/InputGroupButton/InputGroupButton.js +9 -9
- package/dist/components/input-group/InputGroupButton/InputGroupButton.js.map +1 -1
- package/dist/components/input-group/InputGroupButton/InputGroupButton.styles.js.map +1 -1
- package/dist/components/input-group/InputGroupButton/InputGroupButton.types.d.ts +2 -3
- package/dist/components/input-group/InputGroupInput/InputGroupInput.js.map +1 -1
- package/dist/components/input-group/InputGroupText/InputGroupText.js +2 -2
- package/dist/components/input-group/InputGroupText/InputGroupText.js.map +1 -1
- package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js.map +1 -1
- package/dist/components/item/Item/Item.js +9 -9
- package/dist/components/item/Item/Item.js.map +1 -1
- package/dist/components/item/Item/Item.styles.js +3 -3
- package/dist/components/item/Item/Item.styles.js.map +1 -1
- package/dist/components/item/ItemActions/ItemActions.js +1 -1
- package/dist/components/item/ItemActions/ItemActions.js.map +1 -1
- package/dist/components/item/ItemContent/ItemContent.js +1 -1
- package/dist/components/item/ItemContent/ItemContent.js.map +1 -1
- package/dist/components/item/ItemDescription/ItemDescription.js +2 -2
- package/dist/components/item/ItemDescription/ItemDescription.js.map +1 -1
- package/dist/components/item/ItemFooter/ItemFooter.js +1 -1
- package/dist/components/item/ItemFooter/ItemFooter.js.map +1 -1
- package/dist/components/item/ItemGroup/ItemGroup.js +1 -1
- package/dist/components/item/ItemGroup/ItemGroup.js.map +1 -1
- package/dist/components/item/ItemHeader/ItemHeader.js +1 -1
- package/dist/components/item/ItemHeader/ItemHeader.js.map +1 -1
- package/dist/components/item/ItemMedia/ItemMedia.js +5 -5
- package/dist/components/item/ItemMedia/ItemMedia.js.map +1 -1
- package/dist/components/item/ItemMedia/ItemMedia.styles.js.map +1 -1
- package/dist/components/item/ItemSeparator/ItemSeparator.js.map +1 -1
- package/dist/components/item/ItemTitle/ItemTitle.js +1 -1
- package/dist/components/item/ItemTitle/ItemTitle.js.map +1 -1
- package/dist/components/kbd/Kbd.js +2 -2
- package/dist/components/kbd/Kbd.js.map +1 -1
- package/dist/components/label/Label.js +1 -1
- package/dist/components/label/Label.js.map +1 -1
- package/dist/components/pagination/Pagination/Pagination.js +1 -1
- package/dist/components/pagination/Pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/PaginationContent/PaginationContent.js +1 -1
- package/dist/components/pagination/PaginationContent/PaginationContent.js.map +1 -1
- package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js +1 -1
- package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js.map +1 -1
- package/dist/components/pagination/PaginationItem/PaginationItem.js +1 -1
- package/dist/components/pagination/PaginationItem/PaginationItem.js.map +1 -1
- package/dist/components/pagination/PaginationLink/PaginationLink.js +13 -10
- package/dist/components/pagination/PaginationLink/PaginationLink.js.map +1 -1
- package/dist/components/pagination/PaginationNext/PaginationNext.js +5 -5
- package/dist/components/pagination/PaginationNext/PaginationNext.js.map +1 -1
- package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js +5 -5
- package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js.map +1 -1
- package/dist/components/progress/Progress/Progress.context.js.map +1 -1
- package/dist/components/progress/Progress/Progress.js +1 -1
- package/dist/components/progress/Progress/Progress.js.map +1 -1
- package/dist/components/progress/ProgressIndicator/ProgressIndicator.js +1 -1
- package/dist/components/progress/ProgressIndicator/ProgressIndicator.js.map +1 -1
- package/dist/components/progress/ProgressIndicator/ProgressIndicator.styles.d.ts +1 -1
- package/dist/components/progress/ProgressIndicator/ProgressIndicator.styles.js +1 -1
- package/dist/components/progress/ProgressIndicator/ProgressIndicator.styles.js.map +1 -1
- package/dist/components/progress/ProgressLabel/ProgressLabel.js +1 -1
- package/dist/components/progress/ProgressLabel/ProgressLabel.js.map +1 -1
- package/dist/components/progress/ProgressTrack/ProgressTrack.js +1 -1
- package/dist/components/progress/ProgressTrack/ProgressTrack.js.map +1 -1
- package/dist/components/progress/ProgressTrack/ProgressTrack.styles.d.ts +1 -1
- package/dist/components/progress/ProgressTrack/ProgressTrack.styles.js +1 -1
- package/dist/components/progress/ProgressTrack/ProgressTrack.styles.js.map +1 -1
- package/dist/components/progress/ProgressValue/ProgressValue.js +1 -1
- package/dist/components/progress/ProgressValue/ProgressValue.js.map +1 -1
- package/dist/components/progress/ProgressValue/ProgressValue.styles.d.ts +1 -1
- package/dist/components/progress/ProgressValue/ProgressValue.styles.js +1 -1
- package/dist/components/progress/ProgressValue/ProgressValue.styles.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.js +2 -2
- package/dist/components/scroll-area/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js.map +1 -1
- package/dist/components/scroll-area/ScrollBar/ScrollBar.js +26 -26
- package/dist/components/scroll-area/ScrollBar/ScrollBar.js.map +1 -1
- package/dist/components/separator/Separator.js +7 -7
- package/dist/components/separator/Separator.js.map +1 -1
- package/dist/components/separator/Separator.styles.js +1 -1
- package/dist/components/separator/Separator.styles.js.map +1 -1
- package/dist/components/sidebar/Sidebar/Sidebar.js +10 -10
- package/dist/components/sidebar/Sidebar/Sidebar.js.map +1 -1
- package/dist/components/sidebar/Sidebar/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarContent/SidebarContent.js +1 -1
- package/dist/components/sidebar/SidebarContent/SidebarContent.js.map +1 -1
- package/dist/components/sidebar/SidebarContent/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarFooter/SidebarFooter.js +1 -1
- package/dist/components/sidebar/SidebarFooter/SidebarFooter.js.map +1 -1
- package/dist/components/sidebar/SidebarFooter/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarGroup/SidebarGroup.js +1 -1
- package/dist/components/sidebar/SidebarGroup/SidebarGroup.js.map +1 -1
- package/dist/components/sidebar/SidebarGroup/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js +5 -5
- package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js.map +1 -1
- package/dist/components/sidebar/SidebarGroupAction/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js +1 -1
- package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js.map +1 -1
- package/dist/components/sidebar/SidebarGroupContent/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js +5 -5
- package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js.map +1 -1
- package/dist/components/sidebar/SidebarGroupLabel/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarHeader/SidebarHeader.js +1 -1
- package/dist/components/sidebar/SidebarHeader/SidebarHeader.js.map +1 -1
- package/dist/components/sidebar/SidebarHeader/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarInput/SidebarInput.js +1 -1
- package/dist/components/sidebar/SidebarInput/SidebarInput.js.map +1 -1
- package/dist/components/sidebar/SidebarInput/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarInset/SidebarInset.js +2 -2
- package/dist/components/sidebar/SidebarInset/SidebarInset.js.map +1 -1
- package/dist/components/sidebar/SidebarInset/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenu/SidebarMenu.js +1 -1
- package/dist/components/sidebar/SidebarMenu/SidebarMenu.js.map +1 -1
- package/dist/components/sidebar/SidebarMenu/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js +2 -2
- package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuBadge/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js +47 -31
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js +5 -6
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.styles.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuButton/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js +1 -1
- package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuItem/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js +7 -7
- package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSkeleton/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js +2 -2
- package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSub/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js +9 -9
- package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSubButton/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js +1 -1
- package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSubItem/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js +1 -1
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.consts.js.map +1 -1
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js.map +1 -1
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.js +17 -17
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.js.map +1 -1
- package/dist/components/sidebar/SidebarRail/SidebarRail.js +2 -2
- package/dist/components/sidebar/SidebarRail/SidebarRail.js.map +1 -1
- package/dist/components/sidebar/SidebarRail/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js.map +1 -1
- package/dist/components/sidebar/SidebarSeparator/index.d.ts +1 -0
- package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js.map +1 -1
- package/dist/components/sidebar/SidebarTrigger/index.d.ts +1 -0
- package/dist/components/sidebar/index.d.ts +21 -21
- package/dist/components/skeleton/Skeleton.js +2 -2
- package/dist/components/skeleton/Skeleton.js.map +1 -1
- package/dist/components/slider/Slider/Slider.context.js.map +1 -1
- package/dist/components/slider/Slider/Slider.js +10 -10
- package/dist/components/slider/Slider/Slider.js.map +1 -1
- package/dist/components/slider/Slider/useSlider.js.map +1 -1
- package/dist/components/slider/SliderControl/SliderControl.js +1 -1
- package/dist/components/slider/SliderControl/SliderControl.js.map +1 -1
- package/dist/components/slider/SliderControl/useSliderControl.js.map +1 -1
- package/dist/components/slider/SliderIndicator/SliderIndicator.js +1 -1
- package/dist/components/slider/SliderIndicator/SliderIndicator.js.map +1 -1
- package/dist/components/slider/SliderIndicator/SliderIndicator.styles.js +1 -1
- package/dist/components/slider/SliderIndicator/SliderIndicator.styles.js.map +1 -1
- package/dist/components/slider/SliderIndicator/useSliderIndicator.js.map +1 -1
- package/dist/components/slider/SliderThumb/SliderThumb.js +1 -1
- package/dist/components/slider/SliderThumb/SliderThumb.js.map +1 -1
- package/dist/components/slider/SliderThumb/SliderThumb.styles.js +1 -1
- package/dist/components/slider/SliderThumb/SliderThumb.styles.js.map +1 -1
- package/dist/components/slider/SliderThumb/useSliderThumb.js.map +1 -1
- package/dist/components/slider/SliderTrack/SliderTrack.js +1 -1
- package/dist/components/slider/SliderTrack/SliderTrack.js.map +1 -1
- package/dist/components/slider/SliderTrack/SliderTrack.styles.d.ts +1 -1
- package/dist/components/slider/SliderTrack/SliderTrack.styles.js +1 -1
- package/dist/components/slider/SliderTrack/SliderTrack.styles.js.map +1 -1
- package/dist/components/spinner/Spinner.js.map +1 -1
- package/dist/components/spinner/Spinner.styles.js.map +1 -1
- package/dist/components/switch/Switch.js +19 -19
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/switch/Switch.styles.js +2 -2
- package/dist/components/switch/Switch.styles.js.map +1 -1
- package/dist/components/textarea/Textarea.js +2 -2
- package/dist/components/textarea/Textarea.js.map +1 -1
- package/dist/components/toast/components/Assets.js +1 -1
- package/dist/components/toast/components/Assets.js.map +1 -1
- package/dist/components/toast/components/Toast.js +2 -5
- package/dist/components/toast/components/Toast.js.map +1 -1
- package/dist/components/toast/components/ToastActions.js +1 -1
- package/dist/components/toast/components/ToastActions.js.map +1 -1
- package/dist/components/toast/components/ToastContent.js +1 -1
- package/dist/components/toast/components/ToastContent.js.map +1 -1
- package/dist/components/toast/components/ToastIcon.js +1 -1
- package/dist/components/toast/components/ToastIcon.js.map +1 -1
- package/dist/components/toast/components/Toaster.js +1 -1
- package/dist/components/toast/components/Toaster.js.map +1 -1
- package/dist/components/toast/hooks/useSwipe.js.map +1 -1
- package/dist/components/toast/hooks/useTheme.js.map +1 -1
- package/dist/components/toast/hooks/useToastHeight.js.map +1 -1
- package/dist/components/toast/hooks/useToastSubscription.js +3 -2
- package/dist/components/toast/hooks/useToastSubscription.js.map +1 -1
- package/dist/components/toast/hooks/useToastTimer.js.map +1 -1
- package/dist/components/toast/hooks/useToasterKeyboard.js.map +1 -1
- package/dist/components/toast/hooks.js +3 -2
- package/dist/components/toast/hooks.js.map +1 -1
- package/dist/components/toast/state.js +5 -5
- package/dist/components/toast/state.js.map +1 -1
- package/dist/components/toast/utils.js.map +1 -1
- package/dist/components/tooltip/Tooltip/Tooltip.context.d.ts +2 -11
- package/dist/components/tooltip/Tooltip/Tooltip.context.js +4 -4
- package/dist/components/tooltip/Tooltip/Tooltip.context.js.map +1 -1
- package/dist/components/tooltip/Tooltip/Tooltip.d.ts +21 -5
- package/dist/components/tooltip/Tooltip/Tooltip.js +60 -23
- package/dist/components/tooltip/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/tooltip/Tooltip/Tooltip.types.d.ts +58 -0
- package/dist/components/tooltip/Tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/TooltipArrow/TooltipArrow.d.ts +34 -1
- package/dist/components/tooltip/TooltipArrow/TooltipArrow.js +48 -12
- package/dist/components/tooltip/TooltipArrow/TooltipArrow.js.map +1 -1
- package/dist/components/tooltip/TooltipArrow/index.d.ts +1 -0
- package/dist/components/tooltip/TooltipContent/TooltipContent.context.d.ts +19 -5
- package/dist/components/tooltip/TooltipContent/TooltipContent.context.js +4 -4
- package/dist/components/tooltip/TooltipContent/TooltipContent.context.js.map +1 -1
- package/dist/components/tooltip/TooltipContent/TooltipContent.d.ts +10 -1
- package/dist/components/tooltip/TooltipContent/TooltipContent.js +60 -46
- package/dist/components/tooltip/TooltipContent/TooltipContent.js.map +1 -1
- package/dist/components/tooltip/TooltipContent/TooltipContent.types.d.ts +13 -3
- package/dist/components/tooltip/TooltipContent/TooltipContent.utils.d.ts +57 -6
- package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js +34 -58
- package/dist/components/tooltip/TooltipContent/TooltipContent.utils.js.map +1 -1
- package/dist/components/tooltip/TooltipContent/index.d.ts +7 -0
- package/dist/components/tooltip/TooltipContent/useTooltipContent.d.ts +45 -8
- package/dist/components/tooltip/TooltipContent/useTooltipContent.js +70 -41
- package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -1
- package/dist/components/tooltip/TooltipGroup/TooltipGroup.context.d.ts +29 -0
- package/dist/components/tooltip/TooltipGroup/TooltipGroup.context.js +10 -0
- package/dist/components/tooltip/TooltipGroup/TooltipGroup.context.js.map +1 -0
- package/dist/components/tooltip/TooltipGroup/TooltipGroup.d.ts +2 -0
- package/dist/components/tooltip/TooltipGroup/TooltipGroup.js +25 -0
- package/dist/components/tooltip/TooltipGroup/TooltipGroup.js.map +1 -0
- package/dist/components/tooltip/TooltipGroup/TooltipGroup.types.d.ts +10 -0
- package/dist/components/tooltip/TooltipGroup/index.d.ts +4 -0
- package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.d.ts +4 -2
- package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js +26 -6
- package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.js.map +1 -1
- package/dist/components/tooltip/TooltipTrigger/TooltipTrigger.types.d.ts +3 -0
- package/dist/components/tooltip/TooltipTrigger/index.d.ts +3 -0
- package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.d.ts +29 -2
- package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js +27 -27
- package/dist/components/tooltip/TooltipTrigger/useTooltipTrigger.js.map +1 -1
- package/dist/components/tooltip/index.d.ts +6 -0
- package/dist/components/tooltip/index.js +2 -1
- package/dist/hooks/useFontLoader.js +1 -1
- package/dist/hooks/useFontLoader.js.map +1 -1
- package/dist/index.js +155 -152
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/positioner/auto-update.d.ts +19 -0
- package/dist/lib/positioner/auto-update.js +20 -0
- package/dist/lib/positioner/auto-update.js.map +1 -0
- package/dist/lib/positioner/core/compute-position.d.ts +9 -0
- package/dist/lib/positioner/core/compute-position.js +47 -0
- package/dist/lib/positioner/core/compute-position.js.map +1 -0
- package/dist/lib/positioner/core/placement.d.ts +14 -0
- package/dist/lib/positioner/core/placement.js +45 -0
- package/dist/lib/positioner/core/placement.js.map +1 -0
- package/dist/lib/positioner/create-positioner.d.ts +63 -0
- package/dist/lib/positioner/create-positioner.js +51 -0
- package/dist/lib/positioner/create-positioner.js.map +1 -0
- package/dist/lib/positioner/index.d.ts +11 -0
- package/dist/lib/positioner/middleware/arrow.d.ts +23 -0
- package/dist/lib/positioner/middleware/arrow.js +23 -0
- package/dist/lib/positioner/middleware/arrow.js.map +1 -0
- package/dist/lib/positioner/middleware/containing-block-offset.d.ts +27 -0
- package/dist/lib/positioner/middleware/containing-block-offset.js +46 -0
- package/dist/lib/positioner/middleware/containing-block-offset.js.map +1 -0
- package/dist/lib/positioner/middleware/flip.d.ts +9 -0
- package/dist/lib/positioner/middleware/flip.js +54 -0
- package/dist/lib/positioner/middleware/flip.js.map +1 -0
- package/dist/lib/positioner/middleware/hide.d.ts +22 -0
- package/dist/lib/positioner/middleware/hide.js +19 -0
- package/dist/lib/positioner/middleware/hide.js.map +1 -0
- package/dist/lib/positioner/middleware/index.d.ts +13 -0
- package/dist/lib/positioner/middleware/offset.d.ts +10 -0
- package/dist/lib/positioner/middleware/offset.js +21 -0
- package/dist/lib/positioner/middleware/offset.js.map +1 -0
- package/dist/lib/positioner/middleware/shift.d.ts +13 -0
- package/dist/lib/positioner/middleware/shift.js +30 -0
- package/dist/lib/positioner/middleware/shift.js.map +1 -0
- package/dist/lib/positioner/middleware/size.d.ts +13 -0
- package/dist/lib/positioner/types.d.ts +74 -0
- package/dist/lib/positioner/utils/dom.d.ts +16 -0
- package/dist/lib/positioner/utils/dom.js +43 -0
- package/dist/lib/positioner/utils/dom.js.map +1 -0
- package/dist/lib/positioner/virtual-element.d.ts +21 -0
- package/dist/types/props.types.d.ts +10 -9
- package/dist/ui.css +2 -2
- package/dist/utils/clsx.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +3 -2
- package/dist/utils/logger.d.ts +73 -0
- package/dist/utils/logger.js +37 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/warn-once.js.map +1 -1
- package/package.json +13 -12
- package/dist/components/alert-dialog/AlertDialog/AlertDialog.styles.d.ts +0 -0
- package/dist/components/carousel/CarouselContent/CarouselContent.styles.d.ts +0 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Accessor } from 'solid-js';
|
|
2
|
+
import { Middleware, MiddlewareData, Placement, ReferenceElement, Strategy } from './types';
|
|
3
|
+
import { AutoUpdateOptions } from './auto-update';
|
|
4
|
+
type MaybeAccessor<T> = T | Accessor<T>;
|
|
5
|
+
export interface CreatePositionerOptions {
|
|
6
|
+
/** 期望的初始/首选摆放位置,默认 'bottom' */
|
|
7
|
+
placement?: MaybeAccessor<Placement>;
|
|
8
|
+
/** 定位方式:'absolute' 需要 floating 挂在 body 下且无非 static 定位祖先;不确定就用 'fixed' */
|
|
9
|
+
strategy?: MaybeAccessor<Strategy>;
|
|
10
|
+
/** middleware 数组,顺序执行,如 [offset(8), flip(), shift({padding: 8})] */
|
|
11
|
+
middleware?: MaybeAccessor<Middleware[]>;
|
|
12
|
+
/** 是否在滚动/尺寸变化时自动重新计算,默认 true;也可传细粒度配置 */
|
|
13
|
+
autoUpdate?: boolean | AutoUpdateOptions;
|
|
14
|
+
}
|
|
15
|
+
export interface Positioner {
|
|
16
|
+
/** floating 元素相对定位坐标系的 x(细粒度信号,只在数值变化时更新) */
|
|
17
|
+
x: Accessor<number>;
|
|
18
|
+
/** floating 元素相对定位坐标系的 y(细粒度信号,只在数值变化时更新) */
|
|
19
|
+
y: Accessor<number>;
|
|
20
|
+
/** 经过 middleware(如 flip)调整后的最终 placement */
|
|
21
|
+
placement: Accessor<Placement>;
|
|
22
|
+
/** 实际生效的定位策略 */
|
|
23
|
+
strategy: Accessor<Strategy>;
|
|
24
|
+
/** 各 middleware 产出的附加数据,例如 arrow 的偏移量 */
|
|
25
|
+
middlewareData: Accessor<MiddlewareData>;
|
|
26
|
+
/** 是否已完成至少一次定位计算,可用于首次渲染前隐藏 floating 元素避免闪烁 */
|
|
27
|
+
isPositioned: Accessor<boolean>;
|
|
28
|
+
/** 手动触发一次重新计算 */
|
|
29
|
+
update: () => void;
|
|
30
|
+
/** 可直接展开到 style 上的便捷样式对象 */
|
|
31
|
+
floatingStyles: Accessor<{
|
|
32
|
+
position: Strategy;
|
|
33
|
+
top: string;
|
|
34
|
+
left: string;
|
|
35
|
+
transform: string;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Solid 的细粒度浮窗定位 primitive。
|
|
40
|
+
*
|
|
41
|
+
* 传入 reference / floating 两个元素访问器,返回一组独立的响应式信号
|
|
42
|
+
* (x、y、placement 等分别更新,不会因为其中一个变化而让另一个也重新渲染),
|
|
43
|
+
* 上层组件(tooltip / dropdown / popover)只需订阅自己关心的信号。
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* const [reference, setReference] = createSignal<HTMLElement>();
|
|
48
|
+
* const [floating, setFloating] = createSignal<HTMLElement>();
|
|
49
|
+
* const pos = createPositioner(reference, floating, {
|
|
50
|
+
* placement: "bottom-start",
|
|
51
|
+
* middleware: [offset(8), flip(), shift({ padding: 8 })],
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* <button ref={setReference}>trigger</button>
|
|
55
|
+
* <Show when={open()}>
|
|
56
|
+
* <Portal>
|
|
57
|
+
* <div ref={setFloating} style={pos.floatingStyles()}>内容</div>
|
|
58
|
+
* </Portal>
|
|
59
|
+
* </Show>
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function createPositioner(reference: Accessor<ReferenceElement | null | undefined>, floating: Accessor<HTMLElement | null | undefined>, options?: CreatePositionerOptions): Positioner;
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { computePosition as e } from "./core/compute-position.js";
|
|
2
|
+
import { autoUpdate as t } from "./auto-update.js";
|
|
3
|
+
import { createEffect as n, createMemo as r, createSignal as i, onCleanup as a } from "solid-js";
|
|
4
|
+
//#region src/lib/positioner/create-positioner.ts
|
|
5
|
+
function o(e, t) {
|
|
6
|
+
return e === void 0 ? t : typeof e == "function" ? e() : e;
|
|
7
|
+
}
|
|
8
|
+
function s(s, c, l = {}) {
|
|
9
|
+
let [u, d] = i(0), [f, p] = i(0), [m, h] = i(o(l.placement, "bottom")), [g, _] = i(o(l.strategy, "absolute")), [v, y] = i({}), [b, x] = i(!1), S = () => {
|
|
10
|
+
let t = s(), n = c();
|
|
11
|
+
if (!t || !n) {
|
|
12
|
+
x(!1);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let r = e(t, n, {
|
|
16
|
+
placement: o(l.placement, "bottom"),
|
|
17
|
+
strategy: o(l.strategy, "absolute"),
|
|
18
|
+
middleware: o(l.middleware, [])
|
|
19
|
+
});
|
|
20
|
+
d(r.x), p(r.y), h(r.placement), _(r.strategy), y(r.middlewareData), x(!0);
|
|
21
|
+
};
|
|
22
|
+
return n(() => {
|
|
23
|
+
let e = s(), n = c();
|
|
24
|
+
if (o(l.placement, "bottom"), o(l.strategy, "absolute"), o(l.middleware, []), !e || !n) {
|
|
25
|
+
x(!1);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (S(), l.autoUpdate !== !1) {
|
|
29
|
+
let r = t(e, n, S, typeof l.autoUpdate == "object" ? l.autoUpdate : {});
|
|
30
|
+
a(r);
|
|
31
|
+
}
|
|
32
|
+
}), {
|
|
33
|
+
x: u,
|
|
34
|
+
y: f,
|
|
35
|
+
placement: m,
|
|
36
|
+
strategy: g,
|
|
37
|
+
middlewareData: v,
|
|
38
|
+
isPositioned: b,
|
|
39
|
+
update: S,
|
|
40
|
+
floatingStyles: r(() => ({
|
|
41
|
+
position: g(),
|
|
42
|
+
top: "0px",
|
|
43
|
+
left: "0px",
|
|
44
|
+
transform: `translate(${Math.round(u())}px, ${Math.round(f())}px)`
|
|
45
|
+
}))
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { s as createPositioner };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=create-positioner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-positioner.js","names":[],"sources":["../../../src/lib/positioner/create-positioner.ts"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n onCleanup,\n type Accessor,\n} from \"solid-js\";\nimport type {\n Middleware,\n MiddlewareData,\n Placement,\n ReferenceElement,\n Strategy,\n} from \"./types\";\nimport { computePosition } from \"./core/compute-position\";\nimport {\n autoUpdate as attachAutoUpdate,\n type AutoUpdateOptions,\n} from \"./auto-update\";\n\ntype MaybeAccessor<T> = T | Accessor<T>;\n\nfunction unwrap<T>(value: MaybeAccessor<T> | undefined, fallback: T): T {\n if (value === undefined) return fallback;\n return typeof value === \"function\" ? (value as Accessor<T>)() : value;\n}\n\nexport interface CreatePositionerOptions {\n /** 期望的初始/首选摆放位置,默认 'bottom' */\n placement?: MaybeAccessor<Placement>;\n /** 定位方式:'absolute' 需要 floating 挂在 body 下且无非 static 定位祖先;不确定就用 'fixed' */\n strategy?: MaybeAccessor<Strategy>;\n /** middleware 数组,顺序执行,如 [offset(8), flip(), shift({padding: 8})] */\n middleware?: MaybeAccessor<Middleware[]>;\n /** 是否在滚动/尺寸变化时自动重新计算,默认 true;也可传细粒度配置 */\n autoUpdate?: boolean | AutoUpdateOptions;\n}\n\nexport interface Positioner {\n /** floating 元素相对定位坐标系的 x(细粒度信号,只在数值变化时更新) */\n x: Accessor<number>;\n /** floating 元素相对定位坐标系的 y(细粒度信号,只在数值变化时更新) */\n y: Accessor<number>;\n /** 经过 middleware(如 flip)调整后的最终 placement */\n placement: Accessor<Placement>;\n /** 实际生效的定位策略 */\n strategy: Accessor<Strategy>;\n /** 各 middleware 产出的附加数据,例如 arrow 的偏移量 */\n middlewareData: Accessor<MiddlewareData>;\n /** 是否已完成至少一次定位计算,可用于首次渲染前隐藏 floating 元素避免闪烁 */\n isPositioned: Accessor<boolean>;\n /** 手动触发一次重新计算 */\n update: () => void;\n /** 可直接展开到 style 上的便捷样式对象 */\n floatingStyles: Accessor<{\n position: Strategy;\n top: string;\n left: string;\n transform: string;\n }>;\n}\n\n/**\n * Solid 的细粒度浮窗定位 primitive。\n *\n * 传入 reference / floating 两个元素访问器,返回一组独立的响应式信号\n * (x、y、placement 等分别更新,不会因为其中一个变化而让另一个也重新渲染),\n * 上层组件(tooltip / dropdown / popover)只需订阅自己关心的信号。\n *\n * @example\n * ```tsx\n * const [reference, setReference] = createSignal<HTMLElement>();\n * const [floating, setFloating] = createSignal<HTMLElement>();\n * const pos = createPositioner(reference, floating, {\n * placement: \"bottom-start\",\n * middleware: [offset(8), flip(), shift({ padding: 8 })],\n * });\n *\n * <button ref={setReference}>trigger</button>\n * <Show when={open()}>\n * <Portal>\n * <div ref={setFloating} style={pos.floatingStyles()}>内容</div>\n * </Portal>\n * </Show>\n * ```\n */\nexport function createPositioner(\n reference: Accessor<ReferenceElement | null | undefined>,\n floating: Accessor<HTMLElement | null | undefined>,\n options: CreatePositionerOptions = {},\n): Positioner {\n const [x, setX] = createSignal(0);\n const [y, setY] = createSignal(0);\n const [placement, setPlacement] = createSignal<Placement>(\n unwrap(options.placement, \"bottom\"),\n );\n const [strategy, setStrategy] = createSignal<Strategy>(\n unwrap(options.strategy, \"absolute\"),\n );\n const [middlewareData, setMiddlewareData] = createSignal<MiddlewareData>({});\n const [isPositioned, setIsPositioned] = createSignal(false);\n\n const update = () => {\n const refEl = reference();\n const floatEl = floating();\n if (!refEl || !floatEl) {\n setIsPositioned(false);\n return;\n }\n\n const result = computePosition(refEl, floatEl, {\n placement: unwrap(options.placement, \"bottom\"),\n strategy: unwrap(options.strategy, \"absolute\"),\n middleware: unwrap(options.middleware, []),\n });\n\n // 每个 setter 只有在值真正变化时才会触发下游更新(Solid 信号默认行为),\n // 这就是“细粒度”的关键:只订阅 x 的节点不会因为 middlewareData 变化而重跑。\n setX(result.x);\n setY(result.y);\n setPlacement(result.placement);\n setStrategy(result.strategy);\n setMiddlewareData(result.middlewareData);\n setIsPositioned(true);\n };\n\n createEffect(() => {\n const refEl = reference();\n const floatEl = floating();\n // 主动读取,建立依赖:placement/strategy/middleware 若是响应式访问器,\n // 变化时也会重新进入这个 effect 并重新计算 + 重新挂 autoUpdate。\n unwrap(options.placement, \"bottom\");\n unwrap(options.strategy, \"absolute\");\n unwrap(options.middleware, []);\n\n if (!refEl || !floatEl) {\n setIsPositioned(false);\n return;\n }\n\n update();\n\n if (options.autoUpdate !== false) {\n const cleanup = attachAutoUpdate(\n refEl,\n floatEl,\n update,\n typeof options.autoUpdate === \"object\" ? options.autoUpdate : {},\n );\n onCleanup(cleanup);\n }\n });\n\n const floatingStyles = createMemo(() => ({\n position: strategy(),\n top: \"0px\",\n left: \"0px\",\n // 用 transform 而非 top/left 赋值,避免触发 layout,性能更好\n transform: `translate(${Math.round(x())}px, ${Math.round(y())}px)`,\n }));\n\n return {\n x,\n y,\n placement,\n strategy,\n middlewareData,\n isPositioned,\n update,\n floatingStyles,\n };\n}\n"],"mappings":";;;;AAsBA,SAAS,EAAU,GAAqC,GAAgB;CAEtE,OADI,MAAU,KAAA,IAAkB,IACzB,OAAO,KAAU,aAAc,EAAsB,IAAI;AAClE;AA6DA,SAAgB,EACd,GACA,GACA,IAAmC,CAAC,GACxB;CACZ,IAAM,CAAC,GAAG,KAAQ,EAAa,CAAC,GAC1B,CAAC,GAAG,KAAQ,EAAa,CAAC,GAC1B,CAAC,GAAW,KAAgB,EAChC,EAAO,EAAQ,WAAW,QAAQ,CACpC,GACM,CAAC,GAAU,KAAe,EAC9B,EAAO,EAAQ,UAAU,UAAU,CACrC,GACM,CAAC,GAAgB,KAAqB,EAA6B,CAAC,CAAC,GACrE,CAAC,GAAc,KAAmB,EAAa,EAAK,GAEpD,UAAe;EACnB,IAAM,IAAQ,EAAU,GAClB,IAAU,EAAS;EACzB,IAAI,CAAC,KAAS,CAAC,GAAS;GACtB,EAAgB,EAAK;GACrB;EACF;EAEA,IAAM,IAAS,EAAgB,GAAO,GAAS;GAC7C,WAAW,EAAO,EAAQ,WAAW,QAAQ;GAC7C,UAAU,EAAO,EAAQ,UAAU,UAAU;GAC7C,YAAY,EAAO,EAAQ,YAAY,CAAC,CAAC;EAC3C,CAAC;EASD,AALA,EAAK,EAAO,CAAC,GACb,EAAK,EAAO,CAAC,GACb,EAAa,EAAO,SAAS,GAC7B,EAAY,EAAO,QAAQ,GAC3B,EAAkB,EAAO,cAAc,GACvC,EAAgB,EAAI;CACtB;CAqCA,OAnCA,QAAmB;EACjB,IAAM,IAAQ,EAAU,GAClB,IAAU,EAAS;EAOzB,IAJA,EAAO,EAAQ,WAAW,QAAQ,GAClC,EAAO,EAAQ,UAAU,UAAU,GACnC,EAAO,EAAQ,YAAY,CAAC,CAAC,GAEzB,CAAC,KAAS,CAAC,GAAS;GACtB,EAAgB,EAAK;GACrB;EACF;EAIA,IAFA,EAAO,GAEH,EAAQ,eAAe,IAAO;GAChC,IAAM,IAAU,EACd,GACA,GACA,GACA,OAAO,EAAQ,cAAe,WAAW,EAAQ,aAAa,CAAC,CACjE;GACA,EAAU,CAAO;EACnB;CACF,CAAC,GAUM;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,gBAhBqB,SAAkB;GACvC,UAAU,EAAS;GACnB,KAAK;GACL,MAAM;GAEN,WAAW,aAAa,KAAK,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC,EAAE;EAChE,EAUE;CACF;AACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { createPositioner } from './create-positioner';
|
|
2
|
+
export type { CreatePositionerOptions, Positioner } from './create-positioner';
|
|
3
|
+
export { computePosition } from './core/compute-position';
|
|
4
|
+
export { getSide, getAlignment, getOppositePlacement, getOppositeAlignmentPlacement, ALL_PLACEMENTS, } from './core/placement';
|
|
5
|
+
export { autoUpdate } from './auto-update';
|
|
6
|
+
export type { AutoUpdateOptions } from './auto-update';
|
|
7
|
+
export { createVirtualElement } from './virtual-element';
|
|
8
|
+
export type { PointOptions } from './virtual-element';
|
|
9
|
+
export { offset, shift, flip, arrow, size, hide, containingBlockOffset, } from './middleware';
|
|
10
|
+
export type { OffsetOptions, OffsetValue, ShiftOptions, FlipOptions, ArrowOptions, ArrowData, SizeOptions, SizeAvailableSpace, HideOptions, HideData, } from './middleware';
|
|
11
|
+
export type { Placement, Side, Alignment, AlignedPlacement, Strategy, Axis, Coords, Rect, ElementRects, Elements, ReferenceElement, VirtualElement, Middleware, MiddlewareData, MiddlewareState, MiddlewareReturn, ComputePositionConfig, ComputePositionReturn, Boundary, } from './types';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Middleware } from '../types';
|
|
2
|
+
import { getSide } from '../core/placement';
|
|
3
|
+
export interface ArrowOptions {
|
|
4
|
+
/**
|
|
5
|
+
* 箭头 DOM 元素,或返回该元素的函数(Solid 场景下常传一个访问器)。
|
|
6
|
+
* 类型是 Element 而不是 HTMLElement,是为了兼容 SVG 场景下用 <svg> 画箭头的写法
|
|
7
|
+
* (SVGSVGElement 不是 HTMLElement 的子类型)。
|
|
8
|
+
*/
|
|
9
|
+
element: Element | undefined | (() => Element | undefined);
|
|
10
|
+
/** 箭头距 floating 边缘的最小间距,默认 4 */
|
|
11
|
+
padding?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ArrowData {
|
|
14
|
+
x?: number;
|
|
15
|
+
y?: number;
|
|
16
|
+
/** 箭头应贴靠 floating 的哪一侧(与 floating 的 placement 主边相同) */
|
|
17
|
+
side: ReturnType<typeof getSide>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 计算箭头相对 floating 元素左上角的 x/y 偏移,
|
|
21
|
+
* 使其始终指向 reference 元素中心,同时不超出 floating 边界。
|
|
22
|
+
*/
|
|
23
|
+
export declare function arrow(options: ArrowOptions): Middleware;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getSide as e, isVerticalSide as t } from "../core/placement.js";
|
|
2
|
+
//#region src/lib/positioner/middleware/arrow.ts
|
|
3
|
+
function n(n) {
|
|
4
|
+
return {
|
|
5
|
+
name: "arrow",
|
|
6
|
+
fn(r) {
|
|
7
|
+
let i = typeof n.element == "function" ? n.element() : n.element, a = e(r.placement);
|
|
8
|
+
if (!i) return { data: { side: a } };
|
|
9
|
+
let { rects: o, x: s, y: c } = r, l = n.padding ?? 4, u = t(a), d = i.getBoundingClientRect(), f = d.width || 0, p = d.height || 0, m = r.elements.floating.getBoundingClientRect(), h = u ? m.width : m.height, g = u ? f : p, _ = (u ? o.reference.x + o.reference.width / 2 - s : o.reference.y + o.reference.height / 2 - c) - g / 2, v = l, y = h - g - l;
|
|
10
|
+
return _ = Math.min(Math.max(_, v), Math.max(v, y)), { data: u ? {
|
|
11
|
+
x: _,
|
|
12
|
+
side: a
|
|
13
|
+
} : {
|
|
14
|
+
y: _,
|
|
15
|
+
side: a
|
|
16
|
+
} };
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { n as arrow };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=arrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrow.js","names":[],"sources":["../../../../src/lib/positioner/middleware/arrow.ts"],"sourcesContent":["import type { Middleware } from \"../types\";\nimport { getSide, isVerticalSide } from \"../core/placement\";\n\nexport interface ArrowOptions {\n /**\n * 箭头 DOM 元素,或返回该元素的函数(Solid 场景下常传一个访问器)。\n * 类型是 Element 而不是 HTMLElement,是为了兼容 SVG 场景下用 <svg> 画箭头的写法\n * (SVGSVGElement 不是 HTMLElement 的子类型)。\n */\n element: Element | undefined | (() => Element | undefined);\n /** 箭头距 floating 边缘的最小间距,默认 4 */\n padding?: number;\n}\n\nexport interface ArrowData {\n x?: number;\n y?: number;\n /** 箭头应贴靠 floating 的哪一侧(与 floating 的 placement 主边相同) */\n side: ReturnType<typeof getSide>;\n}\n\n/**\n * 计算箭头相对 floating 元素左上角的 x/y 偏移,\n * 使其始终指向 reference 元素中心,同时不超出 floating 边界。\n */\nexport function arrow(options: ArrowOptions): Middleware {\n return {\n name: \"arrow\",\n fn(state) {\n const el =\n typeof options.element === \"function\"\n ? options.element()\n : options.element;\n const side = getSide(state.placement);\n if (!el) return { data: { side } };\n\n const { rects, x, y } = state;\n const padding = options.padding ?? 4;\n const vertical = isVerticalSide(side);\n\n // 用 getBoundingClientRect 而不是 offsetWidth/offsetHeight:后者只有\n // HTMLElement 才有,SVG 元素(比如 <svg>/<g>)没有这两个属性;\n // getBoundingClientRect 对所有 Element 都通用,只要箭头本身没有做\n // CSS transform(本库的 TooltipArrow 就是特意不用 rotate 来避免这个问题)。\n const arrowRect = el.getBoundingClientRect();\n const arrowWidth = arrowRect.width || 0;\n const arrowHeight = arrowRect.height || 0;\n\n // 关键:floating 的宽高现读现用,不用 state.rects.floating(那是这一轮\n // computePosition 刚开始时缓存的值)。如果 arrow 前面排了 size 这类会\n // 通过 apply 回调产生 DOM 副作用(比如响应式地改 max-width)的 middleware,\n // 而且这次副作用刚好同步生效了,state.rects.floating 就会是“改之前”的\n // 旧尺寸,用它算出来的箭头位置会带着一个固定的偏移量,跟最终实际渲染的\n // 盒子宽度对不上。这里现场重新measure,保证永远拿到当下最新的尺寸。\n const freshFloatingRect = state.elements.floating.getBoundingClientRect();\n const axisLen = vertical\n ? freshFloatingRect.width\n : freshFloatingRect.height;\n const arrowLen = vertical ? arrowWidth : arrowHeight;\n\n // reference 中心点相对 floating 左上角的位置\n const refCenter = vertical\n ? rects.reference.x + rects.reference.width / 2 - x\n : rects.reference.y + rects.reference.height / 2 - y;\n\n let pos = refCenter - arrowLen / 2;\n const min = padding;\n const max = axisLen - arrowLen - padding;\n pos = Math.min(Math.max(pos, min), Math.max(min, max));\n\n const data: ArrowData = vertical ? { x: pos, side } : { y: pos, side };\n return { data };\n },\n };\n}\n"],"mappings":";;AAyBA,SAAgB,EAAM,GAAmC;CACvD,OAAO;EACL,MAAM;EACN,GAAG,GAAO;GACR,IAAM,IACJ,OAAO,EAAQ,WAAY,aACvB,EAAQ,QAAQ,IAChB,EAAQ,SACR,IAAO,EAAQ,EAAM,SAAS;GACpC,IAAI,CAAC,GAAI,OAAO,EAAE,MAAM,EAAE,QAAK,EAAE;GAEjC,IAAM,EAAE,UAAO,MAAG,SAAM,GAClB,IAAU,EAAQ,WAAW,GAC7B,IAAW,EAAe,CAAI,GAM9B,IAAY,EAAG,sBAAsB,GACrC,IAAa,EAAU,SAAS,GAChC,IAAc,EAAU,UAAU,GAQlC,IAAoB,EAAM,SAAS,SAAS,sBAAsB,GAClE,IAAU,IACZ,EAAkB,QAClB,EAAkB,QAChB,IAAW,IAAW,IAAa,GAOrC,KAJc,IACd,EAAM,UAAU,IAAI,EAAM,UAAU,QAAQ,IAAI,IAChD,EAAM,UAAU,IAAI,EAAM,UAAU,SAAS,IAAI,KAE/B,IAAW,GAC3B,IAAM,GACN,IAAM,IAAU,IAAW;GAIjC,OAHA,IAAM,KAAK,IAAI,KAAK,IAAI,GAAK,CAAG,GAAG,KAAK,IAAI,GAAK,CAAG,CAAC,GAG9C,EAAE,MADe,IAAW;IAAE,GAAG;IAAK;GAAK,IAAI;IAAE,GAAG;IAAK;GAAK,EACvD;EAChB;CACF;AACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Middleware } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* 修正因祖先元素设置了 transform / filter / perspective / backdrop-filter /
|
|
4
|
+
* will-change / contain 等 CSS 属性,导致 position:fixed(部分情况下
|
|
5
|
+
* position:absolute 也一样)的包含块被从“视口”重新定义成该祖先自身,
|
|
6
|
+
* 从而让按视口坐标算出来的 x/y 出现系统性偏移的问题。
|
|
7
|
+
*
|
|
8
|
+
* 典型症状:demo 页面里定位完全正常,放进真实项目(尤其是大量使用
|
|
9
|
+
* transform 做拖拽/缩放/面板动画的应用,比如设计工具、看板、画布编辑器)
|
|
10
|
+
* 后,浮层整体固定偏移某个方向,但相对位置关系(比如箭头跟着内容一起偏)
|
|
11
|
+
* 保持不变——这正是“坐标系被祖先重新定义”而不是“定位算法算错了”的特征。
|
|
12
|
+
*
|
|
13
|
+
* 原理:从 floating 元素实际的 DOM 父节点开始向上查找,找到第一个会重新
|
|
14
|
+
* 定义包含块的祖先,用它的 getBoundingClientRect() 反推出这个“意外包含块”
|
|
15
|
+
* 相对视口的偏移量,从最终坐标里减掉,抵消这个偏移。
|
|
16
|
+
*
|
|
17
|
+
* 局限:只处理纯平移类的偏移(比如 translate、面板展开动画、GPU 加速常见的
|
|
18
|
+
* translateZ(0))。如果那个祖先同时还做了 scale/rotate,这里不会做矩阵换算,
|
|
19
|
+
* 位置依然会有偏差——遇到这种情况,更彻底的办法是让 Portal 挂载点脱离那个
|
|
20
|
+
* 祖先(比如手动把挂载点换成真正不受影响的 document.body,而不是应用内部
|
|
21
|
+
* 某个嵌套很深的容器)。
|
|
22
|
+
*
|
|
23
|
+
* 建议放在 middleware 数组的最后一位——它修正的是“最终要写进 DOM 的坐标”,
|
|
24
|
+
* 前面 offset/flip/shift/size/arrow 等都在统一的视口坐标系里计算,不受影响,
|
|
25
|
+
* 只有真正落地前的这一步需要额外修正。
|
|
26
|
+
*/
|
|
27
|
+
export declare function containingBlockOffset(): Middleware;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/lib/positioner/middleware/containing-block-offset.ts
|
|
2
|
+
var e = [
|
|
3
|
+
"transform",
|
|
4
|
+
"perspective",
|
|
5
|
+
"filter",
|
|
6
|
+
"backdropFilter"
|
|
7
|
+
];
|
|
8
|
+
function t(t) {
|
|
9
|
+
for (let n of e) {
|
|
10
|
+
let e = t[n];
|
|
11
|
+
if (e && e !== "none") return !0;
|
|
12
|
+
}
|
|
13
|
+
let n = t.willChange || "";
|
|
14
|
+
if (/transform|perspective|filter/.test(n)) return !0;
|
|
15
|
+
let r = t.contain || "";
|
|
16
|
+
return !!/paint|layout|strict|content/.test(r);
|
|
17
|
+
}
|
|
18
|
+
function n() {
|
|
19
|
+
return {
|
|
20
|
+
name: "containingBlockOffset",
|
|
21
|
+
fn(e) {
|
|
22
|
+
let n = e.elements.floating.parentElement, r = 0, i = 0, a = null;
|
|
23
|
+
for (; n && n !== document.documentElement;) {
|
|
24
|
+
if (t(getComputedStyle(n))) {
|
|
25
|
+
let e = n.getBoundingClientRect();
|
|
26
|
+
r = e.x, i = e.y, a = n;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
n = n.parentElement;
|
|
30
|
+
}
|
|
31
|
+
return !a || r === 0 && i === 0 ? { data: { ancestor: null } } : {
|
|
32
|
+
x: e.x - r,
|
|
33
|
+
y: e.y - i,
|
|
34
|
+
data: {
|
|
35
|
+
ancestor: a,
|
|
36
|
+
offsetX: r,
|
|
37
|
+
offsetY: i
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { n as containingBlockOffset };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=containing-block-offset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containing-block-offset.js","names":[],"sources":["../../../../src/lib/positioner/middleware/containing-block-offset.ts"],"sourcesContent":["import type { Middleware } from \"../types\";\n\nconst TRANSFORM_STYLE_PROPS = [\n \"transform\",\n \"perspective\",\n \"filter\",\n \"backdropFilter\",\n] as const;\n\nfunction establishesContainingBlock(style: CSSStyleDeclaration): boolean {\n for (const prop of TRANSFORM_STYLE_PROPS) {\n const value = style[prop as keyof CSSStyleDeclaration] as\n | string\n | undefined;\n if (value && value !== \"none\") return true;\n }\n const willChange = style.willChange || \"\";\n if (/transform|perspective|filter/.test(willChange)) return true;\n const contain = style.contain || \"\";\n if (/paint|layout|strict|content/.test(contain)) return true;\n return false;\n}\n\n/**\n * 修正因祖先元素设置了 transform / filter / perspective / backdrop-filter /\n * will-change / contain 等 CSS 属性,导致 position:fixed(部分情况下\n * position:absolute 也一样)的包含块被从“视口”重新定义成该祖先自身,\n * 从而让按视口坐标算出来的 x/y 出现系统性偏移的问题。\n *\n * 典型症状:demo 页面里定位完全正常,放进真实项目(尤其是大量使用\n * transform 做拖拽/缩放/面板动画的应用,比如设计工具、看板、画布编辑器)\n * 后,浮层整体固定偏移某个方向,但相对位置关系(比如箭头跟着内容一起偏)\n * 保持不变——这正是“坐标系被祖先重新定义”而不是“定位算法算错了”的特征。\n *\n * 原理:从 floating 元素实际的 DOM 父节点开始向上查找,找到第一个会重新\n * 定义包含块的祖先,用它的 getBoundingClientRect() 反推出这个“意外包含块”\n * 相对视口的偏移量,从最终坐标里减掉,抵消这个偏移。\n *\n * 局限:只处理纯平移类的偏移(比如 translate、面板展开动画、GPU 加速常见的\n * translateZ(0))。如果那个祖先同时还做了 scale/rotate,这里不会做矩阵换算,\n * 位置依然会有偏差——遇到这种情况,更彻底的办法是让 Portal 挂载点脱离那个\n * 祖先(比如手动把挂载点换成真正不受影响的 document.body,而不是应用内部\n * 某个嵌套很深的容器)。\n *\n * 建议放在 middleware 数组的最后一位——它修正的是“最终要写进 DOM 的坐标”,\n * 前面 offset/flip/shift/size/arrow 等都在统一的视口坐标系里计算,不受影响,\n * 只有真正落地前的这一步需要额外修正。\n */\nexport function containingBlockOffset(): Middleware {\n return {\n name: \"containingBlockOffset\",\n fn(state) {\n const floatingEl = state.elements.floating;\n let node: Element | null = floatingEl.parentElement;\n let offsetX = 0;\n let offsetY = 0;\n let foundAncestor: Element | null = null;\n\n while (node && node !== document.documentElement) {\n const style = getComputedStyle(node);\n if (establishesContainingBlock(style)) {\n const rect = node.getBoundingClientRect();\n offsetX = rect.x;\n offsetY = rect.y;\n foundAncestor = node;\n break;\n }\n node = node.parentElement;\n }\n\n if (!foundAncestor || (offsetX === 0 && offsetY === 0)) {\n return { data: { ancestor: null } };\n }\n\n return {\n x: state.x - offsetX,\n y: state.y - offsetY,\n data: { ancestor: foundAncestor, offsetX, offsetY },\n };\n },\n };\n}\n"],"mappings":";AAEA,IAAM,IAAwB;CAC5B;CACA;CACA;CACA;AACF;AAEA,SAAS,EAA2B,GAAqC;CACvE,KAAK,IAAM,KAAQ,GAAuB;EACxC,IAAM,IAAQ,EAAM;EAGpB,IAAI,KAAS,MAAU,QAAQ,OAAO;CACxC;CACA,IAAM,IAAa,EAAM,cAAc;CACvC,IAAI,+BAA+B,KAAK,CAAU,GAAG,OAAO;CAC5D,IAAM,IAAU,EAAM,WAAW;CAEjC,OADA,EAAI,8BAA8B,KAAK,CAAO;AAEhD;AA2BA,SAAgB,IAAoC;CAClD,OAAO;EACL,MAAM;EACN,GAAG,GAAO;GAER,IAAI,IADe,EAAM,SAAS,SACI,eAClC,IAAU,GACV,IAAU,GACV,IAAgC;GAEpC,OAAO,KAAQ,MAAS,SAAS,kBAAiB;IAEhD,IAAI,EADU,iBAAiB,CACA,CAAK,GAAG;KACrC,IAAM,IAAO,EAAK,sBAAsB;KAGxC,AAFA,IAAU,EAAK,GACf,IAAU,EAAK,GACf,IAAgB;KAChB;IACF;IACA,IAAO,EAAK;GACd;GAMA,OAJI,CAAC,KAAkB,MAAY,KAAK,MAAY,IAC3C,EAAE,MAAM,EAAE,UAAU,KAAK,EAAE,IAG7B;IACL,GAAG,EAAM,IAAI;IACb,GAAG,EAAM,IAAI;IACb,MAAM;KAAE,UAAU;KAAe;KAAS;IAAQ;GACpD;EACF;CACF;AACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Boundary, Middleware, Placement } from '../types';
|
|
2
|
+
export interface FlipOptions {
|
|
3
|
+
padding?: number;
|
|
4
|
+
boundary?: Boundary;
|
|
5
|
+
/** 翻转候选 placement 列表,按顺序尝试,默认只翻转到正对面 */
|
|
6
|
+
fallbackPlacements?: Placement[];
|
|
7
|
+
}
|
|
8
|
+
/** 当主轴方向空间不够时,翻转到相对的 placement(如 bottom -> top) */
|
|
9
|
+
export declare function flip(options?: FlipOptions): Middleware;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { getViewportBoundary as e } from "../utils/dom.js";
|
|
2
|
+
import { computeCoordsFromPlacement as t, getOppositePlacement as n, getSide as r } from "../core/placement.js";
|
|
3
|
+
//#region src/lib/positioner/middleware/flip.ts
|
|
4
|
+
function i(e, t, n, r, i) {
|
|
5
|
+
return {
|
|
6
|
+
top: i.y - t,
|
|
7
|
+
left: i.x - e,
|
|
8
|
+
right: e + n - (i.x + i.width),
|
|
9
|
+
bottom: t + r - (i.y + i.height)
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function a(e, t) {
|
|
13
|
+
switch (e) {
|
|
14
|
+
case "top": return t.top;
|
|
15
|
+
case "bottom": return t.bottom;
|
|
16
|
+
case "left": return t.left;
|
|
17
|
+
case "right": return t.right;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function o(o = {}) {
|
|
21
|
+
return {
|
|
22
|
+
name: "flip",
|
|
23
|
+
fn(s) {
|
|
24
|
+
let { x: c, y: l, rects: u, placement: d, strategy: f, middlewareData: p, initialPlacement: m } = s;
|
|
25
|
+
if (p.flip?.flipped) return {};
|
|
26
|
+
let { padding: h = 0 } = o, g = o.boundary ?? e(f, h), _ = i(c, l, u.floating.width, u.floating.height, g), v = a(r(d), _);
|
|
27
|
+
if (v <= 0) return {};
|
|
28
|
+
let y = o.fallbackPlacements ?? [n(m)], b = null;
|
|
29
|
+
for (let e of y) {
|
|
30
|
+
if (e === d) continue;
|
|
31
|
+
let n = t(u, e), o = i(n.x, n.y, u.floating.width, u.floating.height, g), s = a(r(e), o);
|
|
32
|
+
if (s <= 0) {
|
|
33
|
+
b = {
|
|
34
|
+
placement: e,
|
|
35
|
+
overflow: s
|
|
36
|
+
};
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
(!b || s < b.overflow) && (b = {
|
|
40
|
+
placement: e,
|
|
41
|
+
overflow: s
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return !b || b.overflow >= v ? {} : {
|
|
45
|
+
reset: { placement: b.placement },
|
|
46
|
+
data: { flipped: !0 }
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { o as flip };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=flip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flip.js","names":[],"sources":["../../../../src/lib/positioner/middleware/flip.ts"],"sourcesContent":["import type { Boundary, Middleware, Placement, Side } from \"../types\";\nimport { getViewportBoundary } from \"../utils/dom\";\nimport {\n computeCoordsFromPlacement,\n getOppositePlacement,\n getSide,\n} from \"../core/placement\";\n\nexport interface FlipOptions {\n padding?: number;\n boundary?: Boundary;\n /** 翻转候选 placement 列表,按顺序尝试,默认只翻转到正对面 */\n fallbackPlacements?: Placement[];\n}\n\ninterface SideOverflow {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nfunction getSideOverflow(\n x: number,\n y: number,\n width: number,\n height: number,\n boundary: Boundary,\n): SideOverflow {\n return {\n top: boundary.y - y,\n left: boundary.x - x,\n right: x + width - (boundary.x + boundary.width),\n bottom: y + height - (boundary.y + boundary.height),\n };\n}\n\n/** 取某个 placement 主轴方向对应的溢出量(正数代表溢出了多少像素) */\nfunction getMainAxisOverflow(side: Side, overflow: SideOverflow): number {\n switch (side) {\n case \"top\":\n return overflow.top;\n case \"bottom\":\n return overflow.bottom;\n case \"left\":\n return overflow.left;\n case \"right\":\n return overflow.right;\n }\n}\n\n/** 当主轴方向空间不够时,翻转到相对的 placement(如 bottom -> top) */\nexport function flip(options: FlipOptions = {}): Middleware {\n return {\n name: \"flip\",\n fn(state) {\n const {\n x,\n y,\n rects,\n placement,\n strategy,\n middlewareData,\n initialPlacement,\n } = state;\n\n // 已经翻转过一次就不再继续翻,避免来回震荡\n if (middlewareData.flip?.flipped) return {};\n\n const { padding = 0 } = options;\n const boundary =\n options.boundary ?? getViewportBoundary(strategy, padding);\n\n const currentOverflow = getSideOverflow(\n x,\n y,\n rects.floating.width,\n rects.floating.height,\n boundary,\n );\n const currentMainOverflow = getMainAxisOverflow(\n getSide(placement),\n currentOverflow,\n );\n\n // 当前方向够放,不需要翻\n if (currentMainOverflow <= 0) return {};\n\n const candidates = options.fallbackPlacements ?? [\n getOppositePlacement(initialPlacement),\n ];\n\n let best: { placement: Placement; overflow: number } | null = null;\n\n for (const candidate of candidates) {\n if (candidate === placement) continue;\n\n // 关键修复点:真正代入候选 placement 算出它的坐标,再算它自己的真实溢出量,\n // 而不是用当前(本就溢出的)placement 的 overflow 去做错误的镜像估算。\n const candidateCoords = computeCoordsFromPlacement(rects, candidate);\n const candidateOverflow = getSideOverflow(\n candidateCoords.x,\n candidateCoords.y,\n rects.floating.width,\n rects.floating.height,\n boundary,\n );\n const candidateMainOverflow = getMainAxisOverflow(\n getSide(candidate),\n candidateOverflow,\n );\n\n if (candidateMainOverflow <= 0) {\n best = { placement: candidate, overflow: candidateMainOverflow };\n break; // 找到完全不溢出的候选,直接采用\n }\n if (!best || candidateMainOverflow < best.overflow) {\n best = { placement: candidate, overflow: candidateMainOverflow };\n }\n }\n\n // 没有候选,或翻过去也不比现在好,就不翻\n if (!best || best.overflow >= currentMainOverflow) return {};\n\n return {\n reset: { placement: best.placement },\n data: { flipped: true },\n };\n },\n };\n}\n"],"mappings":";;;AAsBA,SAAS,EACP,GACA,GACA,GACA,GACA,GACc;CACd,OAAO;EACL,KAAK,EAAS,IAAI;EAClB,MAAM,EAAS,IAAI;EACnB,OAAO,IAAI,KAAS,EAAS,IAAI,EAAS;EAC1C,QAAQ,IAAI,KAAU,EAAS,IAAI,EAAS;CAC9C;AACF;AAGA,SAAS,EAAoB,GAAY,GAAgC;CACvE,QAAQ,GAAR;EACE,KAAK,OACH,OAAO,EAAS;EAClB,KAAK,UACH,OAAO,EAAS;EAClB,KAAK,QACH,OAAO,EAAS;EAClB,KAAK,SACH,OAAO,EAAS;CACpB;AACF;AAGA,SAAgB,EAAK,IAAuB,CAAC,GAAe;CAC1D,OAAO;EACL,MAAM;EACN,GAAG,GAAO;GACR,IAAM,EACJ,MACA,MACA,UACA,cACA,aACA,mBACA,wBACE;GAGJ,IAAI,EAAe,MAAM,SAAS,OAAO,CAAC;GAE1C,IAAM,EAAE,aAAU,MAAM,GAClB,IACJ,EAAQ,YAAY,EAAoB,GAAU,CAAO,GAErD,IAAkB,EACtB,GACA,GACA,EAAM,SAAS,OACf,EAAM,SAAS,QACf,CACF,GACM,IAAsB,EAC1B,EAAQ,CAAS,GACjB,CACF;GAGA,IAAI,KAAuB,GAAG,OAAO,CAAC;GAEtC,IAAM,IAAa,EAAQ,sBAAsB,CAC/C,EAAqB,CAAgB,CACvC,GAEI,IAA0D;GAE9D,KAAK,IAAM,KAAa,GAAY;IAClC,IAAI,MAAc,GAAW;IAI7B,IAAM,IAAkB,EAA2B,GAAO,CAAS,GAC7D,IAAoB,EACxB,EAAgB,GAChB,EAAgB,GAChB,EAAM,SAAS,OACf,EAAM,SAAS,QACf,CACF,GACM,IAAwB,EAC5B,EAAQ,CAAS,GACjB,CACF;IAEA,IAAI,KAAyB,GAAG;KAC9B,IAAO;MAAE,WAAW;MAAW,UAAU;KAAsB;KAC/D;IACF;IACA,CAAI,CAAC,KAAQ,IAAwB,EAAK,cACxC,IAAO;KAAE,WAAW;KAAW,UAAU;IAAsB;GAEnE;GAKA,OAFI,CAAC,KAAQ,EAAK,YAAY,IAA4B,CAAC,IAEpD;IACL,OAAO,EAAE,WAAW,EAAK,UAAU;IACnC,MAAM,EAAE,SAAS,GAAK;GACxB;EACF;CACF;AACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Boundary, Middleware } from '../types';
|
|
2
|
+
export interface HideOptions {
|
|
3
|
+
padding?: number;
|
|
4
|
+
boundary?: Boundary;
|
|
5
|
+
/**
|
|
6
|
+
* 'referenceHidden':reference 元素被自身滚动容器完全裁掉(比如滚出了可滚动的父级)
|
|
7
|
+
* 'escaped':floating 元素虽然还在视口内,但已经完全脱离了 reference 所在的边界
|
|
8
|
+
*(比如 reference 在一个卡片里被横向滚动挡住了一半,虽然 floating 还能摆在视口里,
|
|
9
|
+
* 但已经不该再显示,否则看起来像是"飘"在别的内容上)
|
|
10
|
+
* 默认只做 referenceHidden 检测,这是最常见也最需要的场景。
|
|
11
|
+
*/
|
|
12
|
+
strategy?: "referenceHidden" | "escaped";
|
|
13
|
+
}
|
|
14
|
+
export interface HideData {
|
|
15
|
+
referenceHidden?: boolean;
|
|
16
|
+
escaped?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 不改变坐标,只产出"是否应该隐藏浮层"的判断数据,交给上层组件决定要不要渲染。
|
|
20
|
+
* 用法:在业务组件里读 `middlewareData().hide?.referenceHidden`,为 true 时关闭浮层。
|
|
21
|
+
*/
|
|
22
|
+
export declare function hide(options?: HideOptions): Middleware;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getRectRelativeTo as e, getViewportBoundary as t } from "../utils/dom.js";
|
|
2
|
+
//#region src/lib/positioner/middleware/hide.ts
|
|
3
|
+
function n(n = {}) {
|
|
4
|
+
return {
|
|
5
|
+
name: "hide",
|
|
6
|
+
fn(r) {
|
|
7
|
+
let { x: i, y: a, rects: o, strategy: s, elements: c } = r, { padding: l = 0, strategy: u = "referenceHidden" } = n, d = n.boundary ?? t(s, l), f = {};
|
|
8
|
+
if (u === "referenceHidden") {
|
|
9
|
+
let t = e(c.reference, s);
|
|
10
|
+
f.referenceHidden = t.x + t.width <= d.x || t.y + t.height <= d.y || t.x >= d.x + d.width || t.y >= d.y + d.height;
|
|
11
|
+
}
|
|
12
|
+
return u === "escaped" && (f.escaped = i + o.floating.width <= d.x || a + o.floating.height <= d.y || i >= d.x + d.width || a >= d.y + d.height), { data: f };
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { n as hide };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=hide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hide.js","names":[],"sources":["../../../../src/lib/positioner/middleware/hide.ts"],"sourcesContent":["import type { Boundary, Middleware } from \"../types\";\nimport { getViewportBoundary, getRectRelativeTo } from \"../utils/dom\";\n\nexport interface HideOptions {\n padding?: number;\n boundary?: Boundary;\n /**\n * 'referenceHidden':reference 元素被自身滚动容器完全裁掉(比如滚出了可滚动的父级)\n * 'escaped':floating 元素虽然还在视口内,但已经完全脱离了 reference 所在的边界\n *(比如 reference 在一个卡片里被横向滚动挡住了一半,虽然 floating 还能摆在视口里,\n * 但已经不该再显示,否则看起来像是\"飘\"在别的内容上)\n * 默认只做 referenceHidden 检测,这是最常见也最需要的场景。\n */\n strategy?: \"referenceHidden\" | \"escaped\";\n}\n\nexport interface HideData {\n referenceHidden?: boolean;\n escaped?: boolean;\n}\n\n/**\n * 不改变坐标,只产出\"是否应该隐藏浮层\"的判断数据,交给上层组件决定要不要渲染。\n * 用法:在业务组件里读 `middlewareData().hide?.referenceHidden`,为 true 时关闭浮层。\n */\nexport function hide(options: HideOptions = {}): Middleware {\n return {\n name: \"hide\",\n fn(state) {\n const { x, y, rects, strategy: positionStrategy, elements } = state;\n const { padding = 0, strategy = \"referenceHidden\" } = options;\n const boundary =\n options.boundary ?? getViewportBoundary(positionStrategy, padding);\n\n const data: HideData = {};\n\n if (strategy === \"referenceHidden\") {\n const refRect = getRectRelativeTo(elements.reference, positionStrategy);\n const referenceHidden =\n refRect.x + refRect.width <= boundary.x ||\n refRect.y + refRect.height <= boundary.y ||\n refRect.x >= boundary.x + boundary.width ||\n refRect.y >= boundary.y + boundary.height;\n data.referenceHidden = referenceHidden;\n }\n\n if (strategy === \"escaped\") {\n const escaped =\n x + rects.floating.width <= boundary.x ||\n y + rects.floating.height <= boundary.y ||\n x >= boundary.x + boundary.width ||\n y >= boundary.y + boundary.height;\n data.escaped = escaped;\n }\n\n return { data };\n },\n };\n}\n"],"mappings":";;AAyBA,SAAgB,EAAK,IAAuB,CAAC,GAAe;CAC1D,OAAO;EACL,MAAM;EACN,GAAG,GAAO;GACR,IAAM,EAAE,MAAG,MAAG,UAAO,UAAU,GAAkB,gBAAa,GACxD,EAAE,aAAU,GAAG,cAAW,sBAAsB,GAChD,IACJ,EAAQ,YAAY,EAAoB,GAAkB,CAAO,GAE7D,IAAiB,CAAC;GAExB,IAAI,MAAa,mBAAmB;IAClC,IAAM,IAAU,EAAkB,EAAS,WAAW,CAAgB;IAMtE,EAAK,kBAJH,EAAQ,IAAI,EAAQ,SAAS,EAAS,KACtC,EAAQ,IAAI,EAAQ,UAAU,EAAS,KACvC,EAAQ,KAAK,EAAS,IAAI,EAAS,SACnC,EAAQ,KAAK,EAAS,IAAI,EAAS;GAEvC;GAWA,OATI,MAAa,cAMf,EAAK,UAJH,IAAI,EAAM,SAAS,SAAS,EAAS,KACrC,IAAI,EAAM,SAAS,UAAU,EAAS,KACtC,KAAK,EAAS,IAAI,EAAS,SAC3B,KAAK,EAAS,IAAI,EAAS,SAIxB,EAAE,QAAK;EAChB;CACF;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { offset } from './offset';
|
|
2
|
+
export type { OffsetOptions, OffsetValue } from './offset';
|
|
3
|
+
export { shift } from './shift';
|
|
4
|
+
export type { ShiftOptions } from './shift';
|
|
5
|
+
export { flip } from './flip';
|
|
6
|
+
export type { FlipOptions } from './flip';
|
|
7
|
+
export { arrow } from './arrow';
|
|
8
|
+
export type { ArrowOptions, ArrowData } from './arrow';
|
|
9
|
+
export { size } from './size';
|
|
10
|
+
export type { SizeOptions, SizeAvailableSpace } from './size';
|
|
11
|
+
export { hide } from './hide';
|
|
12
|
+
export type { HideOptions, HideData } from './hide';
|
|
13
|
+
export { containingBlockOffset } from './containing-block-offset';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Middleware } from '../types';
|
|
2
|
+
export interface OffsetValue {
|
|
3
|
+
/** 沿主轴方向的偏移(远离/靠近 reference),默认 0 */
|
|
4
|
+
mainAxis?: number;
|
|
5
|
+
/** 沿交叉轴方向的偏移(左右或上下平移),默认 0 */
|
|
6
|
+
crossAxis?: number;
|
|
7
|
+
}
|
|
8
|
+
export type OffsetOptions = number | OffsetValue;
|
|
9
|
+
/** 让 floating 元素与 reference 保持一定间距,或沿对齐轴做微调 */
|
|
10
|
+
export declare function offset(value?: OffsetOptions): Middleware;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getSide as e, isVerticalSide as t } from "../core/placement.js";
|
|
2
|
+
//#region src/lib/positioner/middleware/offset.ts
|
|
3
|
+
function n(n = 0) {
|
|
4
|
+
return {
|
|
5
|
+
name: "offset",
|
|
6
|
+
fn(r) {
|
|
7
|
+
let { x: i, y: a, placement: o } = r, s = e(o), c = t(s), l = typeof n == "number" ? n : n.mainAxis ?? 0, u = typeof n == "number" ? 0 : n.crossAxis ?? 0, d = l * (s === "bottom" || s === "right" ? 1 : -1);
|
|
8
|
+
return c ? {
|
|
9
|
+
x: i + u,
|
|
10
|
+
y: a + d
|
|
11
|
+
} : {
|
|
12
|
+
x: i + d,
|
|
13
|
+
y: a + u
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { n as offset };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=offset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offset.js","names":[],"sources":["../../../../src/lib/positioner/middleware/offset.ts"],"sourcesContent":["import type { Middleware } from \"../types\";\nimport { getSide, isVerticalSide } from \"../core/placement\";\n\nexport interface OffsetValue {\n /** 沿主轴方向的偏移(远离/靠近 reference),默认 0 */\n mainAxis?: number;\n /** 沿交叉轴方向的偏移(左右或上下平移),默认 0 */\n crossAxis?: number;\n}\n\nexport type OffsetOptions = number | OffsetValue;\n\n/** 让 floating 元素与 reference 保持一定间距,或沿对齐轴做微调 */\nexport function offset(value: OffsetOptions = 0): Middleware {\n return {\n name: \"offset\",\n fn(state) {\n const { x, y, placement } = state;\n const side = getSide(placement);\n const vertical = isVerticalSide(side);\n\n const mainAxis =\n typeof value === \"number\" ? value : (value.mainAxis ?? 0);\n const crossAxis = typeof value === \"number\" ? 0 : (value.crossAxis ?? 0);\n\n // top/left 是\"负方向\",bottom/right 是\"正方向\"\n const mainSign = side === \"bottom\" || side === \"right\" ? 1 : -1;\n\n const diffMain = mainAxis * mainSign;\n\n return vertical\n ? { x: x + crossAxis, y: y + diffMain }\n : { x: x + diffMain, y: y + crossAxis };\n },\n };\n}\n"],"mappings":";;AAaA,SAAgB,EAAO,IAAuB,GAAe;CAC3D,OAAO;EACL,MAAM;EACN,GAAG,GAAO;GACR,IAAM,EAAE,MAAG,MAAG,iBAAc,GACtB,IAAO,EAAQ,CAAS,GACxB,IAAW,EAAe,CAAI,GAE9B,IACJ,OAAO,KAAU,WAAW,IAAS,EAAM,YAAY,GACnD,IAAY,OAAO,KAAU,WAAW,IAAK,EAAM,aAAa,GAKhE,IAAW,KAFA,MAAS,YAAY,MAAS,UAAU,IAAI;GAI7D,OAAO,IACH;IAAE,GAAG,IAAI;IAAW,GAAG,IAAI;GAAS,IACpC;IAAE,GAAG,IAAI;IAAU,GAAG,IAAI;GAAU;EAC1C;CACF;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Boundary, Middleware } from '../types';
|
|
2
|
+
export interface ShiftOptions {
|
|
3
|
+
/** 距边界的最小间距,默认 0 */
|
|
4
|
+
padding?: number;
|
|
5
|
+
/** 自定义边界矩形,默认使用视口 */
|
|
6
|
+
boundary?: Boundary;
|
|
7
|
+
/** 是否限制主轴方向(如 top/bottom placement 的 y 方向),默认 true */
|
|
8
|
+
mainAxis?: boolean;
|
|
9
|
+
/** 是否限制交叉轴方向(如 top/bottom placement 的 x 方向),默认 true */
|
|
10
|
+
crossAxis?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** 平移 floating 元素,使其尽量停留在边界(默认视口)内,不做 placement 翻转 */
|
|
13
|
+
export declare function shift(options?: ShiftOptions): Middleware;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { getViewportBoundary as e } from "../utils/dom.js";
|
|
2
|
+
//#region src/lib/positioner/middleware/shift.ts
|
|
3
|
+
function t(t = {}) {
|
|
4
|
+
return {
|
|
5
|
+
name: "shift",
|
|
6
|
+
fn(n) {
|
|
7
|
+
let { x: r, y: i, rects: a, strategy: o } = n, { padding: s = 0, mainAxis: c = !0, crossAxis: l = !0 } = t, u = t.boundary ?? e(o, s), d = r, f = i;
|
|
8
|
+
if (l) {
|
|
9
|
+
let e = u.x, t = u.x + u.width - a.floating.width;
|
|
10
|
+
d = Math.min(Math.max(r, e), Math.max(e, t));
|
|
11
|
+
}
|
|
12
|
+
if (c) {
|
|
13
|
+
let e = u.y, t = u.y + u.height - a.floating.height;
|
|
14
|
+
f = Math.min(Math.max(i, e), Math.max(e, t));
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
x: d,
|
|
18
|
+
y: f,
|
|
19
|
+
data: {
|
|
20
|
+
x: d - r,
|
|
21
|
+
y: f - i
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { t as shift };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=shift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shift.js","names":[],"sources":["../../../../src/lib/positioner/middleware/shift.ts"],"sourcesContent":["import type { Boundary, Middleware } from \"../types\";\nimport { getViewportBoundary } from \"../utils/dom\";\n\nexport interface ShiftOptions {\n /** 距边界的最小间距,默认 0 */\n padding?: number;\n /** 自定义边界矩形,默认使用视口 */\n boundary?: Boundary;\n /** 是否限制主轴方向(如 top/bottom placement 的 y 方向),默认 true */\n mainAxis?: boolean;\n /** 是否限制交叉轴方向(如 top/bottom placement 的 x 方向),默认 true */\n crossAxis?: boolean;\n}\n\n/** 平移 floating 元素,使其尽量停留在边界(默认视口)内,不做 placement 翻转 */\nexport function shift(options: ShiftOptions = {}): Middleware {\n return {\n name: \"shift\",\n fn(state) {\n const { x, y, rects, strategy } = state;\n const { padding = 0, mainAxis = true, crossAxis = true } = options;\n const boundary =\n options.boundary ?? getViewportBoundary(strategy, padding);\n\n let nextX = x;\n let nextY = y;\n\n if (crossAxis) {\n const minX = boundary.x;\n const maxX = boundary.x + boundary.width - rects.floating.width;\n nextX = Math.min(Math.max(x, minX), Math.max(minX, maxX));\n }\n\n if (mainAxis) {\n const minY = boundary.y;\n const maxY = boundary.y + boundary.height - rects.floating.height;\n nextY = Math.min(Math.max(y, minY), Math.max(minY, maxY));\n }\n\n return {\n x: nextX,\n y: nextY,\n data: { x: nextX - x, y: nextY - y },\n };\n },\n };\n}\n"],"mappings":";;AAeA,SAAgB,EAAM,IAAwB,CAAC,GAAe;CAC5D,OAAO;EACL,MAAM;EACN,GAAG,GAAO;GACR,IAAM,EAAE,MAAG,MAAG,UAAO,gBAAa,GAC5B,EAAE,aAAU,GAAG,cAAW,IAAM,eAAY,OAAS,GACrD,IACJ,EAAQ,YAAY,EAAoB,GAAU,CAAO,GAEvD,IAAQ,GACR,IAAQ;GAEZ,IAAI,GAAW;IACb,IAAM,IAAO,EAAS,GAChB,IAAO,EAAS,IAAI,EAAS,QAAQ,EAAM,SAAS;IAC1D,IAAQ,KAAK,IAAI,KAAK,IAAI,GAAG,CAAI,GAAG,KAAK,IAAI,GAAM,CAAI,CAAC;GAC1D;GAEA,IAAI,GAAU;IACZ,IAAM,IAAO,EAAS,GAChB,IAAO,EAAS,IAAI,EAAS,SAAS,EAAM,SAAS;IAC3D,IAAQ,KAAK,IAAI,KAAK,IAAI,GAAG,CAAI,GAAG,KAAK,IAAI,GAAM,CAAI,CAAC;GAC1D;GAEA,OAAO;IACL,GAAG;IACH,GAAG;IACH,MAAM;KAAE,GAAG,IAAQ;KAAG,GAAG,IAAQ;IAAE;GACrC;EACF;CACF;AACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Boundary, Middleware, MiddlewareState } from '../types';
|
|
2
|
+
export interface SizeAvailableSpace {
|
|
3
|
+
availableWidth: number;
|
|
4
|
+
availableHeight: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SizeOptions {
|
|
7
|
+
padding?: number;
|
|
8
|
+
boundary?: Boundary;
|
|
9
|
+
/** 拿到可用空间后自行处理,比如设置 floating 的 maxHeight */
|
|
10
|
+
apply?: (space: SizeAvailableSpace, state: MiddlewareState) => void;
|
|
11
|
+
}
|
|
12
|
+
/** 计算 floating 在当前边界内的可用宽高,交给 apply 回调去应用(如设置 max-height 实现滚动) */
|
|
13
|
+
export declare function size(options?: SizeOptions): Middleware;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export type Side = "top" | "right" | "bottom" | "left";
|
|
2
|
+
export type Alignment = "start" | "end";
|
|
3
|
+
export type AlignedPlacement = `${Side}-${Alignment}`;
|
|
4
|
+
export type Placement = Side | AlignedPlacement;
|
|
5
|
+
export type Strategy = "absolute" | "fixed";
|
|
6
|
+
export type Axis = "x" | "y";
|
|
7
|
+
export interface Coords {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
}
|
|
11
|
+
export interface Rect extends Coords {
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ElementRects {
|
|
16
|
+
reference: Rect;
|
|
17
|
+
floating: Rect;
|
|
18
|
+
}
|
|
19
|
+
export interface Elements {
|
|
20
|
+
reference: ReferenceElement;
|
|
21
|
+
floating: HTMLElement;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 虚拟参照元素:用于锚定到一个不存在真实 DOM 节点的位置,
|
|
25
|
+
* 最典型的场景就是右键菜单——锚点是鼠标点击的那个像素坐标,不是某个元素。
|
|
26
|
+
* 只要实现 getBoundingClientRect() 就能像真实 HTMLElement 一样参与定位计算。
|
|
27
|
+
*/
|
|
28
|
+
export interface VirtualElement {
|
|
29
|
+
getBoundingClientRect(): Rect;
|
|
30
|
+
/**
|
|
31
|
+
* 可选:关联一个真实 DOM 节点,autoUpdate 会用它去查找可滚动祖先容器
|
|
32
|
+
* (虚拟元素本身没有父节点链,无法直接判断哪些祖先滚动会影响这个点的位置)。
|
|
33
|
+
*/
|
|
34
|
+
contextElement?: Element;
|
|
35
|
+
}
|
|
36
|
+
export type ReferenceElement = Element | VirtualElement;
|
|
37
|
+
export interface MiddlewareData {
|
|
38
|
+
[key: string]: any;
|
|
39
|
+
}
|
|
40
|
+
/** 传给每个 middleware 的当前计算状态 */
|
|
41
|
+
export interface MiddlewareState extends Coords {
|
|
42
|
+
initialPlacement: Placement;
|
|
43
|
+
placement: Placement;
|
|
44
|
+
strategy: Strategy;
|
|
45
|
+
rects: ElementRects;
|
|
46
|
+
elements: Elements;
|
|
47
|
+
middlewareData: MiddlewareData;
|
|
48
|
+
}
|
|
49
|
+
export interface MiddlewareReturn extends Partial<Coords> {
|
|
50
|
+
data?: any;
|
|
51
|
+
/**
|
|
52
|
+
* 若返回该字段,表示需要用新的 placement 重新计算一轮,
|
|
53
|
+
* 主循环会用新 placement 重跑一次(用于 flip 等场景)。
|
|
54
|
+
*/
|
|
55
|
+
reset?: boolean | {
|
|
56
|
+
placement?: Placement;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export interface Middleware {
|
|
60
|
+
name: string;
|
|
61
|
+
fn(state: MiddlewareState): MiddlewareReturn;
|
|
62
|
+
}
|
|
63
|
+
export interface ComputePositionConfig {
|
|
64
|
+
placement?: Placement;
|
|
65
|
+
strategy?: Strategy;
|
|
66
|
+
middleware?: Middleware[];
|
|
67
|
+
}
|
|
68
|
+
export interface ComputePositionReturn extends Coords {
|
|
69
|
+
placement: Placement;
|
|
70
|
+
strategy: Strategy;
|
|
71
|
+
middlewareData: MiddlewareData;
|
|
72
|
+
}
|
|
73
|
+
export interface Boundary extends Rect {
|
|
74
|
+
}
|