@flighthq/application 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,24 @@
1
+ import type { Application, ApplicationLoopOptions, ApplicationWindow, LoopBackend } from '@flighthq/types';
2
+ export declare function attachApplicationExit(app: Application): void;
3
+ export declare function attachApplicationLifecycle(app: Application, win: ApplicationWindow): void;
4
+ export declare function createApplication(): Application;
5
+ export declare function createWebLoopBackend(): LoopBackend;
6
+ export declare function detachApplicationExit(app: Application): void;
7
+ export declare function disposeApplication(app: Application): void;
8
+ export declare function enableApplicationLifecycleSignals(app: Application): void;
9
+ export declare function forEachApplicationWindow(app: Readonly<Application>, fn: (win: ApplicationWindow) => void): void;
10
+ export declare function getApplicationFrameRate(app: Readonly<Application>): number;
11
+ export declare function getApplicationMainWindow(app: Readonly<Application>): ApplicationWindow | null;
12
+ export declare function getApplicationWindows(app: Readonly<Application>): readonly ApplicationWindow[];
13
+ export declare function getLoopBackend(): LoopBackend;
14
+ export declare function isApplicationRunning(app: Readonly<Application>): boolean;
15
+ export declare function pauseApplicationLoop(app: Application): void;
16
+ export declare function registerApplicationWindow(app: Application, win: ApplicationWindow): void;
17
+ export declare function resumeApplicationLoop(app: Application): void;
18
+ export declare function setApplicationMainWindow(app: Application, win: ApplicationWindow): void;
19
+ export declare function setLoopBackend(backend: LoopBackend | null): void;
20
+ export declare function startApplicationLoop(app: Application, options?: Readonly<ApplicationLoopOptions>): void;
21
+ export declare function stepApplicationLoop(app: Application, deltaTime: number): void;
22
+ export declare function stopApplicationLoop(app: Application): void;
23
+ export declare function unregisterApplicationWindow(app: Application, win: ApplicationWindow): void;
24
+ //# sourceMappingURL=application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAa3G,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAM5D;AAKD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAyBzF;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAgB/C;AAED,wBAAgB,oBAAoB,IAAI,WAAW,CAYlD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAI5D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAKzD;AAKD,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAKxE;AAGD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAE/G;AAID,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM,CAiB1E;AAID,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAE7F;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,SAAS,iBAAiB,EAAE,CAE9F;AAED,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAExE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAM3D;AAGD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAGxF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAa5D;AAGD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAGvF;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAEhE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,QAAQ,CAAC,sBAAsB,CAAM,GAAG,IAAI,CAiH3G;AAID,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAwB7E;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAO1D;AAGD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAI1F"}
@@ -0,0 +1,371 @@
1
+ import { connectSignal, createSignal, disconnectSignal, emitSignal } from '@flighthq/signals';
2
+ const DEFAULT_BACKGROUND_FRAME_RATE = 0; // 0 = disabled; use same rate when in background
3
+ const DEFAULT_FIXED_TIMESTEP = 0; // 0 = disabled; pure variable mode
4
+ const DEFAULT_MAX_DELTA_TIME = 250; // ms — clamps huge gaps after tab restore
5
+ const DEFAULT_MAX_UPDATES_PER_FRAME = 5; // spiral-of-death guard for fixed-timestep mode
6
+ const kExit = Symbol();
7
+ const kLoop = Symbol();
8
+ const kPaused = Symbol();
9
+ // -- Application entity --
10
+ export function attachApplicationExit(app) {
11
+ const observers = getApplicationObservers(app);
12
+ observers.get(kExit)?.();
13
+ const handler = () => emitSignal(app.onExit);
14
+ window.addEventListener('beforeunload', handler);
15
+ observers.set(kExit, () => window.removeEventListener('beforeunload', handler));
16
+ }
17
+ // Wires window onDeactivate → pauseApplicationLoop and onActivate → resumeApplicationLoop so the
18
+ // loop automatically throttles/pauses when the user backgrounds the tab or hides the window.
19
+ // Opt-in — not wired by default. Pair with detachApplicationLifecycle to undo.
20
+ export function attachApplicationLifecycle(app, win) {
21
+ // Use a per-win symbol keyed in a side WeakMap to allow multiple windows.
22
+ let kLifecycle = _lifecycleKeys.get(win);
23
+ if (kLifecycle === undefined) {
24
+ kLifecycle = Symbol();
25
+ _lifecycleKeys.set(win, kLifecycle);
26
+ }
27
+ const observers = getApplicationObservers(app);
28
+ observers.get(kLifecycle)?.();
29
+ const onDeactivate = () => {
30
+ pauseApplicationLoop(app);
31
+ if (app.onDeactivate !== null)
32
+ emitSignal(app.onDeactivate);
33
+ };
34
+ const onActivate = () => {
35
+ resumeApplicationLoop(app);
36
+ if (app.onActivate !== null)
37
+ emitSignal(app.onActivate);
38
+ };
39
+ connectSignal(win.onDeactivate, onDeactivate);
40
+ connectSignal(win.onActivate, onActivate);
41
+ observers.set(kLifecycle, () => {
42
+ disconnectSignal(win.onDeactivate, onDeactivate);
43
+ disconnectSignal(win.onActivate, onActivate);
44
+ });
45
+ }
46
+ export function createApplication() {
47
+ return {
48
+ deltaTime: 0,
49
+ elapsedTime: 0,
50
+ frameCount: 0,
51
+ interpolationAlpha: 1,
52
+ isRunning: false,
53
+ onActivate: null,
54
+ onDeactivate: null,
55
+ onError: null,
56
+ onExit: createSignal(),
57
+ onFixedUpdate: null,
58
+ onRender: createSignal(),
59
+ onUpdate: createSignal(),
60
+ windows: [],
61
+ };
62
+ }
63
+ export function createWebLoopBackend() {
64
+ return {
65
+ requestFrame(callback) {
66
+ return requestAnimationFrame(callback);
67
+ },
68
+ cancelFrame(handle) {
69
+ cancelAnimationFrame(handle);
70
+ },
71
+ now() {
72
+ return performance.now();
73
+ },
74
+ };
75
+ }
76
+ export function detachApplicationExit(app) {
77
+ const observers = getApplicationObservers(app);
78
+ observers.get(kExit)?.();
79
+ observers.delete(kExit);
80
+ }
81
+ export function disposeApplication(app) {
82
+ const observers = getApplicationObservers(app);
83
+ for (const cleanup of observers.values())
84
+ cleanup();
85
+ observers.clear();
86
+ app.isRunning = false;
87
+ }
88
+ // Allocates and attaches the opt-in lifecycle signals (onActivate, onDeactivate, onError,
89
+ // onFixedUpdate) to an application that was created before these were needed. Idempotent —
90
+ // calling twice does not create duplicate signals.
91
+ export function enableApplicationLifecycleSignals(app) {
92
+ if (app.onActivate === null)
93
+ app.onActivate = createSignal();
94
+ if (app.onDeactivate === null)
95
+ app.onDeactivate = createSignal();
96
+ if (app.onError === null)
97
+ app.onError = createSignal();
98
+ if (app.onFixedUpdate === null)
99
+ app.onFixedUpdate = createSignal();
100
+ }
101
+ // Iterates over all registered application windows, calling fn for each. Does not allocate.
102
+ export function forEachApplicationWindow(app, fn) {
103
+ for (const win of app.windows)
104
+ fn(win);
105
+ }
106
+ // Returns the measured rolling-average frames per second for the last ROLLING_FPS_WINDOW frames.
107
+ // Returns 0 before enough samples have been collected.
108
+ export function getApplicationFrameRate(app) {
109
+ const state = _applicationLoopState.get(app);
110
+ if (state === undefined || state.fpsBuffer.length < 2)
111
+ return 0;
112
+ const buf = state.fpsBuffer;
113
+ const len = buf.length;
114
+ // Sum valid deltas (all positive).
115
+ let total = 0;
116
+ let count = 0;
117
+ for (let i = 0; i < len; i++) {
118
+ if (buf[i] > 0) {
119
+ total += buf[i];
120
+ count++;
121
+ }
122
+ }
123
+ if (count === 0)
124
+ return 0;
125
+ const avgDelta = total / count;
126
+ return avgDelta > 0 ? 1000 / avgDelta : 0;
127
+ }
128
+ // Returns the main window (first registered window, or the one set via setApplicationMainWindow).
129
+ // Returns null if no windows have been registered.
130
+ export function getApplicationMainWindow(app) {
131
+ return _mainWindows.get(app) ?? app.windows[0] ?? null;
132
+ }
133
+ // Returns a snapshot array of all registered windows. Creates a new array; prefer forEachApplicationWindow
134
+ // in hot paths.
135
+ export function getApplicationWindows(app) {
136
+ return app.windows.slice();
137
+ }
138
+ export function getLoopBackend() {
139
+ if (_loopBackend === null)
140
+ _loopBackend = createWebLoopBackend();
141
+ return _loopBackend;
142
+ }
143
+ export function isApplicationRunning(app) {
144
+ return app.isRunning;
145
+ }
146
+ export function pauseApplicationLoop(app) {
147
+ const observers = getApplicationObservers(app);
148
+ if (!app.isRunning || observers.has(kPaused))
149
+ return;
150
+ app.isRunning = false;
151
+ // Mark as paused so resumeApplicationLoop knows to re-seed lastTime.
152
+ observers.set(kPaused, () => { });
153
+ }
154
+ // Registers win as a managed window on app. Adds it to app.windows; no-op if already present.
155
+ export function registerApplicationWindow(app, win) {
156
+ if (app.windows.includes(win))
157
+ return;
158
+ app.windows.push(win);
159
+ }
160
+ export function resumeApplicationLoop(app) {
161
+ const observers = getApplicationObservers(app);
162
+ if (!observers.has(kPaused))
163
+ return;
164
+ observers.delete(kPaused);
165
+ // Re-seed lastTime to -1 so the first resumed tick computes delta from now, not from the pause
166
+ // moment — avoids dumping the full pause gap into onUpdate.
167
+ const loopState = _applicationLoopState.get(app);
168
+ if (loopState !== undefined) {
169
+ loopState.lastTime = -1;
170
+ loopState.fixedAccumulator = 0;
171
+ loopState.frameRateAccumulated = 0;
172
+ }
173
+ app.isRunning = true;
174
+ }
175
+ // Sets the explicit main window. win need not be registered first (the call registers it if not).
176
+ export function setApplicationMainWindow(app, win) {
177
+ registerApplicationWindow(app, win);
178
+ _mainWindows.set(app, win);
179
+ }
180
+ // Installs a host loop backend. Pass null to fall back to the web default (requestAnimationFrame).
181
+ export function setLoopBackend(backend) {
182
+ _loopBackend = backend;
183
+ }
184
+ export function startApplicationLoop(app, options = {}) {
185
+ const observers = getApplicationObservers(app);
186
+ // Stop any existing loop first (idempotent restart).
187
+ observers.get(kLoop)?.();
188
+ observers.delete(kPaused);
189
+ const backend = getLoopBackend();
190
+ const maxDeltaTime = options.maxDeltaTime ?? DEFAULT_MAX_DELTA_TIME;
191
+ const targetFrameRate = options.targetFrameRate ?? 0;
192
+ const backgroundFrameRate = options.backgroundFrameRate ?? DEFAULT_BACKGROUND_FRAME_RATE;
193
+ const fixedTimeStep = options.fixedTimeStep ?? DEFAULT_FIXED_TIMESTEP;
194
+ const maxUpdatesPerFrame = options.maxUpdatesPerFrame ?? DEFAULT_MAX_UPDATES_PER_FRAME;
195
+ const frameInterval = targetFrameRate > 0 ? 1000 / targetFrameRate : 0;
196
+ const bgInterval = backgroundFrameRate > 0 ? 1000 / backgroundFrameRate : 0;
197
+ // Persist loop state so pauseApplicationLoop/resumeApplicationLoop can mutate lastTime.
198
+ const loopState = {
199
+ fixedAccumulator: 0,
200
+ fpsBuffer: [],
201
+ fpsHead: 0,
202
+ frameHandle: null,
203
+ frameRateAccumulated: 0,
204
+ lastTime: -1,
205
+ maxDeltaTime,
206
+ };
207
+ _applicationLoopState.set(app, loopState);
208
+ app.isRunning = true;
209
+ function tick(time) {
210
+ if (!app.isRunning) {
211
+ // Paused: reschedule but do not emit.
212
+ loopState.frameHandle = backend.requestFrame(tick);
213
+ observers.set(kLoop, () => backend.cancelFrame(loopState.frameHandle));
214
+ return;
215
+ }
216
+ const isFirstTick = loopState.lastTime < 0;
217
+ const raw = isFirstTick ? 0 : time - loopState.lastTime;
218
+ loopState.lastTime = time;
219
+ // Determine the effective frame interval for this tick (background throttle or normal cap).
220
+ const activeInterval = app.isRunning && bgInterval > 0 && !_isApplicationVisible() ? bgInterval : frameInterval;
221
+ // Frame-rate cap: skip this tick if we haven't reached the target interval. The first tick
222
+ // always emits so the app receives an immediate first frame regardless of targetFrameRate.
223
+ if (!isFirstTick) {
224
+ loopState.frameRateAccumulated += raw;
225
+ if (activeInterval > 0 && loopState.frameRateAccumulated < activeInterval) {
226
+ loopState.frameHandle = backend.requestFrame(tick);
227
+ observers.set(kLoop, () => backend.cancelFrame(loopState.frameHandle));
228
+ return;
229
+ }
230
+ }
231
+ const delta = activeInterval > 0 && !isFirstTick ? loopState.frameRateAccumulated : raw;
232
+ loopState.frameRateAccumulated = 0;
233
+ const clamped = Math.min(delta, maxDeltaTime);
234
+ app.deltaTime = clamped;
235
+ app.elapsedTime += clamped / 1000;
236
+ app.frameCount += 1;
237
+ // Rolling FPS sample.
238
+ recordFpsSample(loopState, clamped);
239
+ // Fixed-timestep accumulator.
240
+ if (fixedTimeStep > 0 && app.onFixedUpdate !== null) {
241
+ loopState.fixedAccumulator += clamped;
242
+ let iters = 0;
243
+ while (loopState.fixedAccumulator >= fixedTimeStep && iters < maxUpdatesPerFrame) {
244
+ loopState.fixedAccumulator -= fixedTimeStep;
245
+ iters++;
246
+ if (app.onError !== null) {
247
+ try {
248
+ emitSignal(app.onFixedUpdate, fixedTimeStep);
249
+ }
250
+ catch (err) {
251
+ emitSignal(app.onError, err);
252
+ }
253
+ }
254
+ else {
255
+ emitSignal(app.onFixedUpdate, fixedTimeStep);
256
+ }
257
+ }
258
+ // If we hit the maxUpdatesPerFrame cap, drain the leftover to avoid spiral-of-death.
259
+ if (iters >= maxUpdatesPerFrame)
260
+ loopState.fixedAccumulator = 0;
261
+ // interpolationAlpha: position within the current step at render time.
262
+ app.interpolationAlpha = fixedTimeStep > 0 ? loopState.fixedAccumulator / fixedTimeStep : 1;
263
+ }
264
+ else {
265
+ app.interpolationAlpha = 1;
266
+ }
267
+ if (app.onError !== null) {
268
+ try {
269
+ emitSignal(app.onUpdate, clamped);
270
+ }
271
+ catch (err) {
272
+ emitSignal(app.onError, err);
273
+ }
274
+ try {
275
+ emitSignal(app.onRender);
276
+ }
277
+ catch (err) {
278
+ emitSignal(app.onError, err);
279
+ }
280
+ }
281
+ else {
282
+ emitSignal(app.onUpdate, clamped);
283
+ emitSignal(app.onRender);
284
+ }
285
+ loopState.frameHandle = backend.requestFrame(tick);
286
+ observers.set(kLoop, () => backend.cancelFrame(loopState.frameHandle));
287
+ }
288
+ loopState.frameHandle = backend.requestFrame(tick);
289
+ observers.set(kLoop, () => backend.cancelFrame(loopState.frameHandle));
290
+ }
291
+ // Drives one update+render tick with an explicit delta (ms). Useful for headless testing,
292
+ // fixed-step simulation, and non-rAF hosts. Safe to call while the rAF loop is stopped.
293
+ export function stepApplicationLoop(app, deltaTime) {
294
+ const loopState = _applicationLoopState.get(app);
295
+ const maxDelta = loopState?.maxDeltaTime ?? DEFAULT_MAX_DELTA_TIME;
296
+ const clamped = Math.min(deltaTime, maxDelta);
297
+ app.deltaTime = clamped;
298
+ app.elapsedTime += clamped / 1000;
299
+ app.frameCount += 1;
300
+ app.interpolationAlpha = 1;
301
+ if (loopState !== undefined)
302
+ recordFpsSample(loopState, clamped);
303
+ if (app.onError !== null) {
304
+ try {
305
+ emitSignal(app.onUpdate, clamped);
306
+ }
307
+ catch (err) {
308
+ emitSignal(app.onError, err);
309
+ }
310
+ try {
311
+ emitSignal(app.onRender);
312
+ }
313
+ catch (err) {
314
+ emitSignal(app.onError, err);
315
+ }
316
+ }
317
+ else {
318
+ emitSignal(app.onUpdate, clamped);
319
+ emitSignal(app.onRender);
320
+ }
321
+ }
322
+ export function stopApplicationLoop(app) {
323
+ const observers = getApplicationObservers(app);
324
+ observers.get(kLoop)?.();
325
+ observers.delete(kLoop);
326
+ observers.delete(kPaused);
327
+ _applicationLoopState.delete(app);
328
+ app.isRunning = false;
329
+ }
330
+ // Removes win from app.windows. Also clears any main-window override that pointed at win.
331
+ export function unregisterApplicationWindow(app, win) {
332
+ const idx = app.windows.indexOf(win);
333
+ if (idx !== -1)
334
+ app.windows.splice(idx, 1);
335
+ if (_mainWindows.get(app) === win)
336
+ _mainWindows.delete(app);
337
+ }
338
+ // Internal teardown registry, kept off the public Application entity (a side table like input's
339
+ // binding map). attach/detach/dispose track cleanup closures internally so callers hold nothing.
340
+ const _applicationObservers = new WeakMap();
341
+ // Per-app loop state for pause/resume continuity.
342
+ const _applicationLoopState = new WeakMap();
343
+ // Per-win lifecycle observer key so each window gets its own observer slot.
344
+ const _lifecycleKeys = new WeakMap();
345
+ // Explicit main-window overrides (set via setApplicationMainWindow).
346
+ const _mainWindows = new WeakMap();
347
+ const ROLLING_FPS_WINDOW = 60;
348
+ let _loopBackend = null;
349
+ function getApplicationObservers(app) {
350
+ let observers = _applicationObservers.get(app);
351
+ if (observers === undefined) {
352
+ observers = new Map();
353
+ _applicationObservers.set(app, observers);
354
+ }
355
+ return observers;
356
+ }
357
+ // Returns true when the page is currently visible (document.hidden === false). Guarded for
358
+ // non-browser (jsdom / headless) environments where document may not have hidden.
359
+ function _isApplicationVisible() {
360
+ return typeof document === 'undefined' || !document.hidden;
361
+ }
362
+ function recordFpsSample(state, delta) {
363
+ if (state.fpsBuffer.length < ROLLING_FPS_WINDOW) {
364
+ state.fpsBuffer.push(delta);
365
+ }
366
+ else {
367
+ state.fpsBuffer[state.fpsHead] = delta;
368
+ state.fpsHead = (state.fpsHead + 1) % ROLLING_FPS_WINDOW;
369
+ }
370
+ }
371
+ //# sourceMappingURL=application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './application';
2
+ export * from './window';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './application';
2
+ export * from './window';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { ApplicationWindow, Matrix, RenderState, WindowBackend, WindowBounds, WindowOptions } from '@flighthq/types';
2
+ export declare function attachWindowClose(win: ApplicationWindow): void;
3
+ export declare function attachWindowDropFile(win: ApplicationWindow, element: HTMLElement): void;
4
+ export declare function attachWindowFocus(win: ApplicationWindow, element: HTMLElement): void;
5
+ export declare function attachWindowFullscreen(win: ApplicationWindow): void;
6
+ export declare function attachWindowMove(win: ApplicationWindow): void;
7
+ export declare function attachWindowOrientation(win: ApplicationWindow): void;
8
+ export declare function attachWindowRenderContext(win: ApplicationWindow, canvas: HTMLCanvasElement): void;
9
+ export declare function attachWindowRenderState(win: ApplicationWindow, state: RenderState, canvas: HTMLCanvasElement): void;
10
+ export declare function attachWindowResize(win: ApplicationWindow, element: HTMLElement): void;
11
+ export declare function attachWindowVisibility(win: ApplicationWindow): void;
12
+ export declare function centerWindow(win: ApplicationWindow): void;
13
+ export declare function closeWindow(win: ApplicationWindow): boolean;
14
+ export declare function computeWindowDeviceTransform(win: Readonly<ApplicationWindow>, out: Matrix): Matrix;
15
+ export declare function createApplicationWindow(): ApplicationWindow;
16
+ export declare function createWebWindowBackend(): WindowBackend;
17
+ export declare function detachWindowClose(win: ApplicationWindow): void;
18
+ export declare function detachWindowDropFile(win: ApplicationWindow): void;
19
+ export declare function detachWindowFocus(win: ApplicationWindow): void;
20
+ export declare function detachWindowFullscreen(win: ApplicationWindow): void;
21
+ export declare function detachWindowMove(win: ApplicationWindow): void;
22
+ export declare function detachWindowOrientation(win: ApplicationWindow): void;
23
+ export declare function detachWindowRenderContext(win: ApplicationWindow): void;
24
+ export declare function detachWindowRenderState(win: ApplicationWindow): void;
25
+ export declare function detachWindowResize(win: ApplicationWindow): void;
26
+ export declare function detachWindowVisibility(win: ApplicationWindow): void;
27
+ export declare function disposeApplicationWindow(win: ApplicationWindow): void;
28
+ export declare function exitApplicationFullscreen(): Promise<void>;
29
+ export declare function exitApplicationPointerLock(): Promise<void>;
30
+ export declare function flashWindowFrame(win: ApplicationWindow): void;
31
+ export declare function focusWindow(win: ApplicationWindow): void;
32
+ export declare function getWindowBackend(): WindowBackend;
33
+ export declare function getWindowBounds(win: Readonly<ApplicationWindow>, out: WindowBounds): WindowBounds;
34
+ export declare function getWindowDisplay(win: Readonly<ApplicationWindow>): number;
35
+ export declare function hideWindow(win: ApplicationWindow): void;
36
+ export declare function lockApplicationPointer(element: HTMLElement): Promise<void>;
37
+ export declare function maximizeWindow(win: ApplicationWindow): void;
38
+ export declare function minimizeWindow(win: ApplicationWindow): void;
39
+ export declare function openWindow(win: ApplicationWindow, options?: Readonly<WindowOptions>): boolean;
40
+ export declare function prepareElementForInput(element: HTMLElement): void;
41
+ export declare function requestApplicationFullscreen(element: HTMLElement): Promise<void>;
42
+ export declare function requestWindowAttention(win: ApplicationWindow, attention: boolean): void;
43
+ export declare function requestWindowClose(win: ApplicationWindow): boolean;
44
+ export declare function restoreWindow(win: ApplicationWindow): void;
45
+ export declare function setWindowAlwaysOnTop(win: ApplicationWindow, alwaysOnTop: boolean): void;
46
+ export declare function setWindowBackend(backend: WindowBackend | null): void;
47
+ export declare function setWindowContentProtection(win: ApplicationWindow, enabled: boolean): void;
48
+ export declare function setWindowFullscreen(win: ApplicationWindow, fullscreen: boolean): void;
49
+ export declare function setWindowHasShadow(win: ApplicationWindow, hasShadow: boolean): void;
50
+ export declare function setWindowIcon(win: ApplicationWindow, icon: string): void;
51
+ export declare function setWindowMaximumSize(win: ApplicationWindow, width: number, height: number): void;
52
+ export declare function setWindowMenuBarVisible(win: ApplicationWindow, visible: boolean): void;
53
+ export declare function setWindowMinimumSize(win: ApplicationWindow, width: number, height: number): void;
54
+ export declare function setWindowOpacity(win: ApplicationWindow, opacity: number): void;
55
+ export declare function setWindowParent(win: ApplicationWindow, parent: ApplicationWindow | null): void;
56
+ export declare function setWindowPosition(win: ApplicationWindow, x: number, y: number): void;
57
+ export declare function setWindowProgress(win: ApplicationWindow, progress: number): void;
58
+ export declare function setWindowResizable(win: ApplicationWindow, resizable: boolean): void;
59
+ export declare function setWindowSize(win: ApplicationWindow, width: number, height: number): void;
60
+ export declare function setWindowSkipTaskbar(win: ApplicationWindow, skip: boolean): void;
61
+ export declare function setWindowTitle(win: ApplicationWindow, title: string): void;
62
+ export declare function showWindow(win: ApplicationWindow): void;
63
+ //# sourceMappingURL=window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../src/window.ts"],"names":[],"mappings":"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"}