@use-voltra/ios-client 1.4.1 → 2.0.0-rc.2

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.
Files changed (577) hide show
  1. package/README.md +113 -0
  2. package/Voltra.podspec +28 -0
  3. package/build/commonjs/VoltraModule.js +13 -0
  4. package/build/commonjs/VoltraModule.js.map +1 -0
  5. package/build/commonjs/components/VoltraLiveActivityPreview.js +30 -0
  6. package/build/commonjs/components/VoltraLiveActivityPreview.js.map +1 -0
  7. package/build/commonjs/components/VoltraView.js +50 -0
  8. package/build/commonjs/components/VoltraView.js.map +1 -0
  9. package/build/commonjs/components/VoltraWidgetPreview.js +58 -0
  10. package/build/commonjs/components/VoltraWidgetPreview.js.map +1 -0
  11. package/build/commonjs/events.js +32 -0
  12. package/build/commonjs/events.js.map +1 -0
  13. package/build/commonjs/helpers.js +26 -0
  14. package/build/commonjs/helpers.js.map +1 -0
  15. package/build/commonjs/index.js +226 -0
  16. package/build/commonjs/index.js.map +1 -0
  17. package/build/commonjs/live-activity/api.js +168 -0
  18. package/build/commonjs/live-activity/api.js.map +1 -0
  19. package/build/commonjs/logger.js +39 -0
  20. package/build/commonjs/logger.js.map +1 -0
  21. package/build/commonjs/native/NativeVoltra.js +15 -0
  22. package/build/commonjs/native/NativeVoltra.js.map +1 -0
  23. package/build/commonjs/native/VoltraRNNativeComponent.ts +9 -0
  24. package/build/commonjs/package.json +1 -0
  25. package/build/commonjs/preload.js +54 -0
  26. package/build/commonjs/preload.js.map +1 -0
  27. package/build/commonjs/types.js +2 -0
  28. package/build/commonjs/types.js.map +1 -0
  29. package/build/commonjs/utils/assertRunningOnApple.js +16 -0
  30. package/build/commonjs/utils/assertRunningOnApple.js.map +1 -0
  31. package/build/commonjs/utils/helpers.js +19 -0
  32. package/build/commonjs/utils/helpers.js.map +1 -0
  33. package/build/commonjs/utils/index.js +28 -0
  34. package/build/commonjs/utils/index.js.map +1 -0
  35. package/build/commonjs/utils/useUpdateOnHMR.js +25 -0
  36. package/build/commonjs/utils/useUpdateOnHMR.js.map +1 -0
  37. package/build/commonjs/widgets/server-credentials.js +18 -0
  38. package/build/commonjs/widgets/server-credentials.js.map +1 -0
  39. package/build/commonjs/widgets/widget-api.js +55 -0
  40. package/build/commonjs/widgets/widget-api.js.map +1 -0
  41. package/build/module/VoltraModule.js +4 -0
  42. package/build/module/VoltraModule.js.map +1 -0
  43. package/build/module/components/VoltraLiveActivityPreview.js +25 -0
  44. package/build/module/components/VoltraLiveActivityPreview.js.map +1 -0
  45. package/build/module/components/VoltraView.js +44 -0
  46. package/build/module/components/VoltraView.js.map +1 -0
  47. package/build/module/components/VoltraWidgetPreview.js +53 -0
  48. package/build/module/components/VoltraWidgetPreview.js.map +1 -0
  49. package/build/module/events.js +28 -0
  50. package/build/module/events.js.map +1 -0
  51. package/build/module/helpers.js +21 -0
  52. package/build/module/helpers.js.map +1 -0
  53. package/build/module/index.js +17 -0
  54. package/build/module/index.js.map +1 -0
  55. package/build/module/live-activity/api.js +158 -0
  56. package/build/module/live-activity/api.js.map +1 -0
  57. package/build/module/logger.js +35 -0
  58. package/build/module/logger.js.map +1 -0
  59. package/build/module/native/NativeVoltra.js +11 -0
  60. package/build/module/native/NativeVoltra.js.map +1 -0
  61. package/build/module/native/VoltraRNNativeComponent.ts +9 -0
  62. package/build/module/package.json +1 -0
  63. package/build/module/preload.js +48 -0
  64. package/build/module/preload.js.map +1 -0
  65. package/build/module/types.js +2 -0
  66. package/build/module/types.js.map +1 -0
  67. package/build/module/utils/assertRunningOnApple.js +11 -0
  68. package/build/module/utils/assertRunningOnApple.js.map +1 -0
  69. package/build/module/utils/helpers.js +4 -0
  70. package/build/module/utils/helpers.js.map +1 -0
  71. package/build/module/utils/index.js +5 -0
  72. package/build/module/utils/index.js.map +1 -0
  73. package/build/module/utils/useUpdateOnHMR.js +20 -0
  74. package/build/module/utils/useUpdateOnHMR.js.map +1 -0
  75. package/build/module/widgets/server-credentials.js +13 -0
  76. package/build/module/widgets/server-credentials.js.map +1 -0
  77. package/build/module/widgets/widget-api.js +45 -0
  78. package/build/module/widgets/widget-api.js.map +1 -0
  79. package/build/typescript/commonjs/VoltraModule.d.ts +3 -0
  80. package/build/typescript/commonjs/VoltraModule.d.ts.map +1 -0
  81. package/build/typescript/commonjs/components/VoltraLiveActivityPreview.d.ts.map +1 -0
  82. package/build/typescript/commonjs/components/VoltraView.d.ts.map +1 -0
  83. package/build/typescript/commonjs/components/VoltraWidgetPreview.d.ts.map +1 -0
  84. package/build/typescript/commonjs/events.d.ts.map +1 -0
  85. package/build/typescript/commonjs/helpers.d.ts.map +1 -0
  86. package/build/{types → typescript/commonjs}/index.d.ts +5 -0
  87. package/build/typescript/commonjs/index.d.ts.map +1 -0
  88. package/build/typescript/commonjs/live-activity/api.d.ts.map +1 -0
  89. package/build/typescript/commonjs/logger.d.ts.map +1 -0
  90. package/build/typescript/commonjs/native/NativeVoltra.d.ts +100 -0
  91. package/build/typescript/commonjs/native/NativeVoltra.d.ts.map +1 -0
  92. package/build/typescript/commonjs/native/VoltraRNNativeComponent.d.ts +8 -0
  93. package/build/typescript/commonjs/native/VoltraRNNativeComponent.d.ts.map +1 -0
  94. package/build/typescript/commonjs/package.json +1 -0
  95. package/build/typescript/commonjs/preload.d.ts.map +1 -0
  96. package/build/typescript/commonjs/types.d.ts.map +1 -0
  97. package/build/typescript/commonjs/utils/assertRunningOnApple.d.ts.map +1 -0
  98. package/build/typescript/commonjs/utils/helpers.d.ts.map +1 -0
  99. package/build/typescript/commonjs/utils/index.d.ts.map +1 -0
  100. package/build/typescript/commonjs/utils/useUpdateOnHMR.d.ts.map +1 -0
  101. package/build/typescript/commonjs/widgets/server-credentials.d.ts.map +1 -0
  102. package/build/typescript/commonjs/widgets/widget-api.d.ts.map +1 -0
  103. package/build/typescript/module/VoltraModule.d.ts +3 -0
  104. package/build/typescript/module/VoltraModule.d.ts.map +1 -0
  105. package/build/typescript/module/components/VoltraLiveActivityPreview.d.ts +7 -0
  106. package/build/typescript/module/components/VoltraLiveActivityPreview.d.ts.map +1 -0
  107. package/build/typescript/module/components/VoltraView.d.ts +12 -0
  108. package/build/typescript/module/components/VoltraView.d.ts.map +1 -0
  109. package/build/typescript/module/components/VoltraWidgetPreview.d.ts +9 -0
  110. package/build/typescript/module/components/VoltraWidgetPreview.d.ts.map +1 -0
  111. package/build/typescript/module/events.d.ts +33 -0
  112. package/build/typescript/module/events.d.ts.map +1 -0
  113. package/build/typescript/module/helpers.d.ts +3 -0
  114. package/build/typescript/module/helpers.d.ts.map +1 -0
  115. package/build/typescript/module/index.d.ts +18 -0
  116. package/build/typescript/module/index.d.ts.map +1 -0
  117. package/build/typescript/module/live-activity/api.d.ts +35 -0
  118. package/build/typescript/module/live-activity/api.d.ts.map +1 -0
  119. package/build/typescript/module/logger.d.ts +16 -0
  120. package/build/typescript/module/logger.d.ts.map +1 -0
  121. package/build/typescript/module/native/NativeVoltra.d.ts +100 -0
  122. package/build/typescript/module/native/NativeVoltra.d.ts.map +1 -0
  123. package/build/typescript/module/native/VoltraRNNativeComponent.d.ts +8 -0
  124. package/build/typescript/module/native/VoltraRNNativeComponent.d.ts.map +1 -0
  125. package/build/typescript/module/package.json +1 -0
  126. package/build/typescript/module/preload.d.ts +6 -0
  127. package/build/typescript/module/preload.d.ts.map +1 -0
  128. package/build/typescript/module/types.d.ts +2 -0
  129. package/build/typescript/module/types.d.ts.map +1 -0
  130. package/build/typescript/module/utils/assertRunningOnApple.d.ts +2 -0
  131. package/build/typescript/module/utils/assertRunningOnApple.d.ts.map +1 -0
  132. package/build/{esm/utils/helpers.js → typescript/module/utils/helpers.d.ts} +1 -1
  133. package/build/typescript/module/utils/helpers.d.ts.map +1 -0
  134. package/build/{esm/utils/index.js → typescript/module/utils/index.d.ts} +1 -1
  135. package/build/typescript/module/utils/index.d.ts.map +1 -0
  136. package/build/typescript/module/utils/useUpdateOnHMR.d.ts +5 -0
  137. package/build/typescript/module/utils/useUpdateOnHMR.d.ts.map +1 -0
  138. package/build/typescript/module/widgets/server-credentials.d.ts +5 -0
  139. package/build/typescript/module/widgets/server-credentials.d.ts.map +1 -0
  140. package/build/typescript/module/widgets/widget-api.d.ts +11 -0
  141. package/build/typescript/module/widgets/widget-api.d.ts.map +1 -0
  142. package/expo-plugin/app.plugin.js +3 -0
  143. package/expo-plugin/build/cjs/constants.js +23 -0
  144. package/expo-plugin/build/cjs/constants.js.map +1 -0
  145. package/expo-plugin/build/cjs/index.js +51 -0
  146. package/expo-plugin/build/cjs/index.js.map +1 -0
  147. package/expo-plugin/build/cjs/ios/eas.js +28 -0
  148. package/expo-plugin/build/cjs/ios/eas.js.map +1 -0
  149. package/expo-plugin/build/cjs/ios/entitlements.js +46 -0
  150. package/expo-plugin/build/cjs/ios/entitlements.js.map +1 -0
  151. package/expo-plugin/build/cjs/ios/index.js +39 -0
  152. package/expo-plugin/build/cjs/ios/index.js.map +1 -0
  153. package/expo-plugin/build/cjs/ios/infoPlist.js +51 -0
  154. package/expo-plugin/build/cjs/ios/infoPlist.js.map +1 -0
  155. package/expo-plugin/build/cjs/ios/pushNotifications.js +22 -0
  156. package/expo-plugin/build/cjs/ios/pushNotifications.js.map +1 -0
  157. package/expo-plugin/build/cjs/ios-widget/eas.js +66 -0
  158. package/expo-plugin/build/cjs/ios-widget/eas.js.map +1 -0
  159. package/expo-plugin/build/cjs/ios-widget/files/assets.js +199 -0
  160. package/expo-plugin/build/cjs/ios-widget/files/assets.js.map +1 -0
  161. package/expo-plugin/build/cjs/ios-widget/files/entitlements.js +77 -0
  162. package/expo-plugin/build/cjs/ios-widget/files/entitlements.js.map +1 -0
  163. package/expo-plugin/build/cjs/ios-widget/files/index.js +92 -0
  164. package/expo-plugin/build/cjs/ios-widget/files/index.js.map +1 -0
  165. package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js +91 -0
  166. package/expo-plugin/build/cjs/ios-widget/files/infoPlist.js.map +1 -0
  167. package/expo-plugin/build/cjs/ios-widget/files/swift.js +443 -0
  168. package/expo-plugin/build/cjs/ios-widget/files/swift.js.map +1 -0
  169. package/expo-plugin/build/cjs/ios-widget/fonts.js +151 -0
  170. package/expo-plugin/build/cjs/ios-widget/fonts.js.map +1 -0
  171. package/expo-plugin/build/cjs/ios-widget/index.js +46 -0
  172. package/expo-plugin/build/cjs/ios-widget/index.js.map +1 -0
  173. package/expo-plugin/build/cjs/ios-widget/podfile.js +41 -0
  174. package/expo-plugin/build/cjs/ios-widget/podfile.js.map +1 -0
  175. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js +99 -0
  176. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js.map +1 -0
  177. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js +247 -0
  178. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -0
  179. package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js +91 -0
  180. package/expo-plugin/build/cjs/ios-widget/xcode/configurationList.js.map +1 -0
  181. package/expo-plugin/build/cjs/ios-widget/xcode/groups.js +79 -0
  182. package/expo-plugin/build/cjs/ios-widget/xcode/groups.js.map +1 -0
  183. package/expo-plugin/build/cjs/ios-widget/xcode/index.js +155 -0
  184. package/expo-plugin/build/cjs/ios-widget/xcode/index.js.map +1 -0
  185. package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js +71 -0
  186. package/expo-plugin/build/cjs/ios-widget/xcode/mainAppSettings.js.map +1 -0
  187. package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js +74 -0
  188. package/expo-plugin/build/cjs/ios-widget/xcode/productFile.js.map +1 -0
  189. package/expo-plugin/build/cjs/ios-widget/xcode/target.js +113 -0
  190. package/expo-plugin/build/cjs/ios-widget/xcode/target.js.map +1 -0
  191. package/expo-plugin/build/cjs/utils/fileDiscovery.js +120 -0
  192. package/expo-plugin/build/cjs/utils/fileDiscovery.js.map +1 -0
  193. package/expo-plugin/build/cjs/utils/urlScheme.js +40 -0
  194. package/expo-plugin/build/cjs/utils/urlScheme.js.map +1 -0
  195. package/expo-plugin/build/cjs/validation.js +55 -0
  196. package/expo-plugin/build/cjs/validation.js.map +1 -0
  197. package/expo-plugin/build/esm/constants.js +20 -0
  198. package/expo-plugin/build/esm/constants.js.map +1 -0
  199. package/expo-plugin/build/esm/index.js +49 -0
  200. package/expo-plugin/build/esm/index.js.map +1 -0
  201. package/expo-plugin/build/esm/ios/eas.js +24 -0
  202. package/expo-plugin/build/esm/ios/eas.js.map +1 -0
  203. package/expo-plugin/build/esm/ios/entitlements.js +42 -0
  204. package/expo-plugin/build/esm/ios/entitlements.js.map +1 -0
  205. package/expo-plugin/build/esm/ios/index.js +34 -0
  206. package/expo-plugin/build/esm/ios/index.js.map +1 -0
  207. package/expo-plugin/build/esm/ios/infoPlist.js +47 -0
  208. package/expo-plugin/build/esm/ios/infoPlist.js.map +1 -0
  209. package/expo-plugin/build/esm/ios/pushNotifications.js +18 -0
  210. package/expo-plugin/build/esm/ios/pushNotifications.js.map +1 -0
  211. package/expo-plugin/build/esm/ios-widget/eas.js +62 -0
  212. package/expo-plugin/build/esm/ios-widget/eas.js.map +1 -0
  213. package/expo-plugin/build/esm/ios-widget/files/assets.js +163 -0
  214. package/expo-plugin/build/esm/ios-widget/files/assets.js.map +1 -0
  215. package/expo-plugin/build/esm/ios-widget/files/entitlements.js +37 -0
  216. package/expo-plugin/build/esm/ios-widget/files/entitlements.js.map +1 -0
  217. package/expo-plugin/build/esm/ios-widget/files/index.js +55 -0
  218. package/expo-plugin/build/esm/ios-widget/files/index.js.map +1 -0
  219. package/expo-plugin/build/esm/ios-widget/files/infoPlist.js +55 -0
  220. package/expo-plugin/build/esm/ios-widget/files/infoPlist.js.map +1 -0
  221. package/expo-plugin/build/esm/ios-widget/files/swift.js +403 -0
  222. package/expo-plugin/build/esm/ios-widget/files/swift.js.map +1 -0
  223. package/expo-plugin/build/esm/ios-widget/fonts.js +111 -0
  224. package/expo-plugin/build/esm/ios-widget/fonts.js.map +1 -0
  225. package/expo-plugin/build/esm/ios-widget/index.js +42 -0
  226. package/expo-plugin/build/esm/ios-widget/index.js.map +1 -0
  227. package/expo-plugin/build/esm/ios-widget/podfile.js +37 -0
  228. package/expo-plugin/build/esm/ios-widget/podfile.js.map +1 -0
  229. package/expo-plugin/build/esm/ios-widget/widgetPlist.js +92 -0
  230. package/expo-plugin/build/esm/ios-widget/widgetPlist.js.map +1 -0
  231. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js +210 -0
  232. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js.map +1 -0
  233. package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js +87 -0
  234. package/expo-plugin/build/esm/ios-widget/xcode/configurationList.js.map +1 -0
  235. package/expo-plugin/build/esm/ios-widget/xcode/groups.js +75 -0
  236. package/expo-plugin/build/esm/ios-widget/xcode/groups.js.map +1 -0
  237. package/expo-plugin/build/esm/ios-widget/xcode/index.js +118 -0
  238. package/expo-plugin/build/esm/ios-widget/xcode/index.js.map +1 -0
  239. package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js +68 -0
  240. package/expo-plugin/build/esm/ios-widget/xcode/mainAppSettings.js.map +1 -0
  241. package/expo-plugin/build/esm/ios-widget/xcode/productFile.js +70 -0
  242. package/expo-plugin/build/esm/ios-widget/xcode/productFile.js.map +1 -0
  243. package/expo-plugin/build/esm/ios-widget/xcode/target.js +108 -0
  244. package/expo-plugin/build/esm/ios-widget/xcode/target.js.map +1 -0
  245. package/expo-plugin/build/esm/utils/fileDiscovery.js +83 -0
  246. package/expo-plugin/build/esm/utils/fileDiscovery.js.map +1 -0
  247. package/expo-plugin/build/esm/utils/urlScheme.js +37 -0
  248. package/expo-plugin/build/esm/utils/urlScheme.js.map +1 -0
  249. package/expo-plugin/build/esm/validation.js +51 -0
  250. package/expo-plugin/build/esm/validation.js.map +1 -0
  251. package/expo-plugin/build/types/constants.d.ts +13 -0
  252. package/expo-plugin/build/types/constants.d.ts.map +1 -0
  253. package/expo-plugin/build/types/index.d.ts +10 -0
  254. package/expo-plugin/build/types/index.d.ts.map +1 -0
  255. package/expo-plugin/build/types/ios/eas.d.ts +12 -0
  256. package/expo-plugin/build/types/ios/eas.d.ts.map +1 -0
  257. package/expo-plugin/build/types/ios/entitlements.d.ts +14 -0
  258. package/expo-plugin/build/types/ios/entitlements.d.ts.map +1 -0
  259. package/expo-plugin/build/types/ios/index.d.ts +19 -0
  260. package/expo-plugin/build/types/ios/index.d.ts.map +1 -0
  261. package/expo-plugin/build/types/ios/infoPlist.d.ts +21 -0
  262. package/expo-plugin/build/types/ios/infoPlist.d.ts.map +1 -0
  263. package/expo-plugin/build/types/ios/pushNotifications.d.ts +10 -0
  264. package/expo-plugin/build/types/ios/pushNotifications.d.ts.map +1 -0
  265. package/expo-plugin/build/types/ios-widget/eas.d.ts +15 -0
  266. package/expo-plugin/build/types/ios-widget/eas.d.ts.map +1 -0
  267. package/expo-plugin/build/types/ios-widget/files/assets.d.ts +13 -0
  268. package/expo-plugin/build/types/ios-widget/files/assets.d.ts.map +1 -0
  269. package/expo-plugin/build/types/ios-widget/files/entitlements.d.ts +17 -0
  270. package/expo-plugin/build/types/ios-widget/files/entitlements.d.ts.map +1 -0
  271. package/expo-plugin/build/types/ios-widget/files/index.d.ts +24 -0
  272. package/expo-plugin/build/types/ios-widget/files/index.d.ts.map +1 -0
  273. package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts +10 -0
  274. package/expo-plugin/build/types/ios-widget/files/infoPlist.d.ts.map +1 -0
  275. package/expo-plugin/build/types/ios-widget/files/swift.d.ts +24 -0
  276. package/expo-plugin/build/types/ios-widget/files/swift.d.ts.map +1 -0
  277. package/expo-plugin/build/types/ios-widget/fonts.d.ts +22 -0
  278. package/expo-plugin/build/types/ios-widget/fonts.d.ts.map +1 -0
  279. package/expo-plugin/build/types/ios-widget/index.d.ts +31 -0
  280. package/expo-plugin/build/types/ios-widget/index.d.ts.map +1 -0
  281. package/expo-plugin/build/types/ios-widget/podfile.d.ts +9 -0
  282. package/expo-plugin/build/types/ios-widget/podfile.d.ts.map +1 -0
  283. package/expo-plugin/build/types/ios-widget/widgetPlist.d.ts +20 -0
  284. package/expo-plugin/build/types/ios-widget/widgetPlist.d.ts.map +1 -0
  285. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts +25 -0
  286. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -0
  287. package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts +20 -0
  288. package/expo-plugin/build/types/ios-widget/xcode/configurationList.d.ts.map +1 -0
  289. package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts +15 -0
  290. package/expo-plugin/build/types/ios-widget/xcode/groups.d.ts.map +1 -0
  291. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts +20 -0
  292. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts.map +1 -0
  293. package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts +15 -0
  294. package/expo-plugin/build/types/ios-widget/xcode/mainAppSettings.d.ts.map +1 -0
  295. package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts +14 -0
  296. package/expo-plugin/build/types/ios-widget/xcode/productFile.d.ts.map +1 -0
  297. package/expo-plugin/build/types/ios-widget/xcode/target.d.ts +42 -0
  298. package/expo-plugin/build/types/ios-widget/xcode/target.d.ts.map +1 -0
  299. package/expo-plugin/build/types/types.d.ts +74 -0
  300. package/expo-plugin/build/types/types.d.ts.map +1 -0
  301. package/expo-plugin/build/types/utils/fileDiscovery.d.ts +15 -0
  302. package/expo-plugin/build/types/utils/fileDiscovery.d.ts.map +1 -0
  303. package/expo-plugin/build/types/utils/urlScheme.d.ts +10 -0
  304. package/expo-plugin/build/types/utils/urlScheme.d.ts.map +1 -0
  305. package/expo-plugin/build/types/validation.d.ts +4 -0
  306. package/expo-plugin/build/types/validation.d.ts.map +1 -0
  307. package/expo-plugin/jest.config.js +18 -0
  308. package/expo-plugin/src/constants.ts +25 -0
  309. package/expo-plugin/src/index.ts +72 -0
  310. package/expo-plugin/src/ios/eas.ts +33 -0
  311. package/expo-plugin/src/ios/entitlements.ts +59 -0
  312. package/expo-plugin/src/ios/index.ts +47 -0
  313. package/expo-plugin/src/ios/infoPlist.ts +63 -0
  314. package/expo-plugin/src/ios/pushNotifications.ts +22 -0
  315. package/expo-plugin/src/ios-widget/eas.ts +79 -0
  316. package/expo-plugin/src/ios-widget/files/assets.ts +201 -0
  317. package/expo-plugin/src/ios-widget/files/entitlements.ts +48 -0
  318. package/expo-plugin/src/ios-widget/files/index.ts +74 -0
  319. package/expo-plugin/src/ios-widget/files/infoPlist.ts +57 -0
  320. package/expo-plugin/src/ios-widget/files/swift.node.test.ts +22 -0
  321. package/expo-plugin/src/ios-widget/files/swift.ts +476 -0
  322. package/expo-plugin/src/ios-widget/fonts.ts +132 -0
  323. package/expo-plugin/src/ios-widget/index.ts +73 -0
  324. package/expo-plugin/src/ios-widget/podfile.ts +44 -0
  325. package/expo-plugin/src/ios-widget/widgetPlist.ts +115 -0
  326. package/expo-plugin/src/ios-widget/xcode/buildPhases.ts +301 -0
  327. package/expo-plugin/src/ios-widget/xcode/configurationList.ts +127 -0
  328. package/expo-plugin/src/ios-widget/xcode/groups.ts +101 -0
  329. package/expo-plugin/src/ios-widget/xcode/index.ts +149 -0
  330. package/expo-plugin/src/ios-widget/xcode/mainAppSettings.ts +95 -0
  331. package/expo-plugin/src/ios-widget/xcode/productFile.ts +91 -0
  332. package/expo-plugin/src/ios-widget/xcode/target.ts +148 -0
  333. package/expo-plugin/src/types.ts +89 -0
  334. package/expo-plugin/src/utils/fileDiscovery.ts +96 -0
  335. package/expo-plugin/src/utils/urlScheme.ts +45 -0
  336. package/expo-plugin/src/validation.node.test.ts +19 -0
  337. package/expo-plugin/src/validation.ts +63 -0
  338. package/expo-plugin/tsconfig.base.json +17 -0
  339. package/expo-plugin/tsconfig.cjs.json +9 -0
  340. package/expo-plugin/tsconfig.esm.json +9 -0
  341. package/expo-plugin/tsconfig.jest.json +8 -0
  342. package/expo-plugin/tsconfig.typecheck.json +12 -0
  343. package/expo-plugin/tsconfig.types.json +10 -0
  344. package/ios/Package.swift +68 -0
  345. package/ios/Tests/JSGradientParserTests.swift +201 -0
  346. package/ios/Tests/VoltraSharedTests/SmokeTests.swift +8 -0
  347. package/ios/VoltraWidget.podspec +30 -0
  348. package/ios/app/NativeVoltra.h +5 -0
  349. package/ios/app/NativeVoltra.mm +211 -0
  350. package/ios/app/VoltraActivity.swift +5 -0
  351. package/ios/app/VoltraImagePreload.swift +154 -0
  352. package/ios/app/VoltraLiveActivityManager.swift +228 -0
  353. package/ios/app/VoltraLiveActivityService.swift +306 -0
  354. package/ios/app/VoltraModule.swift +215 -0
  355. package/ios/app/VoltraModuleImpl.swift +331 -0
  356. package/ios/app/VoltraOptions.swift +27 -0
  357. package/ios/app/VoltraViewComponentView.h +10 -0
  358. package/ios/app/VoltraViewComponentView.mm +67 -0
  359. package/ios/app/VoltraViewRoot.swift +63 -0
  360. package/ios/app/VoltraWidgetService.swift +154 -0
  361. package/ios/shared/BrotliCompression.swift +81 -0
  362. package/ios/shared/ComponentTypeID.swift +117 -0
  363. package/ios/shared/Data+hexString.swift +8 -0
  364. package/ios/shared/Date+toTimerInterval.swift +25 -0
  365. package/ios/shared/JSONValue.swift +128 -0
  366. package/ios/shared/ShortNames.swift +180 -0
  367. package/ios/shared/VoltraAttributes.swift +58 -0
  368. package/ios/shared/VoltraConfig.swift +18 -0
  369. package/ios/shared/VoltraConstants.swift +45 -0
  370. package/ios/shared/VoltraElement.swift +153 -0
  371. package/ios/shared/VoltraEvent.swift +72 -0
  372. package/ios/shared/VoltraEventBus.swift +80 -0
  373. package/ios/shared/VoltraImageStore.swift +119 -0
  374. package/ios/shared/VoltraInitialStateLocale.swift +54 -0
  375. package/ios/shared/VoltraInteractionIntent.swift +39 -0
  376. package/ios/shared/VoltraKeychainHelper.swift +178 -0
  377. package/ios/shared/VoltraLiveActivityPayload.swift +113 -0
  378. package/ios/shared/VoltraLogger.swift +30 -0
  379. package/ios/shared/VoltraNode.swift +194 -0
  380. package/ios/shared/VoltraPayloadMigrator.swift +63 -0
  381. package/ios/shared/VoltraPersistentEventQueue.swift +67 -0
  382. package/ios/shared/VoltraRefreshIntent.swift +29 -0
  383. package/ios/shared/VoltraRegion.swift +37 -0
  384. package/ios/shared/VoltraWidgetDefaults.swift +114 -0
  385. package/ios/shared/VoltraWidgetServerFetcher.swift +166 -0
  386. package/ios/target/VoltraHomeWidget.swift +508 -0
  387. package/ios/target/VoltraWidget.swift +158 -0
  388. package/ios/ui/Extensions/View.modifiers.swift +28 -0
  389. package/ios/ui/Extensions/VoltraNode+Parameters.swift +18 -0
  390. package/ios/ui/Generated/Parameters/ButtonParameters.swift +15 -0
  391. package/ios/ui/Generated/Parameters/ChartParameters.swift +33 -0
  392. package/ios/ui/Generated/Parameters/CircularProgressViewParameters.swift +59 -0
  393. package/ios/ui/Generated/Parameters/ComponentParameters.swift +12 -0
  394. package/ios/ui/Generated/Parameters/DividerParameters.swift +12 -0
  395. package/ios/ui/Generated/Parameters/GaugeParameters.swift +54 -0
  396. package/ios/ui/Generated/Parameters/GlassContainerParameters.swift +15 -0
  397. package/ios/ui/Generated/Parameters/GroupBoxParameters.swift +12 -0
  398. package/ios/ui/Generated/Parameters/HStackParameters.swift +34 -0
  399. package/ios/ui/Generated/Parameters/ImageParameters.swift +29 -0
  400. package/ios/ui/Generated/Parameters/LabelParameters.swift +18 -0
  401. package/ios/ui/Generated/Parameters/LinearGradientParameters.swift +27 -0
  402. package/ios/ui/Generated/Parameters/LinearProgressViewParameters.swift +64 -0
  403. package/ios/ui/Generated/Parameters/LinkParameters.swift +15 -0
  404. package/ios/ui/Generated/Parameters/MaskParameters.swift +12 -0
  405. package/ios/ui/Generated/Parameters/SpacerParameters.swift +15 -0
  406. package/ios/ui/Generated/Parameters/SymbolParameters.swift +59 -0
  407. package/ios/ui/Generated/Parameters/TextParameters.swift +18 -0
  408. package/ios/ui/Generated/Parameters/TimerParameters.swift +54 -0
  409. package/ios/ui/Generated/Parameters/ToggleParameters.swift +24 -0
  410. package/ios/ui/Generated/Parameters/VStackParameters.swift +34 -0
  411. package/ios/ui/Generated/Parameters/ViewParameters.swift +12 -0
  412. package/ios/ui/Generated/Parameters/ZStackParameters.swift +15 -0
  413. package/ios/ui/Helpers/VoltraDeepLinkResolver.swift +43 -0
  414. package/ios/ui/Helpers/VoltraProgressDriver.swift +52 -0
  415. package/ios/ui/Layout/FlexContainerHelper.swift +114 -0
  416. package/ios/ui/Layout/VoltraFlexStackLayout.swift +417 -0
  417. package/ios/ui/Protocols/VoltraView.swift +29 -0
  418. package/ios/ui/Style/BackgroundValue.swift +27 -0
  419. package/ios/ui/Style/CompositeStyle.swift +81 -0
  420. package/ios/ui/Style/DecorationStyle.swift +207 -0
  421. package/ios/ui/Style/FlexEnvironment.swift +35 -0
  422. package/ios/ui/Style/FontVariant.swift +4 -0
  423. package/ios/ui/Style/GlassEffect.swift +6 -0
  424. package/ios/ui/Style/JSColorParser.swift +517 -0
  425. package/ios/ui/Style/JSGradientParser.swift +674 -0
  426. package/ios/ui/Style/JSStyleParser.swift +223 -0
  427. package/ios/ui/Style/LayoutStyle.swift +184 -0
  428. package/ios/ui/Style/Overflow.swift +4 -0
  429. package/ios/ui/Style/RenderingStyle.swift +33 -0
  430. package/ios/ui/Style/StyleConverter.swift +202 -0
  431. package/ios/ui/Style/TextDecoration.swift +6 -0
  432. package/ios/ui/Style/TextStyle.swift +50 -0
  433. package/ios/ui/Style/View+applyStyle.swift +38 -0
  434. package/ios/ui/Views/VoltraButton.swift +57 -0
  435. package/ios/ui/Views/VoltraChart.swift +840 -0
  436. package/ios/ui/Views/VoltraCircularProgressView.swift +103 -0
  437. package/ios/ui/Views/VoltraDivider.swift +16 -0
  438. package/ios/ui/Views/VoltraFlexView.swift +33 -0
  439. package/ios/ui/Views/VoltraGauge.swift +65 -0
  440. package/ios/ui/Views/VoltraGlassContainer.swift +29 -0
  441. package/ios/ui/Views/VoltraGroupBox.swift +26 -0
  442. package/ios/ui/Views/VoltraHStack.swift +70 -0
  443. package/ios/ui/Views/VoltraImage.swift +109 -0
  444. package/ios/ui/Views/VoltraLabel.swift +24 -0
  445. package/ios/ui/Views/VoltraLinearGradient.swift +115 -0
  446. package/ios/ui/Views/VoltraLinearProgressView.swift +118 -0
  447. package/ios/ui/Views/VoltraLink.swift +25 -0
  448. package/ios/ui/Views/VoltraMask.swift +23 -0
  449. package/ios/ui/Views/VoltraSpacer.swift +16 -0
  450. package/ios/ui/Views/VoltraSymbol.swift +160 -0
  451. package/ios/ui/Views/VoltraText.swift +87 -0
  452. package/ios/ui/Views/VoltraTimer.swift +131 -0
  453. package/ios/ui/Views/VoltraToggle.swift +39 -0
  454. package/ios/ui/Views/VoltraVStack.swift +68 -0
  455. package/ios/ui/Views/VoltraZStack.swift +33 -0
  456. package/ios/ui/Voltra.swift +86 -0
  457. package/package.json +105 -19
  458. package/src/VoltraModule.ts +2 -0
  459. package/src/components/VoltraLiveActivityPreview.tsx +29 -0
  460. package/src/components/VoltraView.tsx +49 -0
  461. package/src/components/VoltraWidgetPreview.tsx +38 -0
  462. package/src/events.ts +70 -0
  463. package/src/helpers.ts +21 -0
  464. package/src/index.ts +52 -0
  465. package/src/live-activity/api.ts +224 -0
  466. package/src/logger.ts +35 -0
  467. package/src/native/NativeVoltra.ts +118 -0
  468. package/src/native/VoltraRNNativeComponent.ts +9 -0
  469. package/src/preload.ts +50 -0
  470. package/src/types.ts +12 -0
  471. package/src/utils/assertRunningOnApple.ts +10 -0
  472. package/src/utils/helpers.ts +1 -0
  473. package/src/utils/index.ts +2 -0
  474. package/src/utils/useUpdateOnHMR.ts +25 -0
  475. package/src/widgets/server-credentials.ts +16 -0
  476. package/src/widgets/widget-api.ts +65 -0
  477. package/build/cjs/VoltraModule.js +0 -6
  478. package/build/cjs/VoltraModule.js.map +0 -1
  479. package/build/cjs/components/VoltraLiveActivityPreview.js +0 -20
  480. package/build/cjs/components/VoltraLiveActivityPreview.js.map +0 -1
  481. package/build/cjs/components/VoltraView.js +0 -37
  482. package/build/cjs/components/VoltraView.js.map +0 -1
  483. package/build/cjs/components/VoltraWidgetPreview.js +0 -26
  484. package/build/cjs/components/VoltraWidgetPreview.js.map +0 -1
  485. package/build/cjs/events.js +0 -19
  486. package/build/cjs/events.js.map +0 -1
  487. package/build/cjs/helpers.js +0 -30
  488. package/build/cjs/helpers.js.map +0 -1
  489. package/build/cjs/index.js +0 -49
  490. package/build/cjs/index.js.map +0 -1
  491. package/build/cjs/live-activity/api.js +0 -158
  492. package/build/cjs/live-activity/api.js.map +0 -1
  493. package/build/cjs/logger.js +0 -36
  494. package/build/cjs/logger.js.map +0 -1
  495. package/build/cjs/preload.js +0 -54
  496. package/build/cjs/preload.js.map +0 -1
  497. package/build/cjs/utils/assertRunningOnApple.js +0 -13
  498. package/build/cjs/utils/assertRunningOnApple.js.map +0 -1
  499. package/build/cjs/utils/helpers.js +0 -7
  500. package/build/cjs/utils/helpers.js.map +0 -1
  501. package/build/cjs/utils/index.js +0 -19
  502. package/build/cjs/utils/index.js.map +0 -1
  503. package/build/cjs/utils/useUpdateOnHMR.js +0 -22
  504. package/build/cjs/utils/useUpdateOnHMR.js.map +0 -1
  505. package/build/cjs/widgets/server-credentials.js +0 -18
  506. package/build/cjs/widgets/server-credentials.js.map +0 -1
  507. package/build/cjs/widgets/widget-api.js +0 -59
  508. package/build/cjs/widgets/widget-api.js.map +0 -1
  509. package/build/esm/VoltraModule.js +0 -4
  510. package/build/esm/VoltraModule.js.map +0 -1
  511. package/build/esm/components/VoltraLiveActivityPreview.js +0 -17
  512. package/build/esm/components/VoltraLiveActivityPreview.js.map +0 -1
  513. package/build/esm/components/VoltraView.js +0 -34
  514. package/build/esm/components/VoltraView.js.map +0 -1
  515. package/build/esm/components/VoltraWidgetPreview.js +0 -23
  516. package/build/esm/components/VoltraWidgetPreview.js.map +0 -1
  517. package/build/esm/events.js +0 -13
  518. package/build/esm/events.js.map +0 -1
  519. package/build/esm/helpers.js +0 -23
  520. package/build/esm/helpers.js.map +0 -1
  521. package/build/esm/index.js +0 -10
  522. package/build/esm/index.js.map +0 -1
  523. package/build/esm/live-activity/api.js +0 -146
  524. package/build/esm/live-activity/api.js.map +0 -1
  525. package/build/esm/logger.js +0 -33
  526. package/build/esm/logger.js.map +0 -1
  527. package/build/esm/preload.js +0 -46
  528. package/build/esm/preload.js.map +0 -1
  529. package/build/esm/utils/assertRunningOnApple.js +0 -9
  530. package/build/esm/utils/assertRunningOnApple.js.map +0 -1
  531. package/build/esm/utils/helpers.js.map +0 -1
  532. package/build/esm/utils/index.js.map +0 -1
  533. package/build/esm/utils/useUpdateOnHMR.js +0 -18
  534. package/build/esm/utils/useUpdateOnHMR.js.map +0 -1
  535. package/build/esm/widgets/server-credentials.js +0 -11
  536. package/build/esm/widgets/server-credentials.js.map +0 -1
  537. package/build/esm/widgets/widget-api.js +0 -47
  538. package/build/esm/widgets/widget-api.js.map +0 -1
  539. package/build/types/VoltraModule.d.ts +0 -44
  540. package/build/types/VoltraModule.d.ts.map +0 -1
  541. package/build/types/components/VoltraLiveActivityPreview.d.ts.map +0 -1
  542. package/build/types/components/VoltraView.d.ts.map +0 -1
  543. package/build/types/components/VoltraWidgetPreview.d.ts.map +0 -1
  544. package/build/types/events.d.ts.map +0 -1
  545. package/build/types/helpers.d.ts.map +0 -1
  546. package/build/types/index.d.ts.map +0 -1
  547. package/build/types/live-activity/api.d.ts.map +0 -1
  548. package/build/types/logger.d.ts.map +0 -1
  549. package/build/types/preload.d.ts.map +0 -1
  550. package/build/types/types.d.ts.map +0 -1
  551. package/build/types/utils/assertRunningOnApple.d.ts.map +0 -1
  552. package/build/types/utils/helpers.d.ts.map +0 -1
  553. package/build/types/utils/index.d.ts.map +0 -1
  554. package/build/types/utils/useUpdateOnHMR.d.ts.map +0 -1
  555. package/build/types/widgets/server-credentials.d.ts.map +0 -1
  556. package/build/types/widgets/widget-api.d.ts.map +0 -1
  557. /package/build/{types → typescript/commonjs}/components/VoltraLiveActivityPreview.d.ts +0 -0
  558. /package/build/{types → typescript/commonjs}/components/VoltraView.d.ts +0 -0
  559. /package/build/{types → typescript/commonjs}/components/VoltraWidgetPreview.d.ts +0 -0
  560. /package/build/{types → typescript/commonjs}/events.d.ts +0 -0
  561. /package/build/{types → typescript/commonjs}/helpers.d.ts +0 -0
  562. /package/build/{types → typescript/commonjs}/live-activity/api.d.ts +0 -0
  563. /package/build/{types → typescript/commonjs}/logger.d.ts +0 -0
  564. /package/build/{types → typescript/commonjs}/preload.d.ts +0 -0
  565. /package/build/{types → typescript/commonjs}/types.d.ts +0 -0
  566. /package/build/{types → typescript/commonjs}/utils/assertRunningOnApple.d.ts +0 -0
  567. /package/build/{types → typescript/commonjs}/utils/helpers.d.ts +0 -0
  568. /package/build/{types → typescript/commonjs}/utils/index.d.ts +0 -0
  569. /package/build/{types → typescript/commonjs}/utils/useUpdateOnHMR.d.ts +0 -0
  570. /package/build/{types → typescript/commonjs}/widgets/server-credentials.d.ts +0 -0
  571. /package/build/{types → typescript/commonjs}/widgets/widget-api.d.ts +0 -0
  572. /package/{build → expo-plugin/build}/cjs/package.json +0 -0
  573. /package/{build → expo-plugin/build}/cjs/types.js +0 -0
  574. /package/{build → expo-plugin/build}/cjs/types.js.map +0 -0
  575. /package/{build → expo-plugin/build}/esm/package.json +0 -0
  576. /package/{build → expo-plugin/build}/esm/types.js +0 -0
  577. /package/{build → expo-plugin/build}/esm/types.js.map +0 -0
@@ -0,0 +1,103 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraCircularProgressView: VoltraView {
4
+ public typealias Parameters = CircularProgressViewParameters
5
+
6
+ public let element: VoltraElement
7
+
8
+ public init(_ element: VoltraElement) {
9
+ self.element = element
10
+ }
11
+
12
+ @ViewBuilder
13
+ public var body: some View {
14
+ let p = params
15
+ let progressColor = p.progressColor.flatMap { JSColorParser.parse($0) }
16
+ let trackColor = p.trackColor.flatMap { JSColorParser.parse($0) }
17
+ let lineWidth = p.lineWidth.map { CGFloat($0) }
18
+
19
+ // Circular variant does not support timer-based progress ring via built-in ProgressView on iOS.
20
+ // We remove the timer option as it would only display an indeterminate spinner.
21
+ let isDeterminate = p.value != nil
22
+
23
+ // Custom style provides the "ring" appearance for determinate progress.
24
+ let hasCustomProps = trackColor != nil || lineWidth != nil
25
+ let useCustomStyle = hasCustomProps && isDeterminate
26
+
27
+ if let value = p.value {
28
+ // Determinate progress
29
+ ProgressView(value: value, total: p.maximumValue) {
30
+ element.componentProp("label")
31
+ } currentValueLabel: {
32
+ element.componentProp("currentValueLabel")
33
+ }
34
+ .tint(progressColor)
35
+ .voltraIf(useCustomStyle) {
36
+ $0.progressViewStyle(VoltraCircularProgressStyle(
37
+ progressTint: progressColor,
38
+ trackTint: trackColor ?? Color.gray.opacity(0.2),
39
+ lineWidth: lineWidth,
40
+ staticFraction: nil
41
+ ))
42
+ }
43
+ .voltraIf(!useCustomStyle) {
44
+ // Fallback to custom style for determinate even if no custom props,
45
+ // because built-in .circular is a spinner, not a ring.
46
+ $0.progressViewStyle(VoltraCircularProgressStyle(
47
+ progressTint: progressColor,
48
+ trackTint: Color.gray.opacity(0.2),
49
+ lineWidth: 4,
50
+ staticFraction: nil
51
+ ))
52
+ }
53
+ .applyStyle(element.style)
54
+ } else {
55
+ // Indeterminate progress (Built-in spinner)
56
+ // Wrapping in VStack to ensure stable geometry for the animation
57
+ VStack(spacing: 0) {
58
+ ProgressView {
59
+ element.componentProp("label")
60
+ }
61
+ .progressViewStyle(.circular)
62
+ .tint(progressColor)
63
+ }
64
+ .applyStyle(element.style)
65
+ }
66
+ }
67
+ }
68
+
69
+ @available(iOS 16.0, macOS 13.0, *)
70
+ private struct VoltraCircularProgressStyle: ProgressViewStyle {
71
+ var progressTint: Color?
72
+ var trackTint: Color
73
+ var lineWidth: CGFloat?
74
+ var staticFraction: Double?
75
+
76
+ func makeBody(configuration: Configuration) -> some View {
77
+ let fraction = max(0, min(staticFraction ?? configuration.fractionCompleted ?? 0, 1))
78
+ let strokeWidth = lineWidth ?? 4
79
+
80
+ VStack(spacing: 8) {
81
+ configuration.label
82
+
83
+ ZStack {
84
+ // Track
85
+ Circle()
86
+ .stroke(trackTint, lineWidth: strokeWidth)
87
+
88
+ // Progress arc
89
+ Circle()
90
+ .trim(from: 0, to: fraction)
91
+ .stroke(
92
+ progressTint ?? Color.accentColor,
93
+ style: StrokeStyle(lineWidth: strokeWidth, lineCap: .round)
94
+ )
95
+ .rotationEffect(.degrees(-90))
96
+ .animation(.linear, value: fraction)
97
+ }
98
+ .aspectRatio(1, contentMode: .fit)
99
+
100
+ configuration.currentValueLabel
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,16 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraDivider: VoltraView {
4
+ public typealias Parameters = EmptyParameters
5
+
6
+ public let element: VoltraElement
7
+
8
+ public init(_ element: VoltraElement) {
9
+ self.element = element
10
+ }
11
+
12
+ public var body: some View {
13
+ Divider()
14
+ .applyStyle(element.style)
15
+ }
16
+ }
@@ -0,0 +1,33 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraFlexView: VoltraView {
4
+ public typealias Parameters = ViewParameters
5
+
6
+ public let element: VoltraElement
7
+
8
+ public init(_ element: VoltraElement) {
9
+ self.element = element
10
+ }
11
+
12
+ public var body: some View {
13
+ let anyStyle = element.style?.mapValues { $0.toAny() } ?? [:]
14
+
15
+ // flexDirection from style (default: column, matching RN's View behavior)
16
+ let directionStr = anyStyle["flexDirection"] as? String ?? "column"
17
+ let axis: Axis = directionStr == "row" ? .horizontal : .vertical
18
+
19
+ let values = FlexContainerHelper.parseValues(from: element)
20
+
21
+ VoltraFlexStackLayout(
22
+ axis: axis,
23
+ spacing: values.gap,
24
+ alignItems: values.alignItems,
25
+ justifyContent: values.justifyContent,
26
+ containerPadding: values.padding
27
+ ) {
28
+ (element.children ?? .empty)
29
+ .environment(\.isInFlexContainer, true)
30
+ }
31
+ .modifier(FlexContainerStyleModifier(values: values))
32
+ }
33
+ }
@@ -0,0 +1,65 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraGauge: VoltraView {
4
+ public typealias Parameters = GaugeParameters
5
+
6
+ public let element: VoltraElement
7
+
8
+ public init(_ element: VoltraElement) {
9
+ self.element = element
10
+ }
11
+
12
+ public var body: some View {
13
+ let label = element.componentProp("label")
14
+ let currentValueLabel = element.componentProp("currentValueLabel")
15
+ let minimumValueLabel = element.componentProp("minimumValueLabel")
16
+ let maximumValueLabel = element.componentProp("maximumValueLabel")
17
+ let value = params.value ?? 0.0
18
+ let range = (params.minimumValue ?? 0.0) ... (params.maximumValue ?? 1.0)
19
+ let gaugeStyle = params.gaugeStyle
20
+ let tintColor = params.tintColor
21
+
22
+ let gauge = Gauge(value: value, in: range) {
23
+ buildNestedView(label)
24
+ } currentValueLabel: {
25
+ buildNestedView(currentValueLabel)
26
+ } minimumValueLabel: {
27
+ buildNestedView(minimumValueLabel)
28
+ } maximumValueLabel: {
29
+ buildNestedView(maximumValueLabel)
30
+ }
31
+
32
+ applyTint(applyGaugeStyle(gauge, gaugeStyle), tintColor)
33
+ }
34
+
35
+ @ViewBuilder
36
+ private func applyGaugeStyle(_ gauge: some View, _ gaugeStyle: String?) -> some View {
37
+ switch gaugeStyle {
38
+ case "automatic":
39
+ gauge.gaugeStyle(.automatic)
40
+ case "accessoryCircular":
41
+ gauge.gaugeStyle(.accessoryCircular)
42
+ case "accessoryCircularCapacity":
43
+ gauge.gaugeStyle(.accessoryCircularCapacity)
44
+ case "accessoryLinear":
45
+ gauge.gaugeStyle(.accessoryLinear)
46
+ case "accessoryLinearCapacity", "linearCapacity":
47
+ gauge.gaugeStyle(.accessoryLinearCapacity)
48
+ default:
49
+ gauge
50
+ }
51
+ }
52
+
53
+ @ViewBuilder
54
+ private func applyTint(_ view: some View, _ optionalColor: String?) -> some View {
55
+ if let color = optionalColor {
56
+ view.tint(JSColorParser.parse(color))
57
+ } else {
58
+ view
59
+ }
60
+ }
61
+
62
+ private func buildNestedView(_ nestedView: VoltraNode) -> some View {
63
+ nestedView
64
+ }
65
+ }
@@ -0,0 +1,29 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraGlassContainer: VoltraView {
4
+ public typealias Parameters = GlassContainerParameters
5
+
6
+ public let element: VoltraElement
7
+ @Environment(\.voltraEnvironment) private var voltraEnvironment
8
+
9
+ public init(_ element: VoltraElement) {
10
+ self.element = element
11
+ }
12
+
13
+ public var body: some View {
14
+ if let children = element.children {
15
+ if voltraEnvironment.widget?.suppressesDecorativeContainerEffects == true {
16
+ children.applyStyle(element.style)
17
+ } else if #available(iOS 26.0, *) {
18
+ let spacing = params.spacing ?? 0.0
19
+ GlassEffectContainer(spacing: CGFloat(spacing)) {
20
+ children
21
+ }.applyStyle(element.style)
22
+ } else {
23
+ Group {
24
+ children
25
+ }.applyStyle(element.style)
26
+ }
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,26 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraGroupBox: VoltraView {
4
+ public typealias Parameters = EmptyParameters
5
+
6
+ public let element: VoltraElement
7
+
8
+ public init(_ element: VoltraElement) {
9
+ self.element = element
10
+ }
11
+
12
+ public var body: some View {
13
+ let label = element.componentProp("label")
14
+
15
+ GroupBox {
16
+ element.children ?? .empty
17
+ } label: {
18
+ buildNestedView(label)
19
+ }
20
+ .applyStyle(element.style)
21
+ }
22
+
23
+ private func buildNestedView(_ nestedView: VoltraNode) -> some View {
24
+ nestedView
25
+ }
26
+ }
@@ -0,0 +1,70 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraHStack: VoltraView {
4
+ public typealias Parameters = HStackParameters
5
+
6
+ public let element: VoltraElement
7
+
8
+ public init(_ element: VoltraElement) {
9
+ self.element = element
10
+ }
11
+
12
+ public var body: some View {
13
+ if params.layout == "flex" {
14
+ flexBody(params: params)
15
+ } else {
16
+ legacyBody(params: params)
17
+ }
18
+ }
19
+
20
+ @ViewBuilder
21
+ private func legacyBody(params: HStackParameters) -> some View {
22
+ let alignmentStr = params.alignment.lowercased()
23
+ let alignment: VerticalAlignment = switch alignmentStr {
24
+ case "top": .top
25
+ case "bottom": .bottom
26
+ case "center": .center
27
+ case "firsttextbaseline": .firstTextBaseline
28
+ case "lasttextbaseline": .lastTextBaseline
29
+ default: .center
30
+ }
31
+
32
+ // Extract gap from style for legacy mode too
33
+ let anyStyle = element.style?.mapValues { $0.toAny() } ?? [:]
34
+ let (layout, _, _, _) = StyleConverter.convert(anyStyle)
35
+ // spacing prop takes precedence over gap style
36
+ let gap = params.spacing ?? layout.gap ?? 0
37
+
38
+ let hasFillHeight = layout.height == .fill
39
+
40
+ let frameAlignment = Alignment(horizontal: .center, vertical: alignment)
41
+
42
+ HStack(alignment: alignment, spacing: gap) {
43
+ element.children ?? .empty
44
+ }
45
+ .voltraIf(hasFillHeight) { content in
46
+ content.frame(maxHeight: .infinity, alignment: frameAlignment)
47
+ }
48
+ .applyStyle(element.style, contentAlignment: frameAlignment)
49
+ }
50
+
51
+ @ViewBuilder
52
+ private func flexBody(params: HStackParameters) -> some View {
53
+ let alignmentFallback = FlexContainerHelper.horizontalAlignmentFallback(params.alignment)
54
+ let values = FlexContainerHelper.parseValues(from: element, alignmentFallback: alignmentFallback)
55
+ // spacing prop takes precedence over gap style
56
+ let spacing = params.spacing ?? values.gap
57
+
58
+ VoltraFlexStackLayout(
59
+ axis: .horizontal,
60
+ spacing: spacing,
61
+ alignItems: values.alignItems,
62
+ justifyContent: values.justifyContent,
63
+ containerPadding: values.padding
64
+ ) {
65
+ (element.children ?? .empty)
66
+ .environment(\.isInFlexContainer, true)
67
+ }
68
+ .modifier(FlexContainerStyleModifier(values: values))
69
+ }
70
+ }
@@ -0,0 +1,109 @@
1
+ import Foundation
2
+ import SwiftUI
3
+ import UIKit
4
+
5
+ public struct VoltraImage: VoltraView {
6
+ public typealias Parameters = ImageParameters
7
+
8
+ public let element: VoltraElement
9
+
10
+ public init(_ element: VoltraElement) {
11
+ self.element = element
12
+ }
13
+
14
+ /// Creates an Image from the source parameter, returning nil if invalid or not found
15
+ private func createImage(from source: String?) -> Image? {
16
+ guard let sourceString = source,
17
+ let sourceData = sourceString.data(using: .utf8),
18
+ let sourceDict = try? JSONSerialization.jsonObject(with: sourceData) as? [String: Any]
19
+ else {
20
+ return nil
21
+ }
22
+
23
+ // Check for base64 first
24
+ if let base64String = sourceDict["base64"] as? String,
25
+ let base64Data = Data(base64Encoded: base64String),
26
+ let uiImage = UIImage(data: base64Data)
27
+ {
28
+ return Image(uiImage: uiImage)
29
+ }
30
+
31
+ // Check for assetName - first try preloaded images from App Group, then asset catalog
32
+ if let assetName = sourceDict["assetName"] as? String,
33
+ !assetName.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
34
+ {
35
+ let trimmedName = assetName.trimmingCharacters(in: .whitespacesAndNewlines)
36
+
37
+ // First, check for preloaded image in App Group storage
38
+ if let preloadedImage = VoltraImageStore.loadImage(key: trimmedName) {
39
+ return Image(uiImage: preloadedImage)
40
+ }
41
+
42
+ // Fall back to asset catalog
43
+ if let catalogImage = UIImage(named: trimmedName) {
44
+ return Image(uiImage: catalogImage)
45
+ }
46
+ }
47
+
48
+ // Asset not found or invalid
49
+ return nil
50
+ }
51
+
52
+ @ViewBuilder
53
+ public var body: some View {
54
+ let resizeMode = params.resizeMode.lowercased()
55
+ if let baseImage = createImage(from: params.source) {
56
+ switch resizeMode {
57
+ case "cover":
58
+ // Fill container, may crop
59
+ baseImage
60
+ .resizable()
61
+ .scaledToFill()
62
+ .clipped()
63
+ .applyStyle(element.style)
64
+
65
+ case "contain":
66
+ // Fit within container, may leave space
67
+ baseImage
68
+ .resizable()
69
+ .scaledToFit()
70
+ .applyStyle(element.style)
71
+
72
+ case "stretch":
73
+ // Stretch to fill, may distort
74
+ baseImage
75
+ .resizable()
76
+ .applyStyle(element.style)
77
+
78
+ case "repeat":
79
+ // Tile the image
80
+ baseImage
81
+ .resizable(resizingMode: .tile)
82
+ .applyStyle(element.style)
83
+
84
+ case "center":
85
+ // Center without scaling
86
+ baseImage
87
+ .applyStyle(element.style)
88
+
89
+ default:
90
+ // Default to cover
91
+ baseImage
92
+ .resizable()
93
+ .scaledToFill()
94
+ .clipped()
95
+ .applyStyle(element.style)
96
+ }
97
+ } else {
98
+ let fallbackNode = element.componentProp("fallback")
99
+ if !fallbackNode.isEmpty {
100
+ Color.clear
101
+ .overlay(fallbackNode)
102
+ .applyStyle(element.style)
103
+ } else {
104
+ Color.clear
105
+ .applyStyle(element.style)
106
+ }
107
+ }
108
+ }
109
+ }
@@ -0,0 +1,24 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraLabel: VoltraView {
4
+ public typealias Parameters = LabelParameters
5
+
6
+ public let element: VoltraElement
7
+
8
+ public init(_ element: VoltraElement) {
9
+ self.element = element
10
+ }
11
+
12
+ public var body: some View {
13
+ if let systemImage = params.systemImage {
14
+ Label(
15
+ params.title ?? "Label",
16
+ systemImage: systemImage
17
+ )
18
+ .applyStyle(element.style)
19
+ } else {
20
+ VoltraText(element)
21
+ .applyStyle(element.style)
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,115 @@
1
+ import SwiftUI
2
+
3
+ public struct VoltraLinearGradient: VoltraView {
4
+ public typealias Parameters = LinearGradientParameters
5
+
6
+ public let element: VoltraElement
7
+ @Environment(\.voltraEnvironment) private var voltraEnvironment
8
+
9
+ public init(_ element: VoltraElement) {
10
+ self.element = element
11
+ }
12
+
13
+ /// Map string to UnitPoint
14
+ private func parsePoint(_ s: String?) -> UnitPoint {
15
+ guard let raw = s else { return .center }
16
+
17
+ // Handle custom coordinates in "x,y" format
18
+ if raw.contains(",") {
19
+ let components = raw.split(separator: ",")
20
+ if components.count == 2,
21
+ let x = Double(components[0]),
22
+ let y = Double(components[1])
23
+ {
24
+ return UnitPoint(x: x, y: y)
25
+ }
26
+ }
27
+
28
+ // Handle predefined string values
29
+ switch raw.lowercased() {
30
+ case "top": return .top
31
+ case "bottom": return .bottom
32
+ case "leading": return .leading
33
+ case "trailing": return .trailing
34
+ case "topleading": return .topLeading
35
+ case "toptrailing": return .topTrailing
36
+ case "bottomleading": return .bottomLeading
37
+ case "bottomtrailing": return .bottomTrailing
38
+ case "center": fallthrough
39
+ default: return .center
40
+ }
41
+ }
42
+
43
+ /// Build Gradient from parameters
44
+ private func buildGradient(params: LinearGradientParameters) -> Gradient {
45
+ // Prefer explicit stops over color array
46
+ if let stopsStr = params.stops {
47
+ let parts = stopsStr.split(separator: "|")
48
+ var stops: [Gradient.Stop] = []
49
+ for part in parts {
50
+ let sub = part.split(separator: "@", maxSplits: 1).map(String.init)
51
+ if sub.count == 2 {
52
+ let colorStr = sub[0]
53
+ let locStr = sub[1]
54
+ if let color = JSColorParser.parse(colorStr) {
55
+ let loc = Double(locStr) ?? 0.0
56
+ stops.append(.init(color: color, location: loc))
57
+ }
58
+ }
59
+ }
60
+ if !stops.isEmpty { return Gradient(stops: stops) }
61
+ }
62
+ if let colorsStr = params.colors {
63
+ let parts = colorsStr.split(separator: "|").map(String.init)
64
+ let colors: [Color] = parts.compactMap { JSColorParser.parse($0) }
65
+ if !colors.isEmpty { return Gradient(colors: colors) }
66
+ }
67
+ // Fallback neutral gradient
68
+ return Gradient(colors: [Color.black.opacity(0.25), Color.black.opacity(0.05)])
69
+ }
70
+
71
+ private func isFullBleedWidgetBackgroundCandidate() -> Bool {
72
+ guard let style = element.style, element.children != nil else {
73
+ return false
74
+ }
75
+ if let flex = style["flex"]?.doubleValue, flex > 0 {
76
+ return true
77
+ }
78
+ if let flexGrow = style["flexGrow"]?.doubleValue, flexGrow > 0 {
79
+ return true
80
+ }
81
+ let width = style["width"]?.stringValue?.trimmingCharacters(in: .whitespacesAndNewlines)
82
+ let height = style["height"]?.stringValue?.trimmingCharacters(in: .whitespacesAndNewlines)
83
+ return width == "100%" && height == "100%"
84
+ }
85
+
86
+ public var body: some View {
87
+ let gradient = buildGradient(params: params)
88
+ let start = parsePoint(params.startPoint)
89
+ let end = parsePoint(params.endPoint)
90
+ let anyStyle = element.style?.mapValues { $0.toAny() } ?? [:]
91
+ let (layout, baseDecoration, rendering, text) = StyleConverter.convert(anyStyle)
92
+
93
+ var decoration = baseDecoration
94
+ decoration.backgroundColor = .linearGradient(gradient: gradient, startPoint: start, endPoint: end)
95
+
96
+ if let widget = voltraEnvironment.widget,
97
+ widget.isHomeScreenWidget,
98
+ widget.usesReducedBackgroundPresentation,
99
+ isFullBleedWidgetBackgroundCandidate(),
100
+ let children = element.children
101
+ {
102
+ return AnyView(children.applyStyle(element.style))
103
+ }
104
+
105
+ if let children = element.children {
106
+ return AnyView(
107
+ children.applyStyle((layout, decoration, rendering, text))
108
+ )
109
+ }
110
+
111
+ return AnyView(
112
+ Color.clear.applyStyle((layout, decoration, rendering, text))
113
+ )
114
+ }
115
+ }