@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":"Combobox.js","names":["createMemo","createSignal","createUniqueId","JSX","useScrollLock","ComboboxContext","ComboboxContextValue","ComboboxProps","DEFAULT_ITEM_TO_STRING","item","String","Combobox","props","T","Element","items","itemToStringValue","initialValue","value","undefined","defaultValue","inputValue","setInputValue","Array","isArray","filterValue","setFilterValue","internalValue","setInternalValue","setValue","next","onValueChange","internalOpen","setInternalOpen","defaultOpen","open","disabled","lockScroll","allowedSelector","multiple","setOpen","onOpenChange","activeIndex","setActiveIndex","
|
|
1
|
+
{"version":3,"file":"Combobox.js","names":["createMemo","createSignal","createUniqueId","JSX","useScrollLock","createChangeEventDetails","ComboboxContext","ComboboxContextValue","ComboboxOpenChangeReason","ComboboxProps","ComboboxValueChangeReason","DEFAULT_ITEM_TO_STRING","item","String","Combobox","props","T","Element","items","itemToStringValue","initialValue","value","undefined","defaultValue","inputValue","setInputValue","Array","isArray","filterValue","setFilterValue","internalValue","setInternalValue","setValue","next","reason","event","Event","details","reference","onValueChange","isCanceled","internalOpen","setInternalOpen","defaultOpen","open","disabled","lockScroll","allowedSelector","multiple","setOpen","onOpenChange","activeIndex","setActiveIndex","setReference","HTMLElement","floating","setFloating","contentId","listId","optionId","isGrouped","some","filteredItems","query","toLowerCase","trim","filter","includes","selectedItems","current","isSelected","selected","close","selectItem","applied","ctx","_$createComponent","Provider","children","_$createComponent","DEFAULT_ITEM_TO_STRING","item","Combobox","items","createMemo","props","itemToStringValue","initialValue","inputValue","setInputValue","createSignal","filterValue","setFilterValue","internalValue","setInternalValue","value","setValue","details","createChangeEventDetails","reason","event","reference","next","internalOpen","setInternalOpen","open","disabled","lockScroll","multiple","setOpen","activeIndex","setActiveIndex","setReference","floating","setFloating","contentId","createUniqueId","listId","optionId","isGrouped","filteredItems","query","selectedItems","current","isSelected","selected","close","ctx","createComponent","ComboboxContext"],"sources":["../../../../src/components/combobox/Combobox/Combobox.tsx"],"sourcesContent":["import { createMemo, createSignal, createUniqueId, type JSX } from \"solid-js\";\nimport { useScrollLock } from \"~/hooks\";\nimport { createChangeEventDetails } from \"~/utils\";\nimport { ComboboxContext } from \"./Combobox.context\";\nimport type {\n ComboboxContextValue,\n ComboboxOpenChangeReason,\n ComboboxProps,\n ComboboxValueChangeReason,\n} from \"./Combobox.types\";\n\nconst DEFAULT_ITEM_TO_STRING = (item: any) => String(item);\n\nexport function Combobox<T = any>(props: ComboboxProps<T>): JSX.Element {\n const items = createMemo(() => props.items);\n const itemToStringValue = createMemo(\n () => props.itemToStringValue ?? DEFAULT_ITEM_TO_STRING,\n );\n\n const initialValue =\n props.value !== undefined ? props.value : props.defaultValue;\n const [inputValue, setInputValue] = createSignal(\n initialValue == null || Array.isArray(initialValue)\n ? \"\"\n : itemToStringValue()(initialValue as T),\n );\n const [filterValue, setFilterValue] = createSignal(\"\");\n const [internalValue, setInternalValue] = createSignal<\n T | T[] | null | undefined\n >(props.defaultValue);\n const value = createMemo(() =>\n props.value !== undefined ? props.value : internalValue(),\n );\n\n const setValue = (\n next: T | T[] | null,\n reason: ComboboxValueChangeReason = \"none\",\n event?: Event,\n ): boolean => {\n const details = createChangeEventDetails(reason, event, reference());\n // 先回调再落状态:调用方可以在 details.cancel() 里否决本次变更\n props.onValueChange?.(next, details);\n if (details.isCanceled) return false;\n if (props.value === undefined) setInternalValue(next as any);\n return true;\n };\n\n const [internalOpen, setInternalOpen] = createSignal(\n props.defaultOpen ?? false,\n );\n const open = createMemo(() =>\n props.open !== undefined ? props.open : internalOpen(),\n );\n const disabled = createMemo(() => !!props.disabled);\n const lockScroll = createMemo(() => props.lockScroll ?? true);\n\n // 打开期间默认锁定页面滚动:锁住文档滚动并拦截浮层之外的滚轮/触摸,\n // 面板自身仍可滚动。传 lockScroll={false} 可关闭该行为。\n useScrollLock(() => open() && lockScroll(), {\n allowedSelector: '[data-slot=\"combobox-content\"]',\n });\n\n const multiple = createMemo(() => !!props.multiple);\n const setOpen = (\n next: boolean,\n reason: ComboboxOpenChangeReason = \"none\",\n event?: Event,\n ) => {\n const details = createChangeEventDetails(reason, event, reference());\n props.onOpenChange?.(next, details);\n if (details.isCanceled) return;\n if (props.open === undefined) setInternalOpen(next);\n };\n\n const [activeIndex, setActiveIndex] = createSignal(-1);\n const [reference, setReference] = createSignal<HTMLElement>();\n const [floating, setFloating] = createSignal<HTMLElement>();\n const contentId = `combobox-content-${createUniqueId()}`;\n const listId = `combobox-list-${createUniqueId()}`;\n // 选项 id 由 listId + 值派生:aria-activedescendant 需要能指向当前高亮项\n const optionId = (value: unknown) => `${listId}-option-${String(value)}`;\n\n const isGrouped = createMemo(() =>\n items().some(\n (item) =>\n item && typeof item === \"object\" && Array.isArray((item as any).items),\n ),\n );\n\n const filteredItems = createMemo(() => {\n const query = filterValue().toLowerCase().trim();\n if (!query) return items();\n return items().filter((item) =>\n itemToStringValue()(item).toLowerCase().includes(query),\n );\n });\n\n const selectedItems = createMemo(() => {\n const current = value();\n if (current == null) return [] as T[];\n return Array.isArray(current) ? current : [current];\n });\n\n const isSelected = (item: T) =>\n selectedItems().some((selected) => selected === item);\n\n const close = (reason: ComboboxOpenChangeReason = \"none\", event?: Event) =>\n setOpen(false, reason, event);\n\n const selectItem = (item: T, event?: Event) => {\n if (disabled()) return;\n const applied = setValue(\n props.multiple\n ? isSelected(item)\n ? selectedItems().filter((selected) => selected !== item)\n : [...selectedItems(), item]\n : item,\n \"item-press\",\n event,\n );\n // 值变更被 cancel() 时,输入框的展示与关闭也不该跟着变,\n // 否则会出现\"值没改但输入框被回填/面板被关掉\"的不一致状态\n if (!applied) return;\n if (props.multiple) {\n setInputValue(\"\");\n setFilterValue(\"\");\n } else {\n setInputValue(itemToStringValue()(item));\n setFilterValue(\"\");\n close(\"item-press\", event);\n }\n };\n\n const ctx: ComboboxContextValue<T> = {\n items,\n filteredItems,\n isGrouped,\n inputValue,\n setInputValue,\n filterValue,\n setFilterValue,\n open,\n setOpen,\n disabled,\n multiple,\n value,\n setValue,\n selectItem,\n isSelected,\n itemToStringValue: (item) => itemToStringValue()(item),\n activeIndex,\n setActiveIndex,\n reference,\n setReference,\n floating,\n setFloating,\n contentId,\n listId,\n optionId,\n close,\n };\n\n return (\n <ComboboxContext.Provider value={ctx}>\n {props.children}\n </ComboboxContext.Provider>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { Accessor, ParentProps } from 'solid-js';
|
|
2
|
+
import { ChangeEventDetails } from '../../../utils';
|
|
3
|
+
/** 值变更的触发来源(对齐 Base UI 的 reason 取值风格) */
|
|
4
|
+
export type ComboboxValueChangeReason = "item-press" | "trigger-press" | "clear-press" | "input-change" | "chip-remove" | "none";
|
|
5
|
+
/** 开合变更的触发来源 */
|
|
6
|
+
export type ComboboxOpenChangeReason = "trigger-press" | "input-focus" | "input-change" | "item-press" | "clear-press" | "escape-key" | "outside-press" | "none";
|
|
2
7
|
export interface ComboboxProps<T = any> extends ParentProps {
|
|
3
8
|
items: T[];
|
|
4
9
|
value?: T | T[] | null;
|
|
5
10
|
defaultValue?: T | T[];
|
|
6
|
-
onValueChange?: (value: T | T[] | null) => void;
|
|
11
|
+
onValueChange?: (value: T | T[] | null, details: ChangeEventDetails<ComboboxValueChangeReason>) => void;
|
|
7
12
|
multiple?: boolean;
|
|
8
13
|
disabled?: boolean;
|
|
9
14
|
/**
|
|
@@ -15,7 +20,7 @@ export interface ComboboxProps<T = any> extends ParentProps {
|
|
|
15
20
|
itemToStringValue?: (item: T) => string;
|
|
16
21
|
open?: boolean;
|
|
17
22
|
defaultOpen?: boolean;
|
|
18
|
-
onOpenChange?: (open: boolean) => void;
|
|
23
|
+
onOpenChange?: (open: boolean, details: ChangeEventDetails<ComboboxOpenChangeReason>) => void;
|
|
19
24
|
}
|
|
20
25
|
export interface ComboboxContextValue<T = any> {
|
|
21
26
|
items: Accessor<T[]>;
|
|
@@ -26,12 +31,12 @@ export interface ComboboxContextValue<T = any> {
|
|
|
26
31
|
filterValue: Accessor<string>;
|
|
27
32
|
setFilterValue: (value: string) => void;
|
|
28
33
|
open: Accessor<boolean>;
|
|
29
|
-
setOpen: (open: boolean) => void;
|
|
34
|
+
setOpen: (open: boolean, reason?: ComboboxOpenChangeReason, event?: Event) => void;
|
|
30
35
|
disabled: Accessor<boolean>;
|
|
31
36
|
multiple: Accessor<boolean>;
|
|
32
37
|
value: Accessor<T | T[] | null | undefined>;
|
|
33
|
-
setValue: (value: T | T[] | null) => void;
|
|
34
|
-
selectItem: (item: T) => void;
|
|
38
|
+
setValue: (value: T | T[] | null, reason?: ComboboxValueChangeReason, event?: Event) => void;
|
|
39
|
+
selectItem: (item: T, event?: Event) => void;
|
|
35
40
|
isSelected: (item: T) => boolean;
|
|
36
41
|
itemToStringValue: (item: T) => string;
|
|
37
42
|
activeIndex: Accessor<number>;
|
|
@@ -41,5 +46,9 @@ export interface ComboboxContextValue<T = any> {
|
|
|
41
46
|
floating: Accessor<HTMLElement | undefined>;
|
|
42
47
|
setFloating: (el: HTMLElement | undefined) => void;
|
|
43
48
|
contentId: string;
|
|
44
|
-
|
|
49
|
+
/** listbox 元素的 id,供输入框的 aria-controls 指向 */
|
|
50
|
+
listId: string;
|
|
51
|
+
/** 某一项对应的 option 元素 id,供 aria-activedescendant 指向 */
|
|
52
|
+
optionId: (value: unknown) => string;
|
|
53
|
+
close: (reason?: ComboboxOpenChangeReason, event?: Event) => void;
|
|
45
54
|
}
|
|
@@ -7,9 +7,13 @@ function c(r) {
|
|
|
7
7
|
let o = t("ComboboxChipsInput");
|
|
8
8
|
return (() => {
|
|
9
9
|
var t = s();
|
|
10
|
-
return t
|
|
10
|
+
return t.$$keydown = (e) => {
|
|
11
|
+
if (e.key !== "Backspace" || o.inputValue() !== "") return;
|
|
12
|
+
let t = o.value();
|
|
13
|
+
Array.isArray(t) && t.length !== 0 && (e.preventDefault(), o.setValue(t.slice(0, -1)));
|
|
14
|
+
}, t.addEventListener("focus", () => o.setOpen(!0, "input-focus")), t.$$input = (e) => {
|
|
11
15
|
let t = e.currentTarget.value;
|
|
12
|
-
o.setInputValue(t), o.setFilterValue(t), o.setOpen(!0);
|
|
16
|
+
o.setInputValue(t), o.setFilterValue(t), o.setOpen(!0, "input-change");
|
|
13
17
|
}, i((i) => {
|
|
14
18
|
var s = e("min-w-16 flex-1 bg-transparent outline-none", r.class), c = r.placeholder, l = o.disabled();
|
|
15
19
|
return s !== i.e && n(t, i.e = s), c !== i.t && a(t, "placeholder", i.t = c), l !== i.a && (t.disabled = i.a = l), i;
|
|
@@ -20,7 +24,7 @@ function c(r) {
|
|
|
20
24
|
}), i(() => t.value = o.inputValue()), t;
|
|
21
25
|
})();
|
|
22
26
|
}
|
|
23
|
-
r(["input"]);
|
|
27
|
+
r(["input", "keydown"]);
|
|
24
28
|
//#endregion
|
|
25
29
|
export { c as ComboboxChipsInput };
|
|
26
30
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxChipsInput.js","names":["clsx","useComboboxContext","ComboboxChipsInput","props","placeholder","class","ctx","_el$","_tmpl$","addEventListener","setOpen","$$input","
|
|
1
|
+
{"version":3,"file":"ComboboxChipsInput.js","names":["clsx","useComboboxContext","ComboboxChipsInput","props","placeholder","class","ctx","_el$","_tmpl$","$$keydown","e","key","inputValue","current","value","Array","isArray","length","preventDefault","setValue","slice","addEventListener","setOpen","$$input","next","currentTarget","setInputValue","setFilterValue","_$effect","_p$","_v$","_v$2","_v$3","disabled","_$className","t","_$setAttribute","a","undefined","_$delegateEvents","_$className","_$setAttribute","_$delegateEvents","_tmpl$","ComboboxChipsInput","ctx","useComboboxContext","_el$","current","next","effect","_v$","clsx","props","_v$2","_v$3","_p$","className","setAttribute","delegateEvents"],"sources":["../../../../src/components/combobox/ComboboxChipsInput/ComboboxChipsInput.tsx"],"sourcesContent":["import { clsx } from \"~/utils\";\nimport { useComboboxContext } from \"../Combobox/Combobox.context\";\n\nexport function ComboboxChipsInput(props: {\n placeholder?: string;\n class?: string;\n}) {\n const ctx = useComboboxContext(\"ComboboxChipsInput\");\n return (\n <input\n data-slot=\"combobox-chip-input\"\n class={clsx(\"min-w-16 flex-1 bg-transparent outline-none\", props.class)}\n placeholder={props.placeholder}\n disabled={ctx.disabled()}\n value={ctx.inputValue()}\n onInput={(e) => {\n const next = e.currentTarget.value;\n ctx.setInputValue(next);\n ctx.setFilterValue(next);\n ctx.setOpen(true, \"input-change\");\n }}\n onFocus={() => ctx.setOpen(true, \"input-focus\")}\n onKeyDown={(e) => {\n // 输入框为空时按 Backspace 删除最后一颗 chip(chips 模式的常见约定)\n if (e.key !== \"Backspace\") return;\n if (ctx.inputValue() !== \"\") return;\n const current = ctx.value();\n if (!Array.isArray(current) || current.length === 0) return;\n e.preventDefault();\n ctx.setValue(current.slice(0, -1) as never);\n }}\n />\n );\n}\n"],"mappings":";;;;;AAGA,SAAgBE,EAAmBC,GAGhC;CACD,IAAMG,IAAML,EAAmB,oBAAoB;CACnD,cAAA;EAAA,IAAAM,IAAAC,EAAA;EAM2B,OAN3BD,EAAAE,aAcgBC,MAAM;GAGhB,IADIA,EAAEC,QAAQ,eACVL,EAAIM,WAAW,MAAM,IAAI;GAC7B,IAAMC,IAAUP,EAAIQ,MAAM;GAC1B,AAAKC,MAAMC,QAAQH,CAAO,KAAKA,EAAQI,WAAW,MAClDP,EAAEQ,eAAe,GACjBZ,EAAIa,SAASN,EAAQO,MAAM,GAAG,EAAE,CAAU;EAC5C,GAACb,EAAAc,iBAAA,eATcf,EAAIgB,QAAQ,IAAM,aAAa,CAAC,GAAAf,EAAAgB,WANrCb,MAAM;GACd,IAAMc,IAAOd,EAAEe,cAAcX;GAG7BR,AAFAA,EAAIoB,cAAcF,CAAI,GACtBlB,EAAIqB,eAAeH,CAAI,GACvBlB,EAAIgB,QAAQ,IAAM,cAAc;EAClC,GAACM,GAAAC,MAAA;GAAA,IAAAC,IATM9B,EAAK,+CAA+CG,EAAME,KAAK,GAAC0B,IAC1D5B,EAAMC,aAAW4B,IACpB1B,EAAI2B,SAAS;GAAC,OAAAH,MAAAD,EAAAnB,KAAAwB,EAAA3B,GAAAsB,EAAAnB,IAAAoB,CAAA,GAAAC,MAAAF,EAAAM,KAAAC,EAAA7B,GAAA,eAAAsB,EAAAM,IAAAJ,CAAA,GAAAC,MAAAH,EAAAQ,MAAA9B,EAAA0B,WAAAJ,EAAAQ,IAAAL,IAAAH;EAAA,GAAA;GAAAnB,GAAA4B,KAAAA;GAAAH,GAAAG,KAAAA;GAAAD,GAAAC,KAAAA;EAAA,CAAA,GAAAV,QAAArB,EAAAO,QACjBR,EAAIM,WAAW,CAAC,GAAAL;CAAA,EAAA,CAAA;AAmB7B;AAACgC,EAAA,CAAA,SAAA,SAAA,CAAA"}
|
|
@@ -17,7 +17,7 @@ function i(i) {
|
|
|
17
17
|
return i.class;
|
|
18
18
|
},
|
|
19
19
|
onClick: () => {
|
|
20
|
-
a.setValue(null), a.setInputValue(""), a.setFilterValue(""), a.setOpen(!1);
|
|
20
|
+
a.setValue(null), a.setInputValue(""), a.setFilterValue(""), a.setOpen(!1, "clear-press");
|
|
21
21
|
},
|
|
22
22
|
get icon() {
|
|
23
23
|
return n(r, { class: "\"pointer-events-none" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxClear.js","names":["X","useComboboxContext","InputGroupButton","ComboboxClear","props","disabled","class","ctx","_$createComponent","variant","size","onClick","setValue","setInputValue","setFilterValue","setOpen","icon","_$createComponent","ComboboxClear","ctx","useComboboxContext","createComponent","InputGroupButton","props","\"class\"","X"],"sources":["../../../../src/components/combobox/ComboboxClear/ComboboxClear.tsx"],"sourcesContent":["import { X } from \"lucide-solid\";\nimport { useComboboxContext } from \"../Combobox/Combobox.context\";\nimport { InputGroupButton } from \"~/components/input-group\";\n\nexport function ComboboxClear(props: { disabled?: boolean; class?: string }) {\n const ctx = useComboboxContext(\"ComboboxClear\");\n return (\n <InputGroupButton\n variant=\"ghost\"\n size=\"xs\"\n data-slot=\"combobox-clear\"\n aria-label=\"Clear\"\n disabled={ctx.disabled() || props.disabled}\n class={props.class}\n onClick={() => {\n ctx.setValue(null);\n ctx.setInputValue(\"\");\n ctx.setFilterValue(\"\");\n ctx.setOpen(false);\n }}\n icon={<X class='\"pointer-events-none' />}\n />\n );\n}\n"],"mappings":";;;;;AAIA,SAAgBG,EAAcC,GAA+C;CAC3E,IAAMG,IAAMN,EAAmB,eAAe;CAC9C,OAAAO,EACGN,GAAgB;EACfO,SAAO;EACPC,MAAI;EAAA,aAAA;EAAA,cAAA;EAAA,IAGJL,WAAQ;GAAA,OAAEE,EAAIF,SAAS,KAAKD,EAAMC;EAAQ;EAAA,IAAAmB,QAAA;GAAA,OACnCpB,EAAME;EAAK;EAClBK,eAAe;GAIbJ,AAHAA,EAAIK,SAAS,IAAI,GACjBL,EAAIM,cAAc,EAAE,GACpBN,EAAIO,eAAe,EAAE,GACrBP,EAAIQ,QAAQ,
|
|
1
|
+
{"version":3,"file":"ComboboxClear.js","names":["X","useComboboxContext","InputGroupButton","ComboboxClear","props","disabled","class","ctx","_$createComponent","variant","size","onClick","setValue","setInputValue","setFilterValue","setOpen","icon","_$createComponent","ComboboxClear","ctx","useComboboxContext","createComponent","InputGroupButton","props","\"class\"","X"],"sources":["../../../../src/components/combobox/ComboboxClear/ComboboxClear.tsx"],"sourcesContent":["import { X } from \"lucide-solid\";\nimport { useComboboxContext } from \"../Combobox/Combobox.context\";\nimport { InputGroupButton } from \"~/components/input-group\";\n\nexport function ComboboxClear(props: { disabled?: boolean; class?: string }) {\n const ctx = useComboboxContext(\"ComboboxClear\");\n return (\n <InputGroupButton\n variant=\"ghost\"\n size=\"xs\"\n data-slot=\"combobox-clear\"\n aria-label=\"Clear\"\n disabled={ctx.disabled() || props.disabled}\n class={props.class}\n onClick={() => {\n ctx.setValue(null);\n ctx.setInputValue(\"\");\n ctx.setFilterValue(\"\");\n ctx.setOpen(false, \"clear-press\");\n }}\n icon={<X class='\"pointer-events-none' />}\n />\n );\n}\n"],"mappings":";;;;;AAIA,SAAgBG,EAAcC,GAA+C;CAC3E,IAAMG,IAAMN,EAAmB,eAAe;CAC9C,OAAAO,EACGN,GAAgB;EACfO,SAAO;EACPC,MAAI;EAAA,aAAA;EAAA,cAAA;EAAA,IAGJL,WAAQ;GAAA,OAAEE,EAAIF,SAAS,KAAKD,EAAMC;EAAQ;EAAA,IAAAmB,QAAA;GAAA,OACnCpB,EAAME;EAAK;EAClBK,eAAe;GAIbJ,AAHAA,EAAIK,SAAS,IAAI,GACjBL,EAAIM,cAAc,EAAE,GACpBN,EAAIO,eAAe,EAAE,GACrBP,EAAIQ,QAAQ,IAAO,aAAa;EAClC;EAAC,IACDC,OAAI;GAAA,OAAAR,EAAGR,GAAC,EAAAwB,OAAA,wBAAA,CAAA;EAAA;CAAA,CAAA;AAGd"}
|
|
@@ -13,18 +13,23 @@ function f(f) {
|
|
|
13
13
|
p.open() && g && _ && _.focus();
|
|
14
14
|
});
|
|
15
15
|
let v = () => {
|
|
16
|
+
let e = p.filteredItems()[p.activeIndex()];
|
|
17
|
+
return e === void 0 ? void 0 : p.optionId(e);
|
|
18
|
+
}, y = () => {
|
|
16
19
|
let e = p.value();
|
|
17
20
|
return e == null ? !1 : Array.isArray(e) ? e.length > 0 : e !== "";
|
|
18
|
-
},
|
|
21
|
+
}, b = (e) => {
|
|
19
22
|
if (h()) return;
|
|
20
23
|
let t = p.filteredItems();
|
|
21
|
-
if (e.key === "ArrowDown") e.preventDefault(), p.setOpen(!0), p.setActiveIndex(t.length === 0 ? -1 : (p.activeIndex() + 1) % t.length);
|
|
22
|
-
else if (e.key === "ArrowUp") e.preventDefault(), p.setOpen(!0), p.setActiveIndex(t.length === 0 ? -1 :
|
|
24
|
+
if (e.key === "ArrowDown") e.preventDefault(), p.setOpen(!0, "input-change", e), p.setActiveIndex(t.length === 0 ? -1 : (p.activeIndex() + 1) % t.length);
|
|
25
|
+
else if (e.key === "ArrowUp") e.preventDefault(), p.setOpen(!0, "input-change", e), p.setActiveIndex(t.length === 0 ? -1 : p.activeIndex() <= 0 ? t.length - 1 : p.activeIndex() - 1);
|
|
26
|
+
else if (e.key === "Home") e.preventDefault(), p.setOpen(!0, "input-change", e), p.setActiveIndex(t.length === 0 ? -1 : 0);
|
|
27
|
+
else if (e.key === "End") e.preventDefault(), p.setOpen(!0, "input-change", e), p.setActiveIndex(t.length === 0 ? -1 : t.length - 1);
|
|
23
28
|
else if (e.key === "Enter" && p.open()) {
|
|
24
29
|
e.preventDefault();
|
|
25
30
|
let t = p.filteredItems()[p.activeIndex()];
|
|
26
|
-
t !== void 0 && p.selectItem(t);
|
|
27
|
-
} else e.key === "Escape" && p.open() && (e.preventDefault(), p.close());
|
|
31
|
+
t !== void 0 && p.selectItem(t, e);
|
|
32
|
+
} else e.key === "Escape" && p.open() && (e.preventDefault(), p.close("escape-key", e));
|
|
28
33
|
};
|
|
29
34
|
return o(n, {
|
|
30
35
|
ref: (e) => {
|
|
@@ -41,6 +46,17 @@ function f(f) {
|
|
|
41
46
|
ref: (e) => {
|
|
42
47
|
_ = e;
|
|
43
48
|
},
|
|
49
|
+
role: "combobox",
|
|
50
|
+
get "aria-expanded"() {
|
|
51
|
+
return p.open();
|
|
52
|
+
},
|
|
53
|
+
get "aria-controls"() {
|
|
54
|
+
return s(() => !!p.open())() ? p.listId : void 0;
|
|
55
|
+
},
|
|
56
|
+
"aria-autocomplete": "list",
|
|
57
|
+
get "aria-activedescendant"() {
|
|
58
|
+
return v();
|
|
59
|
+
},
|
|
44
60
|
get placeholder() {
|
|
45
61
|
return m.placeholder;
|
|
46
62
|
},
|
|
@@ -55,18 +71,18 @@ function f(f) {
|
|
|
55
71
|
},
|
|
56
72
|
onInput: (e) => {
|
|
57
73
|
let t = String(e);
|
|
58
|
-
p.setInputValue(t), p.setFilterValue(t), p.setOpen(!0), !p.multiple() && t.trim() === "" && (p.setValue(null), p.setFilterValue(""));
|
|
74
|
+
p.setInputValue(t), p.setFilterValue(t), p.setOpen(!0, "input-change"), !p.multiple() && t.trim() === "" && (p.setValue(null), p.setFilterValue(""));
|
|
59
75
|
},
|
|
60
|
-
onFocus: () => p.setOpen(!0),
|
|
61
|
-
onClick: () => p.setOpen(!0),
|
|
62
|
-
onKeyDown:
|
|
76
|
+
onFocus: () => p.setOpen(!0, "input-focus"),
|
|
77
|
+
onClick: () => p.setOpen(!0, "trigger-press"),
|
|
78
|
+
onKeyDown: b
|
|
63
79
|
}),
|
|
64
80
|
o(r, {
|
|
65
81
|
align: "inline-end",
|
|
66
82
|
get children() {
|
|
67
83
|
return o(c, {
|
|
68
84
|
get when() {
|
|
69
|
-
return s(() => !!(m.showClear &&
|
|
85
|
+
return s(() => !!(m.showClear && y()))() && !h();
|
|
70
86
|
},
|
|
71
87
|
get children() {
|
|
72
88
|
return o(a, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxInput.js","names":["Show","createEffect","mergeProps","onCleanup","JSX","InputGroup","InputGroupAddon","InputGroupInput","clsx","useComboboxContext","ComboboxClear","ComboboxInput","props","placeholder","disabled","showClear","class","children","Element","ctx","local","mountedWithExternalReference","reference","undefined","inputEl","HTMLInputElement","open","focus","
|
|
1
|
+
{"version":3,"file":"ComboboxInput.js","names":["Show","createEffect","mergeProps","onCleanup","JSX","InputGroup","InputGroupAddon","InputGroupInput","clsx","useComboboxContext","ComboboxClear","ComboboxInput","props","placeholder","disabled","showClear","class","children","Element","ctx","local","mountedWithExternalReference","reference","undefined","inputEl","HTMLInputElement","open","focus","activeOptionId","value","filteredItems","activeIndex","optionId","hasValue","current","Array","isArray","length","onKeyDown","e","KeyboardEvent","list","key","preventDefault","setOpen","setActiveIndex","item","selectItem","close","_$createComponent","ref","el","setReference","role","aria-expanded","aria-controls","_$memo","listId","aria-activedescendant","aria-invalid","inputValue","onInput","next","String","setInputValue","setFilterValue","multiple","trim","setValue","onFocus","onClick","align","when","mergeProps","_$createComponent","_$memo","mergeProps$1","ComboboxInput","ctx","useComboboxContext","local","props","disabled","mountedWithExternalReference","inputEl","activeOptionId","value","hasValue","current","onKeyDown","list","item","createComponent","InputGroup","el","onCleanup","\"class\"","clsx","InputGroupInput","memo","next","InputGroupAddon","Show","ComboboxClear"],"sources":["../../../../src/components/combobox/ComboboxInput/ComboboxInput.tsx"],"sourcesContent":["import { Show, createEffect, mergeProps, onCleanup, type JSX } from \"solid-js\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"~/components/input-group\";\nimport { clsx } from \"~/utils\";\nimport { useComboboxContext } from \"../Combobox/Combobox.context\";\nimport { ComboboxClear } from \"../ComboboxClear\";\n\nexport function ComboboxInput(props: {\n placeholder?: string;\n disabled?: boolean;\n showClear?: boolean;\n class?: string;\n \"aria-invalid\"?: string | boolean;\n children?: JSX.Element;\n}) {\n const ctx = useComboboxContext(\"ComboboxInput\");\n const local = mergeProps({ showClear: false }, props);\n const disabled = () => ctx.disabled() || !!local.disabled;\n // 当 ComboboxInput 作为 ComboboxContent 子组件时(Popup 模式),\n // 此时 reference 已经由 ComboboxTrigger 设置。打开弹层后自动聚焦输入框。\n const mountedWithExternalReference = ctx.reference() !== undefined;\n let inputEl: HTMLInputElement | undefined;\n\n createEffect(() => {\n if (ctx.open() && mountedWithExternalReference && inputEl) {\n inputEl.focus();\n }\n });\n\n /** 当前高亮项对应的 option 元素 id(没有高亮时为 undefined) */\n const activeOptionId = () => {\n const value = ctx.filteredItems()[ctx.activeIndex()];\n return value === undefined ? undefined : ctx.optionId(value);\n };\n\n const hasValue = () => {\n const current = ctx.value();\n if (current == null) return false;\n if (Array.isArray(current)) return current.length > 0;\n return current !== \"\";\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (disabled()) return;\n const list = ctx.filteredItems();\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n ctx.setOpen(true, \"input-change\", e);\n ctx.setActiveIndex(\n list.length === 0 ? -1 : (ctx.activeIndex() + 1) % list.length,\n );\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n ctx.setOpen(true, \"input-change\", e);\n // 没有高亮时 ArrowUp 应落在**最后一项**:此前用\n // `(activeIndex - 1 + len) % len`,activeIndex 为 -1 时得到 len-2,\n // 三项时错误地停在第二项。\n ctx.setActiveIndex(\n list.length === 0\n ? -1\n : ctx.activeIndex() <= 0\n ? list.length - 1\n : ctx.activeIndex() - 1,\n );\n } else if (e.key === \"Home\") {\n // Home / End 跳到第一项 / 最后一项\n e.preventDefault();\n ctx.setOpen(true, \"input-change\", e);\n ctx.setActiveIndex(list.length === 0 ? -1 : 0);\n } else if (e.key === \"End\") {\n e.preventDefault();\n ctx.setOpen(true, \"input-change\", e);\n ctx.setActiveIndex(list.length === 0 ? -1 : list.length - 1);\n } else if (e.key === \"Enter\" && ctx.open()) {\n e.preventDefault();\n const item = ctx.filteredItems()[ctx.activeIndex()];\n if (item !== undefined) ctx.selectItem(item, e);\n } else if (e.key === \"Escape\" && ctx.open()) {\n e.preventDefault();\n ctx.close(\"escape-key\", e);\n }\n };\n\n return (\n <InputGroup\n ref={(el) => {\n if (!ctx.reference()) ctx.setReference(el);\n onCleanup(() => {\n if (ctx.reference() === el) ctx.setReference(undefined);\n });\n }}\n class={clsx(\"w-auto\", local.class)}\n >\n <InputGroupInput\n ref={(el) => {\n inputEl = el;\n }}\n // combobox 语义:输入框是 combobox 本体,浮层里的列表是它的 listbox\n role=\"combobox\"\n aria-expanded={ctx.open()}\n aria-controls={ctx.open() ? ctx.listId : undefined}\n aria-autocomplete=\"list\"\n // 高亮项通过 aria-activedescendant 表达(焦点始终留在输入框上)\n aria-activedescendant={activeOptionId()}\n placeholder={local.placeholder}\n disabled={disabled()}\n aria-invalid={local[\"aria-invalid\"] as any}\n value={ctx.inputValue()}\n onInput={(value) => {\n const next = String(value);\n ctx.setInputValue(next);\n ctx.setFilterValue(next);\n ctx.setOpen(true, \"input-change\");\n if (!ctx.multiple() && next.trim() === \"\") {\n ctx.setValue(null);\n ctx.setFilterValue(\"\");\n }\n }}\n onFocus={() => ctx.setOpen(true, \"input-focus\")}\n onClick={() => ctx.setOpen(true, \"trigger-press\")}\n onKeyDown={onKeyDown}\n />\n <InputGroupAddon align=\"inline-end\">\n <Show when={local.showClear && hasValue() && !disabled()}>\n <ComboboxClear />\n </Show>\n </InputGroupAddon>\n {local.children}\n </InputGroup>\n );\n}\n"],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ function m(i) {
|
|
|
9
9
|
let c = t("ComboboxItem"), m = u(() => c.isSelected(i.value)), h = u(() => c.filteredItems()[c.activeIndex()] === i.value), [g, _] = d(!1);
|
|
10
10
|
return (() => {
|
|
11
11
|
var t = p();
|
|
12
|
-
return t.$$click = () => {
|
|
13
|
-
i.disabled || c.selectItem(i.value);
|
|
12
|
+
return t.$$click = (e) => {
|
|
13
|
+
i.disabled || c.selectItem(i.value, e);
|
|
14
14
|
}, t.addEventListener("mouseleave", () => _(!1)), t.addEventListener("mouseenter", () => {
|
|
15
15
|
_(!0);
|
|
16
16
|
let e = c.filteredItems().indexOf(i.value);
|
|
@@ -23,13 +23,14 @@ function m(i) {
|
|
|
23
23
|
return r(f, { class: "pointer-events-none absolute right-2 size-4" });
|
|
24
24
|
}
|
|
25
25
|
}), null), a((r) => {
|
|
26
|
-
var a = i.disabled ? -1 : 0,
|
|
27
|
-
return a !== r.e && s(t, "
|
|
26
|
+
var a = c.optionId(i.value), o = i.disabled ? -1 : 0, l = m(), u = h() || g() ? "" : void 0, d = e("relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-none select-none", "data-highlighted:bg-accent data-highlighted:text-accent-foreground", i.disabled && "pointer-events-none opacity-50", i.class);
|
|
27
|
+
return a !== r.e && s(t, "id", r.e = a), o !== r.t && s(t, "tabindex", r.t = o), l !== r.a && s(t, "aria-selected", r.a = l), u !== r.o && s(t, "data-highlighted", r.o = u), d !== r.i && n(t, r.i = d), r;
|
|
28
28
|
}, {
|
|
29
29
|
e: void 0,
|
|
30
30
|
t: void 0,
|
|
31
31
|
a: void 0,
|
|
32
|
-
o: void 0
|
|
32
|
+
o: void 0,
|
|
33
|
+
i: void 0
|
|
33
34
|
}), t;
|
|
34
35
|
})();
|
|
35
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxItem.js","names":["Show","createMemo","createSignal","JSX","Check","clsx","useComboboxContext","ComboboxItem","props","value","children","Element","class","disabled","ctx","selected","isSelected","active","filteredItems","activeIndex","hovered","setHovered","_el$","_tmpl$","$$click","selectItem","addEventListener","index","indexOf","setActiveIndex","_$insert","_$createComponent","when","_$effect","_p$","_v$","_v$2","_v$3","undefined","_v$
|
|
1
|
+
{"version":3,"file":"ComboboxItem.js","names":["Show","createMemo","createSignal","JSX","Check","clsx","useComboboxContext","ComboboxItem","props","value","children","Element","class","disabled","ctx","selected","isSelected","active","filteredItems","activeIndex","hovered","setHovered","_el$","_tmpl$","$$click","event","selectItem","addEventListener","index","indexOf","setActiveIndex","_$insert","_$createComponent","when","_$effect","_p$","_v$","optionId","_v$2","_v$3","_v$4","undefined","_v$5","e","_$setAttribute","t","a","o","i","_$className","_$delegateEvents","_$createComponent","_$setAttribute","_$className","_$delegateEvents","_tmpl$","ComboboxItem","ctx","useComboboxContext","selected","createMemo","props","active","hovered","setHovered","createSignal","_el$","event","index","insert","createComponent","Show","Check","\"class\"","effect","_v$","_v$2","_v$3","_v$4","_v$5","clsx","_p$","setAttribute","className","delegateEvents"],"sources":["../../../../src/components/combobox/ComboboxItem/ComboboxItem.tsx"],"sourcesContent":["import { Show, createMemo, createSignal, type JSX } from \"solid-js\";\nimport { Check } from \"lucide-solid\";\nimport { clsx } from \"~/utils\";\nimport { useComboboxContext } from \"../Combobox/Combobox.context\";\n\nexport function ComboboxItem(props: {\n value: any;\n children?: JSX.Element;\n class?: string;\n disabled?: boolean;\n}) {\n const ctx = useComboboxContext(\"ComboboxItem\");\n const selected = createMemo(() => ctx.isSelected(props.value));\n const active = createMemo(\n () => ctx.filteredItems()[ctx.activeIndex()] === props.value,\n );\n const [hovered, setHovered] = createSignal(false);\n\n return (\n <div\n id={ctx.optionId(props.value)}\n data-slot=\"combobox-item\"\n role=\"option\"\n tabIndex={props.disabled ? -1 : 0}\n aria-selected={selected()}\n data-highlighted={active() || hovered() ? \"\" : undefined}\n class={clsx(\n \"relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-none select-none\",\n \"data-highlighted:bg-accent data-highlighted:text-accent-foreground\",\n props.disabled && \"pointer-events-none opacity-50\",\n props.class,\n )}\n onMouseEnter={() => {\n setHovered(true);\n const index = ctx.filteredItems().indexOf(props.value);\n if (index !== -1) ctx.setActiveIndex(index);\n }}\n onMouseLeave={() => setHovered(false)}\n onClick={(event) => {\n if (!props.disabled) ctx.selectItem(props.value, event);\n }}\n >\n {props.children}\n <Show when={selected()}>\n <Check class=\"pointer-events-none absolute right-2 size-4\" />\n </Show>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAKA,SAAgBO,EAAaC,GAK1B;CACD,IAAMM,IAAMR,EAAmB,cAAc,GACvCS,IAAWd,QAAiBa,EAAIE,WAAWR,EAAMC,KAAK,CAAC,GACvDQ,IAAShB,QACPa,EAAII,cAAc,CAAC,CAACJ,EAAIK,YAAY,OAAOX,EAAMC,KACzD,GACM,CAACW,GAASC,KAAcnB,EAAa,EAAK;CAEhD,cAAA;EAAA,IAAAoB,IAAAC,EAAA;EAaK,OAbLD,EAAAE,WAoBcC,MAAU;GAClB,AAAKjB,EAAMK,YAAUC,EAAIY,WAAWlB,EAAMC,OAAOgB,CAAK;EACxD,GAACH,EAAAK,iBAAA,oBAHmBN,EAAW,EAAK,CAAC,GAAAC,EAAAK,iBAAA,oBALjB;GAClBN,EAAW,EAAI;GACf,IAAMO,IAAQd,EAAII,cAAc,CAAC,CAACW,QAAQrB,EAAMC,KAAK;GACrD,AAAImB,MAAU,MAAId,EAAIgB,eAAeF,CAAK;EAC5C,CAAC,GAAAG,EAAAT,SAMAd,EAAME,UAAQ,IAAA,GAAAqB,EAAAT,GAAAU,EACdhC,GAAI;GAAA,IAACiC,OAAI;IAAA,OAAElB,EAAS;GAAC;GAAA,IAAAL,WAAA;IAAA,OAAAsB,EACnB5B,GAAK,EAAAqE,OAAA,8CAAA,CAAA;GAAA;EAAA,CAAA,GAAA,IAAA,GAAAvC,GAAAC,MAAA;GAAA,IAAAC,IAxBJtB,EAAIuB,SAAS7B,EAAMC,KAAK,GAAC6B,IAGnB9B,EAAMK,WAAW,KAAK,GAAC0B,IAClBxB,EAAS,GAACyB,IACPvB,EAAO,KAAKG,EAAQ,IAAI,KAAKqB,KAAAA,GAASC,IACjDrC,EACL,uHACA,sEACAG,EAAMK,YAAY,kCAClBL,EAAMI,KACR;GAAC,OAAAwB,MAAAD,EAAAQ,KAAAC,EAAAtB,GAAA,MAAAa,EAAAQ,IAAAP,CAAA,GAAAE,MAAAH,EAAAU,KAAAD,EAAAtB,GAAA,YAAAa,EAAAU,IAAAP,CAAA,GAAAC,MAAAJ,EAAAW,KAAAF,EAAAtB,GAAA,iBAAAa,EAAAW,IAAAP,CAAA,GAAAC,MAAAL,EAAAY,KAAAH,EAAAtB,GAAA,oBAAAa,EAAAY,IAAAP,CAAA,GAAAE,MAAAP,EAAAa,KAAAC,EAAA3B,GAAAa,EAAAa,IAAAN,CAAA,GAAAP;EAAA,GAAA;GAAAQ,GAAAF,KAAAA;GAAAI,GAAAJ,KAAAA;GAAAK,GAAAL,KAAAA;GAAAM,GAAAN,KAAAA;GAAAO,GAAAP,KAAAA;EAAA,CAAA,GAAAnB;CAAA,EAAA,CAAA;AAiBP;AAAC4B,EAAA,CAAA,OAAA,CAAA"}
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
import { clsx as e } from "../../../utils/clsx.js";
|
|
2
2
|
import { ScrollArrows as t } from "../../scroll-arrows/ScrollArrows.js";
|
|
3
3
|
import { useComboboxContext as n } from "../Combobox/Combobox.context.js";
|
|
4
|
-
import { className as r, createComponent as i, effect as a, insert as o,
|
|
5
|
-
import { For as
|
|
4
|
+
import { className as r, createComponent as i, effect as a, insert as o, setAttribute as s, template as c, use as l } from "solid-js/web";
|
|
5
|
+
import { For as u, createSignal as d } from "solid-js";
|
|
6
6
|
//#region src/components/combobox/ComboboxList/ComboboxList.tsx
|
|
7
|
-
var
|
|
8
|
-
function
|
|
9
|
-
let
|
|
7
|
+
var f = /*#__PURE__*/ c("<div class=relative><div data-slot=combobox-list role=listbox>");
|
|
8
|
+
function p(c) {
|
|
9
|
+
let p = n("ComboboxList"), [m, h] = d(), g = () => p.isGrouped() ? p.items() : p.filteredItems();
|
|
10
10
|
return (() => {
|
|
11
|
-
var n =
|
|
12
|
-
return
|
|
11
|
+
var n = f(), d = n.firstChild;
|
|
12
|
+
return l(h, d), o(d, i(u, {
|
|
13
13
|
get each() {
|
|
14
|
-
return
|
|
14
|
+
return g();
|
|
15
15
|
},
|
|
16
|
-
children: (e, t) => typeof
|
|
17
|
-
})), o(n, i(t, { target:
|
|
16
|
+
children: (e, t) => typeof c.children == "function" ? c.children(e, t()) : c.children
|
|
17
|
+
})), o(n, i(t, { target: m }), null), a((t) => {
|
|
18
|
+
var n = p.listId, i = e("max-h-72 overflow-y-auto overscroll-contain p-1", "no-scrollbar [&::-webkit-scrollbar]:hidden", c.class);
|
|
19
|
+
return n !== t.e && s(d, "id", t.e = n), i !== t.t && r(d, t.t = i), t;
|
|
20
|
+
}, {
|
|
21
|
+
e: void 0,
|
|
22
|
+
t: void 0
|
|
23
|
+
}), n;
|
|
18
24
|
})();
|
|
19
25
|
}
|
|
20
26
|
//#endregion
|
|
21
|
-
export {
|
|
27
|
+
export { p as ComboboxList };
|
|
22
28
|
|
|
23
29
|
//# sourceMappingURL=ComboboxList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxList.js","names":["For","createSignal","JSX","clsx","ScrollArrows","useComboboxContext","ComboboxList","props","children","Element","item","index","class","ctx","listElement","setListElement","HTMLElement","listItems","isGrouped","items","filteredItems","_el$","_tmpl$","_el$2","firstChild","_$use","_$insert","_$createComponent","each","target","_$effect","_$className","_$createComponent","_$className","_tmpl$","ComboboxList","ctx","useComboboxContext","listElement","setListElement","createSignal","listItems","_el$","_el$2","use","insert","createComponent","For","props","item","index","ScrollArrows","effect","
|
|
1
|
+
{"version":3,"file":"ComboboxList.js","names":["For","createSignal","JSX","clsx","ScrollArrows","useComboboxContext","ComboboxList","props","children","Element","item","index","class","ctx","listElement","setListElement","HTMLElement","listItems","isGrouped","items","filteredItems","_el$","_tmpl$","_el$2","firstChild","_$use","_$insert","_$createComponent","each","target","_$effect","_p$","_v$","listId","_v$2","e","_$setAttribute","t","_$className","undefined","_$createComponent","_$setAttribute","_$className","_tmpl$","ComboboxList","ctx","useComboboxContext","listElement","setListElement","createSignal","listItems","_el$","_el$2","use","insert","createComponent","For","props","item","index","ScrollArrows","effect","_v$","_v$2","clsx","_p$","setAttribute","className"],"sources":["../../../../src/components/combobox/ComboboxList/ComboboxList.tsx"],"sourcesContent":["import { For, createSignal, type JSX } from \"solid-js\";\nimport { clsx } from \"~/utils\";\nimport { ScrollArrows } from \"~/components/scroll-arrows\";\nimport { useComboboxContext } from \"../Combobox/Combobox.context\";\n\nexport function ComboboxList(props: {\n children?: JSX.Element | ((item: any, index: number) => JSX.Element);\n class?: string;\n}) {\n const ctx = useComboboxContext(\"ComboboxList\");\n const [listElement, setListElement] = createSignal<HTMLElement>();\n const listItems = () => (ctx.isGrouped() ? ctx.items() : ctx.filteredItems());\n\n return (\n // 外层只做相对定位,供滚动箭头贴住列表上下沿;自身不滚动\n <div class=\"relative\">\n <div\n ref={setListElement}\n id={ctx.listId}\n data-slot=\"combobox-list\"\n class={clsx(\n \"max-h-72 overflow-y-auto overscroll-contain p-1\",\n \"no-scrollbar [&::-webkit-scrollbar]:hidden\",\n props.class,\n )}\n role=\"listbox\"\n >\n <For each={listItems()}>\n {(item, index) =>\n typeof props.children === \"function\"\n ? props.children(item, index())\n : props.children\n }\n </For>\n </div>\n <ScrollArrows target={listElement} />\n </div>\n );\n}\n"],"mappings":";;;;;;;AAKA,SAAgBM,EAAaC,GAG1B;CACD,IAAMM,IAAMR,EAAmB,cAAc,GACvC,CAACS,GAAaC,KAAkBd,EAA0B,GAC1DgB,UAAmBJ,EAAIK,UAAU,IAAIL,EAAIM,MAAM,IAAIN,EAAIO,cAAc;CAE3E,cACE;EAAA,IAAAC,IAAAC,EAAA,GAAAC,IAAAF,EAAAG;EAUK,OAVLC,EAGSV,GAAcQ,CAAA,GAAAG,EAAAH,GAAAI,EAUlB3B,GAAG;GAAA,IAAC4B,OAAI;IAAA,OAAEX,EAAU;GAAC;GAAAT,WAClBE,GAAMC,MACN,OAAOJ,EAAMC,YAAa,aACtBD,EAAMC,SAASE,GAAMC,EAAM,CAAC,IAC5BJ,EAAMC;EAAQ,CAAA,CAAA,GAAAkB,EAAAL,GAAAM,EAIvBvB,GAAY,EAACyB,QAAQf,EAAW,CAAA,GAAA,IAAA,GAAAgB,GAAAC,MAAA;GAAA,IAAAC,IAjB3BnB,EAAIoB,QAAMC,IAEP/B,EACL,mDACA,8CACAI,EAAMK,KACR;GAAC,OAAAoB,MAAAD,EAAAI,KAAAC,EAAAb,GAAA,MAAAQ,EAAAI,IAAAH,CAAA,GAAAE,MAAAH,EAAAM,KAAAC,EAAAf,GAAAQ,EAAAM,IAAAH,CAAA,GAAAH;EAAA,GAAA;GAAAI,GAAAI,KAAAA;GAAAF,GAAAE,KAAAA;EAAA,CAAA,GAAAlB;CAAA,EAAA,CAAA;AAcT"}
|
|
@@ -13,13 +13,20 @@ function o(o) {
|
|
|
13
13
|
},
|
|
14
14
|
variant: "outline",
|
|
15
15
|
"data-slot": "combobox-trigger",
|
|
16
|
+
"aria-haspopup": "listbox",
|
|
17
|
+
get "aria-expanded"() {
|
|
18
|
+
return s.open();
|
|
19
|
+
},
|
|
20
|
+
get "aria-controls"() {
|
|
21
|
+
return i(() => !!s.open())() ? s.listId : void 0;
|
|
22
|
+
},
|
|
16
23
|
get class() {
|
|
17
24
|
return e("h-8 [&_svg:not([class*='size-'])]:size-4 active:not-aria-[haspopup]:translate-y-0", o.class);
|
|
18
25
|
},
|
|
19
26
|
get disabled() {
|
|
20
27
|
return s.disabled() || o.disabled;
|
|
21
28
|
},
|
|
22
|
-
onClick: () => s.setOpen(!s.open()),
|
|
29
|
+
onClick: (e) => s.setOpen(!s.open(), "trigger-press", e),
|
|
23
30
|
get children() {
|
|
24
31
|
return [i(() => o.children), r(a, {
|
|
25
32
|
"data-slot": "combobox-trigger-icon",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComboboxTrigger.js","names":["JSX","ChevronDown","clsx","useComboboxContext","InputGroupButton","ComboboxTrigger","props","children","Element","class","disabled","ctx","_$createComponent","ref","r$","_ref$","setReference","variant","
|
|
1
|
+
{"version":3,"file":"ComboboxTrigger.js","names":["JSX","ChevronDown","clsx","useComboboxContext","InputGroupButton","ComboboxTrigger","props","children","Element","class","disabled","ctx","_$createComponent","ref","r$","_ref$","setReference","variant","aria-expanded","open","aria-controls","_$memo","listId","undefined","onClick","event","setOpen","Event","_$createComponent","_$memo","ComboboxTrigger","ctx","useComboboxContext","createComponent","InputGroupButton","_ref$","r$","memo","\"class\"","clsx","props","event","ChevronDown"],"sources":["../../../../src/components/combobox/ComboboxTrigger/ComboboxTrigger.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { ChevronDown } from \"lucide-solid\";\nimport { clsx } from \"~/utils\";\nimport { useComboboxContext } from \"../Combobox/Combobox.context\";\nimport { InputGroupButton } from \"~/components/input-group\";\n\nexport function ComboboxTrigger(props: {\n children?: JSX.Element;\n class?: string;\n disabled?: boolean;\n}) {\n const ctx = useComboboxContext(\"ComboboxTrigger\");\n return (\n <InputGroupButton\n ref={ctx.setReference}\n variant=\"outline\"\n data-slot=\"combobox-trigger\"\n // 触发器是弹出 listbox 的按钮\n aria-haspopup=\"listbox\"\n aria-expanded={ctx.open()}\n aria-controls={ctx.open() ? ctx.listId : undefined}\n class={clsx(\n \"h-8 [&_svg:not([class*='size-'])]:size-4 active:not-aria-[haspopup]:translate-y-0\",\n props.class,\n )}\n disabled={ctx.disabled() || props.disabled}\n onClick={(event) =>\n ctx.setOpen(!ctx.open(), \"trigger-press\", event as unknown as Event)\n }\n >\n {props.children}\n <ChevronDown\n data-slot=\"combobox-trigger-icon\"\n class=\"pointer-events-none size-4 text-muted-foreground\"\n />\n </InputGroupButton>\n );\n}\n"],"mappings":";;;;;;AAMA,SAAgBK,EAAgBC,GAI7B;CACD,IAAMK,IAAMR,EAAmB,iBAAiB;CAChD,OAAAS,EACGR,GAAgB;EAAAS,IAAAC,GAAA;GAAA,IAAAC,IACVJ,EAAIK;GAAY,OAAAD,KAAA,aAAAA,EAAAD,CAAA,IAAhBH,EAAIK,eAAYF;EAAA;EACrBG,SAAO;EAAA,aAAA;EAAA,iBAAA;EAAA,IAAA,kBAAA;GAAA,OAIQN,EAAIQ,KAAK;EAAC;EAAA,IAAA,kBAAA;GAAA,OACVE,QAAA,CAAA,CAAAV,EAAIQ,KAAK,CAAC,CAAA,CAAA,IAAGR,EAAIW,SAASC,KAAAA;EAAS;EAAA,IAAAe,QAAA;GAAA,OAC3CpC,EACL,qFACAI,EAAMG,KACR;EAAC;EAAA,IACDC,WAAQ;GAAA,OAAEC,EAAID,SAAS,KAAKJ,EAAMI;EAAQ;EAC1Cc,UAAUC,MACRd,EAAIe,QAAQ,CAACf,EAAIQ,KAAK,GAAG,iBAAiBM,CAAyB;EAAC,IAAAlB,WAAA;GAAA,OAAA,CAAAc,QAGrEf,EAAMC,QAAQ,GAAAK,EACdX,GAAW;IAAA,aAAA;IAAAqC,OAAA;GAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAMlB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createVirtualElement as e } from "../../../lib/positioner/virtual-element.js";
|
|
2
|
+
import { useScrollLock as t } from "../../../hooks/useScrollLock.js";
|
|
3
3
|
import { ContextMenuContext as n } from "./ContextMenu.context.js";
|
|
4
4
|
import { createChangeEventDetails as r } from "../context-menu.utils.js";
|
|
5
5
|
import { createComponent as i } from "solid-js/web";
|
|
@@ -8,20 +8,22 @@ import { createEffect as a, createMemo as o, createSignal as s, createUniqueId a
|
|
|
8
8
|
var u = "[data-slot=\"context-menu-content\"],[data-slot=\"context-menu-sub-content\"]";
|
|
9
9
|
function d(d) {
|
|
10
10
|
let [f, p] = s(d.defaultOpen ?? !1), m = o(() => d.open === void 0 ? f() : d.open), h = o(() => !!d.disabled), g = o(() => d.loopFocus ?? !0), _ = o(() => d.orientation ?? "vertical"), v = o(() => d.highlightItemOnHover ?? !0), y = o(() => d.modal ?? !0);
|
|
11
|
-
|
|
11
|
+
t(() => m() && y(), { allowedSelector: u });
|
|
12
12
|
let [b, x] = s(!0), [S, C] = s(), [w, T] = s(), E = `context-menu-content-${c()}`, D = /* @__PURE__ */ new Set(), O = () => {
|
|
13
13
|
let e = S();
|
|
14
14
|
e && typeof e.focus == "function" && e.focus({ preventScroll: !0 });
|
|
15
15
|
}, k = (e, t, n) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
let i = r(t, n, S());
|
|
17
|
+
d.onOpenChange?.(e, i), !i.isCanceled && d.open === void 0 && p(e);
|
|
18
|
+
}, A = (t, n, r, i, a = "trigger-press") => {
|
|
19
|
+
h() || (T(e({
|
|
20
|
+
x: t,
|
|
20
21
|
y: n,
|
|
21
22
|
contextElement: r
|
|
22
23
|
})), m() || k(!0, a, i));
|
|
23
24
|
}, j = (e, t) => {
|
|
24
|
-
|
|
25
|
+
let n = m();
|
|
26
|
+
n && (k(!1, e, t), m() !== n && e !== "outside-press" && b() && O());
|
|
25
27
|
}, M = (e) => {
|
|
26
28
|
if (!e || !(e instanceof Element)) return !1;
|
|
27
29
|
for (let t of D) if (t.contains(e)) return !0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.js","names":["createEffect","createMemo","createSignal","createUniqueId","onCleanup","JSX","createVirtualElement","VirtualElement","useScrollLock","ContextMenuContext","ContextMenuProps","ContextMenuChangeEventReason","ContextMenuContextValue","createChangeEventDetails","MENU_POPUP_SELECTOR","ContextMenu","props","Element","internalOpen","setInternalOpen","defaultOpen","open","undefined","disabled","loopFocus","orientation","highlightItemOnHover","modal","allowedSelector","finalFocus","setFinalFocus","trigger","setTrigger","HTMLElement","anchor","setAnchor","contentId","menuElements","Set","restoreFocus","el","focus","preventScroll","commit","next","reason","event","Event","onOpenChange","openAt","x","y","contextElement","closeAll","isInsideMenu","node","Node","contains","isInsideTrigger","registerMenuElement","add","delete","onPointerDown","e","PointerEvent","button","target","onContextMenu","MouseEvent","onKeyDown","KeyboardEvent","defaultPrevented","key","document","addEventListener","removeEventListener","ctx","_$createComponent","Provider","value","children","_$createComponent","MENU_POPUP_SELECTOR","ContextMenu","internalOpen","setInternalOpen","createSignal","props","open","createMemo","disabled","loopFocus","orientation","highlightItemOnHover","modal","finalFocus","setFinalFocus","trigger","setTrigger","anchor","setAnchor","contentId","createUniqueId","menuElements","restoreFocus","el","commit","next","createChangeEventDetails","reason","event","openAt","createVirtualElement","closeAll","isInsideMenu","node","isInsideTrigger","registerMenuElement","onPointerDown","onContextMenu","target","onKeyDown","onCleanup","ctx","createComponent","ContextMenuContext"],"sources":["../../../../src/components/context-menu/ContextMenu/ContextMenu.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n onCleanup,\n type JSX,\n} from \"solid-js\";\nimport { createVirtualElement, type VirtualElement } from \"~/lib\";\nimport { useScrollLock } from \"~/hooks\";\nimport { ContextMenuContext } from \"./ContextMenu.context\";\nimport type { ContextMenuProps } from \"./ContextMenu.types\";\nimport type {\n ContextMenuChangeEventReason,\n ContextMenuContextValue,\n} from \"../context-menu.types\";\nimport { createChangeEventDetails } from \"../context-menu.utils\";\n\n/** 菜单自身(根菜单/子菜单)的 popup 容器,允许在锁滚动期间继续在菜单内部滚动 */\nconst MENU_POPUP_SELECTOR =\n '[data-slot=\"context-menu-content\"],[data-slot=\"context-menu-sub-content\"]';\n\n/**\n * ContextMenu 根组件:不渲染任何 DOM,只负责状态管理 + 提供 context。\n *\n * 这是 shadcn 基于 Base UI 的 ContextMenu 的 SolidJS 移植:Base UI 的 Root\n * 同样不渲染自己的 HTML 元素,只作为状态容器。\n *\n * 与普通菜单不同的地方在于\"锚点\":右键菜单的定位参照是鼠标点击的像素坐标,\n * 因此这里用 `createVirtualElement` 生成一个宽高为 0 的虚拟参照元素,\n * 再交给内容层用 position:fixed 定位(细节见 ContextMenuContent)。\n *\n * @example\n * ```tsx\n * <ContextMenu>\n * <ContextMenuTrigger>右键点击这里</ContextMenuTrigger>\n * <ContextMenuContent>\n * <ContextMenuItem>个人资料</ContextMenuItem>\n * </ContextMenuContent>\n * </ContextMenu>\n * ```\n */\nexport function ContextMenu(props: ContextMenuProps): JSX.Element {\n const [internalOpen, setInternalOpen] = createSignal(\n props.defaultOpen ?? false,\n );\n const open = createMemo(() =>\n props.open !== undefined ? props.open : internalOpen(),\n );\n const disabled = createMemo(() => !!props.disabled);\n const loopFocus = createMemo(() => props.loopFocus ?? true);\n const orientation = createMemo(() => props.orientation ?? \"vertical\");\n const highlightItemOnHover = createMemo(\n () => props.highlightItemOnHover ?? true,\n );\n const modal = createMemo(() => props.modal ?? true);\n\n // 打开期间锁定页面滚动(Base UI menu 的 modal 默认行为),关闭时恢复。\n // 菜单自身(含子菜单)允许继续滚动。\n useScrollLock(() => open() && modal(), {\n allowedSelector: MENU_POPUP_SELECTOR,\n });\n\n const [finalFocus, setFinalFocus] = createSignal(true);\n const [trigger, setTrigger] = createSignal<HTMLElement>();\n const [anchor, setAnchor] = createSignal<VirtualElement>();\n const contentId = `context-menu-content-${createUniqueId()}`;\n\n // 已挂载的浮层容器(根菜单 + 各级子菜单),用于判断指针是否落在菜单内部。\n // 这里刻意不用响应式结构:它只在事件回调里读取,变化本身不需要驱动渲染。\n const menuElements = new Set<HTMLElement>();\n\n const restoreFocus = () => {\n const el = trigger();\n if (el && typeof el.focus === \"function\") {\n el.focus({ preventScroll: true });\n }\n };\n\n const commit = (\n next: boolean,\n reason: ContextMenuChangeEventReason,\n event?: Event,\n ) => {\n if (props.open === undefined) setInternalOpen(next);\n props.onOpenChange?.(\n next,\n createChangeEventDetails(reason, event, trigger()),\n );\n };\n\n const openAt = (\n x: number,\n y: number,\n contextElement: Element | undefined,\n event?: Event,\n reason: ContextMenuChangeEventReason = \"trigger-press\",\n ) => {\n if (disabled()) return;\n // 每次打开都换一个新的虚拟元素:即使菜单已经打开,右键到新位置也会\n // 触发 positioner 重新计算(autoUpdate 之外的一条路径)。\n setAnchor(createVirtualElement({ x, y, contextElement }));\n if (!open()) commit(true, reason, event);\n };\n\n const closeAll = (reason: ContextMenuChangeEventReason, event?: Event) => {\n if (!open()) return;\n commit(false, reason, event);\n // 点击菜单外部时焦点应该留在用户刚点的目标上,不能把焦点抢回触发器。\n if (reason !== \"outside-press\" && finalFocus()) restoreFocus();\n };\n\n const isInsideMenu = (node: Node | null): boolean => {\n if (!node || !(node instanceof Element)) return false;\n for (const el of menuElements) {\n if (el.contains(node)) return true;\n }\n return false;\n };\n\n const isInsideTrigger = (node: Node | null): boolean => {\n if (!node || !(node instanceof Element)) return false;\n return !!trigger()?.contains(node);\n };\n\n const registerMenuElement = (el: HTMLElement) => {\n menuElements.add(el);\n return () => {\n menuElements.delete(el);\n };\n };\n\n // 打开期间绑定 document 级监听:点击外部/再次右键外部关闭 + Escape 兜底关闭。\n // 菜单内部的 Escape 会由浮层自己处理并 stopPropagation,不会走到这里。\n createEffect(() => {\n if (!open()) return;\n\n const onPointerDown = (e: PointerEvent) => {\n // 右键交给 contextmenu 处理:否则会先被这里关掉、又被触发器重新打开,\n // 中间闪一帧。\n if (e.button === 2) return;\n // 注意这里不把触发器算作\"内部\":菜单打开时左键点触发器应当关闭菜单。\n if (!isInsideMenu(e.target as Node | null)) {\n closeAll(\"outside-press\", e);\n }\n };\n\n const onContextMenu = (e: MouseEvent) => {\n const target = e.target as Node | null;\n // 在触发器上再次右键只更新锚点,由触发器自己的 contextmenu 处理。\n if (!isInsideMenu(target) && !isInsideTrigger(target)) {\n closeAll(\"outside-press\", e);\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n // 菜单浮层自己处理 Escape 时会 preventDefault + stopPropagation。\n // 这里再检查一次 defaultPrevented:键盘事件在 Solid 里是委托到 document 的,\n // 同元素上的其它监听器不会被 stopPropagation 拦下,靠这个标记避免重复关闭。\n if (e.defaultPrevented) return;\n if (e.key === \"Escape\") closeAll(\"escape-key\", e);\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"contextmenu\", onContextMenu, true);\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"contextmenu\", onContextMenu, true);\n document.removeEventListener(\"keydown\", onKeyDown);\n });\n });\n\n const ctx: ContextMenuContextValue = {\n open,\n disabled,\n loopFocus,\n orientation,\n highlightItemOnHover,\n trigger,\n setTrigger,\n anchor,\n contentId,\n finalFocus,\n setFinalFocus,\n openAt,\n closeAll,\n registerMenuElement,\n isInsideMenu,\n };\n\n return (\n <ContextMenuContext.Provider value={ctx}>\n {props.children}\n </ContextMenuContext.Provider>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ContextMenu.js","names":["createEffect","createMemo","createSignal","createUniqueId","onCleanup","JSX","createVirtualElement","VirtualElement","useScrollLock","ContextMenuContext","ContextMenuProps","ContextMenuChangeEventReason","ContextMenuContextValue","createChangeEventDetails","MENU_POPUP_SELECTOR","ContextMenu","props","Element","internalOpen","setInternalOpen","defaultOpen","open","undefined","disabled","loopFocus","orientation","highlightItemOnHover","modal","allowedSelector","finalFocus","setFinalFocus","trigger","setTrigger","HTMLElement","anchor","setAnchor","contentId","menuElements","Set","restoreFocus","el","focus","preventScroll","commit","next","reason","event","Event","details","onOpenChange","isCanceled","openAt","x","y","contextElement","closeAll","wasOpen","isInsideMenu","node","Node","contains","isInsideTrigger","registerMenuElement","add","delete","onPointerDown","e","PointerEvent","button","target","onContextMenu","MouseEvent","onKeyDown","KeyboardEvent","defaultPrevented","key","document","addEventListener","removeEventListener","ctx","_$createComponent","Provider","value","children","_$createComponent","MENU_POPUP_SELECTOR","ContextMenu","internalOpen","setInternalOpen","createSignal","props","open","createMemo","disabled","loopFocus","orientation","highlightItemOnHover","modal","finalFocus","setFinalFocus","trigger","setTrigger","anchor","setAnchor","contentId","createUniqueId","menuElements","restoreFocus","el","commit","details","createChangeEventDetails","reason","event","next","openAt","createVirtualElement","closeAll","wasOpen","isInsideMenu","node","isInsideTrigger","registerMenuElement","onPointerDown","onContextMenu","target","onKeyDown","onCleanup","ctx","createComponent","ContextMenuContext"],"sources":["../../../../src/components/context-menu/ContextMenu/ContextMenu.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n onCleanup,\n type JSX,\n} from \"solid-js\";\nimport { createVirtualElement, type VirtualElement } from \"~/lib\";\nimport { useScrollLock } from \"~/hooks\";\nimport { ContextMenuContext } from \"./ContextMenu.context\";\nimport type { ContextMenuProps } from \"./ContextMenu.types\";\nimport type {\n ContextMenuChangeEventReason,\n ContextMenuContextValue,\n} from \"../context-menu.types\";\nimport { createChangeEventDetails } from \"../context-menu.utils\";\n\n/** 菜单自身(根菜单/子菜单)的 popup 容器,允许在锁滚动期间继续在菜单内部滚动 */\nconst MENU_POPUP_SELECTOR =\n '[data-slot=\"context-menu-content\"],[data-slot=\"context-menu-sub-content\"]';\n\n/**\n * ContextMenu 根组件:不渲染任何 DOM,只负责状态管理 + 提供 context。\n *\n * 这是 shadcn 基于 Base UI 的 ContextMenu 的 SolidJS 移植:Base UI 的 Root\n * 同样不渲染自己的 HTML 元素,只作为状态容器。\n *\n * 与普通菜单不同的地方在于\"锚点\":右键菜单的定位参照是鼠标点击的像素坐标,\n * 因此这里用 `createVirtualElement` 生成一个宽高为 0 的虚拟参照元素,\n * 再交给内容层用 position:fixed 定位(细节见 ContextMenuContent)。\n *\n * @example\n * ```tsx\n * <ContextMenu>\n * <ContextMenuTrigger>右键点击这里</ContextMenuTrigger>\n * <ContextMenuContent>\n * <ContextMenuItem>个人资料</ContextMenuItem>\n * </ContextMenuContent>\n * </ContextMenu>\n * ```\n */\nexport function ContextMenu(props: ContextMenuProps): JSX.Element {\n const [internalOpen, setInternalOpen] = createSignal(\n props.defaultOpen ?? false,\n );\n const open = createMemo(() =>\n props.open !== undefined ? props.open : internalOpen(),\n );\n const disabled = createMemo(() => !!props.disabled);\n const loopFocus = createMemo(() => props.loopFocus ?? true);\n const orientation = createMemo(() => props.orientation ?? \"vertical\");\n const highlightItemOnHover = createMemo(\n () => props.highlightItemOnHover ?? true,\n );\n const modal = createMemo(() => props.modal ?? true);\n\n // 打开期间锁定页面滚动(Base UI menu 的 modal 默认行为),关闭时恢复。\n // 菜单自身(含子菜单)允许继续滚动。\n useScrollLock(() => open() && modal(), {\n allowedSelector: MENU_POPUP_SELECTOR,\n });\n\n const [finalFocus, setFinalFocus] = createSignal(true);\n const [trigger, setTrigger] = createSignal<HTMLElement>();\n const [anchor, setAnchor] = createSignal<VirtualElement>();\n const contentId = `context-menu-content-${createUniqueId()}`;\n\n // 已挂载的浮层容器(根菜单 + 各级子菜单),用于判断指针是否落在菜单内部。\n // 这里刻意不用响应式结构:它只在事件回调里读取,变化本身不需要驱动渲染。\n const menuElements = new Set<HTMLElement>();\n\n const restoreFocus = () => {\n const el = trigger();\n if (el && typeof el.focus === \"function\") {\n el.focus({ preventScroll: true });\n }\n };\n\n const commit = (\n next: boolean,\n reason: ContextMenuChangeEventReason,\n event?: Event,\n ) => {\n const details = createChangeEventDetails(reason, event, trigger());\n // 先回调再落状态:调用方可以在 details.cancel() 里否决本次变更\n // (与 ToggleGroup / TimePicker / Drawer 一致,对齐 Base UI 的语义)\n props.onOpenChange?.(next, details);\n if (details.isCanceled) return;\n if (props.open === undefined) setInternalOpen(next);\n };\n\n const openAt = (\n x: number,\n y: number,\n contextElement: Element | undefined,\n event?: Event,\n reason: ContextMenuChangeEventReason = \"trigger-press\",\n ) => {\n if (disabled()) return;\n // 每次打开都换一个新的虚拟元素:即使菜单已经打开,右键到新位置也会\n // 触发 positioner 重新计算(autoUpdate 之外的一条路径)。\n setAnchor(createVirtualElement({ x, y, contextElement }));\n if (!open()) commit(true, reason, event);\n };\n\n const closeAll = (reason: ContextMenuChangeEventReason, event?: Event) => {\n const wasOpen = open();\n if (!wasOpen) return;\n commit(false, reason, event);\n // cancel() 之后菜单并没有真的关闭,因此也不该动焦点\n if (open() === wasOpen) return;\n // 点击菜单外部时焦点应该留在用户刚点的目标上,不能把焦点抢回触发器。\n if (reason !== \"outside-press\" && finalFocus()) restoreFocus();\n };\n\n const isInsideMenu = (node: Node | null): boolean => {\n if (!node || !(node instanceof Element)) return false;\n for (const el of menuElements) {\n if (el.contains(node)) return true;\n }\n return false;\n };\n\n const isInsideTrigger = (node: Node | null): boolean => {\n if (!node || !(node instanceof Element)) return false;\n return !!trigger()?.contains(node);\n };\n\n const registerMenuElement = (el: HTMLElement) => {\n menuElements.add(el);\n return () => {\n menuElements.delete(el);\n };\n };\n\n // 打开期间绑定 document 级监听:点击外部/再次右键外部关闭 + Escape 兜底关闭。\n // 菜单内部的 Escape 会由浮层自己处理并 stopPropagation,不会走到这里。\n createEffect(() => {\n if (!open()) return;\n\n const onPointerDown = (e: PointerEvent) => {\n // 右键交给 contextmenu 处理:否则会先被这里关掉、又被触发器重新打开,\n // 中间闪一帧。\n if (e.button === 2) return;\n // 注意这里不把触发器算作\"内部\":菜单打开时左键点触发器应当关闭菜单。\n if (!isInsideMenu(e.target as Node | null)) {\n closeAll(\"outside-press\", e);\n }\n };\n\n const onContextMenu = (e: MouseEvent) => {\n const target = e.target as Node | null;\n // 在触发器上再次右键只更新锚点,由触发器自己的 contextmenu 处理。\n if (!isInsideMenu(target) && !isInsideTrigger(target)) {\n closeAll(\"outside-press\", e);\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n // 菜单浮层自己处理 Escape 时会 preventDefault + stopPropagation。\n // 这里再检查一次 defaultPrevented:键盘事件在 Solid 里是委托到 document 的,\n // 同元素上的其它监听器不会被 stopPropagation 拦下,靠这个标记避免重复关闭。\n if (e.defaultPrevented) return;\n if (e.key === \"Escape\") closeAll(\"escape-key\", e);\n };\n\n document.addEventListener(\"pointerdown\", onPointerDown, true);\n document.addEventListener(\"contextmenu\", onContextMenu, true);\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => {\n document.removeEventListener(\"pointerdown\", onPointerDown, true);\n document.removeEventListener(\"contextmenu\", onContextMenu, true);\n document.removeEventListener(\"keydown\", onKeyDown);\n });\n });\n\n const ctx: ContextMenuContextValue = {\n open,\n disabled,\n loopFocus,\n orientation,\n highlightItemOnHover,\n trigger,\n setTrigger,\n anchor,\n contentId,\n finalFocus,\n setFinalFocus,\n openAt,\n closeAll,\n registerMenuElement,\n isInsideMenu,\n };\n\n return (\n <ContextMenuContext.Provider value={ctx}>\n {props.children}\n </ContextMenuContext.Provider>\n );\n}\n"],"mappings":"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"}
|