mode_legend_css.go RawHistoryFolder
1package theme
2
3import (
4 "fmt"
5 "strings"
6)
7
8// modeLegendColors maps legend mode classes to the palette variables of their mode.
9var modeLegendColors = []struct{ mode, color, text string }{
10 {"pane", "--pane-mode-color", "--pane-mode-text"},
11 {"vim", "--vim-mode-color", "--vim-mode-text"},
12 {"resize", "--resize-mode-color", "--resize-mode-text"},
13 {"tab", "--tab-mode-color", "--tab-mode-text"},
14 {"session", "--session-mode-color", "--session-mode-text"},
15}
16
17func generateModeLegendCSS() string {
18 var sb strings.Builder
19 sb.WriteString(`/* Mode frame legend: omnibox surface, tinted with the active mode color. */
20.mode-legend-anchor { background-color: transparent; }
21.omnibox-container.mode-legend-panel {
22 border-style: solid;
23 border-width: 0.125em;
24 padding: 0 0 0.375em 0;
25 min-width: 0;
26 animation: mode-legend-appear 120ms ease-out;
27}
28.omnibox-container.mode-legend-panel.mode-legend-lingering { opacity: 0.85; }
29.omnibox-container.mode-legend-panel.mode-legend-no-motion { animation: none; }
30.mode-legend-title {
31 font-family: var(--font-mono);
32 font-size: 0.8125em;
33 font-weight: bold;
34 padding: 0.375em 0.75em;
35 margin-bottom: 0.375em;
36}
37.mode-legend-content { padding: 0 0.25em; }
38.mode-legend-group { margin: 0 0.375em; min-width: 0; }
39.mode-legend-group-title {
40 font-family: var(--font-mono);
41 font-size: 0.6875em;
42 font-weight: bold;
43 margin-bottom: 0.25em;
44}
45.mode-legend-row { padding: 0.125em 0; min-width: 0; }
46.mode-legend-keycap {
47 font-family: var(--font-mono);
48 font-size: 0.75em;
49 font-weight: bold;
50 color: var(--control-text);
51 background-color: var(--surface-variant);
52 border-style: solid;
53 border-width: 0.0625em;
54 border-radius: 0.25em;
55 padding: 0.125em 0.375em;
56 margin-right: 0.375em;
57 transition: background-color 120ms ease-out, color 120ms ease-out;
58}
59.mode-legend-description { font-size: 0.75em; color: var(--surface-muted); }
60.mode-legend-row.mode-legend-dim { opacity: 0.3; }
61@keyframes mode-legend-appear {
62 from { opacity: 0; }
63 to { opacity: 1; }
64}
65`)
66 for _, m := range modeLegendColors {
67 fmt.Fprintf(&sb, `.omnibox-container.mode-legend-panel.mode-legend-%[1]s { border-color: var(%[2]s); }
68.mode-legend-%[1]s .mode-legend-title { background-color: var(%[2]s); color: var(%[3]s); }
69.mode-legend-%[1]s .mode-legend-group-title { color: var(%[2]s); }
70.mode-legend-%[1]s .mode-legend-keycap { border-color: alpha(var(%[2]s), 0.6); }
71.mode-legend-%[1]s .mode-legend-keycap.mode-legend-flash { background-color: var(%[2]s); color: var(%[3]s); }
72`, m.mode, m.color, m.text)
73 }
74 return sb.String()
75}