keybinding.rs

 1use gpui::NoAction;
 2use gpui::Render;
 3use itertools::Itertools;
 4use story::{Story, StoryContainer};
 5
 6use crate::{prelude::*, KeyBinding};
 7
 8pub struct KeybindingStory;
 9
10pub fn binding(key: &str) -> gpui::KeyBinding {
11    gpui::KeyBinding::new(key, NoAction {}, None)
12}
13
14impl Render for KeybindingStory {
15    fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
16        let all_modifier_permutations = ["ctrl", "alt", "cmd", "shift"].into_iter().permutations(2);
17
18        StoryContainer::new(
19            "KeyBinding",
20            "crates/ui/src/components/stories/keybinding.rs",
21        )
22        .child(Story::label("Single Key"))
23        .child(KeyBinding::new(binding("Z")))
24        .child(Story::label("Single Key with Modifier"))
25        .child(
26            div()
27                .flex()
28                .gap_3()
29                .child(KeyBinding::new(binding("ctrl-c")))
30                .child(KeyBinding::new(binding("alt-c")))
31                .child(KeyBinding::new(binding("cmd-c")))
32                .child(KeyBinding::new(binding("shift-c"))),
33        )
34        .child(Story::label("Single Key with Modifier (Permuted)"))
35        .child(
36            div()
37                .flex()
38                .flex_col()
39                .children(
40                    all_modifier_permutations
41                        .chunks(4)
42                        .into_iter()
43                        .map(|chunk| {
44                            div()
45                                .flex()
46                                .gap_4()
47                                .py_3()
48                                .children(chunk.map(|permutation| {
49                                    KeyBinding::new(binding(&(permutation.join("-") + "-x")))
50                                }))
51                        }),
52                ),
53        )
54        .child(Story::label("Single Key with All Modifiers"))
55        .child(KeyBinding::new(binding("ctrl-alt-cmd-shift-z")))
56        .child(Story::label("Chord"))
57        .child(KeyBinding::new(binding("a z")))
58        .child(Story::label("Chord with Modifier"))
59        .child(KeyBinding::new(binding("ctrl-a shift-z")))
60        .child(KeyBinding::new(binding("fn-s")))
61        .child(Story::label("Single Key with All Modifiers (Linux)"))
62        .child(
63            KeyBinding::new(binding("ctrl-alt-cmd-shift-z")).platform_style(PlatformStyle::Linux),
64        )
65        .child(Story::label("Chord (Linux)"))
66        .child(KeyBinding::new(binding("a z")).platform_style(PlatformStyle::Linux))
67        .child(Story::label("Chord with Modifier (Linux)"))
68        .child(KeyBinding::new(binding("ctrl-a shift-z")).platform_style(PlatformStyle::Linux))
69        .child(KeyBinding::new(binding("fn-s")).platform_style(PlatformStyle::Linux))
70        .child(Story::label("Single Key with All Modifiers (Windows)"))
71        .child(
72            KeyBinding::new(binding("ctrl-alt-cmd-shift-z")).platform_style(PlatformStyle::Windows),
73        )
74        .child(Story::label("Chord (Windows)"))
75        .child(KeyBinding::new(binding("a z")).platform_style(PlatformStyle::Windows))
76        .child(Story::label("Chord with Modifier (Windows)"))
77        .child(KeyBinding::new(binding("ctrl-a shift-z")).platform_style(PlatformStyle::Windows))
78        .child(KeyBinding::new(binding("fn-s")).platform_style(PlatformStyle::Windows))
79    }
80}