Docs Components Navigation

DropdownMenu

React example follows below.
ts
const dropdownMenuFixture = {
id: "dropdownmenu",
trigger: "Actions",
header: "ledger-api",
align: "start",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
trigger: string;
header: string;
align: "start" | "end";
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
import { DropdownMenu } from "@grassroot/ui-react";
export default function DropdownMenuDemo() {
return (
<div>
<DropdownMenu
header={dropdownMenuFixture.header}
align={dropdownMenuFixture.align}
items={[...dropdownMenuFixture.items]}
>
{dropdownMenuFixture.trigger}
</DropdownMenu>
</div>
);
}
ts
<script setup lang="ts">
const dropdownMenuFixture = {
id: "dropdownmenu",
trigger: "Actions",
header: "ledger-api",
align: "start",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
trigger: string;
header: string;
align: "start" | "end";
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
import { DropdownMenu } from "@grassroot/ui-vue";
</script>
<template>
<div>
<DropdownMenu
:header="dropdownMenuFixture.header"
:align="dropdownMenuFixture.align"
:items="dropdownMenuFixture.items"
>{{ dropdownMenuFixture.trigger }}</DropdownMenu
>
</div>
</template>
ts
import { Component } from "@angular/core";
const dropdownMenuFixture = {
id: "dropdownmenu",
trigger: "Actions",
header: "ledger-api",
align: "start",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
trigger: string;
header: string;
align: "start" | "end";
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
import { GrassrootDropdownMenu } from "@grassroot/ui-angular";
@Component({
selector: "app-dropdown-menu-demo",
standalone: true,
imports: [GrassrootDropdownMenu],
template: `
<div>
<grassroot-dropdown-menu
[header]="fixture.header"
[align]="fixture.align"
[items]="fixture.items"
>{{ fixture.trigger }}</grassroot-dropdown-menu
>
</div>
`,
})
export class DropdownMenuDemoComponent {
protected readonly fixture = dropdownMenuFixture;
}
export default DropdownMenuDemoComponent;
ts
<script lang="ts">
import { DropdownMenu } from "@grassroot/ui-svelte";
const dropdownMenuFixture = {
id: "dropdownmenu",
trigger: "Actions",
header: "ledger-api",
align: "start",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
trigger: string;
header: string;
align: "start" | "end";
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
</script>
{#snippet children()}{dropdownMenuFixture.trigger}{/snippet}
<div>
<DropdownMenu
header={dropdownMenuFixture.header}
align={dropdownMenuFixture.align}
items={dropdownMenuFixture.items}
{children}
/>
</div>
ts
/** @jsxImportSource solid-js */
import { DropdownMenu } from "@grassroot/ui-solid";
const dropdownMenuFixture = {
id: "dropdownmenu",
trigger: "Actions",
header: "ledger-api",
align: "start",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
trigger: string;
header: string;
align: "start" | "end";
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
export default function DropdownMenuDemo() {
return (
<div>
<DropdownMenu
header={dropdownMenuFixture.header}
align={dropdownMenuFixture.align}
items={[...dropdownMenuFixture.items]}
>
{dropdownMenuFixture.trigger}
</DropdownMenu>
</div>
);
}

Installation

API Reference

Import

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

Props

Prop
Type
Default
Requirement
Description
items
MenuItem[]
required
header
string | undefined
optional
Mono uppercase section header at top of menu.
defaultOpen
boolean | undefined
false
optional
Render initially open — handy for layout/stories.
className
string | undefined
optional
align
"start" | "end" | undefined
"start" (left)
optional
Horizontal edge menu anchors to.
triggerClassName
string | undefined
optional
Override trigger button styling (e.g.
Prop
items
Type
MenuItem[]
Default
Requirement
required
Description
Prop
header
Type
string | undefined
Default
Requirement
optional
Description
Mono uppercase section header at top of menu.
Prop
defaultOpen
Type
boolean | undefined
Default
false
Requirement
optional
Description
Render initially open — handy for layout/stories.
Prop
className
Type
string | undefined
Default
Requirement
optional
Description
Prop
align
Type
"start" | "end" | undefined
Default
"start" (left)
Requirement
optional
Description
Horizontal edge menu anchors to.
Prop
triggerClassName
Type
string | undefined
Default
Requirement
optional
Description
Override trigger button styling (e.g.

Content regions

  • children

Import

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

Props

Prop
Type
Default
Requirement
items
readonly DropdownMenuEntry[]
required
header
string | undefined
undefined
optional
defaultOpen
boolean
false
optional
align
"start" | "end"
"start"
optional
triggerClassName
string | undefined
undefined
optional
Prop
items
Type
readonly DropdownMenuEntry[]
Default
Requirement
required
Prop
header
Type
string | undefined
Default
undefined
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
align
Type
"start" | "end"
Default
"start"
Requirement
optional
Prop
triggerClassName
Type
string | undefined
Default
undefined
Requirement
optional

Content regions

  • default

Import

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

Props

Prop
Type
Default
Requirement
items
readonly DropdownMenuEntry[]
required
header
string
optional
defaultOpen
boolean
false
optional
align
"start" | "end"
"start"
optional
triggerClassName
string
optional
Prop
items
Type
readonly DropdownMenuEntry[]
Default
Requirement
required
Prop
header
Type
string
Default
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
align
Type
"start" | "end"
Default
"start"
Requirement
optional
Prop
triggerClassName
Type
string
Default
Requirement
optional

Content regions

  • default

Import

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

Props

Prop
Type
Default
Requirement
items
readonly DropdownMenuItem[]
required
header
string
optional
defaultOpen
boolean
false
optional
className
string
optional
align
"start" | "end"
"start"
optional
triggerClassName
string
optional
Prop
items
Type
readonly DropdownMenuItem[]
Default
Requirement
required
Prop
header
Type
string
Default
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional
Prop
align
Type
"start" | "end"
Default
"start"
Requirement
optional
Prop
triggerClassName
Type
string
Default
Requirement
optional

Content regions

  • children

Import

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

Props

Prop
Type
Default
Requirement
items
DropdownMenuItem[]
required
header
string
optional
defaultOpen
boolean
false
optional
className
string
optional
align
"start" | "end"
"start"
optional
triggerClassName
string
optional
Prop
items
Type
DropdownMenuItem[]
Default
Requirement
required
Prop
header
Type
string
Default
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional
Prop
align
Type
"start" | "end"
Default
"start"
Requirement
optional
Prop
triggerClassName
Type
string
Default
Requirement
optional

Content regions

  • children