@rafaelaugusto/jolt 0.1.0-rc.11.1 → 0.1.0-rc.12
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.
- package/README.md +2 -2
- package/dist/audio/index.d.ts +9 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +216 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/core/adapter-inspection.d.ts +82 -0
- package/dist/core/adapter-inspection.d.ts.map +1 -0
- package/dist/core/adapter-inspection.js +215 -0
- package/dist/core/adapter-inspection.js.map +1 -0
- package/dist/core/audio.d.ts +39 -0
- package/dist/core/audio.d.ts.map +1 -0
- package/dist/core/audio.js +229 -0
- package/dist/core/audio.js.map +1 -0
- package/dist/core/drawing.d.ts +95 -0
- package/dist/core/drawing.d.ts.map +1 -0
- package/dist/core/drawing.js +180 -0
- package/dist/core/drawing.js.map +1 -0
- package/dist/core/drop.d.ts +64 -0
- package/dist/core/drop.d.ts.map +1 -0
- package/dist/core/drop.js +246 -0
- package/dist/core/drop.js.map +1 -0
- package/dist/core/inspector-spring.d.ts +19 -0
- package/dist/core/inspector-spring.d.ts.map +1 -0
- package/dist/core/inspector-spring.js +37 -0
- package/dist/core/inspector-spring.js.map +1 -0
- package/dist/core/interaction-replay.d.ts +39 -0
- package/dist/core/interaction-replay.d.ts.map +1 -0
- package/dist/core/interaction-replay.js +99 -0
- package/dist/core/interaction-replay.js.map +1 -0
- package/dist/core/interaction-trace.d.ts +101 -0
- package/dist/core/interaction-trace.d.ts.map +1 -0
- package/dist/core/interaction-trace.js +263 -0
- package/dist/core/interaction-trace.js.map +1 -0
- package/dist/core/path-track.d.ts +7 -0
- package/dist/core/path-track.d.ts.map +1 -0
- package/dist/core/path-track.js +54 -0
- package/dist/core/path-track.js.map +1 -0
- package/dist/core/pointer.d.ts +32 -0
- package/dist/core/pointer.d.ts.map +1 -0
- package/dist/core/pointer.js +52 -0
- package/dist/core/pointer.js.map +1 -0
- package/dist/core/property-limits.d.ts +9 -0
- package/dist/core/property-limits.d.ts.map +1 -0
- package/dist/core/property-limits.js +15 -0
- package/dist/core/property-limits.js.map +1 -0
- package/dist/core/render-activity.d.ts +31 -0
- package/dist/core/render-activity.d.ts.map +1 -0
- package/dist/core/render-activity.js +211 -0
- package/dist/core/render-activity.js.map +1 -0
- package/dist/core/timeline-cues.d.ts +51 -0
- package/dist/core/timeline-cues.d.ts.map +1 -0
- package/dist/core/timeline-cues.js +218 -0
- package/dist/core/timeline-cues.js.map +1 -0
- package/dist/drag.d.ts +2 -0
- package/dist/drag.d.ts.map +1 -1
- package/dist/drag.js +16 -3
- package/dist/drag.js.map +1 -1
- package/dist/drop-zones.d.ts +11 -0
- package/dist/drop-zones.d.ts.map +1 -0
- package/dist/drop-zones.js +152 -0
- package/dist/drop-zones.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/inspector/index.d.ts +4 -0
- package/dist/inspector/index.d.ts.map +1 -1
- package/dist/inspector/index.js +10 -0
- package/dist/inspector/index.js.map +1 -1
- package/dist/inspector/tuning.d.ts +1 -18
- package/dist/inspector/tuning.d.ts.map +1 -1
- package/dist/inspector/tuning.js +1 -36
- package/dist/inspector/tuning.js.map +1 -1
- package/dist/motion-scope.d.ts +6 -0
- package/dist/motion-scope.d.ts.map +1 -1
- package/dist/motion-scope.js +8 -0
- package/dist/motion-scope.js.map +1 -1
- package/dist/native/index.d.ts +2 -0
- package/dist/native/index.d.ts.map +1 -1
- package/dist/native/index.js +1 -0
- package/dist/native/index.js.map +1 -1
- package/dist/native-property.d.ts +17 -0
- package/dist/native-property.d.ts.map +1 -1
- package/dist/native-property.js +298 -44
- package/dist/native-property.js.map +1 -1
- package/dist/path.d.ts +3 -2
- package/dist/path.d.ts.map +1 -1
- package/dist/path.js +21 -55
- package/dist/path.js.map +1 -1
- package/dist/pointer-input.d.ts +9 -0
- package/dist/pointer-input.d.ts.map +1 -0
- package/dist/pointer-input.js +23 -0
- package/dist/pointer-input.js.map +1 -0
- package/dist/pointer.d.ts +29 -0
- package/dist/pointer.d.ts.map +1 -0
- package/dist/pointer.js +169 -0
- package/dist/pointer.js.map +1 -0
- package/dist/press-input.d.ts +5 -0
- package/dist/press-input.d.ts.map +1 -0
- package/dist/press-input.js +47 -0
- package/dist/press-input.js.map +1 -0
- package/dist/press.d.ts.map +1 -1
- package/dist/press.js +8 -3
- package/dist/press.js.map +1 -1
- package/dist/render-activity.d.ts +5 -0
- package/dist/render-activity.d.ts.map +1 -0
- package/dist/render-activity.js +18 -0
- package/dist/render-activity.js.map +1 -0
- package/dist/shapes/drawing-native.d.ts +11 -0
- package/dist/shapes/drawing-native.d.ts.map +1 -0
- package/dist/shapes/drawing-native.js +41 -0
- package/dist/shapes/drawing-native.js.map +1 -0
- package/dist/shapes/drawing.d.ts +8 -0
- package/dist/shapes/drawing.d.ts.map +1 -0
- package/dist/shapes/drawing.js +127 -0
- package/dist/shapes/drawing.js.map +1 -0
- package/dist/shapes/index.d.ts +2 -0
- package/dist/shapes/index.d.ts.map +1 -1
- package/dist/shapes/index.js +1 -0
- package/dist/shapes/index.js.map +1 -1
- package/dist/shapes/ios.d.ts.map +1 -1
- package/dist/shapes/ios.js +5 -2
- package/dist/shapes/ios.js.map +1 -1
- package/dist/testing/replay.d.ts +1 -38
- package/dist/testing/replay.d.ts.map +1 -1
- package/dist/testing/replay.js +1 -98
- package/dist/testing/replay.js.map +1 -1
- package/dist/testing/trace.d.ts +1 -100
- package/dist/testing/trace.d.ts.map +1 -1
- package/dist/testing/trace.js +1 -262
- package/dist/testing/trace.js.map +1 -1
- package/dist/timeline-cues.d.ts +4 -32
- package/dist/timeline-cues.d.ts.map +1 -1
- package/dist/timeline-cues.js +8 -214
- package/dist/timeline-cues.js.map +1 -1
- package/dist/web/audio.d.ts +5 -0
- package/dist/web/audio.d.ts.map +1 -0
- package/dist/web/audio.js +76 -0
- package/dist/web/audio.js.map +1 -0
- package/dist/web/compose.d.ts.map +1 -1
- package/dist/web/compose.js +38 -6
- package/dist/web/compose.js.map +1 -1
- package/dist/web/diagnostics.d.ts +2 -0
- package/dist/web/diagnostics.d.ts.map +1 -1
- package/dist/web/diagnostics.js +1 -0
- package/dist/web/diagnostics.js.map +1 -1
- package/dist/web/drawing.d.ts +5 -0
- package/dist/web/drawing.d.ts.map +1 -0
- package/dist/web/drawing.js +161 -0
- package/dist/web/drawing.js.map +1 -0
- package/dist/web/drop-zones.d.ts +9 -0
- package/dist/web/drop-zones.d.ts.map +1 -0
- package/dist/web/drop-zones.js +127 -0
- package/dist/web/drop-zones.js.map +1 -0
- package/dist/web/inspector.d.ts +49 -0
- package/dist/web/inspector.d.ts.map +1 -0
- package/dist/web/inspector.js +133 -0
- package/dist/web/inspector.js.map +1 -0
- package/dist/web/layout.d.ts +24 -0
- package/dist/web/layout.d.ts.map +1 -1
- package/dist/web/plan.d.ts +2 -0
- package/dist/web/plan.d.ts.map +1 -1
- package/dist/web/plan.js +33 -3
- package/dist/web/plan.js.map +1 -1
- package/dist/web/pointer.d.ts +1 -0
- package/dist/web/pointer.d.ts.map +1 -1
- package/dist/web/pointer.js +17 -43
- package/dist/web/pointer.js.map +1 -1
- package/dist/web/properties.d.ts +7 -3
- package/dist/web/properties.d.ts.map +1 -1
- package/dist/web/properties.js +29 -5
- package/dist/web/properties.js.map +1 -1
- package/dist/web/property.d.ts +110 -0
- package/dist/web/property.d.ts.map +1 -0
- package/dist/web/property.js +509 -0
- package/dist/web/property.js.map +1 -0
- package/dist/web/public.d.ts +16 -0
- package/dist/web/public.d.ts.map +1 -1
- package/dist/web/public.js +7 -0
- package/dist/web/public.js.map +1 -1
- package/dist/web/runtime.d.ts +13 -0
- package/dist/web/runtime.d.ts.map +1 -1
- package/dist/web/runtime.js +136 -7
- package/dist/web/runtime.js.map +1 -1
- package/dist/web/scene.d.ts.map +1 -1
- package/dist/web/scene.js +7 -2
- package/dist/web/scene.js.map +1 -1
- package/dist/web/scope.d.ts +1 -1
- package/dist/web/scope.d.ts.map +1 -1
- package/dist/web/scope.js +6 -0
- package/dist/web/scope.js.map +1 -1
- package/dist/web/scroll.d.ts +1 -1
- package/dist/web/scroll.d.ts.map +1 -1
- package/dist/web/scroll.js +11 -1
- package/dist/web/scroll.js.map +1 -1
- package/dist/web/style.d.ts +3 -1
- package/dist/web/style.d.ts.map +1 -1
- package/dist/web/style.js +38 -2
- package/dist/web/style.js.map +1 -1
- package/dist/web/testing.d.ts +3 -0
- package/dist/web/testing.d.ts.map +1 -0
- package/dist/web/testing.js +3 -0
- package/dist/web/testing.js.map +1 -0
- package/dist/web/types.d.ts +5 -2
- package/dist/web/types.d.ts.map +1 -1
- package/dist/web/types.js.map +1 -1
- package/package.json +27 -3
- package/platforms/android/java/org/rafaelaugusto/jolt/BatchDrawing.java +111 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/DropGeometry.java +33 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/PointerInput.java +116 -0
- package/platforms/ios/src/JoltBatchDrawing.h +9 -0
- package/platforms/ios/src/JoltBatchDrawing.m +108 -0
- package/platforms/ios/src/JoltPointerInput.h +8 -0
- package/platforms/ios/src/JoltPointerInput.m +47 -0
- package/platforms/ios/src/JoltPressInput.h +8 -0
- package/platforms/ios/src/JoltPressInput.m +52 -0
- package/platforms/ios/src/module.modulemap +3 -0
- package/src/android-plugin.d.ts +32 -0
- package/src/audio/index.ts +251 -0
- package/src/core/adapter-inspection.ts +312 -0
- package/src/core/audio.ts +258 -0
- package/src/core/drawing.ts +309 -0
- package/src/core/drop.ts +310 -0
- package/src/core/inspector-spring.ts +51 -0
- package/src/core/interaction-replay.ts +149 -0
- package/src/core/interaction-trace.ts +340 -0
- package/src/core/path-track.ts +81 -0
- package/src/core/pointer.ts +69 -0
- package/src/core/property-limits.ts +16 -0
- package/src/core/render-activity.ts +252 -0
- package/src/core/timeline-cues.ts +256 -0
- package/src/drag.ts +24 -2
- package/src/drop-zones.ts +176 -0
- package/src/index.ts +12 -0
- package/src/inspector/index.ts +20 -0
- package/src/inspector/tuning.ts +5 -51
- package/src/ios-plugin.d.ts +26 -0
- package/src/motion-scope.ts +12 -0
- package/src/native/index.ts +2 -0
- package/src/native-property.ts +367 -53
- package/src/path.ts +25 -69
- package/src/pointer-input.ts +44 -0
- package/src/pointer.ts +199 -0
- package/src/press-input.ts +44 -0
- package/src/press.ts +13 -3
- package/src/render-activity.ts +23 -0
- package/src/shapes/drawing-native.ts +45 -0
- package/src/shapes/drawing.ts +137 -0
- package/src/shapes/index.ts +9 -0
- package/src/shapes/ios.ts +10 -2
- package/src/testing/replay.ts +1 -149
- package/src/testing/trace.ts +1 -340
- package/src/timeline-cues.ts +20 -236
- package/src/web/audio.ts +80 -0
- package/src/web/compose.ts +51 -7
- package/src/web/diagnostics.ts +3 -0
- package/src/web/drawing.ts +178 -0
- package/src/web/drop-zones.ts +144 -0
- package/src/web/inspector.ts +163 -0
- package/src/web/plan.ts +39 -3
- package/src/web/pointer.ts +24 -48
- package/src/web/properties.ts +36 -8
- package/src/web/property.ts +591 -0
- package/src/web/public.ts +57 -0
- package/src/web/runtime.ts +177 -18
- package/src/web/scene.ts +7 -2
- package/src/web/scope.ts +12 -0
- package/src/web/scroll.ts +13 -1
- package/src/web/style.ts +44 -1
- package/src/web/testing.ts +2 -0
- package/src/web/types.ts +5 -2
package/README.md
CHANGED
|
@@ -31,7 +31,7 @@ NativeScript's `view.animate()` covers the basics and stops there: one curve for
|
|
|
31
31
|
|
|
32
32
|
Jolt computes the motion once, in JavaScript, when the animation starts, and hands it to the platform as keyframes: Core Animation on iOS, `ObjectAnimator` on Android. Those default view tracks play without per-frame JavaScript. Real-size layout, opt-in subscribers, gesture input and timeline step activation retain their documented [execution limits](https://jolt.rafaelaugusto.dev/guide/how-it-works). Springs follow real physics, and an animation that interrupts another one starts from where the view is, at the speed it was going.
|
|
33
33
|
|
|
34
|
-
The [0.1.0-rc.
|
|
34
|
+
The [0.1.0-rc.12 release candidate](https://github.com/rafaelaugustos/jolt/blob/v0.1.0-rc.12/CHANGELOG.md) adds native/Web pointer presence, property groups, renderer activity, bounded drawing, drop targets, optional audio/cues and inspection, plus Web paths, 3D rotation and shadows. The versioned [portable foundations](https://github.com/rafaelaugustos/jolt/blob/v0.1.0-rc.12/docs/guide/portable-foundations.md) and [interaction/depth guides](https://github.com/rafaelaugustos/jolt/blob/v0.1.0-rc.12/docs/guide/interaction-depth.md) include reviewed recordings and platform limits. Install `@rafaelaugusto/jolt@0.1.0-rc.12` and rebuild native apps; external native properties also need matching `@rafaelaugusto/jolt-native@0.1.0-rc.12`. Web APIs remain experimental; physical-device acceptance and performance investigations remain open.
|
|
35
35
|
|
|
36
36
|
For the browser, import **`@rafaelaugusto/jolt/web`**. It installs without NativeScript, Vue or React; **`@rafaelaugusto/jolt/web/vue`** optionally integrates Vue 3.5 DOM refs and enter/leave. Both entries are experimental and use the same motion compiler as native playback. See [installation](https://jolt.rafaelaugusto.dev/guide/install#experimental-web-candidate), [finite Web playback](https://jolt.rafaelaugusto.dev/guide/web-runtime) and [Vue Web motion](https://jolt.rafaelaugusto.dev/guide/web-vue). Mavis integration and its shared application proof continue separately.
|
|
37
37
|
|
|
@@ -101,7 +101,7 @@ For the browser, import **`@rafaelaugusto/jolt/web`**. It installs without Nativ
|
|
|
101
101
|
npm install @rafaelaugusto/jolt@next
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
The current release candidate is **0.1.0-rc.
|
|
104
|
+
The current release candidate is **0.1.0-rc.12**, published under the `next` tag. Requires `@nativescript/core` 8.9 or later. It doesn't depend on a framework: it takes a view, or an element that holds one. Rebuild the native app after installing or upgrading Jolt. See [release status and limits](https://jolt.rafaelaugusto.dev/guide/not-there-yet) for the remaining stable-release acceptance work.
|
|
105
105
|
|
|
106
106
|
On iOS 15+, Jolt requests up to 120 Hz on ProMotion displays. Set `CADisableMinimumFrameDurationOnPhone` to `true` in the app's `App_Resources/iOS/Info.plist` and rebuild to enable higher rates on iPhone. See the [iOS setup](https://jolt.rafaelaugusto.dev/guide/install#promotion-on-ios); the system still chooses the actual refresh rate.
|
|
107
107
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type AudioCueOptions } from '../core/audio.js';
|
|
2
|
+
export type { AudioCue, AudioPlayback } from '../core/audio.js';
|
|
3
|
+
export interface NativeAudioCueOptions extends AudioCueOptions {
|
|
4
|
+
/** Ambient respects the silent switch. Application leaves the audio session to its owner. */
|
|
5
|
+
iosSession?: 'ambient' | 'application';
|
|
6
|
+
}
|
|
7
|
+
/** Preload a bundled/local one-shot. Native playback owns the clock; no JS frame polling. */
|
|
8
|
+
export declare function audioCue(file: string, options?: NativeAudioCueOptions): import("./index.js").AudioCue;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1F,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC/D,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,6FAA6F;IAC7F,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;CACvC;AAoFD,6FAA6F;AAC7F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,iCA+JzE"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { Application, File, knownFolders, path } from '@nativescript/core';
|
|
2
|
+
import { createAudioCue } from '../core/audio.js';
|
|
3
|
+
let ambientLeases = 0, restoreSession;
|
|
4
|
+
function ambientSession() {
|
|
5
|
+
const session = AVAudioSession.sharedInstance();
|
|
6
|
+
if (!ambientLeases) {
|
|
7
|
+
const category = session.category, mode = session.mode, options = session.categoryOptions;
|
|
8
|
+
if (category !== AVAudioSessionCategoryAmbient &&
|
|
9
|
+
category !== AVAudioSessionCategorySoloAmbient)
|
|
10
|
+
throw new Error('The app owns a non-ambient audio session. Pass iosSession: application and configure its policy explicitly.');
|
|
11
|
+
session.setCategoryError(AVAudioSessionCategoryAmbient);
|
|
12
|
+
const appliedMode = session.mode, appliedOptions = session.categoryOptions;
|
|
13
|
+
restoreSession = () => {
|
|
14
|
+
if (session.category === AVAudioSessionCategoryAmbient &&
|
|
15
|
+
session.mode === appliedMode &&
|
|
16
|
+
session.categoryOptions === appliedOptions)
|
|
17
|
+
session.setCategoryModeOptionsError(category, mode, options);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
ambientLeases++;
|
|
21
|
+
let released = false;
|
|
22
|
+
return () => {
|
|
23
|
+
if (released)
|
|
24
|
+
return;
|
|
25
|
+
released = true;
|
|
26
|
+
if (--ambientLeases === 0) {
|
|
27
|
+
const restore = restoreSession;
|
|
28
|
+
restoreSession = undefined;
|
|
29
|
+
restore?.();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const audioCallbacks = new WeakMap();
|
|
34
|
+
let AudioDelegateClass;
|
|
35
|
+
function audioDelegate() {
|
|
36
|
+
if (!AudioDelegateClass) {
|
|
37
|
+
const base = NSObject;
|
|
38
|
+
AudioDelegateClass = base.extend({
|
|
39
|
+
audioPlayerDidFinishPlayingSuccessfully(_player, success) {
|
|
40
|
+
const callbacks = audioCallbacks.get(this);
|
|
41
|
+
if (success)
|
|
42
|
+
callbacks?.complete?.();
|
|
43
|
+
else
|
|
44
|
+
callbacks?.fail?.(new Error('Native audio did not finish successfully.'));
|
|
45
|
+
},
|
|
46
|
+
audioPlayerDecodeErrorDidOccurError(_player, error) {
|
|
47
|
+
audioCallbacks.get(this)?.fail?.(error);
|
|
48
|
+
},
|
|
49
|
+
}, { protocols: [AVAudioPlayerDelegate], name: 'JoltAudioCueDelegate' });
|
|
50
|
+
}
|
|
51
|
+
const delegate = AudioDelegateClass.new();
|
|
52
|
+
const callbacks = {};
|
|
53
|
+
audioCallbacks.set(delegate, callbacks);
|
|
54
|
+
return { delegate, callbacks };
|
|
55
|
+
}
|
|
56
|
+
/** Preload a bundled/local one-shot. Native playback owns the clock; no JS frame polling. */
|
|
57
|
+
export function audioCue(file, options = {}) {
|
|
58
|
+
if (typeof file !== 'string' || !file || /^(?:https?|content|data):/i.test(file))
|
|
59
|
+
throw new TypeError('Audio cues require a bundled or absolute local file path.');
|
|
60
|
+
if (options.iosSession !== undefined &&
|
|
61
|
+
!['ambient', 'application'].includes(options.iosSession))
|
|
62
|
+
throw new TypeError('Invalid iOS audio session policy.');
|
|
63
|
+
const resolved = file.startsWith('~/')
|
|
64
|
+
? path.join(knownFolders.currentApp().path, file.slice(2))
|
|
65
|
+
: file;
|
|
66
|
+
if (!resolved.startsWith('/'))
|
|
67
|
+
throw new TypeError('Audio files use ~/app-relative or absolute paths.');
|
|
68
|
+
let disposePlatform = () => { }, off = () => { };
|
|
69
|
+
let player, androidPlayer;
|
|
70
|
+
let delegate;
|
|
71
|
+
let ended = false, released = false;
|
|
72
|
+
let fail;
|
|
73
|
+
const adapter = {
|
|
74
|
+
load(ready, rejected) {
|
|
75
|
+
fail = rejected;
|
|
76
|
+
if (!File.exists(resolved))
|
|
77
|
+
throw new Error(`Audio file is unavailable: ${file}`);
|
|
78
|
+
if (__IOS__) {
|
|
79
|
+
if (options.iosSession !== 'application')
|
|
80
|
+
disposePlatform = ambientSession();
|
|
81
|
+
player = AVAudioPlayer.alloc().initWithContentsOfURLError(NSURL.fileURLWithPath(resolved));
|
|
82
|
+
if (!player || !player.prepareToPlay())
|
|
83
|
+
throw new Error('Audio preparation failed.');
|
|
84
|
+
delegate = audioDelegate();
|
|
85
|
+
delegate.callbacks.fail = (error) => fail?.(error);
|
|
86
|
+
player.delegate = delegate.delegate;
|
|
87
|
+
ready(player.duration * 1000);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
androidPlayer = new android.media.MediaPlayer();
|
|
91
|
+
androidPlayer.setAudioAttributes(new android.media.AudioAttributes.Builder()
|
|
92
|
+
.setUsage(android.media.AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
|
|
93
|
+
.setContentType(android.media.AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
|
94
|
+
.build());
|
|
95
|
+
androidPlayer.setOnPreparedListener(new android.media.MediaPlayer.OnPreparedListener({
|
|
96
|
+
onPrepared: (p) => ready(p.getDuration()),
|
|
97
|
+
}));
|
|
98
|
+
androidPlayer.setOnErrorListener(new android.media.MediaPlayer.OnErrorListener({
|
|
99
|
+
onError: (_p, what, extra) => {
|
|
100
|
+
fail?.(new Error(`Android audio error ${what}/${extra}`));
|
|
101
|
+
return true;
|
|
102
|
+
},
|
|
103
|
+
}));
|
|
104
|
+
androidPlayer.setDataSource(resolved);
|
|
105
|
+
androidPlayer.prepareAsync();
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
start(complete, rejected) {
|
|
109
|
+
fail = rejected;
|
|
110
|
+
if (__IOS__) {
|
|
111
|
+
if (ended)
|
|
112
|
+
player.currentTime = 0;
|
|
113
|
+
delegate.callbacks.complete = () => {
|
|
114
|
+
ended = true;
|
|
115
|
+
complete();
|
|
116
|
+
};
|
|
117
|
+
ended = false;
|
|
118
|
+
if (!player.play())
|
|
119
|
+
throw new Error('Native audio output could not start.');
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
if (ended)
|
|
123
|
+
androidPlayer.seekTo(0);
|
|
124
|
+
ended = false;
|
|
125
|
+
androidPlayer.setOnCompletionListener(new android.media.MediaPlayer.OnCompletionListener({
|
|
126
|
+
onCompletion: () => {
|
|
127
|
+
ended = true;
|
|
128
|
+
complete();
|
|
129
|
+
},
|
|
130
|
+
}));
|
|
131
|
+
androidPlayer.start();
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
pause() {
|
|
135
|
+
if (__IOS__)
|
|
136
|
+
player?.pause();
|
|
137
|
+
else
|
|
138
|
+
androidPlayer?.pause();
|
|
139
|
+
},
|
|
140
|
+
stop() {
|
|
141
|
+
ended = false;
|
|
142
|
+
if (__IOS__) {
|
|
143
|
+
player?.stop();
|
|
144
|
+
if (player)
|
|
145
|
+
player.currentTime = 0;
|
|
146
|
+
if (delegate)
|
|
147
|
+
delegate.callbacks.complete = undefined;
|
|
148
|
+
}
|
|
149
|
+
else if (androidPlayer) {
|
|
150
|
+
androidPlayer.setOnCompletionListener(null);
|
|
151
|
+
if (androidPlayer.isPlaying())
|
|
152
|
+
androidPlayer.pause();
|
|
153
|
+
androidPlayer.seekTo(0);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
volume(value) {
|
|
157
|
+
if (__IOS__) {
|
|
158
|
+
if (player)
|
|
159
|
+
player.volume = value;
|
|
160
|
+
}
|
|
161
|
+
else
|
|
162
|
+
androidPlayer?.setVolume(value, value);
|
|
163
|
+
},
|
|
164
|
+
dispose() {
|
|
165
|
+
if (released)
|
|
166
|
+
return;
|
|
167
|
+
released = true;
|
|
168
|
+
off();
|
|
169
|
+
fail = undefined;
|
|
170
|
+
if (__IOS__) {
|
|
171
|
+
player?.stop();
|
|
172
|
+
if (player)
|
|
173
|
+
player.delegate = null;
|
|
174
|
+
delegate = undefined;
|
|
175
|
+
player = undefined;
|
|
176
|
+
disposePlatform();
|
|
177
|
+
}
|
|
178
|
+
else if (androidPlayer) {
|
|
179
|
+
androidPlayer.setOnPreparedListener(null);
|
|
180
|
+
androidPlayer.setOnCompletionListener(null);
|
|
181
|
+
androidPlayer.setOnErrorListener(null);
|
|
182
|
+
androidPlayer.release();
|
|
183
|
+
androidPlayer = undefined;
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
const cue = createAudioCue(adapter, options);
|
|
188
|
+
if (cue.status === 'failed')
|
|
189
|
+
return cue;
|
|
190
|
+
let held = false;
|
|
191
|
+
const suspend = () => {
|
|
192
|
+
if (!cue.suspended) {
|
|
193
|
+
held = true;
|
|
194
|
+
cue.suspend();
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
const resume = () => {
|
|
198
|
+
if (held) {
|
|
199
|
+
held = false;
|
|
200
|
+
cue.resume();
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
Application.on(Application.suspendEvent, suspend);
|
|
204
|
+
Application.on(Application.resumeEvent, resume);
|
|
205
|
+
const observer = __IOS__
|
|
206
|
+
? Application.ios.addNotificationObserver(AVAudioSessionInterruptionNotification, () => cue.stop())
|
|
207
|
+
: undefined;
|
|
208
|
+
off = () => {
|
|
209
|
+
Application.off(Application.suspendEvent, suspend);
|
|
210
|
+
Application.off(Application.resumeEvent, resume);
|
|
211
|
+
if (__IOS__ && observer)
|
|
212
|
+
Application.ios.removeNotificationObserver(observer, AVAudioSessionInterruptionNotification);
|
|
213
|
+
};
|
|
214
|
+
return cue;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { RenderActivity } from './render-activity.js';
|
|
2
|
+
export type AdapterEventKind = 'prepare' | 'write' | 'start' | 'replace' | 'bind' | 'pause' | 'play' | 'seek' | 'cancel' | 'complete' | 'dispose';
|
|
3
|
+
export interface AdapterObservation {
|
|
4
|
+
alive: boolean;
|
|
5
|
+
values: readonly number[] | null;
|
|
6
|
+
owner?: object;
|
|
7
|
+
binding: boolean;
|
|
8
|
+
paused?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface AdapterDefinition {
|
|
11
|
+
name: string;
|
|
12
|
+
units: readonly string[];
|
|
13
|
+
platform: 'ios' | 'android' | 'web';
|
|
14
|
+
target: object;
|
|
15
|
+
read(): AdapterObservation;
|
|
16
|
+
}
|
|
17
|
+
export declare function registerAdapterInspection(property: object, definition: AdapterDefinition): void;
|
|
18
|
+
export declare function adapterEvent(property: object, kind: AdapterEventKind, owner?: object, previous?: object): void;
|
|
19
|
+
/** Disabled path performs one WeakMap lookup and allocates no timing/sample objects. */
|
|
20
|
+
export declare function adapterMeasure(property: object, kind: 'prepare' | 'write'): ((components?: number) => void) | undefined;
|
|
21
|
+
export interface AdapterInspectionEvent {
|
|
22
|
+
sequence: number;
|
|
23
|
+
at: number;
|
|
24
|
+
target: string;
|
|
25
|
+
kind: AdapterEventKind;
|
|
26
|
+
owner?: number;
|
|
27
|
+
previous?: number;
|
|
28
|
+
ownerLabel?: string;
|
|
29
|
+
previousLabel?: string;
|
|
30
|
+
jsMs?: number;
|
|
31
|
+
preparedComponents?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface AdapterInspectionSnapshot {
|
|
34
|
+
version: 1;
|
|
35
|
+
properties: {
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
units: string[];
|
|
39
|
+
platform: 'ios' | 'android' | 'web';
|
|
40
|
+
target: number;
|
|
41
|
+
values: number[] | null;
|
|
42
|
+
observation: 'adapter-read' | 'unavailable';
|
|
43
|
+
owner?: number;
|
|
44
|
+
ownerLabel?: string;
|
|
45
|
+
binding: boolean;
|
|
46
|
+
paused?: boolean;
|
|
47
|
+
}[];
|
|
48
|
+
activities: {
|
|
49
|
+
id: string;
|
|
50
|
+
active: boolean;
|
|
51
|
+
suspended: boolean;
|
|
52
|
+
references: number;
|
|
53
|
+
}[];
|
|
54
|
+
events: AdapterInspectionEvent[];
|
|
55
|
+
cost: {
|
|
56
|
+
reads: number;
|
|
57
|
+
readMs: number;
|
|
58
|
+
prepareMs: number;
|
|
59
|
+
updateMs: number;
|
|
60
|
+
writes: number;
|
|
61
|
+
preparedComponents: number;
|
|
62
|
+
droppedEvents: number;
|
|
63
|
+
};
|
|
64
|
+
/** No renderer, native sampling, allocator or GPU measurements are inferred. */
|
|
65
|
+
unavailable: readonly ['gpuTime', 'nativeSamplingTime', 'allocatedBytes'];
|
|
66
|
+
}
|
|
67
|
+
export interface AdapterInspector {
|
|
68
|
+
watch(property: object, id: string): () => void;
|
|
69
|
+
activity(activity: RenderActivity, id: string): () => void;
|
|
70
|
+
label(owner: object, label: string): void;
|
|
71
|
+
read(): AdapterInspectionSnapshot;
|
|
72
|
+
clear(): void;
|
|
73
|
+
dispose(): void;
|
|
74
|
+
}
|
|
75
|
+
/** Explicit, bounded, pull-only registration. Weak references do not keep targets alive. */
|
|
76
|
+
export declare function createAdapterInspector(options: {
|
|
77
|
+
development: true;
|
|
78
|
+
capacity?: number;
|
|
79
|
+
now(): number;
|
|
80
|
+
}): AdapterInspector;
|
|
81
|
+
export {};
|
|
82
|
+
//# sourceMappingURL=adapter-inspection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-inspection.d.ts","sourceRoot":"","sources":["../../src/core/adapter-inspection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
const definitions = new WeakMap();
|
|
2
|
+
const hooks = new WeakMap();
|
|
3
|
+
export function registerAdapterInspection(property, definition) {
|
|
4
|
+
definitions.set(property, definition);
|
|
5
|
+
}
|
|
6
|
+
export function adapterEvent(property, kind, owner, previous) {
|
|
7
|
+
const listeners = hooks.get(property);
|
|
8
|
+
if (listeners)
|
|
9
|
+
for (const listener of listeners)
|
|
10
|
+
listener.event(kind, owner, previous);
|
|
11
|
+
if (kind === 'dispose') {
|
|
12
|
+
definitions.delete(property);
|
|
13
|
+
hooks.delete(property);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Disabled path performs one WeakMap lookup and allocates no timing/sample objects. */
|
|
17
|
+
export function adapterMeasure(property, kind) {
|
|
18
|
+
const listeners = hooks.get(property);
|
|
19
|
+
if (!listeners?.size)
|
|
20
|
+
return undefined;
|
|
21
|
+
const starts = [...listeners].map((listener) => [listener, listener.now()]);
|
|
22
|
+
return (components = 0) => {
|
|
23
|
+
for (const [listener, start] of starts)
|
|
24
|
+
listener.event(kind, undefined, undefined, Math.max(0, listener.now() - start), components);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/** Explicit, bounded, pull-only registration. Weak references do not keep targets alive. */
|
|
28
|
+
export function createAdapterInspector(options) {
|
|
29
|
+
if (options.development !== true)
|
|
30
|
+
throw new TypeError('Adapter inspection requires development: true.');
|
|
31
|
+
const capacity = options.capacity ?? 240;
|
|
32
|
+
if (!Number.isInteger(capacity) || capacity < 8 || capacity > 2000)
|
|
33
|
+
throw new RangeError('Inspector capacity is 8–2000.');
|
|
34
|
+
const properties = new Map();
|
|
35
|
+
const activities = new Map();
|
|
36
|
+
const identities = new WeakMap(), labels = new WeakMap();
|
|
37
|
+
let sequence = 0, next = 0, disposed = false;
|
|
38
|
+
const events = [];
|
|
39
|
+
const cost = {
|
|
40
|
+
reads: 0,
|
|
41
|
+
readMs: 0,
|
|
42
|
+
prepareMs: 0,
|
|
43
|
+
updateMs: 0,
|
|
44
|
+
writes: 0,
|
|
45
|
+
preparedComponents: 0,
|
|
46
|
+
droppedEvents: 0,
|
|
47
|
+
};
|
|
48
|
+
const identity = (value) => {
|
|
49
|
+
let id = identities.get(value);
|
|
50
|
+
if (!id) {
|
|
51
|
+
id = ++next;
|
|
52
|
+
identities.set(value, id);
|
|
53
|
+
}
|
|
54
|
+
return id;
|
|
55
|
+
};
|
|
56
|
+
const validID = (id) => {
|
|
57
|
+
if (disposed)
|
|
58
|
+
throw new Error('Adapter inspector is disposed.');
|
|
59
|
+
if (!/^[A-Za-z][\w.-]{0,63}$/.test(id) || properties.has(id) || activities.has(id))
|
|
60
|
+
throw new TypeError('Use a unique non-personal ASCII inspector ID.');
|
|
61
|
+
if (properties.size + activities.size >= 128)
|
|
62
|
+
throw new RangeError('Inspect at most 128 explicit resources.');
|
|
63
|
+
};
|
|
64
|
+
const remove = (id) => {
|
|
65
|
+
properties.get(id)?.off();
|
|
66
|
+
properties.delete(id);
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
watch(property, id) {
|
|
70
|
+
validID(id);
|
|
71
|
+
const definition = definitions.get(property);
|
|
72
|
+
if (!definition)
|
|
73
|
+
throw new TypeError('This resource does not expose adapter inspection.');
|
|
74
|
+
const ref = new WeakRef(property);
|
|
75
|
+
const listener = {
|
|
76
|
+
now: options.now,
|
|
77
|
+
event(kind, owner, previous, jsMs, components) {
|
|
78
|
+
if (disposed || !properties.has(id))
|
|
79
|
+
return;
|
|
80
|
+
events.push({
|
|
81
|
+
sequence: ++sequence,
|
|
82
|
+
at: options.now(),
|
|
83
|
+
target: id,
|
|
84
|
+
kind,
|
|
85
|
+
...(owner && { owner: identity(owner), ownerLabel: labels.get(owner) }),
|
|
86
|
+
...(previous && {
|
|
87
|
+
previous: identity(previous),
|
|
88
|
+
previousLabel: labels.get(previous),
|
|
89
|
+
}),
|
|
90
|
+
...(jsMs !== undefined && { jsMs }),
|
|
91
|
+
...(components !== undefined && { preparedComponents: components }),
|
|
92
|
+
});
|
|
93
|
+
if (events.length > capacity) {
|
|
94
|
+
events.shift();
|
|
95
|
+
cost.droppedEvents++;
|
|
96
|
+
}
|
|
97
|
+
if (kind === 'prepare') {
|
|
98
|
+
cost.prepareMs += jsMs ?? 0;
|
|
99
|
+
cost.preparedComponents += components ?? 0;
|
|
100
|
+
}
|
|
101
|
+
if (kind === 'write') {
|
|
102
|
+
cost.updateMs += jsMs ?? 0;
|
|
103
|
+
cost.writes++;
|
|
104
|
+
}
|
|
105
|
+
if (kind === 'dispose')
|
|
106
|
+
remove(id);
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
let listeners = hooks.get(property);
|
|
110
|
+
if (!listeners) {
|
|
111
|
+
listeners = new Set();
|
|
112
|
+
hooks.set(property, listeners);
|
|
113
|
+
}
|
|
114
|
+
listeners.add(listener);
|
|
115
|
+
const held = listeners;
|
|
116
|
+
properties.set(id, { ref, off: () => held.delete(listener) });
|
|
117
|
+
return () => remove(id);
|
|
118
|
+
},
|
|
119
|
+
activity(activity, id) {
|
|
120
|
+
validID(id);
|
|
121
|
+
activities.set(id, new WeakRef(activity));
|
|
122
|
+
return () => {
|
|
123
|
+
activities.delete(id);
|
|
124
|
+
};
|
|
125
|
+
},
|
|
126
|
+
label(owner, label) {
|
|
127
|
+
if (typeof label !== 'string' || !label || label.length > 100)
|
|
128
|
+
throw new TypeError('Use a short non-personal inspector label.');
|
|
129
|
+
labels.set(owner, label);
|
|
130
|
+
const id = identities.get(owner);
|
|
131
|
+
if (id)
|
|
132
|
+
for (const event of events) {
|
|
133
|
+
if (event.owner === id)
|
|
134
|
+
event.ownerLabel = label;
|
|
135
|
+
if (event.previous === id)
|
|
136
|
+
event.previousLabel = label;
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
read() {
|
|
140
|
+
const start = options.now();
|
|
141
|
+
const result = [];
|
|
142
|
+
for (const [id, entry] of properties) {
|
|
143
|
+
const property = entry.ref.deref(), definition = property && definitions.get(property);
|
|
144
|
+
if (!definition) {
|
|
145
|
+
remove(id);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
let observation;
|
|
149
|
+
try {
|
|
150
|
+
observation = definition.read();
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
remove(id);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (!observation.alive) {
|
|
157
|
+
remove(id);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
result.push({
|
|
161
|
+
id,
|
|
162
|
+
name: definition.name,
|
|
163
|
+
units: [...definition.units],
|
|
164
|
+
platform: definition.platform,
|
|
165
|
+
target: identity(definition.target),
|
|
166
|
+
values: observation.values ? [...observation.values] : null,
|
|
167
|
+
observation: observation.values ? 'adapter-read' : 'unavailable',
|
|
168
|
+
binding: observation.binding,
|
|
169
|
+
paused: observation.paused,
|
|
170
|
+
...(observation.owner && {
|
|
171
|
+
owner: identity(observation.owner),
|
|
172
|
+
ownerLabel: labels.get(observation.owner),
|
|
173
|
+
}),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
const demand = [];
|
|
177
|
+
for (const [id, ref] of activities) {
|
|
178
|
+
const activity = ref.deref();
|
|
179
|
+
if (!activity || activity.disposed) {
|
|
180
|
+
activities.delete(id);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
demand.push({
|
|
184
|
+
id,
|
|
185
|
+
active: activity.active,
|
|
186
|
+
suspended: activity.suspended,
|
|
187
|
+
references: activity.size,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
cost.reads++;
|
|
191
|
+
cost.readMs += Math.max(0, options.now() - start);
|
|
192
|
+
return {
|
|
193
|
+
version: 1,
|
|
194
|
+
properties: result,
|
|
195
|
+
activities: demand,
|
|
196
|
+
events: events.map((e) => ({ ...e })),
|
|
197
|
+
cost: { ...cost },
|
|
198
|
+
unavailable: ['gpuTime', 'nativeSamplingTime', 'allocatedBytes'],
|
|
199
|
+
};
|
|
200
|
+
},
|
|
201
|
+
clear() {
|
|
202
|
+
events.length = 0;
|
|
203
|
+
},
|
|
204
|
+
dispose() {
|
|
205
|
+
if (disposed)
|
|
206
|
+
return;
|
|
207
|
+
disposed = true;
|
|
208
|
+
for (const id of properties.keys())
|
|
209
|
+
remove(id);
|
|
210
|
+
activities.clear();
|
|
211
|
+
events.length = 0;
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=adapter-inspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-inspection.js","sourceRoot":"","sources":["../../src/core/adapter-inspection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Animation } from './playback.js';
|
|
2
|
+
export interface AudioPlayback extends Animation {
|
|
3
|
+
readonly duration: number | undefined;
|
|
4
|
+
readonly paused: boolean;
|
|
5
|
+
pause(): void;
|
|
6
|
+
play(): void;
|
|
7
|
+
dispose(): void;
|
|
8
|
+
}
|
|
9
|
+
export interface AudioCueOptions {
|
|
10
|
+
volume?: number;
|
|
11
|
+
muted?: boolean;
|
|
12
|
+
onError?: (error: unknown) => void;
|
|
13
|
+
}
|
|
14
|
+
export interface AudioCue {
|
|
15
|
+
/** Preparation failures resolve false; they never reject visual timelines. */
|
|
16
|
+
readonly ready: Promise<boolean>;
|
|
17
|
+
readonly status: 'loading' | 'ready' | 'failed' | 'disposed';
|
|
18
|
+
readonly duration: number | undefined;
|
|
19
|
+
readonly suspended: boolean;
|
|
20
|
+
volume: number;
|
|
21
|
+
muted: boolean;
|
|
22
|
+
/** One voice per cue. A new play replaces the preceding voice; play on a handle resumes. */
|
|
23
|
+
play(): AudioPlayback;
|
|
24
|
+
stop(): void;
|
|
25
|
+
suspend(): void;
|
|
26
|
+
resume(): void;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
}
|
|
29
|
+
export interface AudioAdapter {
|
|
30
|
+
load(ready: (duration: number) => void, fail: (error: unknown) => void): void;
|
|
31
|
+
start(complete: () => void, fail: (error: unknown) => void): void | Promise<void>;
|
|
32
|
+
pause(): void;
|
|
33
|
+
stop(): void;
|
|
34
|
+
volume(value: number): void;
|
|
35
|
+
dispose(): void;
|
|
36
|
+
}
|
|
37
|
+
/** Boundary callbacks only: the audio backend owns its playback clock. */
|
|
38
|
+
export declare function createAudioCue(adapter: AudioAdapter, options?: AudioCueOptions): AudioCue;
|
|
39
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/core/audio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;CAChB;AACD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AACD,MAAM,WAAW,QAAQ;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAA;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,4FAA4F;IAC5F,IAAI,IAAI,aAAa,CAAA;IACrB,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;IACf,MAAM,IAAI,IAAI,CAAA;IACd,OAAO,IAAI,IAAI,CAAA;CAChB;AACD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IAC7E,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjF,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAC5B,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CAuNV"}
|