| 'use client' |
|
|
| type ProgressTarget = { |
| setProgressBar: (options: { status?: ProgressBarStatus; progress?: number }) => Promise<void> |
| } |
|
|
| 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<void> { |
| 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<T>( |
| event: string, |
| handler: (event: { payload: T }) => void, |
| ): Promise<() => void> { |
| if (isTauri()) { |
| const { listen } = await import('@tauri-apps/api/event') |
| return listen<T>(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 |
| }, |
| } |
| } |
|
|