@g9tm/lynxcontrols-native 1.4.4 → 1.4.7

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.
@@ -25,7 +25,7 @@ android {
25
25
 
26
26
  kotlin { jvmToolchain(17) }
27
27
 
28
- val lynx = "4.1.0"
28
+ val lynx = "4.2.0"
29
29
 
30
30
  dependencies {
31
31
  compileOnly("org.lynxsdk.lynx:lynx:$lynx")
@@ -34,6 +34,11 @@ 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
+ // G9InputBehaviors (input/G9InputUI.kt) extends xelement-input's input and textarea; a host that registers them
38
+ // already depends on it.
39
+ compileOnly("org.lynxsdk.lynx:xelement-input:$lynx")
40
+ // Its EditText derives from AppCompatEditText, which xelement-input's POM lists at runtime scope only.
41
+ compileOnly("androidx.appcompat:appcompat:1.7.0")
37
42
  // G9SpeechModule asks for the microphone through the host activity's ActivityResultRegistry: compile-only, as every
38
43
  // host of these libraries ships androidx.activity (a host without it gets the current state, never a prompt).
39
44
  compileOnly("androidx.activity:activity:1.10.1")
@@ -13,6 +13,7 @@ import android.view.inputmethod.InputMethodManager
13
13
  import com.g9lynx.g9native.generated.G9HostModuleSpec
14
14
  import com.g9lynx.g9native.host.core.G9PreferenceBackend
15
15
  import com.g9lynx.g9native.host.core.G9PreferencesCore
16
+ import com.g9lynx.g9native.host.core.G9SafeAreaCore
16
17
  import com.lynx.jsbridge.LynxMethod
17
18
  import com.lynx.jsbridge.LynxNativeModule
18
19
  import com.lynx.react.bridge.Callback
@@ -86,7 +87,7 @@ class G9HostModule(private val lynxContext: LynxContext) : G9HostModuleSpec(lynx
86
87
  val density = activity.resources.displayMetrics.density
87
88
  val insets = activity.window.decorView.rootWindowInsets
88
89
  val rtl = activity.window.decorView.layoutDirection == View.LAYOUT_DIRECTION_RTL
89
- val px = safeInsetsPx(insets)
90
+ val px = safeInsetsPx(insets, activity.window.decorView)
90
91
  val left = px[0] / density
91
92
  val right = px[2] / density
92
93
  val value =
@@ -160,13 +161,38 @@ class G9HostModule(private val lynxContext: LynxContext) : G9HostModuleSpec(lynx
160
161
  * by type, so the soft keyboard never counts (the deprecated `systemWindowInset*` added the IME height when the
161
162
  * keyboard was up) and a host that hides the bars (immersive, as the AgriPad MAUI app) gets the cutout only.
162
163
  */
163
- private fun safeInsetsPx(insets: android.view.WindowInsets?): IntArray {
164
+ /** The cutout plus each system bar only while it shows (G9SafeAreaCore): an immersive host's hidden bars count zero. */
165
+ private fun safeInsetsPx(insets: android.view.WindowInsets?, decor: View): IntArray {
164
166
  if (insets == null) return intArrayOf(0, 0, 0, 0)
165
167
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
166
- val i = insets.getInsets(android.view.WindowInsets.Type.systemBars() or android.view.WindowInsets.Type.displayCutout())
167
- return intArrayOf(i.left, i.top, i.right, i.bottom)
168
+ fun px(i: android.graphics.Insets) = intArrayOf(i.left, i.top, i.right, i.bottom)
169
+ val status = android.view.WindowInsets.Type.statusBars()
170
+ val navigation = android.view.WindowInsets.Type.navigationBars()
171
+ return G9SafeAreaCore.compute(
172
+ px(insets.getInsets(android.view.WindowInsets.Type.displayCutout())),
173
+ px(insets.getInsets(status)),
174
+ insets.isVisible(status),
175
+ px(insets.getInsets(navigation)),
176
+ insets.isVisible(navigation),
177
+ )
168
178
  }
179
+ // Android 10 and older: systemWindowInsets keep a hidden bar's size (LAYOUT_STABLE); the decor view's flags say
180
+ // whether it is hidden. The status bar is the top inset, the navigation bar the others.
181
+ @Suppress("DEPRECATION")
182
+ val flags = decor.systemUiVisibility
183
+ val cutout =
184
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
185
+ insets.displayCutout?.let { intArrayOf(it.safeInsetLeft, it.safeInsetTop, it.safeInsetRight, it.safeInsetBottom) }
186
+ } else {
187
+ null
188
+ } ?: intArrayOf(0, 0, 0, 0)
169
189
  @Suppress("DEPRECATION")
170
- return intArrayOf(insets.systemWindowInsetLeft, insets.systemWindowInsetTop, insets.systemWindowInsetRight, insets.systemWindowInsetBottom)
190
+ return G9SafeAreaCore.compute(
191
+ cutout,
192
+ intArrayOf(0, insets.systemWindowInsetTop, 0, 0),
193
+ flags and View.SYSTEM_UI_FLAG_FULLSCREEN == 0,
194
+ intArrayOf(insets.systemWindowInsetLeft, 0, insets.systemWindowInsetRight, insets.systemWindowInsetBottom),
195
+ flags and View.SYSTEM_UI_FLAG_HIDE_NAVIGATION == 0,
196
+ )
171
197
  }
172
198
  }
@@ -0,0 +1,19 @@
1
+ package com.g9lynx.g9native.host.core
2
+
3
+ /**
4
+ * The safe area `G9HostModule.safeInsets` reports, as `[left, top, right, bottom]` px: the display cutout, plus a system bar
5
+ * only while it SHOWS. A host that hides its bars (immersive: they slide in transiently over the page) gets the cutout
6
+ * alone — the bars' own inset is reported whether or not they are hidden on Android 10 and older (`systemWindowInsets`
7
+ * under `SYSTEM_UI_FLAG_LAYOUT_STABLE`), and counting it put every bottom bar and sheet 48 dp above a navigation bar that
8
+ * was not there (AgriPad Lynx on a DOOGEE S96Pro, Android 10, 2026-11-02).
9
+ */
10
+ object G9SafeAreaCore {
11
+ fun compute(cutout: IntArray, status: IntArray, statusShown: Boolean, navigation: IntArray, navigationShown: Boolean): IntArray {
12
+ val out = cutout.copyOf(4)
13
+ for (side in 0 until 4) {
14
+ if (statusShown) out[side] = maxOf(out[side], status.getOrElse(side) { 0 })
15
+ if (navigationShown) out[side] = maxOf(out[side], navigation.getOrElse(side) { 0 })
16
+ }
17
+ return out
18
+ }
19
+ }
@@ -0,0 +1,118 @@
1
+ package com.g9lynx.g9native.input
2
+
3
+ import android.text.method.PasswordTransformationMethod
4
+ import android.text.method.ReplacementTransformationMethod
5
+ import android.text.method.SingleLineTransformationMethod
6
+ import android.text.method.TransformationMethod
7
+ import com.g9lynx.g9native.input.core.G9DigitsCore
8
+ import com.lynx.tasm.behavior.Behavior
9
+ import com.lynx.tasm.behavior.LynxContext
10
+ import com.lynx.tasm.behavior.LynxProp
11
+ import com.lynx.tasm.behavior.StylesDiffMap
12
+ import com.lynx.tasm.behavior.shadow.ShadowNode
13
+ import com.lynx.tasm.behavior.ui.LynxUI
14
+ import com.lynx.xelement.input.LynxEditTextView
15
+ import com.lynx.xelement.input.LynxUIInput
16
+ import com.lynx.xelement.input.LynxUIInputShadowNode
17
+ import com.lynx.xelement.input.LynxUITextArea
18
+ import com.lynx.xelement.input.LynxUITextAreaShadowNode
19
+
20
+ /** Draws the field's ASCII digits in the culture's digits (G9DigitsCore); the text itself is never changed. */
21
+ internal class G9DigitsTransformation(private val pairs: Pair<CharArray, CharArray>) : ReplacementTransformationMethod() {
22
+ val key: String = String(pairs.first) + String(pairs.second)
23
+
24
+ override fun getOriginal(): CharArray = pairs.first
25
+
26
+ override fun getReplacement(): CharArray = pairs.second
27
+ }
28
+
29
+ /** The digits state of one field: the props it was given and the transformation it applies. */
30
+ internal class G9FieldDigits(private val singleLine: Boolean) {
31
+ var system: String? = null
32
+ var decimalSeparator: String? = null
33
+
34
+ /**
35
+ * Puts the digit transformation on `view` after xelement-input's own props ran (it sets SingleLine / Password there).
36
+ * A password keeps its mask; a latin field gets back what xelement-input would have set.
37
+ */
38
+ fun apply(view: LynxEditTextView) {
39
+ val current: TransformationMethod? = view.transformationMethod
40
+ if (current is PasswordTransformationMethod) return
41
+ val pairs = G9DigitsCore.pairs(system, decimalSeparator, singleLine)
42
+ val wanted: TransformationMethod? =
43
+ when {
44
+ pairs != null -> {
45
+ if (current is G9DigitsTransformation && current.key == G9DigitsTransformation(pairs).key) return
46
+ G9DigitsTransformation(pairs)
47
+ }
48
+ current is G9DigitsTransformation -> if (singleLine) SingleLineTransformationMethod.getInstance() else null
49
+ else -> return
50
+ }
51
+ val start = view.selectionStart
52
+ val end = view.selectionEnd
53
+ view.transformationMethod = wanted
54
+ val length = view.text?.length ?: 0
55
+ if (start in 0..length && end in 0..length) view.setSelection(start, end)
56
+ }
57
+ }
58
+
59
+ /** xelement-input's `<input>` with `g9-digits` / `g9-decimal-separator` (`@g9tm/lynxcontrols` G9TextEntry sets them). */
60
+ class G9UIInput(context: LynxContext) : LynxUIInput(context) {
61
+ private val digits = G9FieldDigits(singleLine = true)
62
+
63
+ @LynxProp(name = "g9-digits")
64
+ fun setG9Digits(value: String?) {
65
+ digits.system = value
66
+ }
67
+
68
+ @LynxProp(name = "g9-decimal-separator")
69
+ fun setG9DecimalSeparator(value: String?) {
70
+ digits.decimalSeparator = value
71
+ }
72
+
73
+ override fun afterPropsUpdated(props: StylesDiffMap?) {
74
+ super.afterPropsUpdated(props)
75
+ digits.apply(view)
76
+ }
77
+ }
78
+
79
+ /** xelement-input's `<textarea>` with the same digit props (G9Editor). */
80
+ class G9UITextArea(context: LynxContext) : LynxUITextArea(context) {
81
+ private val digits = G9FieldDigits(singleLine = false)
82
+
83
+ @LynxProp(name = "g9-digits")
84
+ fun setG9Digits(value: String?) {
85
+ digits.system = value
86
+ }
87
+
88
+ @LynxProp(name = "g9-decimal-separator")
89
+ fun setG9DecimalSeparator(value: String?) {
90
+ digits.decimalSeparator = value
91
+ }
92
+
93
+ override fun afterPropsUpdated(props: StylesDiffMap?) {
94
+ super.afterPropsUpdated(props)
95
+ digits.apply(view)
96
+ }
97
+ }
98
+
99
+ /**
100
+ * `input` and `textarea` for a host that registers xelement-input itself (an unregistered tag breaks the page, so a
101
+ * host registers exactly one of each): use these instead of `LynxUIInput` / `LynxUITextArea` and the fields draw the
102
+ * culture's digits. The host must still depend on `org.lynxsdk.lynx:xelement-input`.
103
+ */
104
+ object G9InputBehaviors {
105
+ fun create(): List<Behavior> =
106
+ listOf(
107
+ object : Behavior("input", false, false, false) {
108
+ override fun createUI(context: LynxContext): LynxUI<*> = G9UIInput(context)
109
+
110
+ override fun createShadowNode(): ShadowNode = LynxUIInputShadowNode()
111
+ },
112
+ object : Behavior("textarea", false, false, false) {
113
+ override fun createUI(context: LynxContext): LynxUI<*> = G9UITextArea(context)
114
+
115
+ override fun createShadowNode(): ShadowNode = LynxUITextAreaShadowNode()
116
+ },
117
+ )
118
+ }
@@ -0,0 +1,56 @@
1
+ package com.g9lynx.g9native.input.core
2
+
3
+ /**
4
+ * What a field DRAWS for the ASCII digits it holds (MAUI: the FaNum font draws «15» as «۱۵»; AgriPad owner 2026-11-02:
5
+ * «Lynx shows Persian too, but what is recorded is ASCII»). Pure, so the JVM suite tests it: the native input applies the
6
+ * pairs as a `ReplacementTransformationMethod`, which changes only what is drawn — the text, the value events and the
7
+ * selection keep the ASCII characters one for one.
8
+ */
9
+ object G9DigitsCore {
10
+ /** `g9-digits` values (the culture's numbering system, foundation `G9NumberingSystem`). */
11
+ const val LATIN = "latin"
12
+ const val PERSIAN = "persian"
13
+ const val ARABIC_INDIC = "arabicIndic"
14
+
15
+ /** The zero of `system`, or `null` when the field draws ASCII (latin, empty, unknown). */
16
+ fun zeroOf(system: String?): Char? =
17
+ when (system) {
18
+ PERSIAN -> '۰'
19
+ ARABIC_INDIC -> '٠'
20
+ else -> null
21
+ }
22
+
23
+ /**
24
+ * The characters to replace and their replacements (same length), or `null` when nothing is replaced.
25
+ * `singleLine` keeps what `SingleLineTransformationMethod` does (newline → space, CR → U+FEFF), since this method
26
+ * replaces it on a single-line input; `decimalSeparator` (one character, e.g. «٫») is drawn for the ASCII '.'.
27
+ */
28
+ fun pairs(system: String?, decimalSeparator: String?, singleLine: Boolean): Pair<CharArray, CharArray>? {
29
+ val zero = zeroOf(system) ?: return null
30
+ val from = StringBuilder("0123456789")
31
+ val to = StringBuilder()
32
+ for (d in 0..9) to.append(zero + d)
33
+ val separator = decimalSeparator?.takeIf { it.length == 1 && it != "." }
34
+ if (separator != null) {
35
+ from.append('.')
36
+ to.append(separator)
37
+ }
38
+ if (singleLine) {
39
+ from.append('\n').append('\r')
40
+ to.append(' ').append('')
41
+ }
42
+ return from.toString().toCharArray() to to.toString().toCharArray()
43
+ }
44
+
45
+ /** What `pairs` draws for `text` (the tests' view of the transformation). */
46
+ fun draw(text: String, pairs: Pair<CharArray, CharArray>?): String {
47
+ if (pairs == null) return text
48
+ val (from, to) = pairs
49
+ val out = StringBuilder(text.length)
50
+ for (c in text) {
51
+ val i = from.indexOf(c)
52
+ out.append(if (i >= 0) to[i] else c)
53
+ }
54
+ return out.toString()
55
+ }
56
+ }
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/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"}
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/inline-image.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/motion.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/lynx-data-processors.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/core/main-thread-object.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,96,97,202,203],[175,176,181,187],[41,176],[41,175,176,181,187],[41,196],[172,175,177,179,181,182,183,185,186,199],[41,187,188,189,190,191,192,197,198],[177,178],[175,181],[41,96,202,203],[41,96,175,184,202,203],[175],[193],[195],[194],[41,96,98,201,202,203],[41,177,199,200],[42,86,87,88],[53],[42,78,87,88,89,90,92,93,94],[42,86,87,88,90,91],[86,88],[42,86],[49,78],[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,77,79,80],[47,51,55,78],[47,51,55],[56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,79,80,81,82,83],[58,59],[47,51,55,59],[47,61,64],[46],[48,52,53,95],[44,47,48,49,51,53,54,55,84,85],[44,47],[52,86,95],[45,86],[46,47,55],[45,46,50,51],[49,86],[38,39,40],[41],[173,175,176,180],[173,174],[106],[105],[105,106,107],[105,106,107,108,109,110,111,112],[111],[116,118,120,121],[117],[111,116,117,118,119,120],[116,119],[125],[124],[123,124,125,126,127,128],[104,113,114,115,122,129,133,139,143],[115,117,119,130],[117,119,130,131,132],[115],[134,136],[134,136,137,138],[134,135],[114,134,135],[135,140,141],[135,140,141,142],[98,165,166,167],[98,166,167,168,169,170],[96,98,144,166,202],[98],[98,144,166],[98,165,166],[99,100,101,102],[102,145],[102,144],[144],[99,100,101,102,103,145,146,147,148,149,150,151,152,153,154,155,156,157,159,160,161,162,163,164],[102,103,149,151,152],[102,103,149],[102,103,148],[99,101,151],[101,102,144,145,149,150,151,153,159,160,161,162,165],[100,101,103],[148,149,150],[149],[99,101,144],[150,151,160],[99,101,103,144,145,151,153,155,156,157,158,159,161],[144,151],[103,145,151,160],[145,150,151,153,159,160,161,163],[144,147,149,151],[100]],"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":"f4664d05efc95a0fb8ee228d391e5271a1c8fc9bc3452c7bd760f9ca18b5a837","impliedFormat":1},{"version":"b32b532dcbe0a91d71fd94cb780e94bdfdce10be21608d914c29fb4b8939b24a","impliedFormat":1},{"version":"eb2b64881998b562a4fe9330e55aa2466cd3a41a1a57e93feac6555218cec06f","impliedFormat":1},{"version":"6db1694d205177322d792d924335b046b80607445a45c0d2de1fcffd190b48c0","impliedFormat":1},{"version":"d5465281e0aaffe267f46382c5f014740dc16e7fd8e1c57a0b0ddf8a2eab9be4","impliedFormat":1},{"version":"f7e5c3960dd9df65d83408b9be446f7119fa1db1dd8266dd343349d90c3bf2ce","impliedFormat":1},{"version":"09c6491ed74af89a4155feafedecaf77780f5751c66d4b65b18d30fc0e053a75","impliedFormat":1},{"version":"188b01044640e5ef65f6edf0dd6e6454f02dd19f4ead66b9e03ebe26cc7298ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d34d6de13412a24e8d9252040d972edce68b4db8d8a64a3f7fd63ca1fda3a67f","impliedFormat":1},{"version":"5bf51107315834a209b08395b141e262b7d143d14f6b4e4d403d8e020cef7e32","impliedFormat":1},{"version":"db0dcbe48d5cb38315083b412c8ab6995b0d42dc73b286833e296827feb0e5b4","impliedFormat":1},{"version":"b3e4a49a3ba19463662e7b821544948b953d2f6708370d42406bda558084000c","impliedFormat":1},{"version":"7c5e49b3d96da389b07d4ae3705c9f33a03dadcd04e6c0e76edece6d636f4ce7","impliedFormat":1},{"version":"24e9add3c802e7c9431b2c99edbbda02c1899901fd955dfb2e9ee3e9cdc93c4c","impliedFormat":1},{"version":"cd6611fd8cd9d40de1bdec02a3c5027c968c4aaf7639ee88ee48b2c41edeaddc","impliedFormat":1},{"version":"32d1e153cac16ca3a3f5f6b68fae76cddcda509950fa00d038c465776359db0c","impliedFormat":1},{"version":"0d85d0fa55dd433acf924675d7e976c025c8521c91a76079844cd15e52855ccf","impliedFormat":1},{"version":"89da6ea3ee9735e712691227b0e5ee74381779f9ad8b0f4fb7ced0247b16735a","impliedFormat":1},{"version":"77fbe475cb649a3598aa8f932ab5f6fe011444d94b52d329078c1f6d63c5d3bd","impliedFormat":1},{"version":"7618f7fdf0abf7f712cefe766ac1ab7fcd1f8e753c513e57d3ada9ada3a57257","impliedFormat":1},{"version":"db0441149b37984c225e945a112713d07616b34552d64f814c5cbf8e8c95f165","impliedFormat":1},{"version":"51f5a8fa3de5f13b21ba2604b4de8f0aae3d97acadab981d536a282ea26257af","impliedFormat":1},{"version":"0e323630cbfda771430e2720f6a2f02f257becd8fb9722aa975ae773fb572210","impliedFormat":1},{"version":"56dbc770513baae28f7cfbadeba5078bb13a37a13132a5292e98a8b103312b98","impliedFormat":1},{"version":"84ff906032fe12e816bfb7441cee6726243e5a7316c4f2d6b0a6c149f1a91a16","impliedFormat":1},{"version":"446e9432c63958893f65b4f7eea86fb5b506c2e0e7dd971a1f75e361b333a3db","impliedFormat":1},{"version":"dcbbe1fb0f2c0efc12e29db8bbccb5b82513384d01d7a55342065cb0611da272","impliedFormat":1},{"version":"af209189a194cf5ad1f7b22dd680b52843fec2e30f1283be20b2977872fd4424","impliedFormat":1},{"version":"18e37ffc10db360e66b0af639e55bcc66496830994734f64a97c6751458f7f3a","impliedFormat":1},{"version":"14137199a98201c616a7ee925bfaa9809b659dfbec733f86fa5dc5348a897de6","impliedFormat":1},{"version":"f64cd565aca17df45f4666473da75e4ce51a2610e2ed1c31198e9f9325747a24","impliedFormat":1},{"version":"e415a17ab6a413d6be640457231e045541405eab1f0f370c7dd1e5567aa25999","impliedFormat":1},{"version":"8c03a41d6dc701b6648db83d71a92dc27147d7677ab5d70f32675e7e37b3795a","impliedFormat":1},{"version":"e27b62f2410bb10697800d1c09ae2c48db46cd1eca18ffdd35022b1802bfd6d5","impliedFormat":1},{"version":"2ec0bfa713f313f8b2dc2bf64c5962433722ea7b413f69428106a65584656dc9","impliedFormat":1},{"version":"b2d74af681f440a07e714ae9a33e3ea49c79870b9674058114c0404d2aa2f190","impliedFormat":1},{"version":"24f31e43eb3505e5d2946315e7b8ee8b426dfbe92c3031e435a4eb2d9dd8d69f","affectsGlobalScope":true,"impliedFormat":1},{"version":"5b6a59d1e98f908badf07f243deb42ebd926b4e3d33ec00a5f50cbb8d0464488","impliedFormat":1},{"version":"c669ee7ba01fa6a60b17c3535f96b65fa82dfd2a475a8760364f2f3952f9bcbd","impliedFormat":1},{"version":"a8b121f6a75d603075e62793ff0c109112e882dd6ca2b70bdccbd8d8f753429b","impliedFormat":1},{"version":"f378d7ed5e3ecbe382ade55127a9c98e826c76f786e06effad6fde91a7023d55","impliedFormat":1},{"version":"4e3e9539df72b3bfcc56fa13140070020dac72f1eff39237b11253482cb99847","impliedFormat":1},{"version":"5a47b3a2bbe2c9b015fe356462afe0abe391c592fffbe277126e2415e0811967","impliedFormat":1},{"version":"b1248e5931d2a49c697203e69449c58dacd3d19f12d76bf11d816600a0cf423b","impliedFormat":1},{"version":"0b02aebd8c41453aefd3b1f33b9b9862a57770f8b21e916ecc5b35c0bedcc52b","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","fd99d077c946173acf9d955de97346ce70eee272fad895a7859cbf0846a9c16e","c93a8b906c128dec5e80e64404e21ea7a083f71c58de46d0b9b3c144a99a8f24","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","216aa3f63d62f13b158445ff6a3bea8ccfd110f2bf219d607175518c9cc5b29d","f6d793b6c416157f50f82be85376ac2a9ee5a9f66e34a8317c9be19f8b4d41a7","29e6e980f179ac2981d68954462dfd4a4545f73c021f6a4c8a5f442c0e16e56c","faa64d270fa523f80fd31bc7340ee7f6a21632c2ea0cea6535bf5a34bcc6adf7","cbd4ce7ee090549d836cbffac2e76a192ac5b1c5f15bcbe29c06d32dc7006f34","ea5a5d5873c239b97d846fb8c78437e08ffd731924764f746c0ebcb7731d7648","fb6b5b4592e0eca5b8dc2507432e621a18c16d488ae8a610e4d1ddba1edff667","df85ab12f80aced067959d43bd7744017fccb1eb95adcfa343f16cba7c9ef670","613df14d2c8c0ba78286705c4ed01ec701ed03189ca3803dd69bc7086b9c02ff","298f8d2584216932ea238927177ef343d0b8da735eb40a5ba96b1f92e3675e33","c8082c78975419ed5a9f7daa655643425cdd98fee91bb82fd92d25f908c78465","3d1717d66cd1094139f0c1f0ed07ec56d91e4f5cd27e2b6309b6f195491e7f4a","6f1302be2fa00d8a64e3bd48b4ccdf5d77a402441d7728d48c2ecee706c79127","ec5e4d7021c750ea1b5b29b6c5d40e3cdbc180762b0806f0d0cbe117327162b9","594145b6622d5b02a40942c1a17fa6bb4fdb13a277ec703ee38018fc22d45034","a244408662b901d15567a5bcff4b29cd13a2a6c9bb2c27329eec616c48c8f144","4445f683ff67d2a80f6cbb5ae52039753c899890ebc27086ad17ffd005a8330d","050e9264752c154aa4f2d64f89c66a6e53dbf13a829c462aaa88eecc6e2e64b7","7cd6162b58f9275f44dc4e2293e0b7965680c2c271f7a2f8cece0b90ec61627c","6c2207dbeb0be8f55f38992b4b780ec29a8a0a0787b7076d8460ea71a27d5187","da3481884a0bbe5a9dfb44c1819ca7ad109cc1712d8a793eeef8742d94322ac1","f007826b8993773396aea70f1ad8b3e812aa33ee356b4c4034125efbc727ebb4","d25b3f0682520845fa1a1f42cdc23fbf5c0f7f8dc9806ec74d47f075d29b06dd","0a9f595404a498a83031f74e28f9fb3218038195f032a83da72146b3f8b5fb8c","54f9c37e150e434622cff5d71fb87237c48497141cb379fc1ab4d019a4a43e2e","0a0bb371deaec9e4e6580408c196fe5f0b668764c7a774f3f3f8a1447df0316f","6f5878e8666a8abbb560dcc15b19c95ac5b0f4f85aabab2e804abb6a145030e4","42997ccaad776930cb3b67f9585e680fb600e60c4464004d79eb2811869d047b","f341bef577fe12a6a779c986f89598855b39fe27810f12b2a181df6182cfc986","ebb1f50c2d70bc6310ac7eb99218ae3c0aba56d532964aff7a6872c668345d06","e34992c536be7eba4356e76d29f0cea34c8ef825ebe5f7f57841e48c38a6db17","e4f379e50c84ebb1be3476e4318c27597a0fcd518d7afca038f43a7ba4798c3c","09a9cb77ae0718ba8ccac3503fad79a896f071a24a64f8d40414d9c4f49e1b31","09ecbb99c6068a330c19d3c2efba4061bc1f3f7c55c1ae792398cc072d8a0dee",{"version":"7b7770361f404e9b167bce0ee92a608d8d14cb0b2f747ca9b300998db438a0fb","signature":"81d5aa9d15ee1ca18b073ecd13aa979f24d9100c2842f9e254d27992e014dd8a"},{"version":"b196a892a7087bc69d5e14a1647aaf5acfcdf995c1935a55afe405253c153b4c","signature":"f63a428eadbfdbc8c9137c4bdaa77a23988f7e82d1b01b5ef7d13e2f37d3d044"},{"version":"bb4df5f784c131c8fc70cfb1868ab99b883347d48c7260450d3c56958a996d60","signature":"b2b0e3e6fd8b425abfb54a11133c8b9abfc186d61ac86adc8deaba0b8c2f4e8f"},{"version":"0f5c336dc6acf154d2d0345e712c571683389b378778690a43d6d60ae386d4ea","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":"2baebea93983e898000858daeeeb2ac29938891b6b8db72ebce294837fc9499f","impliedFormat":99},{"version":"d9d320cf31f6d63659484f6c9ca4db4ae673daefa65118dd8589838925ff1397","impliedFormat":99},{"version":"027cf2216d065a97bf5a8ea126b3ea2734fab6cfe32adaff81ab4e94a1b51bbe","impliedFormat":99},{"version":"f6e6313fad233c5141220f7d25eae120cdd6e5079fbe0aba56821a1e99d05df8","impliedFormat":1},{"version":"9534c35b4577c193e499178deb47419fdadddd5e53af5ec8cb88218848013f65","impliedFormat":1},{"version":"97f43a6558157a3abae4e32256cc74ba34f69ab30473008ffa13011bf0932986","impliedFormat":99},{"version":"45b8adde5735e97329752dd5598b7ecd85202f221a1d0e8aa90137ce5810f21c","impliedFormat":99},{"version":"dfe6945467765f8e7843442a9dfbcf6b5526b6465b07b4c75a54a750329b5f17","impliedFormat":99},{"version":"7f9f6c9fe0e48c401d855d849e28112ffe2425569eca01b08b8c6112b8200695","impliedFormat":99},{"version":"68fcdc663627d12d336b420b19b3e54258844d0cbca0879f711c22aafd853352","impliedFormat":99},{"version":"d3dd47deefa1cc5dd6f1b866132506ec8dfd678ae0ddaa44de188505df14fcc4","impliedFormat":99},{"version":"a5946bc88dac85da2afacdfa3471ff3bc2bbda7c0e34efde184cf17e6bceb6bc","impliedFormat":99},{"version":"75b68165b9bcc07579562f182d327e83583b89b91d62e76b86f4001feee699ba","impliedFormat":99},{"version":"a9d1030f6773d29b383f49e2c647a7e6e464906e1de97a6bc33d2528d957c4d7","impliedFormat":99},{"version":"37b997d60987b68ce8117da783442b4602c8a85d47680823d469fdc90d29e3b8","impliedFormat":99},{"version":"600850ecc310012e3b1a562629d97a1d78662ae8c477357513dd2e6aa704079b","impliedFormat":99},{"version":"335226d599a9382c9bea07d37e23bf998c1022c0f67e4d6d2b69633de6ac118f","impliedFormat":99},{"version":"ae430fd9bac320e71c3fe9299d90dcf67555d9a4f97ecaa35947b430ba8648ea","impliedFormat":99},{"version":"9061ff14146280f47d740b344ddd641c16df526ecaa868c348852277a9fb8686","impliedFormat":99},{"version":"49ee4555c2fafa01119cccc62436baad88ed937ff55d6a655e764ada6b0721e3","impliedFormat":99},{"version":"e059fb9064bc023bc06945ddda6b00e711c18e8657c82514b51c1c1b828642e9","impliedFormat":99},{"version":"f01b3b376946defc432893dcbbbc79472076b6a55a316b0a461a1b38d09e961c","impliedFormat":99},{"version":"da74d8af20172cfee988a2daf92c560f3fdc816fb9c0537f2cc37ef27b1552a8","impliedFormat":99},{"version":"feed66ae8815d1981ad575482766fb9a82385e75cce35ae2f13be58e50c4349f","impliedFormat":99},{"version":"21305b3c41b1e29c0f0d8f43fe227bca82493f6e4c6407a3363c6f729f1c04ba","affectsGlobalScope":true,"impliedFormat":99},{"version":"20c1041fbd4f1537686af4b707872b87c90a22201f8979e5def4554d28b46a5b","impliedFormat":99},{"version":"57ff3023920f09ea08ee1fb662518ff60312e81781e03c4e3b50cef3322143be","signature":"495d5d4a044fa18020972e7146c7416e467a364a9b23de05b096335d212ac9bb"}],"root":[[166,171],203],"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":[[98,1],[188,2],[177,3],[189,4],[197,5],[200,6],[199,7],[179,8],[182,9],[183,10],[185,11],[186,12],[194,13],[193,14],[195,15],[196,14],[202,16],[201,17],[89,18],[91,19],[95,20],[92,21],[93,22],[88,23],[90,24],[44,25],[83,26],[74,27],[59,28],[56,27],[81,29],[57,27],[79,30],[58,31],[84,32],[60,33],[67,31],[62,27],[61,34],[76,31],[82,35],[80,31],[63,27],[71,31],[72,31],[64,34],[70,31],[65,34],[68,31],[69,27],[77,31],[66,27],[73,31],[75,31],[47,36],[54,37],[86,38],[55,39],[96,40],[45,36],[46,41],[51,42],[52,43],[50,44],[41,45],[97,46],[181,47],[180,12],[176,12],[174,12],[175,48],[173,12],[107,49],[106,50],[108,51],[113,52],[110,50],[112,53],[111,49],[122,54],[118,55],[121,56],[120,57],[126,58],[127,58],[125,59],[129,60],[128,59],[144,61],[131,62],[133,63],[134,64],[137,65],[139,66],[136,67],[138,68],[142,69],[143,70],[168,71],[171,72],[203,73],[166,74],[169,75],[170,75],[167,76],[103,77],[146,78],[145,79],[147,80],[165,81],[153,82],[152,83],[149,84],[154,85],[163,86],[148,87],[151,88],[150,89],[155,90],[161,91],[160,92],[157,93],[164,94],[162,95],[159,96],[102,97]],"latestChangedDtsFile":"./media.d.ts","version":"5.9.3"}
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAEtB,KAAK,YAAY,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAwC,MAAM,YAAY,CAAC;AAY3F,sFAAsF;AACtF,wBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,IAAI,CAM5D;AAiBD,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;AAE1F,0HAA0H;AAC1H,wBAAgB,gBAAgB,IAAI,kBAAkB,CAQrD;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;CAC5C;AAED,mHAAmH;AACnH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,gGAAgG;IAChG,UAAU,IAAI,IAAI,CAAC;IACnB;;;;;OAKG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,mBAAwB,GAAG,gBAAgB,CA4D5F"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../src/services.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAEtB,KAAK,YAAY,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAwC,MAAM,YAAY,CAAC;AAY3F,sFAAsF;AACtF,wBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,IAAI,CAM5D;AAiBD,+EAA+E;AAC/E,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;AAE1F,0HAA0H;AAC1H,wBAAgB,gBAAgB,IAAI,kBAAkB,CAQrD;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,kBAAkB,CAAC;CAC5C;AAED,mHAAmH;AACnH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,gGAAgG;IAChG,UAAU,IAAI,IAAI,CAAC;IACnB;;;;;OAKG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACrC;AAID;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,mBAAwB,GAAG,gBAAgB,CAuE5F"}
package/dist/services.js CHANGED
@@ -54,8 +54,14 @@ function createNativeHostServices(options = {}) {
54
54
  });
55
55
  for (const listener of Array.from(listeners))listener(insets);
56
56
  };
57
- call((reply)=>native.safeInsets(reply)).then(publish, ()=>void 0);
58
- subscribe(publish);
57
+ let reported = false;
58
+ call((reply)=>native.safeInsets(reply)).then((first)=>{
59
+ if (!reported) publish(first);
60
+ }, ()=>void 0);
61
+ subscribe((next)=>{
62
+ reported = true;
63
+ publish(next);
64
+ });
59
65
  const host = {
60
66
  exit: ()=>native.moveToBack(),
61
67
  hideKeyboard: ()=>native.hideKeyboard(),
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sources":["../src/services.ts"],"sourcesContent":["// The mobile host services over `NativeModules.G9HostModule` (plan/specs/06 §7): G9HostServices and an asynchronous\n// G9PreferenceStore. Safe-area insets are read once and then follow the host's `g9:insets` global event.\nimport {\n G9Error,\n type G9HostServices,\n type G9PreferenceStore,\n type G9PreferenceValue,\n type G9SafeInsets,\n} from '@g9tm/lynxcontrols-foundation';\nimport type { G9HostNativeModule, G9NativeEnvelope, G9NativePreference } from './protocol';\n\ndeclare const NativeModules: { G9HostModule?: G9HostNativeModule } | 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.G9HostModule`, or `null` where the native library is not linked. */\nexport function nativeHostModule(): G9HostNativeModule | null {\n try {\n return (typeof NativeModules === 'undefined' ? undefined : NativeModules?.G9HostModule) ?? null;\n } catch {\n return null;\n }\n}\n\nfunction call<T>(\n invoke: (reply: (envelope: G9NativeEnvelope<T>) => void) => void,\n missingCode = 'preference-store',\n): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n invoke((envelope) => {\n if (envelope?.ok) resolve(envelope.value);\n else {\n const e = envelope?.error ?? { code: missingCode, message: 'The native module sent no reply.' };\n reject(new G9Error(e.code, e.message));\n }\n });\n });\n}\n\n/** Subscribes to the host's insets event; returns the unsubscribe function. */\nexport type G9InsetsSubscriber = (listener: (insets: G9SafeInsets) => void) => () => void;\n\n/** The default insets source: the `g9:insets` global event a host sends on rotation / resize (Lynx background thread). */\nexport function lynxInsetsEvents(): G9InsetsSubscriber {\n return (listener) => {\n const target = typeof lynx === 'undefined' ? undefined : lynx?.getJSModule?.('GlobalEventEmitter');\n if (!target) return () => undefined;\n const handler = ((insets: G9SafeInsets) => listener(insets)) as unknown as (...args: never[]) => void;\n target.addListener('g9:insets', handler);\n return () => target.removeListener('g9:insets', handler);\n };\n}\n\n/** Options of {@link createNativeHostServices}. */\nexport interface G9NativeHostOptions {\n /** The module (default: `NativeModules.G9HostModule`). Tests pass a fake. */\n readonly module?: G9HostNativeModule;\n /** Where inset changes come from (default: {@link lynxInsetsEvents}). */\n readonly insetsEvents?: G9InsetsSubscriber;\n}\n\n/** What {@link createNativeHostServices} returns: the services for `G9Provider`, plus the optional haptic tick. */\nexport interface G9NativeServices {\n readonly host: G9HostServices;\n readonly preferences: G9PreferenceStore;\n /** A light haptic tick (Android `HapticFeedbackConstants`, iOS `UIImpactFeedbackGenerator`). */\n hapticTick(): void;\n /**\n * The app's private data directory, absolute (MAUI `FileSystem.AppDataDirectory`: Android `Context.filesDir`, iOS\n * the user `Library` directory), so the database keeps the path its MAUI version used. Pass it to a database\n * locator (`singleFileDatabaseLocator(dir + '/g9.db')` or `perUserDatabaseLocator({ root: dir, … })`).\n * Rejects with `host-data-directory` when the host reports none.\n */\n appDataDirectory(): Promise<string>;\n}\n\nconst NO_INSETS: G9SafeInsets = Object.freeze({ top: 0, end: 0, bottom: 0, start: 0 });\n\n/**\n * Android/iOS host services: `exit` moves the task to the back (Android; iOS has no programmatic exit, the module\n * ignores it), `hideKeyboard`, `setSoftInputMode` (Android), safe-area insets, and preferences in `SharedPreferences`\n * / `NSUserDefaults` (typed int/string, `null` string removes). Throws outside a host that linked `@g9tm/lynxcontrols-native`.\n */\nexport function createNativeHostServices(options: G9NativeHostOptions = {}): G9NativeServices {\n const native = options.module ?? nativeHostModule();\n if (!native) {\n throw new Error(\n 'NativeModules.G9HostModule is missing: add @g9tm/lynxcontrols-native to the app so Autolink links it.',\n );\n }\n const subscribe = options.insetsEvents ?? lynxInsetsEvents();\n let insets: G9SafeInsets = NO_INSETS;\n const listeners = new Set<(insets: G9SafeInsets) => void>();\n const publish = (next: G9SafeInsets) => {\n insets = Object.freeze({ top: next.top, end: next.end, bottom: next.bottom, start: next.start });\n for (const listener of Array.from(listeners)) listener(insets);\n };\n call<G9SafeInsets>((reply) => native.safeInsets(reply)).then(publish, () => undefined);\n subscribe(publish);\n\n const host: G9HostServices = {\n exit: () => native.moveToBack(),\n hideKeyboard: () => native.hideKeyboard(),\n getSafeInsets: () => insets,\n subscribeSafeInsets(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n setSoftInputMode: (mode) => native.setSoftInputMode(mode),\n };\n const preferences: G9PreferenceStore = {\n async getInt(key, defaultValue) {\n const stored = await call<G9NativePreference | null>((reply) => native.getPreference(key, reply));\n return stored?.type === 'int' ? stored.value : defaultValue;\n },\n async setInt(key, value) {\n await call<null>((reply) => native.setPreference(key, 'int', String(value), reply));\n },\n async getString(key, defaultValue) {\n const stored = await call<G9NativePreference | null>((reply) => native.getPreference(key, reply));\n return stored?.type === 'string' ? stored.value : defaultValue;\n },\n async setString(key, value) {\n await call<null>((reply) => native.setPreference(key, 'string', value, reply));\n },\n async remove(key) {\n await call<null>((reply) => native.setPreference(key, 'remove', null, reply));\n },\n async entries(prefix): Promise<ReadonlyArray<readonly [string, G9PreferenceValue]>> {\n const list = await call<Array<[string, number | string]>>((reply) => native.preferenceEntries(prefix, reply));\n return list.map(([key, value]) => [key, value] as const);\n },\n };\n const appDataDirectory = async (): Promise<string> => {\n const dir = await call<string>((reply) => native.appDataDirectory(reply), 'host-data-directory');\n if (typeof dir !== 'string' || dir.trim() === '') {\n throw new G9Error('host-data-directory', 'The host reported no app data directory.');\n }\n return dir;\n };\n return { host, preferences, hapticTick: () => native.hapticTick(), appDataDirectory };\n}\n"],"names":["nativeHostModule","_ref","NativeModules","undefined","call","invoke","missingCode","Promise","resolve","reject","envelope","e","G9Error","lynxInsetsEvents","listener","lynx","target","handler","insets","NO_INSETS","Object","createNativeHostServices","options","_options_module","_options_insetsEvents","native","Error","subscribe","listeners","Set","publish","next","Array","reply","host","mode","preferences","key","defaultValue","stored","value","String","prefix","list","appDataDirectory","dir"],"mappings":"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"}
1
+ {"version":3,"file":"services.js","sources":["../src/services.ts"],"sourcesContent":["// The mobile host services over `NativeModules.G9HostModule` (plan/specs/06 §7): G9HostServices and an asynchronous\n// G9PreferenceStore. Safe-area insets are read once and then follow the host's `g9:insets` global event.\nimport {\n G9Error,\n type G9HostServices,\n type G9PreferenceStore,\n type G9PreferenceValue,\n type G9SafeInsets,\n} from '@g9tm/lynxcontrols-foundation';\nimport type { G9HostNativeModule, G9NativeEnvelope, G9NativePreference } from './protocol';\n\ndeclare const NativeModules: { G9HostModule?: G9HostNativeModule } | 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.G9HostModule`, or `null` where the native library is not linked. */\nexport function nativeHostModule(): G9HostNativeModule | null {\n try {\n return (typeof NativeModules === 'undefined' ? undefined : NativeModules?.G9HostModule) ?? null;\n } catch {\n return null;\n }\n}\n\nfunction call<T>(\n invoke: (reply: (envelope: G9NativeEnvelope<T>) => void) => void,\n missingCode = 'preference-store',\n): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n invoke((envelope) => {\n if (envelope?.ok) resolve(envelope.value);\n else {\n const e = envelope?.error ?? { code: missingCode, message: 'The native module sent no reply.' };\n reject(new G9Error(e.code, e.message));\n }\n });\n });\n}\n\n/** Subscribes to the host's insets event; returns the unsubscribe function. */\nexport type G9InsetsSubscriber = (listener: (insets: G9SafeInsets) => void) => () => void;\n\n/** The default insets source: the `g9:insets` global event a host sends on rotation / resize (Lynx background thread). */\nexport function lynxInsetsEvents(): G9InsetsSubscriber {\n return (listener) => {\n const target = typeof lynx === 'undefined' ? undefined : lynx?.getJSModule?.('GlobalEventEmitter');\n if (!target) return () => undefined;\n const handler = ((insets: G9SafeInsets) => listener(insets)) as unknown as (...args: never[]) => void;\n target.addListener('g9:insets', handler);\n return () => target.removeListener('g9:insets', handler);\n };\n}\n\n/** Options of {@link createNativeHostServices}. */\nexport interface G9NativeHostOptions {\n /** The module (default: `NativeModules.G9HostModule`). Tests pass a fake. */\n readonly module?: G9HostNativeModule;\n /** Where inset changes come from (default: {@link lynxInsetsEvents}). */\n readonly insetsEvents?: G9InsetsSubscriber;\n}\n\n/** What {@link createNativeHostServices} returns: the services for `G9Provider`, plus the optional haptic tick. */\nexport interface G9NativeServices {\n readonly host: G9HostServices;\n readonly preferences: G9PreferenceStore;\n /** A light haptic tick (Android `HapticFeedbackConstants`, iOS `UIImpactFeedbackGenerator`). */\n hapticTick(): void;\n /**\n * The app's private data directory, absolute (MAUI `FileSystem.AppDataDirectory`: Android `Context.filesDir`, iOS\n * the user `Library` directory), so the database keeps the path its MAUI version used. Pass it to a database\n * locator (`singleFileDatabaseLocator(dir + '/g9.db')` or `perUserDatabaseLocator({ root: dir, … })`).\n * Rejects with `host-data-directory` when the host reports none.\n */\n appDataDirectory(): Promise<string>;\n}\n\nconst NO_INSETS: G9SafeInsets = Object.freeze({ top: 0, end: 0, bottom: 0, start: 0 });\n\n/**\n * Android/iOS host services: `exit` moves the task to the back (Android; iOS has no programmatic exit, the module\n * ignores it), `hideKeyboard`, `setSoftInputMode` (Android), safe-area insets, and preferences in `SharedPreferences`\n * / `NSUserDefaults` (typed int/string, `null` string removes). Throws outside a host that linked `@g9tm/lynxcontrols-native`.\n */\nexport function createNativeHostServices(options: G9NativeHostOptions = {}): G9NativeServices {\n const native = options.module ?? nativeHostModule();\n if (!native) {\n throw new Error(\n 'NativeModules.G9HostModule is missing: add @g9tm/lynxcontrols-native to the app so Autolink links it.',\n );\n }\n const subscribe = options.insetsEvents ?? lynxInsetsEvents();\n let insets: G9SafeInsets = NO_INSETS;\n const listeners = new Set<(insets: G9SafeInsets) => void>();\n const publish = (next: G9SafeInsets) => {\n insets = Object.freeze({ top: next.top, end: next.end, bottom: next.bottom, start: next.start });\n for (const listener of Array.from(listeners)) listener(insets);\n };\n // The first read answers later than it asks: an `insets` event that arrived meanwhile is newer and wins (the read\n // once overwrote a fresh report with a stale one — AgriPad Lynx on Android 10, 48 dp under every bottom bar).\n let reported = false;\n call<G9SafeInsets>((reply) => native.safeInsets(reply)).then(\n (first) => {\n if (!reported) publish(first);\n },\n () => undefined,\n );\n subscribe((next) => {\n reported = true;\n publish(next);\n });\n\n const host: G9HostServices = {\n exit: () => native.moveToBack(),\n hideKeyboard: () => native.hideKeyboard(),\n getSafeInsets: () => insets,\n subscribeSafeInsets(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n setSoftInputMode: (mode) => native.setSoftInputMode(mode),\n };\n const preferences: G9PreferenceStore = {\n async getInt(key, defaultValue) {\n const stored = await call<G9NativePreference | null>((reply) => native.getPreference(key, reply));\n return stored?.type === 'int' ? stored.value : defaultValue;\n },\n async setInt(key, value) {\n await call<null>((reply) => native.setPreference(key, 'int', String(value), reply));\n },\n async getString(key, defaultValue) {\n const stored = await call<G9NativePreference | null>((reply) => native.getPreference(key, reply));\n return stored?.type === 'string' ? stored.value : defaultValue;\n },\n async setString(key, value) {\n await call<null>((reply) => native.setPreference(key, 'string', value, reply));\n },\n async remove(key) {\n await call<null>((reply) => native.setPreference(key, 'remove', null, reply));\n },\n async entries(prefix): Promise<ReadonlyArray<readonly [string, G9PreferenceValue]>> {\n const list = await call<Array<[string, number | string]>>((reply) => native.preferenceEntries(prefix, reply));\n return list.map(([key, value]) => [key, value] as const);\n },\n };\n const appDataDirectory = async (): Promise<string> => {\n const dir = await call<string>((reply) => native.appDataDirectory(reply), 'host-data-directory');\n if (typeof dir !== 'string' || dir.trim() === '') {\n throw new G9Error('host-data-directory', 'The host reported no app data directory.');\n }\n return dir;\n };\n return { host, preferences, hapticTick: () => native.hapticTick(), appDataDirectory };\n}\n"],"names":["nativeHostModule","_ref","NativeModules","undefined","call","invoke","missingCode","Promise","resolve","reject","envelope","e","G9Error","lynxInsetsEvents","listener","lynx","target","handler","insets","NO_INSETS","Object","createNativeHostServices","options","_options_module","_options_insetsEvents","native","Error","subscribe","listeners","Set","publish","next","Array","reported","reply","first","host","mode","preferences","key","defaultValue","stored","value","String","prefix","list","appDataDirectory","dir"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  // XCTest target (simulator, macOS runner): the portable suite in G9NativeTestSuite.m. Paths come from this file's
2
2
  // location in the repository (the simulator can read the host file system).
3
3
  #import <XCTest/XCTest.h>
4
+ #import <UIKit/UIKit.h>
4
5
  #import "G9NativeTestSuite.h"
6
+ #import "G9PointerEventsHitTest.h"
5
7
 
6
8
  @interface G9NativeTests : XCTestCase
7
9
  @end
@@ -49,4 +51,13 @@
49
51
  XCTAssertEqualObjects([G9NativeTestSuite videoCore], @[]);
50
52
  }
51
53
 
54
+ // The patch must still find Lynx's private UILynxView after a Lynx upgrade, and a view that is not a rendered element
55
+ // (no sign) keeps Lynx's own answer. The `pointer-events: none` path needs a rendered page: the hosts' device rounds.
56
+ - (void)testPointerEventsHitTestInstalled {
57
+ XCTAssertTrue([G9PointerEventsHitTest installed]);
58
+ UIView *view = [[NSClassFromString(@"UILynxView") alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
59
+ XCTAssertEqual([view hitTest:CGPointMake(50, 50) withEvent:nil], view);
60
+ XCTAssertNil([view hitTest:CGPointMake(150, 50) withEvent:nil]);
61
+ }
62
+
52
63
  @end
@@ -4,7 +4,7 @@
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.4'
7
+ s.version = '1.4.7'
8
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' }
@@ -19,7 +19,9 @@ Pod::Spec.new do |s|
19
19
  # Speech: G9SpeechModule (dictation; the host's Info.plist carries NSSpeechRecognitionUsageDescription).
20
20
  s.frameworks = 'UIKit', 'AVFoundation', 'Speech'
21
21
  s.requires_arc = true
22
- s.dependency 'Lynx', '4.0.3'
22
+ # The whole Lynx 4.2 line, its -dev engine included (Trace and Recorder live only there; lynx-family/Specs pins
23
+ # every Lynx pod to one exact version, so a host that builds on 4.2.0-dev must find this pod willing too).
24
+ s.dependency 'Lynx', '>= 4.2.0-dev', '< 4.3'
23
25
 
24
26
  # XCTest on a simulator: the shared contract (packages/sqlite/contract/cases.json), the Kotlin-written transport
25
27
  # golden, interrupt, core edges and preferences (Tests/G9NativeTestSuite.m, also run on Linux by test:ios-core).
@@ -0,0 +1,22 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ NS_ASSUME_NONNULL_BEGIN
4
+
5
+ /**
6
+ * Makes UIKit honour Lynx's `pointer-events: none` (installed at load; nothing to call).
7
+ *
8
+ * Lynx 4.0.3 on iOS applies `pointer-events` only in its OWN event hit test. UIKit's hit test of a Lynx view
9
+ * (`UILynxView`) returns the view itself wherever no subview is hit, so an input-transparent full-size element — a
10
+ * G9Host overlay layer, a non-modal sheet's frame — still takes the UIKit touch, and a native view below it inside the
11
+ * same LynxView (a map, a video) never receives one. Android's ViewGroups fall through to the siblings below; this
12
+ * gives iOS the same rule: where the element itself would take the touch and its `pointer-events` resolves to `none`,
13
+ * the hit test answers nil and UIKit goes on to the views below. Its subviews hit-test as before.
14
+ */
15
+ @interface G9PointerEventsHitTest : NSObject
16
+
17
+ /** Whether the hit test is patched (false only when Lynx no longer has `UILynxView`). */
18
+ + (BOOL)installed;
19
+
20
+ @end
21
+
22
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,48 @@
1
+ #import "G9PointerEventsHitTest.h"
2
+
3
+ #import <Lynx/LynxEventTarget.h>
4
+ #import <Lynx/LynxUI.h>
5
+ #import <Lynx/LynxView.h>
6
+ #import <Lynx/UIView+Lynx.h>
7
+ #import <UIKit/UIKit.h>
8
+ #import <objc/runtime.h>
9
+
10
+ typedef UIView *_Nullable (*G9HitTestImp)(UIView *, SEL, CGPoint, UIEvent *_Nullable);
11
+
12
+ static G9HitTestImp gLynxHitTest;
13
+
14
+ static UIView *_Nullable G9HitTest(UIView *self, SEL cmd, CGPoint point, UIEvent *_Nullable event) {
15
+ UIView *hit = gLynxHitTest(self, cmd, point, event);
16
+ // Only the element's own area: a subview that took the touch keeps it.
17
+ if (hit != self || self.lynxSign == nil) return hit;
18
+ for (UIView *v = self.superview; v != nil; v = v.superview) {
19
+ if (![v isKindOfClass:LynxView.class]) continue;
20
+ LynxUI *ui = [(LynxView *)v findUIByIndex:self.lynxSign.intValue];
21
+ if (ui != nil && ui.view == self && [ui pointerEvents] == kLynxPointerEventsValueNone) return nil;
22
+ break;
23
+ }
24
+ return hit;
25
+ }
26
+
27
+ @implementation G9PointerEventsHitTest
28
+
29
+ static BOOL gInstalled;
30
+
31
+ + (void)load {
32
+ // `UILynxView` is private to Lynx (LynxUIView.m), hence the lookup by name.
33
+ Class cls = NSClassFromString(@"UILynxView");
34
+ Method m = cls ? class_getInstanceMethod(cls, @selector(hitTest:withEvent:)) : NULL;
35
+ if (m == NULL) {
36
+ NSLog(@"G9PointerEventsHitTest: UILynxView not found; pointer-events: none stays Lynx-only on this Lynx");
37
+ return;
38
+ }
39
+ // The class's own method (UILynxView overrides hitTest:withEvent:), so UIView's stays untouched.
40
+ gLynxHitTest = (G9HitTestImp)method_setImplementation(m, (IMP)G9HitTest);
41
+ gInstalled = YES;
42
+ }
43
+
44
+ + (BOOL)installed {
45
+ return gInstalled;
46
+ }
47
+
48
+ @end
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@g9tm/lynxcontrols-native",
3
- "version": "1.4.4",
3
+ "version": "1.4.7",
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.4",
42
- "@g9tm/lynxcontrols-sqlite": "1.4.4"
41
+ "@g9tm/lynxcontrols-foundation": "1.4.7",
42
+ "@g9tm/lynxcontrols-sqlite": "1.4.7"
43
43
  },
44
44
  "peerDependencies": {
45
- "@lynx-js/react": ">=0.126.2 <0.127.0"
45
+ "@lynx-js/react": ">=0.129.1 <0.130.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@g9tm/lynxcontrols-lynxtron": "1.4.4",
48
+ "@g9tm/lynxcontrols-lynxtron": "1.4.7",
49
49
  "@lynx-js/autolink-codegen": "0.6.0"
50
50
  }
51
51
  }