@thelacanians/vue-native-runtime 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _vue_runtime_core from '@vue/runtime-core';
2
- import { Directive, App, Component } from '@vue/runtime-core';
2
+ import { PropType, Directive, App, Component } from '@vue/runtime-core';
3
3
  export * from '@vue/runtime-core';
4
4
  import * as _vue_reactivity from '@vue/reactivity';
5
5
 
@@ -34,13 +34,148 @@ declare function createTextNode(text: string): NativeNode;
34
34
  * Comments are no-ops on the native side — they exist only so Vue
35
35
  * can track insertion points for conditional/list rendering.
36
36
  */
37
- declare function createCommentNode(text: string): NativeNode;
37
+ declare function createCommentNode(_text: string): NativeNode;
38
38
 
39
39
  /**
40
40
  * The Vue 3 custom renderer instance for native iOS views.
41
41
  */
42
42
  declare const render: _vue_runtime_core.RootRenderFunction<NativeNode>;
43
43
 
44
+ /**
45
+ * Style type definitions for Vue Native components.
46
+ *
47
+ * These interfaces provide TypeScript autocompletion and validation for
48
+ * style objects passed to createStyleSheet() and component style props.
49
+ */
50
+ type FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';
51
+ type FlexWrap = 'wrap' | 'nowrap' | 'wrap-reverse';
52
+ type JustifyContent = 'flex-start' | 'flex-end' | 'center' | 'space-between' | 'space-around' | 'space-evenly';
53
+ type AlignItems = 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
54
+ type AlignSelf = 'auto' | 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'baseline';
55
+ type AlignContent = 'flex-start' | 'flex-end' | 'center' | 'stretch' | 'space-between' | 'space-around';
56
+ type Position = 'relative' | 'absolute';
57
+ type Display = 'flex' | 'none';
58
+ type Overflow = 'visible' | 'hidden' | 'scroll';
59
+ type Direction = 'inherit' | 'ltr' | 'rtl';
60
+ type BorderStyle = 'solid' | 'dotted' | 'dashed';
61
+ type TextAlign = 'auto' | 'left' | 'right' | 'center' | 'justify';
62
+ type TextDecorationLine = 'none' | 'underline' | 'line-through' | 'underline line-through';
63
+ type TextDecorationStyle = 'solid' | 'double' | 'dotted' | 'dashed';
64
+ type TextTransform = 'none' | 'capitalize' | 'uppercase' | 'lowercase';
65
+ type FontStyle = 'normal' | 'italic';
66
+ type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
67
+ type ResizeMode = 'cover' | 'contain' | 'stretch' | 'center';
68
+ type ImportantForAccessibility = 'auto' | 'yes' | 'no' | 'no-hide-descendants';
69
+ interface ShadowOffset {
70
+ width: number;
71
+ height: number;
72
+ }
73
+ interface TransformValue {
74
+ translateX?: number;
75
+ translateY?: number;
76
+ scale?: number;
77
+ scaleX?: number;
78
+ scaleY?: number;
79
+ rotate?: string;
80
+ rotateX?: string;
81
+ rotateY?: string;
82
+ rotateZ?: string;
83
+ }
84
+ interface ViewStyle {
85
+ flex?: number;
86
+ flexDirection?: FlexDirection;
87
+ flexWrap?: FlexWrap;
88
+ flexGrow?: number;
89
+ flexShrink?: number;
90
+ flexBasis?: number | string;
91
+ justifyContent?: JustifyContent;
92
+ alignItems?: AlignItems;
93
+ alignSelf?: AlignSelf;
94
+ alignContent?: AlignContent;
95
+ position?: Position;
96
+ top?: number | string;
97
+ right?: number | string;
98
+ bottom?: number | string;
99
+ left?: number | string;
100
+ width?: number | string;
101
+ height?: number | string;
102
+ minWidth?: number | string;
103
+ minHeight?: number | string;
104
+ maxWidth?: number | string;
105
+ maxHeight?: number | string;
106
+ margin?: number | string;
107
+ marginTop?: number | string;
108
+ marginRight?: number | string;
109
+ marginBottom?: number | string;
110
+ marginLeft?: number | string;
111
+ marginHorizontal?: number | string;
112
+ marginVertical?: number | string;
113
+ padding?: number | string;
114
+ paddingTop?: number | string;
115
+ paddingRight?: number | string;
116
+ paddingBottom?: number | string;
117
+ paddingLeft?: number | string;
118
+ paddingHorizontal?: number | string;
119
+ paddingVertical?: number | string;
120
+ gap?: number;
121
+ rowGap?: number;
122
+ columnGap?: number;
123
+ direction?: Direction;
124
+ display?: Display;
125
+ overflow?: Overflow;
126
+ zIndex?: number;
127
+ aspectRatio?: number;
128
+ backgroundColor?: string;
129
+ opacity?: number;
130
+ borderWidth?: number;
131
+ borderTopWidth?: number;
132
+ borderRightWidth?: number;
133
+ borderBottomWidth?: number;
134
+ borderLeftWidth?: number;
135
+ borderColor?: string;
136
+ borderTopColor?: string;
137
+ borderRightColor?: string;
138
+ borderBottomColor?: string;
139
+ borderLeftColor?: string;
140
+ borderRadius?: number;
141
+ borderTopLeftRadius?: number;
142
+ borderTopRightRadius?: number;
143
+ borderBottomLeftRadius?: number;
144
+ borderBottomRightRadius?: number;
145
+ borderStyle?: BorderStyle;
146
+ shadowColor?: string;
147
+ shadowOffset?: ShadowOffset;
148
+ shadowOpacity?: number;
149
+ shadowRadius?: number;
150
+ transform?: TransformValue[];
151
+ accessibilityLabel?: string;
152
+ accessibilityRole?: string;
153
+ accessibilityHint?: string;
154
+ accessibilityState?: Record<string, any>;
155
+ accessibilityValue?: Record<string, any>;
156
+ accessible?: boolean;
157
+ importantForAccessibility?: ImportantForAccessibility;
158
+ }
159
+ interface TextStyle extends ViewStyle {
160
+ color?: string;
161
+ fontSize?: number;
162
+ fontWeight?: FontWeight;
163
+ fontFamily?: string;
164
+ fontStyle?: FontStyle;
165
+ lineHeight?: number;
166
+ letterSpacing?: number;
167
+ textAlign?: TextAlign;
168
+ textDecorationLine?: TextDecorationLine;
169
+ textDecorationStyle?: TextDecorationStyle;
170
+ textDecorationColor?: string;
171
+ textTransform?: TextTransform;
172
+ includeFontPadding?: boolean;
173
+ }
174
+ interface ImageStyle extends ViewStyle {
175
+ resizeMode?: ResizeMode;
176
+ tintColor?: string;
177
+ }
178
+
44
179
  /**
45
180
  * StyleSheet utility for Vue Native.
46
181
  *
@@ -56,6 +191,8 @@ declare const render: _vue_runtime_core.RootRenderFunction<NativeNode>;
56
191
  declare const validStyleProperties: ReadonlySet<string>;
57
192
  /**
58
193
  * A single style declaration — a flat object of style properties.
194
+ * Can be a ViewStyle, TextStyle, or ImageStyle from the typed interfaces,
195
+ * or a plain record for backwards compatibility.
59
196
  */
60
197
  type StyleProp = Record<string, any>;
61
198
  /**
@@ -65,6 +202,9 @@ type StyleProp = Record<string, any>;
65
202
  type StyleSheet<T extends Record<string, StyleProp>> = Readonly<{
66
203
  [K in keyof T]: Readonly<T[K]>;
67
204
  }>;
205
+
206
+ /** Union of all valid style types for createStyleSheet values */
207
+ type AnyStyle = ViewStyle | TextStyle | ImageStyle;
68
208
  /**
69
209
  * Create a style sheet object. This is the recommended way to define styles
70
210
  * for Vue Native components.
@@ -93,6 +233,233 @@ type StyleSheet<T extends Record<string, StyleProp>> = Readonly<{
93
233
  */
94
234
  declare function createStyleSheet<T extends Record<string, StyleProp>>(styles: T): StyleSheet<T>;
95
235
 
236
+ /**
237
+ * TypeScript prop interfaces for Vue Native components.
238
+ *
239
+ * These interfaces describe the props accepted by each built-in component.
240
+ * They can be used for documentation, type-checking render functions,
241
+ * or building abstractions on top of the built-in components.
242
+ */
243
+
244
+ interface AccessibilityProps {
245
+ accessibilityLabel?: string;
246
+ accessibilityRole?: string;
247
+ accessibilityHint?: string;
248
+ accessibilityState?: Record<string, any>;
249
+ }
250
+ interface VViewProps extends AccessibilityProps {
251
+ style?: ViewStyle;
252
+ testID?: string;
253
+ }
254
+ interface VTextProps extends AccessibilityProps {
255
+ style?: TextStyle;
256
+ numberOfLines?: number;
257
+ selectable?: boolean;
258
+ }
259
+ interface VButtonProps extends AccessibilityProps {
260
+ style?: ViewStyle;
261
+ disabled?: boolean;
262
+ activeOpacity?: number;
263
+ onPress?: () => void;
264
+ onLongPress?: () => void;
265
+ }
266
+ interface VInputProps extends AccessibilityProps {
267
+ modelValue?: string;
268
+ placeholder?: string;
269
+ secureTextEntry?: boolean;
270
+ keyboardType?: 'default' | 'numeric' | 'email-address' | 'phone-pad' | 'number-pad' | 'decimal-pad' | 'url';
271
+ returnKeyType?: 'done' | 'go' | 'next' | 'search' | 'send';
272
+ autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';
273
+ autoCorrect?: boolean;
274
+ maxLength?: number;
275
+ multiline?: boolean;
276
+ style?: TextStyle;
277
+ }
278
+ interface VSwitchProps extends AccessibilityProps {
279
+ modelValue?: boolean;
280
+ disabled?: boolean;
281
+ onTintColor?: string;
282
+ thumbTintColor?: string;
283
+ style?: ViewStyle;
284
+ }
285
+ interface VImageProps extends AccessibilityProps {
286
+ source: {
287
+ uri: string;
288
+ };
289
+ resizeMode?: ResizeMode;
290
+ style?: ImageStyle;
291
+ testID?: string;
292
+ }
293
+ interface VScrollViewProps extends AccessibilityProps {
294
+ horizontal?: boolean;
295
+ showsVerticalScrollIndicator?: boolean;
296
+ showsHorizontalScrollIndicator?: boolean;
297
+ scrollEnabled?: boolean;
298
+ bounces?: boolean;
299
+ pagingEnabled?: boolean;
300
+ contentContainerStyle?: ViewStyle;
301
+ refreshing?: boolean;
302
+ style?: ViewStyle;
303
+ }
304
+ interface VActivityIndicatorProps {
305
+ animating?: boolean;
306
+ color?: string;
307
+ size?: 'small' | 'medium' | 'large';
308
+ hidesWhenStopped?: boolean;
309
+ style?: ViewStyle;
310
+ }
311
+ interface VSliderProps extends AccessibilityProps {
312
+ modelValue?: number;
313
+ min?: number;
314
+ max?: number;
315
+ style?: ViewStyle;
316
+ }
317
+ interface VListProps {
318
+ data: any[];
319
+ keyExtractor?: (item: any, index: number) => string;
320
+ estimatedItemHeight?: number;
321
+ showsScrollIndicator?: boolean;
322
+ bounces?: boolean;
323
+ horizontal?: boolean;
324
+ style?: ViewStyle;
325
+ }
326
+ interface VModalProps {
327
+ visible?: boolean;
328
+ style?: ViewStyle;
329
+ }
330
+ interface VAlertDialogProps {
331
+ visible?: boolean;
332
+ title?: string;
333
+ message?: string;
334
+ buttons?: Array<{
335
+ label: string;
336
+ style?: 'default' | 'cancel' | 'destructive';
337
+ }>;
338
+ }
339
+ interface VStatusBarProps {
340
+ barStyle?: 'default' | 'light-content' | 'dark-content';
341
+ hidden?: boolean;
342
+ animated?: boolean;
343
+ }
344
+ interface VWebViewProps {
345
+ source: {
346
+ uri?: string;
347
+ html?: string;
348
+ };
349
+ style?: ViewStyle;
350
+ javaScriptEnabled?: boolean;
351
+ }
352
+ interface VProgressBarProps {
353
+ progress?: number;
354
+ progressTintColor?: string;
355
+ trackTintColor?: string;
356
+ animated?: boolean;
357
+ style?: ViewStyle;
358
+ }
359
+ interface VPickerProps {
360
+ mode?: 'date' | 'time' | 'datetime';
361
+ value?: number;
362
+ minimumDate?: number;
363
+ maximumDate?: number;
364
+ minuteInterval?: number;
365
+ style?: ViewStyle;
366
+ }
367
+ interface VSegmentedControlProps {
368
+ values: string[];
369
+ selectedIndex?: number;
370
+ tintColor?: string;
371
+ enabled?: boolean;
372
+ style?: ViewStyle;
373
+ }
374
+ interface VActionSheetProps {
375
+ visible?: boolean;
376
+ title?: string;
377
+ message?: string;
378
+ actions?: Array<{
379
+ label: string;
380
+ style?: 'default' | 'cancel' | 'destructive';
381
+ }>;
382
+ }
383
+ interface VKeyboardAvoidingProps {
384
+ style?: ViewStyle;
385
+ testID?: string;
386
+ }
387
+ interface VSafeAreaProps {
388
+ style?: ViewStyle;
389
+ }
390
+ interface VRefreshControlProps {
391
+ refreshing?: boolean;
392
+ onRefresh?: () => void;
393
+ tintColor?: string;
394
+ title?: string;
395
+ style?: ViewStyle;
396
+ }
397
+ interface VPressableProps extends AccessibilityProps {
398
+ style?: ViewStyle;
399
+ disabled?: boolean;
400
+ activeOpacity?: number;
401
+ onPress?: () => void;
402
+ onPressIn?: () => void;
403
+ onPressOut?: () => void;
404
+ onLongPress?: () => void;
405
+ }
406
+ interface VCheckboxProps extends AccessibilityProps {
407
+ modelValue?: boolean;
408
+ disabled?: boolean;
409
+ label?: string;
410
+ checkColor?: string;
411
+ tintColor?: string;
412
+ style?: ViewStyle;
413
+ }
414
+ interface VRadioProps extends AccessibilityProps {
415
+ modelValue?: string;
416
+ options: Array<{
417
+ label: string;
418
+ value: string;
419
+ }>;
420
+ disabled?: boolean;
421
+ tintColor?: string;
422
+ style?: ViewStyle;
423
+ }
424
+ interface VDropdownProps extends AccessibilityProps {
425
+ modelValue?: string;
426
+ options: Array<{
427
+ label: string;
428
+ value: string;
429
+ }>;
430
+ placeholder?: string;
431
+ disabled?: boolean;
432
+ tintColor?: string;
433
+ style?: ViewStyle;
434
+ }
435
+ interface VVideoProps extends AccessibilityProps {
436
+ source: {
437
+ uri: string;
438
+ };
439
+ autoplay?: boolean;
440
+ loop?: boolean;
441
+ muted?: boolean;
442
+ paused?: boolean;
443
+ controls?: boolean;
444
+ volume?: number;
445
+ resizeMode?: 'cover' | 'contain' | 'stretch' | 'center';
446
+ poster?: string;
447
+ style?: ViewStyle;
448
+ testID?: string;
449
+ }
450
+ interface VSectionListProps {
451
+ sections: Array<{
452
+ title: string;
453
+ data: any[];
454
+ }>;
455
+ keyExtractor?: (item: any, index: number) => string;
456
+ estimatedItemHeight?: number;
457
+ stickySectionHeaders?: boolean;
458
+ showsScrollIndicator?: boolean;
459
+ bounces?: boolean;
460
+ style?: ViewStyle;
461
+ }
462
+
96
463
  /**
97
464
  * VView — the fundamental container component in Vue Native.
98
465
  *
@@ -107,15 +474,21 @@ declare function createStyleSheet<T extends Record<string, StyleProp>>(styles: T
107
474
  * ```
108
475
  */
109
476
  declare const VView: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
110
- style: ObjectConstructor;
477
+ style: PropType<ViewStyle>;
111
478
  testID: StringConstructor;
112
479
  accessibilityLabel: StringConstructor;
480
+ accessibilityRole: StringConstructor;
481
+ accessibilityHint: StringConstructor;
482
+ accessibilityState: ObjectConstructor;
113
483
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
114
484
  [key: string]: any;
115
485
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
116
- style: ObjectConstructor;
486
+ style: PropType<ViewStyle>;
117
487
  testID: StringConstructor;
118
488
  accessibilityLabel: StringConstructor;
489
+ accessibilityRole: StringConstructor;
490
+ accessibilityHint: StringConstructor;
491
+ accessibilityState: ObjectConstructor;
119
492
  }>> & Readonly<{}>, {}, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
120
493
 
121
494
  /**
@@ -135,23 +508,29 @@ declare const VView: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extract
135
508
  * ```
136
509
  */
137
510
  declare const VText: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
138
- style: ObjectConstructor;
511
+ style: PropType<TextStyle>;
139
512
  numberOfLines: NumberConstructor;
140
513
  selectable: {
141
514
  type: BooleanConstructor;
142
515
  default: boolean;
143
516
  };
517
+ accessibilityLabel: StringConstructor;
144
518
  accessibilityRole: StringConstructor;
519
+ accessibilityHint: StringConstructor;
520
+ accessibilityState: ObjectConstructor;
145
521
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
146
522
  [key: string]: any;
147
523
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
148
- style: ObjectConstructor;
524
+ style: PropType<TextStyle>;
149
525
  numberOfLines: NumberConstructor;
150
526
  selectable: {
151
527
  type: BooleanConstructor;
152
528
  default: boolean;
153
529
  };
530
+ accessibilityLabel: StringConstructor;
154
531
  accessibilityRole: StringConstructor;
532
+ accessibilityHint: StringConstructor;
533
+ accessibilityState: ObjectConstructor;
155
534
  }>> & Readonly<{}>, {
156
535
  selectable: boolean;
157
536
  }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
@@ -175,7 +554,7 @@ declare const VText: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extract
175
554
  * ```
176
555
  */
177
556
  declare const VButton: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
178
- style: ObjectConstructor;
557
+ style: PropType<ViewStyle>;
179
558
  disabled: {
180
559
  type: BooleanConstructor;
181
560
  default: boolean;
@@ -184,12 +563,16 @@ declare const VButton: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
184
563
  type: NumberConstructor;
185
564
  default: number;
186
565
  };
187
- onPress: FunctionConstructor;
188
- onLongPress: FunctionConstructor;
566
+ onPress: PropType<() => void>;
567
+ onLongPress: PropType<() => void>;
568
+ accessibilityLabel: StringConstructor;
569
+ accessibilityRole: StringConstructor;
570
+ accessibilityHint: StringConstructor;
571
+ accessibilityState: ObjectConstructor;
189
572
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
190
573
  [key: string]: any;
191
574
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
192
- style: ObjectConstructor;
575
+ style: PropType<ViewStyle>;
193
576
  disabled: {
194
577
  type: BooleanConstructor;
195
578
  default: boolean;
@@ -198,8 +581,12 @@ declare const VButton: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
198
581
  type: NumberConstructor;
199
582
  default: number;
200
583
  };
201
- onPress: FunctionConstructor;
202
- onLongPress: FunctionConstructor;
584
+ onPress: PropType<() => void>;
585
+ onLongPress: PropType<() => void>;
586
+ accessibilityLabel: StringConstructor;
587
+ accessibilityRole: StringConstructor;
588
+ accessibilityHint: StringConstructor;
589
+ accessibilityState: ObjectConstructor;
203
590
  }>> & Readonly<{}>, {
204
591
  disabled: boolean;
205
592
  activeOpacity: number;
@@ -257,7 +644,11 @@ declare const VInput: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extrac
257
644
  type: BooleanConstructor;
258
645
  default: boolean;
259
646
  };
260
- style: ObjectConstructor;
647
+ style: PropType<TextStyle>;
648
+ accessibilityLabel: StringConstructor;
649
+ accessibilityRole: StringConstructor;
650
+ accessibilityHint: StringConstructor;
651
+ accessibilityState: ObjectConstructor;
261
652
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
262
653
  [key: string]: any;
263
654
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("update:modelValue" | "focus" | "blur" | "submit")[], "update:modelValue" | "focus" | "blur" | "submit", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
@@ -291,7 +682,11 @@ declare const VInput: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extrac
291
682
  type: BooleanConstructor;
292
683
  default: boolean;
293
684
  };
294
- style: ObjectConstructor;
685
+ style: PropType<TextStyle>;
686
+ accessibilityLabel: StringConstructor;
687
+ accessibilityRole: StringConstructor;
688
+ accessibilityHint: StringConstructor;
689
+ accessibilityState: ObjectConstructor;
295
690
  }>> & Readonly<{
296
691
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
297
692
  onFocus?: ((...args: any[]) => any) | undefined;
@@ -328,7 +723,11 @@ declare const VSwitch: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
328
723
  };
329
724
  onTintColor: StringConstructor;
330
725
  thumbTintColor: StringConstructor;
331
- style: ObjectConstructor;
726
+ style: PropType<ViewStyle>;
727
+ accessibilityLabel: StringConstructor;
728
+ accessibilityRole: StringConstructor;
729
+ accessibilityHint: StringConstructor;
730
+ accessibilityState: ObjectConstructor;
332
731
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
333
732
  [key: string]: any;
334
733
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("update:modelValue" | "change")[], "update:modelValue" | "change", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
@@ -342,7 +741,11 @@ declare const VSwitch: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
342
741
  };
343
742
  onTintColor: StringConstructor;
344
743
  thumbTintColor: StringConstructor;
345
- style: ObjectConstructor;
744
+ style: PropType<ViewStyle>;
745
+ accessibilityLabel: StringConstructor;
746
+ accessibilityRole: StringConstructor;
747
+ accessibilityHint: StringConstructor;
748
+ accessibilityState: ObjectConstructor;
346
749
  }>> & Readonly<{
347
750
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
348
751
  onChange?: ((...args: any[]) => any) | undefined;
@@ -376,7 +779,7 @@ declare const VActivityIndicator: _vue_runtime_core.DefineComponent<_vue_runtime
376
779
  type: BooleanConstructor;
377
780
  default: boolean;
378
781
  };
379
- style: ObjectConstructor;
782
+ style: PropType<ViewStyle>;
380
783
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
381
784
  [key: string]: any;
382
785
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
@@ -393,7 +796,7 @@ declare const VActivityIndicator: _vue_runtime_core.DefineComponent<_vue_runtime
393
796
  type: BooleanConstructor;
394
797
  default: boolean;
395
798
  };
396
- style: ObjectConstructor;
799
+ style: PropType<ViewStyle>;
397
800
  }>> & Readonly<{}>, {
398
801
  size: string;
399
802
  animating: boolean;
@@ -441,13 +844,17 @@ declare const VScrollView: _vue_runtime_core.DefineComponent<_vue_runtime_core.E
441
844
  type: BooleanConstructor;
442
845
  default: boolean;
443
846
  };
444
- contentContainerStyle: ObjectConstructor;
847
+ contentContainerStyle: PropType<ViewStyle>;
445
848
  /** Whether the pull-to-refresh indicator is active */
446
849
  refreshing: {
447
850
  type: BooleanConstructor;
448
851
  default: boolean;
449
852
  };
450
- style: ObjectConstructor;
853
+ style: PropType<ViewStyle>;
854
+ accessibilityLabel: StringConstructor;
855
+ accessibilityRole: StringConstructor;
856
+ accessibilityHint: StringConstructor;
857
+ accessibilityState: ObjectConstructor;
451
858
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
452
859
  [key: string]: any;
453
860
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("scroll" | "refresh")[], "scroll" | "refresh", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
@@ -475,13 +882,17 @@ declare const VScrollView: _vue_runtime_core.DefineComponent<_vue_runtime_core.E
475
882
  type: BooleanConstructor;
476
883
  default: boolean;
477
884
  };
478
- contentContainerStyle: ObjectConstructor;
885
+ contentContainerStyle: PropType<ViewStyle>;
479
886
  /** Whether the pull-to-refresh indicator is active */
480
887
  refreshing: {
481
888
  type: BooleanConstructor;
482
889
  default: boolean;
483
890
  };
484
- style: ObjectConstructor;
891
+ style: PropType<ViewStyle>;
892
+ accessibilityLabel: StringConstructor;
893
+ accessibilityRole: StringConstructor;
894
+ accessibilityHint: StringConstructor;
895
+ accessibilityState: ObjectConstructor;
485
896
  }>> & Readonly<{
486
897
  onScroll?: ((...args: any[]) => any) | undefined;
487
898
  onRefresh?: ((...args: any[]) => any) | undefined;
@@ -520,9 +931,12 @@ declare const VImage: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extrac
520
931
  type: () => "cover" | "contain" | "stretch" | "center";
521
932
  default: string;
522
933
  };
523
- style: ObjectConstructor;
934
+ style: PropType<ImageStyle>;
524
935
  testID: StringConstructor;
525
936
  accessibilityLabel: StringConstructor;
937
+ accessibilityRole: StringConstructor;
938
+ accessibilityHint: StringConstructor;
939
+ accessibilityState: ObjectConstructor;
526
940
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
527
941
  [key: string]: any;
528
942
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("load" | "error")[], "load" | "error", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
@@ -533,9 +947,12 @@ declare const VImage: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extrac
533
947
  type: () => "cover" | "contain" | "stretch" | "center";
534
948
  default: string;
535
949
  };
536
- style: ObjectConstructor;
950
+ style: PropType<ImageStyle>;
537
951
  testID: StringConstructor;
538
952
  accessibilityLabel: StringConstructor;
953
+ accessibilityRole: StringConstructor;
954
+ accessibilityHint: StringConstructor;
955
+ accessibilityState: ObjectConstructor;
539
956
  }>> & Readonly<{
540
957
  onLoad?: ((...args: any[]) => any) | undefined;
541
958
  onError?: ((...args: any[]) => any) | undefined;
@@ -558,29 +975,29 @@ declare const VImage: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extrac
558
975
  * ```
559
976
  */
560
977
  declare const VKeyboardAvoiding: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
561
- style: ObjectConstructor;
978
+ style: PropType<ViewStyle>;
562
979
  testID: StringConstructor;
563
980
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
564
981
  [key: string]: any;
565
982
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
566
- style: ObjectConstructor;
983
+ style: PropType<ViewStyle>;
567
984
  testID: StringConstructor;
568
985
  }>> & Readonly<{}>, {}, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
569
986
 
570
987
  declare const VSafeArea: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
571
988
  style: {
572
- type: ObjectConstructor;
989
+ type: PropType<ViewStyle>;
573
990
  default: () => {};
574
991
  };
575
992
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
576
993
  [key: string]: any;
577
994
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
578
995
  style: {
579
- type: ObjectConstructor;
996
+ type: PropType<ViewStyle>;
580
997
  default: () => {};
581
998
  };
582
999
  }>> & Readonly<{}>, {
583
- style: Record<string, any>;
1000
+ style: ViewStyle;
584
1001
  }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
585
1002
 
586
1003
  declare const VSlider: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
@@ -597,9 +1014,13 @@ declare const VSlider: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
597
1014
  default: number;
598
1015
  };
599
1016
  style: {
600
- type: ObjectConstructor;
1017
+ type: PropType<ViewStyle>;
601
1018
  default: () => {};
602
1019
  };
1020
+ accessibilityLabel: StringConstructor;
1021
+ accessibilityRole: StringConstructor;
1022
+ accessibilityHint: StringConstructor;
1023
+ accessibilityState: ObjectConstructor;
603
1024
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
604
1025
  [key: string]: any;
605
1026
  }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("update:modelValue" | "change")[], "update:modelValue" | "change", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
@@ -616,14 +1037,18 @@ declare const VSlider: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
616
1037
  default: number;
617
1038
  };
618
1039
  style: {
619
- type: ObjectConstructor;
1040
+ type: PropType<ViewStyle>;
620
1041
  default: () => {};
621
1042
  };
1043
+ accessibilityLabel: StringConstructor;
1044
+ accessibilityRole: StringConstructor;
1045
+ accessibilityHint: StringConstructor;
1046
+ accessibilityState: ObjectConstructor;
622
1047
  }>> & Readonly<{
623
1048
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
624
1049
  onChange?: ((...args: any[]) => any) | undefined;
625
1050
  }>, {
626
- style: Record<string, any>;
1051
+ style: ViewStyle;
627
1052
  modelValue: number;
628
1053
  min: number;
629
1054
  max: number;
@@ -681,7 +1106,7 @@ declare const VList: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extract
681
1106
  default: boolean;
682
1107
  };
683
1108
  style: {
684
- type: ObjectConstructor;
1109
+ type: PropType<ViewStyle>;
685
1110
  default: () => {};
686
1111
  };
687
1112
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
@@ -718,14 +1143,14 @@ declare const VList: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extract
718
1143
  default: boolean;
719
1144
  };
720
1145
  style: {
721
- type: ObjectConstructor;
1146
+ type: PropType<ViewStyle>;
722
1147
  default: () => {};
723
1148
  };
724
1149
  }>> & Readonly<{
725
1150
  onScroll?: ((...args: any[]) => any) | undefined;
726
1151
  onEndReached?: ((...args: any[]) => any) | undefined;
727
1152
  }>, {
728
- style: Record<string, any>;
1153
+ style: ViewStyle;
729
1154
  horizontal: boolean;
730
1155
  bounces: boolean;
731
1156
  keyExtractor: (item: any, index: number) => string;
@@ -748,7 +1173,7 @@ declare const VModal: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extrac
748
1173
  default: boolean;
749
1174
  };
750
1175
  style: {
751
- type: ObjectConstructor;
1176
+ type: PropType<ViewStyle>;
752
1177
  default: () => {};
753
1178
  };
754
1179
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
@@ -759,13 +1184,13 @@ declare const VModal: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extrac
759
1184
  default: boolean;
760
1185
  };
761
1186
  style: {
762
- type: ObjectConstructor;
1187
+ type: PropType<ViewStyle>;
763
1188
  default: () => {};
764
1189
  };
765
1190
  }>> & Readonly<{
766
1191
  onDismiss?: ((...args: any[]) => any) | undefined;
767
1192
  }>, {
768
- style: Record<string, any>;
1193
+ style: ViewStyle;
769
1194
  visible: boolean;
770
1195
  }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
771
1196
 
@@ -890,7 +1315,7 @@ declare const VWebView: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extr
890
1315
  required: true;
891
1316
  };
892
1317
  style: {
893
- type: ObjectConstructor;
1318
+ type: PropType<ViewStyle>;
894
1319
  default: () => {};
895
1320
  };
896
1321
  javaScriptEnabled: {
@@ -905,7 +1330,7 @@ declare const VWebView: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extr
905
1330
  required: true;
906
1331
  };
907
1332
  style: {
908
- type: ObjectConstructor;
1333
+ type: PropType<ViewStyle>;
909
1334
  default: () => {};
910
1335
  };
911
1336
  javaScriptEnabled: {
@@ -917,7 +1342,7 @@ declare const VWebView: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extr
917
1342
  onError?: ((...args: any[]) => any) | undefined;
918
1343
  onMessage?: ((...args: any[]) => any) | undefined;
919
1344
  }>, {
920
- style: Record<string, any>;
1345
+ style: ViewStyle;
921
1346
  javaScriptEnabled: boolean;
922
1347
  }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
923
1348
 
@@ -945,7 +1370,7 @@ declare const VProgressBar: _vue_runtime_core.DefineComponent<_vue_runtime_core.
945
1370
  default: boolean;
946
1371
  };
947
1372
  style: {
948
- type: ObjectConstructor;
1373
+ type: PropType<ViewStyle>;
949
1374
  default: () => {};
950
1375
  };
951
1376
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
@@ -968,11 +1393,11 @@ declare const VProgressBar: _vue_runtime_core.DefineComponent<_vue_runtime_core.
968
1393
  default: boolean;
969
1394
  };
970
1395
  style: {
971
- type: ObjectConstructor;
1396
+ type: PropType<ViewStyle>;
972
1397
  default: () => {};
973
1398
  };
974
1399
  }>> & Readonly<{}>, {
975
- style: Record<string, any>;
1400
+ style: ViewStyle;
976
1401
  animated: boolean;
977
1402
  progress: number;
978
1403
  progressTintColor: string;
@@ -1007,7 +1432,7 @@ declare const VPicker: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
1007
1432
  default: number;
1008
1433
  };
1009
1434
  style: {
1010
- type: ObjectConstructor;
1435
+ type: PropType<ViewStyle>;
1011
1436
  default: () => {};
1012
1437
  };
1013
1438
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
@@ -1034,13 +1459,13 @@ declare const VPicker: _vue_runtime_core.DefineComponent<_vue_runtime_core.Extra
1034
1459
  default: number;
1035
1460
  };
1036
1461
  style: {
1037
- type: ObjectConstructor;
1462
+ type: PropType<ViewStyle>;
1038
1463
  default: () => {};
1039
1464
  };
1040
1465
  }>> & Readonly<{
1041
1466
  onChange?: ((...args: any[]) => any) | undefined;
1042
1467
  }>, {
1043
- style: Record<string, any>;
1468
+ style: ViewStyle;
1044
1469
  mode: "date" | "time" | "datetime";
1045
1470
  value: number;
1046
1471
  minimumDate: number;
@@ -1076,7 +1501,7 @@ declare const VSegmentedControl: _vue_runtime_core.DefineComponent<_vue_runtime_
1076
1501
  default: boolean;
1077
1502
  };
1078
1503
  style: {
1079
- type: ObjectConstructor;
1504
+ type: PropType<ViewStyle>;
1080
1505
  default: () => {};
1081
1506
  };
1082
1507
  }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
@@ -1099,13 +1524,13 @@ declare const VSegmentedControl: _vue_runtime_core.DefineComponent<_vue_runtime_
1099
1524
  default: boolean;
1100
1525
  };
1101
1526
  style: {
1102
- type: ObjectConstructor;
1527
+ type: PropType<ViewStyle>;
1103
1528
  default: () => {};
1104
1529
  };
1105
1530
  }>> & Readonly<{
1106
1531
  onChange?: ((...args: any[]) => any) | undefined;
1107
1532
  }>, {
1108
- style: Record<string, any>;
1533
+ style: ViewStyle;
1109
1534
  selectedIndex: number;
1110
1535
  tintColor: string;
1111
1536
  enabled: boolean;
@@ -1178,100 +1603,650 @@ declare const VActionSheet: _vue_runtime_core.DefineComponent<_vue_runtime_core.
1178
1603
  }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
1179
1604
 
1180
1605
  /**
1181
- * v-show directive for Vue Native.
1182
- * Maps to the 'hidden' prop on native views (view.isHidden in Swift).
1183
- */
1184
- declare const vShow: Directive<NativeNode>;
1185
-
1186
- /**
1187
- * Haptic feedback composable.
1188
- *
1189
- * Wraps the native Haptics module to provide tactile feedback.
1606
+ * VRefreshControl a pull-to-refresh indicator component.
1190
1607
  *
1191
- * @example
1192
- * ```ts
1193
- * const { vibrate, selectionChanged } = useHaptics()
1194
- * vibrate('medium')
1195
- * ```
1196
- */
1197
- declare function useHaptics(): {
1198
- vibrate: (style?: "light" | "medium" | "heavy" | "rigid" | "soft") => Promise<void>;
1199
- notificationFeedback: (type?: "success" | "warning" | "error") => Promise<void>;
1200
- selectionChanged: () => Promise<void>;
1201
- };
1202
-
1203
- /**
1204
- * Async key-value storage composable backed by UserDefaults.
1608
+ * Designed to be used as a child of VScrollView or VList. When the user
1609
+ * pulls down past the scroll boundary, the onRefresh callback fires.
1610
+ * Set the refreshing prop to true while loading data, then false when done.
1205
1611
  *
1206
- * All operations are Promise-based and run on a background thread.
1612
+ * On iOS this attaches a UIRefreshControl to the parent UIScrollView.
1613
+ * On Android this configures the parent SwipeRefreshLayout.
1207
1614
  *
1208
1615
  * @example
1209
- * ```ts
1210
- * const storage = useAsyncStorage()
1211
- * await storage.setItem('theme', 'dark')
1212
- * const theme = await storage.getItem('theme')
1616
+ * ```vue
1617
+ * <VScrollView :style="{ flex: 1 }">
1618
+ * <VRefreshControl
1619
+ * :refreshing="isLoading"
1620
+ * :onRefresh="handleRefresh"
1621
+ * tintColor="#007AFF"
1622
+ * />
1623
+ * <VText>Content here</VText>
1624
+ * </VScrollView>
1213
1625
  * ```
1214
1626
  */
1215
- declare function useAsyncStorage(): {
1216
- getItem: (key: string) => Promise<string | null>;
1217
- setItem: (key: string, value: string) => Promise<void>;
1218
- removeItem: (key: string) => Promise<void>;
1219
- getAllKeys: () => Promise<string[]>;
1220
- clear: () => Promise<void>;
1221
- };
1627
+ declare const VRefreshControl: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
1628
+ refreshing: {
1629
+ type: BooleanConstructor;
1630
+ default: boolean;
1631
+ };
1632
+ onRefresh: PropType<() => void>;
1633
+ tintColor: StringConstructor;
1634
+ title: StringConstructor;
1635
+ style: PropType<ViewStyle>;
1636
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
1637
+ [key: string]: any;
1638
+ }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
1639
+ refreshing: {
1640
+ type: BooleanConstructor;
1641
+ default: boolean;
1642
+ };
1643
+ onRefresh: PropType<() => void>;
1644
+ tintColor: StringConstructor;
1645
+ title: StringConstructor;
1646
+ style: PropType<ViewStyle>;
1647
+ }>> & Readonly<{}>, {
1648
+ refreshing: boolean;
1649
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
1222
1650
 
1223
1651
  /**
1224
- * Clipboard composable providing read/write access to UIPasteboard.
1225
- *
1226
- * `content` is a reactive ref that updates when `paste()` is called.
1652
+ * VPressable a generic pressable container component.
1227
1653
  *
1228
- * @example
1229
- * ```ts
1230
- * const { copy, paste, content } = useClipboard()
1231
- * await copy('Hello, World!')
1232
- * const text = await paste()
1233
- * ```
1234
- */
1235
- declare function useClipboard(): {
1236
- copy: (text: string) => Promise<void>;
1237
- paste: () => Promise<string>;
1238
- content: _vue_reactivity.Ref<string, string>;
1239
- };
1240
-
1241
- /**
1242
- * Device information composable.
1654
+ * Like VButton but without any default styling or built-in text label.
1655
+ * Wraps any children in a touchable container with configurable press
1656
+ * feedback. Supports press, long press, pressIn, and pressOut events.
1243
1657
  *
1244
- * Fetches device info once on mount and exposes reactive refs.
1658
+ * On iOS this maps to a TouchableView (custom UIView) with opacity animation.
1659
+ * On Android this maps to a TouchableView (FlexboxLayout subclass).
1245
1660
  *
1246
1661
  * @example
1247
- * ```ts
1248
- * const { model, screenWidth, screenHeight } = useDeviceInfo()
1662
+ * ```vue
1663
+ * <VPressable
1664
+ * :style="{ padding: 16 }"
1665
+ * :onPress="handlePress"
1666
+ * :onLongPress="handleLongPress"
1667
+ * :activeOpacity="0.6"
1668
+ * >
1669
+ * <VView :style="{ flexDirection: 'row', alignItems: 'center' }">
1670
+ * <VImage :source="{ uri: icon }" :style="{ width: 24, height: 24 }" />
1671
+ * <VText :style="{ marginLeft: 8 }">Press me</VText>
1672
+ * </VView>
1673
+ * </VPressable>
1249
1674
  * ```
1250
1675
  */
1251
- declare function useDeviceInfo(): {
1252
- model: _vue_reactivity.Ref<string, string>;
1253
- systemVersion: _vue_reactivity.Ref<string, string>;
1254
- systemName: _vue_reactivity.Ref<string, string>;
1255
- name: _vue_reactivity.Ref<string, string>;
1256
- screenWidth: _vue_reactivity.Ref<number, number>;
1257
- screenHeight: _vue_reactivity.Ref<number, number>;
1258
- scale: _vue_reactivity.Ref<number, number>;
1259
- isLoaded: _vue_reactivity.Ref<boolean, boolean>;
1260
- fetchInfo: () => Promise<void>;
1261
- };
1676
+ declare const VPressable: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
1677
+ style: PropType<ViewStyle>;
1678
+ disabled: {
1679
+ type: BooleanConstructor;
1680
+ default: boolean;
1681
+ };
1682
+ activeOpacity: {
1683
+ type: NumberConstructor;
1684
+ default: number;
1685
+ };
1686
+ onPress: PropType<() => void>;
1687
+ onPressIn: PropType<() => void>;
1688
+ onPressOut: PropType<() => void>;
1689
+ onLongPress: PropType<() => void>;
1690
+ accessibilityLabel: StringConstructor;
1691
+ accessibilityRole: StringConstructor;
1692
+ accessibilityHint: StringConstructor;
1693
+ accessibilityState: ObjectConstructor;
1694
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
1695
+ [key: string]: any;
1696
+ }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
1697
+ style: PropType<ViewStyle>;
1698
+ disabled: {
1699
+ type: BooleanConstructor;
1700
+ default: boolean;
1701
+ };
1702
+ activeOpacity: {
1703
+ type: NumberConstructor;
1704
+ default: number;
1705
+ };
1706
+ onPress: PropType<() => void>;
1707
+ onPressIn: PropType<() => void>;
1708
+ onPressOut: PropType<() => void>;
1709
+ onLongPress: PropType<() => void>;
1710
+ accessibilityLabel: StringConstructor;
1711
+ accessibilityRole: StringConstructor;
1712
+ accessibilityHint: StringConstructor;
1713
+ accessibilityState: ObjectConstructor;
1714
+ }>> & Readonly<{}>, {
1715
+ disabled: boolean;
1716
+ activeOpacity: number;
1717
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
1262
1718
 
1263
1719
  /**
1264
- * Keyboard state composable.
1720
+ * VSectionList A sectioned list component backed by UITableView with sections on iOS.
1265
1721
  *
1266
- * Provides reactive keyboard visibility state and a dismiss function.
1267
- * The `isVisible` and `height` refs are updated by native keyboard events
1268
- * dispatched through a special keyboard node.
1722
+ * Renders grouped data with section headers. Each section has a title and
1723
+ * an array of data items rendered via the #item slot.
1269
1724
  *
1270
1725
  * @example
1271
- * ```ts
1272
- * const { isVisible, height, dismiss } = useKeyboard()
1273
- * ```
1274
- */
1726
+ * <VSectionList
1727
+ * :sections="[
1728
+ * { title: 'Fruits', data: ['Apple', 'Banana'] },
1729
+ * { title: 'Vegetables', data: ['Carrot', 'Pea'] },
1730
+ * ]"
1731
+ * :estimatedItemHeight="48"
1732
+ * :style="{ flex: 1 }"
1733
+ * >
1734
+ * <template #sectionHeader="{ section }">
1735
+ * <VText :style="{ fontWeight: 'bold', padding: 8 }">{{ section.title }}</VText>
1736
+ * </template>
1737
+ * <template #item="{ item, index, section }">
1738
+ * <VText :style="{ padding: 12 }">{{ item }}</VText>
1739
+ * </template>
1740
+ * </VSectionList>
1741
+ */
1742
+ interface Section {
1743
+ title: string;
1744
+ data: any[];
1745
+ }
1746
+ declare const VSectionList: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
1747
+ /** Array of section objects, each with a title and data array */
1748
+ sections: {
1749
+ type: () => Section[];
1750
+ required: true;
1751
+ };
1752
+ /** Extract a unique key from each item. Defaults to index as string. */
1753
+ keyExtractor: {
1754
+ type: () => (item: any, index: number) => string;
1755
+ default: (_item: any, index: number) => string;
1756
+ };
1757
+ /** Estimated height per row in points. Default: 44 */
1758
+ estimatedItemHeight: {
1759
+ type: NumberConstructor;
1760
+ default: number;
1761
+ };
1762
+ /** Whether section headers stick to the top when scrolling. Default: true */
1763
+ stickySectionHeaders: {
1764
+ type: BooleanConstructor;
1765
+ default: boolean;
1766
+ };
1767
+ /** Show vertical scroll indicator. Default: true */
1768
+ showsScrollIndicator: {
1769
+ type: BooleanConstructor;
1770
+ default: boolean;
1771
+ };
1772
+ /** Enable bounce at scroll boundaries. Default: true */
1773
+ bounces: {
1774
+ type: BooleanConstructor;
1775
+ default: boolean;
1776
+ };
1777
+ style: {
1778
+ type: ObjectConstructor;
1779
+ default: () => {};
1780
+ };
1781
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
1782
+ [key: string]: any;
1783
+ }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("scroll" | "endReached")[], "scroll" | "endReached", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
1784
+ /** Array of section objects, each with a title and data array */
1785
+ sections: {
1786
+ type: () => Section[];
1787
+ required: true;
1788
+ };
1789
+ /** Extract a unique key from each item. Defaults to index as string. */
1790
+ keyExtractor: {
1791
+ type: () => (item: any, index: number) => string;
1792
+ default: (_item: any, index: number) => string;
1793
+ };
1794
+ /** Estimated height per row in points. Default: 44 */
1795
+ estimatedItemHeight: {
1796
+ type: NumberConstructor;
1797
+ default: number;
1798
+ };
1799
+ /** Whether section headers stick to the top when scrolling. Default: true */
1800
+ stickySectionHeaders: {
1801
+ type: BooleanConstructor;
1802
+ default: boolean;
1803
+ };
1804
+ /** Show vertical scroll indicator. Default: true */
1805
+ showsScrollIndicator: {
1806
+ type: BooleanConstructor;
1807
+ default: boolean;
1808
+ };
1809
+ /** Enable bounce at scroll boundaries. Default: true */
1810
+ bounces: {
1811
+ type: BooleanConstructor;
1812
+ default: boolean;
1813
+ };
1814
+ style: {
1815
+ type: ObjectConstructor;
1816
+ default: () => {};
1817
+ };
1818
+ }>> & Readonly<{
1819
+ onScroll?: ((...args: any[]) => any) | undefined;
1820
+ onEndReached?: ((...args: any[]) => any) | undefined;
1821
+ }>, {
1822
+ style: Record<string, any>;
1823
+ bounces: boolean;
1824
+ keyExtractor: (item: any, index: number) => string;
1825
+ estimatedItemHeight: number;
1826
+ showsScrollIndicator: boolean;
1827
+ stickySectionHeaders: boolean;
1828
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
1829
+
1830
+ /**
1831
+ * VCheckbox — a boolean checkbox component with optional label.
1832
+ *
1833
+ * Maps to a custom checkbox view on iOS, CheckBox on Android.
1834
+ * Supports v-model for two-way binding.
1835
+ *
1836
+ * @example
1837
+ * ```vue
1838
+ * <VCheckbox v-model="accepted" label="I accept the terms" />
1839
+ * ```
1840
+ */
1841
+ declare const VCheckbox: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
1842
+ modelValue: {
1843
+ type: BooleanConstructor;
1844
+ default: boolean;
1845
+ };
1846
+ disabled: {
1847
+ type: BooleanConstructor;
1848
+ default: boolean;
1849
+ };
1850
+ label: {
1851
+ type: StringConstructor;
1852
+ default: undefined;
1853
+ };
1854
+ checkColor: StringConstructor;
1855
+ tintColor: StringConstructor;
1856
+ style: ObjectConstructor;
1857
+ accessibilityLabel: StringConstructor;
1858
+ accessibilityHint: StringConstructor;
1859
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
1860
+ [key: string]: any;
1861
+ }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("update:modelValue" | "change")[], "update:modelValue" | "change", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
1862
+ modelValue: {
1863
+ type: BooleanConstructor;
1864
+ default: boolean;
1865
+ };
1866
+ disabled: {
1867
+ type: BooleanConstructor;
1868
+ default: boolean;
1869
+ };
1870
+ label: {
1871
+ type: StringConstructor;
1872
+ default: undefined;
1873
+ };
1874
+ checkColor: StringConstructor;
1875
+ tintColor: StringConstructor;
1876
+ style: ObjectConstructor;
1877
+ accessibilityLabel: StringConstructor;
1878
+ accessibilityHint: StringConstructor;
1879
+ }>> & Readonly<{
1880
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
1881
+ onChange?: ((...args: any[]) => any) | undefined;
1882
+ }>, {
1883
+ disabled: boolean;
1884
+ modelValue: boolean;
1885
+ label: string;
1886
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
1887
+
1888
+ interface RadioOption {
1889
+ label: string;
1890
+ value: string;
1891
+ }
1892
+ /**
1893
+ * VRadio — a radio button group component.
1894
+ *
1895
+ * Maps to a custom UIStackView with radio circles on iOS,
1896
+ * RadioGroup + RadioButton on Android.
1897
+ *
1898
+ * @example
1899
+ * ```vue
1900
+ * <VRadio
1901
+ * v-model="size"
1902
+ * :options="[
1903
+ * { label: 'Small', value: 'sm' },
1904
+ * { label: 'Medium', value: 'md' },
1905
+ * { label: 'Large', value: 'lg' },
1906
+ * ]"
1907
+ * />
1908
+ * ```
1909
+ */
1910
+ declare const VRadio: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
1911
+ modelValue: {
1912
+ type: StringConstructor;
1913
+ default: undefined;
1914
+ };
1915
+ options: {
1916
+ type: PropType<RadioOption[]>;
1917
+ required: true;
1918
+ };
1919
+ disabled: {
1920
+ type: BooleanConstructor;
1921
+ default: boolean;
1922
+ };
1923
+ tintColor: StringConstructor;
1924
+ style: ObjectConstructor;
1925
+ accessibilityLabel: StringConstructor;
1926
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
1927
+ [key: string]: any;
1928
+ }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("update:modelValue" | "change")[], "update:modelValue" | "change", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
1929
+ modelValue: {
1930
+ type: StringConstructor;
1931
+ default: undefined;
1932
+ };
1933
+ options: {
1934
+ type: PropType<RadioOption[]>;
1935
+ required: true;
1936
+ };
1937
+ disabled: {
1938
+ type: BooleanConstructor;
1939
+ default: boolean;
1940
+ };
1941
+ tintColor: StringConstructor;
1942
+ style: ObjectConstructor;
1943
+ accessibilityLabel: StringConstructor;
1944
+ }>> & Readonly<{
1945
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
1946
+ onChange?: ((...args: any[]) => any) | undefined;
1947
+ }>, {
1948
+ disabled: boolean;
1949
+ modelValue: string;
1950
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
1951
+
1952
+ interface DropdownOption {
1953
+ label: string;
1954
+ value: string;
1955
+ }
1956
+ /**
1957
+ * VDropdown — a dropdown/picker selection component.
1958
+ *
1959
+ * Maps to UIMenu (iOS 14+) or UIPickerView on iOS, Spinner on Android.
1960
+ *
1961
+ * @example
1962
+ * ```vue
1963
+ * <VDropdown
1964
+ * v-model="country"
1965
+ * placeholder="Select country"
1966
+ * :options="[
1967
+ * { label: 'United States', value: 'us' },
1968
+ * { label: 'Canada', value: 'ca' },
1969
+ * { label: 'Mexico', value: 'mx' },
1970
+ * ]"
1971
+ * />
1972
+ * ```
1973
+ */
1974
+ declare const VDropdown: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
1975
+ modelValue: {
1976
+ type: StringConstructor;
1977
+ default: undefined;
1978
+ };
1979
+ options: {
1980
+ type: PropType<DropdownOption[]>;
1981
+ required: true;
1982
+ };
1983
+ placeholder: {
1984
+ type: StringConstructor;
1985
+ default: string;
1986
+ };
1987
+ disabled: {
1988
+ type: BooleanConstructor;
1989
+ default: boolean;
1990
+ };
1991
+ tintColor: StringConstructor;
1992
+ style: ObjectConstructor;
1993
+ accessibilityLabel: StringConstructor;
1994
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
1995
+ [key: string]: any;
1996
+ }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("update:modelValue" | "change")[], "update:modelValue" | "change", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
1997
+ modelValue: {
1998
+ type: StringConstructor;
1999
+ default: undefined;
2000
+ };
2001
+ options: {
2002
+ type: PropType<DropdownOption[]>;
2003
+ required: true;
2004
+ };
2005
+ placeholder: {
2006
+ type: StringConstructor;
2007
+ default: string;
2008
+ };
2009
+ disabled: {
2010
+ type: BooleanConstructor;
2011
+ default: boolean;
2012
+ };
2013
+ tintColor: StringConstructor;
2014
+ style: ObjectConstructor;
2015
+ accessibilityLabel: StringConstructor;
2016
+ }>> & Readonly<{
2017
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
2018
+ onChange?: ((...args: any[]) => any) | undefined;
2019
+ }>, {
2020
+ disabled: boolean;
2021
+ placeholder: string;
2022
+ modelValue: string;
2023
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
2024
+
2025
+ /**
2026
+ * VVideo — the video playback component in Vue Native.
2027
+ *
2028
+ * Maps to AVPlayer on iOS and MediaPlayer on Android.
2029
+ * Supports inline video playback with progress reporting.
2030
+ *
2031
+ * @example
2032
+ * ```vue
2033
+ * <VVideo
2034
+ * :source="{ uri: 'https://example.com/video.mp4' }"
2035
+ * :autoplay="true"
2036
+ * :loop="false"
2037
+ * :muted="false"
2038
+ * resizeMode="cover"
2039
+ * :style="{ width: '100%', height: 200 }"
2040
+ * @ready="onReady"
2041
+ * @progress="onProgress"
2042
+ * @end="onEnd"
2043
+ * />
2044
+ * ```
2045
+ */
2046
+ declare const VVideo: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
2047
+ source: () => {
2048
+ uri: string;
2049
+ };
2050
+ autoplay: {
2051
+ type: BooleanConstructor;
2052
+ default: boolean;
2053
+ };
2054
+ loop: {
2055
+ type: BooleanConstructor;
2056
+ default: boolean;
2057
+ };
2058
+ muted: {
2059
+ type: BooleanConstructor;
2060
+ default: boolean;
2061
+ };
2062
+ paused: {
2063
+ type: BooleanConstructor;
2064
+ default: boolean;
2065
+ };
2066
+ controls: {
2067
+ type: BooleanConstructor;
2068
+ default: boolean;
2069
+ };
2070
+ volume: {
2071
+ type: NumberConstructor;
2072
+ default: number;
2073
+ };
2074
+ resizeMode: {
2075
+ type: () => "cover" | "contain" | "stretch" | "center";
2076
+ default: string;
2077
+ };
2078
+ poster: StringConstructor;
2079
+ style: PropType<ViewStyle>;
2080
+ testID: StringConstructor;
2081
+ accessibilityLabel: StringConstructor;
2082
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
2083
+ [key: string]: any;
2084
+ }>, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, ("error" | "progress" | "ready" | "play" | "pause" | "end")[], "error" | "progress" | "ready" | "play" | "pause" | "end", _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
2085
+ source: () => {
2086
+ uri: string;
2087
+ };
2088
+ autoplay: {
2089
+ type: BooleanConstructor;
2090
+ default: boolean;
2091
+ };
2092
+ loop: {
2093
+ type: BooleanConstructor;
2094
+ default: boolean;
2095
+ };
2096
+ muted: {
2097
+ type: BooleanConstructor;
2098
+ default: boolean;
2099
+ };
2100
+ paused: {
2101
+ type: BooleanConstructor;
2102
+ default: boolean;
2103
+ };
2104
+ controls: {
2105
+ type: BooleanConstructor;
2106
+ default: boolean;
2107
+ };
2108
+ volume: {
2109
+ type: NumberConstructor;
2110
+ default: number;
2111
+ };
2112
+ resizeMode: {
2113
+ type: () => "cover" | "contain" | "stretch" | "center";
2114
+ default: string;
2115
+ };
2116
+ poster: StringConstructor;
2117
+ style: PropType<ViewStyle>;
2118
+ testID: StringConstructor;
2119
+ accessibilityLabel: StringConstructor;
2120
+ }>> & Readonly<{
2121
+ onError?: ((...args: any[]) => any) | undefined;
2122
+ onProgress?: ((...args: any[]) => any) | undefined;
2123
+ onReady?: ((...args: any[]) => any) | undefined;
2124
+ onPlay?: ((...args: any[]) => any) | undefined;
2125
+ onPause?: ((...args: any[]) => any) | undefined;
2126
+ onEnd?: ((...args: any[]) => any) | undefined;
2127
+ }>, {
2128
+ resizeMode: "cover" | "contain" | "stretch" | "center";
2129
+ autoplay: boolean;
2130
+ loop: boolean;
2131
+ muted: boolean;
2132
+ paused: boolean;
2133
+ controls: boolean;
2134
+ volume: number;
2135
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
2136
+
2137
+ declare const ErrorBoundary: _vue_runtime_core.DefineComponent<_vue_runtime_core.ExtractPropTypes<{
2138
+ onError: PropType<(error: Error, info: string) => void>;
2139
+ resetKeys: {
2140
+ type: PropType<any[]>;
2141
+ default: () => never[];
2142
+ };
2143
+ }>, () => _vue_runtime_core.VNode<_vue_runtime_core.RendererNode, _vue_runtime_core.RendererElement, {
2144
+ [key: string]: any;
2145
+ }>[] | undefined, {}, {}, {}, _vue_runtime_core.ComponentOptionsMixin, _vue_runtime_core.ComponentOptionsMixin, {}, string, _vue_runtime_core.PublicProps, Readonly<_vue_runtime_core.ExtractPropTypes<{
2146
+ onError: PropType<(error: Error, info: string) => void>;
2147
+ resetKeys: {
2148
+ type: PropType<any[]>;
2149
+ default: () => never[];
2150
+ };
2151
+ }>> & Readonly<{}>, {
2152
+ resetKeys: any[];
2153
+ }, {}, {}, {}, string, _vue_runtime_core.ComponentProvideOptions, true, {}, any>;
2154
+
2155
+ /**
2156
+ * v-show directive for Vue Native.
2157
+ * Maps to the 'hidden' prop on native views (view.isHidden in Swift).
2158
+ */
2159
+ declare const vShow: Directive<NativeNode>;
2160
+
2161
+ /**
2162
+ * Haptic feedback composable.
2163
+ *
2164
+ * Wraps the native Haptics module to provide tactile feedback.
2165
+ *
2166
+ * @example
2167
+ * ```ts
2168
+ * const { vibrate, selectionChanged } = useHaptics()
2169
+ * vibrate('medium')
2170
+ * ```
2171
+ */
2172
+ declare function useHaptics(): {
2173
+ vibrate: (style?: "light" | "medium" | "heavy" | "rigid" | "soft") => Promise<void>;
2174
+ notificationFeedback: (type?: "success" | "warning" | "error") => Promise<void>;
2175
+ selectionChanged: () => Promise<void>;
2176
+ };
2177
+
2178
+ /**
2179
+ * Async key-value storage composable backed by UserDefaults.
2180
+ *
2181
+ * All operations are Promise-based and run on a background thread.
2182
+ *
2183
+ * @example
2184
+ * ```ts
2185
+ * const storage = useAsyncStorage()
2186
+ * await storage.setItem('theme', 'dark')
2187
+ * const theme = await storage.getItem('theme')
2188
+ * ```
2189
+ */
2190
+ declare function useAsyncStorage(): {
2191
+ getItem: (key: string) => Promise<string | null>;
2192
+ setItem: (key: string, value: string) => Promise<void>;
2193
+ removeItem: (key: string) => Promise<void>;
2194
+ getAllKeys: () => Promise<string[]>;
2195
+ clear: () => Promise<void>;
2196
+ };
2197
+
2198
+ /**
2199
+ * Clipboard composable providing read/write access to UIPasteboard.
2200
+ *
2201
+ * `content` is a reactive ref that updates when `paste()` is called.
2202
+ *
2203
+ * @example
2204
+ * ```ts
2205
+ * const { copy, paste, content } = useClipboard()
2206
+ * await copy('Hello, World!')
2207
+ * const text = await paste()
2208
+ * ```
2209
+ */
2210
+ declare function useClipboard(): {
2211
+ copy: (text: string) => Promise<void>;
2212
+ paste: () => Promise<string>;
2213
+ content: _vue_reactivity.Ref<string, string>;
2214
+ };
2215
+
2216
+ /**
2217
+ * Device information composable.
2218
+ *
2219
+ * Fetches device info once on mount and exposes reactive refs.
2220
+ *
2221
+ * @example
2222
+ * ```ts
2223
+ * const { model, screenWidth, screenHeight } = useDeviceInfo()
2224
+ * ```
2225
+ */
2226
+ declare function useDeviceInfo(): {
2227
+ model: _vue_reactivity.Ref<string, string>;
2228
+ systemVersion: _vue_reactivity.Ref<string, string>;
2229
+ systemName: _vue_reactivity.Ref<string, string>;
2230
+ name: _vue_reactivity.Ref<string, string>;
2231
+ screenWidth: _vue_reactivity.Ref<number, number>;
2232
+ screenHeight: _vue_reactivity.Ref<number, number>;
2233
+ scale: _vue_reactivity.Ref<number, number>;
2234
+ isLoaded: _vue_reactivity.Ref<boolean, boolean>;
2235
+ fetchInfo: () => Promise<void>;
2236
+ };
2237
+
2238
+ /**
2239
+ * Keyboard state composable.
2240
+ *
2241
+ * Provides reactive keyboard visibility state and a dismiss function.
2242
+ * The `isVisible` and `height` refs are updated by native keyboard events
2243
+ * dispatched through a special keyboard node.
2244
+ *
2245
+ * @example
2246
+ * ```ts
2247
+ * const { isVisible, height, dismiss } = useKeyboard()
2248
+ * ```
2249
+ */
1275
2250
  declare function useKeyboard(): {
1276
2251
  isVisible: _vue_reactivity.Ref<boolean, boolean>;
1277
2252
  height: _vue_reactivity.Ref<number, number>;
@@ -1502,17 +2477,60 @@ interface CameraResult {
1502
2477
  type: string;
1503
2478
  didCancel?: boolean;
1504
2479
  }
2480
+ interface VideoCaptureOptions {
2481
+ /** Video quality: 'low' | 'medium' | 'high'. Default: 'medium' */
2482
+ quality?: 'low' | 'medium' | 'high';
2483
+ /** Maximum recording duration in seconds */
2484
+ maxDuration?: number;
2485
+ /** Use front camera. Default: false */
2486
+ frontCamera?: boolean;
2487
+ }
2488
+ interface VideoCaptureResult {
2489
+ uri: string;
2490
+ duration: number;
2491
+ type: string;
2492
+ didCancel?: boolean;
2493
+ }
2494
+ interface QRCodeResult {
2495
+ /** Decoded QR code / barcode data */
2496
+ data: string;
2497
+ /** Barcode type (e.g. "org.iso.QRCode", "org.gs1.EAN-13") */
2498
+ type: string;
2499
+ /** Bounding rectangle of the detected code in normalized coordinates (0-1) */
2500
+ bounds: {
2501
+ x: number;
2502
+ y: number;
2503
+ width: number;
2504
+ height: number;
2505
+ };
2506
+ }
1505
2507
  /**
1506
- * Launch the camera or image library.
2508
+ * Camera composable for photo capture, video recording, and QR code scanning.
1507
2509
  *
1508
2510
  * @example
1509
- * const { launchCamera, launchImageLibrary } = useCamera()
1510
- * const result = await launchImageLibrary()
1511
- * if (!result.didCancel) imageUri.value = result.uri
2511
+ * const { launchCamera, launchImageLibrary, captureVideo, scanQRCode, stopQRScan, onQRCodeDetected } = useCamera()
2512
+ *
2513
+ * // Photo
2514
+ * const photo = await launchCamera()
2515
+ * if (!photo.didCancel) imageUri.value = photo.uri
2516
+ *
2517
+ * // Video
2518
+ * const video = await captureVideo({ quality: 'high', maxDuration: 30 })
2519
+ * if (!video.didCancel) videoUri.value = video.uri
2520
+ *
2521
+ * // QR scanning
2522
+ * onQRCodeDetected((result) => {
2523
+ * console.log('Scanned:', result.data)
2524
+ * })
2525
+ * await scanQRCode()
1512
2526
  */
1513
2527
  declare function useCamera(): {
1514
2528
  launchCamera: (options?: CameraOptions) => Promise<CameraResult>;
1515
2529
  launchImageLibrary: (options?: CameraOptions) => Promise<CameraResult>;
2530
+ captureVideo: (options?: VideoCaptureOptions) => Promise<VideoCaptureResult>;
2531
+ scanQRCode: () => Promise<void>;
2532
+ stopQRScan: () => Promise<void>;
2533
+ onQRCodeDetected: (callback: (result: QRCodeResult) => void) => () => void;
1516
2534
  };
1517
2535
 
1518
2536
  interface LocalNotification {
@@ -1531,13 +2549,28 @@ interface NotificationPayload {
1531
2549
  data: Record<string, any>;
1532
2550
  action?: string;
1533
2551
  }
2552
+ interface PushNotificationPayload {
2553
+ title: string;
2554
+ body: string;
2555
+ data: Record<string, any>;
2556
+ remote: true;
2557
+ }
1534
2558
  /**
1535
- * Local notification scheduling and permission management.
2559
+ * Local and push notification management.
1536
2560
  *
1537
2561
  * @example
2562
+ * // Local notifications
1538
2563
  * const { requestPermission, scheduleLocal, onNotification } = useNotifications()
1539
2564
  * await requestPermission()
1540
2565
  * await scheduleLocal({ title: 'Reminder', body: 'Don\'t forget!', delay: 5 })
2566
+ *
2567
+ * // Push notifications
2568
+ * const { registerForPush, getToken, onPushReceived } = useNotifications()
2569
+ * await registerForPush()
2570
+ * const token = await getToken()
2571
+ * onPushReceived((notification) => {
2572
+ * console.log('Push:', notification.title, notification.body)
2573
+ * })
1541
2574
  */
1542
2575
  declare function useNotifications(): {
1543
2576
  isGranted: _vue_reactivity.Ref<boolean, boolean>;
@@ -1547,6 +2580,11 @@ declare function useNotifications(): {
1547
2580
  cancel: (id: string) => Promise<void>;
1548
2581
  cancelAll: () => Promise<void>;
1549
2582
  onNotification: (handler: (payload: NotificationPayload) => void) => () => void;
2583
+ pushToken: _vue_reactivity.Ref<string | null, string | null>;
2584
+ registerForPush: () => Promise<void>;
2585
+ getToken: () => Promise<string | null>;
2586
+ onPushToken: (handler: (token: string) => void) => () => void;
2587
+ onPushReceived: (handler: (payload: PushNotificationPayload) => void) => () => void;
1550
2588
  };
1551
2589
 
1552
2590
  type BiometryType = 'faceID' | 'touchID' | 'opticID' | 'none';
@@ -1572,6 +2610,17 @@ interface HttpRequestConfig {
1572
2610
  baseURL?: string;
1573
2611
  headers?: Record<string, string>;
1574
2612
  timeout?: number;
2613
+ /**
2614
+ * Certificate pinning configuration.
2615
+ * Maps domain names to arrays of SHA-256 pin hashes.
2616
+ * Each pin must be in the format "sha256/<base64-encoded-hash>".
2617
+ *
2618
+ * @example
2619
+ * pins: {
2620
+ * 'api.example.com': ['sha256/AAAAAAA...', 'sha256/BBBBBBB...'],
2621
+ * }
2622
+ */
2623
+ pins?: Record<string, string[]>;
1575
2624
  }
1576
2625
  interface HttpResponse<T = any> {
1577
2626
  data: T;
@@ -1634,6 +2683,768 @@ declare function useColorScheme(): {
1634
2683
  */
1635
2684
  declare function useBackHandler(handler: () => boolean): void;
1636
2685
 
2686
+ /**
2687
+ * Secure key-value storage composable backed by Keychain (iOS) and
2688
+ * EncryptedSharedPreferences (Android).
2689
+ *
2690
+ * All operations are Promise-based and run on a background thread.
2691
+ *
2692
+ * @example
2693
+ * ```ts
2694
+ * const secureStorage = useSecureStorage()
2695
+ * await secureStorage.setItem('token', 'abc123')
2696
+ * const token = await secureStorage.getItem('token')
2697
+ * ```
2698
+ */
2699
+ declare function useSecureStorage(): {
2700
+ getItem: (key: string) => Promise<string | null>;
2701
+ setItem: (key: string, value: string) => Promise<void>;
2702
+ removeItem: (key: string) => Promise<void>;
2703
+ clear: () => Promise<void>;
2704
+ };
2705
+
2706
+ declare function useI18n(): {
2707
+ isRTL: _vue_reactivity.Ref<boolean, boolean>;
2708
+ locale: _vue_reactivity.Ref<string, string>;
2709
+ };
2710
+
2711
+ type Platform = 'ios' | 'android';
2712
+ /**
2713
+ * Returns the current platform ('ios' or 'android').
2714
+ *
2715
+ * Relies on the `__PLATFORM__` compile-time constant injected by the Vite plugin.
2716
+ * Falls back to 'ios' if not defined.
2717
+ *
2718
+ * @example
2719
+ * ```ts
2720
+ * const { platform, isIOS, isAndroid } = usePlatform()
2721
+ * ```
2722
+ */
2723
+ declare function usePlatform(): {
2724
+ platform: Platform;
2725
+ isIOS: boolean;
2726
+ isAndroid: boolean;
2727
+ };
2728
+
2729
+ interface Dimensions {
2730
+ width: number;
2731
+ height: number;
2732
+ scale: number;
2733
+ }
2734
+ /**
2735
+ * Reactive screen dimensions composable.
2736
+ *
2737
+ * Fetches initial dimensions from DeviceInfo on mount, then listens for
2738
+ * orientation/resize changes via the 'dimensionsChange' global event.
2739
+ *
2740
+ * @example
2741
+ * ```ts
2742
+ * const { width, height, scale } = useDimensions()
2743
+ * ```
2744
+ */
2745
+ declare function useDimensions(): {
2746
+ width: _vue_reactivity.Ref<number, number>;
2747
+ height: _vue_reactivity.Ref<number, number>;
2748
+ scale: _vue_reactivity.Ref<number, number>;
2749
+ };
2750
+
2751
+ type WebSocketStatus = 'CLOSED' | 'CONNECTING' | 'OPEN' | 'CLOSING';
2752
+ interface WebSocketOptions {
2753
+ /** Automatically connect on creation. Defaults to true. */
2754
+ autoConnect?: boolean;
2755
+ /** Automatically reconnect on close. Defaults to false. */
2756
+ autoReconnect?: boolean;
2757
+ /** Max reconnect attempts. Defaults to 3. */
2758
+ maxReconnectAttempts?: number;
2759
+ /** Reconnect interval in ms. Defaults to 1000. */
2760
+ reconnectInterval?: number;
2761
+ }
2762
+ /**
2763
+ * Reactive WebSocket connection.
2764
+ *
2765
+ * @example
2766
+ * const { status, lastMessage, send, open, close } = useWebSocket('wss://echo.example.com')
2767
+ *
2768
+ * watch(lastMessage, (msg) => {
2769
+ * console.log('Received:', msg)
2770
+ * })
2771
+ *
2772
+ * send('Hello!')
2773
+ * send({ type: 'ping' }) // Objects are auto-stringified
2774
+ */
2775
+ declare function useWebSocket(url: string, options?: WebSocketOptions): {
2776
+ status: _vue_reactivity.Ref<WebSocketStatus, WebSocketStatus>;
2777
+ lastMessage: _vue_reactivity.Ref<string | null, string | null>;
2778
+ error: _vue_reactivity.Ref<string | null, string | null>;
2779
+ send: (data: string | object) => void;
2780
+ close: (code?: number, reason?: string) => void;
2781
+ open: () => void;
2782
+ };
2783
+
2784
+ /**
2785
+ * File system access composable for reading, writing, and managing files.
2786
+ *
2787
+ * All operations are Promise-based and execute on a background thread.
2788
+ * Paths should be absolute — use getDocumentsPath() or getCachesPath()
2789
+ * to obtain app-scoped directories.
2790
+ *
2791
+ * @example
2792
+ * ```ts
2793
+ * const fs = useFileSystem()
2794
+ * const docsDir = await fs.getDocumentsPath()
2795
+ * await fs.writeFile(`${docsDir}/notes.txt`, 'Hello world')
2796
+ * const content = await fs.readFile(`${docsDir}/notes.txt`)
2797
+ * ```
2798
+ */
2799
+ interface FileStat {
2800
+ size: number;
2801
+ isDirectory: boolean;
2802
+ /** Last modified time in milliseconds since epoch */
2803
+ modified: number;
2804
+ }
2805
+ declare function useFileSystem(): {
2806
+ readFile: (path: string, encoding?: "utf8" | "base64") => Promise<string>;
2807
+ writeFile: (path: string, content: string, encoding?: "utf8" | "base64") => Promise<void>;
2808
+ deleteFile: (path: string) => Promise<void>;
2809
+ exists: (path: string) => Promise<boolean>;
2810
+ listDirectory: (path: string) => Promise<string[]>;
2811
+ downloadFile: (url: string, destPath: string) => Promise<string>;
2812
+ getDocumentsPath: () => Promise<string>;
2813
+ getCachesPath: () => Promise<string>;
2814
+ stat: (path: string) => Promise<FileStat>;
2815
+ mkdir: (path: string) => Promise<void>;
2816
+ copyFile: (srcPath: string, destPath: string) => Promise<void>;
2817
+ moveFile: (srcPath: string, destPath: string) => Promise<void>;
2818
+ };
2819
+
2820
+ interface SensorOptions {
2821
+ /** Update interval in milliseconds. Default: 100 */
2822
+ interval?: number;
2823
+ }
2824
+ interface SensorData {
2825
+ x: number;
2826
+ y: number;
2827
+ z: number;
2828
+ }
2829
+ /**
2830
+ * Reactive accelerometer data. Reads device acceleration (including gravity)
2831
+ * via CMMotionManager on iOS and SensorManager on Android.
2832
+ *
2833
+ * @example
2834
+ * const { x, y, z, isAvailable, start, stop } = useAccelerometer({ interval: 50 })
2835
+ */
2836
+ declare function useAccelerometer(options?: SensorOptions): {
2837
+ x: _vue_reactivity.Ref<number, number>;
2838
+ y: _vue_reactivity.Ref<number, number>;
2839
+ z: _vue_reactivity.Ref<number, number>;
2840
+ isAvailable: _vue_reactivity.Ref<boolean, boolean>;
2841
+ start: () => void;
2842
+ stop: () => void;
2843
+ };
2844
+ /**
2845
+ * Reactive gyroscope data. Reads device rotation rate
2846
+ * via CMMotionManager on iOS and SensorManager on Android.
2847
+ *
2848
+ * @example
2849
+ * const { x, y, z, isAvailable, start, stop } = useGyroscope({ interval: 50 })
2850
+ */
2851
+ declare function useGyroscope(options?: SensorOptions): {
2852
+ x: _vue_reactivity.Ref<number, number>;
2853
+ y: _vue_reactivity.Ref<number, number>;
2854
+ z: _vue_reactivity.Ref<number, number>;
2855
+ isAvailable: _vue_reactivity.Ref<boolean, boolean>;
2856
+ start: () => void;
2857
+ stop: () => void;
2858
+ };
2859
+
2860
+ interface AudioPlayOptions {
2861
+ /** Volume 0.0–1.0. Default 1.0. */
2862
+ volume?: number;
2863
+ /** Loop playback. Default false. */
2864
+ loop?: boolean;
2865
+ }
2866
+ interface AudioRecordOptions {
2867
+ /** Recording quality. Default "medium". */
2868
+ quality?: 'low' | 'medium' | 'high';
2869
+ /** Output format. Default "m4a". */
2870
+ format?: 'm4a' | 'wav';
2871
+ }
2872
+ interface AudioRecordResult {
2873
+ uri: string;
2874
+ duration: number;
2875
+ }
2876
+ /**
2877
+ * Audio playback and recording composable.
2878
+ *
2879
+ * @example
2880
+ * ```ts
2881
+ * const { play, pause, stop, seek, duration, position, isPlaying } = useAudio()
2882
+ *
2883
+ * // Play a remote file
2884
+ * await play('https://example.com/song.mp3')
2885
+ *
2886
+ * // Seek to 30 seconds
2887
+ * await seek(30)
2888
+ *
2889
+ * // Record audio
2890
+ * const { startRecording, stopRecording, isRecording } = useAudio()
2891
+ * await startRecording({ quality: 'high' })
2892
+ * const result = await stopRecording() // { uri, duration }
2893
+ * ```
2894
+ */
2895
+ declare function useAudio(): {
2896
+ play: (uri: string, options?: AudioPlayOptions) => Promise<void>;
2897
+ pause: () => Promise<void>;
2898
+ resume: () => Promise<void>;
2899
+ stop: () => Promise<void>;
2900
+ seek: (positionSec: number) => Promise<void>;
2901
+ setVolume: (volume: number) => Promise<void>;
2902
+ startRecording: (options?: AudioRecordOptions) => Promise<string>;
2903
+ stopRecording: () => Promise<AudioRecordResult>;
2904
+ pauseRecording: () => Promise<void>;
2905
+ resumeRecording: () => Promise<void>;
2906
+ duration: _vue_reactivity.Ref<number, number>;
2907
+ position: _vue_reactivity.Ref<number, number>;
2908
+ isPlaying: _vue_reactivity.Ref<boolean, boolean>;
2909
+ isRecording: _vue_reactivity.Ref<boolean, boolean>;
2910
+ error: _vue_reactivity.Ref<string | null, string | null>;
2911
+ };
2912
+
2913
+ interface ExecuteResult {
2914
+ rowsAffected: number;
2915
+ insertId?: number;
2916
+ }
2917
+ type Row = Record<string, any>;
2918
+ interface TransactionContext {
2919
+ execute: (sql: string, params?: any[]) => Promise<ExecuteResult>;
2920
+ query: <T extends Row = Row>(sql: string, params?: any[]) => Promise<T[]>;
2921
+ }
2922
+ /**
2923
+ * Reactive SQLite database access. Opens a named database on first use
2924
+ * and auto-closes on component unmount.
2925
+ *
2926
+ * @param name - Database name (defaults to "default"). Stored as `<name>.sqlite`.
2927
+ *
2928
+ * @example
2929
+ * const db = useDatabase('myapp')
2930
+ *
2931
+ * // Create table
2932
+ * await db.execute('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)')
2933
+ *
2934
+ * // Insert
2935
+ * const { insertId } = await db.execute('INSERT INTO users (name) VALUES (?)', ['Alice'])
2936
+ *
2937
+ * // Query
2938
+ * const users = await db.query<{ id: number; name: string }>('SELECT * FROM users')
2939
+ *
2940
+ * // Transaction
2941
+ * await db.transaction(async ({ execute }) => {
2942
+ * await execute('INSERT INTO users (name) VALUES (?)', ['Bob'])
2943
+ * await execute('INSERT INTO users (name) VALUES (?)', ['Charlie'])
2944
+ * })
2945
+ */
2946
+ declare function useDatabase(name?: string): {
2947
+ execute: (sql: string, params?: any[]) => Promise<ExecuteResult>;
2948
+ query: <T extends Row = Row>(sql: string, params?: any[]) => Promise<T[]>;
2949
+ transaction: (callback: (ctx: TransactionContext) => Promise<void>) => Promise<void>;
2950
+ close: () => Promise<void>;
2951
+ isOpen: _vue_reactivity.Ref<boolean, boolean>;
2952
+ };
2953
+
2954
+ interface PerformanceMetrics {
2955
+ fps: number;
2956
+ memoryMB: number;
2957
+ bridgeOps: number;
2958
+ timestamp: number;
2959
+ }
2960
+ /**
2961
+ * Performance profiler composable.
2962
+ *
2963
+ * Starts/stops native performance profiling (FPS via CADisplayLink/Choreographer,
2964
+ * memory via task_info/Runtime, bridge operation count). While profiling is active,
2965
+ * reactive refs are updated every second via `perf:metrics` global events.
2966
+ *
2967
+ * @example
2968
+ * const { startProfiling, stopProfiling, fps, memoryMB, isProfiling } = usePerformance()
2969
+ *
2970
+ * await startProfiling()
2971
+ * // fps.value, memoryMB.value update every second
2972
+ * await stopProfiling()
2973
+ */
2974
+ declare function usePerformance(): {
2975
+ startProfiling: () => Promise<void>;
2976
+ stopProfiling: () => Promise<void>;
2977
+ getMetrics: () => Promise<PerformanceMetrics>;
2978
+ isProfiling: _vue_reactivity.Ref<boolean, boolean>;
2979
+ fps: _vue_reactivity.Ref<number, number>;
2980
+ memoryMB: _vue_reactivity.Ref<number, number>;
2981
+ bridgeOps: _vue_reactivity.Ref<number, number>;
2982
+ };
2983
+
2984
+ interface SharedElementFrame {
2985
+ x: number;
2986
+ y: number;
2987
+ width: number;
2988
+ height: number;
2989
+ }
2990
+ interface SharedElementRegistration {
2991
+ /** The shared element identifier. */
2992
+ id: string;
2993
+ /** The native view ID this registration is bound to. */
2994
+ viewId: number;
2995
+ }
2996
+ /**
2997
+ * Register a native view as a shared element for transitions.
2998
+ *
2999
+ * Call this composable with a unique identifier. When navigating with
3000
+ * `router.push('Detail', { sharedElements: ['hero-image'] })`, elements
3001
+ * registered with the same id on both source and destination screens
3002
+ * will animate their position and size between the two locations.
3003
+ *
3004
+ * @example
3005
+ * const { register, unregister } = useSharedElementTransition('hero-image')
3006
+ *
3007
+ * // In setup, after the view is mounted:
3008
+ * register(viewId)
3009
+ *
3010
+ * // Cleanup happens automatically on unmount
3011
+ */
3012
+ declare function useSharedElementTransition(elementId: string): {
3013
+ id: string;
3014
+ viewId: _vue_reactivity.Ref<number | null, number | null>;
3015
+ register: (nativeViewId: number) => void;
3016
+ unregister: () => void;
3017
+ };
3018
+ /**
3019
+ * Measure the frame (position + size) of a native view.
3020
+ * Used internally by the shared element transition system.
3021
+ */
3022
+ declare function measureViewFrame(nativeViewId: number): Promise<SharedElementFrame>;
3023
+ /**
3024
+ * Get the registered native view ID for a shared element.
3025
+ */
3026
+ declare function getSharedElementViewId(elementId: string): number | undefined;
3027
+ /**
3028
+ * Get all currently registered shared element IDs.
3029
+ */
3030
+ declare function getRegisteredSharedElements(): string[];
3031
+ /**
3032
+ * Clear all shared element registrations. Used during navigation transitions
3033
+ * to reset state.
3034
+ */
3035
+ declare function clearSharedElementRegistry(): void;
3036
+
3037
+ type ProductType = 'consumable' | 'nonConsumable' | 'autoRenewable' | 'nonRenewable';
3038
+ type TransactionState = 'purchasing' | 'purchased' | 'failed' | 'restored' | 'deferred';
3039
+ interface Product {
3040
+ id: string;
3041
+ displayName: string;
3042
+ description: string;
3043
+ price: number;
3044
+ displayPrice: string;
3045
+ currencyCode: string;
3046
+ type: ProductType;
3047
+ }
3048
+ interface Purchase {
3049
+ productId: string;
3050
+ transactionId: string;
3051
+ originalTransactionId?: string;
3052
+ purchaseDate: string;
3053
+ expiresDate?: string;
3054
+ }
3055
+ interface TransactionUpdate {
3056
+ productId: string;
3057
+ state: TransactionState;
3058
+ transactionId?: string;
3059
+ error?: string;
3060
+ }
3061
+ /**
3062
+ * In-App Purchases composable backed by StoreKit 2 (iOS) and Google Play Billing (Android).
3063
+ *
3064
+ * @example
3065
+ * const { products, getProducts, purchase, restorePurchases, isReady, error } = useIAP()
3066
+ *
3067
+ * // Load products
3068
+ * await getProducts(['com.app.premium', 'com.app.coins100'])
3069
+ *
3070
+ * // Purchase
3071
+ * const result = await purchase('com.app.premium')
3072
+ *
3073
+ * // Restore
3074
+ * const restored = await restorePurchases()
3075
+ */
3076
+ declare function useIAP(): {
3077
+ products: _vue_reactivity.Ref<{
3078
+ id: string;
3079
+ displayName: string;
3080
+ description: string;
3081
+ price: number;
3082
+ displayPrice: string;
3083
+ currencyCode: string;
3084
+ type: ProductType;
3085
+ }[], Product[] | {
3086
+ id: string;
3087
+ displayName: string;
3088
+ description: string;
3089
+ price: number;
3090
+ displayPrice: string;
3091
+ currencyCode: string;
3092
+ type: ProductType;
3093
+ }[]>;
3094
+ isReady: _vue_reactivity.Ref<boolean, boolean>;
3095
+ error: _vue_reactivity.Ref<string | null, string | null>;
3096
+ getProducts: (skus: string[]) => Promise<Product[]>;
3097
+ purchase: (sku: string) => Promise<Purchase | null>;
3098
+ restorePurchases: () => Promise<Purchase[]>;
3099
+ getActiveSubscriptions: () => Promise<Purchase[]>;
3100
+ onTransactionUpdate: (callback: (update: TransactionUpdate) => void) => () => void;
3101
+ };
3102
+
3103
+ interface SocialUser {
3104
+ userId: string;
3105
+ email?: string;
3106
+ fullName?: string;
3107
+ identityToken?: string;
3108
+ authorizationCode?: string;
3109
+ provider: 'apple' | 'google';
3110
+ }
3111
+ interface AuthResult {
3112
+ success: boolean;
3113
+ user?: SocialUser;
3114
+ error?: string;
3115
+ }
3116
+ /**
3117
+ * Apple Sign In composable backed by ASAuthorizationAppleIDProvider (iOS).
3118
+ *
3119
+ * @example
3120
+ * const { signIn, signOut, user, isAuthenticated, error } = useAppleSignIn()
3121
+ *
3122
+ * async function handleLogin() {
3123
+ * const result = await signIn()
3124
+ * if (result.success) {
3125
+ * console.log('Welcome', result.user.fullName)
3126
+ * }
3127
+ * }
3128
+ */
3129
+ declare function useAppleSignIn(): {
3130
+ signIn: () => Promise<AuthResult>;
3131
+ signOut: () => Promise<void>;
3132
+ user: _vue_reactivity.Ref<{
3133
+ userId: string;
3134
+ email?: string | undefined;
3135
+ fullName?: string | undefined;
3136
+ identityToken?: string | undefined;
3137
+ authorizationCode?: string | undefined;
3138
+ provider: "apple" | "google";
3139
+ } | null, SocialUser | {
3140
+ userId: string;
3141
+ email?: string | undefined;
3142
+ fullName?: string | undefined;
3143
+ identityToken?: string | undefined;
3144
+ authorizationCode?: string | undefined;
3145
+ provider: "apple" | "google";
3146
+ } | null>;
3147
+ isAuthenticated: _vue_reactivity.Ref<boolean, boolean>;
3148
+ error: _vue_reactivity.Ref<string | null, string | null>;
3149
+ };
3150
+
3151
+ /**
3152
+ * Google Sign In composable backed by Google Sign In SDK (iOS) and
3153
+ * Credential Manager API (Android).
3154
+ *
3155
+ * @param clientId - Your Google OAuth 2.0 client ID.
3156
+ *
3157
+ * @example
3158
+ * const { signIn, signOut, user, isAuthenticated, error } = useGoogleSignIn('your-client-id.apps.googleusercontent.com')
3159
+ *
3160
+ * async function handleLogin() {
3161
+ * const result = await signIn()
3162
+ * if (result.success) {
3163
+ * console.log('Welcome', result.user.fullName)
3164
+ * }
3165
+ * }
3166
+ */
3167
+ declare function useGoogleSignIn(clientId: string): {
3168
+ signIn: () => Promise<AuthResult>;
3169
+ signOut: () => Promise<void>;
3170
+ user: _vue_reactivity.Ref<{
3171
+ userId: string;
3172
+ email?: string | undefined;
3173
+ fullName?: string | undefined;
3174
+ identityToken?: string | undefined;
3175
+ authorizationCode?: string | undefined;
3176
+ provider: "apple" | "google";
3177
+ } | null, SocialUser | {
3178
+ userId: string;
3179
+ email?: string | undefined;
3180
+ fullName?: string | undefined;
3181
+ identityToken?: string | undefined;
3182
+ authorizationCode?: string | undefined;
3183
+ provider: "apple" | "google";
3184
+ } | null>;
3185
+ isAuthenticated: _vue_reactivity.Ref<boolean, boolean>;
3186
+ error: _vue_reactivity.Ref<string | null, string | null>;
3187
+ };
3188
+
3189
+ type BackgroundTaskType = 'refresh' | 'processing';
3190
+ interface BackgroundTaskOptions {
3191
+ /** Task type: 'refresh' for short tasks, 'processing' for long-running tasks. */
3192
+ type?: BackgroundTaskType;
3193
+ /** Earliest time the task can begin (Unix timestamp in ms). */
3194
+ earliestBeginDate?: number;
3195
+ /** Whether the task requires network connectivity. */
3196
+ requiresNetworkConnectivity?: boolean;
3197
+ /** Whether the task requires the device to be charging. */
3198
+ requiresExternalPower?: boolean;
3199
+ /** Interval in minutes for periodic tasks (Android only, type must be 'processing'). */
3200
+ interval?: number;
3201
+ }
3202
+ /**
3203
+ * Composable for scheduling and managing background tasks.
3204
+ *
3205
+ * Uses BGTaskScheduler on iOS and WorkManager on Android.
3206
+ *
3207
+ * @example
3208
+ * ```ts
3209
+ * const { scheduleTask, cancelTask, onTaskExecute } = useBackgroundTask()
3210
+ *
3211
+ * onTaskExecute((taskId) => {
3212
+ * // Perform work, then signal completion
3213
+ * doWork().then(() => completeTask(taskId))
3214
+ * })
3215
+ *
3216
+ * await scheduleTask('com.myapp.sync', {
3217
+ * type: 'refresh',
3218
+ * requiresNetworkConnectivity: true,
3219
+ * })
3220
+ * ```
3221
+ */
3222
+ declare function useBackgroundTask(): {
3223
+ registerTask: (taskId: string) => Promise<void>;
3224
+ scheduleTask: (taskId: string, options?: BackgroundTaskOptions) => Promise<void>;
3225
+ cancelTask: (taskId: string) => Promise<void>;
3226
+ cancelAllTasks: () => Promise<void>;
3227
+ completeTask: (taskId: string, success?: boolean) => Promise<void>;
3228
+ onTaskExecute: (handler: (taskId: string) => void, taskId?: string) => () => void;
3229
+ };
3230
+
3231
+ interface UpdateInfo {
3232
+ /** Whether an update is available. */
3233
+ updateAvailable: boolean;
3234
+ /** Version string of the available update. */
3235
+ version: string;
3236
+ /** URL to download the update bundle. */
3237
+ downloadUrl: string;
3238
+ /** SHA-256 hash of the bundle for integrity verification. */
3239
+ hash: string;
3240
+ /** Size of the update in bytes. */
3241
+ size: number;
3242
+ /** Release notes for the update. */
3243
+ releaseNotes: string;
3244
+ }
3245
+ interface VersionInfo {
3246
+ /** Current bundle version identifier. */
3247
+ version: string;
3248
+ /** Whether the app is currently running an OTA bundle. */
3249
+ isUsingOTA: boolean;
3250
+ /** Path to the active OTA bundle, or empty string if using embedded. */
3251
+ bundlePath: string;
3252
+ }
3253
+ type UpdateStatus = 'idle' | 'checking' | 'downloading' | 'ready' | 'error';
3254
+ /**
3255
+ * Composable for managing Over-The-Air (OTA) JS bundle updates.
3256
+ *
3257
+ * Downloads new JS bundles from a server, verifies integrity via SHA-256,
3258
+ * and applies them on the next app launch.
3259
+ *
3260
+ * @param serverUrl - URL of the update server endpoint
3261
+ *
3262
+ * @example
3263
+ * ```ts
3264
+ * const {
3265
+ * checkForUpdate, downloadUpdate, applyUpdate, rollback,
3266
+ * currentVersion, availableVersion, downloadProgress,
3267
+ * isChecking, isDownloading, error,
3268
+ * } = useOTAUpdate('https://updates.myapp.com/check')
3269
+ *
3270
+ * await checkForUpdate()
3271
+ * if (availableVersion.value) {
3272
+ * await downloadUpdate()
3273
+ * await applyUpdate()
3274
+ * // Restart app to load new bundle
3275
+ * }
3276
+ * ```
3277
+ */
3278
+ declare function useOTAUpdate(serverUrl: string): {
3279
+ checkForUpdate: () => Promise<UpdateInfo>;
3280
+ downloadUpdate: (url?: string, hash?: string) => Promise<void>;
3281
+ applyUpdate: () => Promise<void>;
3282
+ rollback: () => Promise<void>;
3283
+ getCurrentVersion: () => Promise<VersionInfo>;
3284
+ currentVersion: _vue_reactivity.Ref<string, string>;
3285
+ availableVersion: _vue_reactivity.Ref<string | null, string | null>;
3286
+ downloadProgress: _vue_reactivity.Ref<number, number>;
3287
+ isChecking: _vue_reactivity.Ref<boolean, boolean>;
3288
+ isDownloading: _vue_reactivity.Ref<boolean, boolean>;
3289
+ status: _vue_reactivity.Ref<UpdateStatus, UpdateStatus>;
3290
+ error: _vue_reactivity.Ref<string | null, string | null>;
3291
+ };
3292
+
3293
+ interface BLEDevice {
3294
+ id: string;
3295
+ name: string;
3296
+ rssi: number;
3297
+ }
3298
+ interface BLECharacteristic {
3299
+ value: string;
3300
+ characteristicUUID: string;
3301
+ serviceUUID: string;
3302
+ }
3303
+ interface BLECharacteristicChange {
3304
+ deviceId: string;
3305
+ serviceUUID: string;
3306
+ characteristicUUID: string;
3307
+ value: string;
3308
+ }
3309
+ type BLEState = 'poweredOn' | 'poweredOff' | 'unauthorized' | 'unsupported' | 'resetting' | 'unknown';
3310
+ /**
3311
+ * Bluetooth Low Energy (BLE) composable for scanning, connecting,
3312
+ * and communicating with BLE peripherals.
3313
+ *
3314
+ * @example
3315
+ * const { scan, connect, devices, connectedDevice, isScanning } = useBluetooth()
3316
+ *
3317
+ * // Scan for devices
3318
+ * await scan()
3319
+ *
3320
+ * // Connect to a device
3321
+ * await connect(devices.value[0].id)
3322
+ *
3323
+ * // Read a characteristic
3324
+ * const data = await read(deviceId, serviceUUID, charUUID)
3325
+ */
3326
+ declare function useBluetooth(): {
3327
+ scan: (serviceUUIDs?: string[]) => Promise<void>;
3328
+ stopScan: () => Promise<void>;
3329
+ connect: (deviceId: string) => Promise<BLEDevice>;
3330
+ disconnect: (deviceId: string) => Promise<void>;
3331
+ read: (deviceId: string, serviceUUID: string, charUUID: string) => Promise<BLECharacteristic>;
3332
+ write: (deviceId: string, serviceUUID: string, charUUID: string, data: string) => Promise<void>;
3333
+ subscribe: (deviceId: string, serviceUUID: string, charUUID: string, callback: (change: BLECharacteristicChange) => void) => Promise<() => void>;
3334
+ devices: _vue_reactivity.Ref<{
3335
+ id: string;
3336
+ name: string;
3337
+ rssi: number;
3338
+ }[], BLEDevice[] | {
3339
+ id: string;
3340
+ name: string;
3341
+ rssi: number;
3342
+ }[]>;
3343
+ connectedDevice: _vue_reactivity.Ref<{
3344
+ id: string;
3345
+ name: string;
3346
+ rssi: number;
3347
+ } | null, BLEDevice | {
3348
+ id: string;
3349
+ name: string;
3350
+ rssi: number;
3351
+ } | null>;
3352
+ isScanning: _vue_reactivity.Ref<boolean, boolean>;
3353
+ isAvailable: _vue_reactivity.Ref<boolean, boolean>;
3354
+ error: _vue_reactivity.Ref<string | null, string | null>;
3355
+ };
3356
+
3357
+ interface CalendarEvent {
3358
+ id: string;
3359
+ title: string;
3360
+ startDate: number;
3361
+ endDate: number;
3362
+ isAllDay: boolean;
3363
+ calendarId: string;
3364
+ notes?: string;
3365
+ location?: string;
3366
+ }
3367
+ interface Calendar {
3368
+ id: string;
3369
+ title: string;
3370
+ color: string;
3371
+ type: string;
3372
+ isImmutable?: boolean;
3373
+ }
3374
+ interface CreateEventOptions {
3375
+ title: string;
3376
+ startDate: number;
3377
+ endDate: number;
3378
+ notes?: string;
3379
+ calendarId?: string;
3380
+ }
3381
+ /**
3382
+ * Calendar access composable for reading and writing calendar events.
3383
+ *
3384
+ * @example
3385
+ * const { requestAccess, getEvents, createEvent } = useCalendar()
3386
+ *
3387
+ * await requestAccess()
3388
+ * const events = await getEvents(Date.now(), Date.now() + 86400000)
3389
+ */
3390
+ declare function useCalendar(): {
3391
+ requestAccess: () => Promise<boolean>;
3392
+ getEvents: (startDate: number, endDate: number) => Promise<CalendarEvent[]>;
3393
+ createEvent: (options: CreateEventOptions) => Promise<{
3394
+ eventId: string;
3395
+ }>;
3396
+ deleteEvent: (eventId: string) => Promise<void>;
3397
+ getCalendars: () => Promise<Calendar[]>;
3398
+ hasAccess: _vue_reactivity.Ref<boolean, boolean>;
3399
+ error: _vue_reactivity.Ref<string | null, string | null>;
3400
+ };
3401
+
3402
+ interface ContactField {
3403
+ label: string;
3404
+ value: string;
3405
+ }
3406
+ interface Contact {
3407
+ id: string;
3408
+ givenName: string;
3409
+ familyName: string;
3410
+ middleName: string;
3411
+ organizationName: string;
3412
+ jobTitle: string;
3413
+ hasImage: boolean;
3414
+ emailAddresses?: ContactField[];
3415
+ phoneNumbers?: ContactField[];
3416
+ }
3417
+ interface CreateContactData {
3418
+ givenName?: string;
3419
+ familyName?: string;
3420
+ middleName?: string;
3421
+ organizationName?: string;
3422
+ jobTitle?: string;
3423
+ note?: string;
3424
+ emailAddresses?: ContactField[];
3425
+ phoneNumbers?: ContactField[];
3426
+ }
3427
+ /**
3428
+ * Contacts access composable for reading and writing device contacts.
3429
+ *
3430
+ * @example
3431
+ * const { requestAccess, getContacts, createContact } = useContacts()
3432
+ *
3433
+ * await requestAccess()
3434
+ * const contacts = await getContacts('John')
3435
+ */
3436
+ declare function useContacts(): {
3437
+ requestAccess: () => Promise<boolean>;
3438
+ getContacts: (query?: string) => Promise<Contact[]>;
3439
+ getContact: (id: string) => Promise<Contact>;
3440
+ createContact: (data: CreateContactData) => Promise<{
3441
+ id: string;
3442
+ }>;
3443
+ deleteContact: (id: string) => Promise<void>;
3444
+ hasAccess: _vue_reactivity.Ref<boolean, boolean>;
3445
+ error: _vue_reactivity.Ref<string | null, string | null>;
3446
+ };
3447
+
1637
3448
  /**
1638
3449
  * NativeBridge -- the communication layer between JavaScript and Swift/UIKit.
1639
3450
  *
@@ -1841,4 +3652,4 @@ interface NativeApp extends App {
1841
3652
  */
1842
3653
  declare function createApp(rootComponent: Component, rootProps?: Record<string, any>): NativeApp;
1843
3654
 
1844
- export { type ActionSheetAction, type AlertButton, type AppStateStatus, type BiometryResult, type BiometryType, type CameraOptions, type CameraResult, type ColorScheme, type ConnectionType, type GeoCoordinates, type HttpRequestConfig, type HttpResponse, type LocalNotification, type NativeApp, NativeBridge, type NativeNode, type NetworkState, type NotificationPayload, type Permission, type PermissionStatus, type ShareContent, type ShareResult, type SpringOptions, type StatusBarStyle, type StyleProp, type StyleSheet, type TimingOptions, VActionSheet, VActivityIndicator, VAlertDialog, VButton, VImage, VInput, VKeyboardAvoiding, VList, VModal, VPicker, VProgressBar, VSafeArea, VScrollView, VSegmentedControl, VSlider, VStatusBar, VSwitch, VText, VView, VWebView, type WebViewSource, createApp, createCommentNode, createNativeNode, createStyleSheet, createTextNode, render, resetNodeId, useAnimation, useAppState, useAsyncStorage, useBackHandler, useBiometry, useCamera, useClipboard, useColorScheme, useDeviceInfo, useGeolocation, useHaptics, useHttp, useKeyboard, useLinking, useNetwork, useNotifications, usePermissions, useShare, vShow, validStyleProperties };
3655
+ export { type AccessibilityProps, type ActionSheetAction, type AlertButton, type AlignContent, type AlignItems, type AlignSelf, type AnyStyle, type AppStateStatus, type AudioPlayOptions, type AudioRecordOptions, type AudioRecordResult, type AuthResult, type BLECharacteristic, type BLECharacteristicChange, type BLEDevice, type BLEState, type BackgroundTaskOptions, type BackgroundTaskType, type BiometryResult, type BiometryType, type BorderStyle, type Calendar, type CalendarEvent, type CameraOptions, type CameraResult, type ColorScheme, type ConnectionType, type Contact, type ContactField, type CreateContactData, type CreateEventOptions, type Dimensions, type Direction, type Display, type DropdownOption, ErrorBoundary, type ExecuteResult, type FileStat, type FlexDirection, type FlexWrap, type FontStyle, type FontWeight, type GeoCoordinates, type HttpRequestConfig, type HttpResponse, type ImageStyle, type ImportantForAccessibility, type JustifyContent, type LocalNotification, type NativeApp, NativeBridge, type NativeNode, type NetworkState, type NotificationPayload, type Overflow, type PerformanceMetrics, type Permission, type PermissionStatus, type Platform, type Position, type Product, type ProductType, type Purchase, type PushNotificationPayload, type QRCodeResult, type RadioOption, type ResizeMode, type Row, type SensorData, type SensorOptions, type ShadowOffset, type ShareContent, type ShareResult, type SharedElementFrame, type SharedElementRegistration, type SocialUser, type SpringOptions, type StatusBarStyle, type StyleProp, type StyleSheet, type TextAlign, type TextDecorationLine, type TextDecorationStyle, type TextStyle, type TextTransform, type TimingOptions, type TransactionContext, type TransactionState, type TransactionUpdate, type TransformValue, type UpdateInfo, type UpdateStatus, VActionSheet, type VActionSheetProps, VActivityIndicator, type VActivityIndicatorProps, VAlertDialog, type VAlertDialogProps, VButton, type VButtonProps, VCheckbox, type VCheckboxProps, VDropdown, type VDropdownProps, VImage, type VImageProps, VInput, type VInputProps, VKeyboardAvoiding, type VKeyboardAvoidingProps, VList, type VListProps, VModal, type VModalProps, VPicker, type VPickerProps, VPressable, type VPressableProps, VProgressBar, type VProgressBarProps, VRadio, type VRadioProps, VRefreshControl, type VRefreshControlProps, VSafeArea, type VSafeAreaProps, VScrollView, type VScrollViewProps, VSectionList, type VSectionListProps, VSegmentedControl, type VSegmentedControlProps, VSlider, type VSliderProps, VStatusBar, type VStatusBarProps, VSwitch, type VSwitchProps, VText, type VTextProps, VVideo, type VVideoProps, VView, type VViewProps, VWebView, type VWebViewProps, type VersionInfo, type VideoCaptureOptions, type VideoCaptureResult, type ViewStyle, type WebSocketOptions, type WebSocketStatus, type WebViewSource, clearSharedElementRegistry, createApp, createCommentNode, createNativeNode, createStyleSheet, createTextNode, getRegisteredSharedElements, getSharedElementViewId, measureViewFrame, render, resetNodeId, useAccelerometer, useAnimation, useAppState, useAppleSignIn, useAsyncStorage, useAudio, useBackHandler, useBackgroundTask, useBiometry, useBluetooth, useCalendar, useCamera, useClipboard, useColorScheme, useContacts, useDatabase, useDeviceInfo, useDimensions, useFileSystem, useGeolocation, useGoogleSignIn, useGyroscope, useHaptics, useHttp, useI18n, useIAP, useKeyboard, useLinking, useNetwork, useNotifications, useOTAUpdate, usePerformance, usePermissions, usePlatform, useSecureStorage, useShare, useSharedElementTransition, useWebSocket, vShow, validStyleProperties };