contextMenu.ts

 1import { ColorScheme } from "../theme/colorScheme"
 2import { background, border, borderColor, text } from "./components"
 3import { interactive, toggleable } from "../element"
 4
 5export default function contextMenu(colorScheme: ColorScheme) {
 6    let layer = colorScheme.middle
 7    return {
 8        background: background(layer),
 9        cornerRadius: 10,
10        padding: 4,
11        shadow: colorScheme.popoverShadow,
12        border: border(layer),
13        keystrokeMargin: 30,
14        item: toggleable({
15            base:
16                interactive({
17                    base: {
18                        iconSpacing: 8,
19                        iconWidth: 14,
20                        padding: { left: 6, right: 6, top: 2, bottom: 2 },
21                        cornerRadius: 6,
22                        label: text(layer, "sans", { size: "sm" }),
23                        keystroke: {
24                            ...text(layer, "sans", "variant", {
25                                size: "sm",
26                                weight: "bold",
27                            }),
28                            padding: { left: 3, right: 3 },
29                        },
30                    },
31                    state: {
32                        hovered: {
33                            background: background(layer, "hovered"),
34                            label: text(layer, "sans", "hovered", { size: "sm" }),
35                            keystroke: {
36                                ...text(layer, "sans", "hovered", {
37                                    size: "sm",
38                                    weight: "bold",
39                                }),
40                                padding: { left: 3, right: 3 },
41                            },
42                        },
43                        clicked: {
44                            background: background(layer, "pressed"),
45                        },
46                    },
47                }),
48            state: {
49                active: {
50                    default: {
51                        background: background(layer, "active"),
52                    },
53                    hovered: {
54                        background: background(layer, "hovered"),
55                    },
56                    clicked: {
57                        background: background(layer, "pressed"),
58                    },
59                }
60            }
61        }
62        ),
63
64        separator: {
65            background: borderColor(layer),
66            margin: { top: 2, bottom: 2 },
67        },
68    }
69}