mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-07-07 13:25:18 +02:00
Font size and other fixes
This commit is contained in:
@@ -22,30 +22,34 @@ export function ExchangesTable({ exchanges, style, className }: Props) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Table scrollable className={classNames('px-2', className)} style={style}>
|
<div className={className} style={style}>
|
||||||
<TableHead>
|
<Table scrollable className="px-2">
|
||||||
<TableRow>
|
<TableHead>
|
||||||
<TableHeaderCell>Method</TableHeaderCell>
|
<TableRow>
|
||||||
<TableHeaderCell>URL</TableHeaderCell>
|
<TableHeaderCell>Method</TableHeaderCell>
|
||||||
<TableHeaderCell>Status</TableHeaderCell>
|
<TableHeaderCell>URL</TableHeaderCell>
|
||||||
<TableHeaderCell>Type</TableHeaderCell>
|
<TableHeaderCell>Status</TableHeaderCell>
|
||||||
</TableRow>
|
<TableHeaderCell>Type</TableHeaderCell>
|
||||||
</TableHead>
|
|
||||||
<TableBody>
|
|
||||||
{exchanges.map((ex) => (
|
|
||||||
<TableRow key={ex.id}>
|
|
||||||
<TableCell className="font-mono text-2xs">{ex.method}</TableCell>
|
|
||||||
<TruncatedWideTableCell className="font-mono text-2xs">{ex.url}</TruncatedWideTableCell>
|
|
||||||
<TableCell>
|
|
||||||
<StatusBadge status={ex.resStatus} error={ex.error} />
|
|
||||||
</TableCell>
|
|
||||||
<TableCell className="text-text-subtle text-xs">
|
|
||||||
{getContentType(ex.resHeaders)}
|
|
||||||
</TableCell>
|
|
||||||
</TableRow>
|
</TableRow>
|
||||||
))}
|
</TableHead>
|
||||||
</TableBody>
|
<TableBody>
|
||||||
</Table>
|
{exchanges.map((ex) => (
|
||||||
|
<TableRow key={ex.id}>
|
||||||
|
<TableCell className="font-mono text-2xs">{ex.method}</TableCell>
|
||||||
|
<TruncatedWideTableCell className="font-mono text-2xs">
|
||||||
|
{ex.url}
|
||||||
|
</TruncatedWideTableCell>
|
||||||
|
<TableCell>
|
||||||
|
<StatusBadge status={ex.resStatus} error={ex.error} />
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className="text-text-subtle text-xs">
|
||||||
|
{getContentType(ex.resHeaders)}
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
))}
|
||||||
|
</TableBody>
|
||||||
|
</Table>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,28 +55,29 @@ export function ProxyLayout() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div data-tauri-drag-region className="pointer-events-none flex items-center text-sm px-2">
|
<div
|
||||||
|
data-tauri-drag-region
|
||||||
|
className="pointer-events-none flex items-center text-sm px-2"
|
||||||
|
>
|
||||||
Yaak Proxy
|
Yaak Proxy
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-1 pr-1 pointer-events-auto">
|
<div className="flex items-center gap-1 pr-1 pointer-events-auto">
|
||||||
<span
|
|
||||||
className={classNames('text-xs', isRunning ? 'text-success' : 'text-text-subtlest')}
|
|
||||||
>
|
|
||||||
{isRunning ? 'Running on :9090' : 'Stopped'}
|
|
||||||
</span>
|
|
||||||
{isRunning ? (
|
{isRunning ? (
|
||||||
<ActionIconButton
|
<>
|
||||||
action={{ scope: 'global', action: 'proxy_stop' }}
|
<span className="text-2xs text-success">Running :9090</span>
|
||||||
icon="circle_stop"
|
<ActionIconButton
|
||||||
size="sm"
|
action={{ scope: 'global', action: 'proxy_stop' }}
|
||||||
iconColor="danger"
|
icon="circle_stop"
|
||||||
/>
|
iconColor="secondary"
|
||||||
|
size="sm"
|
||||||
|
/>
|
||||||
|
</>
|
||||||
) : (
|
) : (
|
||||||
<ActionIconButton
|
<ActionIconButton
|
||||||
action={{ scope: 'global', action: 'proxy_start' }}
|
action={{ scope: 'global', action: 'proxy_start' }}
|
||||||
icon="circle_play"
|
icon="circle_play"
|
||||||
|
iconColor="secondary"
|
||||||
size="sm"
|
size="sm"
|
||||||
iconColor="success"
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
// Hardcode font size for now. In the future, this could be configurable.
|
||||||
|
document.documentElement.style.fontSize = '15px';
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body class="text-base">
|
<body class="text-base">
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/font-size.ts"></script>
|
||||||
<script type="module" src="/lib/theme.ts"></script>
|
<script type="module" src="/lib/theme.ts"></script>
|
||||||
<script type="module" src="/main.tsx"></script>
|
<script type="module" src="/main.tsx"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,9 +1,53 @@
|
|||||||
use log::error;
|
use log::{error, info, warn};
|
||||||
use tauri::{Emitter, Manager, RunEvent, State};
|
use tauri::{Emitter, Manager, RunEvent, State, WebviewWindow};
|
||||||
|
use tauri::Runtime;
|
||||||
use yaak_proxy_lib::ProxyCtx;
|
use yaak_proxy_lib::ProxyCtx;
|
||||||
use yaak_rpc::{RpcEventEmitter, RpcRouter};
|
use yaak_rpc::{RpcEventEmitter, RpcRouter};
|
||||||
use yaak_window::window::CreateWindowConfig;
|
use yaak_window::window::CreateWindowConfig;
|
||||||
|
|
||||||
|
mod window_menu;
|
||||||
|
|
||||||
|
fn setup_window_menu<R: Runtime>(win: &WebviewWindow<R>) {
|
||||||
|
#[allow(unused_variables)]
|
||||||
|
let menu = match window_menu::app_menu(win.app_handle()) {
|
||||||
|
Ok(m) => m,
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Failed to create menu: {e:?}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// This causes the window to not be clickable (in AppImage), so disable on Linux
|
||||||
|
#[cfg(not(target_os = "linux"))]
|
||||||
|
win.app_handle().set_menu(menu).expect("Failed to set app menu");
|
||||||
|
|
||||||
|
let webview_window = win.clone();
|
||||||
|
win.on_menu_event(move |w, event| {
|
||||||
|
if !w.is_focused().unwrap() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let event_id = event.id().0.as_str();
|
||||||
|
match event_id {
|
||||||
|
"hacked_quit" => {
|
||||||
|
w.webview_windows().iter().for_each(|(_, w)| {
|
||||||
|
info!("Closing window {}", w.label());
|
||||||
|
let _ = w.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
"dev.refresh" => webview_window.eval("location.reload()").unwrap(),
|
||||||
|
"dev.toggle_devtools" => {
|
||||||
|
if webview_window.is_devtools_open() {
|
||||||
|
webview_window.close_devtools();
|
||||||
|
} else {
|
||||||
|
webview_window.open_devtools();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
fn rpc(
|
fn rpc(
|
||||||
router: State<'_, RpcRouter<ProxyCtx>>,
|
router: State<'_, RpcRouter<ProxyCtx>>,
|
||||||
@@ -52,8 +96,9 @@ pub fn run() {
|
|||||||
hide_titlebar: true,
|
hide_titlebar: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
if let Err(e) = yaak_window::window::create_window(app_handle, config) {
|
match yaak_window::window::create_window(app_handle, config) {
|
||||||
error!("Failed to create proxy window: {e:?}");
|
Ok(win) => setup_window_menu(&win),
|
||||||
|
Err(e) => error!("Failed to create proxy window: {e:?}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,138 @@
|
|||||||
|
pub use tauri::AppHandle;
|
||||||
|
use tauri::Runtime;
|
||||||
|
use tauri::menu::{
|
||||||
|
AboutMetadata, HELP_SUBMENU_ID, Menu, MenuItemBuilder, PredefinedMenuItem, Submenu,
|
||||||
|
WINDOW_SUBMENU_ID,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn app_menu<R: Runtime>(app_handle: &AppHandle<R>) -> tauri::Result<Menu<R>> {
|
||||||
|
let pkg_info = app_handle.package_info();
|
||||||
|
let config = app_handle.config();
|
||||||
|
let about_metadata = AboutMetadata {
|
||||||
|
name: Some(pkg_info.name.clone()),
|
||||||
|
version: Some(pkg_info.version.to_string()),
|
||||||
|
copyright: config.bundle.copyright.clone(),
|
||||||
|
authors: config.bundle.publisher.clone().map(|p| vec![p]),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
let window_menu = Submenu::with_id_and_items(
|
||||||
|
app_handle,
|
||||||
|
WINDOW_SUBMENU_ID,
|
||||||
|
"Window",
|
||||||
|
true,
|
||||||
|
&[
|
||||||
|
&PredefinedMenuItem::minimize(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::maximize(app_handle, None)?,
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
&PredefinedMenuItem::separator(app_handle)?,
|
||||||
|
&PredefinedMenuItem::close_window(app_handle, None)?,
|
||||||
|
],
|
||||||
|
)?;
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
{
|
||||||
|
window_menu.set_as_windows_menu_for_nsapp()?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let help_menu = Submenu::with_id_and_items(
|
||||||
|
app_handle,
|
||||||
|
HELP_SUBMENU_ID,
|
||||||
|
"Help",
|
||||||
|
true,
|
||||||
|
&[
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
&PredefinedMenuItem::about(app_handle, None, Some(about_metadata.clone()))?,
|
||||||
|
],
|
||||||
|
)?;
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
{
|
||||||
|
help_menu.set_as_windows_menu_for_nsapp()?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let menu = Menu::with_items(
|
||||||
|
app_handle,
|
||||||
|
&[
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
&Submenu::with_items(
|
||||||
|
app_handle,
|
||||||
|
pkg_info.name.clone(),
|
||||||
|
true,
|
||||||
|
&[
|
||||||
|
&PredefinedMenuItem::about(app_handle, None, Some(about_metadata))?,
|
||||||
|
&PredefinedMenuItem::separator(app_handle)?,
|
||||||
|
&PredefinedMenuItem::services(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::separator(app_handle)?,
|
||||||
|
&PredefinedMenuItem::hide(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::hide_others(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::separator(app_handle)?,
|
||||||
|
&MenuItemBuilder::with_id(
|
||||||
|
"hacked_quit".to_string(),
|
||||||
|
format!("Quit {}", app_handle.package_info().name),
|
||||||
|
)
|
||||||
|
.accelerator("CmdOrCtrl+q")
|
||||||
|
.build(app_handle)?,
|
||||||
|
],
|
||||||
|
)?,
|
||||||
|
#[cfg(not(any(
|
||||||
|
target_os = "linux",
|
||||||
|
target_os = "dragonfly",
|
||||||
|
target_os = "freebsd",
|
||||||
|
target_os = "netbsd",
|
||||||
|
target_os = "openbsd"
|
||||||
|
)))]
|
||||||
|
&Submenu::with_items(
|
||||||
|
app_handle,
|
||||||
|
"File",
|
||||||
|
true,
|
||||||
|
&[
|
||||||
|
&PredefinedMenuItem::close_window(app_handle, None)?,
|
||||||
|
#[cfg(not(target_os = "macos"))]
|
||||||
|
&PredefinedMenuItem::quit(app_handle, None)?,
|
||||||
|
],
|
||||||
|
)?,
|
||||||
|
&Submenu::with_items(
|
||||||
|
app_handle,
|
||||||
|
"Edit",
|
||||||
|
true,
|
||||||
|
&[
|
||||||
|
&PredefinedMenuItem::undo(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::redo(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::separator(app_handle)?,
|
||||||
|
&PredefinedMenuItem::cut(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::copy(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::paste(app_handle, None)?,
|
||||||
|
&PredefinedMenuItem::select_all(app_handle, None)?,
|
||||||
|
],
|
||||||
|
)?,
|
||||||
|
&Submenu::with_items(
|
||||||
|
app_handle,
|
||||||
|
"View",
|
||||||
|
true,
|
||||||
|
&[
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
&PredefinedMenuItem::fullscreen(app_handle, None)?,
|
||||||
|
],
|
||||||
|
)?,
|
||||||
|
&window_menu,
|
||||||
|
&help_menu,
|
||||||
|
#[cfg(dev)]
|
||||||
|
&Submenu::with_items(
|
||||||
|
app_handle,
|
||||||
|
"Develop",
|
||||||
|
true,
|
||||||
|
&[
|
||||||
|
&MenuItemBuilder::with_id("dev.refresh".to_string(), "Refresh")
|
||||||
|
.accelerator("CmdOrCtrl+Shift+r")
|
||||||
|
.build(app_handle)?,
|
||||||
|
&MenuItemBuilder::with_id("dev.toggle_devtools".to_string(), "Open Devtools")
|
||||||
|
.accelerator("CmdOrCtrl+Option+i")
|
||||||
|
.build(app_handle)?,
|
||||||
|
],
|
||||||
|
)?,
|
||||||
|
],
|
||||||
|
)?;
|
||||||
|
|
||||||
|
Ok(menu)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user