Skip to repository content157 lines · 5.4 KB · rust
tenant.openagents/omega
No repository description is available.
OpenAgents Git authority 2026-07-28T03:32:12.002Z Public web read
NIP-34 coordinate
30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omegaMaintainersHidden in public view
References2 branches · 1 tag
Read-only clone
git clone https://openagents.com/git/tenant.openagents/omega.gitBrowse files
component_preview.rs
1//! Component Preview Example
2//!
3//! Run with: `cargo run -p component_preview --example component_preview"`
4use assets::Assets;
5use fs::RealFs;
6use gpui::{AppContext as _, Bounds, KeyBinding, WindowBounds, WindowOptions, actions, size};
7
8use client::{Client, UserStore};
9use language::LanguageRegistry;
10use node_runtime::NodeRuntime;
11use project::Project;
12use reqwest_client::ReqwestClient;
13use session::{AppSession, Session};
14use std::sync::Arc;
15use ui::{App, px};
16use workspace::{AppState, Workspace, WorkspaceStore};
17
18use component_preview::{ComponentPreview, init};
19
20actions!(component_preview, [Quit]);
21
22fn quit(_: &Quit, cx: &mut App) {
23 cx.quit();
24}
25
26fn main() {
27 env_logger::builder()
28 .filter_level(log::LevelFilter::Warn)
29 .init();
30
31 gpui_platform::application().with_assets(Assets).run(|cx| {
32 component::init();
33
34 cx.on_action(quit);
35 cx.bind_keys([KeyBinding::new("cmd-q", Quit, None)]);
36 let version = release_channel::AppVersion::load(env!("CARGO_PKG_VERSION"), None, None);
37 release_channel::init(version, cx);
38 cx.set_global(db::AppDatabase::new());
39 Assets
40 .load_fonts(cx)
41 .expect("Failed to load embedded fonts");
42
43 let http_client =
44 ReqwestClient::user_agent("component_preview").expect("Failed to create HTTP client");
45 cx.set_http_client(Arc::new(http_client));
46
47 let fs = Arc::new(RealFs::new(None, cx.background_executor().clone()));
48 <dyn fs::Fs>::set_global(fs.clone(), cx);
49
50 settings::init(cx);
51 theme_settings::init(theme::LoadThemes::JustBase, cx);
52
53 let languages = Arc::new(LanguageRegistry::new(cx.background_executor().clone()));
54 let client = Client::production(cx);
55 client::init(&client, cx);
56
57 let user_store = cx.new(|cx| UserStore::new(client.clone(), cx));
58 let workspace_store = cx.new(|cx| WorkspaceStore::new(client.clone(), cx));
59 let session_id = uuid::Uuid::new_v4().to_string();
60 let kvp = db::kvp::KeyValueStore::global(cx);
61 let session = cx
62 .foreground_executor()
63 .block_on(Session::new(session_id, kvp));
64 let session = cx.new(|cx| AppSession::new(session, cx));
65 let node_runtime = NodeRuntime::unavailable();
66
67 let app_state = Arc::new(AppState {
68 languages,
69 client,
70 user_store,
71 workspace_store,
72 fs,
73 build_window_options: |_, _| Default::default(),
74 node_runtime,
75 session,
76 });
77 AppState::set_global(app_state.clone(), cx);
78
79 workspace::init(app_state.clone(), cx);
80 editor::init(cx);
81 init(app_state.clone(), cx);
82
83 let size = size(px(1200.), px(800.));
84 let bounds = Bounds::centered(None, size, cx);
85
86 cx.open_window(
87 WindowOptions {
88 window_bounds: Some(WindowBounds::Windowed(bounds)),
89 ..Default::default()
90 },
91 {
92 move |window, cx| {
93 let app_state = app_state;
94 theme_settings::setup_ui_font(window, cx);
95
96 let project = Project::local(
97 app_state.client.clone(),
98 app_state.node_runtime.clone(),
99 app_state.user_store.clone(),
100 app_state.languages.clone(),
101 app_state.fs.clone(),
102 None,
103 project::LocalProjectFlags {
104 init_worktree_trust: false,
105 ..Default::default()
106 },
107 cx,
108 );
109
110 let workspace = cx.new(|cx| {
111 Workspace::new(
112 Default::default(),
113 project.clone(),
114 app_state.clone(),
115 window,
116 cx,
117 )
118 });
119
120 workspace.update(cx, |workspace, cx| {
121 let weak_workspace = cx.entity().downgrade();
122 let language_registry = app_state.languages.clone();
123 let user_store = app_state.user_store.clone();
124
125 let component_preview = cx.new(|cx| {
126 ComponentPreview::new(
127 weak_workspace,
128 project,
129 language_registry,
130 user_store,
131 None,
132 None,
133 window,
134 cx,
135 )
136 .expect("Failed to create component preview")
137 });
138
139 workspace.add_item_to_active_pane(
140 Box::new(component_preview),
141 None,
142 true,
143 window,
144 cx,
145 );
146 });
147
148 workspace
149 }
150 },
151 )
152 .expect("Failed to open component preview window");
153
154 cx.activate(true);
155 });
156}
157