@neut/ui 0.0.17 → 0.0.18
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.js +3 -0
- package/dist/components/accordion/Accordion/Accordion.js.map +1 -1
- package/dist/components/accordion/AccordionContent/AccordionContent.js +27 -21
- package/dist/components/accordion/AccordionContent/AccordionContent.js.map +1 -1
- package/dist/components/accordion/AccordionItem/AccordionItem.js +3 -0
- package/dist/components/accordion/AccordionItem/AccordionItem.js.map +1 -1
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js +19 -18
- package/dist/components/accordion/AccordionTrigger/AccordionTrigger.js.map +1 -1
- package/dist/components/alert/Alert/Alert.js +8 -3
- package/dist/components/alert/Alert/Alert.js.map +1 -1
- package/dist/components/alert/AlertAction/AlertAction.js +8 -3
- package/dist/components/alert/AlertAction/AlertAction.js.map +1 -1
- package/dist/components/alert/AlertDescription/AlertDescription.js +8 -3
- package/dist/components/alert/AlertDescription/AlertDescription.js.map +1 -1
- package/dist/components/alert/AlertTitle/AlertTitle.js +8 -3
- package/dist/components/alert/AlertTitle/AlertTitle.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialog/AlertDialog.d.ts +3 -1
- package/dist/components/alert-dialog/AlertDialog/AlertDialog.js +6 -1
- package/dist/components/alert-dialog/AlertDialog/AlertDialog.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js +9 -7
- package/dist/components/alert-dialog/AlertDialogCancel/AlertDialogCancel.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogContent/AlertDialogContent.types.d.ts +9 -3
- package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js +8 -3
- package/dist/components/alert-dialog/AlertDialogDescription/AlertDialogDescription.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js +8 -3
- package/dist/components/alert-dialog/AlertDialogFooter/AlertDialogFooter.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js +8 -3
- package/dist/components/alert-dialog/AlertDialogHeader/AlertDialogHeader.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js +8 -3
- package/dist/components/alert-dialog/AlertDialogMedia/AlertDialogMedia.js.map +1 -1
- package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js +8 -3
- package/dist/components/alert-dialog/AlertDialogTitle/AlertDialogTitle.js.map +1 -1
- package/dist/components/aspect-ratio/AspectRatio.js +3 -0
- package/dist/components/aspect-ratio/AspectRatio.js.map +1 -1
- package/dist/components/attachment/AttachmentTrigger/AttachmentTrigger.js +15 -7
- package/dist/components/attachment/AttachmentTrigger/AttachmentTrigger.js.map +1 -1
- package/dist/components/avatar/Avatar/Avatar.context.d.ts +7 -0
- package/dist/components/avatar/Avatar/Avatar.context.js +1 -1
- package/dist/components/avatar/Avatar/Avatar.context.js.map +1 -1
- package/dist/components/avatar/Avatar/Avatar.js +7 -2
- package/dist/components/avatar/Avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/AvatarBadge/AvatarBadge.js +8 -3
- package/dist/components/avatar/AvatarBadge/AvatarBadge.js.map +1 -1
- package/dist/components/avatar/AvatarFallback/AvatarFallback.js +10 -5
- package/dist/components/avatar/AvatarFallback/AvatarFallback.js.map +1 -1
- package/dist/components/avatar/AvatarGroup/AvatarGroup.js +8 -3
- package/dist/components/avatar/AvatarGroup/AvatarGroup.js.map +1 -1
- package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js +8 -3
- package/dist/components/avatar/AvatarGroupCount/AvatarGroupCount.js.map +1 -1
- package/dist/components/avatar/AvatarImage/AvatarImage.js +19 -12
- package/dist/components/avatar/AvatarImage/AvatarImage.js.map +1 -1
- package/dist/components/badge/Badge.js +9 -4
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js +8 -3
- package/dist/components/breadcrumb/BreadcrumbEllipsis/BreadcrumbEllipsis.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js +8 -3
- package/dist/components/breadcrumb/BreadcrumbItem/BreadcrumbItem.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js +3 -0
- package/dist/components/breadcrumb/BreadcrumbLink/BreadcrumbLink.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js +8 -3
- package/dist/components/breadcrumb/BreadcrumbList/BreadcrumbList.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js +8 -3
- package/dist/components/breadcrumb/BreadcrumbPage/BreadcrumbPage.js.map +1 -1
- package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js +8 -3
- package/dist/components/breadcrumb/BreadcrumbSeparator/BreadcrumbSeparator.js.map +1 -1
- package/dist/components/bubble/BubbleContent/BubbleContent.js +21 -10
- package/dist/components/bubble/BubbleContent/BubbleContent.js.map +1 -1
- package/dist/components/button/Button.js +3 -0
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/button-group/ButtonGroup/ButtonGroup.js +3 -0
- package/dist/components/button-group/ButtonGroup/ButtonGroup.js.map +1 -1
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js +16 -7
- package/dist/components/button-group/ButtonGroupText/ButtonGroupText.js.map +1 -1
- package/dist/components/calendar/Calendar/Calendar.d.ts +2 -3
- package/dist/components/calendar/Calendar/Calendar.js +89 -264
- package/dist/components/calendar/Calendar/Calendar.js.map +1 -1
- package/dist/components/calendar/Calendar/Calendar.options.d.ts +43 -0
- package/dist/components/calendar/Calendar/Calendar.options.js +38 -0
- package/dist/components/calendar/Calendar/Calendar.options.js.map +1 -0
- package/dist/components/calendar/Calendar/Calendar.selection.d.ts +16 -0
- package/dist/components/calendar/Calendar/Calendar.selection.js +50 -0
- package/dist/components/calendar/Calendar/Calendar.selection.js.map +1 -0
- package/dist/components/calendar/Calendar/Calendar.styles.d.ts +8 -0
- package/dist/components/calendar/Calendar/Calendar.styles.js +32 -0
- package/dist/components/calendar/Calendar/Calendar.styles.js.map +1 -0
- package/dist/components/calendar/Calendar/Calendar.utils.d.ts +3 -1
- package/dist/components/calendar/Calendar/Calendar.utils.js +4 -1
- package/dist/components/calendar/Calendar/Calendar.utils.js.map +1 -1
- package/dist/components/calendar/Calendar/CalendarDay.d.ts +28 -0
- package/dist/components/calendar/Calendar/CalendarDay.js +41 -0
- package/dist/components/calendar/Calendar/CalendarDay.js.map +1 -0
- package/dist/components/calendar/Calendar/CalendarMonth.d.ts +35 -0
- package/dist/components/calendar/Calendar/CalendarMonth.js +127 -0
- package/dist/components/calendar/Calendar/CalendarMonth.js.map +1 -0
- package/dist/components/calendar/Calendar/CalendarMonthCaption.d.ts +22 -0
- package/dist/components/calendar/Calendar/CalendarMonthCaption.js +103 -0
- package/dist/components/calendar/Calendar/CalendarMonthCaption.js.map +1 -0
- package/dist/components/calendar/index.js +3 -2
- package/dist/components/card/Card/Card.js +3 -0
- package/dist/components/card/Card/Card.js.map +1 -1
- package/dist/components/card/CardAction/CardAction.js +8 -3
- package/dist/components/card/CardAction/CardAction.js.map +1 -1
- package/dist/components/card/CardContent/CardContent.js +8 -3
- package/dist/components/card/CardContent/CardContent.js.map +1 -1
- package/dist/components/card/CardDescription/CardDescription.js +8 -3
- package/dist/components/card/CardDescription/CardDescription.js.map +1 -1
- package/dist/components/card/CardFooter/CardFooter.js +8 -3
- package/dist/components/card/CardFooter/CardFooter.js.map +1 -1
- package/dist/components/card/CardHeader/CardHeader.js +8 -3
- package/dist/components/card/CardHeader/CardHeader.js.map +1 -1
- package/dist/components/card/CardTitle/CardTitle.js +8 -3
- package/dist/components/card/CardTitle/CardTitle.js.map +1 -1
- package/dist/components/carousel/Carousel/Carousel.context.js +1 -1
- package/dist/components/carousel/Carousel/Carousel.context.js.map +1 -1
- package/dist/components/carousel/Carousel/Carousel.js +19 -12
- package/dist/components/carousel/Carousel/Carousel.js.map +1 -1
- package/dist/components/carousel/Carousel/useKeyboardNavigation.d.ts +11 -1
- package/dist/components/carousel/Carousel/useKeyboardNavigation.js +5 -4
- package/dist/components/carousel/Carousel/useKeyboardNavigation.js.map +1 -1
- package/dist/components/carousel/CarouselContent/CarouselContent.js +8 -3
- package/dist/components/carousel/CarouselContent/CarouselContent.js.map +1 -1
- package/dist/components/carousel/CarouselNext/CarouselNext.js +29 -16
- package/dist/components/carousel/CarouselNext/CarouselNext.js.map +1 -1
- package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js +29 -16
- package/dist/components/carousel/CarouselPrevious/CarouselPrevious.js.map +1 -1
- package/dist/components/checkbox/Checkbox/Checkbox.js +32 -25
- package/dist/components/checkbox/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/collapsible/Collapsible/Collapsible.context.js +1 -1
- package/dist/components/collapsible/Collapsible/Collapsible.context.js.map +1 -1
- package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js +13 -12
- package/dist/components/collapsible/CollapsibleTrigger/CollapsibleTrigger.js.map +1 -1
- package/dist/components/combobox/Combobox/Combobox.js +52 -52
- package/dist/components/combobox/Combobox/Combobox.js.map +1 -1
- package/dist/components/combobox/Combobox/Combobox.types.d.ts +15 -6
- package/dist/components/combobox/ComboboxChipsInput/ComboboxChipsInput.js +7 -3
- package/dist/components/combobox/ComboboxChipsInput/ComboboxChipsInput.js.map +1 -1
- package/dist/components/combobox/ComboboxClear/ComboboxClear.js +1 -1
- package/dist/components/combobox/ComboboxClear/ComboboxClear.js.map +1 -1
- package/dist/components/combobox/ComboboxInput/ComboboxInput.js +26 -10
- package/dist/components/combobox/ComboboxInput/ComboboxInput.js.map +1 -1
- package/dist/components/combobox/ComboboxItem/ComboboxItem.js +6 -5
- package/dist/components/combobox/ComboboxItem/ComboboxItem.js.map +1 -1
- package/dist/components/combobox/ComboboxList/ComboboxList.js +17 -11
- package/dist/components/combobox/ComboboxList/ComboboxList.js.map +1 -1
- package/dist/components/combobox/ComboboxTrigger/ComboboxTrigger.js +8 -1
- package/dist/components/combobox/ComboboxTrigger/ComboboxTrigger.js.map +1 -1
- package/dist/components/context-menu/ContextMenu/ContextMenu.js +10 -8
- package/dist/components/context-menu/ContextMenu/ContextMenu.js.map +1 -1
- package/dist/components/context-menu/ContextMenuContent/context-menu.highlight.d.ts +33 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.highlight.js +41 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.highlight.js.map +1 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.popup-items.d.ts +25 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.popup-items.js +20 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.popup-items.js.map +1 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.positioner.d.ts +31 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.positioner.js +39 -0
- package/dist/components/context-menu/ContextMenuContent/context-menu.positioner.js.map +1 -0
- package/dist/components/context-menu/ContextMenuContent/useContextMenuContent.js +70 -136
- package/dist/components/context-menu/ContextMenuContent/useContextMenuContent.js.map +1 -1
- package/dist/components/context-menu/ContextMenuSub/ContextMenuSub.js +2 -1
- package/dist/components/context-menu/ContextMenuSub/ContextMenuSub.js.map +1 -1
- package/dist/components/context-menu/ContextMenuTrigger/ContextMenuTrigger.js +20 -10
- package/dist/components/context-menu/ContextMenuTrigger/ContextMenuTrigger.js.map +1 -1
- package/dist/components/context-menu/ContextMenuTrigger/context-menu.long-press.d.ts +24 -0
- package/dist/components/context-menu/ContextMenuTrigger/context-menu.long-press.js +26 -0
- package/dist/components/context-menu/ContextMenuTrigger/context-menu.long-press.js.map +1 -0
- package/dist/components/context-menu/ContextMenuTrigger/context-menu.trigger.utils.d.ts +35 -0
- package/dist/components/context-menu/ContextMenuTrigger/context-menu.trigger.utils.js +17 -0
- package/dist/components/context-menu/ContextMenuTrigger/context-menu.trigger.utils.js.map +1 -0
- package/dist/components/context-menu/ContextMenuTrigger/useContextMenuTrigger.d.ts +9 -11
- package/dist/components/context-menu/ContextMenuTrigger/useContextMenuTrigger.js +36 -33
- package/dist/components/context-menu/ContextMenuTrigger/useContextMenuTrigger.js.map +1 -1
- package/dist/components/context-menu/context-menu.keyboard.d.ts +29 -0
- package/dist/components/context-menu/context-menu.keyboard.js +52 -0
- package/dist/components/context-menu/context-menu.keyboard.js.map +1 -0
- package/dist/components/context-menu/context-menu.typeahead.d.ts +27 -0
- package/dist/components/context-menu/context-menu.typeahead.js +19 -0
- package/dist/components/context-menu/context-menu.typeahead.js.map +1 -0
- package/dist/components/context-menu/context-menu.utils.d.ts +5 -2
- package/dist/components/context-menu/context-menu.utils.js +17 -39
- package/dist/components/context-menu/context-menu.utils.js.map +1 -1
- package/dist/components/date-picker/DatePicker/DatePicker.js +6 -0
- package/dist/components/date-picker/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/dialog/Dialog/Dialog.context.js +1 -1
- package/dist/components/dialog/Dialog/Dialog.context.js.map +1 -1
- package/dist/components/dialog/Dialog/Dialog.js +24 -15
- package/dist/components/dialog/Dialog/Dialog.js.map +1 -1
- package/dist/components/dialog/Dialog/Dialog.types.d.ts +5 -0
- package/dist/components/dialog/DialogClose/DialogClose.js +20 -19
- package/dist/components/dialog/DialogClose/DialogClose.js.map +1 -1
- package/dist/components/dialog/DialogContent/DialogContent.context.js +1 -1
- package/dist/components/dialog/DialogContent/DialogContent.context.js.map +1 -1
- package/dist/components/dialog/DialogDescription/DialogDescription.js +8 -3
- package/dist/components/dialog/DialogDescription/DialogDescription.js.map +1 -1
- package/dist/components/dialog/DialogFooter/DialogFooter.js +8 -3
- package/dist/components/dialog/DialogFooter/DialogFooter.js.map +1 -1
- package/dist/components/dialog/DialogHeader/DialogHeader.js +8 -3
- package/dist/components/dialog/DialogHeader/DialogHeader.js.map +1 -1
- package/dist/components/dialog/DialogOverlay/DialogOverlay.js +3 -0
- package/dist/components/dialog/DialogOverlay/DialogOverlay.js.map +1 -1
- package/dist/components/dialog/DialogSurface/DialogSurface.js +34 -26
- package/dist/components/dialog/DialogSurface/DialogSurface.js.map +1 -1
- package/dist/components/dialog/DialogTitle/DialogTitle.js +8 -3
- package/dist/components/dialog/DialogTitle/DialogTitle.js.map +1 -1
- package/dist/components/drawer/Drawer/Drawer.js +1 -1
- package/dist/components/drawer/Drawer/Drawer.js.map +1 -1
- package/dist/components/drawer/Drawer/create-change-event-details.js +4 -20
- package/dist/components/drawer/Drawer/create-change-event-details.js.map +1 -1
- package/dist/components/drawer/DrawerContent/drawer-swipe.utils.d.ts +32 -0
- package/dist/components/drawer/DrawerContent/drawer-swipe.utils.js +36 -0
- package/dist/components/drawer/DrawerContent/drawer-swipe.utils.js.map +1 -0
- package/dist/components/drawer/DrawerContent/useDrawerSwipe.d.ts +3 -0
- package/dist/components/drawer/DrawerContent/useDrawerSwipe.js +22 -42
- package/dist/components/drawer/DrawerContent/useDrawerSwipe.js.map +1 -1
- package/dist/components/drawer/DrawerOverlay/DrawerOverlay.js +1 -1
- package/dist/components/drawer/DrawerOverlay/DrawerOverlay.js.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenuTrigger/DropdownMenuTrigger.js +7 -7
- package/dist/components/dropdown-menu/DropdownMenuTrigger/DropdownMenuTrigger.js.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenuTrigger/useDropdownMenuTrigger.d.ts +7 -1
- package/dist/components/dropdown-menu/DropdownMenuTrigger/useDropdownMenuTrigger.js +10 -10
- package/dist/components/dropdown-menu/DropdownMenuTrigger/useDropdownMenuTrigger.js.map +1 -1
- package/dist/components/field/Field/Field.js +3 -0
- package/dist/components/field/Field/Field.js.map +1 -1
- package/dist/components/field/FieldContent/FieldContent.js +8 -3
- package/dist/components/field/FieldContent/FieldContent.js.map +1 -1
- package/dist/components/field/FieldDescription/FieldDescription.js +8 -3
- package/dist/components/field/FieldDescription/FieldDescription.js.map +1 -1
- package/dist/components/field/FieldError/FieldError.js +8 -3
- package/dist/components/field/FieldError/FieldError.js.map +1 -1
- package/dist/components/field/FieldGroup/FieldGroup.js +8 -3
- package/dist/components/field/FieldGroup/FieldGroup.js.map +1 -1
- package/dist/components/field/FieldLabel/FieldLabel.js +3 -0
- package/dist/components/field/FieldLabel/FieldLabel.js.map +1 -1
- package/dist/components/field/FieldLegend/FieldLegend.js +3 -0
- package/dist/components/field/FieldLegend/FieldLegend.js.map +1 -1
- package/dist/components/field/FieldSeparator/FieldSeparator.js +3 -0
- package/dist/components/field/FieldSeparator/FieldSeparator.js.map +1 -1
- package/dist/components/field/FieldSet/FieldSet.js +8 -3
- package/dist/components/field/FieldSet/FieldSet.js.map +1 -1
- package/dist/components/field/FieldTitle/FieldTitle.js +8 -3
- package/dist/components/field/FieldTitle/FieldTitle.js.map +1 -1
- package/dist/components/image/Image.utils.d.ts +14 -16
- package/dist/components/image/Image.utils.js +146 -190
- package/dist/components/image/Image.utils.js.map +1 -1
- package/dist/components/image/ImageElement.js +31 -27
- package/dist/components/image/ImageElement.js.map +1 -1
- package/dist/components/image/lib/blur.d.ts +31 -0
- package/dist/components/image/lib/blur.js +24 -0
- package/dist/components/image/lib/blur.js.map +1 -0
- package/dist/components/image/lib/dev-checks.d.ts +52 -0
- package/dist/components/image/lib/handle-loading.d.ts +13 -0
- package/dist/components/image/lib/handle-loading.js +20 -0
- package/dist/components/image/lib/handle-loading.js.map +1 -0
- package/dist/components/image/lib/loader.d.ts +39 -0
- package/dist/components/image/lib/loader.js +57 -0
- package/dist/components/image/lib/loader.js.map +1 -0
- package/dist/components/image/lib/static-import.d.ts +14 -0
- package/dist/components/image/lib/static-import.js +17 -0
- package/dist/components/image/lib/static-import.js.map +1 -0
- package/dist/components/input-group/InputGroup/InputGroup.js +8 -3
- package/dist/components/input-group/InputGroup/InputGroup.js.map +1 -1
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js +3 -0
- package/dist/components/input-group/InputGroupAddon/InputGroupAddon.js.map +1 -1
- package/dist/components/input-group/InputGroupButton/InputGroupButton.js +3 -0
- package/dist/components/input-group/InputGroupButton/InputGroupButton.js.map +1 -1
- package/dist/components/input-group/InputGroupInput/InputGroupInput.js +3 -0
- package/dist/components/input-group/InputGroupInput/InputGroupInput.js.map +1 -1
- package/dist/components/input-group/InputGroupText/InputGroupText.js +8 -3
- package/dist/components/input-group/InputGroupText/InputGroupText.js.map +1 -1
- package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js +3 -0
- package/dist/components/input-group/InputGroupTextarea/InputGroupTextarea.js.map +1 -1
- package/dist/components/item/Item/Item.js +9 -0
- package/dist/components/item/Item/Item.js.map +1 -1
- package/dist/components/item/ItemActions/ItemActions.js +8 -3
- package/dist/components/item/ItemActions/ItemActions.js.map +1 -1
- package/dist/components/item/ItemContent/ItemContent.js +8 -3
- package/dist/components/item/ItemContent/ItemContent.js.map +1 -1
- package/dist/components/item/ItemDescription/ItemDescription.js +8 -3
- package/dist/components/item/ItemDescription/ItemDescription.js.map +1 -1
- package/dist/components/item/ItemFooter/ItemFooter.js +8 -3
- package/dist/components/item/ItemFooter/ItemFooter.js.map +1 -1
- package/dist/components/item/ItemGroup/ItemGroup.js +8 -3
- package/dist/components/item/ItemGroup/ItemGroup.js.map +1 -1
- package/dist/components/item/ItemHeader/ItemHeader.js +8 -3
- package/dist/components/item/ItemHeader/ItemHeader.js.map +1 -1
- package/dist/components/item/ItemMedia/ItemMedia.js +3 -0
- package/dist/components/item/ItemMedia/ItemMedia.js.map +1 -1
- package/dist/components/item/ItemSeparator/ItemSeparator.js +3 -0
- package/dist/components/item/ItemSeparator/ItemSeparator.js.map +1 -1
- package/dist/components/item/ItemTitle/ItemTitle.js +8 -3
- package/dist/components/item/ItemTitle/ItemTitle.js.map +1 -1
- package/dist/components/kbd/Kbd.js +16 -6
- package/dist/components/kbd/Kbd.js.map +1 -1
- package/dist/components/label/Label.js +3 -0
- package/dist/components/label/Label.js.map +1 -1
- package/dist/components/marker/Marker/Marker.styles.d.ts +1 -1
- package/dist/components/message-scroller/message-scroller.anchoring.d.ts +60 -0
- package/dist/components/message-scroller/message-scroller.anchoring.js +139 -0
- package/dist/components/message-scroller/message-scroller.anchoring.js.map +1 -0
- package/dist/components/message-scroller/message-scroller.anchors.d.ts +12 -0
- package/dist/components/message-scroller/message-scroller.anchors.js +23 -0
- package/dist/components/message-scroller/message-scroller.anchors.js.map +1 -0
- package/dist/components/message-scroller/message-scroller.commands.d.ts +43 -0
- package/dist/components/message-scroller/message-scroller.commands.js +51 -0
- package/dist/components/message-scroller/message-scroller.commands.js.map +1 -0
- package/dist/components/message-scroller/message-scroller.dom-measure.d.ts +29 -0
- package/dist/components/message-scroller/message-scroller.dom-measure.js +37 -0
- package/dist/components/message-scroller/message-scroller.dom-measure.js.map +1 -0
- package/dist/components/message-scroller/message-scroller.measure.d.ts +27 -0
- package/dist/components/message-scroller/message-scroller.measure.js +21 -0
- package/dist/components/message-scroller/message-scroller.measure.js.map +1 -0
- package/dist/components/message-scroller/message-scroller.scroll-state.d.ts +54 -0
- package/dist/components/message-scroller/message-scroller.scroll-state.js +74 -0
- package/dist/components/message-scroller/message-scroller.scroll-state.js.map +1 -0
- package/dist/components/message-scroller/message-scroller.scroll-target.d.ts +27 -0
- package/dist/components/message-scroller/message-scroller.scroll-target.js +33 -0
- package/dist/components/message-scroller/message-scroller.scroll-target.js.map +1 -0
- package/dist/components/message-scroller/message-scroller.utils.d.ts +7 -0
- package/dist/components/message-scroller/message-scroller.utils.js +3 -2
- package/dist/components/message-scroller/message-scroller.utils.js.map +1 -1
- package/dist/components/message-scroller/message-scroller.visibility.d.ts +43 -0
- package/dist/components/message-scroller/message-scroller.visibility.js +82 -0
- package/dist/components/message-scroller/message-scroller.visibility.js.map +1 -0
- package/dist/components/message-scroller/useMessageScrollerEngine.js +87 -337
- package/dist/components/message-scroller/useMessageScrollerEngine.js.map +1 -1
- package/dist/components/number-input/NumberInput/NumberInput.js +21 -19
- package/dist/components/number-input/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/number-input/NumberInput/NumberInput.utils.d.ts +6 -2
- package/dist/components/number-input/NumberInput/NumberInput.utils.js +1 -3
- package/dist/components/number-input/NumberInput/NumberInput.utils.js.map +1 -1
- package/dist/components/number-input/NumberInput/create-change-event-details.d.ts +1 -2
- package/dist/components/number-input/NumberInput/create-change-event-details.js +4 -20
- package/dist/components/number-input/NumberInput/create-change-event-details.js.map +1 -1
- package/dist/components/pagination/Pagination/Pagination.js +8 -3
- package/dist/components/pagination/Pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/PaginationContent/PaginationContent.js +8 -3
- package/dist/components/pagination/PaginationContent/PaginationContent.js.map +1 -1
- package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js +8 -3
- package/dist/components/pagination/PaginationEllipsis/PaginationEllipsis.js.map +1 -1
- package/dist/components/pagination/PaginationLink/PaginationLink.js +3 -0
- package/dist/components/pagination/PaginationLink/PaginationLink.js.map +1 -1
- package/dist/components/pagination/PaginationNext/PaginationNext.js +3 -0
- package/dist/components/pagination/PaginationNext/PaginationNext.js.map +1 -1
- package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js +3 -0
- package/dist/components/pagination/PaginationPrevious/PaginationPrevious.js.map +1 -1
- package/dist/components/popover/PopoverContent/PopoverContent.js +3 -0
- package/dist/components/popover/PopoverContent/PopoverContent.js.map +1 -1
- package/dist/components/progress/Progress/Progress.context.js +1 -1
- package/dist/components/progress/Progress/Progress.context.js.map +1 -1
- package/dist/components/progress/Progress/Progress.js +3 -0
- package/dist/components/progress/Progress/Progress.js.map +1 -1
- package/dist/components/progress/ProgressIndicator/ProgressIndicator.js +3 -0
- package/dist/components/progress/ProgressIndicator/ProgressIndicator.js.map +1 -1
- package/dist/components/progress/ProgressLabel/ProgressLabel.js +8 -3
- package/dist/components/progress/ProgressLabel/ProgressLabel.js.map +1 -1
- package/dist/components/progress/ProgressTrack/ProgressTrack.js +3 -0
- package/dist/components/progress/ProgressTrack/ProgressTrack.js.map +1 -1
- package/dist/components/progress/ProgressValue/ProgressValue.js +8 -3
- package/dist/components/progress/ProgressValue/ProgressValue.js.map +1 -1
- package/dist/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.d.ts +48 -0
- package/dist/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.js +23 -0
- package/dist/components/questionnaire/QuestionnaireChoice/questionnaire-choice.utils.js.map +1 -0
- package/dist/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.js +62 -49
- package/dist/components/questionnaire/QuestionnaireChoice/useQuestionnaireChoice.js.map +1 -1
- package/dist/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.js +4 -1
- package/dist/components/questionnaire/QuestionnaireInput/useQuestionnaireInput.js.map +1 -1
- package/dist/components/questionnaire/QuestionnaireItem/QuestionnaireItem.js +1 -2
- package/dist/components/questionnaire/QuestionnaireItem/QuestionnaireItem.js.map +1 -1
- package/dist/components/questionnaire/questionnaire.answers.d.ts +42 -0
- package/dist/components/questionnaire/questionnaire.answers.js +62 -0
- package/dist/components/questionnaire/questionnaire.answers.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.aria.d.ts +34 -0
- package/dist/components/questionnaire/questionnaire.aria.js +28 -0
- package/dist/components/questionnaire/questionnaire.aria.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.dom-watch.d.ts +9 -0
- package/dist/components/questionnaire/questionnaire.dom-watch.js +18 -0
- package/dist/components/questionnaire/questionnaire.dom-watch.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.focus.d.ts +26 -0
- package/dist/components/questionnaire/questionnaire.focus.js +19 -0
- package/dist/components/questionnaire/questionnaire.focus.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.item-view.d.ts +50 -0
- package/dist/components/questionnaire/questionnaire.item-view.js +36 -0
- package/dist/components/questionnaire/questionnaire.item-view.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.keys.d.ts +29 -0
- package/dist/components/questionnaire/questionnaire.keys.js +34 -0
- package/dist/components/questionnaire/questionnaire.keys.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.registry.d.ts +21 -0
- package/dist/components/questionnaire/questionnaire.registry.js +15 -0
- package/dist/components/questionnaire/questionnaire.registry.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.shortcuts.d.ts +24 -0
- package/dist/components/questionnaire/questionnaire.shortcuts.js +31 -0
- package/dist/components/questionnaire/questionnaire.shortcuts.js.map +1 -0
- package/dist/components/questionnaire/questionnaire.utils.d.ts +17 -1
- package/dist/components/questionnaire/questionnaire.utils.js +5 -2
- package/dist/components/questionnaire/questionnaire.utils.js.map +1 -1
- package/dist/components/questionnaire/questionnaire.validation.d.ts +43 -0
- package/dist/components/questionnaire/questionnaire.validation.js +17 -0
- package/dist/components/questionnaire/questionnaire.validation.js.map +1 -0
- package/dist/components/questionnaire/useQuestionnaireItem.d.ts +0 -2
- package/dist/components/questionnaire/useQuestionnaireItem.js +83 -121
- package/dist/components/questionnaire/useQuestionnaireItem.js.map +1 -1
- package/dist/components/questionnaire/useQuestionnaireRoot.js +78 -99
- package/dist/components/questionnaire/useQuestionnaireRoot.js.map +1 -1
- package/dist/components/radio-group/RadioGroup/RadioGroup.js +3 -0
- package/dist/components/radio-group/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js +3 -0
- package/dist/components/radio-group/RadioGroupItem/RadioGroupItem.js.map +1 -1
- package/dist/components/resizable/ResizableHandle/resizable.handle-drag.d.ts +37 -0
- package/dist/components/resizable/ResizableHandle/resizable.handle-drag.js +37 -0
- package/dist/components/resizable/ResizableHandle/resizable.handle-drag.js.map +1 -0
- package/dist/components/resizable/ResizableHandle/resizable.handle-keys.d.ts +24 -0
- package/dist/components/resizable/ResizableHandle/resizable.handle-keys.js +36 -0
- package/dist/components/resizable/ResizableHandle/resizable.handle-keys.js.map +1 -0
- package/dist/components/resizable/ResizableHandle/useResizableHandle.d.ts +3 -4
- package/dist/components/resizable/ResizableHandle/useResizableHandle.js +30 -63
- package/dist/components/resizable/ResizableHandle/useResizableHandle.js.map +1 -1
- package/dist/components/resizable/ResizablePanel/ResizablePanel.d.ts +4 -2
- package/dist/components/resizable/ResizablePanel/ResizablePanel.js +23 -50
- package/dist/components/resizable/ResizablePanel/ResizablePanel.js.map +1 -1
- package/dist/components/resizable/ResizablePanel/useResizablePanel.d.ts +30 -0
- package/dist/components/resizable/ResizablePanel/useResizablePanel.js +37 -0
- package/dist/components/resizable/ResizablePanel/useResizablePanel.js.map +1 -0
- package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.d.ts +4 -1
- package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.js +10 -17
- package/dist/components/resizable/ResizablePanelGroup/ResizablePanelGroup.js.map +1 -1
- package/dist/components/resizable/ResizablePanelGroup/useDragCursor.d.ts +11 -0
- package/dist/components/resizable/ResizablePanelGroup/useDragCursor.js +17 -0
- package/dist/components/resizable/ResizablePanelGroup/useDragCursor.js.map +1 -0
- package/dist/components/resizable/resizable.collapse.d.ts +27 -0
- package/dist/components/resizable/resizable.collapse.js +24 -0
- package/dist/components/resizable/resizable.collapse.js.map +1 -0
- package/dist/components/resizable/resizable.commands.d.ts +32 -0
- package/dist/components/resizable/resizable.commands.js +40 -0
- package/dist/components/resizable/resizable.commands.js.map +1 -0
- package/dist/components/resizable/resizable.constraints.d.ts +23 -0
- package/dist/components/resizable/resizable.constraints.js +32 -0
- package/dist/components/resizable/resizable.constraints.js.map +1 -0
- package/dist/components/resizable/resizable.lifecycle.d.ts +35 -0
- package/dist/components/resizable/resizable.lifecycle.js +32 -0
- package/dist/components/resizable/resizable.lifecycle.js.map +1 -0
- package/dist/components/resizable/resizable.registry.d.ts +31 -0
- package/dist/components/resizable/resizable.registry.js +38 -0
- package/dist/components/resizable/resizable.registry.js.map +1 -0
- package/dist/components/resizable/resizable.reporting.d.ts +36 -0
- package/dist/components/resizable/resizable.reporting.js +33 -0
- package/dist/components/resizable/resizable.reporting.js.map +1 -0
- package/dist/components/resizable/resizable.resize.d.ts +47 -0
- package/dist/components/resizable/resizable.resize.js +28 -0
- package/dist/components/resizable/resizable.resize.js.map +1 -0
- package/dist/components/resizable/resizable.sizes.d.ts +31 -0
- package/dist/components/resizable/resizable.sizes.js +46 -0
- package/dist/components/resizable/resizable.sizes.js.map +1 -0
- package/dist/components/resizable/resizable.storage.d.ts +17 -0
- package/dist/components/resizable/resizable.storage.js +29 -0
- package/dist/components/resizable/resizable.storage.js.map +1 -0
- package/dist/components/resizable/resizable.utils.d.ts +10 -3
- package/dist/components/resizable/resizable.utils.js +16 -10
- package/dist/components/resizable/resizable.utils.js.map +1 -1
- package/dist/components/resizable/useResizablePanelGroup.js +62 -164
- package/dist/components/resizable/useResizablePanelGroup.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.context.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.d.ts +9 -0
- package/dist/components/scroll-area/ScrollArea/ScrollArea.js +28 -39
- package/dist/components/scroll-area/ScrollArea/ScrollArea.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js +3 -3
- package/dist/components/scroll-area/ScrollArea/ScrollArea.utils.js.map +1 -1
- package/dist/components/scroll-area/ScrollArea/useScrollAreaMetrics.d.ts +22 -0
- package/dist/components/scroll-area/ScrollArea/useScrollAreaMetrics.js +34 -0
- package/dist/components/scroll-area/ScrollArea/useScrollAreaMetrics.js.map +1 -0
- package/dist/components/scroll-area/ScrollBar/ScrollBar.d.ts +8 -0
- package/dist/components/scroll-area/ScrollBar/ScrollBar.js +38 -71
- package/dist/components/scroll-area/ScrollBar/ScrollBar.js.map +1 -1
- package/dist/components/scroll-area/ScrollBar/ScrollBar.utils.d.ts +56 -0
- package/dist/components/scroll-area/ScrollBar/ScrollBar.utils.js +61 -0
- package/dist/components/scroll-area/ScrollBar/ScrollBar.utils.js.map +1 -0
- package/dist/components/scroll-area/ScrollBar/scroll-bar.thumb-drag.d.ts +25 -0
- package/dist/components/scroll-area/ScrollBar/scroll-bar.thumb-drag.js +26 -0
- package/dist/components/scroll-area/ScrollBar/scroll-bar.thumb-drag.js.map +1 -0
- package/dist/components/scroll-area/ScrollBar/useScrollBarInteraction.d.ts +19 -0
- package/dist/components/scroll-area/ScrollBar/useScrollBarInteraction.js +37 -0
- package/dist/components/scroll-area/ScrollBar/useScrollBarInteraction.js.map +1 -0
- package/dist/components/scroll-arrows/ScrollArrowButton.d.ts +5 -7
- package/dist/components/scroll-arrows/ScrollArrowButton.js +14 -44
- package/dist/components/scroll-arrows/ScrollArrowButton.js.map +1 -1
- package/dist/components/scroll-arrows/ScrollArrows.d.ts +4 -3
- package/dist/components/scroll-arrows/ScrollArrows.js +16 -22
- package/dist/components/scroll-arrows/ScrollArrows.js.map +1 -1
- package/dist/components/scroll-arrows/ScrollArrows.types.d.ts +7 -7
- package/dist/components/scroll-arrows/useHoverScroll.d.ts +29 -0
- package/dist/components/scroll-arrows/useHoverScroll.js +39 -0
- package/dist/components/scroll-arrows/useHoverScroll.js.map +1 -0
- package/dist/components/select/SelectContent/useSelectContent.js +3 -3
- package/dist/components/select/SelectGroup/SelectGroup.d.ts +8 -2
- package/dist/components/select/SelectGroup/SelectGroup.js +20 -6
- package/dist/components/select/SelectGroup/SelectGroup.js.map +1 -1
- package/dist/components/select/SelectGroup/SelectGroup.types.d.ts +9 -0
- package/dist/components/select/SelectGroup/index.d.ts +1 -0
- package/dist/components/select/SelectTrigger/SelectTrigger.js.map +1 -1
- package/dist/components/select/SelectTrigger/useSelectTrigger.js +1 -1
- package/dist/components/select/SelectTrigger/useSelectTrigger.js.map +1 -1
- package/dist/components/separator/Separator.js +3 -0
- package/dist/components/separator/Separator.js.map +1 -1
- package/dist/components/sheet/SheetClose/SheetClose.js +18 -17
- package/dist/components/sheet/SheetClose/SheetClose.js.map +1 -1
- package/dist/components/sidebar/Sidebar/Sidebar.js +14 -6
- package/dist/components/sidebar/Sidebar/Sidebar.js.map +1 -1
- package/dist/components/sidebar/SidebarContent/SidebarContent.js +8 -3
- package/dist/components/sidebar/SidebarContent/SidebarContent.js.map +1 -1
- package/dist/components/sidebar/SidebarFooter/SidebarFooter.js +8 -3
- package/dist/components/sidebar/SidebarFooter/SidebarFooter.js.map +1 -1
- package/dist/components/sidebar/SidebarGroup/SidebarGroup.js +8 -3
- package/dist/components/sidebar/SidebarGroup/SidebarGroup.js.map +1 -1
- package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js +3 -0
- package/dist/components/sidebar/SidebarGroupAction/SidebarGroupAction.js.map +1 -1
- package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js +8 -3
- package/dist/components/sidebar/SidebarGroupContent/SidebarGroupContent.js.map +1 -1
- package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js +3 -0
- package/dist/components/sidebar/SidebarGroupLabel/SidebarGroupLabel.js.map +1 -1
- package/dist/components/sidebar/SidebarHeader/SidebarHeader.js +8 -3
- package/dist/components/sidebar/SidebarHeader/SidebarHeader.js.map +1 -1
- package/dist/components/sidebar/SidebarInput/SidebarInput.js +3 -0
- package/dist/components/sidebar/SidebarInput/SidebarInput.js.map +1 -1
- package/dist/components/sidebar/SidebarInset/SidebarInset.js +8 -3
- package/dist/components/sidebar/SidebarInset/SidebarInset.js.map +1 -1
- package/dist/components/sidebar/SidebarMenu/SidebarMenu.js +8 -3
- package/dist/components/sidebar/SidebarMenu/SidebarMenu.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js +8 -3
- package/dist/components/sidebar/SidebarMenuBadge/SidebarMenuBadge.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js +6 -0
- package/dist/components/sidebar/SidebarMenuButton/SidebarMenuButton.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js +8 -3
- package/dist/components/sidebar/SidebarMenuItem/SidebarMenuItem.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js +8 -3
- package/dist/components/sidebar/SidebarMenuSkeleton/SidebarMenuSkeleton.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js +8 -3
- package/dist/components/sidebar/SidebarMenuSub/SidebarMenuSub.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js +3 -0
- package/dist/components/sidebar/SidebarMenuSubButton/SidebarMenuSubButton.js.map +1 -1
- package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js +8 -3
- package/dist/components/sidebar/SidebarMenuSubItem/SidebarMenuSubItem.js.map +1 -1
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js +1 -1
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.context.js.map +1 -1
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.js +30 -27
- package/dist/components/sidebar/SidebarProvider/SidebarProvider.js.map +1 -1
- package/dist/components/sidebar/SidebarProvider/useIsMobile.d.ts +10 -0
- package/dist/components/sidebar/SidebarProvider/useIsMobile.js +14 -0
- package/dist/components/sidebar/SidebarProvider/useIsMobile.js.map +1 -0
- package/dist/components/sidebar/SidebarRail/SidebarRail.js +8 -3
- package/dist/components/sidebar/SidebarRail/SidebarRail.js.map +1 -1
- package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js +3 -0
- package/dist/components/sidebar/SidebarSeparator/SidebarSeparator.js.map +1 -1
- package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js +3 -0
- package/dist/components/sidebar/SidebarTrigger/SidebarTrigger.js.map +1 -1
- package/dist/components/skeleton/Skeleton.js +8 -3
- package/dist/components/skeleton/Skeleton.js.map +1 -1
- package/dist/components/slider/Slider/Slider.context.js +1 -1
- package/dist/components/slider/Slider/Slider.context.js.map +1 -1
- package/dist/components/slider/Slider/Slider.js +3 -0
- package/dist/components/slider/Slider/Slider.js.map +1 -1
- package/dist/components/slider/SliderControl/SliderControl.js +4 -1
- package/dist/components/slider/SliderControl/SliderControl.js.map +1 -1
- package/dist/components/slider/SliderIndicator/SliderIndicator.js +3 -0
- package/dist/components/slider/SliderIndicator/SliderIndicator.js.map +1 -1
- package/dist/components/slider/SliderThumb/SliderThumb.js +18 -3
- package/dist/components/slider/SliderThumb/SliderThumb.js.map +1 -1
- package/dist/components/slider/SliderThumb/useSliderThumb.d.ts +1 -0
- package/dist/components/slider/SliderThumb/useSliderThumb.js +3 -2
- package/dist/components/slider/SliderThumb/useSliderThumb.js.map +1 -1
- package/dist/components/slider/SliderTrack/SliderTrack.js +3 -0
- package/dist/components/slider/SliderTrack/SliderTrack.js.map +1 -1
- package/dist/components/spinner/Spinner.js +3 -0
- package/dist/components/spinner/Spinner.js.map +1 -1
- package/dist/components/switch/Switch.js +7 -0
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/tabs/Tabs/Tabs.context.js +1 -1
- package/dist/components/tabs/Tabs/Tabs.context.js.map +1 -1
- package/dist/components/tabs/Tabs/useTabsKeyboard.d.ts +7 -11
- package/dist/components/tabs/Tabs/useTabsKeyboard.js +8 -42
- package/dist/components/tabs/Tabs/useTabsKeyboard.js.map +1 -1
- package/dist/components/tabs/TabsList/TabsList.context.js +1 -1
- package/dist/components/tabs/TabsList/TabsList.context.js.map +1 -1
- package/dist/components/tabs/TabsList/TabsList.js +10 -10
- package/dist/components/tabs/TabsList/TabsList.js.map +1 -1
- package/dist/components/tabs/TabsTrigger/TabsTrigger.js +8 -8
- package/dist/components/tabs/TabsTrigger/TabsTrigger.js.map +1 -1
- package/dist/components/textarea/Textarea.js +8 -3
- package/dist/components/textarea/Textarea.js.map +1 -1
- package/dist/components/time-picker/TimePicker/create-change-event-details.d.ts +1 -2
- package/dist/components/time-picker/TimePicker/create-change-event-details.js +4 -20
- package/dist/components/time-picker/TimePicker/create-change-event-details.js.map +1 -1
- package/dist/components/time-picker/TimePickerColumn/TimePickerColumn.js +1 -3
- package/dist/components/time-picker/TimePickerColumn/TimePickerColumn.js.map +1 -1
- package/dist/components/time-picker/TimePickerColumn/time-picker.column-utils.d.ts +34 -0
- package/dist/components/time-picker/TimePickerColumn/time-picker.column-utils.js +43 -0
- package/dist/components/time-picker/TimePickerColumn/time-picker.column-utils.js.map +1 -0
- package/dist/components/time-picker/TimePickerColumn/useTimePickerColumn.js +34 -59
- package/dist/components/time-picker/TimePickerColumn/useTimePickerColumn.js.map +1 -1
- package/dist/components/toast/Toast/Toast.d.ts +8 -2
- package/dist/components/toast/Toast/Toast.js +92 -146
- package/dist/components/toast/Toast/Toast.js.map +1 -1
- package/dist/components/toast/Toast/Toast.types.d.ts +1 -1
- package/dist/components/toast/Toast/Toast.types.js.map +1 -1
- package/dist/components/toast/Toast/Toast.utils.d.ts +47 -0
- package/dist/components/toast/Toast/Toast.utils.js +47 -0
- package/dist/components/toast/Toast/Toast.utils.js.map +1 -0
- package/dist/components/toast/Toast/ToastActionButton.d.ts +16 -0
- package/dist/components/toast/Toast/ToastActionButton.js +27 -0
- package/dist/components/toast/Toast/ToastActionButton.js.map +1 -0
- package/dist/components/toast/Toast/ToastActions.d.ts +12 -0
- package/dist/components/toast/Toast/ToastActions.js +65 -0
- package/dist/components/toast/Toast/ToastActions.js.map +1 -0
- package/dist/components/toast/Toast/ToastCloseButton.d.ts +12 -0
- package/dist/components/toast/Toast/ToastCloseButton.js +26 -0
- package/dist/components/toast/Toast/ToastCloseButton.js.map +1 -0
- package/dist/components/toast/Toast/ToastContent.d.ts +8 -0
- package/dist/components/toast/Toast/ToastContent.js +30 -0
- package/dist/components/toast/Toast/ToastContent.js.map +1 -0
- package/dist/components/toast/Toast/ToastIcon.d.ts +14 -0
- package/dist/components/toast/Toast/ToastIcon.js +36 -0
- package/dist/components/toast/Toast/ToastIcon.js.map +1 -0
- package/dist/components/toast/Toast/useToastLifecycle.d.ts +29 -0
- package/dist/components/toast/Toast/useToastLifecycle.js +30 -0
- package/dist/components/toast/Toast/useToastLifecycle.js.map +1 -0
- package/dist/components/toast/Toaster/ToastViewport.d.ts +33 -0
- package/dist/components/toast/Toaster/ToastViewport.js +73 -0
- package/dist/components/toast/Toaster/ToastViewport.js.map +1 -0
- package/dist/components/toast/Toaster/Toaster.d.ts +4 -0
- package/dist/components/toast/Toaster/Toaster.js +64 -82
- package/dist/components/toast/Toaster/Toaster.js.map +1 -1
- package/dist/components/toast/Toaster/Toaster.utils.d.ts +15 -0
- package/dist/components/toast/Toaster/Toaster.utils.js +4 -1
- package/dist/components/toast/Toaster/Toaster.utils.js.map +1 -1
- package/dist/components/toast/Toaster/useToaster.d.ts +28 -0
- package/dist/components/toast/Toaster/useToaster.js +26 -0
- package/dist/components/toast/Toaster/useToaster.js.map +1 -0
- package/dist/components/toast/index.js +4 -3
- package/dist/components/toast/state/promise-toast.d.ts +17 -0
- package/dist/components/toast/state/promise-toast.js +33 -0
- package/dist/components/toast/state/promise-toast.js.map +1 -0
- package/dist/components/toast/state/store.d.ts +21 -0
- package/dist/components/toast/state/store.js +45 -0
- package/dist/components/toast/state/store.js.map +1 -0
- package/dist/components/toast/state/toast.d.ts +9 -10
- package/dist/components/toast/state/toast.js +30 -89
- package/dist/components/toast/state/toast.js.map +1 -1
- package/dist/components/toggle/Toggle/Toggle.js +2 -1
- package/dist/components/toggle/Toggle/Toggle.js.map +1 -1
- package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js +1 -1
- package/dist/components/toggle-group/ToggleGroup/ToggleGroup.js.map +1 -1
- package/dist/components/toggle-group/ToggleGroup/create-change-event-details.d.ts +6 -2
- package/dist/components/toggle-group/ToggleGroup/create-change-event-details.js +4 -20
- package/dist/components/toggle-group/ToggleGroup/create-change-event-details.js.map +1 -1
- package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.d.ts +7 -10
- package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.js +10 -40
- package/dist/components/toggle-group/ToggleGroup/useToggleGroupKeyboard.js.map +1 -1
- package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js +5 -5
- package/dist/components/toggle-group/ToggleGroupItem/ToggleGroupItem.js.map +1 -1
- package/dist/components/tooltip/TooltipContent/usePresence.d.ts +27 -0
- package/dist/components/tooltip/TooltipContent/usePresence.js +24 -0
- package/dist/components/tooltip/TooltipContent/usePresence.js.map +1 -0
- package/dist/components/tooltip/TooltipContent/useTooltipContent.js +22 -35
- package/dist/components/tooltip/TooltipContent/useTooltipContent.js.map +1 -1
- package/dist/hooks/useFontLoader.js +1 -1
- package/dist/hooks/useFontLoader.js.map +1 -1
- package/dist/hooks/useScrollLock.js +13 -16
- package/dist/hooks/useScrollLock.js.map +1 -1
- package/dist/index.js +328 -320
- package/dist/lib/positioner/index.d.ts +1 -0
- package/dist/lib/positioner/utils/dom.d.ts +8 -0
- package/dist/lib/positioner/utils/dom.js +1 -1
- package/dist/lib/positioner/utils/dom.js.map +1 -1
- package/dist/types/props.types.d.ts +1 -1
- package/dist/ui.css +1 -1
- package/dist/utils/call-event-handler.d.ts +16 -0
- package/dist/utils/call-event-handler.js +15 -0
- package/dist/utils/call-event-handler.js.map +1 -0
- package/dist/utils/clsx.d.ts +1 -1
- package/dist/utils/clsx.js +2 -7
- package/dist/utils/create-change-event-details.d.ts +25 -0
- package/dist/utils/create-change-event-details.js +25 -0
- package/dist/utils/create-change-event-details.js.map +1 -0
- package/dist/utils/get-style.d.ts +7 -9
- package/dist/utils/get-style.js +16 -0
- package/dist/utils/get-style.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.js +7 -1
- package/dist/utils/number.d.ts +7 -0
- package/dist/utils/number.js +8 -0
- package/dist/utils/number.js.map +1 -0
- package/dist/utils/roving-navigation.d.ts +64 -0
- package/dist/utils/roving-navigation.js +66 -0
- package/dist/utils/roving-navigation.js.map +1 -0
- package/dist/utils/string.d.ts +17 -0
- package/dist/utils/string.js +11 -0
- package/dist/utils/string.js.map +1 -0
- package/package.json +18 -7
- package/dist/components/carousel/Carousel/Carousel.utils.d.ts +0 -0
- package/dist/components/field/FieldError/useFieldError.d.ts +0 -0
- package/dist/components/hover-card/hover-card.utils.d.ts +0 -6
- package/dist/components/tabs/Tabs/call-event-handler.d.ts +0 -5
- package/dist/components/tabs/Tabs/call-event-handler.js +0 -9
- package/dist/components/tabs/Tabs/call-event-handler.js.map +0 -1
- package/dist/components/toggle-group/call-event-handler.d.ts +0 -5
- package/dist/components/toggle-group/call-event-handler.js +0 -9
- package/dist/components/toggle-group/call-event-handler.js.map +0 -1
- package/dist/utils/clsx.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizablePanelGroup.js","names":["EPSILON","STORAGE_PREFIX","useResizablePanelGroup","groupElement","setGroupElement","createSignal","dragging","setDragging","store","setStore","createStore","metas","order","initialized","collapsedMemory","orderedMetas","element","meta","effMin","isCollapsedSize","size","storageOf","options","storageKey","id","layout","result","roundPercent","persist","key","storage","next","notify","commit","readSaved","raw","parsed","bounds","reportResize","newSize","was","oldSize","now","applySizes","list","before","produce","value","values","index","report","buildInitial","saved","fromLayout","defined","unknown","used","acc","remaining","fill","initialize","normalizeSizes","scheduleInitialize","registerPanel","item","draft","adjacentOf","prevEl","handleEl","nextEl","prev","prevSize","applyPair","lo","total","hi","clamp","targetPrev","rest","prevOld","nextOld","setAdjacentSize","adjacent","targetPrevSize","nudgeAdjacent","deltaPercent","collapsePanel","current","applyPanelTarget","expandPanel","remembered","nextElement","prevElement","nextMeta","prevMeta","targetSize"],"sources":["../../../src/components/resizable/useResizablePanelGroup.ts"],"sourcesContent":["import { createSignal, type Accessor } from \"solid-js\";\nimport { createStore, produce } from \"solid-js/store\";\nimport type { ResizablePanelGroupContextValue } from \"./resizable.context\";\nimport type {\n ResizableLayout,\n ResizableOrientation,\n ResizablePanelMeta,\n} from \"./resizable.types\";\nimport { clamp, normalizeSizes, roundPercent } from \"./resizable.utils\";\n\nconst EPSILON = 0.001;\nconst STORAGE_PREFIX = \"neut-resizable:\";\n\ninterface Options {\n orientation: Accessor<ResizableOrientation>;\n defaultLayout: Accessor<ResizableLayout | undefined>;\n onLayoutChange: (layout: ResizableLayout) => void;\n autoSaveId: Accessor<string | undefined>;\n storage: Accessor<Storage | undefined>;\n keyboardResizeBy: Accessor<number>;\n}\n\n/**\n * Resizable 的布局引擎(对齐 react-resizable-panels v4 的核心语义,但按 Solid 重写):\n * - 尺寸用**百分比权重**存在 store 里,渲染时映射为 `flex-grow`,拖拽只更新相邻两个\n * panel 的两个键,子节点不重渲染(细粒度更新);\n * - panel 在挂载时注册(顺序即 DOM 顺序),handle 通过相邻兄弟节点解析前后 panel;\n * - 约束/min/max/collapsible 吸附、归一化到 100、以及命令式 collapse/expand;\n * - 拖拽用 pointer capture,pointermove 由调用方用 rAF 合并,避免高频写 store;\n * - autoSaveId + storage 做布局持久化。\n */\nexport function useResizablePanelGroup(\n options: Options,\n): ResizablePanelGroupContextValue {\n const [groupElement, setGroupElement] = createSignal<HTMLElement>();\n const [dragging, setDragging] = createSignal(false);\n const [store, setStore] = createStore<Record<string, number>>({});\n\n const metas = new Map<HTMLElement, ResizablePanelMeta>();\n let order: HTMLElement[] = [];\n let initialized = false;\n const collapsedMemory = new Map<string, number>();\n\n const orderedMetas = (): ResizablePanelMeta[] =>\n order\n .map((element) => metas.get(element))\n .filter((meta): meta is ResizablePanelMeta => !!meta);\n\n /** 可折叠时为 collapsedSize,否则为 minSize(即拖拽能到的最小值) */\n const effMin = (meta: ResizablePanelMeta) =>\n meta.collapsible() ? meta.collapsedSize() : meta.minSize();\n\n const isCollapsedSize = (meta: ResizablePanelMeta, size: number) =>\n meta.collapsible() && size <= meta.collapsedSize() + EPSILON;\n\n const storageOf = (): Storage | undefined =>\n options.storage() ??\n (typeof localStorage !== \"undefined\" ? localStorage : undefined);\n\n const storageKey = (): string | undefined => {\n const id = options.autoSaveId();\n return id ? `${STORAGE_PREFIX}${id}` : undefined;\n };\n\n const layout = (): ResizableLayout => {\n const result: ResizableLayout = {};\n for (const meta of orderedMetas()) {\n result[meta.id] = roundPercent(store[meta.id] ?? 0);\n }\n return result;\n };\n\n const persist = (next: ResizableLayout) => {\n const key = storageKey();\n const storage = storageOf();\n if (!key || !storage) return;\n try {\n storage.setItem(key, JSON.stringify(next));\n } catch {\n // 隐私模式等场景下忽略持久化失败\n }\n };\n\n /** 只通知布局变化(拖拽的每一帧),不写 storage */\n const notify = () => options.onLayoutChange(layout());\n\n /** 通知 + 持久化(离散操作与拖拽结束) */\n const commit = () => {\n const next = layout();\n options.onLayoutChange(next);\n persist(next);\n };\n\n const readSaved = (): ResizableLayout | undefined => {\n const key = storageKey();\n const storage = storageOf();\n if (!key || !storage) return undefined;\n try {\n const raw = storage.getItem(key);\n if (!raw) return undefined;\n const parsed = JSON.parse(raw) as unknown;\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as ResizableLayout)\n : undefined;\n } catch {\n return undefined;\n }\n };\n\n const bounds = () =>\n orderedMetas().map((meta) => ({\n min: effMin(meta),\n max: meta.maxSize(),\n }));\n\n const reportResize = (\n meta: ResizablePanelMeta,\n oldSize: number,\n newSize: number,\n ) => {\n meta.onResize?.(roundPercent(newSize));\n if (!meta.collapsible()) return;\n const was = isCollapsedSize(meta, oldSize);\n const now = isCollapsedSize(meta, newSize);\n if (!was && now) meta.onCollapse?.();\n else if (was && !now) meta.onExpand?.();\n };\n\n const applySizes = (values: number[], report = true) => {\n const list = orderedMetas();\n const before = list.map((meta) => store[meta.id] ?? 0);\n setStore(\n produce((draft) => {\n list.forEach((meta, index) => {\n const value = values[index];\n if (value !== undefined) draft[meta.id] = value;\n });\n }),\n );\n if (report) {\n list.forEach((meta, index) => {\n const value = values[index];\n if (value !== undefined) reportResize(meta, before[index]!, value);\n });\n }\n };\n\n const buildInitial = (): number[] => {\n const list = orderedMetas();\n const saved = readSaved() ?? options.defaultLayout();\n const raw = list.map((meta) => {\n const fromLayout = saved?.[meta.id];\n if (fromLayout !== undefined) return fromLayout;\n return meta.defaultSize;\n });\n const defined = raw.filter((value): value is number => value !== undefined);\n const unknown = raw.length - defined.length;\n const used = defined.reduce((acc, value) => acc + value, 0);\n const remaining = Math.max(0, 100 - used);\n const fill = unknown > 0 ? remaining / unknown : 0;\n return raw.map((value) => value ?? fill);\n };\n\n const initialize = () => {\n if (initialized) return;\n // SSR 不计算布局:首屏由 Panel 的 defaultSize fallback 撑起,客户端再归一化\n if (typeof window === \"undefined\") return;\n const list = orderedMetas();\n if (list.length === 0) return;\n initialized = true;\n applySizes(normalizeSizes(buildInitial(), bounds()), false);\n commit();\n };\n\n const scheduleInitialize = () => {\n if (typeof window === \"undefined\") return;\n queueMicrotask(() => {\n if (!initialized) initialize();\n });\n };\n\n const registerPanel = (meta: ResizablePanelMeta) => {\n metas.set(meta.element, meta);\n order = [...order, meta.element];\n if (!initialized) {\n scheduleInitialize();\n } else if (store[meta.id] === undefined) {\n // 动态新增:给它默认尺寸,并把其它面板等比压回 100\n const list = orderedMetas();\n const raw = list.map((item) =>\n item.id === meta.id\n ? (item.defaultSize ?? 100 / list.length)\n : (store[item.id] ?? 0),\n );\n applySizes(normalizeSizes(raw, bounds()));\n commit();\n }\n return () => {\n metas.delete(meta.element);\n order = order.filter((element) => element !== meta.element);\n setStore(\n produce((draft) => {\n delete draft[meta.id];\n }),\n );\n };\n };\n\n const adjacentOf = (handleEl: HTMLElement) => {\n let prevEl = handleEl.previousElementSibling as HTMLElement | null;\n while (prevEl && !metas.has(prevEl)) {\n prevEl = prevEl.previousElementSibling as HTMLElement | null;\n }\n let nextEl = handleEl.nextElementSibling as HTMLElement | null;\n while (nextEl && !metas.has(nextEl)) {\n nextEl = nextEl.nextElementSibling as HTMLElement | null;\n }\n if (!prevEl || !nextEl) return undefined;\n const prev = metas.get(prevEl)!;\n const next = metas.get(nextEl)!;\n const prevSize = store[prev.id] ?? 0;\n const nextSize = store[next.id] ?? 0;\n return { prev, next, prevSize, total: prevSize + nextSize };\n };\n\n const applyPair = (\n prev: ResizablePanelMeta,\n next: ResizablePanelMeta,\n targetPrev: number,\n total: number,\n ) => {\n const lo = Math.max(effMin(prev), total - next.maxSize());\n const hi = Math.min(prev.maxSize(), total - effMin(next));\n let size = clamp(targetPrev, lo, hi);\n\n // 折叠吸附:落在 (collapsedSize, minSize) 之间时贴向较近的一端\n if (\n prev.collapsible() &&\n size < prev.minSize() - EPSILON &&\n size > prev.collapsedSize() + EPSILON\n ) {\n size =\n size - prev.collapsedSize() < prev.minSize() - size\n ? prev.collapsedSize()\n : prev.minSize();\n }\n if (\n next.collapsible() &&\n total - size < next.minSize() - EPSILON &&\n total - size > next.collapsedSize() + EPSILON\n ) {\n const rest = total - size;\n size =\n total -\n (rest - next.collapsedSize() < next.minSize() - rest\n ? next.collapsedSize()\n : next.minSize());\n }\n size = clamp(size, lo, hi);\n\n const prevOld = store[prev.id] ?? 0;\n const nextOld = store[next.id] ?? 0;\n setStore(\n produce((draft) => {\n draft[prev.id] = size;\n draft[next.id] = total - size;\n }),\n );\n reportResize(prev, prevOld, size);\n reportResize(next, nextOld, total - size);\n };\n\n const setAdjacentSize = (handleEl: HTMLElement, targetPrevSize: number) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n applyPair(adjacent.prev, adjacent.next, targetPrevSize, adjacent.total);\n // 拖拽帧只通知,持久化留到 pointerup 的 commitLayout\n notify();\n };\n\n const nudgeAdjacent = (handleEl: HTMLElement, deltaPercent: number) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n applyPair(\n adjacent.prev,\n adjacent.next,\n adjacent.prevSize + deltaPercent,\n adjacent.total,\n );\n commit();\n };\n\n const collapsePanel = (id: string) => {\n const meta = orderedMetas().find((item) => item.id === id);\n if (!meta?.collapsible()) return false;\n const current = store[id] ?? 0;\n if (isCollapsedSize(meta, current)) return false;\n collapsedMemory.set(id, current);\n applyPanelTarget(meta, meta.collapsedSize());\n commit();\n return true;\n };\n\n const expandPanel = (id: string) => {\n const meta = orderedMetas().find((item) => item.id === id);\n if (!meta?.collapsible()) return false;\n const current = store[id] ?? 0;\n if (!isCollapsedSize(meta, current)) return false;\n const remembered = collapsedMemory.get(id) ?? meta.minSize();\n applyPanelTarget(meta, Math.max(remembered, meta.minSize()));\n commit();\n return true;\n };\n\n /** 命令式设置单个 panel,并把它与相邻 panel 之间重新分配 */\n const applyPanelTarget = (meta: ResizablePanelMeta, targetSize: number) => {\n const index = order.indexOf(meta.element);\n const nextElement = order[index + 1];\n const prevElement = order[index - 1];\n const nextMeta = nextElement ? metas.get(nextElement) : undefined;\n const prevMeta = prevElement ? metas.get(prevElement) : undefined;\n if (nextMeta) {\n const total = (store[meta.id] ?? 0) + (store[nextMeta.id] ?? 0);\n applyPair(meta, nextMeta, targetSize, total);\n } else if (prevMeta) {\n const total = (store[prevMeta.id] ?? 0) + (store[meta.id] ?? 0);\n applyPair(prevMeta, meta, total - targetSize, total);\n } else {\n setStore(meta.id, 100);\n }\n };\n\n const setPanelSize = (id: string, size: number) => {\n const meta = orderedMetas().find((item) => item.id === id);\n if (!meta) return;\n applyPanelTarget(meta, size);\n commit();\n };\n\n const toggleHandleCollapse = (handleEl: HTMLElement) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n const { prev, next } = adjacent;\n if (prev.collapsible()) {\n if (isCollapsedSize(prev, store[prev.id] ?? 0)) {\n expandPanel(prev.id);\n } else {\n collapsePanel(prev.id);\n }\n return;\n }\n if (next.collapsible()) {\n if (isCollapsedSize(next, store[next.id] ?? 0)) {\n expandPanel(next.id);\n } else {\n collapsePanel(next.id);\n }\n return;\n }\n };\n\n const groupSizePx = () => {\n const element = groupElement();\n if (!element) return 0;\n return options.orientation() === \"horizontal\"\n ? element.clientWidth\n : element.clientHeight;\n };\n\n const isRtl = () => {\n const element = groupElement();\n if (!element) return false;\n return window.getComputedStyle(element).direction === \"rtl\";\n };\n\n return {\n orientation: options.orientation,\n sizes: () => store,\n groupElement,\n setGroupElement,\n dragging,\n keyboardResizeBy: options.keyboardResizeBy,\n registerPanel,\n resolveAdjacent: (handleEl) => adjacentOf(handleEl),\n setAdjacentSize,\n nudgeAdjacent,\n toggleHandleCollapse,\n groupSizePx,\n isRtl,\n beginDrag: () => setDragging(true),\n endDrag: () => setDragging(false),\n commitLayout: commit,\n setPanelSize,\n collapsePanel,\n expandPanel,\n isPanelCollapsed: (id) => {\n const meta = orderedMetas().find((item) => item.id === id);\n return meta ? isCollapsedSize(meta, store[id] ?? 0) : false;\n },\n getPanelSize: (id) => store[id] ?? 0,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useResizablePanelGroup.js","names":["useResizablePanelGroup","groupElement","setGroupElement","createSignal","dragging","setDragging","registry","createPanelRegistry","registryVersion","setRegistryVersion","orderedMetas","sizes","createPanelSizes","reporting","meta","oldSize","newSize","createLayoutReporting","options","registerPanel","createPanelLifecycle","version","adjacentOf","handleEl","sizeOf","setAdjacentSize","adjacent","applyPair","targetPrevSize","notify","nudgeAdjacent","deltaPercent","commit","createPanelCommands","store","element"],"sources":["../../../src/components/resizable/useResizablePanelGroup.ts"],"sourcesContent":["import { createSignal, type Accessor } from \"solid-js\";\nimport type { ResizablePanelGroupContextValue } from \"./resizable.context\";\nimport type {\n ResizableLayout,\n ResizableOrientation,\n ResizablePanelMeta,\n} from \"./resizable.types\";\nimport { createPanelCommands } from \"./resizable.commands\";\nimport { createPanelLifecycle } from \"./resizable.lifecycle\";\nimport { createPanelRegistry } from \"./resizable.registry\";\nimport { createLayoutReporting } from \"./resizable.reporting\";\nimport { createPanelSizes } from \"./resizable.sizes\";\n\ninterface Options {\n orientation: Accessor<ResizableOrientation>;\n defaultLayout: Accessor<ResizableLayout | undefined>;\n onLayoutChange: (layout: ResizableLayout) => void;\n autoSaveId: Accessor<string | undefined>;\n storage: Accessor<Storage | undefined>;\n keyboardResizeBy: Accessor<number>;\n}\n\n/**\n * Resizable 的布局引擎(对齐 react-resizable-panels v4 的核心语义,但按 Solid 重写):\n * - 尺寸用**百分比权重**存在 store 里,渲染时映射为 `flex-grow`,拖拽只更新相邻两个\n * panel 的两个键,子节点不重渲染(细粒度更新);\n * - panel 在挂载时注册(顺序即 DOM 顺序),handle 通过相邻兄弟节点解析前后 panel;\n * - 约束/min/max/collapsible 吸附、归一化到 100、以及命令式 collapse/expand;\n * - 拖拽用 pointer capture,pointermove 由调用方用 rAF 合并,避免高频写 store;\n * - autoSaveId + storage 做布局持久化。\n */\nexport function useResizablePanelGroup(\n options: Options,\n): ResizablePanelGroupContextValue {\n const [groupElement, setGroupElement] = createSignal<HTMLElement>();\n const [dragging, setDragging] = createSignal(false);\n const registry = createPanelRegistry();\n // 注册表变化本身不是响应式的,但 resolveAdjacent 的消费方(Handle 的 aria 值)\n // 需要「面板挂载/卸载后重算」。这个版本号就是那条依赖边。\n const [registryVersion, setRegistryVersion] = createSignal(0);\n\n const orderedMetas = (): ResizablePanelMeta[] => registry.ordered();\n\n const sizes = createPanelSizes({\n metas: orderedMetas,\n registry,\n reportSizeChange: (meta, oldSize, newSize) =>\n reporting.reportSizeChange(meta, oldSize, newSize),\n });\n const { store, sizeOf, applyPair } = sizes;\n\n const reporting = createLayoutReporting({\n metas: orderedMetas,\n sizeOf,\n onLayoutChange: options.onLayoutChange,\n persist: () => ({\n autoSaveId: options.autoSaveId(),\n storage: options.storage(),\n }),\n });\n const { notify, commit, readSaved } = reporting;\n\n const lifecycle = createPanelLifecycle({\n metas: orderedMetas,\n registry,\n sizes,\n readSaved,\n defaultLayout: options.defaultLayout,\n commit,\n onRegistryChange: () => setRegistryVersion((version) => version + 1),\n });\n const registerPanel = lifecycle.registerPanel;\n\n const adjacentOf = (handleEl: HTMLElement) =>\n registry.adjacent(handleEl, sizeOf);\n\n const setAdjacentSize = (handleEl: HTMLElement, targetPrevSize: number) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n applyPair(adjacent.prev, adjacent.next, targetPrevSize, adjacent.total);\n // 拖拽帧只通知,持久化留到 pointerup 的 commitLayout\n notify();\n };\n\n const nudgeAdjacent = (handleEl: HTMLElement, deltaPercent: number) => {\n const adjacent = adjacentOf(handleEl);\n if (!adjacent) return;\n applyPair(\n adjacent.prev,\n adjacent.next,\n adjacent.prevSize + deltaPercent,\n adjacent.total,\n );\n commit();\n };\n\n const commands = createPanelCommands({\n metas: orderedMetas,\n registry,\n sizes,\n commit,\n });\n const {\n collapsePanel,\n expandPanel,\n setPanelSize,\n isPanelCollapsed,\n toggleHandleCollapse,\n } = commands;\n\n const groupSizePx = () => {\n const element = groupElement();\n if (!element) return 0;\n return options.orientation() === \"horizontal\"\n ? element.clientWidth\n : element.clientHeight;\n };\n\n const isRtl = () => {\n const element = groupElement();\n if (!element) return false;\n return window.getComputedStyle(element).direction === \"rtl\";\n };\n\n return {\n orientation: options.orientation,\n sizes: () => store,\n groupElement,\n setGroupElement,\n dragging,\n keyboardResizeBy: options.keyboardResizeBy,\n registerPanel,\n resolveAdjacent: (handleEl) => {\n // 读取版本号:面板挂载/卸载后让消费方(如 aria-valuenow)重算\n registryVersion();\n return adjacentOf(handleEl);\n },\n setAdjacentSize,\n nudgeAdjacent,\n toggleHandleCollapse,\n groupSizePx,\n isRtl,\n beginDrag: () => setDragging(true),\n endDrag: () => setDragging(false),\n commitLayout: commit,\n setPanelSize,\n collapsePanel,\n expandPanel,\n isPanelCollapsed,\n getPanelSize: sizeOf,\n };\n}\n"],"mappings":";;;;;;;AA+BA,SAAgBA,EACd,GACiC;CACjC,IAAM,CAACC,GAAcC,KAAmBC,EAA0B,GAC5D,CAACC,GAAUC,KAAeF,EAAa,EAAK,GAC5CG,IAAWC,EAAoB,GAG/B,CAACC,GAAiBC,KAAsBN,EAAa,CAAC,GAEtDO,UAA2CJ,EAAS,QAAQ,GAE5DK,IAAQC,EAAiB;EAC7B,OAAOF;EACP;EACA,mBAAmB,GAAM,GAAS,MAChCG,EAAU,iBAAiBC,GAAMC,GAASC,CAAO;CACrD,CAAC,GACK,EAAE,UAAO,WAAQ,iBAAcL,GAE/BE,IAAYI,EAAsB;EACtC,OAAOP;EACP;EACA,gBAAgBQ,EAAQ;EACxB,gBAAgB;GACd,YAAYA,EAAQ,WAAW;GAC/B,SAASA,EAAQ,QAAQ;EAC3B;CACF,CAAC,GACK,EAAE,WAAQ,WAAQ,iBAAcL,GAWhCM,IATYC,EAAqB;EACrC,OAAOV;EACP;EACA;EACA;EACA,eAAeQ,EAAQ;EACvB;EACA,wBAAwBT,GAAoB,MAAYY,IAAU,CAAC;CACrE,CACsB,CAAA,CAAU,eAE1BC,KAAc,MAClBhB,EAAS,SAASiB,GAAUC,CAAM,GAE9BC,KAAmB,GAAuB,MAA2B;EACzE,IAAMC,IAAWJ,EAAWC,CAAQ;EACpC,AAAKG,MACLC,EAAUD,EAAS,MAAMA,EAAS,MAAME,GAAgBF,EAAS,KAAK,GAEtEG,EAAO;CACT,GAEMC,KAAiB,GAAuB,MAAyB;EACrE,IAAMJ,IAAWJ,EAAWC,CAAQ;EACpC,AAAKG,MACLC,EACED,EAAS,MACTA,EAAS,MACTA,EAAS,WAAWK,GACpBL,EAAS,KACX,GACAM,EAAO;CACT,GAQM,EACJ,kBACA,gBACA,iBACA,qBACA,4BAXeC,EAAoB;EACnC,OAAOvB;EACP;EACA;EACA;CACF,CAOI;CAgBJ,OAAO;EACL,aAAaQ,EAAQ;EACrB,aAAagB;EACb;EACA;EACA;EACA,kBAAkBhB,EAAQ;EAC1B;EACA,kBAAkB,OAEhBV,EAAgB,GACTc,EAAWC,CAAQ;EAE5B;EACA;EACA;EACA,mBA9BwB;GACxB,IAAMY,IAAUlC,EAAa;GAE7B,OADKkC,IACEjB,EAAQ,YAAY,MAAM,eAC7BiB,EAAQ,cACRA,EAAQ,eAHS;EAIvB;EAyBE,aAvBkB;GAClB,IAAMA,IAAUlC,EAAa;GAE7B,OADKkC,IACE,OAAO,iBAAiBA,CAAO,CAAC,CAAC,cAAc,QADjC;EAEvB;EAoBE,iBAAiB9B,EAAY,EAAI;EACjC,eAAeA,EAAY,EAAK;EAChC,cAAc2B;EACd;EACA;EACA;EACA;EACA,cAAcR;CAChB;AACF"}
|
|
@@ -2,7 +2,7 @@ import { createContext as e, useContext as t } from "solid-js";
|
|
|
2
2
|
//#region src/components/scroll-area/ScrollArea/ScrollArea.context.ts
|
|
3
3
|
var n = e(), r = () => {
|
|
4
4
|
let e = t(n);
|
|
5
|
-
if (!e) throw Error("useScrollAreaContext
|
|
5
|
+
if (!e) throw Error("useScrollAreaContext 必须用在 <ScrollArea> 内部");
|
|
6
6
|
return e;
|
|
7
7
|
};
|
|
8
8
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArea.context.js","names":["ScrollAreaContext","createContext","useScrollAreaContext","context","useContext"],"sources":["../../../../src/components/scroll-area/ScrollArea/ScrollArea.context.ts"],"sourcesContent":["import {\n type Accessor,\n createContext,\n type Setter,\n useContext,\n} from \"solid-js\";\nimport type { ScrollMetrics } from \"./ScrollArea.types\";\n\ninterface ScrollAreaContextValue {\n hovering: Accessor<boolean>;\n viewportRef: () => HTMLDivElement | undefined;\n dragging: Accessor<\"vertical\" | \"horizontal\" | null>;\n setDragging: Setter<\"vertical\" | \"horizontal\" | null>;\n vertical: Accessor<ScrollMetrics>;\n horizontal: Accessor<ScrollMetrics>;\n}\n\nexport const ScrollAreaContext = createContext<ScrollAreaContextValue>();\n\nexport const useScrollAreaContext = () => {\n const context = useContext(ScrollAreaContext);\n if (!context) {\n throw new Error(\
|
|
1
|
+
{"version":3,"file":"ScrollArea.context.js","names":["ScrollAreaContext","createContext","useScrollAreaContext","context","useContext"],"sources":["../../../../src/components/scroll-area/ScrollArea/ScrollArea.context.ts"],"sourcesContent":["import {\n type Accessor,\n createContext,\n type Setter,\n useContext,\n} from \"solid-js\";\nimport type { ScrollMetrics } from \"./ScrollArea.types\";\n\ninterface ScrollAreaContextValue {\n hovering: Accessor<boolean>;\n viewportRef: () => HTMLDivElement | undefined;\n dragging: Accessor<\"vertical\" | \"horizontal\" | null>;\n setDragging: Setter<\"vertical\" | \"horizontal\" | null>;\n vertical: Accessor<ScrollMetrics>;\n horizontal: Accessor<ScrollMetrics>;\n}\n\nexport const ScrollAreaContext = createContext<ScrollAreaContextValue>();\n\nexport const useScrollAreaContext = () => {\n const context = useContext(ScrollAreaContext);\n if (!context) {\n throw new Error(\"useScrollAreaContext 必须用在 <ScrollArea> 内部\");\n }\n return context;\n};\n"],"mappings":";;AAiBA,IAAaA,IAAoBC,EAAsC,GAE1DC,UAA6B;CACxC,IAAMC,IAAUC,EAAWJ,CAAiB;CAC5C,IAAI,CAACG,GACH,MAAU,MAAM,2CAA2C;CAE7D,OAAOA;AACT"}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
import { ScrollAreaProps } from './ScrollArea.types';
|
|
2
|
+
/**
|
|
3
|
+
* 自定义滚动容器。
|
|
4
|
+
*
|
|
5
|
+
* 职责边界(SRP):
|
|
6
|
+
* - 指标采集(scroll / resize)→ `useScrollAreaMetrics.ts`
|
|
7
|
+
* - 尺寸换算 → `ScrollArea.utils.ts`
|
|
8
|
+
* - 滚动条交互 → `ScrollBar/`
|
|
9
|
+
* - 本文件只负责:组合 Provider、渲染视口 DOM 与样式
|
|
10
|
+
*/
|
|
2
11
|
export declare const ScrollArea: (props: ScrollAreaProps) => import('solid-js').JSX.Element;
|
|
@@ -1,67 +1,56 @@
|
|
|
1
1
|
import { clsx as e } from "../../../utils/clsx.js";
|
|
2
2
|
import { ScrollBar as t } from "../ScrollBar/ScrollBar.js";
|
|
3
3
|
import { ScrollAreaContext as n } from "./ScrollArea.context.js";
|
|
4
|
-
import {
|
|
4
|
+
import { useScrollAreaMetrics as r } from "./useScrollAreaMetrics.js";
|
|
5
5
|
import { className as i, createComponent as a, effect as o, insert as s, mergeProps as c, setAttribute as l, spread as u, template as d, use as f } from "solid-js/web";
|
|
6
|
-
import { createSignal as p,
|
|
6
|
+
import { createSignal as p, splitProps as m } from "solid-js";
|
|
7
7
|
//#region src/components/scroll-area/ScrollArea/ScrollArea.tsx
|
|
8
|
-
var
|
|
9
|
-
let
|
|
8
|
+
var h = /*#__PURE__*/ d("<div data-slot=scroll-area-viewport role=region>"), g = /*#__PURE__*/ d("<div data-slot=scroll-area>"), _ = (d) => {
|
|
9
|
+
let [_, v] = m(d, [
|
|
10
10
|
"orientation",
|
|
11
11
|
"class",
|
|
12
12
|
"classList",
|
|
13
13
|
"children",
|
|
14
14
|
"aria-label"
|
|
15
|
-
]), [
|
|
16
|
-
thumbRatio: 1,
|
|
17
|
-
thumbOffset: 0,
|
|
18
|
-
scrollable: !1
|
|
19
|
-
}), [D, O] = p({
|
|
20
|
-
thumbRatio: 1,
|
|
21
|
-
thumbOffset: 0,
|
|
22
|
-
scrollable: !1
|
|
23
|
-
});
|
|
24
|
-
function k(e) {
|
|
25
|
-
E(r(e.clientHeight, e.scrollTop, e.scrollHeight)), O(r(e.clientWidth, e.scrollLeft, e.scrollWidth));
|
|
26
|
-
}
|
|
27
|
-
function A(e) {
|
|
28
|
-
v = e, k(e);
|
|
29
|
-
let t = () => k(e), n = new ResizeObserver(t);
|
|
30
|
-
n.observe(e), e.firstElementChild && n.observe(e.firstElementChild), e.addEventListener("scroll", t, { passive: !0 }), m(() => {
|
|
31
|
-
n.disconnect(), e.removeEventListener("scroll", t);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
15
|
+
]), [y, b] = p(!1), [x, S] = p(null), C = r(), w = () => _.orientation === "vertical" ? "overflow-y-scroll overflow-x-hidden" : _.orientation === "horizontal" ? "overflow-x-scroll overflow-y-hidden" : "overflow-scroll";
|
|
34
16
|
return (() => {
|
|
35
|
-
var r =
|
|
36
|
-
return r.addEventListener("mouseleave", () =>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
17
|
+
var r = g();
|
|
18
|
+
return r.addEventListener("mouseleave", () => b(!1)), r.addEventListener("mouseenter", () => b(!0)), u(r, c({
|
|
19
|
+
get class() {
|
|
20
|
+
return e("relative", _.class, _.classList);
|
|
21
|
+
},
|
|
22
|
+
get classList() {
|
|
23
|
+
return _.classList;
|
|
24
|
+
}
|
|
25
|
+
}, v), !1, !0), s(r, a(n.Provider, {
|
|
26
|
+
get value() {
|
|
27
|
+
return {
|
|
28
|
+
hovering: y,
|
|
29
|
+
viewportRef: C.viewportRef,
|
|
30
|
+
dragging: x,
|
|
31
|
+
setDragging: S,
|
|
32
|
+
vertical: C.vertical,
|
|
33
|
+
horizontal: C.horizontal
|
|
34
|
+
};
|
|
46
35
|
},
|
|
47
36
|
get children() {
|
|
48
37
|
return [(() => {
|
|
49
|
-
var t =
|
|
50
|
-
return typeof n == "function" ? f(n, t) :
|
|
51
|
-
var r =
|
|
38
|
+
var t = h(), n = C.setup;
|
|
39
|
+
return typeof n == "function" ? f(n, t) : C.setup = t, s(t, () => _.children), o((n) => {
|
|
40
|
+
var r = _["aria-label"] ?? "Scrollable content", a = e("size-full rounded-[inherit] transition-[color,box-shadow] outline-none", "scrollbar-none [&::-webkit-scrollbar]:hidden", "focus-visible:ring-2 focus-visible:ring-offset-1", "focus-visible:ring-ring/50", w());
|
|
52
41
|
return r !== n.e && l(t, "aria-label", n.e = r), a !== n.t && i(t, n.t = a), n;
|
|
53
42
|
}, {
|
|
54
43
|
e: void 0,
|
|
55
44
|
t: void 0
|
|
56
45
|
}), t;
|
|
57
46
|
})(), a(t, { get orientation() {
|
|
58
|
-
return
|
|
47
|
+
return _.orientation;
|
|
59
48
|
} })];
|
|
60
49
|
}
|
|
61
50
|
})), r;
|
|
62
51
|
})();
|
|
63
52
|
};
|
|
64
53
|
//#endregion
|
|
65
|
-
export {
|
|
54
|
+
export { _ as ScrollArea };
|
|
66
55
|
|
|
67
56
|
//# sourceMappingURL=ScrollArea.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArea.js","names":["createSignal","
|
|
1
|
+
{"version":3,"file":"ScrollArea.js","names":["createSignal","splitProps","ScrollAreaProps","clsx","ScrollBar","ScrollAreaContext","useScrollAreaMetrics","ScrollArea","props","local","others","hovering","setHovering","dragging","setDragging","metrics","overflowClass","orientation","_el$","_tmpl$2","addEventListener","_$spread","_$mergeProps","class","classList","_$insert","_$createComponent","Provider","value","viewportRef","vertical","horizontal","children","_el$2","_tmpl$","_ref$","setup","_$use","_$effect","_p$","_v$","_v$2","e","_$setAttribute","t","_$className","undefined","_$mergeProps","_$createComponent","_$use","_$setAttribute","_$className","_tmpl$","_tmpl$2","ScrollArea","local","others","splitProps","props","hovering","setHovering","createSignal","dragging","setDragging","metrics","useScrollAreaMetrics","overflowClass","_el$","spread","mergeProps","\"class\"","clsx","insert","createComponent","ScrollAreaContext","_el$2","_ref$","use","effect","_v$","_v$2","_p$","setAttribute","className","ScrollBar"],"sources":["../../../../src/components/scroll-area/ScrollArea/ScrollArea.tsx"],"sourcesContent":["import { createSignal, splitProps } from \"solid-js\";\nimport type { ScrollAreaProps } from \"./ScrollArea.types\";\nimport { clsx } from \"~/utils\";\nimport { ScrollBar } from \"../ScrollBar\";\nimport { ScrollAreaContext } from \"./ScrollArea.context\";\nimport { useScrollAreaMetrics } from \"./useScrollAreaMetrics\";\n\n/**\n * 自定义滚动容器。\n *\n * 职责边界(SRP):\n * - 指标采集(scroll / resize)→ `useScrollAreaMetrics.ts`\n * - 尺寸换算 → `ScrollArea.utils.ts`\n * - 滚动条交互 → `ScrollBar/`\n * - 本文件只负责:组合 Provider、渲染视口 DOM 与样式\n */\nexport const ScrollArea = (props: ScrollAreaProps) => {\n const [local, others] = splitProps(props, [\n \"orientation\",\n \"class\",\n \"classList\",\n \"children\",\n \"aria-label\",\n ]);\n\n const [hovering, setHovering] = createSignal(false);\n const [dragging, setDragging] = createSignal<\n \"vertical\" | \"horizontal\" | null\n >(null);\n\n const metrics = useScrollAreaMetrics();\n\n const overflowClass = () => {\n if (local.orientation === \"vertical\") {\n return \"overflow-y-scroll overflow-x-hidden\";\n }\n if (local.orientation === \"horizontal\") {\n return \"overflow-x-scroll overflow-y-hidden\";\n }\n return \"overflow-scroll\";\n };\n\n return (\n <div\n data-slot=\"scroll-area\"\n class={clsx(\"relative\", local.class, local.classList)}\n classList={local.classList}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n {...others}\n >\n <ScrollAreaContext.Provider\n value={{\n hovering,\n viewportRef: metrics.viewportRef,\n dragging,\n setDragging,\n vertical: metrics.vertical,\n horizontal: metrics.horizontal,\n }}\n >\n <div\n ref={metrics.setup}\n data-slot=\"scroll-area-viewport\"\n role=\"region\"\n aria-label={local[\"aria-label\"] ?? \"Scrollable content\"}\n class={clsx(\n \"size-full rounded-[inherit] transition-[color,box-shadow] outline-none\",\n // Native scrollbars hidden via CSS; custom ones provided below\n \"scrollbar-none [&::-webkit-scrollbar]:hidden\",\n // Focus ring — meets WCAG 2.4.7\n \"focus-visible:ring-2 focus-visible:ring-offset-1\",\n \"focus-visible:ring-ring/50\",\n overflowClass(),\n )}\n >\n {local.children}\n </div>\n <ScrollBar orientation={local.orientation} />\n </ScrollAreaContext.Provider>\n </div>\n );\n};\n"],"mappings":";;;;;;;iIAgBaO,KAAcC,MAA2B;CACpD,IAAM,CAACC,GAAOC,KAAUT,EAAWO,GAAO;EACxC;EACA;EACA;EACA;EACA;CAAY,CACb,GAEK,CAACG,GAAUC,KAAeZ,EAAa,EAAK,GAC5C,CAACa,GAAUC,KAAed,EAE9B,IAAI,GAEAe,IAAUT,EAAqB,GAE/BU,UACAP,EAAMQ,gBAAgB,aACjB,wCAELR,EAAMQ,gBAAgB,eACjB,wCAEF;CAGT,cAAA;EAAA,IAAAC,IAAAC,EAAA;EAoC+C,OApC/CD,EAAAE,iBAAA,oBAMwBR,EAAY,EAAK,CAAC,GAAAM,EAAAE,iBAAA,oBADlBR,EAAY,EAAI,CAAC,GAAAS,EAAAH,GAAAI,EAAA;GAAA,IAAAgD,QAAA;IAAA,OAF9BnE,EAAK,YAAYM,EAAMc,OAAOd,EAAMe,SAAS;GAAC;GAAA,IACrDA,YAAS;IAAA,OAAEf,EAAMe;GAAS;EAAA,GAGtBd,CAAM,GAAA,IAAA,EAAA,GAAAe,EAAAP,GAAAQ,EAETrB,EAAkBsB,UAAQ;GAAA,IACzBC,QAAK;IAAA,OAAE;KACLjB;KACAkB,aAAad,EAAQc;KACrBhB;KACAC;KACAgB,UAAUf,EAAQe;KAClBC,YAAYhB,EAAQgB;IACtB;GAAC;GAAA,IAAAC,WAAA;IAAA,OAAA,QAAA;KAAA,IAAAC,IAAAC,EAAA,GAAAC,IAGMpB,EAAQqB;KAYZ,OAZiB,OAAAD,KAAA,aAAAE,EAAAF,GAAAF,CAAA,IAAblB,EAAQqB,QAAKH,GAAAR,EAAAQ,SAcjBxB,EAAMuB,QAAQ,GAAAM,GAAAC,MAAA;MAAA,IAAAC,IAXH/B,EAAM,iBAAiB,sBAAoBgC,IAChDtC,EACL,0EAEA,gDAEA,oDACA,8BACAa,EAAc,CAChB;MAAC,OAAAwB,MAAAD,EAAAG,KAAAC,EAAAV,GAAA,cAAAM,EAAAG,IAAAF,CAAA,GAAAC,MAAAF,EAAAK,KAAAC,EAAAZ,GAAAM,EAAAK,IAAAH,CAAA,GAAAF;KAAA,GAAA;MAAAG,GAAAI,KAAAA;MAAAF,GAAAE,KAAAA;KAAA,CAAA,GAAAb;IAAA,EAAA,CAAA,GAAAP,EAIFtB,GAAS,EAAA,IAACa,cAAW;KAAA,OAAER,EAAMQ;IAAW,EAAA,CAAA,CAAA;GAAA;EAAA,CAAA,CAAA,GAAAC;CAAA,EAAA,CAAA;AAIjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollArea.utils.js","names":["computeMetrics","scrollable","scrollSize","client","
|
|
1
|
+
{"version":3,"file":"ScrollArea.utils.js","names":["computeMetrics","scrollable","scrollSize","client","maxScroll","scroll"],"sources":["../../../../src/components/scroll-area/ScrollArea/ScrollArea.utils.ts"],"sourcesContent":["import type { ScrollMetrics } from \"./ScrollArea.types\";\n\nexport function computeMetrics(\n client: number,\n scroll: number,\n scrollSize: number,\n): ScrollMetrics {\n // +1 吸收亚像素舍入:仅超出 1px 以内视为不可滚动\n const scrollable = scrollSize > client + 1;\n if (!scrollable) return { thumbRatio: 1, thumbOffset: 0, scrollable: false };\n // scrollable 蕴含 maxScroll >= 2,因此这里不需要再兜底除零\n const maxScroll = scrollSize - client;\n return {\n thumbRatio: client / scrollSize,\n thumbOffset: scroll / maxScroll,\n scrollable,\n };\n}\n"],"mappings":";AAEA,SAAgBA,EACd,GACA,GACA,GACe;CAEf,IAAMC,IAAaC,IAAaC,IAAS;CACzC,IAAI,CAACF,GAAY,OAAO;EAAE,YAAY;EAAG,aAAa;EAAG,YAAY;CAAM;CAE3E,IAAMG,IAAYF,IAAaC;CAC/B,OAAO;EACL,YAAYA,IAASD;EACrB,aAAaG,IAASD;EACtB;CACF;AACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Accessor } from 'solid-js';
|
|
2
|
+
import { ScrollMetrics } from './ScrollArea.types';
|
|
3
|
+
export interface ScrollAreaMetrics {
|
|
4
|
+
vertical: Accessor<ScrollMetrics>;
|
|
5
|
+
horizontal: Accessor<ScrollMetrics>;
|
|
6
|
+
/** 视口元素访问器(供 ScrollBar 读写滚动位置) */
|
|
7
|
+
viewportRef: () => HTMLDivElement | undefined;
|
|
8
|
+
/** 传给视口的 `ref`:绑定监听与观察器 */
|
|
9
|
+
setup: (el: HTMLDivElement) => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 视口(viewport)的滚动指标采集。
|
|
13
|
+
*
|
|
14
|
+
* 单一职责:监听视口的 `scroll` 与尺寸变化(`ResizeObserver` 同时观察视口与
|
|
15
|
+
* 其内容元素),把尺寸换算成 `ScrollMetrics`。不关心渲染与交互。
|
|
16
|
+
*
|
|
17
|
+
* 注意:内容元素必须等 Solid 挂载完成后才能拿到——`ref` 回调执行时子节点
|
|
18
|
+
* 尚未插入(Solid 延迟创建 children),此时读 `firstElementChild` 会拿到一个
|
|
19
|
+
* 随后被替换掉的占位节点,导致内容尺寸变化永远不触发刷新。因此这里在
|
|
20
|
+
* `onMount` 里才去观察内容元素。
|
|
21
|
+
*/
|
|
22
|
+
export declare function useScrollAreaMetrics(): ScrollAreaMetrics;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { computeMetrics as e } from "./ScrollArea.utils.js";
|
|
2
|
+
import { createSignal as t, onCleanup as n, onMount as r } from "solid-js";
|
|
3
|
+
//#region src/components/scroll-area/ScrollArea/useScrollAreaMetrics.ts
|
|
4
|
+
var i = {
|
|
5
|
+
thumbRatio: 1,
|
|
6
|
+
thumbOffset: 0,
|
|
7
|
+
scrollable: !1
|
|
8
|
+
};
|
|
9
|
+
function a() {
|
|
10
|
+
let [a, o] = t(i), [s, c] = t(i), l, u = null, d = null, f = null, p = () => {
|
|
11
|
+
l && (o(e(l.clientHeight, l.scrollTop, l.scrollHeight)), c(e(l.clientWidth, l.scrollLeft, l.scrollWidth)));
|
|
12
|
+
}, m = () => {
|
|
13
|
+
let e = l?.firstElementChild ?? null;
|
|
14
|
+
d && e !== u && (u && d.unobserve(u), u = e, u && d.observe(u));
|
|
15
|
+
};
|
|
16
|
+
return n(() => {
|
|
17
|
+
d?.disconnect(), d = null, f?.disconnect(), f = null, u = null, l?.removeEventListener("scroll", p), l = void 0;
|
|
18
|
+
}), r(() => {
|
|
19
|
+
m(), p();
|
|
20
|
+
}), {
|
|
21
|
+
vertical: a,
|
|
22
|
+
horizontal: s,
|
|
23
|
+
viewportRef: () => l,
|
|
24
|
+
setup: (e) => {
|
|
25
|
+
l = e, p(), d?.disconnect(), d = new ResizeObserver(() => p()), d.observe(e), u = null, m(), e.addEventListener("scroll", p, { passive: !0 }), typeof MutationObserver < "u" && (f = new MutationObserver(() => {
|
|
26
|
+
m(), p();
|
|
27
|
+
}), f.observe(e, { childList: !0 }));
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { a as useScrollAreaMetrics };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=useScrollAreaMetrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScrollAreaMetrics.js","names":["EMPTY_METRICS","useScrollAreaMetrics","vertical","setVertical","createSignal","horizontal","setHorizontal","viewport","content","observer","mutations","measure","computeMetrics","observeContent","next","onCleanup","onMount","el"],"sources":["../../../../src/components/scroll-area/ScrollArea/useScrollAreaMetrics.ts"],"sourcesContent":["import { type Accessor, createSignal, onCleanup, onMount } from \"solid-js\";\nimport type { ScrollMetrics } from \"./ScrollArea.types\";\nimport { computeMetrics } from \"./ScrollArea.utils\";\n\nconst EMPTY_METRICS: ScrollMetrics = {\n thumbRatio: 1,\n thumbOffset: 0,\n scrollable: false,\n};\n\nexport interface ScrollAreaMetrics {\n vertical: Accessor<ScrollMetrics>;\n horizontal: Accessor<ScrollMetrics>;\n /** 视口元素访问器(供 ScrollBar 读写滚动位置) */\n viewportRef: () => HTMLDivElement | undefined;\n /** 传给视口的 `ref`:绑定监听与观察器 */\n setup: (el: HTMLDivElement) => void;\n}\n\n/**\n * 视口(viewport)的滚动指标采集。\n *\n * 单一职责:监听视口的 `scroll` 与尺寸变化(`ResizeObserver` 同时观察视口与\n * 其内容元素),把尺寸换算成 `ScrollMetrics`。不关心渲染与交互。\n *\n * 注意:内容元素必须等 Solid 挂载完成后才能拿到——`ref` 回调执行时子节点\n * 尚未插入(Solid 延迟创建 children),此时读 `firstElementChild` 会拿到一个\n * 随后被替换掉的占位节点,导致内容尺寸变化永远不触发刷新。因此这里在\n * `onMount` 里才去观察内容元素。\n */\nexport function useScrollAreaMetrics(): ScrollAreaMetrics {\n const [vertical, setVertical] = createSignal<ScrollMetrics>(EMPTY_METRICS);\n const [horizontal, setHorizontal] =\n createSignal<ScrollMetrics>(EMPTY_METRICS);\n\n let viewport: HTMLDivElement | undefined;\n let content: Element | null = null;\n let observer: ResizeObserver | null = null;\n let mutations: MutationObserver | null = null;\n\n const measure = () => {\n if (!viewport) return;\n setVertical(\n computeMetrics(\n viewport.clientHeight,\n viewport.scrollTop,\n viewport.scrollHeight,\n ),\n );\n setHorizontal(\n computeMetrics(\n viewport.clientWidth,\n viewport.scrollLeft,\n viewport.scrollWidth,\n ),\n );\n };\n\n const observeContent = () => {\n const next = viewport?.firstElementChild ?? null;\n if (!observer || next === content) return;\n if (content) observer.unobserve(content);\n content = next;\n if (content) observer.observe(content);\n };\n\n const setup = (el: HTMLDivElement) => {\n viewport = el;\n measure();\n\n observer?.disconnect();\n observer = new ResizeObserver(() => measure());\n observer.observe(el);\n content = null;\n // 内容还没挂载,先不观察;onMount 时再观察真实的内容元素\n observeContent();\n\n el.addEventListener(\"scroll\", measure, { passive: true });\n\n // 内容元素可能被替换(动态 children、spacer 增删),\n // 变化后重新指向真正的内容元素,否则它的大小变化不会触发刷新\n if (typeof MutationObserver !== \"undefined\") {\n mutations = new MutationObserver(() => {\n observeContent();\n measure();\n });\n mutations.observe(el, { childList: true });\n }\n };\n\n // 注意:cleanup 必须注册在 hook 作用域,不能写进 ref 回调里——\n // ref 回调执行时 owner 已经脱离,`onCleanup` 注册的清理函数永远不会被调用,\n // 结果就是 ResizeObserver 与 scroll 监听泄漏。\n onCleanup(() => {\n observer?.disconnect();\n observer = null;\n mutations?.disconnect();\n mutations = null;\n content = null;\n viewport?.removeEventListener(\"scroll\", measure);\n viewport = undefined;\n });\n\n onMount(() => {\n observeContent();\n measure();\n });\n\n return { vertical, horizontal, viewportRef: () => viewport, setup };\n}\n"],"mappings":";;;AAIA,IAAMA,IAA+B;CACnC,YAAY;CACZ,aAAa;CACb,YAAY;AACd;AAsBA,SAAgBC,IAA0C;CACxD,IAAM,CAACC,GAAUC,KAAeC,EAA4BJ,CAAa,GACnE,CAACK,GAAYC,KACjBF,EAA4BJ,CAAa,GAEvCO,GACAC,IAA0B,MAC1BC,IAAkC,MAClCC,IAAqC,MAEnCC,UAAgB;EACpB,AAAKJ,MACLJ,EACES,EACEL,EAAS,cACTA,EAAS,WACTA,EAAS,YACX,CACF,GACAD,EACEM,EACEL,EAAS,aACTA,EAAS,YACTA,EAAS,WACX,CACF;CACF,GAEMM,UAAuB;EAC3B,IAAMC,IAAOP,GAAU,qBAAqB;EAC5C,AAAKE,KAAYK,MAASN,MACtBA,KAASC,EAAS,UAAUD,CAAO,GACvC,IAAUM,GACNN,KAASC,EAAS,QAAQD,CAAO;CACvC;CA4CA,OAfAO,QAAgB;EAOd,AANAN,GAAU,WAAW,GACrB,IAAW,MACXC,GAAW,WAAW,GACtB,IAAY,MACZ,IAAU,MACVH,GAAU,oBAAoB,UAAUI,CAAO,GAC/C,IAAW,KAAA;CACb,CAAC,GAEDK,QAAc;EAEZ,AADAH,EAAe,GACfF,EAAQ;CACV,CAAC,GAEM;EAAE;EAAU;EAAY,mBAAmBJ;EAAU,QA1C7C,MAAuB;GAepC,AAdA,IAAWU,GACXN,EAAQ,GAERF,GAAU,WAAW,GACrB,IAAW,IAAI,qBAAqBE,EAAQ,CAAC,GAC7CF,EAAS,QAAQQ,CAAE,GACnB,IAAU,MAEVJ,EAAe,GAEfI,EAAG,iBAAiB,UAAUN,GAAS,EAAE,SAAS,GAAK,CAAC,GAIpD,OAAO,mBAAqB,QAC9B,IAAY,IAAI,uBAAuB;IAErC,AADAE,EAAe,GACfF,EAAQ;GACV,CAAC,GACDD,EAAU,QAAQO,GAAI,EAAE,WAAW,GAAK,CAAC;EAE7C;CAoBkE;AACpE"}
|
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
import { ScrollBarProps } from './ScrollBar.types';
|
|
2
|
+
/**
|
|
3
|
+
* 自定义滚动条。
|
|
4
|
+
*
|
|
5
|
+
* 职责边界(SRP):
|
|
6
|
+
* - 数值/几何换算 → `ScrollBar.utils.ts`(纯函数,可独立单测)
|
|
7
|
+
* - 指针/键盘事件 → `useScrollBarInteraction.ts`
|
|
8
|
+
* - 本文件只负责:从 Context 读取指标、组装状态、渲染 DOM 与样式
|
|
9
|
+
*/
|
|
2
10
|
export declare const ScrollBar: (props: ScrollBarProps) => import('solid-js').JSX.Element;
|
|
@@ -1,89 +1,56 @@
|
|
|
1
1
|
import { clsx as e } from "../../../utils/clsx.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { computeAriaValueNow as t, computeThumbStyle as n, isScrollBarVisible as r, isVertical as i } from "./ScrollBar.utils.js";
|
|
3
|
+
import { useScrollBarInteraction as a } from "./useScrollBarInteraction.js";
|
|
4
|
+
import { useScrollAreaContext as o } from "../ScrollArea/ScrollArea.context.js";
|
|
5
|
+
import { addEventListener as s, className as c, delegateEvents as l, effect as u, mergeProps as d, setAttribute as f, spread as p, style as m, template as h, use as g } from "solid-js/web";
|
|
6
|
+
import { createMemo as _, createSignal as v, mergeProps as y, splitProps as b } from "solid-js";
|
|
5
7
|
//#region src/components/scroll-area/ScrollBar/ScrollBar.tsx
|
|
6
|
-
var
|
|
7
|
-
let
|
|
8
|
+
var x = /*#__PURE__*/ h("<div data-slot=scroll-area-scrollbar role=scrollbar aria-controls=scroll-area-viewport aria-valuemin=0 aria-valuemax=100 tabindex=0><div data-slot=scroll-area-thumb>"), S = (l) => {
|
|
9
|
+
let h = o(), S = y({ orientation: "vertical" }, l), [C, w] = b(S, [
|
|
8
10
|
"orientation",
|
|
9
11
|
"class",
|
|
10
12
|
"classList"
|
|
11
|
-
]), [
|
|
12
|
-
let e = T(), t = (
|
|
13
|
-
return
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}), D = d(() => Math.round(T().thumbOffset * 100));
|
|
21
|
-
function O(e) {
|
|
22
|
-
e.preventDefault(), e.stopPropagation();
|
|
23
|
-
let t = l.viewportRef();
|
|
24
|
-
if (!t) return;
|
|
25
|
-
l.setDragging(b.orientation), C(!0);
|
|
26
|
-
let n = w() ? e.clientY : e.clientX, r = w() ? t.scrollTop : t.scrollLeft, i = w() ? t.scrollHeight - t.clientHeight : t.scrollWidth - t.clientWidth, a = i / ((w() ? v.clientHeight : v.clientWidth) - 2 - (w() ? e.currentTarget.clientHeight : e.currentTarget.clientWidth));
|
|
27
|
-
function o(e) {
|
|
28
|
-
let o = (w() ? e.clientY : e.clientX) - n, s = Math.max(0, Math.min(i, r + o * a));
|
|
29
|
-
w() ? t.scrollTop = s : t.scrollLeft = s;
|
|
13
|
+
]), [T, E] = v(), [D, O] = v(!1), k = () => C.orientation, A = () => i(k()), j = _(() => A() ? h.vertical() : h.horizontal()), M = _(() => {
|
|
14
|
+
let e = T(), t = e ? A() ? e.clientHeight : e.clientWidth : 0;
|
|
15
|
+
return n(k(), j(), t);
|
|
16
|
+
}), N = _(() => t(j())), P = _(() => r(h.hovering(), h.dragging(), k(), D())), F = a({
|
|
17
|
+
track: T,
|
|
18
|
+
viewport: h.viewportRef,
|
|
19
|
+
orientation: k,
|
|
20
|
+
onDragChange: (e) => {
|
|
21
|
+
h.setDragging(e ? k() : null), O(e);
|
|
30
22
|
}
|
|
31
|
-
|
|
32
|
-
l.setDragging(null), C(!1), window.removeEventListener("pointermove", o), window.removeEventListener("pointerup", s);
|
|
33
|
-
}
|
|
34
|
-
window.addEventListener("pointermove", o), window.addEventListener("pointerup", s), m(() => {
|
|
35
|
-
window.removeEventListener("pointermove", o), window.removeEventListener("pointerup", s);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
function k(e) {
|
|
39
|
-
if (e.target.dataset.slot === "scroll-area-thumb") return;
|
|
40
|
-
let t = l.viewportRef();
|
|
41
|
-
if (!t) return;
|
|
42
|
-
let n = v.getBoundingClientRect(), r = (w() ? (e.clientY - n.top) / n.height : (e.clientX - n.left) / n.width) * (w() ? t.scrollHeight - t.clientHeight : t.scrollWidth - t.clientWidth);
|
|
43
|
-
t.scrollTo({
|
|
44
|
-
[w() ? "top" : "left"]: r,
|
|
45
|
-
behavior: "smooth"
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
function A(e) {
|
|
49
|
-
let t = l.viewportRef();
|
|
50
|
-
if (!t) return;
|
|
51
|
-
let n = w() ? t.clientHeight : t.clientWidth, r = {
|
|
52
|
-
ArrowDown: 40,
|
|
53
|
-
ArrowRight: 40,
|
|
54
|
-
ArrowUp: -40,
|
|
55
|
-
ArrowLeft: -40,
|
|
56
|
-
PageDown: n,
|
|
57
|
-
PageUp: -n,
|
|
58
|
-
Home: -Infinity,
|
|
59
|
-
End: Infinity
|
|
60
|
-
}[e.key];
|
|
61
|
-
r !== void 0 && (e.preventDefault(), w() ? t.scrollTop = Math.max(0, Math.min(t.scrollHeight - t.clientHeight, r === Infinity ? t.scrollHeight : r === -Infinity ? 0 : t.scrollTop + r)) : t.scrollLeft = Math.max(0, Math.min(t.scrollWidth - t.clientWidth, r === Infinity ? t.scrollWidth : r === -Infinity ? 0 : t.scrollLeft + r)));
|
|
62
|
-
}
|
|
63
|
-
let j = d(() => l.hovering() || l.dragging() === r.orientation || S());
|
|
23
|
+
});
|
|
64
24
|
return (() => {
|
|
65
|
-
var t =
|
|
66
|
-
|
|
67
|
-
var d = v;
|
|
68
|
-
return typeof d == "function" ? u(d, t) : v = t, s(t, a({
|
|
25
|
+
var t = x(), n = t.firstChild;
|
|
26
|
+
return g(E, t), p(t, d({
|
|
69
27
|
get "aria-orientation"() {
|
|
70
|
-
return
|
|
28
|
+
return k();
|
|
71
29
|
},
|
|
72
30
|
get "aria-valuenow"() {
|
|
73
|
-
return
|
|
31
|
+
return N();
|
|
32
|
+
},
|
|
33
|
+
get onPointerDown() {
|
|
34
|
+
return F.onTrackPointerDown;
|
|
35
|
+
},
|
|
36
|
+
get onKeyDown() {
|
|
37
|
+
return F.onKeyDown;
|
|
74
38
|
},
|
|
75
39
|
get "data-orientation"() {
|
|
76
|
-
return
|
|
40
|
+
return k();
|
|
77
41
|
},
|
|
78
42
|
get "data-hovering"() {
|
|
79
|
-
return
|
|
43
|
+
return h.hovering() ? "" : void 0;
|
|
80
44
|
},
|
|
81
45
|
get class() {
|
|
82
|
-
return e("absolute touch-none select-none transition-opacity duration-150",
|
|
46
|
+
return e("absolute touch-none select-none transition-opacity duration-150", P() ? "opacity-100" : "opacity-0", A() ? "right-0 top-0 h-full w-2.5 border-l border-l-transparent p-px flex flex-col" : "bottom-0 left-0 w-full h-2.5 border-t border-t-transparent p-px flex flex-row", "outline-none focus-visible:ring-2 focus-visible:ring-neutral-400/70 dark:focus-visible:ring-neutral-500/70", C.class, C.classList);
|
|
47
|
+
},
|
|
48
|
+
get classList() {
|
|
49
|
+
return C.classList;
|
|
83
50
|
}
|
|
84
|
-
},
|
|
85
|
-
var
|
|
86
|
-
return
|
|
51
|
+
}, w), !1, !0), s(n, "pointerdown", F.onThumbPointerDown, !0), u((t) => {
|
|
52
|
+
var r = k(), i = e("relative rounded-full bg-border", "hover:bg-neutral-400 dark:hover:bg-white/30", D() ? "bg-neutral-500 dark:bg-white/40" : "", "transition-colors duration-100", A() ? "min-h-5 w-full" : "min-w-5 h-full"), a = M();
|
|
53
|
+
return r !== t.e && f(n, "data-orientation", t.e = r), i !== t.t && c(n, t.t = i), t.a = m(n, a, t.a), t;
|
|
87
54
|
}, {
|
|
88
55
|
e: void 0,
|
|
89
56
|
t: void 0,
|
|
@@ -91,8 +58,8 @@ var g = /*#__PURE__*/ l("<div data-slot=scroll-area-scrollbar role=scrollbar ari
|
|
|
91
58
|
}), t;
|
|
92
59
|
})();
|
|
93
60
|
};
|
|
94
|
-
|
|
61
|
+
l(["pointerdown"]);
|
|
95
62
|
//#endregion
|
|
96
|
-
export {
|
|
63
|
+
export { S as ScrollBar };
|
|
97
64
|
|
|
98
65
|
//# sourceMappingURL=ScrollBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollBar.js","names":["createMemo","createSignal","mergeProps","onCleanup","splitProps","ScrollBarProps","clsx","useScrollAreaContext","MIN_THUMB_PX","ScrollBar","props","ctx","trackEl","HTMLDivElement","merged","orientation","const","local","others","active","setActive","isVertical","metrics","vertical","horizontal","thumbStyle","m","trackSize","clientHeight","clientWidth","trackInnerSize","rawThumbSize","thumbRatio","thumbSize","Math","max","maxOffset","offset","thumbOffset","height","transform","width","ariaValueNow","round","onThumbPointerDown","e","PointerEvent","preventDefault","stopPropagation","viewport","viewportRef","setDragging","startPointer","clientY","clientX","startScroll","scrollTop","scrollLeft","maxScroll","scrollHeight","scrollWidth","currentTarget","scrollRatio","onMove","me","delta","newScroll","min","onUp","window","removeEventListener","addEventListener","onTrackPointerDown","target","HTMLElement","dataset","slot","rect","getBoundingClientRect","clickPos","top","left","scrollTo","behavior","onKeyDown","KeyboardEvent","step","pageSize","keyMap","Record","ArrowDown","ArrowRight","ArrowUp","ArrowLeft","PageDown","PageUp","Home","Infinity","End","key","undefined","visible","hovering","dragging","_el$","_tmpl$","_el$2","firstChild","$$keydown","$$pointerdown","_ref$","_$use","_$spread","_$mergeProps","aria-orientation","aria-valuenow","data-orientation","data-hovering","class","_$effect","_p$","_v$","_v$2","_v$3","_$setAttribute","t","_$className","a","_$style","_$delegateEvents","mergeProps","_$use","_$mergeProps","_$setAttribute","_$className","_$style","_$delegateEvents","mergeProps$1","_tmpl$","MIN_THUMB_PX","ScrollBar","ctx","useScrollAreaContext","trackEl","merged","props","local","others","splitProps","active","setActive","createSignal","isVertical","metrics","createMemo","thumbStyle","m","trackInnerSize","rawThumbSize","thumbSize","offset","ariaValueNow","onThumbPointerDown","viewport","startPointer","startScroll","maxScroll","scrollRatio","onMove","delta","me","newScroll","onUp","onCleanup","onTrackPointerDown","rect","target","onKeyDown","pageSize","visible","_el$","_el$2","_ref$","use","spread","mergeProps","\"class\"","clsx","effect","_v$","_v$2","_v$3","_p$","setAttribute","className","style","delegateEvents"],"sources":["../../../../src/components/scroll-area/ScrollBar/ScrollBar.tsx"],"sourcesContent":["import {\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n splitProps,\n} from \"solid-js\";\nimport type { ScrollBarProps } from \"./ScrollBar.types\";\nimport { clsx } from \"~/utils\";\nimport { useScrollAreaContext } from \"../ScrollArea\";\n\n// Minimum thumb length in px so it's always clickable\nconst MIN_THUMB_PX = 20;\n\nexport const ScrollBar = (props: ScrollBarProps) => {\n const ctx = useScrollAreaContext();\n\n let trackEl!: HTMLDivElement;\n\n const merged = mergeProps({ orientation: \"vertical\" } as const, props);\n\n const [local, others] = splitProps(merged, [\n \"orientation\",\n \"class\",\n \"classList\",\n ]);\n\n const [active, setActive] = createSignal(false);\n const isVertical = () => local.orientation === \"vertical\";\n\n const metrics = createMemo(() =>\n isVertical() ? ctx.vertical() : ctx.horizontal(),\n );\n\n /**\n * Compute thumb CSS: we clamp to MIN_THUMB_PX, then shift the offset so the\n * thumb never overflows the track.\n */\n const thumbStyle = createMemo(() => {\n const m = metrics();\n\n const trackSize = isVertical()\n ? (trackEl?.clientHeight ?? 0)\n : (trackEl?.clientWidth ?? 0);\n\n const trackInnerSize = trackSize - 2; // track有内边距\n\n const rawThumbSize = trackInnerSize * m.thumbRatio;\n const thumbSize = Math.max(rawThumbSize, MIN_THUMB_PX);\n\n // Adjust offset to account for clamping\n const maxOffset = Math.max(0, trackInnerSize - thumbSize);\n const offset = maxOffset * m.thumbOffset;\n\n if (isVertical()) {\n return {\n height: `${thumbSize}px`,\n transform: `translateY(${offset}px)`,\n };\n }\n return {\n width: `${thumbSize}px`,\n transform: `translateX(${offset}px)`,\n };\n });\n\n // ARIA value: 0–100 integer representing scroll position\n const ariaValueNow = createMemo(() =>\n Math.round(metrics().thumbOffset * 100),\n );\n\n // ── Drag handling ─────────────────────────────────────────────────────────\n function onThumbPointerDown(e: PointerEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n const viewport = ctx.viewportRef();\n if (!viewport) return;\n\n ctx.setDragging(local.orientation);\n setActive(true);\n\n const startPointer = isVertical() ? e.clientY : e.clientX;\n const startScroll = isVertical() ? viewport.scrollTop : viewport.scrollLeft;\n const maxScroll = isVertical()\n ? viewport.scrollHeight - viewport.clientHeight\n : viewport.scrollWidth - viewport.clientWidth;\n\n const trackSize = isVertical() ? trackEl.clientHeight : trackEl.clientWidth;\n const trackInnerSize = trackSize - 2; // track有内边距\n\n const thumbSize = isVertical()\n ? (e.currentTarget as HTMLDivElement).clientHeight\n : (e.currentTarget as HTMLDivElement).clientWidth;\n const scrollRatio = maxScroll / (trackInnerSize - thumbSize);\n\n function onMove(me: PointerEvent) {\n const delta = (isVertical() ? me.clientY : me.clientX) - startPointer;\n\n const newScroll = Math.max(\n 0,\n Math.min(maxScroll, startScroll + delta * scrollRatio),\n );\n if (isVertical()) {\n viewport!.scrollTop = newScroll;\n } else {\n viewport!.scrollLeft = newScroll;\n }\n }\n\n function onUp() {\n ctx.setDragging(null);\n setActive(false);\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n }\n\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n\n onCleanup(() => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n });\n }\n\n // ── Track click: page-scroll (click above/below thumb) ───────────────────\n function onTrackPointerDown(e: PointerEvent) {\n // Ignore if the target is the thumb itself\n if ((e.target as HTMLElement).dataset.slot === \"scroll-area-thumb\") return;\n\n const viewport = ctx.viewportRef();\n if (!viewport) return;\n\n const rect = trackEl.getBoundingClientRect();\n const clickPos = isVertical()\n ? (e.clientY - rect.top) / rect.height\n : (e.clientX - rect.left) / rect.width;\n\n const maxScroll = isVertical()\n ? viewport.scrollHeight - viewport.clientHeight\n : viewport.scrollWidth - viewport.clientWidth;\n\n const target = clickPos * maxScroll;\n\n viewport.scrollTo({\n [isVertical() ? \"top\" : \"left\"]: target,\n behavior: \"smooth\",\n });\n }\n\n // ── Keyboard scrolling on the scrollbar track ─────────────────────────────\n function onKeyDown(e: KeyboardEvent) {\n const viewport = ctx.viewportRef();\n if (!viewport) return;\n\n const step = 40; // px per keypress\n const pageSize = isVertical()\n ? viewport.clientHeight\n : viewport.clientWidth;\n\n const keyMap: Record<string, number> = {\n ArrowDown: step,\n ArrowRight: step,\n ArrowUp: -step,\n ArrowLeft: -step,\n PageDown: pageSize,\n PageUp: -pageSize,\n Home: -Infinity,\n End: Infinity,\n };\n\n const delta = keyMap[e.key];\n if (delta === undefined) return;\n\n e.preventDefault();\n\n if (isVertical()) {\n viewport.scrollTop = Math.max(\n 0,\n Math.min(\n viewport.scrollHeight - viewport.clientHeight,\n delta === Infinity\n ? viewport.scrollHeight\n : delta === -Infinity\n ? 0\n : viewport.scrollTop + delta,\n ),\n );\n } else {\n viewport.scrollLeft = Math.max(\n 0,\n Math.min(\n viewport.scrollWidth - viewport.clientWidth,\n delta === Infinity\n ? viewport.scrollWidth\n : delta === -Infinity\n ? 0\n : viewport.scrollLeft + delta,\n ),\n );\n }\n }\n\n // ── Visibility: show while hovering or dragging ───────────────────────────\n const visible = createMemo(\n () => ctx.hovering() || ctx.dragging() === props.orientation || active(),\n );\n\n return (\n <div\n ref={trackEl}\n data-slot=\"scroll-area-scrollbar\"\n // WCAG 4.1.2: expose as scrollbar widget\n role=\"scrollbar\"\n aria-controls=\"scroll-area-viewport\"\n aria-orientation={local.orientation}\n aria-valuenow={ariaValueNow()}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={0}\n onPointerDown={onTrackPointerDown}\n onKeyDown={onKeyDown}\n data-orientation={local.orientation}\n data-hovering={ctx.hovering() ? \"\" : undefined}\n class={clsx(\n // Layout\n \"absolute touch-none select-none transition-opacity duration-150\",\n // Opacity — visible on hover/drag, hidden otherwise\n visible() ? \"opacity-100\" : \"opacity-0\",\n // Axis-specific positioning & size\n isVertical()\n ? \"right-0 top-0 h-full w-2.5 border-l border-l-transparent p-px flex flex-col\"\n : \"bottom-0 left-0 w-full h-2.5 border-t border-t-transparent p-px flex flex-row\",\n // Keyboard focus ring\n \"outline-none focus-visible:ring-2 focus-visible:ring-neutral-400/70 dark:focus-visible:ring-neutral-500/70\",\n local.class,\n )}\n {...others}\n >\n <div\n data-slot=\"scroll-area-thumb\"\n onPointerDown={onThumbPointerDown}\n data-orientation={local.orientation}\n class={clsx(\n \"relative rounded-full bg-border\",\n // Hover / active state\n \"hover:bg-neutral-400 dark:hover:bg-white/30\",\n active() ? \"bg-neutral-500 dark:bg-white/40\" : \"\",\n \"transition-colors duration-100\",\n // Ensure thumb is always reachable\n isVertical() ? \"min-h-5 w-full\" : \"min-w-5 h-full\",\n )}\n style={thumbStyle()}\n />\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScrollBar.js","names":["createMemo","createSignal","mergeProps","splitProps","ScrollBarProps","clsx","useScrollAreaContext","computeAriaValueNow","computeThumbStyle","isScrollBarVisible","isVertical","useScrollBarInteraction","ScrollBar","props","ctx","merged","orientation","const","local","others","trackEl","setTrackEl","HTMLDivElement","active","setActive","isVerticalAxis","metrics","vertical","horizontal","thumbStyle","el","trackSize","clientHeight","clientWidth","ariaValueNow","visible","hovering","dragging","interaction","track","viewport","viewportRef","onDragChange","setDragging","_el$","_tmpl$","_el$2","firstChild","_$use","_$spread","_$mergeProps","aria-orientation","aria-valuenow","onPointerDown","onTrackPointerDown","onKeyDown","data-orientation","data-hovering","undefined","class","classList","_$addEventListener","onThumbPointerDown","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","_$style","_$delegateEvents","mergeProps","_$mergeProps","_$setAttribute","_$className","_$style","_$delegateEvents","mergeProps$1","_tmpl$","ScrollBar","ctx","useScrollAreaContext","merged","props","local","others","splitProps","trackEl","setTrackEl","createSignal","active","setActive","orientation","isVerticalAxis","isVertical","metrics","createMemo","thumbStyle","el","trackSize","computeThumbStyle","ariaValueNow","computeAriaValueNow","visible","isScrollBarVisible","interaction","useScrollBarInteraction","dragging","_el$","_el$2","use","spread","mergeProps","\"class\"","clsx","addEventListener","effect","_v$","_v$2","_v$3","_p$","setAttribute","className","style","delegateEvents"],"sources":["../../../../src/components/scroll-area/ScrollBar/ScrollBar.tsx"],"sourcesContent":["import { createMemo, createSignal, mergeProps, splitProps } from \"solid-js\";\nimport type { ScrollBarProps } from \"./ScrollBar.types\";\nimport { clsx } from \"~/utils\";\nimport { useScrollAreaContext } from \"../ScrollArea\";\nimport {\n computeAriaValueNow,\n computeThumbStyle,\n isScrollBarVisible,\n isVertical,\n} from \"./ScrollBar.utils\";\nimport { useScrollBarInteraction } from \"./useScrollBarInteraction\";\n\n/**\n * 自定义滚动条。\n *\n * 职责边界(SRP):\n * - 数值/几何换算 → `ScrollBar.utils.ts`(纯函数,可独立单测)\n * - 指针/键盘事件 → `useScrollBarInteraction.ts`\n * - 本文件只负责:从 Context 读取指标、组装状态、渲染 DOM 与样式\n */\nexport const ScrollBar = (props: ScrollBarProps) => {\n const ctx = useScrollAreaContext();\n\n const merged = mergeProps({ orientation: \"vertical\" } as const, props);\n\n const [local, others] = splitProps(merged, [\n \"orientation\",\n \"class\",\n \"classList\",\n ]);\n\n const [trackEl, setTrackEl] = createSignal<HTMLDivElement>();\n const [active, setActive] = createSignal(false);\n\n const orientation = () => local.orientation;\n const isVerticalAxis = () => isVertical(orientation());\n\n const metrics = createMemo(() =>\n isVerticalAxis() ? ctx.vertical() : ctx.horizontal(),\n );\n\n /** 滑块内联样式:先夹住最小长度,再重算位移避免溢出 track */\n const thumbStyle = createMemo(() => {\n const el = trackEl();\n const trackSize = el\n ? isVerticalAxis()\n ? el.clientHeight\n : el.clientWidth\n : 0;\n return computeThumbStyle(orientation(), metrics(), trackSize);\n });\n\n const ariaValueNow = createMemo(() => computeAriaValueNow(metrics()));\n\n const visible = createMemo(() =>\n isScrollBarVisible(ctx.hovering(), ctx.dragging(), orientation(), active()),\n );\n\n const interaction = useScrollBarInteraction({\n track: trackEl,\n viewport: ctx.viewportRef,\n orientation,\n onDragChange: (dragging) => {\n ctx.setDragging(dragging ? orientation() : null);\n setActive(dragging);\n },\n });\n\n return (\n <div\n ref={setTrackEl}\n data-slot=\"scroll-area-scrollbar\"\n // WCAG 4.1.2: expose as scrollbar widget\n role=\"scrollbar\"\n aria-controls=\"scroll-area-viewport\"\n aria-orientation={orientation()}\n aria-valuenow={ariaValueNow()}\n aria-valuemin={0}\n aria-valuemax={100}\n tabIndex={0}\n onPointerDown={interaction.onTrackPointerDown}\n onKeyDown={interaction.onKeyDown}\n data-orientation={orientation()}\n data-hovering={ctx.hovering() ? \"\" : undefined}\n class={clsx(\n // Layout\n \"absolute touch-none select-none transition-opacity duration-150\",\n // Opacity — visible on hover/drag, hidden otherwise\n visible() ? \"opacity-100\" : \"opacity-0\",\n // Axis-specific positioning & size\n isVerticalAxis()\n ? \"right-0 top-0 h-full w-2.5 border-l border-l-transparent p-px flex flex-col\"\n : \"bottom-0 left-0 w-full h-2.5 border-t border-t-transparent p-px flex flex-row\",\n // Keyboard focus ring\n \"outline-none focus-visible:ring-2 focus-visible:ring-neutral-400/70 dark:focus-visible:ring-neutral-500/70\",\n local.class,\n local.classList,\n )}\n classList={local.classList}\n {...others}\n >\n <div\n data-slot=\"scroll-area-thumb\"\n onPointerDown={interaction.onThumbPointerDown}\n data-orientation={orientation()}\n class={clsx(\n \"relative rounded-full bg-border\",\n // Hover / active state\n \"hover:bg-neutral-400 dark:hover:bg-white/30\",\n active() ? \"bg-neutral-500 dark:bg-white/40\" : \"\",\n \"transition-colors duration-100\",\n // Ensure thumb is always reachable\n isVerticalAxis() ? \"min-h-5 w-full\" : \"min-w-5 h-full\",\n )}\n style={thumbStyle()}\n />\n </div>\n );\n};\n"],"mappings":";;;;;;;kMAoBaY,KAAaC,MAA0B;CAClD,IAAMC,IAAMR,EAAqB,GAE3BS,IAASb,EAAW,EAAEc,aAAa,WAAW,GAAYH,CAAK,GAE/D,CAACK,GAAOC,KAAUhB,EAAWY,GAAQ;EACzC;EACA;EACA;CAAW,CACZ,GAEK,CAACK,GAASC,KAAcpB,EAA6B,GACrD,CAACsB,GAAQC,KAAavB,EAAa,EAAK,GAExCe,UAAoBE,EAAMF,aAC1BS,UAAuBf,EAAWM,EAAY,CAAC,GAE/CU,IAAU1B,QACdyB,EAAe,IAAIX,EAAIa,SAAS,IAAIb,EAAIc,WAAW,CACrD,GAGMC,IAAa7B,QAAiB;EAClC,IAAM8B,IAAKV,EAAQ,GACbW,IAAYD,IACdL,EAAe,IACbK,EAAGE,eACHF,EAAGG,cACL;EACJ,OAAOzB,EAAkBQ,EAAY,GAAGU,EAAQ,GAAGK,CAAS;CAC9D,CAAC,GAEKG,IAAelC,QAAiBO,EAAoBmB,EAAQ,CAAC,CAAC,GAE9DS,IAAUnC,QACdS,EAAmBK,EAAIsB,SAAS,GAAGtB,EAAIuB,SAAS,GAAGrB,EAAY,GAAGO,EAAO,CAAC,CAC5E,GAEMe,IAAc3B,EAAwB;EAC1C4B,OAAOnB;EACPoB,UAAU1B,EAAI2B;EACdzB;EACA0B,eAAeL,MAAa;GAE1Bb,AADAV,EAAI6B,YAAYN,IAAWrB,EAAY,IAAI,IAAI,GAC/CQ,EAAUa,CAAQ;EACpB;CACF,CAAC;CAED,cAAA;EAAA,IAAAO,IAAAC,EAAA,GAAAC,IAAAF,EAAAG;EA8CyB,OA9CzBC,EAES3B,GAAUuB,CAAA,GAAAK,EAAAL,GAAAM,EAAA;GAAA,IAAA,qBAAA;IAAA,OAKGlC,EAAY;GAAC;GAAA,IAAA,kBAAA;IAAA,OAChBkB,EAAa;GAAC;GAAA,IAI7BmB,gBAAa;IAAA,OAAEf,EAAYgB;GAAkB;GAAA,IAC7CC,YAAS;IAAA,OAAEjB,EAAYiB;GAAS;GAAA,IAAA,qBAAA;IAAA,OACdvC,EAAY;GAAC;GAAA,IAAA,kBAAA;IAAA,OAChBF,EAAIsB,SAAS,IAAI,KAAKsB,KAAAA;GAAS;GAAA,IAAA2D,QAAA;IAAA,OACvChH,EAEL,mEAEA8B,EAAQ,IAAI,gBAAgB,aAE5BV,EAAe,IACX,gFACA,iFAEJ,8GACAP,EAAMyC,OACNzC,EAAM0C,SACR;GAAC;GAAA,IACDA,YAAS;IAAA,OAAE1C,EAAM0C;GAAS;EAAA,GACtBzC,CAAM,GAAA,IAAA,EAAA,GAAA0C,EAAAf,GAAA,eAIOR,EAAYwB,oBAAkB,EAAA,GAAAC,GAAAC,MAAA;GAAA,IAAAC,IAC3BjD,EAAY,GAACkD,IACxB7D,EACL,mCAEA,+CACAkB,EAAO,IAAI,oCAAoC,IAC/C,kCAEAE,EAAe,IAAI,mBAAmB,gBACxC,GAAC0C,IACMtC,EAAW;GAAC,OAAAoC,MAAAD,EAAAI,KAAAC,EAAAvB,GAAA,oBAAAkB,EAAAI,IAAAH,CAAA,GAAAC,MAAAF,EAAAM,KAAAC,EAAAzB,GAAAkB,EAAAM,IAAAJ,CAAA,GAAAF,EAAAQ,IAAAC,EAAA3B,GAAAqB,GAAAH,EAAAQ,CAAA,GAAAR;EAAA,GAAA;GAAAI,GAAAV,KAAAA;GAAAY,GAAAZ,KAAAA;GAAAc,GAAAd,KAAAA;EAAA,CAAA,GAAAd;CAAA,EAAA,CAAA;AAI3B;AAAE8B,EAAA,CAAA,aAAA,CAAA"}
|