'use client' type ProgressTarget = { setProgressBar: (options: { status?: ProgressBarStatus; progress?: number }) => Promise } export enum ProgressBarStatus { None = 'none', Normal = 'normal', Indeterminate = 'indeterminate', Paused = 'paused', Error = 'error', } export const isTauri = (): boolean => typeof window !== 'undefined' && !!(window as any).__TAURI_INTERNALS__ export async function openExternalUrl(url: string): Promise { if (isTauri()) { const { openUrl } = await import('@tauri-apps/plugin-opener') await openUrl(url) return } if (typeof window !== 'undefined') { window.open(url, '_blank', 'noopener,noreferrer') } } export async function listen( event: string, handler: (event: { payload: T }) => void, ): Promise<() => void> { if (isTauri()) { const { listen } = await import('@tauri-apps/api/event') return listen(event, handler) } if (typeof window !== 'undefined' && event === 'tauri://resize') { const listener = () => handler({ payload: undefined as T }) window.addEventListener('resize', listener) return async () => window.removeEventListener('resize', listener) } return async () => {} } export function getCurrentWindow(): ProgressTarget { if (isTauri()) { return { async setProgressBar(options) { const { getCurrentWindow } = await import('@tauri-apps/api/window') return getCurrentWindow().setProgressBar(options) }, } } return { async setProgressBar() { return }, } }