Docs Components Overlays

HoverCard

React example follows below.
ts
const hoverCardFixture = {
id: "hovercard",
trigger: "@riya",
name: "Riya Kapoor",
body: "Owns ledger-api deploy pipeline.",
side: "bottom",
openDelay: 200,
closeDelay: 120,
} satisfies {
id: string;
trigger: string;
name: string;
body: string;
side: "top" | "bottom";
openDelay: number;
closeDelay: number;
};
import { HoverCard } from "@grassroot/ui-react";
export default function HoverCardDemo() {
return (
<div>
<HoverCard
trigger={<span className="text-heading underline">{hoverCardFixture.trigger}</span>}
side={hoverCardFixture.side}
openDelay={hoverCardFixture.openDelay}
closeDelay={hoverCardFixture.closeDelay}
>
<div className="font-semibold text-heading">{hoverCardFixture.name}</div>
<div className="text-body">{hoverCardFixture.body}</div>
</HoverCard>
</div>
);
}
ts
<script setup lang="ts">
const hoverCardFixture = {
id: "hovercard",
trigger: "@riya",
name: "Riya Kapoor",
body: "Owns ledger-api deploy pipeline.",
side: "bottom",
openDelay: 200,
closeDelay: 120,
} satisfies {
id: string;
trigger: string;
name: string;
body: string;
side: "top" | "bottom";
openDelay: number;
closeDelay: number;
};
import { HoverCard } from "@grassroot/ui-vue";
</script>
<template>
<div>
<HoverCard
:side="hoverCardFixture.side"
:open-delay="hoverCardFixture.openDelay"
:close-delay="hoverCardFixture.closeDelay"
>
<template #trigger
><span class="text-heading underline">{{ hoverCardFixture.trigger }}</span></template
>
<div class="font-semibold text-heading">{{ hoverCardFixture.name }}</div>
<div class="text-body">{{ hoverCardFixture.body }}</div>
</HoverCard>
</div>
</template>
ts
import { Component } from "@angular/core";
const hoverCardFixture = {
id: "hovercard",
trigger: "@riya",
name: "Riya Kapoor",
body: "Owns ledger-api deploy pipeline.",
side: "bottom",
openDelay: 200,
closeDelay: 120,
} satisfies {
id: string;
trigger: string;
name: string;
body: string;
side: "top" | "bottom";
openDelay: number;
closeDelay: number;
};
import { GrassrootHoverCard } from "@grassroot/ui-angular";
@Component({
selector: "app-hover-card-demo",
standalone: true,
imports: [GrassrootHoverCard],
template: `
<div>
<grassroot-hover-card
[side]="fixture.side"
[openDelay]="fixture.openDelay"
[closeDelay]="fixture.closeDelay"
>
<span trigger class="text-heading underline">{{ fixture.trigger }}</span>
<div class="font-semibold text-heading">{{ fixture.name }}</div>
<div class="text-body">{{ fixture.body }}</div>
</grassroot-hover-card>
</div>
`,
})
export class HoverCardDemoComponent {
protected readonly fixture = hoverCardFixture;
}
export default HoverCardDemoComponent;
ts
<script lang="ts">
import { HoverCard } from "@grassroot/ui-svelte";
const hoverCardFixture = {
id: "hovercard",
trigger: "@riya",
name: "Riya Kapoor",
body: "Owns ledger-api deploy pipeline.",
side: "bottom",
openDelay: 200,
closeDelay: 120,
} satisfies {
id: string;
trigger: string;
name: string;
body: string;
side: "top" | "bottom";
openDelay: number;
closeDelay: number;
};
</script>
{#snippet trigger()}<span class="text-heading underline">{hoverCardFixture.trigger}</span>{/snippet}
{#snippet children()}<div class="font-semibold text-heading">{hoverCardFixture.name}</div>
<div class="text-body">{hoverCardFixture.body}</div>{/snippet}
<div>
<HoverCard
side={hoverCardFixture.side}
openDelay={hoverCardFixture.openDelay}
closeDelay={hoverCardFixture.closeDelay}
{trigger}
{children}
/>
</div>
ts
/** @jsxImportSource solid-js */
import { HoverCard } from "@grassroot/ui-solid";
const hoverCardFixture = {
id: "hovercard",
trigger: "@riya",
name: "Riya Kapoor",
body: "Owns ledger-api deploy pipeline.",
side: "bottom",
openDelay: 200,
closeDelay: 120,
} satisfies {
id: string;
trigger: string;
name: string;
body: string;
side: "top" | "bottom";
openDelay: number;
closeDelay: number;
};
export default function HoverCardDemo() {
return (
<div>
<HoverCard
trigger={<span class="text-heading underline">{hoverCardFixture.trigger}</span>}
side={hoverCardFixture.side}
openDelay={hoverCardFixture.openDelay}
closeDelay={hoverCardFixture.closeDelay}
>
<div class="font-semibold text-heading">{hoverCardFixture.name}</div>
<div class="text-body">{hoverCardFixture.body}</div>
</HoverCard>
</div>
);
}

Installation

API Reference

Import

import { HoverCard } from "@grassroot/ui-react";

Props

Prop
Type
Default
Requirement
Description
side
"top" | "bottom" | undefined
"bottom"
optional
openDelay
number | undefined
200
optional
ms before opening on hover.
closeDelay
number | undefined
120
optional
ms before closing after leave.
defaultOpen
boolean | undefined
false
optional
Render initially open for layout/stories.
className
string | undefined
optional
contentClassName
string | undefined
optional
Prop
side
Type
"top" | "bottom" | undefined
Default
"bottom"
Requirement
optional
Description
Prop
openDelay
Type
number | undefined
Default
200
Requirement
optional
Description
ms before opening on hover.
Prop
closeDelay
Type
number | undefined
Default
120
Requirement
optional
Description
ms before closing after leave.
Prop
defaultOpen
Type
boolean | undefined
Default
false
Requirement
optional
Description
Render initially open for layout/stories.
Prop
className
Type
string | undefined
Default
Requirement
optional
Description
Prop
contentClassName
Type
string | undefined
Default
Requirement
optional
Description

Content regions

  • children
  • trigger

Import

import { HoverCard } from "@grassroot/ui-vue";

Props

Prop
Type
Default
Requirement
side
"top" | "bottom"
"bottom"
optional
openDelay
number
200
optional
closeDelay
number
120
optional
defaultOpen
boolean
false
optional
contentClassName
string
undefined
optional
Prop
side
Type
"top" | "bottom"
Default
"bottom"
Requirement
optional
Prop
openDelay
Type
number
Default
200
Requirement
optional
Prop
closeDelay
Type
number
Default
120
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
contentClassName
Type
string
Default
undefined
Requirement
optional

Content regions

  • default
  • trigger

Import

import { Component } from "@angular/core";
import { GrassrootHoverCard } from "@grassroot/ui-angular";

Props

Prop
Type
Default
Requirement
side
"top" | "bottom"
"bottom"
optional
openDelay
number
200
optional
closeDelay
number
120
optional
defaultOpen
boolean
false
optional
contentClassName
string | undefined
undefined
optional
Prop
side
Type
"top" | "bottom"
Default
"bottom"
Requirement
optional
Prop
openDelay
Type
number
Default
200
Requirement
optional
Prop
closeDelay
Type
number
Default
120
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
contentClassName
Type
string | undefined
Default
undefined
Requirement
optional

Content regions

  • default
  • trigger

Import

import { HoverCard } from "@grassroot/ui-svelte";

Props

Prop
Type
Default
Requirement
side
"top" | "bottom"
"bottom"
optional
openDelay
number
200
optional
closeDelay
number
120
optional
defaultOpen
boolean
false
optional
className
string
optional
contentClassName
string
optional
Prop
side
Type
"top" | "bottom"
Default
"bottom"
Requirement
optional
Prop
openDelay
Type
number
Default
200
Requirement
optional
Prop
closeDelay
Type
number
Default
120
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional
Prop
contentClassName
Type
string
Default
Requirement
optional

Content regions

  • children
  • trigger

Import

import { HoverCard } from "@grassroot/ui-solid";

Props

Prop
Type
Default
Requirement
side
"top" | "bottom"
"bottom"
optional
openDelay
number
optional
closeDelay
number
optional
defaultOpen
boolean
optional
className
string
optional
contentClassName
string
optional
Prop
side
Type
"top" | "bottom"
Default
"bottom"
Requirement
optional
Prop
openDelay
Type
number
Default
Requirement
optional
Prop
closeDelay
Type
number
Default
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional
Prop
contentClassName
Type
string
Default
Requirement
optional

Content regions

  • children
  • trigger