static_data.rs

  1use std::path::PathBuf;
  2use std::str::FromStr;
  3
  4use rand::Rng;
  5
  6use crate::{
  7    Buffer, BufferRow, BufferRows, EditorPane, FileSystemStatus, GitStatus, HighlightColor,
  8    HighlightedLine, HighlightedText, Icon, Keybinding, Label, LabelColor, ListEntry,
  9    ListEntrySize, ListItem, Livestream, MicStatus, ModifierKeys, PaletteItem, Player,
 10    PlayerCallStatus, PlayerWithCallStatus, ScreenShareStatus, Symbol, Tab, Theme, ToggleState,
 11    VideoStatus,
 12};
 13
 14pub fn static_tabs_example<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
 15    vec![
 16        Tab::new()
 17            .title("wip.rs".to_string())
 18            .icon(Icon::FileRust)
 19            .current(false)
 20            .fs_status(FileSystemStatus::Deleted),
 21        Tab::new()
 22            .title("Cargo.toml".to_string())
 23            .icon(Icon::FileToml)
 24            .current(false)
 25            .git_status(GitStatus::Modified),
 26        Tab::new()
 27            .title("Channels Panel".to_string())
 28            .icon(Icon::Hash)
 29            .current(false),
 30        Tab::new()
 31            .title("channels_panel.rs".to_string())
 32            .icon(Icon::FileRust)
 33            .current(true)
 34            .git_status(GitStatus::Modified),
 35        Tab::new()
 36            .title("workspace.rs".to_string())
 37            .current(false)
 38            .icon(Icon::FileRust)
 39            .git_status(GitStatus::Modified),
 40        Tab::new()
 41            .title("icon_button.rs".to_string())
 42            .icon(Icon::FileRust)
 43            .current(false),
 44        Tab::new()
 45            .title("storybook.rs".to_string())
 46            .icon(Icon::FileRust)
 47            .current(false)
 48            .git_status(GitStatus::Created),
 49        Tab::new()
 50            .title("theme.rs".to_string())
 51            .icon(Icon::FileRust)
 52            .current(false),
 53        Tab::new()
 54            .title("theme_registry.rs".to_string())
 55            .icon(Icon::FileRust)
 56            .current(false),
 57        Tab::new()
 58            .title("styleable_helpers.rs".to_string())
 59            .icon(Icon::FileRust)
 60            .current(false),
 61    ]
 62}
 63
 64pub fn static_tabs_1<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
 65    vec![
 66        Tab::new()
 67            .title("project_panel.rs".to_string())
 68            .icon(Icon::FileRust)
 69            .current(false)
 70            .fs_status(FileSystemStatus::Deleted),
 71        Tab::new()
 72            .title("tab_bar.rs".to_string())
 73            .icon(Icon::FileRust)
 74            .current(false)
 75            .git_status(GitStatus::Modified),
 76        Tab::new()
 77            .title("workspace.rs".to_string())
 78            .icon(Icon::FileRust)
 79            .current(false),
 80        Tab::new()
 81            .title("tab.rs".to_string())
 82            .icon(Icon::FileRust)
 83            .current(true)
 84            .git_status(GitStatus::Modified),
 85    ]
 86}
 87
 88pub fn static_tabs_2<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
 89    vec![
 90        Tab::new()
 91            .title("tab_bar.rs".to_string())
 92            .icon(Icon::FileRust)
 93            .current(false)
 94            .fs_status(FileSystemStatus::Deleted),
 95        Tab::new()
 96            .title("static_data.rs".to_string())
 97            .icon(Icon::FileRust)
 98            .current(true)
 99            .git_status(GitStatus::Modified),
100    ]
101}
102
103pub fn static_tabs_3<S: 'static + Send + Sync + Clone>() -> Vec<Tab<S>> {
104    vec![Tab::new().git_status(GitStatus::Created).current(true)]
105}
106
107pub fn static_players() -> Vec<Player> {
108    vec![
109        Player::new(
110            0,
111            "https://avatars.githubusercontent.com/u/1714999?v=4".into(),
112            "nathansobo".into(),
113        ),
114        Player::new(
115            1,
116            "https://avatars.githubusercontent.com/u/326587?v=4".into(),
117            "maxbrunsfeld".into(),
118        ),
119        Player::new(
120            2,
121            "https://avatars.githubusercontent.com/u/482957?v=4".into(),
122            "as-cii".into(),
123        ),
124        Player::new(
125            3,
126            "https://avatars.githubusercontent.com/u/1714999?v=4".into(),
127            "iamnbutler".into(),
128        ),
129        Player::new(
130            4,
131            "https://avatars.githubusercontent.com/u/1486634?v=4".into(),
132            "maxdeviant".into(),
133        ),
134    ]
135}
136
137#[derive(Debug)]
138pub struct PlayerData {
139    pub url: String,
140    pub name: String,
141}
142
143pub fn static_player_data() -> Vec<PlayerData> {
144    vec![
145        PlayerData {
146            url: "https://avatars.githubusercontent.com/u/1714999?v=4".into(),
147            name: "iamnbutler".into(),
148        },
149        PlayerData {
150            url: "https://avatars.githubusercontent.com/u/326587?v=4".into(),
151            name: "maxbrunsfeld".into(),
152        },
153        PlayerData {
154            url: "https://avatars.githubusercontent.com/u/482957?v=4".into(),
155            name: "as-cii".into(),
156        },
157        PlayerData {
158            url: "https://avatars.githubusercontent.com/u/1789?v=4".into(),
159            name: "nathansobo".into(),
160        },
161        PlayerData {
162            url: "https://avatars.githubusercontent.com/u/1486634?v=4".into(),
163            name: "ForLoveOfCats".into(),
164        },
165        PlayerData {
166            url: "https://avatars.githubusercontent.com/u/2690773?v=4".into(),
167            name: "SomeoneToIgnore".into(),
168        },
169        PlayerData {
170            url: "https://avatars.githubusercontent.com/u/19867440?v=4".into(),
171            name: "JosephTLyons".into(),
172        },
173        PlayerData {
174            url: "https://avatars.githubusercontent.com/u/24362066?v=4".into(),
175            name: "osiewicz".into(),
176        },
177        PlayerData {
178            url: "https://avatars.githubusercontent.com/u/22121886?v=4".into(),
179            name: "KCaverly".into(),
180        },
181        PlayerData {
182            url: "https://avatars.githubusercontent.com/u/1486634?v=4".into(),
183            name: "maxdeviant".into(),
184        },
185    ]
186}
187
188pub fn create_static_players(player_data: Vec<PlayerData>) -> Vec<Player> {
189    let mut players = Vec::new();
190    for data in player_data {
191        players.push(Player::new(players.len(), data.url, data.name));
192    }
193    players
194}
195
196pub fn static_player_1(data: &Vec<PlayerData>) -> Player {
197    Player::new(1, data[0].url.clone(), data[0].name.clone())
198}
199
200pub fn static_player_2(data: &Vec<PlayerData>) -> Player {
201    Player::new(2, data[1].url.clone(), data[1].name.clone())
202}
203
204pub fn static_player_3(data: &Vec<PlayerData>) -> Player {
205    Player::new(3, data[2].url.clone(), data[2].name.clone())
206}
207
208pub fn static_player_4(data: &Vec<PlayerData>) -> Player {
209    Player::new(4, data[3].url.clone(), data[3].name.clone())
210}
211
212pub fn static_player_5(data: &Vec<PlayerData>) -> Player {
213    Player::new(5, data[4].url.clone(), data[4].name.clone())
214}
215
216pub fn static_player_6(data: &Vec<PlayerData>) -> Player {
217    Player::new(6, data[5].url.clone(), data[5].name.clone())
218}
219
220pub fn static_player_7(data: &Vec<PlayerData>) -> Player {
221    Player::new(7, data[6].url.clone(), data[6].name.clone())
222}
223
224pub fn static_player_8(data: &Vec<PlayerData>) -> Player {
225    Player::new(8, data[7].url.clone(), data[7].name.clone())
226}
227
228pub fn static_player_9(data: &Vec<PlayerData>) -> Player {
229    Player::new(9, data[8].url.clone(), data[8].name.clone())
230}
231
232pub fn static_player_10(data: &Vec<PlayerData>) -> Player {
233    Player::new(10, data[9].url.clone(), data[9].name.clone())
234}
235
236pub fn static_livestream() -> Livestream {
237    Livestream {
238        players: random_players_with_call_status(7),
239        channel: Some("gpui2-ui".to_string()),
240    }
241}
242
243pub fn populate_player_call_status(
244    player: Player,
245    followers: Option<Vec<Player>>,
246) -> PlayerCallStatus {
247    let mut rng = rand::thread_rng();
248    let in_current_project: bool = rng.gen();
249    let disconnected: bool = rng.gen();
250    let voice_activity: f32 = rng.gen();
251    let mic_status = if rng.gen_bool(0.5) {
252        MicStatus::Muted
253    } else {
254        MicStatus::Unmuted
255    };
256    let video_status = if rng.gen_bool(0.5) {
257        VideoStatus::On
258    } else {
259        VideoStatus::Off
260    };
261    let screen_share_status = if rng.gen_bool(0.5) {
262        ScreenShareStatus::Shared
263    } else {
264        ScreenShareStatus::NotShared
265    };
266    PlayerCallStatus {
267        mic_status,
268        voice_activity,
269        video_status,
270        screen_share_status,
271        in_current_project,
272        disconnected,
273        following: None,
274        followers,
275    }
276}
277
278pub fn random_players_with_call_status(number_of_players: usize) -> Vec<PlayerWithCallStatus> {
279    let players = create_static_players(static_player_data());
280    let mut player_status = vec![];
281    for i in 0..number_of_players {
282        let followers = if i == 0 {
283            Some(vec![
284                players[1].clone(),
285                players[3].clone(),
286                players[5].clone(),
287                players[6].clone(),
288            ])
289        } else if i == 1 {
290            Some(vec![players[2].clone(), players[6].clone()])
291        } else {
292            None
293        };
294        let call_status = populate_player_call_status(players[i].clone(), followers);
295        player_status.push(PlayerWithCallStatus::new(players[i].clone(), call_status));
296    }
297    player_status
298}
299
300pub fn static_players_with_call_status() -> Vec<PlayerWithCallStatus> {
301    let players = static_players();
302    let mut player_0_status = PlayerCallStatus::new();
303    let player_1_status = PlayerCallStatus::new();
304    let player_2_status = PlayerCallStatus::new();
305    let mut player_3_status = PlayerCallStatus::new();
306    let mut player_4_status = PlayerCallStatus::new();
307
308    player_0_status.screen_share_status = ScreenShareStatus::Shared;
309    player_0_status.followers = Some(vec![players[1].clone(), players[3].clone()]);
310
311    player_3_status.voice_activity = 0.5;
312    player_4_status.mic_status = MicStatus::Muted;
313    player_4_status.in_current_project = false;
314
315    vec![
316        PlayerWithCallStatus::new(players[0].clone(), player_0_status),
317        PlayerWithCallStatus::new(players[1].clone(), player_1_status),
318        PlayerWithCallStatus::new(players[2].clone(), player_2_status),
319        PlayerWithCallStatus::new(players[3].clone(), player_3_status),
320        PlayerWithCallStatus::new(players[4].clone(), player_4_status),
321    ]
322}
323
324pub fn static_project_panel_project_items<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
325    vec![
326        ListEntry::new(Label::new("zed"))
327            .set_left_icon(Icon::FolderOpen.into())
328            .set_indent_level(0)
329            .set_toggle(ToggleState::Toggled),
330        ListEntry::new(Label::new(".cargo"))
331            .set_left_icon(Icon::Folder.into())
332            .set_indent_level(1),
333        ListEntry::new(Label::new(".config"))
334            .set_left_icon(Icon::Folder.into())
335            .set_indent_level(1),
336        ListEntry::new(Label::new(".git").color(LabelColor::Hidden))
337            .set_left_icon(Icon::Folder.into())
338            .set_indent_level(1),
339        ListEntry::new(Label::new(".cargo"))
340            .set_left_icon(Icon::Folder.into())
341            .set_indent_level(1),
342        ListEntry::new(Label::new(".idea").color(LabelColor::Hidden))
343            .set_left_icon(Icon::Folder.into())
344            .set_indent_level(1),
345        ListEntry::new(Label::new("assets"))
346            .set_left_icon(Icon::Folder.into())
347            .set_indent_level(1)
348            .set_toggle(ToggleState::Toggled),
349        ListEntry::new(Label::new("cargo-target").color(LabelColor::Hidden))
350            .set_left_icon(Icon::Folder.into())
351            .set_indent_level(1),
352        ListEntry::new(Label::new("crates"))
353            .set_left_icon(Icon::FolderOpen.into())
354            .set_indent_level(1)
355            .set_toggle(ToggleState::Toggled),
356        ListEntry::new(Label::new("activity_indicator"))
357            .set_left_icon(Icon::Folder.into())
358            .set_indent_level(2),
359        ListEntry::new(Label::new("ai"))
360            .set_left_icon(Icon::Folder.into())
361            .set_indent_level(2),
362        ListEntry::new(Label::new("audio"))
363            .set_left_icon(Icon::Folder.into())
364            .set_indent_level(2),
365        ListEntry::new(Label::new("auto_update"))
366            .set_left_icon(Icon::Folder.into())
367            .set_indent_level(2),
368        ListEntry::new(Label::new("breadcrumbs"))
369            .set_left_icon(Icon::Folder.into())
370            .set_indent_level(2),
371        ListEntry::new(Label::new("call"))
372            .set_left_icon(Icon::Folder.into())
373            .set_indent_level(2),
374        ListEntry::new(Label::new("sqlez").color(LabelColor::Modified))
375            .set_left_icon(Icon::Folder.into())
376            .set_indent_level(2)
377            .set_toggle(ToggleState::NotToggled),
378        ListEntry::new(Label::new("gpui2"))
379            .set_left_icon(Icon::FolderOpen.into())
380            .set_indent_level(2)
381            .set_toggle(ToggleState::Toggled),
382        ListEntry::new(Label::new("src"))
383            .set_left_icon(Icon::FolderOpen.into())
384            .set_indent_level(3)
385            .set_toggle(ToggleState::Toggled),
386        ListEntry::new(Label::new("derive_element.rs"))
387            .set_left_icon(Icon::FileRust.into())
388            .set_indent_level(4),
389        ListEntry::new(Label::new("storybook").color(LabelColor::Modified))
390            .set_left_icon(Icon::FolderOpen.into())
391            .set_indent_level(1)
392            .set_toggle(ToggleState::Toggled),
393        ListEntry::new(Label::new("docs").color(LabelColor::Default))
394            .set_left_icon(Icon::Folder.into())
395            .set_indent_level(2)
396            .set_toggle(ToggleState::Toggled),
397        ListEntry::new(Label::new("src").color(LabelColor::Modified))
398            .set_left_icon(Icon::FolderOpen.into())
399            .set_indent_level(3)
400            .set_toggle(ToggleState::Toggled),
401        ListEntry::new(Label::new("ui").color(LabelColor::Modified))
402            .set_left_icon(Icon::FolderOpen.into())
403            .set_indent_level(4)
404            .set_toggle(ToggleState::Toggled),
405        ListEntry::new(Label::new("component").color(LabelColor::Created))
406            .set_left_icon(Icon::FolderOpen.into())
407            .set_indent_level(5)
408            .set_toggle(ToggleState::Toggled),
409        ListEntry::new(Label::new("facepile.rs").color(LabelColor::Default))
410            .set_left_icon(Icon::FileRust.into())
411            .set_indent_level(6),
412        ListEntry::new(Label::new("follow_group.rs").color(LabelColor::Default))
413            .set_left_icon(Icon::FileRust.into())
414            .set_indent_level(6),
415        ListEntry::new(Label::new("list_item.rs").color(LabelColor::Created))
416            .set_left_icon(Icon::FileRust.into())
417            .set_indent_level(6),
418        ListEntry::new(Label::new("tab.rs").color(LabelColor::Default))
419            .set_left_icon(Icon::FileRust.into())
420            .set_indent_level(6),
421        ListEntry::new(Label::new("target").color(LabelColor::Hidden))
422            .set_left_icon(Icon::Folder.into())
423            .set_indent_level(1),
424        ListEntry::new(Label::new(".dockerignore"))
425            .set_left_icon(Icon::FileGeneric.into())
426            .set_indent_level(1),
427        ListEntry::new(Label::new(".DS_Store").color(LabelColor::Hidden))
428            .set_left_icon(Icon::FileGeneric.into())
429            .set_indent_level(1),
430        ListEntry::new(Label::new("Cargo.lock"))
431            .set_left_icon(Icon::FileLock.into())
432            .set_indent_level(1),
433        ListEntry::new(Label::new("Cargo.toml"))
434            .set_left_icon(Icon::FileToml.into())
435            .set_indent_level(1),
436        ListEntry::new(Label::new("Dockerfile"))
437            .set_left_icon(Icon::FileGeneric.into())
438            .set_indent_level(1),
439        ListEntry::new(Label::new("Procfile"))
440            .set_left_icon(Icon::FileGeneric.into())
441            .set_indent_level(1),
442        ListEntry::new(Label::new("README.md"))
443            .set_left_icon(Icon::FileDoc.into())
444            .set_indent_level(1),
445    ]
446    .into_iter()
447    .map(From::from)
448    .collect()
449}
450
451pub fn static_project_panel_single_items<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
452    vec![
453        ListEntry::new(Label::new("todo.md"))
454            .set_left_icon(Icon::FileDoc.into())
455            .set_indent_level(0),
456        ListEntry::new(Label::new("README.md"))
457            .set_left_icon(Icon::FileDoc.into())
458            .set_indent_level(0),
459        ListEntry::new(Label::new("config.json"))
460            .set_left_icon(Icon::FileGeneric.into())
461            .set_indent_level(0),
462    ]
463    .into_iter()
464    .map(From::from)
465    .collect()
466}
467
468pub fn static_collab_panel_current_call<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
469    vec![
470        ListEntry::new(Label::new("as-cii")).set_left_avatar("http://github.com/as-cii.png?s=50"),
471        ListEntry::new(Label::new("nathansobo"))
472            .set_left_avatar("http://github.com/nathansobo.png?s=50"),
473        ListEntry::new(Label::new("maxbrunsfeld"))
474            .set_left_avatar("http://github.com/maxbrunsfeld.png?s=50"),
475    ]
476    .into_iter()
477    .map(From::from)
478    .collect()
479}
480
481pub fn static_collab_panel_channels<S: 'static + Send + Sync + Clone>() -> Vec<ListItem<S>> {
482    vec![
483        ListEntry::new(Label::new("zed"))
484            .set_left_icon(Icon::Hash.into())
485            .set_size(ListEntrySize::Medium)
486            .set_indent_level(0),
487        ListEntry::new(Label::new("community"))
488            .set_left_icon(Icon::Hash.into())
489            .set_size(ListEntrySize::Medium)
490            .set_indent_level(1),
491        ListEntry::new(Label::new("dashboards"))
492            .set_left_icon(Icon::Hash.into())
493            .set_size(ListEntrySize::Medium)
494            .set_indent_level(2),
495        ListEntry::new(Label::new("feedback"))
496            .set_left_icon(Icon::Hash.into())
497            .set_size(ListEntrySize::Medium)
498            .set_indent_level(2),
499        ListEntry::new(Label::new("teams-in-channels-alpha"))
500            .set_left_icon(Icon::Hash.into())
501            .set_size(ListEntrySize::Medium)
502            .set_indent_level(2),
503        ListEntry::new(Label::new("current-projects"))
504            .set_left_icon(Icon::Hash.into())
505            .set_size(ListEntrySize::Medium)
506            .set_indent_level(1),
507        ListEntry::new(Label::new("codegen"))
508            .set_left_icon(Icon::Hash.into())
509            .set_size(ListEntrySize::Medium)
510            .set_indent_level(2),
511        ListEntry::new(Label::new("gpui2"))
512            .set_left_icon(Icon::Hash.into())
513            .set_size(ListEntrySize::Medium)
514            .set_indent_level(2),
515        ListEntry::new(Label::new("livestreaming"))
516            .set_left_icon(Icon::Hash.into())
517            .set_size(ListEntrySize::Medium)
518            .set_indent_level(2),
519        ListEntry::new(Label::new("open-source"))
520            .set_left_icon(Icon::Hash.into())
521            .set_size(ListEntrySize::Medium)
522            .set_indent_level(2),
523        ListEntry::new(Label::new("replace"))
524            .set_left_icon(Icon::Hash.into())
525            .set_size(ListEntrySize::Medium)
526            .set_indent_level(2),
527        ListEntry::new(Label::new("semantic-index"))
528            .set_left_icon(Icon::Hash.into())
529            .set_size(ListEntrySize::Medium)
530            .set_indent_level(2),
531        ListEntry::new(Label::new("vim"))
532            .set_left_icon(Icon::Hash.into())
533            .set_size(ListEntrySize::Medium)
534            .set_indent_level(2),
535        ListEntry::new(Label::new("web-tech"))
536            .set_left_icon(Icon::Hash.into())
537            .set_size(ListEntrySize::Medium)
538            .set_indent_level(2),
539    ]
540    .into_iter()
541    .map(From::from)
542    .collect()
543}
544
545pub fn example_editor_actions<S: 'static + Send + Sync + Clone>() -> Vec<PaletteItem<S>> {
546    vec![
547        PaletteItem::new("New File").keybinding(Keybinding::new(
548            "N".to_string(),
549            ModifierKeys::new().command(true),
550        )),
551        PaletteItem::new("Open File").keybinding(Keybinding::new(
552            "O".to_string(),
553            ModifierKeys::new().command(true),
554        )),
555        PaletteItem::new("Save File").keybinding(Keybinding::new(
556            "S".to_string(),
557            ModifierKeys::new().command(true),
558        )),
559        PaletteItem::new("Cut").keybinding(Keybinding::new(
560            "X".to_string(),
561            ModifierKeys::new().command(true),
562        )),
563        PaletteItem::new("Copy").keybinding(Keybinding::new(
564            "C".to_string(),
565            ModifierKeys::new().command(true),
566        )),
567        PaletteItem::new("Paste").keybinding(Keybinding::new(
568            "V".to_string(),
569            ModifierKeys::new().command(true),
570        )),
571        PaletteItem::new("Undo").keybinding(Keybinding::new(
572            "Z".to_string(),
573            ModifierKeys::new().command(true),
574        )),
575        PaletteItem::new("Redo").keybinding(Keybinding::new(
576            "Z".to_string(),
577            ModifierKeys::new().command(true).shift(true),
578        )),
579        PaletteItem::new("Find").keybinding(Keybinding::new(
580            "F".to_string(),
581            ModifierKeys::new().command(true),
582        )),
583        PaletteItem::new("Replace").keybinding(Keybinding::new(
584            "R".to_string(),
585            ModifierKeys::new().command(true),
586        )),
587        PaletteItem::new("Jump to Line"),
588        PaletteItem::new("Select All"),
589        PaletteItem::new("Deselect All"),
590        PaletteItem::new("Switch Document"),
591        PaletteItem::new("Insert Line Below"),
592        PaletteItem::new("Insert Line Above"),
593        PaletteItem::new("Move Line Up"),
594        PaletteItem::new("Move Line Down"),
595        PaletteItem::new("Toggle Comment"),
596        PaletteItem::new("Delete Line"),
597    ]
598}
599
600pub fn empty_editor_example() -> EditorPane {
601    EditorPane::new(
602        static_tabs_example(),
603        PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
604        vec![],
605        empty_buffer_example(),
606    )
607}
608
609pub fn empty_buffer_example<S: 'static + Send + Sync + Clone>() -> Buffer<S> {
610    Buffer::new().set_rows(Some(BufferRows::default()))
611}
612
613pub fn hello_world_rust_editor_example(theme: &Theme) -> EditorPane {
614    EditorPane::new(
615        static_tabs_example(),
616        PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
617        vec![Symbol(vec![
618            HighlightedText {
619                text: "fn ".to_string(),
620                color: HighlightColor::Keyword.hsla(&theme),
621            },
622            HighlightedText {
623                text: "main".to_string(),
624                color: HighlightColor::Function.hsla(&theme),
625            },
626        ])],
627        hello_world_rust_buffer_example(theme),
628    )
629}
630
631pub fn hello_world_rust_buffer_example<S: 'static + Send + Sync + Clone>(
632    theme: &Theme,
633) -> Buffer<S> {
634    Buffer::new()
635        .set_title("hello_world.rs".to_string())
636        .set_path("src/hello_world.rs".to_string())
637        .set_language("rust".to_string())
638        .set_rows(Some(BufferRows {
639            show_line_numbers: true,
640            rows: hello_world_rust_buffer_rows(theme),
641        }))
642}
643
644pub fn hello_world_rust_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
645    let show_line_number = true;
646
647    vec![
648        BufferRow {
649            line_number: 1,
650            code_action: false,
651            current: true,
652            line: Some(HighlightedLine {
653                highlighted_texts: vec![
654                    HighlightedText {
655                        text: "fn ".to_string(),
656                        color: HighlightColor::Keyword.hsla(&theme),
657                    },
658                    HighlightedText {
659                        text: "main".to_string(),
660                        color: HighlightColor::Function.hsla(&theme),
661                    },
662                    HighlightedText {
663                        text: "() {".to_string(),
664                        color: HighlightColor::Default.hsla(&theme),
665                    },
666                ],
667            }),
668            cursors: None,
669            status: GitStatus::None,
670            show_line_number,
671        },
672        BufferRow {
673            line_number: 2,
674            code_action: false,
675            current: false,
676            line: Some(HighlightedLine {
677                highlighted_texts: vec![HighlightedText {
678                    text: "    // Statements here are executed when the compiled binary is called."
679                        .to_string(),
680                    color: HighlightColor::Comment.hsla(&theme),
681                }],
682            }),
683            cursors: None,
684            status: GitStatus::None,
685            show_line_number,
686        },
687        BufferRow {
688            line_number: 3,
689            code_action: false,
690            current: false,
691            line: None,
692            cursors: None,
693            status: GitStatus::None,
694            show_line_number,
695        },
696        BufferRow {
697            line_number: 4,
698            code_action: false,
699            current: false,
700            line: Some(HighlightedLine {
701                highlighted_texts: vec![HighlightedText {
702                    text: "    // Print text to the console.".to_string(),
703                    color: HighlightColor::Comment.hsla(&theme),
704                }],
705            }),
706            cursors: None,
707            status: GitStatus::None,
708            show_line_number,
709        },
710        BufferRow {
711            line_number: 5,
712            code_action: false,
713            current: false,
714            line: Some(HighlightedLine {
715                highlighted_texts: vec![
716                    HighlightedText {
717                        text: "    println!(".to_string(),
718                        color: HighlightColor::Default.hsla(&theme),
719                    },
720                    HighlightedText {
721                        text: "\"Hello, world!\"".to_string(),
722                        color: HighlightColor::String.hsla(&theme),
723                    },
724                    HighlightedText {
725                        text: ");".to_string(),
726                        color: HighlightColor::Default.hsla(&theme),
727                    },
728                ],
729            }),
730            cursors: None,
731            status: GitStatus::None,
732            show_line_number,
733        },
734        BufferRow {
735            line_number: 6,
736            code_action: false,
737            current: false,
738            line: Some(HighlightedLine {
739                highlighted_texts: vec![HighlightedText {
740                    text: "}".to_string(),
741                    color: HighlightColor::Default.hsla(&theme),
742                }],
743            }),
744            cursors: None,
745            status: GitStatus::None,
746            show_line_number,
747        },
748    ]
749}
750
751pub fn hello_world_rust_editor_with_status_example(theme: &Theme) -> EditorPane {
752    EditorPane::new(
753        static_tabs_example(),
754        PathBuf::from_str("crates/ui/src/static_data.rs").unwrap(),
755        vec![Symbol(vec![
756            HighlightedText {
757                text: "fn ".to_string(),
758                color: HighlightColor::Keyword.hsla(&theme),
759            },
760            HighlightedText {
761                text: "main".to_string(),
762                color: HighlightColor::Function.hsla(&theme),
763            },
764        ])],
765        hello_world_rust_buffer_with_status_example(theme),
766    )
767}
768
769pub fn hello_world_rust_buffer_with_status_example<S: 'static + Send + Sync + Clone>(
770    theme: &Theme,
771) -> Buffer<S> {
772    Buffer::new()
773        .set_title("hello_world.rs".to_string())
774        .set_path("src/hello_world.rs".to_string())
775        .set_language("rust".to_string())
776        .set_rows(Some(BufferRows {
777            show_line_numbers: true,
778            rows: hello_world_rust_with_status_buffer_rows(theme),
779        }))
780}
781
782pub fn hello_world_rust_with_status_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
783    let show_line_number = true;
784
785    vec![
786        BufferRow {
787            line_number: 1,
788            code_action: false,
789            current: true,
790            line: Some(HighlightedLine {
791                highlighted_texts: vec![
792                    HighlightedText {
793                        text: "fn ".to_string(),
794                        color: HighlightColor::Keyword.hsla(&theme),
795                    },
796                    HighlightedText {
797                        text: "main".to_string(),
798                        color: HighlightColor::Function.hsla(&theme),
799                    },
800                    HighlightedText {
801                        text: "() {".to_string(),
802                        color: HighlightColor::Default.hsla(&theme),
803                    },
804                ],
805            }),
806            cursors: None,
807            status: GitStatus::None,
808            show_line_number,
809        },
810        BufferRow {
811            line_number: 2,
812            code_action: false,
813            current: false,
814            line: Some(HighlightedLine {
815                highlighted_texts: vec![HighlightedText {
816                    text: "// Statements here are executed when the compiled binary is called."
817                        .to_string(),
818                    color: HighlightColor::Comment.hsla(&theme),
819                }],
820            }),
821            cursors: None,
822            status: GitStatus::Modified,
823            show_line_number,
824        },
825        BufferRow {
826            line_number: 3,
827            code_action: false,
828            current: false,
829            line: None,
830            cursors: None,
831            status: GitStatus::None,
832            show_line_number,
833        },
834        BufferRow {
835            line_number: 4,
836            code_action: false,
837            current: false,
838            line: Some(HighlightedLine {
839                highlighted_texts: vec![HighlightedText {
840                    text: "    // Print text to the console.".to_string(),
841                    color: HighlightColor::Comment.hsla(&theme),
842                }],
843            }),
844            cursors: None,
845            status: GitStatus::None,
846            show_line_number,
847        },
848        BufferRow {
849            line_number: 5,
850            code_action: false,
851            current: false,
852            line: Some(HighlightedLine {
853                highlighted_texts: vec![
854                    HighlightedText {
855                        text: "    println!(".to_string(),
856                        color: HighlightColor::Default.hsla(&theme),
857                    },
858                    HighlightedText {
859                        text: "\"Hello, world!\"".to_string(),
860                        color: HighlightColor::String.hsla(&theme),
861                    },
862                    HighlightedText {
863                        text: ");".to_string(),
864                        color: HighlightColor::Default.hsla(&theme),
865                    },
866                ],
867            }),
868            cursors: None,
869            status: GitStatus::None,
870            show_line_number,
871        },
872        BufferRow {
873            line_number: 6,
874            code_action: false,
875            current: false,
876            line: Some(HighlightedLine {
877                highlighted_texts: vec![HighlightedText {
878                    text: "}".to_string(),
879                    color: HighlightColor::Default.hsla(&theme),
880                }],
881            }),
882            cursors: None,
883            status: GitStatus::None,
884            show_line_number,
885        },
886        BufferRow {
887            line_number: 7,
888            code_action: false,
889            current: false,
890            line: Some(HighlightedLine {
891                highlighted_texts: vec![HighlightedText {
892                    text: "".to_string(),
893                    color: HighlightColor::Default.hsla(&theme),
894                }],
895            }),
896            cursors: None,
897            status: GitStatus::Created,
898            show_line_number,
899        },
900        BufferRow {
901            line_number: 8,
902            code_action: false,
903            current: false,
904            line: Some(HighlightedLine {
905                highlighted_texts: vec![HighlightedText {
906                    text: "// Marshall and Nate were here".to_string(),
907                    color: HighlightColor::Comment.hsla(&theme),
908                }],
909            }),
910            cursors: None,
911            status: GitStatus::Created,
912            show_line_number,
913        },
914    ]
915}
916
917pub fn terminal_buffer<S: 'static + Send + Sync + Clone>(theme: &Theme) -> Buffer<S> {
918    Buffer::new()
919        .set_title("zed — fish".to_string())
920        .set_rows(Some(BufferRows {
921            show_line_numbers: false,
922            rows: terminal_buffer_rows(theme),
923        }))
924}
925
926pub fn terminal_buffer_rows(theme: &Theme) -> Vec<BufferRow> {
927    let show_line_number = false;
928
929    vec![
930        BufferRow {
931            line_number: 1,
932            code_action: false,
933            current: false,
934            line: Some(HighlightedLine {
935                highlighted_texts: vec![
936                    HighlightedText {
937                        text: "maxdeviant ".to_string(),
938                        color: HighlightColor::Keyword.hsla(&theme),
939                    },
940                    HighlightedText {
941                        text: "in ".to_string(),
942                        color: HighlightColor::Default.hsla(&theme),
943                    },
944                    HighlightedText {
945                        text: "profaned-capital ".to_string(),
946                        color: HighlightColor::Function.hsla(&theme),
947                    },
948                    HighlightedText {
949                        text: "in ".to_string(),
950                        color: HighlightColor::Default.hsla(&theme),
951                    },
952                    HighlightedText {
953                        text: "~/p/zed ".to_string(),
954                        color: HighlightColor::Function.hsla(&theme),
955                    },
956                    HighlightedText {
957                        text: "on ".to_string(),
958                        color: HighlightColor::Default.hsla(&theme),
959                    },
960                    HighlightedText {
961                        text: " gpui2-ui ".to_string(),
962                        color: HighlightColor::Keyword.hsla(&theme),
963                    },
964                ],
965            }),
966            cursors: None,
967            status: GitStatus::None,
968            show_line_number,
969        },
970        BufferRow {
971            line_number: 2,
972            code_action: false,
973            current: false,
974            line: Some(HighlightedLine {
975                highlighted_texts: vec![HighlightedText {
976                    text: "λ ".to_string(),
977                    color: HighlightColor::String.hsla(&theme),
978                }],
979            }),
980            cursors: None,
981            status: GitStatus::None,
982            show_line_number,
983        },
984    ]
985}