@g9tm/lynxcontrols-native 1.4.2 → 1.4.4

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 CHANGED
@@ -1,12 +1,13 @@
1
1
  # @g9tm/lynxcontrols-native
2
2
 
3
- Android and iOS platform layer for G9: two Lynx native modules and one element (`<g9-video>`), linked into a host by
3
+ Android and iOS platform layer for G9: three Lynx native modules and one element (`<g9-video>`), linked into a host by
4
4
  **Lynx Autolink** from `node_modules`, plus their JS adapters.
5
5
 
6
6
  | Module | JS adapter | Android (Kotlin) | iOS (Objective-C) |
7
7
  | --- | --- | --- | --- |
8
8
  | `G9SqliteModule` | `createNativeSqliteDriver()` | androidx.sqlite `BundledSQLiteDriver` 2.7.1 | system `sqlite3` (iOS 15+, serial queue per session, `sqlite3_interrupt`) |
9
9
  | `G9HostModule` | `createNativeHostServices()` | `SharedPreferences`, `moveTaskToBack`, `InputMethodManager`, haptics, insets, `appDataDirectory()` = `filesDir` | `NSUserDefaults` suite, `resignFirstResponder`, `UIImpactFeedbackGenerator`, safe-area insets, `appDataDirectory()` = `Library` |
10
+ | `G9SpeechModule` | `createNativeSpeechToText()` → `services.speech` (dictation into fields) | `SpeechRecognizer` (main thread, partial results), the microphone asked through the host activity's `ActivityResultRegistry` | `SFSpeechRecognizer` over `AVAudioEngine`; register it on the host's `LynxConfig`; Info.plist `NSMicrophoneUsageDescription` + `NSSpeechRecognitionUsageDescription` |
10
11
  | `<g9-video>` element | `createNativeMediaProvider()` (`@g9tm/lynxcontrols-native/media`) | `G9VideoUI`: Media3 ExoPlayer 1.8.0 into a `TextureView` (opacity fades work); register `G9VideoBehaviors.create()` | `G9VideoUI`: `AVQueuePlayer` + `AVPlayerLooper` in an `AVPlayerLayer`; self-registers (`LYNX_REGISTER_UI`) |
11
12
 
12
13
  ```ts
@@ -21,6 +22,17 @@ const db = createG9Sqlite({ driver: createNativeSqliteDriver(), locator: singleF
21
22
 
22
23
  ## How it works
23
24
 
25
+ - **Dictation** (`services.speech`, MAUI `IG9SpeechToText`). `createNativeSpeechToText()` returns `null` where
26
+ `G9SpeechModule` is not linked, so the fields hide their microphone. One session at a time natively; the adapter
27
+ numbers sessions, routes the `g9:speech` global event (`{"session","text"}`, interim hypotheses) to the session that
28
+ asked, turns an abort into `cancel(session)` and settles every `listen` once (`recognized` / `no-match` /
29
+ `cancelled` / `denied`; a recogniser fault rejects with a `G9Error`). Android: the manifest merges `RECORD_AUDIO` and
30
+ the `RecognitionService` query Android 11+ needs to see a recogniser; androidx.activity is compile-only (every host
31
+ has it; a host activity that is not an `ActivityResultRegistryOwner` gets the current permission state, never a
32
+ prompt).
33
+ `isAvailable(locale)` is "a recogniser exists" on Android (asking a locale needs a broadcast some recognisers never
34
+ answer; an unsupported language ends as `no-match`) and `SFSpeechRecognizer(locale).isAvailable` on iOS.
35
+
24
36
  - **Video** (the intro carousel's `services.media`). `<g9-video>` props: `src`, `paused`, `loop`, `muted`,
25
37
  `start-seconds`, `near-end-seconds`, `object-fit`; events `ready`, `nearend`, `looped`, `error`. The provider's
26
38
  player renders it with reactive props (no UI-method calls) and unmounts it on `dispose()`, which releases the native
@@ -54,13 +66,16 @@ android/src/main/java/com/g9lynx/g9native/
54
66
  sqlite/core/ pure Kotlin: G9SqliteCore, G9SqliteService (executors), G9SqliteTransport, values/errors
55
67
  sqlite/androidx/ AndroidxSqlEngine (BundledSQLiteDriver)
56
68
  host/core/ G9PreferencesCore
57
- G9SqliteModule.kt, G9HostModule.kt, G9Bridge.kt Lynx modules (kapt + lynx-processor → LynxLibraryProviderImpl)
69
+ G9SqliteModule.kt, G9HostModule.kt, G9SpeechModule.kt, G9Bridge.kt Lynx modules (kapt + lynx-processor →
70
+ LynxLibraryProviderImpl)
58
71
  android/src/test/ JVM tests: contract runner, core, service, transport golden, preferences
59
72
  ios/src/core/ portable Objective-C (Foundation + sqlite3): G9SqliteCore, G9SqliteTransport, G9PreferencesCore
60
- ios/src/ G9SqliteModule.m, G9HostModule.m (dispatch queues, UIKit); register them on the host's LynxConfig
73
+ ios/src/ G9SqliteModule.m, G9HostModule.m, G9SpeechModule.m (dispatch queues, UIKit, Speech); register them
74
+ on the host's LynxConfig
61
75
  ios/Tests/ G9NativeTestSuite (XCTest on a simulator; Linux harness in Tests/linux)
62
76
  jvm/ JVM-only Gradle build of the core + tests (no Android SDK needed)
63
- android-check/ cloud compile check of module + reference host against the published Lynx 4.1.0 classes, and
77
+ android-check/ cloud compile check of module + reference host against the published Lynx 4.1.0 classes (Media3,
78
+ androidx.sqlite and androidx.activity as compile-only stubs under stubs/), and
64
79
  LynxBridgeSignatureTest: every @LynxMethod through Lynx's own LynxMethodWrapper
65
80
  ```
66
81
 
@@ -34,6 +34,9 @@ dependencies {
34
34
  // The generated specs import androidx.annotation and lynx-processor's output uses @Keep, but Lynx's POMs declare it
35
35
  // at runtime scope only: without this line kapt depends on androidx.sqlite / media3 bringing it in transitively.
36
36
  compileOnly("androidx.annotation:annotation:1.9.1")
37
+ // G9SpeechModule asks for the microphone through the host activity's ActivityResultRegistry: compile-only, as every
38
+ // host of these libraries ships androidx.activity (a host without it gets the current state, never a prompt).
39
+ compileOnly("androidx.activity:activity:1.10.1")
37
40
  implementation("androidx.sqlite:sqlite-bundled:2.7.1")
38
41
  // <g9-video> (video/G9VideoUI.kt): ExoPlayer drawing into a TextureView. Google Maven only.
39
42
  implementation("androidx.media3:media3-exoplayer:1.8.0")
@@ -1,5 +1,12 @@
1
1
  <manifest
2
2
  xmlns:android="http://schemas.android.com/apk/res/android"
3
3
  package="com.g9lynx.g9native">
4
+ <!-- G9SpeechModule: dictation records the microphone, and Android 11+ only sees a recogniser it declares a query for. -->
5
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
6
+ <queries>
7
+ <intent>
8
+ <action android:name="android.speech.RecognitionService" />
9
+ </intent>
10
+ </queries>
4
11
  <application />
5
12
  </manifest>
@@ -0,0 +1,206 @@
1
+ package com.g9lynx.g9native
2
+
3
+ import android.Manifest
4
+ import android.app.Activity
5
+ import android.content.Context
6
+ import android.content.ContextWrapper
7
+ import android.content.Intent
8
+ import android.content.pm.PackageManager
9
+ import android.os.Bundle
10
+ import android.os.Handler
11
+ import android.os.Looper
12
+ import android.speech.RecognitionListener
13
+ import android.speech.RecognizerIntent
14
+ import android.speech.SpeechRecognizer
15
+ import androidx.activity.result.ActivityResultLauncher
16
+ import androidx.activity.result.ActivityResultRegistryOwner
17
+ import androidx.activity.result.contract.ActivityResultContracts
18
+ import com.g9lynx.g9native.generated.G9SpeechModuleSpec
19
+ import com.lynx.jsbridge.LynxMethod
20
+ import com.lynx.jsbridge.LynxNativeModule
21
+ import com.lynx.react.bridge.Callback
22
+ import com.lynx.react.bridge.JavaOnlyArray
23
+ import com.lynx.tasm.behavior.LynxContext
24
+ import org.json.JSONObject
25
+ import java.util.concurrent.atomic.AtomicInteger
26
+
27
+ /**
28
+ * `NativeModules.G9SpeechModule` (`G9SpeechToText`, MAUI `IG9SpeechToText`): Android's `SpeechRecognizer`, one session at
29
+ * a time, on the main thread (the recogniser demands it). Partial hypotheses go out as the global event `g9:speech`
30
+ * (`{"session","text"}`); the `listen` reply settles once. The microphone permission is asked through the activity's
31
+ * `ActivityResultRegistry` — the host's activity must be an `ActivityResultRegistryOwner` (every `ComponentActivity`;
32
+ * androidx.activity is compile-only here, every host of these libraries has it); another activity answers with the
33
+ * current state instead of a prompt.
34
+ * TWIN: ios/src/G9SpeechModule.m.
35
+ */
36
+ @LynxNativeModule(name = "G9SpeechModule")
37
+ class G9SpeechModule(private val lynxContext: LynxContext) : G9SpeechModuleSpec(lynxContext) {
38
+ private val main = Handler(Looper.getMainLooper())
39
+
40
+ private class Session(val id: String, val recognizer: SpeechRecognizer, val callback: Callback?) {
41
+ var settled = false
42
+ }
43
+
44
+ private var current: Session? = null
45
+
46
+ private fun activity(): Activity? {
47
+ var context: Context? = lynxContext
48
+ while (context is ContextWrapper) {
49
+ if (context is Activity) return context
50
+ context = context.baseContext
51
+ }
52
+ return null
53
+ }
54
+
55
+ private fun ok(callback: Callback?, value: Any?) = G9Bridge.reply(callback, mapOf("ok" to true, "value" to value))
56
+
57
+ private fun fail(callback: Callback?, code: String, message: String) =
58
+ G9Bridge.reply(callback, mapOf("ok" to false, "error" to mapOf("code" to code, "message" to message)))
59
+
60
+ private fun micGranted(): Boolean =
61
+ lynxContext.checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
62
+
63
+ @LynxMethod
64
+ override fun isAvailable(locale: String?, callback: Callback?) {
65
+ // The locale cannot be asked without starting a session (RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS needs a
66
+ // broadcast round-trip that some recognisers never answer): a recogniser that exists is "available"; an unsupported
67
+ // language then ends its session as no-match.
68
+ main.post { ok(callback, SpeechRecognizer.isRecognitionAvailable(lynxContext)) }
69
+ }
70
+
71
+ @LynxMethod
72
+ override fun requestPermission(callback: Callback?) {
73
+ if (micGranted()) return ok(callback, "granted")
74
+ main.post {
75
+ val host = activity()
76
+ try {
77
+ if (host !is ActivityResultRegistryOwner || host.isFinishing) return@post ok(callback, "denied")
78
+ var launcher: ActivityResultLauncher<String>? = null
79
+ launcher =
80
+ host.activityResultRegistry.register("g9.speech.mic." + nextKey.incrementAndGet(), ActivityResultContracts.RequestPermission()) { granted ->
81
+ launcher?.unregister()
82
+ ok(callback, if (granted) "granted" else "denied")
83
+ }
84
+ launcher.launch(Manifest.permission.RECORD_AUDIO)
85
+ } catch (t: Throwable) {
86
+ // No androidx.activity in this host, or the registry refused: say what is true now rather than fail.
87
+ ok(callback, if (micGranted()) "granted" else "denied")
88
+ }
89
+ }
90
+ }
91
+
92
+ @LynxMethod
93
+ override fun listen(session: String?, locale: String?, callback: Callback?) {
94
+ val id = session ?: ""
95
+ main.post {
96
+ if (!micGranted()) return@post ok(callback, mapOf("status" to "denied"))
97
+ if (!SpeechRecognizer.isRecognitionAvailable(lynxContext)) return@post fail(callback, "speech-unavailable", "No speech recogniser on this device.")
98
+ current?.let { finish(it, mapOf("status" to "cancelled")) }
99
+ val recognizer =
100
+ try {
101
+ SpeechRecognizer.createSpeechRecognizer(lynxContext)
102
+ } catch (t: Throwable) {
103
+ return@post fail(callback, "speech-recognition", t.message ?: "The recogniser could not start.")
104
+ }
105
+ val s = Session(id, recognizer, callback)
106
+ current = s
107
+ recognizer.setRecognitionListener(listener(s))
108
+ val intent =
109
+ Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
110
+ putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
111
+ putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true)
112
+ putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1)
113
+ if (!locale.isNullOrBlank()) {
114
+ putExtra(RecognizerIntent.EXTRA_LANGUAGE, locale)
115
+ putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, locale)
116
+ }
117
+ putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, lynxContext.packageName)
118
+ }
119
+ try {
120
+ recognizer.startListening(intent)
121
+ } catch (t: Throwable) {
122
+ finishWithError(s, "speech-recognition", t.message ?: "The recogniser could not start.")
123
+ }
124
+ }
125
+ }
126
+
127
+ @LynxMethod
128
+ override fun cancel(session: String?) {
129
+ main.post {
130
+ val s = current ?: return@post
131
+ if (s.id != session) return@post
132
+ try {
133
+ s.recognizer.cancel()
134
+ } catch (_: Throwable) {
135
+ }
136
+ finish(s, mapOf("status" to "cancelled"))
137
+ }
138
+ }
139
+
140
+ private fun listener(s: Session) =
141
+ object : RecognitionListener {
142
+ override fun onReadyForSpeech(params: Bundle?) {}
143
+
144
+ override fun onBeginningOfSpeech() {}
145
+
146
+ override fun onRmsChanged(rmsdB: Float) {}
147
+
148
+ override fun onBufferReceived(buffer: ByteArray?) {}
149
+
150
+ override fun onEndOfSpeech() {}
151
+
152
+ override fun onEvent(eventType: Int, params: Bundle?) {}
153
+
154
+ override fun onPartialResults(partialResults: Bundle?) {
155
+ val text = best(partialResults) ?: return
156
+ if (s.settled || text.isEmpty()) return
157
+ val args = JavaOnlyArray().apply { pushString(JSONObject(mapOf("session" to s.id, "text" to text)).toString()) }
158
+ try {
159
+ lynxContext.sendGlobalEvent("g9:speech", args)
160
+ } catch (_: Throwable) {
161
+ }
162
+ }
163
+
164
+ override fun onResults(results: Bundle?) {
165
+ val text = best(results)?.trim().orEmpty()
166
+ finish(s, if (text.isEmpty()) mapOf("status" to "no-match") else mapOf("status" to "recognized", "text" to text))
167
+ }
168
+
169
+ override fun onError(error: Int) {
170
+ when (error) {
171
+ SpeechRecognizer.ERROR_NO_MATCH, SpeechRecognizer.ERROR_SPEECH_TIMEOUT -> finish(s, mapOf("status" to "no-match"))
172
+ SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS -> finish(s, mapOf("status" to "denied"))
173
+ SpeechRecognizer.ERROR_CLIENT -> finish(s, mapOf("status" to "cancelled"))
174
+ else -> finishWithError(s, "speech-recognition", "Speech recognition failed (SpeechRecognizer error $error).")
175
+ }
176
+ }
177
+ }
178
+
179
+ private fun best(bundle: Bundle?): String? = bundle?.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)?.firstOrNull()
180
+
181
+ private fun finish(s: Session, value: Map<String, Any?>) {
182
+ if (s.settled) return
183
+ s.settled = true
184
+ release(s)
185
+ ok(s.callback, value)
186
+ }
187
+
188
+ private fun finishWithError(s: Session, code: String, message: String) {
189
+ if (s.settled) return
190
+ s.settled = true
191
+ release(s)
192
+ fail(s.callback, code, message)
193
+ }
194
+
195
+ private fun release(s: Session) {
196
+ if (current === s) current = null
197
+ try {
198
+ s.recognizer.destroy()
199
+ } catch (_: Throwable) {
200
+ }
201
+ }
202
+
203
+ private companion object {
204
+ val nextKey = AtomicInteger()
205
+ }
206
+ }
@@ -0,0 +1,27 @@
1
+ // Generated by @lynx-js/autolink-codegen. Do not edit.
2
+ // Parameter types: scripts/android-bridge-types.mjs --fix (Lynx's bridge rejects the generator's Object).
3
+ package com.g9lynx.g9native.generated;
4
+
5
+ import androidx.annotation.Nullable;
6
+ import com.lynx.jsbridge.LynxContextModule;
7
+ import com.lynx.jsbridge.LynxMethod;
8
+ import com.lynx.react.bridge.Callback;
9
+ import com.lynx.tasm.behavior.LynxContext;
10
+
11
+ public abstract class G9SpeechModuleSpec extends LynxContextModule {
12
+ public G9SpeechModuleSpec(LynxContext context) {
13
+ super(context);
14
+ }
15
+
16
+ @LynxMethod
17
+ public abstract void isAvailable(String locale, Callback callback);
18
+
19
+ @LynxMethod
20
+ public abstract void requestPermission(Callback callback);
21
+
22
+ @LynxMethod
23
+ public abstract void listen(String session, String locale, Callback callback);
24
+
25
+ @LynxMethod
26
+ public abstract void cancel(String session);
27
+ }
package/dist/.tsbuildinfo CHANGED
@@ -1 +1 @@
1
- {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/@types/react/node_modules/csstype/index.d.ts","../../../node_modules/@types/prop-types/index.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/animation.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@lynx-js/types/types/common/csstype.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/animation.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/element.d.ts","../../../node_modules/@lynx-js/types/types/common/events.d.ts","../../../node_modules/@lynx-js/types/types/common/system-info.d.ts","../../../node_modules/@lynx-js/types/types/common/performance.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/lynx.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/events.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/index.d.ts","../../../node_modules/@lynx-js/types/types/common/lynx.d.ts","../../../node_modules/@lynx-js/types/types/common/global.d.ts","../../../node_modules/@lynx-js/types/types/common/props.d.ts","../../../node_modules/@lynx-js/types/types/common/element/component.d.ts","../../../node_modules/@lynx-js/types/types/common/element/filter-image.d.ts","../../../node_modules/@lynx-js/types/types/common/element/image.d.ts","../../../node_modules/@lynx-js/types/types/common/element/common.d.ts","../../../node_modules/@lynx-js/types/types/common/element/list.d.ts","../../../node_modules/@lynx-js/types/types/common/element/list-item.d.ts","../../../node_modules/@lynx-js/types/types/common/element/page.d.ts","../../../node_modules/@lynx-js/types/types/common/element/scroll-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/text.d.ts","../../../node_modules/@lynx-js/types/types/common/element/view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/input.d.ts","../../../node_modules/@lynx-js/types/types/common/element/textarea.d.ts","../../../node_modules/@lynx-js/types/types/common/element/title-bar-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/svg.d.ts","../../../node_modules/@lynx-js/types/types/common/element/refresh.d.ts","../../../node_modules/@lynx-js/types/types/common/element/scroll-coordinator.d.ts","../../../node_modules/@lynx-js/types/types/common/element/viewpager.d.ts","../../../node_modules/@lynx-js/types/types/common/element/blur-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/webview.d.ts","../../../node_modules/@lynx-js/types/types/common/element/markdown.d.ts","../../../node_modules/@lynx-js/types/types/common/element/video.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/lynx-performance-entry.d.ts","../../../node_modules/@lynx-js/types/types/common/element/frame.d.ts","../../../node_modules/@lynx-js/types/types/common/element/overlay.d.ts","../../../node_modules/@lynx-js/types/types/common/element/element.d.ts","../../../node_modules/@lynx-js/types/types/common/element/methods.d.ts","../../../node_modules/@lynx-js/types/types/common/element/attributes.d.ts","../../../node_modules/@lynx-js/types/types/common/element/index.d.ts","../../../node_modules/@lynx-js/types/types/common/console.d.ts","../../../node_modules/@lynx-js/types/types/common/index.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/event.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/nodes-ref.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/app.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/performance.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/fetch.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/lynx.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/native-modules.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/text-encoder-decoder.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/index.d.ts","../../../node_modules/@lynx-js/types/types/index.d.ts","../../../node_modules/@types/react/jsx-runtime.d.ts","../../../node_modules/@lynx-js/react/runtime/jsx-runtime/index.d.ts","../../sqlite/dist/values/ids.d.ts","../../sqlite/dist/values/int64.d.ts","../../sqlite/dist/values/local-date-time.d.ts","../../sqlite/dist/values/sql-value.d.ts","../../sqlite/dist/codecs/codecs.d.ts","../../foundation/dist/collections.d.ts","../../foundation/dist/culture/digits.d.ts","../../foundation/dist/culture/culture.d.ts","../../foundation/dist/culture/calendar.d.ts","../../foundation/dist/culture/date-format.d.ts","../../foundation/dist/culture/duration.d.ts","../../foundation/dist/culture/numbers.d.ts","../../foundation/dist/culture/strings.d.ts","../../foundation/dist/culture/relative-time.d.ts","../../foundation/dist/culture/index.d.ts","../../foundation/dist/enums/index.d.ts","../../foundation/dist/errors.d.ts","../../foundation/dist/exec/diagnostics.d.ts","../../foundation/dist/services/abort.d.ts","../../foundation/dist/exec/options.d.ts","../../foundation/dist/services/clock.d.ts","../../foundation/dist/exec/trace.d.ts","../../foundation/dist/exec/safe-executor.d.ts","../../foundation/dist/exec/index.d.ts","../../foundation/dist/icons/generated/glyph-svg.d.ts","../../foundation/dist/icons/glyph.d.ts","../../foundation/dist/icons/icon.d.ts","../../foundation/dist/icons/glyph-slots.d.ts","../../foundation/dist/icons/icon-fonts.d.ts","../../foundation/dist/icons/svg.d.ts","../../foundation/dist/icons/index.d.ts","../../foundation/dist/services/preferences.d.ts","../../foundation/dist/services/contracts.d.ts","../../foundation/dist/services/index.d.ts","../../foundation/dist/theme/color.d.ts","../../foundation/dist/tokens/generated/palettes.d.ts","../../foundation/dist/theme/theme.d.ts","../../foundation/dist/theme/control-colors.d.ts","../../foundation/dist/theme/variants.d.ts","../../foundation/dist/theme/index.d.ts","../../foundation/dist/tokens/generated/metrics.d.ts","../../foundation/dist/tokens/layout-metrics.d.ts","../../foundation/dist/tokens/css-vars.d.ts","../../foundation/dist/tokens/index.d.ts","../../foundation/dist/index.d.ts","../../sqlite/dist/driver/types.d.ts","../../sqlite/dist/contract/run-contract.d.ts","../../sqlite/dist/errors.d.ts","../../sqlite/dist/schema/columns.d.ts","../../sqlite/dist/query/expr.d.ts","../../sqlite/dist/schema/policies.d.ts","../../sqlite/dist/schema/entity.d.ts","../../sqlite/dist/query/compile.d.ts","../../sqlite/dist/query/builders.d.ts","../../sqlite/dist/repo/audit.d.ts","../../sqlite/dist/session/ambient.d.ts","../../sqlite/dist/session/locator.d.ts","../../sqlite/dist/session/migrations.d.ts","../../sqlite/dist/session/mutex.d.ts","../../sqlite/dist/session/write-hooks.d.ts","../../sqlite/dist/session/database.d.ts","../../sqlite/dist/session/cache.d.ts","../../sqlite/dist/session/scope.d.ts","../../sqlite/dist/repo/repository.d.ts","../../sqlite/dist/session/schema-setup.d.ts","../../sqlite/dist/index.d.ts","../src/protocol.ts","../src/transport.ts","../src/driver.ts","../src/services.ts","../src/index.ts","../../../node_modules/@lynx-js/react/runtime/lib/runtime-marker.d.ts","../../../node_modules/preact/src/jsx.d.ts","../../../node_modules/preact/src/dom.d.ts","../../../node_modules/preact/src/index.d.ts","../../../node_modules/preact/hooks/src/index.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/hooks/react.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/runwithforce.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/lynx.d.ts","../../../node_modules/preact/compat/src/suspense.d.ts","../../../node_modules/preact/compat/src/index.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/children.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/element.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/portalspending.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/portals.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/suspense.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/hooks/uselynxglobaleventlistener.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/globalprops.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/initdata.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/background-function/run-on-background.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/worklet/call/runonmainthread.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/api/animation/effect.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/api/animation/animation.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/api/element.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/bindings/types.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/main-thread-ref.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/lynx-api.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/index.d.ts","../../../node_modules/@lynx-js/react/types/react.docs.d.ts","../../../node_modules/@lynx-js/react/types/react.d.ts","../src/media.tsx"],"fileIdsList":[[41,95,96,197,198],[172,173,178,184],[41,173],[41,172,173,178,184],[41,192],[169,172,174,176,178,179,180,182,183,194],[41,184,185,186,187,188,193],[174,175],[172,178],[41,95,197,198],[41,95,172,181,197,198],[172],[189],[191],[190],[41,95,97,196,197,198],[41,174,194,195],[42,85,86,87],[53],[42,77,86,87,88,89,91,92,93],[42,85,86,87,89,90],[85,87],[42,85],[49,77],[43],[44],[51,55],[47],[41,51,55,56,57,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78,79],[47,51,55,77],[47,51,55],[56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78,79,80,81,82],[47,51,55,59],[47,60,63],[46],[48,52,53,94],[44,47,48,49,51,53,54,55,83,84],[44,47],[52,85,94],[45,85],[46,47,55],[45,46,50,51],[49,85],[38,39,40],[41],[170,172,173,177],[170,171],[105],[104],[104,105,106],[104,105,106,107,108,109,110,111],[110],[115,117,119,120],[116],[110,115,116,117,118,119],[115,118],[124],[123],[122,123,124,125,126,127],[103,112,113,114,121,128,131,137,141],[114,116,118,129],[116,118,129,130],[114],[132,134],[132,134,135,136],[132,133],[113,132,133],[133,138,139],[133,138,139,140],[97,163,164,165],[97,164,165,166,167],[95,97,142,164,197],[97],[97,142,164],[97,163,164],[98,99,100,101],[101,143],[101,142],[142],[98,99,100,101,102,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162],[101,102,147,149,150],[101,102,147],[101,102,146],[98,100,149],[100,101,142,143,147,148,149,151,157,158,159,160,163],[99,100,102],[146,147,148],[147],[98,100,142],[148,149,158],[98,100,102,142,143,149,151,153,154,155,156,157,159],[142,149],[102,143,149,158],[143,148,149,151,157,158,159,161],[142,145,147,149],[99]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"035312d4945d13efa134ae482f6dc56a1a9346f7ac3be7ccbad5741058ce87f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"07b03f752ae52a7130e06c5a8399d3a0dde07a1a634f8430b80cd6236c56b5c8","impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"acbac4ca6cd4b2b459debc4a274535775cb6278a8315be383fafa623ab78f18e","impliedFormat":1},{"version":"e421d0b097c78304a2597c1f33da586630e1dc665ae381c0c36e5ebc4aaf4566","impliedFormat":1},{"version":"adf624c89a0d509a789f3c0bf522969d2c47033dbeb50920b37cd89be475a65e","impliedFormat":1},{"version":"8ff8dade82d215fba372ec8ca795cb433997a41287e049acf294dd50cba08cc4","impliedFormat":1},{"version":"b32b532dcbe0a91d71fd94cb780e94bdfdce10be21608d914c29fb4b8939b24a","impliedFormat":1},{"version":"eb2b64881998b562a4fe9330e55aa2466cd3a41a1a57e93feac6555218cec06f","impliedFormat":1},{"version":"6db1694d205177322d792d924335b046b80607445a45c0d2de1fcffd190b48c0","impliedFormat":1},{"version":"2b47193137d251e8a5d4cea2d67fe85a68199795ba019e41d635f7cf5f8a35c5","impliedFormat":1},{"version":"f7e5c3960dd9df65d83408b9be446f7119fa1db1dd8266dd343349d90c3bf2ce","impliedFormat":1},{"version":"09c6491ed74af89a4155feafedecaf77780f5751c66d4b65b18d30fc0e053a75","impliedFormat":1},{"version":"188b01044640e5ef65f6edf0dd6e6454f02dd19f4ead66b9e03ebe26cc7298ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"c2be64f223b024c0b70c5096a8c361c9e11c7644f3bd8325d19c2720ee7087cd","impliedFormat":1},{"version":"5bf51107315834a209b08395b141e262b7d143d14f6b4e4d403d8e020cef7e32","impliedFormat":1},{"version":"db0dcbe48d5cb38315083b412c8ab6995b0d42dc73b286833e296827feb0e5b4","impliedFormat":1},{"version":"b3e4a49a3ba19463662e7b821544948b953d2f6708370d42406bda558084000c","impliedFormat":1},{"version":"90bebc017d1c8408719f5a056813cce04e171a53469c263a136c35076121bab0","impliedFormat":1},{"version":"0675f9dddf11b81ec71825d5d97fdd789e445003506255513e0fc829ebfb795a","impliedFormat":1},{"version":"32d1e153cac16ca3a3f5f6b68fae76cddcda509950fa00d038c465776359db0c","impliedFormat":1},{"version":"0d85d0fa55dd433acf924675d7e976c025c8521c91a76079844cd15e52855ccf","impliedFormat":1},{"version":"89da6ea3ee9735e712691227b0e5ee74381779f9ad8b0f4fb7ced0247b16735a","impliedFormat":1},{"version":"37f90d8b4384dae49b873e620b7fff15655c706105104809114ba98df6373124","impliedFormat":1},{"version":"7618f7fdf0abf7f712cefe766ac1ab7fcd1f8e753c513e57d3ada9ada3a57257","impliedFormat":1},{"version":"759df9936f492afeacebec2cea4efafdb647951e0e5edfc4c677ce2441eac9d0","impliedFormat":1},{"version":"8d8848528b40a84ab42200e89d08f3d5cd83efa275de1bb70ae38cb9e6fd5911","impliedFormat":1},{"version":"0e323630cbfda771430e2720f6a2f02f257becd8fb9722aa975ae773fb572210","impliedFormat":1},{"version":"56dbc770513baae28f7cfbadeba5078bb13a37a13132a5292e98a8b103312b98","impliedFormat":1},{"version":"84ff906032fe12e816bfb7441cee6726243e5a7316c4f2d6b0a6c149f1a91a16","impliedFormat":1},{"version":"a8641f25f667160f356c504936576de22899e50ea575d7a4da47fe3b3704dd93","impliedFormat":1},{"version":"dcbbe1fb0f2c0efc12e29db8bbccb5b82513384d01d7a55342065cb0611da272","impliedFormat":1},{"version":"af209189a194cf5ad1f7b22dd680b52843fec2e30f1283be20b2977872fd4424","impliedFormat":1},{"version":"14745f699217e89ff1034f7be978bc28c195472a597b5f36442ef83d954d47b0","impliedFormat":1},{"version":"10c1feac0328f8f90a81f348b7f3c6d3c3b3454e46fc045ba1a706406c58fd8e","impliedFormat":1},{"version":"f64cd565aca17df45f4666473da75e4ce51a2610e2ed1c31198e9f9325747a24","impliedFormat":1},{"version":"e415a17ab6a413d6be640457231e045541405eab1f0f370c7dd1e5567aa25999","impliedFormat":1},{"version":"8c03a41d6dc701b6648db83d71a92dc27147d7677ab5d70f32675e7e37b3795a","impliedFormat":1},{"version":"09c18bc60888c58e8f4568b6ca973af72613a8a01e7b213aab778e910ae18b2f","impliedFormat":1},{"version":"5258d7af58615ea380d959cbcb6d83cb7b9841b8c8267f5a0fcb36c092dadbdb","impliedFormat":1},{"version":"b2d74af681f440a07e714ae9a33e3ea49c79870b9674058114c0404d2aa2f190","impliedFormat":1},{"version":"24f31e43eb3505e5d2946315e7b8ee8b426dfbe92c3031e435a4eb2d9dd8d69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"679f7b45a77210e6dd0d72a4b81fd177868d2eacfd8ee6919ce6babd7512562d","impliedFormat":1},{"version":"c669ee7ba01fa6a60b17c3535f96b65fa82dfd2a475a8760364f2f3952f9bcbd","impliedFormat":1},{"version":"a8b121f6a75d603075e62793ff0c109112e882dd6ca2b70bdccbd8d8f753429b","impliedFormat":1},{"version":"f378d7ed5e3ecbe382ade55127a9c98e826c76f786e06effad6fde91a7023d55","impliedFormat":1},{"version":"4e3e9539df72b3bfcc56fa13140070020dac72f1eff39237b11253482cb99847","impliedFormat":1},{"version":"5a47b3a2bbe2c9b015fe356462afe0abe391c592fffbe277126e2415e0811967","impliedFormat":1},{"version":"a3e797c70a421cda37cdea4349dced37dceb1611669652d9c4c5523467a55cbf","impliedFormat":1},{"version":"9164e652ff4e7cbd993ca20acd0e2ad7e1cb775a7aefc577b506cf588763ec42","impliedFormat":1},{"version":"e52840670587e82e129c9bfc6a2f42d9c2f2e1fd6ce176fea998383a8c941ea5","impliedFormat":1},{"version":"31ca1ee726f5d7c7709913b98be76fc40fdfaaca6ad7fafc222108981e11227c","impliedFormat":1},{"version":"556db73da59f5162cdf5c7ea1bc3b063b6ccb758078ef6517ad6f6e4ae7b199a","impliedFormat":1},{"version":"0a2c8ef08611f5a5f711c7b10ba70d10dc1c6af0c9dba8168cbbf34911b74188","impliedFormat":1},{"version":"1d6ef45145a9939a43062fe18188d4f7bdfdf4547978e1f6b7c9089fe53e81e5","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"509a86836776d5c821901abc16a2d21de674d2c8943ceb8d018049bf324bc56c","impliedFormat":99},"bbe47f7ebb177015803b69bad47ecf0e5987449cae5dd498664a9e4885d7cdff","4f260a074507a0065f3cd71d1adc1b361f5337b3db9e8d01589d5872e9387a4a","7674dcae15d29bcba5a7e8c26defdb06bf75297bfaa3025037bcc1e4df7b0ae1","97ff954e351fb81e182a8bc0d7c6e3625054e2c37ea5df0ad0ea12952bd5d9c0","c65ecf314f579465ceba2eb45ec7529f977a7809480ff6119c7c129022472cca","d533d1fe3018752aa47ee74ae5dbdca34377441b891176ad99bd33366a64372f","44b82e4f46178400732ea809a906f7ffb9dd38efab331ca23e7ca4586bf903ef","d3dcff003bac57338c3e60be409d0ff167ec1ff513539a5534c7679332dbc992","16d64c89cec74fa23e8cee7c72acc7549f117dcf7845051870c40366c7522d09","11f9f682c02d51de68eed569f8de1e91c56df296a78f3a6c520b93d52aac2308","28b43630d8d29a300e1e5b0f5efb04c8f994d372fff1b653ce8bb70d4e011e1a","b06c48902c3d127098839c1a6500f41d3e21b2f07f277ba7de23ec730df7275d","94659c94bb0ae17efde21aaf59f2beb05d286bea13f2d3b2b288a6df4faeac18","a7a0e658ca429cfb5268d4bf2e2e6e9fe871ffd06b6588d65424ba4eba35338f","ab4c80cb9cf211a7cd100429cb4a823c5bd9f3618bf981e6504c6606abf08656","e60dd3f69310681e28813b910da7d57f5cf0078feccfd683d22a29b45bb7a035","ccd708c3fff99b4ec315e14315dce6b9e85f4c96d10131e9fd219edb6efbdb26","abc924fce33b86b9f8588de3a5be04c609fafa6cb1dc42629b3e9e3e18f7d018","f919e3a8b2d274b631ee4fee0c50eba1d3f39ceaccba04dff915e9f61e9f153c","3ae17ae844491c7326d070c3e70a94a9239394e7a1e84eb203eb1d57470e752e","d1b2970d348eb9f89ef0f0c6730d27e9331067a28f21c8bd667ba1138d5d3e93","b2c4833e6308888c3947953770b3343deaf4276c803bb36148991a3fb90b4f6a","41b7c8204ea79a93e380a228f5c744e9c9a80183133ac62633a4c76e3fdbd7db","d0a441df587b0632c16a813117f110574d903ddd0bc4d28599cc82ff8af7c094","b24ac81f4fcff56ed9827736abcf2f92ea5f86e16d66eb2ee3ccfa0bb8143bc9","068309ff581d08c276c4a772ddf3ab9c8090e591fc9917fdc6cdffc12c95a5bf","5c1d368a451520260ebb6c06121201f18abf86d80540290df6e424d372c5d0ed","bb3ccaacf5c19a7170939b7f735c6a94537fd95ad16b4247a6ad572b23183e74","2c8b86d9d29c4ea62762c3815ffe4fdb0c5dbc0dd096b9703236010f4a17c255","9528dc401d1a2502393af70423c895c3df61ef62240c0dca429a7cd1bd535b82","eebf270ff516980678bf039e03e18a9461f196aee2825d4d65f7d8a1fa362bff","ee4e73f46ce2f6517e82434bd9fc63c8b6b2179d37d74525899f124a76d06669","b04de3a3cd10559130d898b36da5612fda5db2c31c95b502077cad9fe538ed6c","bc4c3476708a74ae09c06bcdbb9765baaa135592e1cf6e25f2ee9a942c6cd5ec","29e6e980f179ac2981d68954462dfd4a4545f73c021f6a4c8a5f442c0e16e56c","faa64d270fa523f80fd31bc7340ee7f6a21632c2ea0cea6535bf5a34bcc6adf7","cbd4ce7ee090549d836cbffac2e76a192ac5b1c5f15bcbe29c06d32dc7006f34","ea5a5d5873c239b97d846fb8c78437e08ffd731924764f746c0ebcb7731d7648","fb6b5b4592e0eca5b8dc2507432e621a18c16d488ae8a610e4d1ddba1edff667","df85ab12f80aced067959d43bd7744017fccb1eb95adcfa343f16cba7c9ef670","613df14d2c8c0ba78286705c4ed01ec701ed03189ca3803dd69bc7086b9c02ff","298f8d2584216932ea238927177ef343d0b8da735eb40a5ba96b1f92e3675e33","c8082c78975419ed5a9f7daa655643425cdd98fee91bb82fd92d25f908c78465","3d1717d66cd1094139f0c1f0ed07ec56d91e4f5cd27e2b6309b6f195491e7f4a","6f1302be2fa00d8a64e3bd48b4ccdf5d77a402441d7728d48c2ecee706c79127","efb30c7f5b1e7e2c8941c95355161907fdd6f3f28941cceacf81edc11db89bad","37700ef2907cfee5d680c1ceb83ba8355223f375c8093f523b9ee2ce108c1044","a244408662b901d15567a5bcff4b29cd13a2a6c9bb2c27329eec616c48c8f144","cf4c01af6890db612fcb2eda144fa7a947a0fd005052f41485459d195cd7396d","770c7abd7f2b17ff392e7179ad9b14518bc284f18834ec6efc00b4c62b8a4846","f29c840652a2d49e5b24debe0c06f9dd6ca15f96421cbac112ba982258b16a94","44a3d19d7e208acb0261a1f718c047854d0794683a0d5c2193522d310e36bdec","090ce3b05198a4c287542354fcedbfd570d87b2f32d0363cab0eb48989aecd2e","ad4b4e5abb5f01f966304dfa08c347137a3fe77329c7ae6c17c824c3d4babf33","b78cb18aa49943470bbab837676a7c35d1dfbfae7241c144f1d7fbd183989022","024aeda8ac048f7b98839a2b806e2034fe2fa1db797418cf8923a06fb32358c8","54f9c37e150e434622cff5d71fb87237c48497141cb379fc1ab4d019a4a43e2e","0d912ede0e33119759d7a3eee223fcbb83f1ca4c229719c62d54aa071487ceca","6f5878e8666a8abbb560dcc15b19c95ac5b0f4f85aabab2e804abb6a145030e4","ac683a7d8aa2506a3d5a3243ed94348867c85307ba54e46e6dd4a440b6a3012d","cf08b5dd44744b109ed2ddb8968bc8cbd4c6192b74180e5fb0fb1671f38d5dbc","efa3706b88ec75d05bfa7fa44d39af58305b7affda1b3789cf6d3688bb83070b","0a589d620f1d4719925c345e3c6e17dde3137765ea8db58c5a790f52ccdc58a6","8a3a12f093b91e0e3ca5f9909fb0cbaed59e2d864f04f103487f8f87095dfbfb","07d6a4c577cad80d9c1a2cf5d0e0ddae1aafadb264f5e41396999edd5963c94d","ba23c12c72c1523b39716c37b20fddaaab05f3f82139c8cdc33d552c3de70684",{"version":"4643eefbe63f810c9a62806874ee74b9f845e3ac41d271302dcbc8b41aa565c0","signature":"ef010a3efd3a152c93ad02fee09ae186c4325672de691cf20c2d5b634d560117"},{"version":"b196a892a7087bc69d5e14a1647aaf5acfcdf995c1935a55afe405253c153b4c","signature":"f63a428eadbfdbc8c9137c4bdaa77a23988f7e82d1b01b5ef7d13e2f37d3d044"},{"version":"bb4df5f784c131c8fc70cfb1868ab99b883347d48c7260450d3c56958a996d60","signature":"b2b0e3e6fd8b425abfb54a11133c8b9abfc186d61ac86adc8deaba0b8c2f4e8f"},{"version":"faf3b4d50980988d8870ec5a63705d314d100f0338e3c9978362acea7a50e825","signature":"bd3f683b47db8bdf2c50f5c3becea6fd0610f1e70ae35e0a2d0605c7200b6719"},{"version":"0763d2dcc3c222b35e5692a428540b531055e3344853e6ec9519cd914f36a1ad","signature":"1b4441c0bc7e477dcec93ac03d68c33a05edd9369a6f1c205f797c325c9f4bf5"},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"8a2ef120c4da7aab664148ed8d283aa0b98df4d5f15c570d830c8998ef05718b","impliedFormat":1},{"version":"4433d18f82991634feae5150a68f9b30f5b05b55416af8ff9f7251fb29431ed5","impliedFormat":1},{"version":"cc5d0b221824b7d8597e8a2bbdad2383af877eb564eaca392992049839e88c9e","impliedFormat":1},{"version":"21898d939444825cee1232af435330610b09171bea22a2f892cf2058d764b63d","impliedFormat":1},{"version":"6ec5f3b496e6f10c4f0a079e3b1102acef9c0bf5e3464909fa6e88b16a26480f","impliedFormat":99},{"version":"d9d320cf31f6d63659484f6c9ca4db4ae673daefa65118dd8589838925ff1397","impliedFormat":99},{"version":"027cf2216d065a97bf5a8ea126b3ea2734fab6cfe32adaff81ab4e94a1b51bbe","impliedFormat":99},{"version":"f6e6313fad233c5141220f7d25eae120cdd6e5079fbe0aba56821a1e99d05df8","impliedFormat":1},{"version":"9534c35b4577c193e499178deb47419fdadddd5e53af5ec8cb88218848013f65","impliedFormat":1},{"version":"804dca323c25404588a6e71d76e52eb09806f05e6013f0be1fcea1fb7eed5fa3","impliedFormat":99},{"version":"aeba529dfa69caa0efcdee1f1455540250d026522e5551b20b8a7ba9eebc707a","impliedFormat":99},{"version":"dfe6945467765f8e7843442a9dfbcf6b5526b6465b07b4c75a54a750329b5f17","impliedFormat":99},{"version":"7f9f6c9fe0e48c401d855d849e28112ffe2425569eca01b08b8c6112b8200695","impliedFormat":99},{"version":"68fcdc663627d12d336b420b19b3e54258844d0cbca0879f711c22aafd853352","impliedFormat":99},{"version":"6e97a7762ca61b836f275a14bf22a1696559bfa01bd6176df9498e717b5ff298","impliedFormat":99},{"version":"86535783bd695ee43e1a403e8cc50b1d643d3741df8074d30fbfae3b0438f996","impliedFormat":99},{"version":"7c94c072f4eef88b15710e2a6dd17036bfd943b390976aecc94af63df2f8a287","impliedFormat":99},{"version":"7e8a2efc54958a4ea7d678671d8703b00ae48a519d0f795a8f44f605abdba3d5","impliedFormat":99},{"version":"1409a9680115403cac91934df0062646e0a77f1b220b60faec5fe26cd775d9ca","impliedFormat":99},{"version":"335226d599a9382c9bea07d37e23bf998c1022c0f67e4d6d2b69633de6ac118f","impliedFormat":99},{"version":"ae430fd9bac320e71c3fe9299d90dcf67555d9a4f97ecaa35947b430ba8648ea","impliedFormat":99},{"version":"9061ff14146280f47d740b344ddd641c16df526ecaa868c348852277a9fb8686","impliedFormat":99},{"version":"7fa70acc5eed701b456f21e33f8f289e9e0e77fdd1f952385c33d6b9ecfb2021","impliedFormat":99},{"version":"16c6bbe197b6bf88db162c620e37218fab4c1c32892132d4aa33e461ae2b990a","impliedFormat":99},{"version":"9778598e1d86d1e544ab77fbc0bb5199d2fbb08ed386b3520732246b90005545","impliedFormat":99},{"version":"feed66ae8815d1981ad575482766fb9a82385e75cce35ae2f13be58e50c4349f","impliedFormat":99},{"version":"7e500d1f51b14c04c6dce8dcbadc5c48f4bec6fca0f321397c165868834916a2","affectsGlobalScope":true,"impliedFormat":99},{"version":"20c1041fbd4f1537686af4b707872b87c90a22201f8979e5def4554d28b46a5b","impliedFormat":99},{"version":"57ff3023920f09ea08ee1fb662518ff60312e81781e03c4e3b50cef3322143be","signature":"495d5d4a044fa18020972e7146c7416e467a364a9b23de05b096335d212ac9bb"}],"root":[[164,168],198],"options":{"composite":true,"declaration":true,"declarationDir":"./","declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"jsx":4,"jsxImportSource":"@lynx-js/react","module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":6,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[97,1],[185,2],[174,3],[186,4],[193,5],[195,6],[194,7],[176,8],[179,9],[180,10],[182,11],[183,12],[190,13],[189,14],[191,15],[192,14],[197,16],[196,17],[88,18],[90,19],[94,20],[91,21],[92,22],[87,23],[89,24],[44,25],[82,26],[73,27],[59,28],[56,27],[80,29],[57,27],[78,30],[58,31],[83,32],[66,31],[61,27],[60,33],[75,31],[81,34],[79,31],[62,27],[70,31],[71,31],[63,33],[69,31],[64,31],[67,31],[68,27],[76,31],[65,27],[72,31],[74,31],[47,35],[54,36],[85,37],[55,38],[95,39],[45,35],[46,40],[51,41],[52,42],[50,43],[41,44],[96,45],[178,46],[177,12],[173,12],[171,12],[172,47],[170,12],[106,48],[105,49],[107,50],[112,51],[109,49],[111,52],[110,48],[121,53],[117,54],[120,55],[119,56],[125,57],[126,57],[124,58],[128,59],[127,58],[142,60],[130,61],[131,62],[132,63],[135,64],[137,65],[134,66],[136,67],[140,68],[141,69],[166,70],[168,71],[198,72],[164,73],[167,74],[165,75],[102,76],[144,77],[143,78],[145,79],[163,80],[151,81],[150,82],[147,83],[152,84],[161,85],[146,86],[149,87],[148,88],[153,89],[159,90],[158,91],[155,92],[162,93],[160,94],[157,95],[101,96]],"latestChangedDtsFile":"./media.d.ts","version":"5.9.3"}
1
+ {"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/@types/react/node_modules/csstype/index.d.ts","../../../node_modules/@types/prop-types/index.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/animation.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@lynx-js/types/types/common/csstype.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/animation.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/element.d.ts","../../../node_modules/@lynx-js/types/types/common/events.d.ts","../../../node_modules/@lynx-js/types/types/common/system-info.d.ts","../../../node_modules/@lynx-js/types/types/common/performance.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/lynx.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/events.d.ts","../../../node_modules/@lynx-js/types/types/main-thread/index.d.ts","../../../node_modules/@lynx-js/types/types/common/lynx.d.ts","../../../node_modules/@lynx-js/types/types/common/global.d.ts","../../../node_modules/@lynx-js/types/types/common/props.d.ts","../../../node_modules/@lynx-js/types/types/common/element/component.d.ts","../../../node_modules/@lynx-js/types/types/common/element/filter-image.d.ts","../../../node_modules/@lynx-js/types/types/common/element/image.d.ts","../../../node_modules/@lynx-js/types/types/common/element/common.d.ts","../../../node_modules/@lynx-js/types/types/common/element/list.d.ts","../../../node_modules/@lynx-js/types/types/common/element/list-item.d.ts","../../../node_modules/@lynx-js/types/types/common/element/page.d.ts","../../../node_modules/@lynx-js/types/types/common/element/scroll-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/text.d.ts","../../../node_modules/@lynx-js/types/types/common/element/view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/input.d.ts","../../../node_modules/@lynx-js/types/types/common/element/textarea.d.ts","../../../node_modules/@lynx-js/types/types/common/element/title-bar-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/svg.d.ts","../../../node_modules/@lynx-js/types/types/common/element/refresh.d.ts","../../../node_modules/@lynx-js/types/types/common/element/scroll-coordinator.d.ts","../../../node_modules/@lynx-js/types/types/common/element/viewpager.d.ts","../../../node_modules/@lynx-js/types/types/common/element/blur-view.d.ts","../../../node_modules/@lynx-js/types/types/common/element/webview.d.ts","../../../node_modules/@lynx-js/types/types/common/element/markdown.d.ts","../../../node_modules/@lynx-js/types/types/common/element/video.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/lynx-performance-entry.d.ts","../../../node_modules/@lynx-js/types/types/common/element/frame.d.ts","../../../node_modules/@lynx-js/types/types/common/element/overlay.d.ts","../../../node_modules/@lynx-js/types/types/common/element/element.d.ts","../../../node_modules/@lynx-js/types/types/common/element/methods.d.ts","../../../node_modules/@lynx-js/types/types/common/element/attributes.d.ts","../../../node_modules/@lynx-js/types/types/common/element/index.d.ts","../../../node_modules/@lynx-js/types/types/common/console.d.ts","../../../node_modules/@lynx-js/types/types/common/index.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/event.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/nodes-ref.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/app.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/performance.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/fetch.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/lynx.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/native-modules.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/text-encoder-decoder.d.ts","../../../node_modules/@lynx-js/types/types/background-thread/index.d.ts","../../../node_modules/@lynx-js/types/types/index.d.ts","../../../node_modules/@types/react/jsx-runtime.d.ts","../../../node_modules/@lynx-js/react/runtime/jsx-runtime/index.d.ts","../../sqlite/dist/values/ids.d.ts","../../sqlite/dist/values/int64.d.ts","../../sqlite/dist/values/local-date-time.d.ts","../../sqlite/dist/values/sql-value.d.ts","../../sqlite/dist/codecs/codecs.d.ts","../../foundation/dist/collections.d.ts","../../foundation/dist/culture/digits.d.ts","../../foundation/dist/culture/culture.d.ts","../../foundation/dist/culture/calendar.d.ts","../../foundation/dist/culture/date-format.d.ts","../../foundation/dist/culture/duration.d.ts","../../foundation/dist/culture/numbers.d.ts","../../foundation/dist/culture/strings.d.ts","../../foundation/dist/culture/relative-time.d.ts","../../foundation/dist/culture/index.d.ts","../../foundation/dist/enums/index.d.ts","../../foundation/dist/errors.d.ts","../../foundation/dist/exec/diagnostics.d.ts","../../foundation/dist/services/abort.d.ts","../../foundation/dist/exec/options.d.ts","../../foundation/dist/services/clock.d.ts","../../foundation/dist/exec/trace.d.ts","../../foundation/dist/exec/safe-executor.d.ts","../../foundation/dist/exec/index.d.ts","../../foundation/dist/icons/generated/glyph-svg.d.ts","../../foundation/dist/icons/glyph.d.ts","../../foundation/dist/icons/icon.d.ts","../../foundation/dist/icons/glyph-slots.d.ts","../../foundation/dist/icons/icon-fonts.d.ts","../../foundation/dist/icons/svg.d.ts","../../foundation/dist/icons/index.d.ts","../../foundation/dist/services/preferences.d.ts","../../foundation/dist/services/contracts.d.ts","../../foundation/dist/services/index.d.ts","../../foundation/dist/theme/color.d.ts","../../foundation/dist/tokens/generated/palettes.d.ts","../../foundation/dist/theme/theme.d.ts","../../foundation/dist/theme/control-colors.d.ts","../../foundation/dist/theme/variants.d.ts","../../foundation/dist/theme/index.d.ts","../../foundation/dist/tokens/generated/metrics.d.ts","../../foundation/dist/tokens/layout-metrics.d.ts","../../foundation/dist/tokens/css-vars.d.ts","../../foundation/dist/tokens/index.d.ts","../../foundation/dist/index.d.ts","../../sqlite/dist/driver/types.d.ts","../../sqlite/dist/contract/run-contract.d.ts","../../sqlite/dist/errors.d.ts","../../sqlite/dist/schema/columns.d.ts","../../sqlite/dist/query/expr.d.ts","../../sqlite/dist/schema/policies.d.ts","../../sqlite/dist/schema/entity.d.ts","../../sqlite/dist/query/compile.d.ts","../../sqlite/dist/query/builders.d.ts","../../sqlite/dist/repo/audit.d.ts","../../sqlite/dist/session/ambient.d.ts","../../sqlite/dist/session/locator.d.ts","../../sqlite/dist/session/migrations.d.ts","../../sqlite/dist/session/mutex.d.ts","../../sqlite/dist/session/write-hooks.d.ts","../../sqlite/dist/session/database.d.ts","../../sqlite/dist/session/cache.d.ts","../../sqlite/dist/session/scope.d.ts","../../sqlite/dist/repo/repository.d.ts","../../sqlite/dist/session/schema-setup.d.ts","../../sqlite/dist/index.d.ts","../src/protocol.ts","../src/transport.ts","../src/driver.ts","../src/services.ts","../src/speech.ts","../src/index.ts","../../../node_modules/@lynx-js/react/runtime/lib/runtime-marker.d.ts","../../../node_modules/preact/src/jsx.d.ts","../../../node_modules/preact/src/dom.d.ts","../../../node_modules/preact/src/index.d.ts","../../../node_modules/preact/hooks/src/index.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/hooks/react.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/runwithforce.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/lynx.d.ts","../../../node_modules/preact/compat/src/suspense.d.ts","../../../node_modules/preact/compat/src/index.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/children.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/element.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/portalspending.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/portals.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/lynx/suspense.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/hooks/uselynxglobaleventlistener.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/globalprops.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/initdata.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/background-function/run-on-background.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/snapshot/worklet/call/runonmainthread.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/api/animation/effect.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/api/animation/animation.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/api/element.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/worklet-runtime/bindings/types.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/core/main-thread-ref.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/lynx-api.d.ts","../../../node_modules/@lynx-js/react/runtime/lib/index.d.ts","../../../node_modules/@lynx-js/react/types/react.docs.d.ts","../../../node_modules/@lynx-js/react/types/react.d.ts","../src/media.tsx"],"fileIdsList":[[41,95,96,198,199],[173,174,179,185],[41,174],[41,173,174,179,185],[41,193],[170,173,175,177,179,180,181,183,184,195],[41,185,186,187,188,189,194],[175,176],[173,179],[41,95,198,199],[41,95,173,182,198,199],[173],[190],[192],[191],[41,95,97,197,198,199],[41,175,195,196],[42,85,86,87],[53],[42,77,86,87,88,89,91,92,93],[42,85,86,87,89,90],[85,87],[42,85],[49,77],[43],[44],[51,55],[47],[41,51,55,56,57,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78,79],[47,51,55,77],[47,51,55],[56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78,79,80,81,82],[47,51,55,59],[47,60,63],[46],[48,52,53,94],[44,47,48,49,51,53,54,55,83,84],[44,47],[52,85,94],[45,85],[46,47,55],[45,46,50,51],[49,85],[38,39,40],[41],[171,173,174,178],[171,172],[105],[104],[104,105,106],[104,105,106,107,108,109,110,111],[110],[115,117,119,120],[116],[110,115,116,117,118,119],[115,118],[124],[123],[122,123,124,125,126,127],[103,112,113,114,121,128,131,137,141],[114,116,118,129],[116,118,129,130],[114],[132,134],[132,134,135,136],[132,133],[113,132,133],[133,138,139],[133,138,139,140],[97,163,164,165],[97,164,165,166,167,168],[95,97,142,164,198],[97],[97,142,164],[97,163,164],[98,99,100,101],[101,143],[101,142],[142],[98,99,100,101,102,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162],[101,102,147,149,150],[101,102,147],[101,102,146],[98,100,149],[100,101,142,143,147,148,149,151,157,158,159,160,163],[99,100,102],[146,147,148],[147],[98,100,142],[148,149,158],[98,100,102,142,143,149,151,153,154,155,156,157,159],[142,149],[102,143,149,158],[143,148,149,151,157,158,159,161],[142,145,147,149],[99]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"035312d4945d13efa134ae482f6dc56a1a9346f7ac3be7ccbad5741058ce87f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"07b03f752ae52a7130e06c5a8399d3a0dde07a1a634f8430b80cd6236c56b5c8","impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"acbac4ca6cd4b2b459debc4a274535775cb6278a8315be383fafa623ab78f18e","impliedFormat":1},{"version":"e421d0b097c78304a2597c1f33da586630e1dc665ae381c0c36e5ebc4aaf4566","impliedFormat":1},{"version":"adf624c89a0d509a789f3c0bf522969d2c47033dbeb50920b37cd89be475a65e","impliedFormat":1},{"version":"8ff8dade82d215fba372ec8ca795cb433997a41287e049acf294dd50cba08cc4","impliedFormat":1},{"version":"b32b532dcbe0a91d71fd94cb780e94bdfdce10be21608d914c29fb4b8939b24a","impliedFormat":1},{"version":"eb2b64881998b562a4fe9330e55aa2466cd3a41a1a57e93feac6555218cec06f","impliedFormat":1},{"version":"6db1694d205177322d792d924335b046b80607445a45c0d2de1fcffd190b48c0","impliedFormat":1},{"version":"2b47193137d251e8a5d4cea2d67fe85a68199795ba019e41d635f7cf5f8a35c5","impliedFormat":1},{"version":"f7e5c3960dd9df65d83408b9be446f7119fa1db1dd8266dd343349d90c3bf2ce","impliedFormat":1},{"version":"09c6491ed74af89a4155feafedecaf77780f5751c66d4b65b18d30fc0e053a75","impliedFormat":1},{"version":"188b01044640e5ef65f6edf0dd6e6454f02dd19f4ead66b9e03ebe26cc7298ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"c2be64f223b024c0b70c5096a8c361c9e11c7644f3bd8325d19c2720ee7087cd","impliedFormat":1},{"version":"5bf51107315834a209b08395b141e262b7d143d14f6b4e4d403d8e020cef7e32","impliedFormat":1},{"version":"db0dcbe48d5cb38315083b412c8ab6995b0d42dc73b286833e296827feb0e5b4","impliedFormat":1},{"version":"b3e4a49a3ba19463662e7b821544948b953d2f6708370d42406bda558084000c","impliedFormat":1},{"version":"90bebc017d1c8408719f5a056813cce04e171a53469c263a136c35076121bab0","impliedFormat":1},{"version":"0675f9dddf11b81ec71825d5d97fdd789e445003506255513e0fc829ebfb795a","impliedFormat":1},{"version":"32d1e153cac16ca3a3f5f6b68fae76cddcda509950fa00d038c465776359db0c","impliedFormat":1},{"version":"0d85d0fa55dd433acf924675d7e976c025c8521c91a76079844cd15e52855ccf","impliedFormat":1},{"version":"89da6ea3ee9735e712691227b0e5ee74381779f9ad8b0f4fb7ced0247b16735a","impliedFormat":1},{"version":"37f90d8b4384dae49b873e620b7fff15655c706105104809114ba98df6373124","impliedFormat":1},{"version":"7618f7fdf0abf7f712cefe766ac1ab7fcd1f8e753c513e57d3ada9ada3a57257","impliedFormat":1},{"version":"759df9936f492afeacebec2cea4efafdb647951e0e5edfc4c677ce2441eac9d0","impliedFormat":1},{"version":"8d8848528b40a84ab42200e89d08f3d5cd83efa275de1bb70ae38cb9e6fd5911","impliedFormat":1},{"version":"0e323630cbfda771430e2720f6a2f02f257becd8fb9722aa975ae773fb572210","impliedFormat":1},{"version":"56dbc770513baae28f7cfbadeba5078bb13a37a13132a5292e98a8b103312b98","impliedFormat":1},{"version":"84ff906032fe12e816bfb7441cee6726243e5a7316c4f2d6b0a6c149f1a91a16","impliedFormat":1},{"version":"a8641f25f667160f356c504936576de22899e50ea575d7a4da47fe3b3704dd93","impliedFormat":1},{"version":"dcbbe1fb0f2c0efc12e29db8bbccb5b82513384d01d7a55342065cb0611da272","impliedFormat":1},{"version":"af209189a194cf5ad1f7b22dd680b52843fec2e30f1283be20b2977872fd4424","impliedFormat":1},{"version":"14745f699217e89ff1034f7be978bc28c195472a597b5f36442ef83d954d47b0","impliedFormat":1},{"version":"10c1feac0328f8f90a81f348b7f3c6d3c3b3454e46fc045ba1a706406c58fd8e","impliedFormat":1},{"version":"f64cd565aca17df45f4666473da75e4ce51a2610e2ed1c31198e9f9325747a24","impliedFormat":1},{"version":"e415a17ab6a413d6be640457231e045541405eab1f0f370c7dd1e5567aa25999","impliedFormat":1},{"version":"8c03a41d6dc701b6648db83d71a92dc27147d7677ab5d70f32675e7e37b3795a","impliedFormat":1},{"version":"09c18bc60888c58e8f4568b6ca973af72613a8a01e7b213aab778e910ae18b2f","impliedFormat":1},{"version":"5258d7af58615ea380d959cbcb6d83cb7b9841b8c8267f5a0fcb36c092dadbdb","impliedFormat":1},{"version":"b2d74af681f440a07e714ae9a33e3ea49c79870b9674058114c0404d2aa2f190","impliedFormat":1},{"version":"24f31e43eb3505e5d2946315e7b8ee8b426dfbe92c3031e435a4eb2d9dd8d69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"679f7b45a77210e6dd0d72a4b81fd177868d2eacfd8ee6919ce6babd7512562d","impliedFormat":1},{"version":"c669ee7ba01fa6a60b17c3535f96b65fa82dfd2a475a8760364f2f3952f9bcbd","impliedFormat":1},{"version":"a8b121f6a75d603075e62793ff0c109112e882dd6ca2b70bdccbd8d8f753429b","impliedFormat":1},{"version":"f378d7ed5e3ecbe382ade55127a9c98e826c76f786e06effad6fde91a7023d55","impliedFormat":1},{"version":"4e3e9539df72b3bfcc56fa13140070020dac72f1eff39237b11253482cb99847","impliedFormat":1},{"version":"5a47b3a2bbe2c9b015fe356462afe0abe391c592fffbe277126e2415e0811967","impliedFormat":1},{"version":"a3e797c70a421cda37cdea4349dced37dceb1611669652d9c4c5523467a55cbf","impliedFormat":1},{"version":"9164e652ff4e7cbd993ca20acd0e2ad7e1cb775a7aefc577b506cf588763ec42","impliedFormat":1},{"version":"e52840670587e82e129c9bfc6a2f42d9c2f2e1fd6ce176fea998383a8c941ea5","impliedFormat":1},{"version":"31ca1ee726f5d7c7709913b98be76fc40fdfaaca6ad7fafc222108981e11227c","impliedFormat":1},{"version":"556db73da59f5162cdf5c7ea1bc3b063b6ccb758078ef6517ad6f6e4ae7b199a","impliedFormat":1},{"version":"0a2c8ef08611f5a5f711c7b10ba70d10dc1c6af0c9dba8168cbbf34911b74188","impliedFormat":1},{"version":"1d6ef45145a9939a43062fe18188d4f7bdfdf4547978e1f6b7c9089fe53e81e5","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"509a86836776d5c821901abc16a2d21de674d2c8943ceb8d018049bf324bc56c","impliedFormat":99},"bbe47f7ebb177015803b69bad47ecf0e5987449cae5dd498664a9e4885d7cdff","4f260a074507a0065f3cd71d1adc1b361f5337b3db9e8d01589d5872e9387a4a","7674dcae15d29bcba5a7e8c26defdb06bf75297bfaa3025037bcc1e4df7b0ae1","97ff954e351fb81e182a8bc0d7c6e3625054e2c37ea5df0ad0ea12952bd5d9c0","c65ecf314f579465ceba2eb45ec7529f977a7809480ff6119c7c129022472cca","d533d1fe3018752aa47ee74ae5dbdca34377441b891176ad99bd33366a64372f","44b82e4f46178400732ea809a906f7ffb9dd38efab331ca23e7ca4586bf903ef","d3dcff003bac57338c3e60be409d0ff167ec1ff513539a5534c7679332dbc992","16d64c89cec74fa23e8cee7c72acc7549f117dcf7845051870c40366c7522d09","11f9f682c02d51de68eed569f8de1e91c56df296a78f3a6c520b93d52aac2308","28b43630d8d29a300e1e5b0f5efb04c8f994d372fff1b653ce8bb70d4e011e1a","b06c48902c3d127098839c1a6500f41d3e21b2f07f277ba7de23ec730df7275d","94659c94bb0ae17efde21aaf59f2beb05d286bea13f2d3b2b288a6df4faeac18","a7a0e658ca429cfb5268d4bf2e2e6e9fe871ffd06b6588d65424ba4eba35338f","ab4c80cb9cf211a7cd100429cb4a823c5bd9f3618bf981e6504c6606abf08656","e60dd3f69310681e28813b910da7d57f5cf0078feccfd683d22a29b45bb7a035","ccd708c3fff99b4ec315e14315dce6b9e85f4c96d10131e9fd219edb6efbdb26","abc924fce33b86b9f8588de3a5be04c609fafa6cb1dc42629b3e9e3e18f7d018","f919e3a8b2d274b631ee4fee0c50eba1d3f39ceaccba04dff915e9f61e9f153c","3ae17ae844491c7326d070c3e70a94a9239394e7a1e84eb203eb1d57470e752e","d1b2970d348eb9f89ef0f0c6730d27e9331067a28f21c8bd667ba1138d5d3e93","b2c4833e6308888c3947953770b3343deaf4276c803bb36148991a3fb90b4f6a","41b7c8204ea79a93e380a228f5c744e9c9a80183133ac62633a4c76e3fdbd7db","d0a441df587b0632c16a813117f110574d903ddd0bc4d28599cc82ff8af7c094","b24ac81f4fcff56ed9827736abcf2f92ea5f86e16d66eb2ee3ccfa0bb8143bc9","068309ff581d08c276c4a772ddf3ab9c8090e591fc9917fdc6cdffc12c95a5bf","5c1d368a451520260ebb6c06121201f18abf86d80540290df6e424d372c5d0ed","bb3ccaacf5c19a7170939b7f735c6a94537fd95ad16b4247a6ad572b23183e74","2c8b86d9d29c4ea62762c3815ffe4fdb0c5dbc0dd096b9703236010f4a17c255","9528dc401d1a2502393af70423c895c3df61ef62240c0dca429a7cd1bd535b82","eebf270ff516980678bf039e03e18a9461f196aee2825d4d65f7d8a1fa362bff","ee4e73f46ce2f6517e82434bd9fc63c8b6b2179d37d74525899f124a76d06669","b04de3a3cd10559130d898b36da5612fda5db2c31c95b502077cad9fe538ed6c","bc4c3476708a74ae09c06bcdbb9765baaa135592e1cf6e25f2ee9a942c6cd5ec","29e6e980f179ac2981d68954462dfd4a4545f73c021f6a4c8a5f442c0e16e56c","faa64d270fa523f80fd31bc7340ee7f6a21632c2ea0cea6535bf5a34bcc6adf7","cbd4ce7ee090549d836cbffac2e76a192ac5b1c5f15bcbe29c06d32dc7006f34","ea5a5d5873c239b97d846fb8c78437e08ffd731924764f746c0ebcb7731d7648","fb6b5b4592e0eca5b8dc2507432e621a18c16d488ae8a610e4d1ddba1edff667","df85ab12f80aced067959d43bd7744017fccb1eb95adcfa343f16cba7c9ef670","613df14d2c8c0ba78286705c4ed01ec701ed03189ca3803dd69bc7086b9c02ff","298f8d2584216932ea238927177ef343d0b8da735eb40a5ba96b1f92e3675e33","c8082c78975419ed5a9f7daa655643425cdd98fee91bb82fd92d25f908c78465","3d1717d66cd1094139f0c1f0ed07ec56d91e4f5cd27e2b6309b6f195491e7f4a","6f1302be2fa00d8a64e3bd48b4ccdf5d77a402441d7728d48c2ecee706c79127","efb30c7f5b1e7e2c8941c95355161907fdd6f3f28941cceacf81edc11db89bad","37700ef2907cfee5d680c1ceb83ba8355223f375c8093f523b9ee2ce108c1044","a244408662b901d15567a5bcff4b29cd13a2a6c9bb2c27329eec616c48c8f144","cf4c01af6890db612fcb2eda144fa7a947a0fd005052f41485459d195cd7396d","770c7abd7f2b17ff392e7179ad9b14518bc284f18834ec6efc00b4c62b8a4846","f29c840652a2d49e5b24debe0c06f9dd6ca15f96421cbac112ba982258b16a94","44a3d19d7e208acb0261a1f718c047854d0794683a0d5c2193522d310e36bdec","090ce3b05198a4c287542354fcedbfd570d87b2f32d0363cab0eb48989aecd2e","ad4b4e5abb5f01f966304dfa08c347137a3fe77329c7ae6c17c824c3d4babf33","b78cb18aa49943470bbab837676a7c35d1dfbfae7241c144f1d7fbd183989022","024aeda8ac048f7b98839a2b806e2034fe2fa1db797418cf8923a06fb32358c8","54f9c37e150e434622cff5d71fb87237c48497141cb379fc1ab4d019a4a43e2e","0d912ede0e33119759d7a3eee223fcbb83f1ca4c229719c62d54aa071487ceca","6f5878e8666a8abbb560dcc15b19c95ac5b0f4f85aabab2e804abb6a145030e4","ac683a7d8aa2506a3d5a3243ed94348867c85307ba54e46e6dd4a440b6a3012d","cf08b5dd44744b109ed2ddb8968bc8cbd4c6192b74180e5fb0fb1671f38d5dbc","efa3706b88ec75d05bfa7fa44d39af58305b7affda1b3789cf6d3688bb83070b","0a589d620f1d4719925c345e3c6e17dde3137765ea8db58c5a790f52ccdc58a6","8a3a12f093b91e0e3ca5f9909fb0cbaed59e2d864f04f103487f8f87095dfbfb","07d6a4c577cad80d9c1a2cf5d0e0ddae1aafadb264f5e41396999edd5963c94d","ba23c12c72c1523b39716c37b20fddaaab05f3f82139c8cdc33d552c3de70684",{"version":"7b7770361f404e9b167bce0ee92a608d8d14cb0b2f747ca9b300998db438a0fb","signature":"81d5aa9d15ee1ca18b073ecd13aa979f24d9100c2842f9e254d27992e014dd8a"},{"version":"b196a892a7087bc69d5e14a1647aaf5acfcdf995c1935a55afe405253c153b4c","signature":"f63a428eadbfdbc8c9137c4bdaa77a23988f7e82d1b01b5ef7d13e2f37d3d044"},{"version":"bb4df5f784c131c8fc70cfb1868ab99b883347d48c7260450d3c56958a996d60","signature":"b2b0e3e6fd8b425abfb54a11133c8b9abfc186d61ac86adc8deaba0b8c2f4e8f"},{"version":"faf3b4d50980988d8870ec5a63705d314d100f0338e3c9978362acea7a50e825","signature":"bd3f683b47db8bdf2c50f5c3becea6fd0610f1e70ae35e0a2d0605c7200b6719"},{"version":"a6ed2271e6d0d4530f902777df5c4123b86c872f50ef6796ec63b77f56ac11b9","signature":"46ec089d57ddc32a6869f7cdfb6a81e37a8b93eb3d4c15798ea7c2de2ff947d4"},{"version":"a2199b85e9360ee3c5f384b56666662168daecca269293ab815da773e1e6391d","signature":"f7e148507097b2e8e1703df7b0b9acb7b65afed60aa3addd303f0cc97dab640c"},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"8a2ef120c4da7aab664148ed8d283aa0b98df4d5f15c570d830c8998ef05718b","impliedFormat":1},{"version":"4433d18f82991634feae5150a68f9b30f5b05b55416af8ff9f7251fb29431ed5","impliedFormat":1},{"version":"cc5d0b221824b7d8597e8a2bbdad2383af877eb564eaca392992049839e88c9e","impliedFormat":1},{"version":"21898d939444825cee1232af435330610b09171bea22a2f892cf2058d764b63d","impliedFormat":1},{"version":"6ec5f3b496e6f10c4f0a079e3b1102acef9c0bf5e3464909fa6e88b16a26480f","impliedFormat":99},{"version":"d9d320cf31f6d63659484f6c9ca4db4ae673daefa65118dd8589838925ff1397","impliedFormat":99},{"version":"027cf2216d065a97bf5a8ea126b3ea2734fab6cfe32adaff81ab4e94a1b51bbe","impliedFormat":99},{"version":"f6e6313fad233c5141220f7d25eae120cdd6e5079fbe0aba56821a1e99d05df8","impliedFormat":1},{"version":"9534c35b4577c193e499178deb47419fdadddd5e53af5ec8cb88218848013f65","impliedFormat":1},{"version":"804dca323c25404588a6e71d76e52eb09806f05e6013f0be1fcea1fb7eed5fa3","impliedFormat":99},{"version":"aeba529dfa69caa0efcdee1f1455540250d026522e5551b20b8a7ba9eebc707a","impliedFormat":99},{"version":"dfe6945467765f8e7843442a9dfbcf6b5526b6465b07b4c75a54a750329b5f17","impliedFormat":99},{"version":"7f9f6c9fe0e48c401d855d849e28112ffe2425569eca01b08b8c6112b8200695","impliedFormat":99},{"version":"68fcdc663627d12d336b420b19b3e54258844d0cbca0879f711c22aafd853352","impliedFormat":99},{"version":"6e97a7762ca61b836f275a14bf22a1696559bfa01bd6176df9498e717b5ff298","impliedFormat":99},{"version":"86535783bd695ee43e1a403e8cc50b1d643d3741df8074d30fbfae3b0438f996","impliedFormat":99},{"version":"7c94c072f4eef88b15710e2a6dd17036bfd943b390976aecc94af63df2f8a287","impliedFormat":99},{"version":"7e8a2efc54958a4ea7d678671d8703b00ae48a519d0f795a8f44f605abdba3d5","impliedFormat":99},{"version":"1409a9680115403cac91934df0062646e0a77f1b220b60faec5fe26cd775d9ca","impliedFormat":99},{"version":"335226d599a9382c9bea07d37e23bf998c1022c0f67e4d6d2b69633de6ac118f","impliedFormat":99},{"version":"ae430fd9bac320e71c3fe9299d90dcf67555d9a4f97ecaa35947b430ba8648ea","impliedFormat":99},{"version":"9061ff14146280f47d740b344ddd641c16df526ecaa868c348852277a9fb8686","impliedFormat":99},{"version":"7fa70acc5eed701b456f21e33f8f289e9e0e77fdd1f952385c33d6b9ecfb2021","impliedFormat":99},{"version":"16c6bbe197b6bf88db162c620e37218fab4c1c32892132d4aa33e461ae2b990a","impliedFormat":99},{"version":"9778598e1d86d1e544ab77fbc0bb5199d2fbb08ed386b3520732246b90005545","impliedFormat":99},{"version":"feed66ae8815d1981ad575482766fb9a82385e75cce35ae2f13be58e50c4349f","impliedFormat":99},{"version":"7e500d1f51b14c04c6dce8dcbadc5c48f4bec6fca0f321397c165868834916a2","affectsGlobalScope":true,"impliedFormat":99},{"version":"20c1041fbd4f1537686af4b707872b87c90a22201f8979e5def4554d28b46a5b","impliedFormat":99},{"version":"57ff3023920f09ea08ee1fb662518ff60312e81781e03c4e3b50cef3322143be","signature":"495d5d4a044fa18020972e7146c7416e467a364a9b23de05b096335d212ac9bb"}],"root":[[164,169],199],"options":{"composite":true,"declaration":true,"declarationDir":"./","declarationMap":true,"emitDeclarationOnly":true,"exactOptionalPropertyTypes":true,"jsx":4,"jsxImportSource":"@lynx-js/react","module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":6,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[97,1],[186,2],[175,3],[187,4],[194,5],[196,6],[195,7],[177,8],[180,9],[181,10],[183,11],[184,12],[191,13],[190,14],[192,15],[193,14],[198,16],[197,17],[88,18],[90,19],[94,20],[91,21],[92,22],[87,23],[89,24],[44,25],[82,26],[73,27],[59,28],[56,27],[80,29],[57,27],[78,30],[58,31],[83,32],[66,31],[61,27],[60,33],[75,31],[81,34],[79,31],[62,27],[70,31],[71,31],[63,33],[69,31],[64,31],[67,31],[68,27],[76,31],[65,27],[72,31],[74,31],[47,35],[54,36],[85,37],[55,38],[95,39],[45,35],[46,40],[51,41],[52,42],[50,43],[41,44],[96,45],[179,46],[178,12],[174,12],[172,12],[173,47],[171,12],[106,48],[105,49],[107,50],[112,51],[109,49],[111,52],[110,48],[121,53],[117,54],[120,55],[119,56],[125,57],[126,57],[124,58],[128,59],[127,58],[142,60],[130,61],[131,62],[132,63],[135,64],[137,65],[134,66],[136,67],[140,68],[141,69],[166,70],[169,71],[199,72],[164,73],[167,74],[168,74],[165,75],[102,76],[144,77],[143,78],[145,79],[163,80],[151,81],[150,82],[147,83],[152,84],[161,85],[146,86],[149,87],[148,88],[153,89],[159,90],[158,91],[155,92],[162,93],[160,94],[157,95],[101,96]],"latestChangedDtsFile":"./media.d.ts","version":"5.9.3"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { createNativeSqliteDriver, type G9NativeDriverOptions, nativeSqliteModule } from './driver.js';
2
2
  export type * from './protocol.js';
3
3
  export { createNativeHostServices, type G9InsetsSubscriber, type G9NativeHostOptions, type G9NativeServices, lynxInsetsEvents, nativeHostModule, } from './services.js';
4
+ export { createNativeSpeechToText, type G9NativeSpeechOptions, type G9SpeechEvents, lynxSpeechEvents, nativeSpeechModule, } from './speech.js';
4
5
  export { decodeRunValue, toArrayBuffer } from './transport.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACpG,mBAAmB,YAAY,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACpG,mBAAmB,YAAY,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export { createNativeSqliteDriver, nativeSqliteModule } from "./driver.js";
2
2
  export { createNativeHostServices, lynxInsetsEvents, nativeHostModule } from "./services.js";
3
+ export { createNativeSpeechToText, lynxSpeechEvents, nativeSpeechModule } from "./speech.js";
3
4
  export { decodeRunValue, toArrayBuffer } from "./transport.js";
@@ -111,5 +111,19 @@ export interface G9HostNativeModule {
111
111
  appDataDirectory(callback: Reply<string>): void;
112
112
  assetUri(path: string, callback: Reply<string>): void;
113
113
  }
114
+ /** What `G9SpeechModule.listen` settles with (the `G9SpeechToTextResult` statuses). */
115
+ export type G9NativeSpeechResult = {
116
+ readonly status: 'recognized';
117
+ readonly text: string;
118
+ } | {
119
+ readonly status: 'no-match' | 'cancelled' | 'denied';
120
+ };
121
+ /** `NativeModules.G9SpeechModule` (dictation). Partial results: the global event `g9:speech`, `{"session","text"}`. */
122
+ export interface G9SpeechNativeModule {
123
+ isAvailable(locale: string, callback: Reply<boolean>): void;
124
+ requestPermission(callback: Reply<string>): void;
125
+ listen(session: string, locale: string, callback: Reply<G9NativeSpeechResult>): void;
126
+ cancel(session: string): void;
127
+ }
114
128
  export {};
115
129
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type G9SpeechToText } from '@g9tm/lynxcontrols-foundation';
2
+ import type { G9SpeechNativeModule } from './protocol.js';
3
+ /** `NativeModules.G9SpeechModule`, or `null` where the native library is not linked. */
4
+ export declare function nativeSpeechModule(): G9SpeechNativeModule | null;
5
+ /** Subscribes to the partial results (`{ session, text }`); returns the unsubscribe function. */
6
+ export type G9SpeechEvents = (listener: (event: {
7
+ readonly session: string;
8
+ readonly text: string;
9
+ }) => void) => () => void;
10
+ /** The default partial-result source: the module's `g9:speech` global event (one JSON argument). */
11
+ export declare function lynxSpeechEvents(): G9SpeechEvents;
12
+ /** Options of {@link createNativeSpeechToText}. */
13
+ export interface G9NativeSpeechOptions {
14
+ /** The module (default: `NativeModules.G9SpeechModule`). Tests pass a fake. */
15
+ readonly module?: G9SpeechNativeModule;
16
+ /** Where partial results come from (default: {@link lynxSpeechEvents}). */
17
+ readonly events?: G9SpeechEvents;
18
+ }
19
+ /**
20
+ * The speech capability for `G9Provider` (`capabilities.speech`), or `null` where `G9SpeechModule` is not linked — the
21
+ * fields then hide their microphone.
22
+ */
23
+ export declare function createNativeSpeechToText(options?: G9NativeSpeechOptions): G9SpeechToText | null;
24
+ //# sourceMappingURL=speech.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../src/speech.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,cAAc,EAGpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAoB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAYzE,wFAAwF;AACxF,wBAAgB,kBAAkB,IAAI,oBAAoB,GAAG,IAAI,CAMhE;AAED,iGAAiG;AACjG,MAAM,MAAM,cAAc,GAAG,CAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,KAC3E,MAAM,IAAI,CAAC;AAEhB,oGAAoG;AACpG,wBAAgB,gBAAgB,IAAI,cAAc,CAgBjD;AAED,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;CAClC;AAaD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,GAAG,IAAI,CAgEnG"}
package/dist/speech.js ADDED
@@ -0,0 +1,114 @@
1
+ import { G9Error } from "@g9tm/lynxcontrols-foundation";
2
+ function nativeSpeechModule() {
3
+ try {
4
+ var _ref;
5
+ return null != (_ref = "u" < typeof NativeModules ? void 0 : null == NativeModules ? void 0 : NativeModules.G9SpeechModule) ? _ref : null;
6
+ } catch {
7
+ return null;
8
+ }
9
+ }
10
+ function lynxSpeechEvents() {
11
+ return (listener)=>{
12
+ var _lynx_getJSModule;
13
+ const target = "u" < typeof lynx ? void 0 : null == lynx ? void 0 : null == (_lynx_getJSModule = lynx.getJSModule) ? void 0 : _lynx_getJSModule.call(lynx, 'GlobalEventEmitter');
14
+ if (!target) return ()=>void 0;
15
+ const handler = (raw)=>{
16
+ try {
17
+ const event = 'string' == typeof raw ? JSON.parse(raw) : raw;
18
+ if ('string' == typeof (null == event ? void 0 : event.session) && 'string' == typeof event.text) listener({
19
+ session: event.session,
20
+ text: event.text
21
+ });
22
+ } catch {}
23
+ };
24
+ target.addListener('g9:speech', handler);
25
+ return ()=>target.removeListener('g9:speech', handler);
26
+ };
27
+ }
28
+ function unwrap(envelope) {
29
+ if (null == envelope ? void 0 : envelope.ok) return envelope.value;
30
+ const e = envelope && !envelope.ok ? envelope.error : {
31
+ code: 'speech-recognition',
32
+ message: 'The native module sent no reply.'
33
+ };
34
+ throw new G9Error(e.code, e.message);
35
+ }
36
+ const PERMISSIONS = new Set([
37
+ 'granted',
38
+ 'denied',
39
+ 'restricted'
40
+ ]);
41
+ function createNativeSpeechToText(options = {}) {
42
+ var _options_module, _options_events;
43
+ const native = null != (_options_module = options.module) ? _options_module : nativeSpeechModule();
44
+ if (!native) return null;
45
+ const events = null != (_options_events = options.events) ? _options_events : lynxSpeechEvents();
46
+ let next = 0;
47
+ return {
48
+ isAvailable: (locale)=>new Promise((resolve)=>{
49
+ native.isAvailable(locale, (reply)=>{
50
+ try {
51
+ resolve(true === unwrap(reply));
52
+ } catch {
53
+ resolve(false);
54
+ }
55
+ });
56
+ }),
57
+ requestPermission: ()=>new Promise((resolve, reject)=>{
58
+ native.requestPermission((reply)=>{
59
+ try {
60
+ const value = unwrap(reply);
61
+ resolve(PERMISSIONS.has(value) ? value : 'denied');
62
+ } catch (error) {
63
+ reject(error);
64
+ }
65
+ });
66
+ }),
67
+ listen: (opts)=>new Promise((resolve, reject)=>{
68
+ var _opts_signal, _opts_signal1;
69
+ const session = `s${++next}`;
70
+ let settled = false;
71
+ const off = events((e)=>{
72
+ var _opts_onPartialResult;
73
+ if (!settled && e.session === session) null == (_opts_onPartialResult = opts.onPartialResult) || _opts_onPartialResult.call(opts, e.text);
74
+ });
75
+ const settle = (result, error)=>{
76
+ var _opts_signal;
77
+ if (settled) return;
78
+ settled = true;
79
+ off();
80
+ null == (_opts_signal = opts.signal) || _opts_signal.removeEventListener('abort', onAbort);
81
+ if (result) resolve(result);
82
+ else reject(error);
83
+ };
84
+ const onAbort = ()=>{
85
+ native.cancel(session);
86
+ settle({
87
+ status: 'cancelled'
88
+ });
89
+ };
90
+ if (null == (_opts_signal = opts.signal) ? void 0 : _opts_signal.aborted) return settle({
91
+ status: 'cancelled'
92
+ });
93
+ null == (_opts_signal1 = opts.signal) || _opts_signal1.addEventListener('abort', onAbort);
94
+ native.listen(session, opts.locale, (reply)=>{
95
+ try {
96
+ var _value_text;
97
+ const value = unwrap(reply);
98
+ if ((null == value ? void 0 : value.status) === 'recognized') settle({
99
+ status: 'recognized',
100
+ text: String(null != (_value_text = value.text) ? _value_text : '')
101
+ });
102
+ else (null == value ? void 0 : value.status) === 'no-match' || (null == value ? void 0 : value.status) === 'denied' || (null == value ? void 0 : value.status) === 'cancelled' ? settle({
103
+ status: value.status
104
+ }) : settle(null, new G9Error('speech-recognition', `Unknown dictation status "${String(null == value ? void 0 : value.status)}".`));
105
+ } catch (error) {
106
+ settle(null, error);
107
+ }
108
+ });
109
+ })
110
+ };
111
+ }
112
+ export { createNativeSpeechToText, lynxSpeechEvents, nativeSpeechModule };
113
+
114
+ //# sourceMappingURL=speech.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech.js","sources":["../src/speech.ts"],"sourcesContent":["// `G9SpeechToText` over `NativeModules.G9SpeechModule` (MAUI `IG9SpeechToText`): what the fields' dictation\n// (`controls/fields/dictation.ts`) listens through. One session at a time on the native side; this side numbers the\n// sessions, routes the `g9:speech` partial events to the session that asked, turns an abort into the native cancel, and\n// settles each `listen` exactly once — a reply after an abort, or a second reply, is dropped.\nimport {\n G9Error,\n type G9PermissionStatus,\n type G9SpeechToText,\n type G9SpeechToTextOptions,\n type G9SpeechToTextResult,\n} from '@g9tm/lynxcontrols-foundation';\nimport type { G9NativeEnvelope, G9SpeechNativeModule } from './protocol';\n\ndeclare const NativeModules: { G9SpeechModule?: G9SpeechNativeModule } | undefined;\ndeclare const lynx:\n | {\n getJSModule?(name: string): {\n addListener(name: string, listener: (...args: never[]) => void): void;\n removeListener(name: string, listener: (...args: never[]) => void): void;\n };\n }\n | undefined;\n\n/** `NativeModules.G9SpeechModule`, or `null` where the native library is not linked. */\nexport function nativeSpeechModule(): G9SpeechNativeModule | null {\n try {\n return (typeof NativeModules === 'undefined' ? undefined : NativeModules?.G9SpeechModule) ?? null;\n } catch {\n return null;\n }\n}\n\n/** Subscribes to the partial results (`{ session, text }`); returns the unsubscribe function. */\nexport type G9SpeechEvents = (\n listener: (event: { readonly session: string; readonly text: string }) => void,\n) => () => void;\n\n/** The default partial-result source: the module's `g9:speech` global event (one JSON argument). */\nexport function lynxSpeechEvents(): G9SpeechEvents {\n return (listener) => {\n const target = typeof lynx === 'undefined' ? undefined : lynx?.getJSModule?.('GlobalEventEmitter');\n if (!target) return () => undefined;\n const handler = ((raw: unknown) => {\n try {\n const event = (typeof raw === 'string' ? JSON.parse(raw) : raw) as { session?: unknown; text?: unknown };\n if (typeof event?.session === 'string' && typeof event.text === 'string')\n listener({ session: event.session, text: event.text });\n } catch {\n // not JSON: not ours\n }\n }) as unknown as (...args: never[]) => void;\n target.addListener('g9:speech', handler);\n return () => target.removeListener('g9:speech', handler);\n };\n}\n\n/** Options of {@link createNativeSpeechToText}. */\nexport interface G9NativeSpeechOptions {\n /** The module (default: `NativeModules.G9SpeechModule`). Tests pass a fake. */\n readonly module?: G9SpeechNativeModule;\n /** Where partial results come from (default: {@link lynxSpeechEvents}). */\n readonly events?: G9SpeechEvents;\n}\n\nfunction unwrap<T>(envelope: G9NativeEnvelope<T> | undefined): T {\n if (envelope?.ok) return envelope.value;\n const e =\n envelope && !envelope.ok\n ? envelope.error\n : { code: 'speech-recognition', message: 'The native module sent no reply.' };\n throw new G9Error(e.code, e.message);\n}\n\nconst PERMISSIONS: ReadonlySet<string> = new Set(['granted', 'denied', 'restricted']);\n\n/**\n * The speech capability for `G9Provider` (`capabilities.speech`), or `null` where `G9SpeechModule` is not linked — the\n * fields then hide their microphone.\n */\nexport function createNativeSpeechToText(options: G9NativeSpeechOptions = {}): G9SpeechToText | null {\n const native = options.module ?? nativeSpeechModule();\n if (!native) return null;\n const events = options.events ?? lynxSpeechEvents();\n let next = 0;\n return {\n isAvailable: (locale) =>\n new Promise<boolean>((resolve) => {\n native.isAvailable(locale, (reply) => {\n try {\n resolve(unwrap<boolean>(reply) === true);\n } catch {\n resolve(false);\n }\n });\n }),\n requestPermission: () =>\n new Promise<G9PermissionStatus>((resolve, reject) => {\n native.requestPermission((reply) => {\n try {\n const value = unwrap<string>(reply);\n resolve(PERMISSIONS.has(value) ? (value as G9PermissionStatus) : 'denied');\n } catch (error) {\n reject(error);\n }\n });\n }),\n listen: (opts: G9SpeechToTextOptions) =>\n new Promise<G9SpeechToTextResult>((resolve, reject) => {\n const session = `s${++next}`;\n let settled = false;\n const off = events((e) => {\n if (!settled && e.session === session) opts.onPartialResult?.(e.text);\n });\n const settle = (result: G9SpeechToTextResult | null, error?: unknown) => {\n if (settled) return;\n settled = true;\n off();\n opts.signal?.removeEventListener('abort', onAbort);\n if (result) resolve(result);\n else reject(error);\n };\n const onAbort = () => {\n native.cancel(session);\n settle({ status: 'cancelled' });\n };\n if (opts.signal?.aborted) return settle({ status: 'cancelled' }); // never started: nothing to cancel natively\n opts.signal?.addEventListener('abort', onAbort);\n native.listen(session, opts.locale, (reply) => {\n try {\n const value = unwrap<{ status?: string; text?: string }>(\n reply as G9NativeEnvelope<{ status?: string; text?: string }>,\n );\n if (value?.status === 'recognized') settle({ status: 'recognized', text: String(value.text ?? '') });\n else if (value?.status === 'no-match' || value?.status === 'denied' || value?.status === 'cancelled')\n settle({ status: value.status });\n else\n settle(null, new G9Error('speech-recognition', `Unknown dictation status \"${String(value?.status)}\".`));\n } catch (error) {\n settle(null, error);\n }\n });\n }),\n };\n}\n"],"names":["nativeSpeechModule","_ref","NativeModules","undefined","lynxSpeechEvents","listener","lynx","target","handler","raw","event","JSON","unwrap","envelope","e","G9Error","PERMISSIONS","Set","createNativeSpeechToText","options","_options_module","_options_events","native","events","next","locale","Promise","resolve","reply","reject","value","error","opts","_opts_signal","_opts_signal1","session","settled","off","settle","result","onAbort","_value_text","String"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ // Generated by @lynx-js/autolink-codegen. Do not edit.
2
+
3
+ const ADDON_NAME = "G9SpeechModule";
4
+
5
+ export interface G9SpeechModuleSpec {
6
+ isAvailable(locale: string, callback: (reply: Record<string, unknown>) => void): void;
7
+ requestPermission(callback: (reply: Record<string, unknown>) => void): void;
8
+ listen(session: string, locale: string, callback: (reply: Record<string, unknown>) => void): void;
9
+ cancel(session: string): void;
10
+ }
11
+
12
+ type AddonExports = Record<string, unknown>;
13
+
14
+ declare let NativeModules: Record<string, unknown>;
15
+
16
+ declare global {
17
+ interface LynxNapiLoader {
18
+ load(moduleName: string): AddonExports | null | undefined;
19
+ }
20
+
21
+ // eslint-disable-next-line no-var
22
+ var __lynxNapiLoader: LynxNapiLoader | undefined;
23
+
24
+ function getNapiLoader(): LynxNapiLoader | undefined;
25
+ }
26
+
27
+ declare const lynx: {
28
+ getModuleLoader?(): LynxNapiLoader | undefined;
29
+ };
30
+
31
+ function getNativeModules(): Record<string, unknown> | undefined {
32
+ const globalObject = globalThis as unknown as {
33
+ NativeModules?: Record<string, unknown>;
34
+ };
35
+ return typeof NativeModules !== 'undefined'
36
+ ? NativeModules
37
+ : globalObject.NativeModules;
38
+ }
39
+
40
+ function installG9SpeechModuleShim(): void {
41
+
42
+ }
43
+
44
+ export function requireG9SpeechModule(): G9SpeechModuleSpec {
45
+ const nativeModules = getNativeModules();
46
+ const existingModule = nativeModules?.[ADDON_NAME];
47
+ if (existingModule !== undefined && existingModule !== null) {
48
+ return existingModule as G9SpeechModuleSpec;
49
+ }
50
+
51
+
52
+
53
+ throw new Error(`Native module "${ADDON_NAME}" is unavailable.`);
54
+ }
55
+
56
+ export const G9SpeechModule = new Proxy({}, {
57
+ get(_target, property) {
58
+ return requireG9SpeechModule()[property as keyof G9SpeechModuleSpec];
59
+ },
60
+ }) as G9SpeechModuleSpec;
61
+
62
+ installG9SpeechModuleShim();
63
+
64
+ export default G9SpeechModule;
@@ -4,8 +4,8 @@
4
4
  # package version, which always equals the pinned G9MAUIControls version (npm run check:versions).
5
5
  Pod::Spec.new do |s|
6
6
  s.name = 'g9lynx-native'
7
- s.version = '1.4.2'
8
- s.summary = 'G9 SQLite and host native modules and the <g9-video> element for Lynx (sqlite3, NSUserDefaults, UIKit, AVFoundation).'
7
+ s.version = '1.4.4'
8
+ s.summary = 'G9 SQLite, host and speech native modules and the <g9-video> element for Lynx (sqlite3, NSUserDefaults, UIKit, AVFoundation, Speech).'
9
9
  s.homepage = 'https://github.com/imankari/g9lynxcontrols'
10
10
  s.license = { :type => 'MIT' }
11
11
  s.author = 'G9LynxControls'
@@ -16,7 +16,8 @@ Pod::Spec.new do |s|
16
16
  # flattened Pods/Headers/Public cannot resolve from the host app (found building apps/ios-host, 2026-10-06).
17
17
  s.header_mappings_dir = 'src'
18
18
  s.libraries = 'sqlite3'
19
- s.frameworks = 'UIKit', 'AVFoundation'
19
+ # Speech: G9SpeechModule (dictation; the host's Info.plist carries NSSpeechRecognitionUsageDescription).
20
+ s.frameworks = 'UIKit', 'AVFoundation', 'Speech'
20
21
  s.requires_arc = true
21
22
  s.dependency 'Lynx', '4.0.3'
22
23
 
@@ -0,0 +1,18 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import <Lynx/LynxContextModule.h>
3
+ #import "generated/G9SpeechModuleSpec.h"
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ // Lynx 4.0.3 has no @LynxNativeModuleRegister: hosts register the module on their LynxConfig
8
+ // (`[config registerModule:G9SpeechModule.class]`). The host's Info.plist needs NSMicrophoneUsageDescription and
9
+ // NSSpeechRecognitionUsageDescription.
10
+
11
+ /**
12
+ * `NativeModules.G9SpeechModule` on iOS (`G9SpeechToText`): `SFSpeechRecognizer` over `AVAudioEngine`, one session at a
13
+ * time; partial hypotheses go out as the global event `g9:speech` (`{"session","text"}`). TWIN: G9SpeechModule.kt.
14
+ */
15
+ @interface G9SpeechModule : NSObject <G9SpeechModuleSpec, LynxContextModule>
16
+ @end
17
+
18
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,201 @@
1
+ #import "G9SpeechModule.h"
2
+ #import <AVFoundation/AVFoundation.h>
3
+ #import <Lynx/LynxContext.h>
4
+ #import <Speech/Speech.h>
5
+
6
+ typedef void (^G9Reply)(id envelope);
7
+
8
+ static NSDictionary *G9Ok(id value) {
9
+ return @{@"ok" : @YES, @"value" : value ?: [NSNull null]};
10
+ }
11
+
12
+ static NSDictionary *G9Fail(NSString *code, NSString *message) {
13
+ return @{@"ok" : @NO, @"error" : @{@"code" : code, @"message" : message ?: @""}};
14
+ }
15
+
16
+ static NSLocale *G9LocaleOf(NSString *locale) {
17
+ return [NSLocale localeWithLocaleIdentifier:locale.length ? locale : @"en-US"];
18
+ }
19
+
20
+ /** `granted` needs both speech recognition and the microphone; `restricted` is the device's policy. */
21
+ static NSString *G9PermissionState(SFSpeechRecognizerAuthorizationStatus speech, BOOL mic) {
22
+ if (speech == SFSpeechRecognizerAuthorizationStatusRestricted) return @"restricted";
23
+ return speech == SFSpeechRecognizerAuthorizationStatusAuthorized && mic ? @"granted" : @"denied";
24
+ }
25
+
26
+ /** One dictation: the recogniser's task, the request the engine tap feeds, the reply that settles once. */
27
+ @interface G9SpeechSession : NSObject
28
+ @property(nonatomic, copy) NSString *identifier;
29
+ @property(nonatomic, copy, nullable) G9Reply reply;
30
+ @property(nonatomic, strong, nullable) SFSpeechRecognitionTask *task;
31
+ @property(nonatomic, strong, nullable) SFSpeechAudioBufferRecognitionRequest *request;
32
+ @property(nonatomic, copy) NSString *best;
33
+ @property(nonatomic) BOOL settled;
34
+ @end
35
+
36
+ @implementation G9SpeechSession
37
+ @end
38
+
39
+ @interface G9SpeechModule ()
40
+ @property(nonatomic, weak, nullable) LynxContext *lynxContext;
41
+ @property(nonatomic, strong) AVAudioEngine *engine;
42
+ @property(nonatomic, strong, nullable) G9SpeechSession *current;
43
+ @end
44
+
45
+ @implementation G9SpeechModule
46
+
47
+ + (NSString *)name {
48
+ return @"G9SpeechModule";
49
+ }
50
+
51
+ + (NSDictionary<NSString *, NSString *> *)methodLookup {
52
+ return @{
53
+ @"isAvailable" : NSStringFromSelector(@selector(isAvailable:callback:)),
54
+ @"requestPermission" : NSStringFromSelector(@selector(requestPermission:)),
55
+ @"listen" : NSStringFromSelector(@selector(listen:locale:callback:)),
56
+ @"cancel" : NSStringFromSelector(@selector(cancel:)),
57
+ };
58
+ }
59
+
60
+ - (instancetype)initWithLynxContext:(LynxContext *)context {
61
+ if ((self = [super init])) {
62
+ _lynxContext = context;
63
+ _engine = [[AVAudioEngine alloc] init];
64
+ }
65
+ return self;
66
+ }
67
+
68
+ - (instancetype)init {
69
+ if ((self = [super init])) _engine = [[AVAudioEngine alloc] init];
70
+ return self;
71
+ }
72
+
73
+ - (void)isAvailable:(NSString *)locale callback:(id)callback {
74
+ SFSpeechRecognizer *r = [[SFSpeechRecognizer alloc] initWithLocale:G9LocaleOf(locale)];
75
+ ((G9Reply)callback)(G9Ok(@(r != nil && r.isAvailable)));
76
+ }
77
+
78
+ - (void)requestPermission:(id)callback {
79
+ G9Reply reply = [(G9Reply)callback copy];
80
+ [SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus speech) {
81
+ [AVAudioSession.sharedInstance requestRecordPermission:^(BOOL granted) {
82
+ reply(G9Ok(G9PermissionState(speech, granted)));
83
+ }];
84
+ }];
85
+ }
86
+
87
+ - (void)listen:(NSString *)session locale:(NSString *)locale callback:(id)callback {
88
+ G9Reply reply = [(G9Reply)callback copy];
89
+ dispatch_async(dispatch_get_main_queue(), ^{
90
+ BOOL mic = AVAudioSession.sharedInstance.recordPermission == AVAudioSessionRecordPermissionGranted;
91
+ if (![G9PermissionState(SFSpeechRecognizer.authorizationStatus, mic) isEqualToString:@"granted"]) {
92
+ reply(G9Ok(@{@"status" : @"denied"}));
93
+ return;
94
+ }
95
+ SFSpeechRecognizer *recognizer = [[SFSpeechRecognizer alloc] initWithLocale:G9LocaleOf(locale)];
96
+ if (recognizer == nil || !recognizer.isAvailable) {
97
+ reply(G9Fail(@"speech-unavailable", @"No speech recogniser for this language on this device."));
98
+ return;
99
+ }
100
+ if (self.current) [self finish:self.current value:@{@"status" : @"cancelled"}];
101
+
102
+ G9SpeechSession *s = [[G9SpeechSession alloc] init];
103
+ s.identifier = session ?: @"";
104
+ s.reply = reply;
105
+ s.best = @"";
106
+ s.request = [[SFSpeechAudioBufferRecognitionRequest alloc] init];
107
+ s.request.shouldReportPartialResults = YES;
108
+ self.current = s;
109
+
110
+ NSError *error = nil;
111
+ AVAudioSession *audio = AVAudioSession.sharedInstance;
112
+ [audio setCategory:AVAudioSessionCategoryRecord mode:AVAudioSessionModeMeasurement options:AVAudioSessionCategoryOptionDuckOthers error:&error];
113
+ if (!error) [audio setActive:YES withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];
114
+ if (error) {
115
+ [self fail:s code:@"speech-recognition" message:error.localizedDescription];
116
+ return;
117
+ }
118
+ AVAudioInputNode *input = self.engine.inputNode;
119
+ SFSpeechAudioBufferRecognitionRequest *request = s.request;
120
+ [input removeTapOnBus:0];
121
+ [input installTapOnBus:0
122
+ bufferSize:1024
123
+ format:[input outputFormatForBus:0]
124
+ block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when) {
125
+ [request appendAudioPCMBuffer:buffer];
126
+ }];
127
+ [self.engine prepare];
128
+ if (![self.engine startAndReturnError:&error]) {
129
+ [self fail:s code:@"speech-recognition" message:error.localizedDescription];
130
+ return;
131
+ }
132
+ __weak G9SpeechModule *weakSelf = self;
133
+ s.task = [recognizer recognitionTaskWithRequest:request
134
+ resultHandler:^(SFSpeechRecognitionResult *result, NSError *taskError) {
135
+ dispatch_async(dispatch_get_main_queue(), ^{
136
+ G9SpeechModule *me = weakSelf;
137
+ if (!me || s.settled) return;
138
+ if (result) {
139
+ s.best = result.bestTranscription.formattedString ?: @"";
140
+ if (!result.isFinal && s.best.length) [me emitPartial:s];
141
+ if (result.isFinal) {
142
+ NSString *text = [s.best stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet];
143
+ [me finish:s value:text.length ? @{@"status" : @"recognized", @"text" : text} : @{@"status" : @"no-match"}];
144
+ return;
145
+ }
146
+ }
147
+ if (taskError) {
148
+ // 1110 = no speech detected; a cancelled task reports 216 / 301.
149
+ NSInteger code = taskError.code;
150
+ if (code == 1110) [me finish:s value:@{@"status" : @"no-match"}];
151
+ else if (code == 216 || code == 301) [me finish:s value:@{@"status" : @"cancelled"}];
152
+ else [me fail:s code:@"speech-recognition" message:taskError.localizedDescription];
153
+ }
154
+ });
155
+ }];
156
+ });
157
+ }
158
+
159
+ - (void)cancel:(NSString *)session {
160
+ dispatch_async(dispatch_get_main_queue(), ^{
161
+ G9SpeechSession *s = self.current;
162
+ if (!s || ![s.identifier isEqualToString:session ?: @""]) return;
163
+ [s.task cancel];
164
+ [self finish:s value:@{@"status" : @"cancelled"}];
165
+ });
166
+ }
167
+
168
+ - (void)emitPartial:(G9SpeechSession *)s {
169
+ NSData *data = [NSJSONSerialization dataWithJSONObject:@{@"session" : s.identifier, @"text" : s.best} options:0 error:nil];
170
+ NSString *json = data ? [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] : @"{}";
171
+ @try {
172
+ [self.lynxContext sendGlobalEvent:@"g9:speech" withParams:@[ json ]];
173
+ } @catch (NSException *ex) {
174
+ // A context being torn down must not take the recogniser down with it.
175
+ }
176
+ }
177
+
178
+ - (void)finish:(G9SpeechSession *)s value:(NSDictionary *)value {
179
+ if (s.settled) return;
180
+ s.settled = YES;
181
+ [self releaseSession:s];
182
+ if (s.reply) s.reply(G9Ok(value));
183
+ }
184
+
185
+ - (void)fail:(G9SpeechSession *)s code:(NSString *)code message:(NSString *)message {
186
+ if (s.settled) return;
187
+ s.settled = YES;
188
+ [self releaseSession:s];
189
+ if (s.reply) s.reply(G9Fail(code, message));
190
+ }
191
+
192
+ - (void)releaseSession:(G9SpeechSession *)s {
193
+ if (self.current == s) self.current = nil;
194
+ if (self.engine.isRunning) [self.engine stop];
195
+ [self.engine.inputNode removeTapOnBus:0];
196
+ [s.request endAudio];
197
+ s.task = nil;
198
+ [AVAudioSession.sharedInstance setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
199
+ }
200
+
201
+ @end
@@ -0,0 +1,16 @@
1
+ // Generated by @lynx-js/autolink-codegen. Do not edit.
2
+ #import <Foundation/Foundation.h>
3
+ #import <Lynx/LynxModule.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ @protocol G9SpeechModuleSpec <LynxModule>
8
+
9
+ - (void)isAvailable:(NSString *)locale callback:(id)callback;
10
+ - (void)requestPermission:(id)callback;
11
+ - (void)listen:(NSString *)session locale:(NSString *)locale callback:(id)callback;
12
+ - (void)cancel:(NSString *)session;
13
+
14
+ @end
15
+
16
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,2 @@
1
+ // Generated by @lynx-js/autolink-codegen. Do not edit.
2
+ #import "G9SpeechModuleSpec.h"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@g9tm/lynxcontrols-native",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "description": "Android and iOS platform layer: the G9SqliteModule and G9HostModule native modules (Autolink) and their JS adapters.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -38,14 +38,14 @@
38
38
  "check:android-types": "node scripts/android-bridge-types.mjs"
39
39
  },
40
40
  "dependencies": {
41
- "@g9tm/lynxcontrols-foundation": "1.4.2",
42
- "@g9tm/lynxcontrols-sqlite": "1.4.2"
41
+ "@g9tm/lynxcontrols-foundation": "1.4.4",
42
+ "@g9tm/lynxcontrols-sqlite": "1.4.4"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@lynx-js/react": ">=0.126.2 <0.127.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@g9tm/lynxcontrols-lynxtron": "1.4.2",
48
+ "@g9tm/lynxcontrols-lynxtron": "1.4.4",
49
49
  "@lynx-js/autolink-codegen": "0.6.0"
50
50
  }
51
51
  }
@@ -44,3 +44,24 @@ export declare class G9HostModule {
44
44
  */
45
45
  assetUri(path: string, callback: (reply: Record<string, unknown>) => void): void;
46
46
  }
47
+
48
+ /**
49
+ * Speech recognition for dictation into fields (`G9SpeechToText`, MAUI `IG9SpeechToText`): Android `SpeechRecognizer`,
50
+ * iOS `SFSpeechRecognizer` over `AVAudioEngine`. One session at a time; interim hypotheses arrive as the global event
51
+ * `g9:speech` with one JSON argument `{"session","text"}` while the user speaks.
52
+ *
53
+ * @lynxmodule
54
+ */
55
+ export declare class G9SpeechModule {
56
+ /** Whether a recogniser exists for `locale` on this device (no permission prompt): `{ ok, value: boolean }`. */
57
+ isAvailable(locale: string, callback: (reply: Record<string, unknown>) => void): void;
58
+ /** Asks for the microphone (and, on iOS, speech recognition): `{ ok, value: 'granted' | 'denied' | 'restricted' }`. */
59
+ requestPermission(callback: (reply: Record<string, unknown>) => void): void;
60
+ /**
61
+ * Listens once and replies exactly once: `{ ok, value: { status: 'recognized', text } | { status: 'no-match' |
62
+ * 'cancelled' | 'denied' } }`, or `{ ok: false, error }` for a recogniser fault.
63
+ */
64
+ listen(session: string, locale: string, callback: (reply: Record<string, unknown>) => void): void;
65
+ /** Ends `session` early: its `listen` replies `cancelled`. Unknown or finished sessions are ignored. */
66
+ cancel(session: string): void;
67
+ }