hover-card.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import { HoverCard as Kobalte } from "@kobalte/core/hover-card"
  2. import { ComponentProps, JSXElement, ParentProps, splitProps } from "solid-js"
  3. export interface HoverCardProps extends ParentProps, Omit<ComponentProps<typeof Kobalte>, "children"> {
  4. trigger: JSXElement
  5. mount?: HTMLElement
  6. class?: ComponentProps<"div">["class"]
  7. classList?: ComponentProps<"div">["classList"]
  8. }
  9. export function HoverCard(props: HoverCardProps) {
  10. const [local, rest] = splitProps(props, ["trigger", "mount", "class", "classList", "children"])
  11. return (
  12. <Kobalte gutter={4} {...rest}>
  13. <Kobalte.Trigger as="div" data-slot="hover-card-trigger" tabIndex={-1}>
  14. {local.trigger}
  15. </Kobalte.Trigger>
  16. <Kobalte.Portal mount={local.mount}>
  17. <Kobalte.Content
  18. data-component="hover-card-content"
  19. classList={{
  20. ...local.classList,
  21. [local.class ?? ""]: !!local.class,
  22. }}
  23. >
  24. <div data-slot="hover-card-body">{local.children}</div>
  25. </Kobalte.Content>
  26. </Kobalte.Portal>
  27. </Kobalte>
  28. )
  29. }