@use-voltra/expo-plugin 1.3.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/README.md +34 -0
- package/build/cjs/android/files/assets.js +259 -0
- package/build/cjs/android/files/assets.js.map +1 -0
- package/build/cjs/android/files/fonts.js +69 -0
- package/build/cjs/android/files/fonts.js.map +1 -0
- package/build/cjs/android/files/index.js +81 -0
- package/build/cjs/android/files/index.js.map +1 -0
- package/build/cjs/android/files/initialStates.js +83 -0
- package/build/cjs/android/files/initialStates.js.map +1 -0
- package/build/cjs/android/files/kotlin.js +142 -0
- package/build/cjs/android/files/kotlin.js.map +1 -0
- package/build/cjs/android/files/xml.js +247 -0
- package/build/cjs/android/files/xml.js.map +1 -0
- package/build/cjs/android/index.js +33 -0
- package/build/cjs/android/index.js.map +1 -0
- package/build/cjs/android/manifest.js +63 -0
- package/build/cjs/android/manifest.js.map +1 -0
- package/build/cjs/constants.js +48 -0
- package/build/cjs/constants.js.map +1 -0
- package/build/cjs/index.js +71 -0
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/ios/eas.js +28 -0
- package/build/cjs/ios/eas.js.map +1 -0
- package/build/cjs/ios/entitlements.js +46 -0
- package/build/cjs/ios/entitlements.js.map +1 -0
- package/build/cjs/ios/index.js +39 -0
- package/build/cjs/ios/index.js.map +1 -0
- package/build/cjs/ios/infoPlist.js +51 -0
- package/build/cjs/ios/infoPlist.js.map +1 -0
- package/build/cjs/ios/pushNotifications.js +22 -0
- package/build/cjs/ios/pushNotifications.js.map +1 -0
- package/build/cjs/ios-widget/eas.js +66 -0
- package/build/cjs/ios-widget/eas.js.map +1 -0
- package/build/cjs/ios-widget/files/assets.js +199 -0
- package/build/cjs/ios-widget/files/assets.js.map +1 -0
- package/build/cjs/ios-widget/files/entitlements.js +77 -0
- package/build/cjs/ios-widget/files/entitlements.js.map +1 -0
- package/build/cjs/ios-widget/files/index.js +92 -0
- package/build/cjs/ios-widget/files/index.js.map +1 -0
- package/build/cjs/ios-widget/files/infoPlist.js +91 -0
- package/build/cjs/ios-widget/files/infoPlist.js.map +1 -0
- package/build/cjs/ios-widget/files/swift.js +256 -0
- package/build/cjs/ios-widget/files/swift.js.map +1 -0
- package/build/cjs/ios-widget/fonts.js +151 -0
- package/build/cjs/ios-widget/fonts.js.map +1 -0
- package/build/cjs/ios-widget/index.js +46 -0
- package/build/cjs/ios-widget/index.js.map +1 -0
- package/build/cjs/ios-widget/podfile.js +43 -0
- package/build/cjs/ios-widget/podfile.js.map +1 -0
- package/build/cjs/ios-widget/widgetPlist.js +99 -0
- package/build/cjs/ios-widget/widgetPlist.js.map +1 -0
- package/build/cjs/ios-widget/xcode/buildPhases.js +245 -0
- package/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -0
- package/build/cjs/ios-widget/xcode/configurationList.js +91 -0
- package/build/cjs/ios-widget/xcode/configurationList.js.map +1 -0
- package/build/cjs/ios-widget/xcode/groups.js +65 -0
- package/build/cjs/ios-widget/xcode/groups.js.map +1 -0
- package/build/cjs/ios-widget/xcode/index.js +155 -0
- package/build/cjs/ios-widget/xcode/index.js.map +1 -0
- package/build/cjs/ios-widget/xcode/mainAppSettings.js +71 -0
- package/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -0
- package/build/cjs/ios-widget/xcode/productFile.js +74 -0
- package/build/cjs/ios-widget/xcode/productFile.js.map +1 -0
- package/build/cjs/ios-widget/xcode/target.js +113 -0
- package/build/cjs/ios-widget/xcode/target.js.map +1 -0
- package/build/cjs/package.json +3 -0
- package/build/cjs/types.js +3 -0
- package/build/cjs/types.js.map +1 -0
- package/build/cjs/utils/entitlements.js +21 -0
- package/build/cjs/utils/entitlements.js.map +1 -0
- package/build/cjs/utils/fileDiscovery.js +107 -0
- package/build/cjs/utils/fileDiscovery.js.map +1 -0
- package/build/cjs/utils/fonts.js +75 -0
- package/build/cjs/utils/fonts.js.map +1 -0
- package/build/cjs/utils/logger.js +51 -0
- package/build/cjs/utils/logger.js.map +1 -0
- package/build/cjs/utils/prerender.js +191 -0
- package/build/cjs/utils/prerender.js.map +1 -0
- package/build/cjs/utils/urlScheme.js +40 -0
- package/build/cjs/utils/urlScheme.js.map +1 -0
- package/build/cjs/validation.js +231 -0
- package/build/cjs/validation.js.map +1 -0
- package/build/esm/android/files/assets.js +223 -0
- package/build/esm/android/files/assets.js.map +1 -0
- package/build/esm/android/files/fonts.js +33 -0
- package/build/esm/android/files/fonts.js.map +1 -0
- package/build/esm/android/files/index.js +77 -0
- package/build/esm/android/files/index.js.map +1 -0
- package/build/esm/android/files/initialStates.js +44 -0
- package/build/esm/android/files/initialStates.js.map +1 -0
- package/build/esm/android/files/kotlin.js +103 -0
- package/build/esm/android/files/kotlin.js.map +1 -0
- package/build/esm/android/files/xml.js +206 -0
- package/build/esm/android/files/xml.js.map +1 -0
- package/build/esm/android/index.js +29 -0
- package/build/esm/android/index.js.map +1 -0
- package/build/esm/android/manifest.js +59 -0
- package/build/esm/android/manifest.js.map +1 -0
- package/build/esm/constants.js +45 -0
- package/build/esm/constants.js.map +1 -0
- package/build/esm/index.js +69 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/ios/eas.js +24 -0
- package/build/esm/ios/eas.js.map +1 -0
- package/build/esm/ios/entitlements.js +42 -0
- package/build/esm/ios/entitlements.js.map +1 -0
- package/build/esm/ios/index.js +34 -0
- package/build/esm/ios/index.js.map +1 -0
- package/build/esm/ios/infoPlist.js +47 -0
- package/build/esm/ios/infoPlist.js.map +1 -0
- package/build/esm/ios/pushNotifications.js +18 -0
- package/build/esm/ios/pushNotifications.js.map +1 -0
- package/build/esm/ios-widget/eas.js +62 -0
- package/build/esm/ios-widget/eas.js.map +1 -0
- package/build/esm/ios-widget/files/assets.js +163 -0
- package/build/esm/ios-widget/files/assets.js.map +1 -0
- package/build/esm/ios-widget/files/entitlements.js +37 -0
- package/build/esm/ios-widget/files/entitlements.js.map +1 -0
- package/build/esm/ios-widget/files/index.js +55 -0
- package/build/esm/ios-widget/files/index.js.map +1 -0
- package/build/esm/ios-widget/files/infoPlist.js +55 -0
- package/build/esm/ios-widget/files/infoPlist.js.map +1 -0
- package/build/esm/ios-widget/files/swift.js +217 -0
- package/build/esm/ios-widget/files/swift.js.map +1 -0
- package/build/esm/ios-widget/fonts.js +111 -0
- package/build/esm/ios-widget/fonts.js.map +1 -0
- package/build/esm/ios-widget/index.js +42 -0
- package/build/esm/ios-widget/index.js.map +1 -0
- package/build/esm/ios-widget/podfile.js +39 -0
- package/build/esm/ios-widget/podfile.js.map +1 -0
- package/build/esm/ios-widget/widgetPlist.js +92 -0
- package/build/esm/ios-widget/widgetPlist.js.map +1 -0
- package/build/esm/ios-widget/xcode/buildPhases.js +208 -0
- package/build/esm/ios-widget/xcode/buildPhases.js.map +1 -0
- package/build/esm/ios-widget/xcode/configurationList.js +87 -0
- package/build/esm/ios-widget/xcode/configurationList.js.map +1 -0
- package/build/esm/ios-widget/xcode/groups.js +61 -0
- package/build/esm/ios-widget/xcode/groups.js.map +1 -0
- package/build/esm/ios-widget/xcode/index.js +118 -0
- package/build/esm/ios-widget/xcode/index.js.map +1 -0
- package/build/esm/ios-widget/xcode/mainAppSettings.js +68 -0
- package/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -0
- package/build/esm/ios-widget/xcode/productFile.js +70 -0
- package/build/esm/ios-widget/xcode/productFile.js.map +1 -0
- package/build/esm/ios-widget/xcode/target.js +108 -0
- package/build/esm/ios-widget/xcode/target.js.map +1 -0
- package/build/esm/package.json +3 -0
- package/build/esm/types.js +2 -0
- package/build/esm/types.js.map +1 -0
- package/build/esm/utils/entitlements.js +18 -0
- package/build/esm/utils/entitlements.js.map +1 -0
- package/build/esm/utils/fileDiscovery.js +71 -0
- package/build/esm/utils/fileDiscovery.js.map +1 -0
- package/build/esm/utils/fonts.js +39 -0
- package/build/esm/utils/fonts.js.map +1 -0
- package/build/esm/utils/logger.js +48 -0
- package/build/esm/utils/logger.js.map +1 -0
- package/build/esm/utils/prerender.js +152 -0
- package/build/esm/utils/prerender.js.map +1 -0
- package/build/esm/utils/urlScheme.js +37 -0
- package/build/esm/utils/urlScheme.js.map +1 -0
- package/build/esm/validation.js +193 -0
- package/build/esm/validation.js.map +1 -0
- package/build/types/android/files/assets.d.ts +26 -0
- package/build/types/android/files/assets.d.ts.map +1 -0
- package/build/types/android/files/fonts.d.ts +19 -0
- package/build/types/android/files/fonts.d.ts.map +1 -0
- package/build/types/android/files/index.d.ts +21 -0
- package/build/types/android/files/index.d.ts.map +1 -0
- package/build/types/android/files/initialStates.d.ts +14 -0
- package/build/types/android/files/initialStates.d.ts.map +1 -0
- package/build/types/android/files/kotlin.d.ts +11 -0
- package/build/types/android/files/kotlin.d.ts.map +1 -0
- package/build/types/android/files/xml.d.ts +25 -0
- package/build/types/android/files/xml.d.ts.map +1 -0
- package/build/types/android/index.d.ts +12 -0
- package/build/types/android/index.d.ts.map +1 -0
- package/build/types/android/manifest.d.ts +15 -0
- package/build/types/android/manifest.d.ts.map +1 -0
- package/build/types/constants.d.ts +29 -0
- package/build/types/constants.d.ts.map +1 -0
- package/build/types/index.d.ts +13 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/ios/eas.d.ts +12 -0
- package/build/types/ios/eas.d.ts.map +1 -0
- package/build/types/ios/entitlements.d.ts +14 -0
- package/build/types/ios/entitlements.d.ts.map +1 -0
- package/build/types/ios/index.d.ts +19 -0
- package/build/types/ios/index.d.ts.map +1 -0
- package/build/types/ios/infoPlist.d.ts +21 -0
- package/build/types/ios/infoPlist.d.ts.map +1 -0
- package/build/types/ios/pushNotifications.d.ts +10 -0
- package/build/types/ios/pushNotifications.d.ts.map +1 -0
- package/build/types/ios-widget/eas.d.ts +15 -0
- package/build/types/ios-widget/eas.d.ts.map +1 -0
- package/build/types/ios-widget/files/assets.d.ts +13 -0
- package/build/types/ios-widget/files/assets.d.ts.map +1 -0
- package/build/types/ios-widget/files/entitlements.d.ts +17 -0
- package/build/types/ios-widget/files/entitlements.d.ts.map +1 -0
- package/build/types/ios-widget/files/index.d.ts +24 -0
- package/build/types/ios-widget/files/index.d.ts.map +1 -0
- package/build/types/ios-widget/files/infoPlist.d.ts +10 -0
- package/build/types/ios-widget/files/infoPlist.d.ts.map +1 -0
- package/build/types/ios-widget/files/swift.d.ts +15 -0
- package/build/types/ios-widget/files/swift.d.ts.map +1 -0
- package/build/types/ios-widget/fonts.d.ts +22 -0
- package/build/types/ios-widget/fonts.d.ts.map +1 -0
- package/build/types/ios-widget/index.d.ts +31 -0
- package/build/types/ios-widget/index.d.ts.map +1 -0
- package/build/types/ios-widget/podfile.d.ts +9 -0
- package/build/types/ios-widget/podfile.d.ts.map +1 -0
- package/build/types/ios-widget/widgetPlist.d.ts +20 -0
- package/build/types/ios-widget/widgetPlist.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/buildPhases.d.ts +25 -0
- package/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/configurationList.d.ts +20 -0
- package/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/groups.d.ts +15 -0
- package/build/types/ios-widget/xcode/groups.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/index.d.ts +20 -0
- package/build/types/ios-widget/xcode/index.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts +15 -0
- package/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/productFile.d.ts +14 -0
- package/build/types/ios-widget/xcode/productFile.d.ts.map +1 -0
- package/build/types/ios-widget/xcode/target.d.ts +42 -0
- package/build/types/ios-widget/xcode/target.d.ts.map +1 -0
- package/build/types/types.d.ts +261 -0
- package/build/types/types.d.ts.map +1 -0
- package/build/types/utils/entitlements.d.ts +9 -0
- package/build/types/utils/entitlements.d.ts.map +1 -0
- package/build/types/utils/fileDiscovery.d.ts +13 -0
- package/build/types/utils/fileDiscovery.d.ts.map +1 -0
- package/build/types/utils/fonts.d.ts +2 -0
- package/build/types/utils/fonts.d.ts.map +1 -0
- package/build/types/utils/logger.d.ts +30 -0
- package/build/types/utils/logger.d.ts.map +1 -0
- package/build/types/utils/prerender.d.ts +25 -0
- package/build/types/utils/prerender.d.ts.map +1 -0
- package/build/types/utils/urlScheme.d.ts +10 -0
- package/build/types/utils/urlScheme.d.ts.map +1 -0
- package/build/types/validation.d.ts +17 -0
- package/build/types/validation.d.ts.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { ConfigPlugin } from '@expo/config-plugins';
|
|
2
|
+
/**
|
|
3
|
+
* Type definitions for the Voltra plugin
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Supported widget size families
|
|
7
|
+
*/
|
|
8
|
+
export type WidgetFamily = 'systemSmall' | 'systemMedium' | 'systemLarge' | 'systemExtraLarge' | 'accessoryCircular' | 'accessoryRectangular' | 'accessoryInline';
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for a single home screen widget
|
|
11
|
+
*/
|
|
12
|
+
export interface WidgetConfig {
|
|
13
|
+
/**
|
|
14
|
+
* Unique identifier for the widget (used as the widget kind and in JS API)
|
|
15
|
+
* Must be alphanumeric with underscores only
|
|
16
|
+
*/
|
|
17
|
+
id: string;
|
|
18
|
+
/**
|
|
19
|
+
* Display name shown in the widget gallery
|
|
20
|
+
*/
|
|
21
|
+
displayName: string;
|
|
22
|
+
/**
|
|
23
|
+
* Description shown in the widget gallery
|
|
24
|
+
*/
|
|
25
|
+
description: string;
|
|
26
|
+
/**
|
|
27
|
+
* Supported widget sizes
|
|
28
|
+
* @default ['systemSmall', 'systemMedium', 'systemLarge']
|
|
29
|
+
*/
|
|
30
|
+
supportedFamilies?: WidgetFamily[];
|
|
31
|
+
/**
|
|
32
|
+
* Path to a file that default exports a WidgetVariants object for initial widget state.
|
|
33
|
+
* This will be pre-rendered at build time and bundled into the iOS app.
|
|
34
|
+
*/
|
|
35
|
+
initialStatePath?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Configuration for server-driven widget updates.
|
|
38
|
+
* When configured, the widget will periodically fetch new content from a remote server
|
|
39
|
+
* running Voltra SSR, without requiring the user to open the app.
|
|
40
|
+
*/
|
|
41
|
+
serverUpdate?: WidgetServerUpdateConfig;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Configuration for server-driven widget updates.
|
|
45
|
+
* Enables widgets to pull updates from a remote Voltra SSR service.
|
|
46
|
+
*/
|
|
47
|
+
export interface WidgetServerUpdateConfig {
|
|
48
|
+
/**
|
|
49
|
+
* The URL of the Voltra SSR endpoint that returns widget JSON.
|
|
50
|
+
* The widget ID and family will be appended as query parameters.
|
|
51
|
+
*/
|
|
52
|
+
url: string;
|
|
53
|
+
/**
|
|
54
|
+
* How often the widget should fetch updates, in minutes.
|
|
55
|
+
* iOS WidgetKit may throttle requests; minimum effective interval is ~15 minutes.
|
|
56
|
+
* @default 15
|
|
57
|
+
*/
|
|
58
|
+
intervalMinutes?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Whether to show a native refresh button in the top-right corner of the widget.
|
|
61
|
+
* When tapped, triggers an immediate server update.
|
|
62
|
+
* @default false
|
|
63
|
+
*/
|
|
64
|
+
refresh?: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Structure describing the files in a widget extension target.
|
|
68
|
+
* Used for configuring Xcode build phases and groups.
|
|
69
|
+
*/
|
|
70
|
+
export interface WidgetFiles {
|
|
71
|
+
swiftFiles: string[];
|
|
72
|
+
entitlementFiles: string[];
|
|
73
|
+
plistFiles: string[];
|
|
74
|
+
assetDirectories: string[];
|
|
75
|
+
intentFiles: string[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Configuration for a single Android widget
|
|
79
|
+
*/
|
|
80
|
+
export interface AndroidWidgetConfig {
|
|
81
|
+
/**
|
|
82
|
+
* Unique identifier for the widget
|
|
83
|
+
*/
|
|
84
|
+
id: string;
|
|
85
|
+
/**
|
|
86
|
+
* Display name shown in the widget picker
|
|
87
|
+
*/
|
|
88
|
+
displayName: string;
|
|
89
|
+
/**
|
|
90
|
+
* Description shown in the widget picker
|
|
91
|
+
*/
|
|
92
|
+
description: string;
|
|
93
|
+
/**
|
|
94
|
+
* Minimum width in dp. If provided, takes precedence over minCellWidth.
|
|
95
|
+
*/
|
|
96
|
+
minWidth?: number;
|
|
97
|
+
/**
|
|
98
|
+
* Minimum height in dp. If provided, takes precedence over minCellHeight.
|
|
99
|
+
*/
|
|
100
|
+
minHeight?: number;
|
|
101
|
+
/**
|
|
102
|
+
* Minimum width in cells. Used to derive minWidth if not provided: (N * 70) - 30
|
|
103
|
+
*/
|
|
104
|
+
minCellWidth?: number;
|
|
105
|
+
/**
|
|
106
|
+
* Minimum height in cells. Used to derive minHeight if not provided: (N * 70) - 30
|
|
107
|
+
*/
|
|
108
|
+
minCellHeight?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Target cell width (Android 12+, 1-5 cells)
|
|
111
|
+
*/
|
|
112
|
+
targetCellWidth: number;
|
|
113
|
+
/**
|
|
114
|
+
* Target cell height (Android 12+, 1-5 cells)
|
|
115
|
+
*/
|
|
116
|
+
targetCellHeight: number;
|
|
117
|
+
/**
|
|
118
|
+
* Whether the widget can be resized
|
|
119
|
+
* @default 'horizontal|vertical'
|
|
120
|
+
*/
|
|
121
|
+
resizeMode?: 'none' | 'horizontal' | 'vertical' | 'horizontal|vertical';
|
|
122
|
+
/**
|
|
123
|
+
* Widget category
|
|
124
|
+
* @default 'home_screen'
|
|
125
|
+
*/
|
|
126
|
+
widgetCategory?: 'home_screen' | 'keyguard' | 'home_screen|keyguard';
|
|
127
|
+
/**
|
|
128
|
+
* Path to a file that default exports a WidgetVariants object for initial widget state.
|
|
129
|
+
* This will be pre-rendered at build time and bundled into the app.
|
|
130
|
+
*/
|
|
131
|
+
initialStatePath?: string;
|
|
132
|
+
/**
|
|
133
|
+
* Configuration for server-driven widget updates.
|
|
134
|
+
* When configured, the widget will periodically fetch new content from a remote server
|
|
135
|
+
* running Voltra SSR, without requiring the user to open the app.
|
|
136
|
+
*/
|
|
137
|
+
serverUpdate?: AndroidWidgetServerUpdateConfig;
|
|
138
|
+
/**
|
|
139
|
+
* Path to preview image for widget picker (PNG/JPG/WebP).
|
|
140
|
+
* Sets android:previewImage attribute. Works on all Android versions.
|
|
141
|
+
* On Android 12+, combine with previewLayout for better results.
|
|
142
|
+
*/
|
|
143
|
+
previewImage?: string;
|
|
144
|
+
/**
|
|
145
|
+
* Path to custom XML layout for RemoteViews preview (Android 12+).
|
|
146
|
+
* Sets android:previewLayout attribute for scalable previews.
|
|
147
|
+
* If not provided but previewImage is set, an auto-layout will be generated.
|
|
148
|
+
*/
|
|
149
|
+
previewLayout?: string;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Configuration for server-driven Android widget updates.
|
|
153
|
+
*/
|
|
154
|
+
export interface AndroidWidgetServerUpdateConfig {
|
|
155
|
+
/**
|
|
156
|
+
* The URL of the Voltra SSR endpoint that returns widget JSON.
|
|
157
|
+
* The widget ID will be appended as a query parameter.
|
|
158
|
+
* Example: "https://api.example.com/widgets/render"
|
|
159
|
+
*/
|
|
160
|
+
url: string;
|
|
161
|
+
/**
|
|
162
|
+
* How often the widget should fetch updates, in minutes.
|
|
163
|
+
* Uses WorkManager PeriodicWorkRequest; minimum interval is 15 minutes.
|
|
164
|
+
* @default 60
|
|
165
|
+
*/
|
|
166
|
+
intervalMinutes?: number;
|
|
167
|
+
/**
|
|
168
|
+
* Whether to show a native refresh button in the top-right corner of the widget.
|
|
169
|
+
* When tapped, triggers an immediate server update.
|
|
170
|
+
* @default false
|
|
171
|
+
*/
|
|
172
|
+
refresh?: boolean;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Android-specific plugin configuration
|
|
176
|
+
*/
|
|
177
|
+
export interface AndroidPluginConfig {
|
|
178
|
+
/**
|
|
179
|
+
* Android home screen widgets
|
|
180
|
+
* Separate from iOS widgets to allow platform-specific configurations
|
|
181
|
+
*/
|
|
182
|
+
widgets?: AndroidWidgetConfig[];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Props for the Voltra config plugin
|
|
186
|
+
*/
|
|
187
|
+
export interface ConfigPluginProps {
|
|
188
|
+
/**
|
|
189
|
+
* Enable push notification support for Live Activities
|
|
190
|
+
*/
|
|
191
|
+
enablePushNotifications?: boolean;
|
|
192
|
+
/**
|
|
193
|
+
* App group identifier for sharing data between app and widget extension
|
|
194
|
+
*/
|
|
195
|
+
groupIdentifier?: string;
|
|
196
|
+
/**
|
|
197
|
+
* Configuration for iOS home screen widgets (uses WidgetFamily sizing)
|
|
198
|
+
* Each widget will be available in the widget gallery
|
|
199
|
+
*/
|
|
200
|
+
widgets?: WidgetConfig[];
|
|
201
|
+
/**
|
|
202
|
+
* iOS deployment target version for the widget extension
|
|
203
|
+
* If not provided, will use the main app's deployment target or fall back to the default
|
|
204
|
+
*/
|
|
205
|
+
deploymentTarget?: string;
|
|
206
|
+
/**
|
|
207
|
+
* Custom target name for the widget extension
|
|
208
|
+
* If not provided, defaults to "{AppName}LiveActivity"
|
|
209
|
+
* Useful for matching existing provisioning profiles or credentials
|
|
210
|
+
*/
|
|
211
|
+
targetName?: string;
|
|
212
|
+
/**
|
|
213
|
+
* Custom fonts to include in the Live Activity extension.
|
|
214
|
+
* Provide an array of font module specifiers, file paths, or directories containing fonts.
|
|
215
|
+
* Supports .ttf, .otf, .woff, and .woff2 formats.
|
|
216
|
+
*
|
|
217
|
+
* This is equivalent to expo-font but for the Live Activity extension.
|
|
218
|
+
* @see https://docs.expo.dev/versions/latest/sdk/font/
|
|
219
|
+
*/
|
|
220
|
+
fonts?: string[];
|
|
221
|
+
/**
|
|
222
|
+
* Keychain Access Group for sharing credentials between the main app and widget extension.
|
|
223
|
+
* Required when using server-driven widget updates with authentication.
|
|
224
|
+
* This should match a Keychain Sharing capability group configured in your Apple Developer account.
|
|
225
|
+
* Example: "$(AppIdentifierPrefix)com.example.shared"
|
|
226
|
+
*
|
|
227
|
+
* If not provided and any widget has `serverUpdate` configured, defaults to
|
|
228
|
+
* `$(AppIdentifierPrefix)<bundleIdentifier>` (the app's own keychain access group).
|
|
229
|
+
*/
|
|
230
|
+
keychainGroup?: string;
|
|
231
|
+
/**
|
|
232
|
+
* Android-specific configuration
|
|
233
|
+
*/
|
|
234
|
+
android?: AndroidPluginConfig;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* The main Voltra config plugin type
|
|
238
|
+
*/
|
|
239
|
+
export type VoltraConfigPlugin = ConfigPlugin<ConfigPluginProps | undefined>;
|
|
240
|
+
/**
|
|
241
|
+
* Props passed to iOS-related plugins
|
|
242
|
+
*/
|
|
243
|
+
export interface IOSPluginProps {
|
|
244
|
+
targetName: string;
|
|
245
|
+
bundleIdentifier: string;
|
|
246
|
+
deploymentTarget: string;
|
|
247
|
+
widgets?: WidgetConfig[];
|
|
248
|
+
groupIdentifier?: string;
|
|
249
|
+
projectRoot: string;
|
|
250
|
+
platformProjectRoot: string;
|
|
251
|
+
fonts?: string[];
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Props passed to Android-related plugins
|
|
255
|
+
*/
|
|
256
|
+
export interface AndroidPluginProps {
|
|
257
|
+
widgets: AndroidWidgetConfig[];
|
|
258
|
+
userImagesPath?: string;
|
|
259
|
+
fonts?: string[];
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared entitlements utilities.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Adds application groups entitlement to an entitlements object.
|
|
6
|
+
* Ensures the group list is deduped and preserves existing order.
|
|
7
|
+
*/
|
|
8
|
+
export declare function addApplicationGroupsEntitlement(entitlements: Record<string, any>, groupIdentifier: string): Record<string, any>;
|
|
9
|
+
//# sourceMappingURL=entitlements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlements.d.ts","sourceRoot":"","sources":["../../../src/utils/entitlements.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,eAAe,EAAE,MAAM,GACtB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAcrB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { WidgetFiles } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Scans the widget extension target directory and returns categorized file lists.
|
|
4
|
+
*
|
|
5
|
+
* This function only reads the directory structure - it does NOT copy or create files.
|
|
6
|
+
* File generation should be done before this is called.
|
|
7
|
+
*
|
|
8
|
+
* @param targetPath - Path to the widget extension target directory
|
|
9
|
+
* @param targetName - Name of the target (for entitlements file)
|
|
10
|
+
* @returns Categorized lists of files for Xcode project configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function getWidgetFiles(targetPath: string, targetName: string): WidgetFiles;
|
|
13
|
+
//# sourceMappingURL=fileDiscovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileDiscovery.d.ts","sourceRoot":"","sources":["../../../src/utils/fileDiscovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAG3C;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAiElF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../../src/utils/fonts.ts"],"names":[],"mappings":"AAyBA,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkB9F"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logging utility for the Voltra plugin
|
|
3
|
+
*/
|
|
4
|
+
export declare const logger: {
|
|
5
|
+
/**
|
|
6
|
+
* Log an informational message
|
|
7
|
+
*/
|
|
8
|
+
info: (message: string) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Log a warning message
|
|
11
|
+
*/
|
|
12
|
+
warn: (message: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Log a warning message in red (for critical warnings)
|
|
15
|
+
*/
|
|
16
|
+
warnRed: (message: string) => void;
|
|
17
|
+
/**
|
|
18
|
+
* Log an error message
|
|
19
|
+
*/
|
|
20
|
+
error: (message: string) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Log a success message
|
|
23
|
+
*/
|
|
24
|
+
success: (message: string) => void;
|
|
25
|
+
/**
|
|
26
|
+
* Log a debug message (only when VOLTRA_DEBUG env var is set)
|
|
27
|
+
*/
|
|
28
|
+
debug: (message: string) => void;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,eAAO,MAAM,MAAM;IACjB;;OAEG;oBACa,MAAM,KAAG,IAAI;IAI7B;;OAEG;oBACa,MAAM,KAAG,IAAI;IAI7B;;OAEG;uBACgB,MAAM,KAAG,IAAI;IAIhC;;OAEG;qBACc,MAAM,KAAG,IAAI;IAI9B;;OAEG;uBACgB,MAAM,KAAG,IAAI;IAIhC;;OAEG;qBACc,MAAM,KAAG,IAAI;CAK/B,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type for the widget renderer function
|
|
3
|
+
*/
|
|
4
|
+
export type WidgetRenderer = (variants: any) => string;
|
|
5
|
+
/**
|
|
6
|
+
* Minimal interface for widget configuration needed for prerendering
|
|
7
|
+
*/
|
|
8
|
+
export interface PrerenderableWidget {
|
|
9
|
+
id: string;
|
|
10
|
+
initialStatePath?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Prerender widget initial states for build-time inclusion.
|
|
14
|
+
*
|
|
15
|
+
* Widget code is transpiled with Babel and executed in a Node.js VM sandbox.
|
|
16
|
+
* This function loads widget files that export WidgetVariants for widgets with initialStatePath configured,
|
|
17
|
+
* renders them to JSON, and returns a map of prerendered states that can be bundled into the app.
|
|
18
|
+
*
|
|
19
|
+
* @param widgets - Array of widget configurations
|
|
20
|
+
* @param projectRoot - Root directory of the Expo project
|
|
21
|
+
* @param renderer - The renderer function to use (voltra/server or voltra/android/server)
|
|
22
|
+
* @returns Map of widgetId -> prerendered widget state as JSON string
|
|
23
|
+
*/
|
|
24
|
+
export declare function prerenderWidgetState(widgets: PrerenderableWidget[], projectRoot: string, renderer: WidgetRenderer): Promise<Map<string, string>>;
|
|
25
|
+
//# sourceMappingURL=prerender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../../src/utils/prerender.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,CAAA;AAEtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AA6ID;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,mBAAmB,EAAE,EAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6B9B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ExpoConfig } from 'expo/config';
|
|
2
|
+
/**
|
|
3
|
+
* Ensures the main app has a URL scheme set so widgetURL can open it.
|
|
4
|
+
* This is an optional feature for deep linking from widgets.
|
|
5
|
+
*
|
|
6
|
+
* @param config - The Expo config object
|
|
7
|
+
* @returns The modified config with URL scheme ensured
|
|
8
|
+
*/
|
|
9
|
+
export declare function ensureURLScheme(config: ExpoConfig): ExpoConfig;
|
|
10
|
+
//# sourceMappingURL=urlScheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlScheme.d.ts","sourceRoot":"","sources":["../../../src/utils/urlScheme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAmC9D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AndroidWidgetConfig, ConfigPluginProps, WidgetConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Validates a widget configuration.
|
|
4
|
+
* Throws an error if validation fails.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateWidgetConfig(widget: WidgetConfig): void;
|
|
7
|
+
/**
|
|
8
|
+
* Validates an Android widget configuration.
|
|
9
|
+
* Throws an error if validation fails.
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateAndroidWidgetConfig(widget: AndroidWidgetConfig, projectRoot?: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Validates the plugin props at entry point.
|
|
14
|
+
* Throws an error if validation fails.
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateProps(props: ConfigPluginProps): void;
|
|
17
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAgB,MAAM,SAAS,CAAA;AAoBjG;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAsC/D;AAMD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAiGnG;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAqD5D"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@use-voltra/expo-plugin",
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Expo config plugin for Voltra",
|
|
5
|
+
"main": "build/cjs/index.js",
|
|
6
|
+
"module": "build/esm/index.js",
|
|
7
|
+
"types": "build/types/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./build/types/index.d.ts",
|
|
11
|
+
"require": "./build/cjs/index.js",
|
|
12
|
+
"import": "./build/esm/index.js",
|
|
13
|
+
"default": "./build/esm/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"build",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "node ../../scripts/build-package.mjs packages/expo-plugin",
|
|
23
|
+
"clean": "rm -rf build",
|
|
24
|
+
"lint": "oxlint src",
|
|
25
|
+
"typecheck": "tsc -p tsconfig.typecheck.json --noEmit"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@babel/core": "^7.27.4",
|
|
29
|
+
"@expo/config-plugins": "~10.1.2",
|
|
30
|
+
"@expo/plist": "^0.3.5",
|
|
31
|
+
"dedent": "^1.7.1",
|
|
32
|
+
"vd-tool": "^4.0.2",
|
|
33
|
+
"xcode": "^3.0.1"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"voltra",
|
|
37
|
+
"expo",
|
|
38
|
+
"plugin",
|
|
39
|
+
"ios",
|
|
40
|
+
"android"
|
|
41
|
+
],
|
|
42
|
+
"author": "Saúl Sharma (https://x.com/saul_sharma), Szymon Chmal (https://x.com/chmalszymon)",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "git+https://github.com/callstackincubator/voltra.git",
|
|
46
|
+
"directory": "packages/expo-plugin"
|
|
47
|
+
},
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/callstackincubator/voltra/issues"
|
|
50
|
+
},
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"homepage": "https://use-voltra.dev",
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"expo": "*",
|
|
55
|
+
"react": "*",
|
|
56
|
+
"react-native": "*"
|
|
57
|
+
}
|
|
58
|
+
}
|