mirror of
https://github.com/mii443/vrclipboard-ime-gui.git
synced 2025-08-22 16:15:32 +00:00
159 lines
5.4 KiB
JavaScript
159 lines
5.4 KiB
JavaScript
import { invoke, transformCallback } from './core.js';
|
|
|
|
// Copyright 2019-2024 Tauri Programme within The Commons Conservancy
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-License-Identifier: MIT
|
|
/**
|
|
* The event system allows you to emit events to the backend and listen to events from it.
|
|
*
|
|
* This package is also accessible with `window.__TAURI__.event` when [`app.withGlobalTauri`](https://v2.tauri.app/reference/config/#withglobaltauri) in `tauri.conf.json` is set to `true`.
|
|
* @module
|
|
*/
|
|
/**
|
|
* @since 1.1.0
|
|
*/
|
|
var TauriEvent;
|
|
(function (TauriEvent) {
|
|
TauriEvent["WINDOW_RESIZED"] = "tauri://resize";
|
|
TauriEvent["WINDOW_MOVED"] = "tauri://move";
|
|
TauriEvent["WINDOW_CLOSE_REQUESTED"] = "tauri://close-requested";
|
|
TauriEvent["WINDOW_DESTROYED"] = "tauri://destroyed";
|
|
TauriEvent["WINDOW_FOCUS"] = "tauri://focus";
|
|
TauriEvent["WINDOW_BLUR"] = "tauri://blur";
|
|
TauriEvent["WINDOW_SCALE_FACTOR_CHANGED"] = "tauri://scale-change";
|
|
TauriEvent["WINDOW_THEME_CHANGED"] = "tauri://theme-changed";
|
|
TauriEvent["WINDOW_CREATED"] = "tauri://window-created";
|
|
TauriEvent["WEBVIEW_CREATED"] = "tauri://webview-created";
|
|
TauriEvent["DRAG_ENTER"] = "tauri://drag-enter";
|
|
TauriEvent["DRAG_OVER"] = "tauri://drag-over";
|
|
TauriEvent["DRAG_DROP"] = "tauri://drag-drop";
|
|
TauriEvent["DRAG_LEAVE"] = "tauri://drag-leave";
|
|
})(TauriEvent || (TauriEvent = {}));
|
|
/**
|
|
* Unregister the event listener associated with the given name and id.
|
|
*
|
|
* @ignore
|
|
* @param event The event name
|
|
* @param eventId Event identifier
|
|
* @returns
|
|
*/
|
|
async function _unlisten(event, eventId) {
|
|
await invoke('plugin:event|unlisten', {
|
|
event,
|
|
eventId
|
|
});
|
|
}
|
|
/**
|
|
* Listen to an emitted event to any {@link EventTarget|target}.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { listen } from '@tauri-apps/api/event';
|
|
* const unlisten = await listen<string>('error', (event) => {
|
|
* console.log(`Got error, payload: ${event.payload}`);
|
|
* });
|
|
*
|
|
* // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted
|
|
* unlisten();
|
|
* ```
|
|
*
|
|
* @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.
|
|
* @param handler Event handler callback.
|
|
* @param options Event listening options.
|
|
* @returns A promise resolving to a function to unlisten to the event.
|
|
* Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
async function listen(event, handler, options) {
|
|
var _a;
|
|
const target = typeof (options === null || options === void 0 ? void 0 : options.target) === 'string'
|
|
? { kind: 'AnyLabel', label: options.target }
|
|
: ((_a = options === null || options === void 0 ? void 0 : options.target) !== null && _a !== void 0 ? _a : { kind: 'Any' });
|
|
return invoke('plugin:event|listen', {
|
|
event,
|
|
target,
|
|
handler: transformCallback(handler)
|
|
}).then((eventId) => {
|
|
return async () => _unlisten(event, eventId);
|
|
});
|
|
}
|
|
/**
|
|
* Listens once to an emitted event to any {@link EventTarget|target}.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { once } from '@tauri-apps/api/event';
|
|
* interface LoadedPayload {
|
|
* loggedIn: boolean,
|
|
* token: string
|
|
* }
|
|
* const unlisten = await once<LoadedPayload>('loaded', (event) => {
|
|
* console.log(`App is loaded, loggedIn: ${event.payload.loggedIn}, token: ${event.payload.token}`);
|
|
* });
|
|
*
|
|
* // you need to call unlisten if your handler goes out of scope e.g. the component is unmounted
|
|
* unlisten();
|
|
* ```
|
|
*
|
|
* @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.
|
|
* @param handler Event handler callback.
|
|
* @param options Event listening options.
|
|
* @returns A promise resolving to a function to unlisten to the event.
|
|
* Note that removing the listener is required if your listener goes out of scope e.g. the component is unmounted.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
async function once(event, handler, options) {
|
|
return listen(event, (eventData) => {
|
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
_unlisten(event, eventData.id);
|
|
handler(eventData);
|
|
}, options);
|
|
}
|
|
/**
|
|
* Emits an event to all {@link EventTarget|targets}.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { emit } from '@tauri-apps/api/event';
|
|
* await emit('frontend-loaded', { loggedIn: true, token: 'authToken' });
|
|
* ```
|
|
*
|
|
* @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.
|
|
* @param payload Event payload.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
async function emit(event, payload) {
|
|
await invoke('plugin:event|emit', {
|
|
event,
|
|
payload
|
|
});
|
|
}
|
|
/**
|
|
* Emits an event to all {@link EventTarget|targets} matching the given target.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { emitTo } from '@tauri-apps/api/event';
|
|
* await emitTo('main', 'frontend-loaded', { loggedIn: true, token: 'authToken' });
|
|
* ```
|
|
*
|
|
* @param target Label of the target Window/Webview/WebviewWindow or raw {@link EventTarget} object.
|
|
* @param event Event name. Must include only alphanumeric characters, `-`, `/`, `:` and `_`.
|
|
* @param payload Event payload.
|
|
*
|
|
* @since 2.0.0
|
|
*/
|
|
async function emitTo(target, event, payload) {
|
|
const eventTarget = typeof target === 'string' ? { kind: 'AnyLabel', label: target } : target;
|
|
await invoke('plugin:event|emit_to', {
|
|
target: eventTarget,
|
|
event,
|
|
payload
|
|
});
|
|
}
|
|
|
|
export { TauriEvent, emit, emitTo, listen, once };
|