Docs Components Navigation

ContextMenu

React example follows below.
ts
const contextMenuFixture = {
id: "contextmenu",
region: "Right-click anywhere here",
header: "ledger-api",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
region: string;
header: string;
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
import { ContextMenu } from "@grassroot/ui-react";
export default function ContextMenuDemo() {
return (
<div>
<ContextMenu header={contextMenuFixture.header} items={[...contextMenuFixture.items]}>
<div>{contextMenuFixture.region}</div>
</ContextMenu>
</div>
);
}
ts
<script setup lang="ts">
const contextMenuFixture = {
id: "contextmenu",
region: "Right-click anywhere here",
header: "ledger-api",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
region: string;
header: string;
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
import { ContextMenu } from "@grassroot/ui-vue";
</script>
<template>
<div>
<ContextMenu :header="contextMenuFixture.header" :items="contextMenuFixture.items">
<div>{{ contextMenuFixture.region }}</div>
</ContextMenu>
</div>
</template>
ts
import { Component } from "@angular/core";
const contextMenuFixture = {
id: "contextmenu",
region: "Right-click anywhere here",
header: "ledger-api",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
region: string;
header: string;
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
import { GrassrootContextMenu } from "@grassroot/ui-angular";
@Component({
selector: "app-context-menu-demo",
standalone: true,
imports: [GrassrootContextMenu],
template: `
<div>
<grassroot-context-menu [header]="fixture.header" [items]="fixture.items">
<div>{{ fixture.region }}</div>
</grassroot-context-menu>
</div>
`,
})
export class ContextMenuDemoComponent {
protected readonly fixture = contextMenuFixture;
}
export default ContextMenuDemoComponent;
ts
<script lang="ts">
import { ContextMenu } from "@grassroot/ui-svelte";
const contextMenuFixture = {
id: "contextmenu",
region: "Right-click anywhere here",
header: "ledger-api",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
region: string;
header: string;
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
</script>
{#snippet children()}<div>{contextMenuFixture.region}</div>{/snippet}
<div>
<ContextMenu header={contextMenuFixture.header} items={contextMenuFixture.items} {children} />
</div>
ts
/** @jsxImportSource solid-js */
import { ContextMenu } from "@grassroot/ui-solid";
const contextMenuFixture = {
id: "contextmenu",
region: "Right-click anywhere here",
header: "ledger-api",
items: [
{ label: "View logs", shortcut: "⌘L" },
{ divider: true },
{ label: "Restart replicas", shortcut: "⌘R", disabled: true },
{ label: "Tear down", shortcut: "⌘⌫", danger: true },
],
} satisfies {
id: string;
region: string;
header: string;
items: ReadonlyArray<
{ label: string; shortcut?: string; danger?: boolean; disabled?: boolean } | { divider: true }
>;
};
export default function ContextMenuDemo() {
return (
<div>
<ContextMenu header={contextMenuFixture.header} items={[...contextMenuFixture.items]}>
<div>{contextMenuFixture.region}</div>
</ContextMenu>
</div>
);
}

Installation

API Reference

Import

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

Props

Prop
Type
Default
Requirement
Description
items
MenuItem[]
required
header
string | undefined
optional
Mono uppercase section header atop the menu.
defaultOpen
boolean | undefined
optional
Open at a fixed point for layout/stories (skips the right-click).
defaultPos
{ x: number; y: number; } | undefined
{x:24,y:24}
optional
Anchor point used when `defaultOpen`.
className
string | undefined
optional
Prop
items
Type
MenuItem[]
Default
Requirement
required
Description
Prop
header
Type
string | undefined
Default
Requirement
optional
Description
Mono uppercase section header atop the menu.
Prop
defaultOpen
Type
boolean | undefined
Default
Requirement
optional
Description
Open at a fixed point for layout/stories (skips the right-click).
Prop
defaultPos
Type
{ x: number; y: number; } | undefined
Default
{x:24,y:24}
Requirement
optional
Description
Anchor point used when `defaultOpen`.
Prop
className
Type
string | undefined
Default
Requirement
optional
Description

Content regions

  • children

Import

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

Props

Prop
Type
Default
Requirement
items
readonly ContextMenuItem[]
required
header
string | undefined
undefined
optional
defaultOpen
boolean
false
optional
defaultPos
{ x: number; y: number }
() => ({ x: 24, y: 24 })
optional
Prop
items
Type
readonly ContextMenuItem[]
Default
Requirement
required
Prop
header
Type
string | undefined
Default
undefined
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
defaultPos
Type
{ x: number; y: number }
Default
() => ({ x: 24, y: 24 })
Requirement
optional

Content regions

  • default

Import

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

Props

Prop
Type
Default
Requirement
items
readonly AngularContextMenuItem[]
required
header
string
optional
defaultOpen
boolean
false
optional
defaultPos
{ x: number; y: number }
{ x: 24, y: 24 }
optional
Prop
items
Type
readonly AngularContextMenuItem[]
Default
Requirement
required
Prop
header
Type
string
Default
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
defaultPos
Type
{ x: number; y: number }
Default
{ x: 24, y: 24 }
Requirement
optional

Content regions

  • default

Import

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

Props

Prop
Type
Default
Requirement
items
readonly ContextMenuItem[]
required
header
string
optional
defaultOpen
boolean
false
optional
defaultPos
{ x: number; y: number }
optional
className
string
optional
Prop
items
Type
readonly ContextMenuItem[]
Default
Requirement
required
Prop
header
Type
string
Default
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
defaultPos
Type
{ x: number; y: number }
Default
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional

Content regions

  • children

Import

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

Props

Prop
Type
Default
Requirement
items
ContextMenuItem[]
required
header
string
optional
defaultOpen
boolean
false
optional
defaultPos
{ x: number; y: number }
optional
className
string
optional
Prop
items
Type
ContextMenuItem[]
Default
Requirement
required
Prop
header
Type
string
Default
Requirement
optional
Prop
defaultOpen
Type
boolean
Default
false
Requirement
optional
Prop
defaultPos
Type
{ x: number; y: number }
Default
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional

Content regions

  • children