@use-voltra/ios-client 2.0.0 → 2.1.1

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 (100) hide show
  1. package/README.md +20 -1
  2. package/build/commonjs/index.js +8 -0
  3. package/build/commonjs/index.js.map +1 -1
  4. package/build/commonjs/utils/enableWidgetHotReload.js +39 -0
  5. package/build/commonjs/utils/enableWidgetHotReload.js.map +1 -0
  6. package/build/module/index.js +1 -0
  7. package/build/module/index.js.map +1 -1
  8. package/build/module/utils/enableWidgetHotReload.js +35 -0
  9. package/build/module/utils/enableWidgetHotReload.js.map +1 -0
  10. package/build/typescript/commonjs/index.d.ts +1 -0
  11. package/build/typescript/commonjs/index.d.ts.map +1 -1
  12. package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts +23 -0
  13. package/build/typescript/commonjs/utils/enableWidgetHotReload.d.ts.map +1 -0
  14. package/build/typescript/module/index.d.ts +1 -0
  15. package/build/typescript/module/index.d.ts.map +1 -1
  16. package/build/typescript/module/utils/enableWidgetHotReload.d.ts +23 -0
  17. package/build/typescript/module/utils/enableWidgetHotReload.d.ts.map +1 -0
  18. package/expo-plugin/build/cjs/index.js +2 -1
  19. package/expo-plugin/build/cjs/index.js.map +1 -1
  20. package/expo-plugin/build/cjs/ios-widget/clientRendered.js +82 -0
  21. package/expo-plugin/build/cjs/ios-widget/clientRendered.js.map +1 -0
  22. package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js +118 -0
  23. package/expo-plugin/build/cjs/ios-widget/clientRenderedPrerender.js.map +1 -0
  24. package/expo-plugin/build/cjs/ios-widget/files/index.js +6 -0
  25. package/expo-plugin/build/cjs/ios-widget/files/index.js.map +1 -1
  26. package/expo-plugin/build/cjs/ios-widget/files/manifest.js +67 -0
  27. package/expo-plugin/build/cjs/ios-widget/files/manifest.js.map +1 -0
  28. package/expo-plugin/build/cjs/ios-widget/files/swift.js +149 -12
  29. package/expo-plugin/build/cjs/ios-widget/files/swift.js.map +1 -1
  30. package/expo-plugin/build/cjs/ios-widget/index.js +1 -1
  31. package/expo-plugin/build/cjs/ios-widget/index.js.map +1 -1
  32. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js +22 -0
  33. package/expo-plugin/build/cjs/ios-widget/widgetPlist.js.map +1 -1
  34. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js +88 -0
  35. package/expo-plugin/build/cjs/ios-widget/xcode/buildPhases.js.map +1 -1
  36. package/expo-plugin/build/cjs/ios-widget/xcode/index.js +12 -1
  37. package/expo-plugin/build/cjs/ios-widget/xcode/index.js.map +1 -1
  38. package/expo-plugin/build/cjs/validation.js +7 -4
  39. package/expo-plugin/build/cjs/validation.js.map +1 -1
  40. package/expo-plugin/build/esm/index.js +2 -1
  41. package/expo-plugin/build/esm/index.js.map +1 -1
  42. package/expo-plugin/build/esm/ios-widget/clientRendered.js +46 -0
  43. package/expo-plugin/build/esm/ios-widget/clientRendered.js.map +1 -0
  44. package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js +82 -0
  45. package/expo-plugin/build/esm/ios-widget/clientRenderedPrerender.js.map +1 -0
  46. package/expo-plugin/build/esm/ios-widget/files/index.js +6 -0
  47. package/expo-plugin/build/esm/ios-widget/files/index.js.map +1 -1
  48. package/expo-plugin/build/esm/ios-widget/files/manifest.js +30 -0
  49. package/expo-plugin/build/esm/ios-widget/files/manifest.js.map +1 -0
  50. package/expo-plugin/build/esm/ios-widget/files/swift.js +149 -12
  51. package/expo-plugin/build/esm/ios-widget/files/swift.js.map +1 -1
  52. package/expo-plugin/build/esm/ios-widget/index.js +1 -1
  53. package/expo-plugin/build/esm/ios-widget/index.js.map +1 -1
  54. package/expo-plugin/build/esm/ios-widget/widgetPlist.js +22 -0
  55. package/expo-plugin/build/esm/ios-widget/widgetPlist.js.map +1 -1
  56. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js +87 -0
  57. package/expo-plugin/build/esm/ios-widget/xcode/buildPhases.js.map +1 -1
  58. package/expo-plugin/build/esm/ios-widget/xcode/index.js +13 -2
  59. package/expo-plugin/build/esm/ios-widget/xcode/index.js.map +1 -1
  60. package/expo-plugin/build/esm/validation.js +8 -5
  61. package/expo-plugin/build/esm/validation.js.map +1 -1
  62. package/expo-plugin/build/types/index.d.ts.map +1 -1
  63. package/expo-plugin/build/types/ios-widget/clientRendered.d.ts +24 -0
  64. package/expo-plugin/build/types/ios-widget/clientRendered.d.ts.map +1 -0
  65. package/expo-plugin/build/types/ios-widget/clientRenderedPrerender.d.ts +9 -0
  66. package/expo-plugin/build/types/ios-widget/clientRenderedPrerender.d.ts.map +1 -0
  67. package/expo-plugin/build/types/ios-widget/files/index.d.ts.map +1 -1
  68. package/expo-plugin/build/types/ios-widget/files/manifest.d.ts +9 -0
  69. package/expo-plugin/build/types/ios-widget/files/manifest.d.ts.map +1 -0
  70. package/expo-plugin/build/types/ios-widget/files/swift.d.ts +6 -0
  71. package/expo-plugin/build/types/ios-widget/files/swift.d.ts.map +1 -1
  72. package/expo-plugin/build/types/ios-widget/widgetPlist.d.ts.map +1 -1
  73. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts +5 -0
  74. package/expo-plugin/build/types/ios-widget/xcode/buildPhases.d.ts.map +1 -1
  75. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts +2 -0
  76. package/expo-plugin/build/types/ios-widget/xcode/index.d.ts.map +1 -1
  77. package/expo-plugin/build/types/types.d.ts +30 -2
  78. package/expo-plugin/build/types/types.d.ts.map +1 -1
  79. package/expo-plugin/build/types/validation.d.ts +2 -2
  80. package/expo-plugin/build/types/validation.d.ts.map +1 -1
  81. package/expo-plugin/src/index.ts +3 -2
  82. package/expo-plugin/src/ios-widget/clientRendered.ts +88 -0
  83. package/expo-plugin/src/ios-widget/clientRenderedPrerender.ts +103 -0
  84. package/expo-plugin/src/ios-widget/files/index.ts +7 -0
  85. package/expo-plugin/src/ios-widget/files/manifest.ts +47 -0
  86. package/expo-plugin/src/ios-widget/files/swift.ts +166 -15
  87. package/expo-plugin/src/ios-widget/index.ts +1 -1
  88. package/expo-plugin/src/ios-widget/widgetPlist.ts +22 -0
  89. package/expo-plugin/src/ios-widget/xcode/buildPhases.ts +93 -0
  90. package/expo-plugin/src/ios-widget/xcode/index.ts +19 -2
  91. package/expo-plugin/src/types.ts +32 -2
  92. package/expo-plugin/src/validation.ts +14 -5
  93. package/ios/app/VoltraModuleImpl.swift +26 -1
  94. package/ios/shared/VoltraConstants.swift +4 -0
  95. package/ios/shared/VoltraJSRenderer.swift +201 -0
  96. package/ios/shared/VoltraWidgetDefaults.swift +14 -0
  97. package/ios/target/VoltraClientWidgetRuntime.swift +379 -0
  98. package/package.json +5 -16
  99. package/src/index.ts +1 -0
  100. package/src/utils/enableWidgetHotReload.ts +39 -0
package/README.md CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
  - **iOS Widgets**: Update, schedule, reload, and query widgets with `updateWidget`, `scheduleWidget`, `getActiveWidgets`, and more.
14
14
 
15
+ - **Client-rendered widgets** _(experimental)_: Declare a widget in app.json with an `id` and `entry`, default-export the widget module, and render it on-device with live env (family, color scheme, locale, configuration).
16
+
15
17
  - **Fast Refresh**: Hooks and previews integrate with your React Native dev workflow.
16
18
 
17
19
  - **Push & events**: Capture ActivityKit push tokens and component interactions via `addVoltraListener`.
@@ -20,6 +22,23 @@
20
22
 
21
23
  - **Expo config plugin**: Add `"@use-voltra/ios-client"` to `app.json` to generate the Live Activity extension, widget targets, and entitlements.
22
24
 
25
+ ## Client-rendered widgets (experimental)
26
+
27
+ > [!WARNING]
28
+ > Client-rendered widgets are **experimental** — usable in production at your own risk. The API may
29
+ > change between releases.
30
+
31
+ Declare the widget in app.json with a stable `id` and a project-relative `entry` path. The entry
32
+ module must default-export the widget function or component; the exported name does not need to
33
+ match the widget id. The widget renders on-device, so it can react to live environment values
34
+ (widget family, color scheme, locale, and user `configuration` from the native Edit Widget sheet).
35
+
36
+ Notes:
37
+
38
+ - iOS and Android widget declarations stay separate, and the same widget id can exist on both platforms as separate entries.
39
+ - Verify release rendering on a **real device** — the iOS Simulator is unreliable for widget
40
+ rendering.
41
+
23
42
  ## Documentation
24
43
 
25
44
  The documentation is available at [use-voltra.dev](https://use-voltra.dev). Relevant topics for this package:
@@ -27,7 +46,7 @@ The documentation is available at [use-voltra.dev](https://use-voltra.dev). Rele
27
46
  - [Installation](https://use-voltra.dev/getting-started/installation)
28
47
  - [iOS Setup](https://use-voltra.dev/ios/setup)
29
48
  - [Developing Live Activities](https://use-voltra.dev/ios/development/developing-live-activities)
30
- - [Developing Widgets](https://use-voltra.dev/ios/development/developing-widgets)
49
+ - [Developing client-rendered widgets](https://use-voltra.dev/ios/development/dynamic-widgets)
31
50
  - [Plugin Configuration](https://use-voltra.dev/ios/api/plugin-configuration)
32
51
  - [API Reference](https://use-voltra.dev/ios/api/configuration)
33
52
 
@@ -22,6 +22,7 @@ var _exportNames = {
22
22
  preloadImages: true,
23
23
  reloadLiveActivities: true,
24
24
  assertRunningOnApple: true,
25
+ enableWidgetHotReload: true,
25
26
  useUpdateOnHMR: true,
26
27
  clearWidgetServerCredentials: true,
27
28
  setWidgetServerCredentials: true,
@@ -86,6 +87,12 @@ Object.defineProperty(exports, "clearWidgetServerCredentials", {
86
87
  return _serverCredentials.clearWidgetServerCredentials;
87
88
  }
88
89
  });
90
+ Object.defineProperty(exports, "enableWidgetHotReload", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _enableWidgetHotReload.enableWidgetHotReload;
94
+ }
95
+ });
89
96
  Object.defineProperty(exports, "endAllLiveActivities", {
90
97
  enumerable: true,
91
98
  get: function () {
@@ -215,6 +222,7 @@ var _logger = require("./logger.js");
215
222
  var _api = require("./live-activity/api.js");
216
223
  var _preload = require("./preload.js");
217
224
  var _assertRunningOnApple = require("./utils/assertRunningOnApple.js");
225
+ var _enableWidgetHotReload = require("./utils/enableWidgetHotReload.js");
218
226
  var _useUpdateOnHMR = require("./utils/useUpdateOnHMR.js");
219
227
  var _helpers2 = require("./utils/helpers.js");
220
228
  Object.keys(_helpers2).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"names":["_ios","require","_VoltraLiveActivityPreview","_VoltraView","_VoltraWidgetPreview","_events","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_helpers","_logger","_api","_preload","_assertRunningOnApple","_useUpdateOnHMR","_helpers2","_serverCredentials","_widgetApi"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AAIA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,QAAA,GAAAjB,OAAA;AACA,IAAAkB,OAAA,GAAAlB,OAAA;AACA,IAAAmB,IAAA,GAAAnB,OAAA;AAeA,IAAAoB,QAAA,GAAApB,OAAA;AAOA,IAAAqB,qBAAA,GAAArB,OAAA;AACA,IAAAsB,eAAA,GAAAtB,OAAA;AACA,IAAAuB,SAAA,GAAAvB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAiB,SAAA,EAAAhB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAe,SAAA,CAAAf,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAO,SAAA,CAAAf,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAgB,kBAAA,GAAAxB,OAAA;AAMA,IAAAyB,UAAA,GAAAzB,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_ios","require","_VoltraLiveActivityPreview","_VoltraView","_VoltraWidgetPreview","_events","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_helpers","_logger","_api","_preload","_assertRunningOnApple","_enableWidgetHotReload","_useUpdateOnHMR","_helpers2","_serverCredentials","_widgetApi"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AAIA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,QAAA,GAAAjB,OAAA;AACA,IAAAkB,OAAA,GAAAlB,OAAA;AACA,IAAAmB,IAAA,GAAAnB,OAAA;AAeA,IAAAoB,QAAA,GAAApB,OAAA;AAOA,IAAAqB,qBAAA,GAAArB,OAAA;AACA,IAAAsB,sBAAA,GAAAtB,OAAA;AACA,IAAAuB,eAAA,GAAAvB,OAAA;AACA,IAAAwB,SAAA,GAAAxB,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAkB,SAAA,EAAAjB,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAgB,SAAA,CAAAhB,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAQ,SAAA,CAAAhB,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAiB,kBAAA,GAAAzB,OAAA;AAMA,IAAA0B,UAAA,GAAA1B,OAAA","ignoreList":[]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.enableWidgetHotReload = enableWidgetHotReload;
7
+ var _widgetApi = require("../widgets/widget-api.js");
8
+ /**
9
+ * Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
10
+ *
11
+ * Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
12
+ * lands in the host app's JS runtime. When fired, calls
13
+ * `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
14
+ * Provider, which re-fetches the freshest bundle from Metro and renders the
15
+ * updated UI.
16
+ *
17
+ * Only effective while the host app's JS thread is alive — iOS suspends the
18
+ * RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
19
+ * the home screen, never touch the host app" case is not covered. For that
20
+ * workflow the dev still relies on WidgetKit's natural lifecycle refresh on
21
+ * app foreground.
22
+ *
23
+ * Call once at app startup. Returns `dispose()` to restore the prior
24
+ * `__accept` (rarely needed in practice). No-op in release builds.
25
+ */
26
+ function enableWidgetHotReload() {
27
+ if (!__DEV__) {
28
+ return () => {};
29
+ }
30
+ const oldAccept = global['__accept'];
31
+ global['__accept'] = (...args) => {
32
+ void (0, _widgetApi.reloadWidgets)();
33
+ oldAccept?.(...args);
34
+ };
35
+ return () => {
36
+ global['__accept'] = oldAccept;
37
+ };
38
+ }
39
+ //# sourceMappingURL=enableWidgetHotReload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_widgetApi","require","enableWidgetHotReload","__DEV__","oldAccept","global","args","reloadWidgets"],"sourceRoot":"../../../src","sources":["utils/enableWidgetHotReload.ts"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAAA,EAAe;EAClD,IAAI,CAACC,OAAO,EAAE;IACZ,OAAO,MAAM,CAAC,CAAC;EACjB;EAEA,MAAMC,SAAS,GAAGC,MAAM,CAAC,UAAU,CAAC;EACpCA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAGC,IAAI,KAAK;IAChC,KAAK,IAAAC,wBAAa,EAAC,CAAC;IACpBH,SAAS,GAAG,GAAGE,IAAI,CAAC;EACtB,CAAC;EAED,OAAO,MAAM;IACXD,MAAM,CAAC,UAAU,CAAC,GAAGD,SAAS;EAChC,CAAC;AACH","ignoreList":[]}
@@ -10,6 +10,7 @@ export { logger } from './logger.js';
10
10
  export { endAllLiveActivities, isLiveActivityActive, startLiveActivity, stopLiveActivity, updateLiveActivity, useLiveActivity } from './live-activity/api.js';
11
11
  export { clearPreloadedImages, preloadImages, reloadLiveActivities } from './preload.js';
12
12
  export { assertRunningOnApple } from './utils/assertRunningOnApple.js';
13
+ export { enableWidgetHotReload } from './utils/enableWidgetHotReload.js';
13
14
  export { useUpdateOnHMR } from './utils/useUpdateOnHMR.js';
14
15
  export * from './utils/helpers.js';
15
16
  export { clearWidgetServerCredentials, setWidgetServerCredentials } from './widgets/server-credentials.js';
@@ -1 +1 @@
1
- {"version":3,"names":["Voltra","VoltraLiveActivityPreview","VoltraView","VoltraWidgetPreview","isGlassSupported","isHeadless","useIsHeadless","logger","endAllLiveActivities","isLiveActivityActive","startLiveActivity","stopLiveActivity","updateLiveActivity","useLiveActivity","clearPreloadedImages","preloadImages","reloadLiveActivities","assertRunningOnApple","useUpdateOnHMR","clearWidgetServerCredentials","setWidgetServerCredentials","clearAllWidgets","clearWidget","getActiveWidgets","reloadWidgets","scheduleWidget","updateWidget"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SACEC,yBAAyB,QAEpB,2CAA2C;AAClD,SAASC,UAAU,QAA8B,4BAA4B;AAC7E,SAASC,mBAAmB,QAAuC,qCAAqC;AACxG,cAAc,aAAa;AAC3B,SAASC,gBAAgB,EAAEC,UAAU,EAAEC,aAAa,QAAQ,cAAc;AAC1E,SAASC,MAAM,QAA6B,aAAa;AACzD,SACEC,oBAAoB,EAEpBC,oBAAoB,EAEpBC,iBAAiB,EAEjBC,gBAAgB,EAChBC,kBAAkB,EAElBC,eAAe,QAGV,wBAAwB;AAE/B,SACEC,oBAAoB,EAEpBC,aAAa,EAEbC,oBAAoB,QACf,cAAc;AACrB,SAASC,oBAAoB,QAAQ,iCAAiC;AACtE,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,cAAc,oBAAoB;AAElC,SACEC,4BAA4B,EAC5BC,0BAA0B,QAErB,iCAAiC;AAExC,SACEC,eAAe,EACfC,WAAW,EACXC,gBAAgB,EAChBC,aAAa,EAEbC,cAAc,EACdC,YAAY,QAEP,yBAAyB","ignoreList":[]}
1
+ {"version":3,"names":["Voltra","VoltraLiveActivityPreview","VoltraView","VoltraWidgetPreview","isGlassSupported","isHeadless","useIsHeadless","logger","endAllLiveActivities","isLiveActivityActive","startLiveActivity","stopLiveActivity","updateLiveActivity","useLiveActivity","clearPreloadedImages","preloadImages","reloadLiveActivities","assertRunningOnApple","enableWidgetHotReload","useUpdateOnHMR","clearWidgetServerCredentials","setWidgetServerCredentials","clearAllWidgets","clearWidget","getActiveWidgets","reloadWidgets","scheduleWidget","updateWidget"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,iBAAiB;AACxC,SACEC,yBAAyB,QAEpB,2CAA2C;AAClD,SAASC,UAAU,QAA8B,4BAA4B;AAC7E,SAASC,mBAAmB,QAAuC,qCAAqC;AACxG,cAAc,aAAa;AAC3B,SAASC,gBAAgB,EAAEC,UAAU,EAAEC,aAAa,QAAQ,cAAc;AAC1E,SAASC,MAAM,QAA6B,aAAa;AACzD,SACEC,oBAAoB,EAEpBC,oBAAoB,EAEpBC,iBAAiB,EAEjBC,gBAAgB,EAChBC,kBAAkB,EAElBC,eAAe,QAGV,wBAAwB;AAE/B,SACEC,oBAAoB,EAEpBC,aAAa,EAEbC,oBAAoB,QACf,cAAc;AACrB,SAASC,oBAAoB,QAAQ,iCAAiC;AACtE,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,cAAc,oBAAoB;AAElC,SACEC,4BAA4B,EAC5BC,0BAA0B,QAErB,iCAAiC;AAExC,SACEC,eAAe,EACfC,WAAW,EACXC,gBAAgB,EAChBC,aAAa,EAEbC,cAAc,EACdC,YAAY,QAEP,yBAAyB","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ import { reloadWidgets } from '../widgets/widget-api.js';
4
+ /**
5
+ * Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
6
+ *
7
+ * Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
8
+ * lands in the host app's JS runtime. When fired, calls
9
+ * `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
10
+ * Provider, which re-fetches the freshest bundle from Metro and renders the
11
+ * updated UI.
12
+ *
13
+ * Only effective while the host app's JS thread is alive — iOS suspends the
14
+ * RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
15
+ * the home screen, never touch the host app" case is not covered. For that
16
+ * workflow the dev still relies on WidgetKit's natural lifecycle refresh on
17
+ * app foreground.
18
+ *
19
+ * Call once at app startup. Returns `dispose()` to restore the prior
20
+ * `__accept` (rarely needed in practice). No-op in release builds.
21
+ */
22
+ export function enableWidgetHotReload() {
23
+ if (!__DEV__) {
24
+ return () => {};
25
+ }
26
+ const oldAccept = global['__accept'];
27
+ global['__accept'] = (...args) => {
28
+ void reloadWidgets();
29
+ oldAccept?.(...args);
30
+ };
31
+ return () => {
32
+ global['__accept'] = oldAccept;
33
+ };
34
+ }
35
+ //# sourceMappingURL=enableWidgetHotReload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["reloadWidgets","enableWidgetHotReload","__DEV__","oldAccept","global","args"],"sourceRoot":"../../../src","sources":["utils/enableWidgetHotReload.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,0BAA0B;AAMxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAAA,EAAe;EAClD,IAAI,CAACC,OAAO,EAAE;IACZ,OAAO,MAAM,CAAC,CAAC;EACjB;EAEA,MAAMC,SAAS,GAAGC,MAAM,CAAC,UAAU,CAAC;EACpCA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAGC,IAAI,KAAK;IAChC,KAAKL,aAAa,CAAC,CAAC;IACpBG,SAAS,GAAG,GAAGE,IAAI,CAAC;EACtB,CAAC;EAED,OAAO,MAAM;IACXD,MAAM,CAAC,UAAU,CAAC,GAAGD,SAAS;EAChC,CAAC;AACH","ignoreList":[]}
@@ -9,6 +9,7 @@ export { endAllLiveActivities, type EndLiveActivityOptions, isLiveActivityActive
9
9
  export type { DismissalPolicy, LiveActivityVariants } from '@use-voltra/ios';
10
10
  export { clearPreloadedImages, type PreloadImageOptions, preloadImages, type PreloadImagesResult, reloadLiveActivities, } from './preload.js';
11
11
  export { assertRunningOnApple } from './utils/assertRunningOnApple.js';
12
+ export { enableWidgetHotReload } from './utils/enableWidgetHotReload.js';
12
13
  export { useUpdateOnHMR } from './utils/useUpdateOnHMR.js';
13
14
  export * from './utils/helpers.js';
14
15
  export type { VoltraElementJson, VoltraNodeJson } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,23 @@
1
+ declare global {
2
+ var __accept: (...args: unknown[]) => void;
3
+ }
4
+ /**
5
+ * Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
6
+ *
7
+ * Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
8
+ * lands in the host app's JS runtime. When fired, calls
9
+ * `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
10
+ * Provider, which re-fetches the freshest bundle from Metro and renders the
11
+ * updated UI.
12
+ *
13
+ * Only effective while the host app's JS thread is alive — iOS suspends the
14
+ * RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
15
+ * the home screen, never touch the host app" case is not covered. For that
16
+ * workflow the dev still relies on WidgetKit's natural lifecycle refresh on
17
+ * app foreground.
18
+ *
19
+ * Call once at app startup. Returns `dispose()` to restore the prior
20
+ * `__accept` (rarely needed in practice). No-op in release builds.
21
+ */
22
+ export declare function enableWidgetHotReload(): () => void;
23
+ //# sourceMappingURL=enableWidgetHotReload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableWidgetHotReload.d.ts","sourceRoot":"","sources":["../../../../src/utils/enableWidgetHotReload.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAC3C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,IAAI,CAclD"}
@@ -9,6 +9,7 @@ export { endAllLiveActivities, type EndLiveActivityOptions, isLiveActivityActive
9
9
  export type { DismissalPolicy, LiveActivityVariants } from '@use-voltra/ios';
10
10
  export { clearPreloadedImages, type PreloadImageOptions, preloadImages, type PreloadImagesResult, reloadLiveActivities, } from './preload.js';
11
11
  export { assertRunningOnApple } from './utils/assertRunningOnApple.js';
12
+ export { enableWidgetHotReload } from './utils/enableWidgetHotReload.js';
12
13
  export { useUpdateOnHMR } from './utils/useUpdateOnHMR.js';
13
14
  export * from './utils/helpers.js';
14
15
  export type { VoltraElementJson, VoltraNodeJson } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EACL,yBAAyB,EACzB,KAAK,8BAA8B,GACpC,MAAM,2CAA2C,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,qCAAqC,CAAA;AACxG,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EACL,oBAAoB,EACpB,KAAK,sBAAsB,EAC3B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,aAAa,EACb,KAAK,mBAAmB,EACxB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAA;AACxC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,YAAY,EACZ,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,23 @@
1
+ declare global {
2
+ var __accept: (...args: unknown[]) => void;
3
+ }
4
+ /**
5
+ * Trigger `reloadWidgets()` on every Metro Fast Refresh patch (DEV only).
6
+ *
7
+ * Hooks the global `__accept` callback Metro fires when a Fast Refresh patch
8
+ * lands in the host app's JS runtime. When fired, calls
9
+ * `WidgetCenter.shared.reloadAllTimelines()` so WidgetKit re-invokes each widget
10
+ * Provider, which re-fetches the freshest bundle from Metro and renders the
11
+ * updated UI.
12
+ *
13
+ * Only effective while the host app's JS thread is alive — iOS suspends the
14
+ * RN runtime within ~5 seconds of backgrounding, so the "edit while staring at
15
+ * the home screen, never touch the host app" case is not covered. For that
16
+ * workflow the dev still relies on WidgetKit's natural lifecycle refresh on
17
+ * app foreground.
18
+ *
19
+ * Call once at app startup. Returns `dispose()` to restore the prior
20
+ * `__accept` (rarely needed in practice). No-op in release builds.
21
+ */
22
+ export declare function enableWidgetHotReload(): () => void;
23
+ //# sourceMappingURL=enableWidgetHotReload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableWidgetHotReload.d.ts","sourceRoot":"","sources":["../../../../src/utils/enableWidgetHotReload.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAC3C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,IAAI,CAclD"}
@@ -12,7 +12,8 @@ const validation_1 = require("./validation");
12
12
  * Configures Live Activities, the widget extension, and optional push-to-start support.
13
13
  */
14
14
  const withVoltraIos = (config, props = {}) => {
15
- (0, validation_1.validateIOSConfigPluginProps)(props);
15
+ const projectRoot = config.modRequest?.projectRoot;
16
+ (0, validation_1.validateIOSConfigPluginProps)(props, projectRoot);
16
17
  const iosBundleIdentifier = config.ios?.bundleIdentifier;
17
18
  if (!iosBundleIdentifier) {
18
19
  return config;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,wDAA+C;AAE/C,2CAAiC;AACjC,+BAAsD;AACtD,6CAAuD;AAEvD,iDAAmD;AACnD,6CAA2D;AAE3D;;;;GAIG;AACH,MAAM,aAAa,GAA0B,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE;IAClE,IAAA,yCAA4B,EAAC,KAAK,CAAC,CAAA;IAEnC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAA;IACxD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,eAAG,CAAC,iBAAiB,CAAA;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,0BAAS,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA;IACvG,MAAM,gBAAgB,GAAG,GAAG,mBAAmB,IAAI,UAAU,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAA;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,WAAW,IAAI,GAAG,CAAA;IAElD,MAAM,GAAG,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAA;IAEhC,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,CAAA;IAClF,MAAM,aAAa,GACjB,KAAK,CAAC,aAAa,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,yBAAyB,mBAAmB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAE9G,MAAM,GAAG,IAAA,aAAO,EAAC,MAAM,EAAE;QACvB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACjG,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,GAAG,IAAA,oBAAa,EAAC,MAAM,EAAE;QAC7B,UAAU;QACV,gBAAgB;QAChB,gBAAgB;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO;QACP,WAAW;QACX,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAClC,MAAM,GAAG,IAAA,2BAAqB,EAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,kBAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,wDAA+C;AAE/C,2CAAiC;AACjC,+BAAsD;AACtD,6CAAuD;AAEvD,iDAAmD;AACnD,6CAA2D;AAE3D;;;;GAIG;AACH,MAAM,aAAa,GAA0B,CAAC,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE;IAClE,MAAM,WAAW,GAAI,MAAoD,CAAC,UAAU,EAAE,WAAW,CAAA;IACjG,IAAA,yCAA4B,EAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAEhD,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAA;IACxD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,eAAG,CAAC,iBAAiB,CAAA;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,0BAAS,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAA;IACvG,MAAM,gBAAgB,GAAG,GAAG,mBAAmB,IAAI,UAAU,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAA;IACzC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,WAAW,IAAI,GAAG,CAAA;IAElD,MAAM,GAAG,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAA;IAEhC,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,CAAA;IAClF,MAAM,aAAa,GACjB,KAAK,CAAC,aAAa,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,yBAAyB,mBAAmB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAE9G,MAAM,GAAG,IAAA,aAAO,EAAC,MAAM,EAAE;QACvB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,SAAS,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;QACjG,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,GAAG,IAAA,oBAAa,EAAC,MAAM,EAAE;QAC7B,UAAU;QACV,gBAAgB;QAChB,gBAAgB;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO;QACP,WAAW;QACX,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAClC,MAAM,GAAG,IAAA,2BAAqB,EAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,kBAAe,aAAa,CAAA"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.detectClientRenderedWidgets = detectClientRenderedWidgets;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const expo_plugin_1 = require("@use-voltra/expo-plugin");
40
+ // Emit the experimental notice at most once per prebuild process (detection runs from several
41
+ // plugin steps).
42
+ let hasWarnedExperimental = false;
43
+ /** Inspect every widget once and tag entry-backed widgets as Dynamic Widgets. */
44
+ function detectClientRenderedWidgets(widgets, projectRoot) {
45
+ const detected = widgets.map((widget) => detectSingleWidget(widget, projectRoot));
46
+ if (!hasWarnedExperimental) {
47
+ const clientWidgetIds = detected.filter((widget) => widget.clientRendered).map((widget) => widget.id);
48
+ if (clientWidgetIds.length > 0) {
49
+ hasWarnedExperimental = true;
50
+ console.warn(`[voltra] Dynamic Widgets are EXPERIMENTAL (${clientWidgetIds.join(', ')}). ` +
51
+ 'The widget JSX runs on-device in a separate JS engine; the API and build output may change, ' +
52
+ 'and production rendering should be verified on a real device. Use at your own risk.');
53
+ }
54
+ }
55
+ return detected;
56
+ }
57
+ function detectSingleWidget(widget, projectRoot) {
58
+ if (widget.entry === undefined) {
59
+ return {
60
+ ...widget,
61
+ clientRendered: false,
62
+ };
63
+ }
64
+ const sourcePath = resolveWidgetEntryPath(widget.entry, projectRoot);
65
+ if (!sourcePath || !fs.existsSync(sourcePath)) {
66
+ throw new Error(`[voltra] Dynamic Widget "${widget.id}" entry not found at ${path.relative(projectRoot, sourcePath ?? widget.entry)}`);
67
+ }
68
+ const widgetModule = (0, expo_plugin_1.evaluateWidgetModuleExports)(projectRoot, sourcePath);
69
+ const widgetFn = widgetModule?.default ?? widgetModule;
70
+ if (typeof widgetFn !== 'function') {
71
+ throw new Error(`[voltra] Dynamic Widget "${widget.id}" at ${path.relative(projectRoot, sourcePath)} must default-export a function or component.`);
72
+ }
73
+ return {
74
+ ...widget,
75
+ clientRendered: true,
76
+ clientSourcePath: sourcePath,
77
+ };
78
+ }
79
+ function resolveWidgetEntryPath(entry, projectRoot) {
80
+ return path.resolve(projectRoot, entry);
81
+ }
82
+ //# sourceMappingURL=clientRendered.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientRendered.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRendered.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,kEAgBC;AA/CD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAqE;AAuBrE,8FAA8F;AAC9F,iBAAiB;AACjB,IAAI,qBAAqB,GAAG,KAAK,CAAA;AAEjC,iFAAiF;AACjF,SAAgB,2BAA2B,CAAC,OAA0B,EAAE,WAAmB;IACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;IAEjF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrG,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,qBAAqB,GAAG,IAAI,CAAA;YAC5B,OAAO,CAAC,IAAI,CACV,8CAA8C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAC3E,8FAA8F;gBAC9F,qFAAqF,CACxF,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAuB,EAAE,WAAmB;IACtE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,GAAG,MAAM;YACT,cAAc,EAAE,KAAK;SACtB,CAAA;IACH,CAAC;IAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACpE,IAAI,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,wBAAwB,IAAI,CAAC,QAAQ,CACxE,WAAW,EACX,UAAU,IAAI,MAAM,CAAC,KAAK,CAC3B,EAAE,CACJ,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACzE,MAAM,QAAQ,GAAG,YAAY,EAAE,OAAO,IAAI,YAAY,CAAA;IACtD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,CAAC,EAAE,QAAQ,IAAI,CAAC,QAAQ,CACxD,WAAW,EACX,UAAU,CACX,+CAA+C,CACjD,CAAA;IACH,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,UAAU;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,WAAmB;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.prerenderClientRenderedWidgets = prerenderClientRenderedWidgets;
37
+ const expo_plugin_1 = require("@use-voltra/expo-plugin");
38
+ /**
39
+ * Initial-state prerender for Dynamic Widgets.
40
+ *
41
+ * For widgets with `initialStatePath`, the existing `prerenderWidgetState` in
42
+ * @use-voltra/expo-plugin loads the file and reads `exports.default` (a `WidgetVariants`
43
+ * object), then runs it through the multi-family `renderWidgetToString` to produce a
44
+ * per-family JSON payload that the runtime's `selectContentForFamily` will pick from.
45
+ *
46
+ * Dynamic Widgets work differently: the module referenced by `entry` default-exports a
47
+ * function or component, and the runtime calls it per-render with real env values. For the
48
+ * WidgetKit placeholder (`Provider.placeholder` and the widget gallery preview) ONE
49
+ * pre-rendered JSON entry is needed to display before any Metro fetch completes. That's
50
+ * generated here by calling the entry default export at prebuild with empty props + a
51
+ * minimal env, storing the compact `{t, c, p}` JSON in the existing `voltra_initial_states.json`.
52
+ *
53
+ * The placeholder's env values are fixed (`widgetFamily: 'systemMedium'`,
54
+ * `colorScheme: 'light'`, etc.) and may not match what the user actually sees the moment
55
+ * they add the widget — but the first real timeline tick replaces this entry within
56
+ * milliseconds, so the brief mismatch is invisible in practice.
57
+ */
58
+ /** Locale key used for non-localized prerendered states (mirrors prerender.ts behavior). */
59
+ const SINGLE_LOCALE_KEY = '__default';
60
+ /**
61
+ * Default env passed to Dynamic Widgets at prebuild for the placeholder render. Fields
62
+ * mirror `WidgetEnvironment` from packages/core/src/widget-environment.ts so the widget
63
+ * function sees the same shape it gets at runtime.
64
+ */
65
+ function buildPlaceholderEnv() {
66
+ return {
67
+ date: Date.now(),
68
+ widgetFamily: 'systemMedium',
69
+ colorScheme: 'light',
70
+ locale: 'en-US',
71
+ widgetRenderingMode: 'fullColor',
72
+ showsWidgetContainerBackground: true,
73
+ configuration: undefined,
74
+ build: {
75
+ isDev: false,
76
+ metroUrl: null,
77
+ appVersion: 'unknown',
78
+ voltraVersion: '1.4.1',
79
+ },
80
+ };
81
+ }
82
+ /**
83
+ * Prerender placeholder JSON for every Dynamic Widget. Returns a map shaped
84
+ * identically to `prerenderWidgetState`'s output so the two can be merged before
85
+ * generating `VoltraWidgetInitialStates.swift`.
86
+ */
87
+ async function prerenderClientRenderedWidgets(widgets, projectRoot) {
88
+ const results = new Map();
89
+ const clientWidgets = widgets.filter((w) => w.clientRendered);
90
+ if (clientWidgets.length === 0) {
91
+ return results;
92
+ }
93
+ // Lazy-loaded so server-only projects never pull in @use-voltra/ios. The renderer
94
+ // is iOS-specific by design — the Android counterpart will use the same shape via
95
+ // @use-voltra/android in a future phase.
96
+ const iosModuleId = '@use-voltra/ios';
97
+ const { renderVoltraVariantToJson } = (await Promise.resolve(`${iosModuleId}`).then(s => __importStar(require(s))));
98
+ const placeholderEnv = buildPlaceholderEnv();
99
+ for (const widget of clientWidgets) {
100
+ try {
101
+ const widgetModule = (0, expo_plugin_1.evaluateWidgetModuleExports)(projectRoot, widget.clientSourcePath);
102
+ const widgetFn = widgetModule?.default ?? widgetModule;
103
+ if (typeof widgetFn !== 'function') {
104
+ throw new Error(`Expected the entry module at ${widget.clientSourcePath} to default-export a function or component.`);
105
+ }
106
+ const element = widgetFn({}, placeholderEnv);
107
+ const json = renderVoltraVariantToJson(element);
108
+ const jsonString = JSON.stringify(json);
109
+ results.set(widget.id, new Map([[SINGLE_LOCALE_KEY, jsonString]]));
110
+ }
111
+ catch (error) {
112
+ throw new Error(`Failed to prerender Dynamic Widget "${widget.id}": ${error instanceof Error ? error.message : String(error)}`);
113
+ }
114
+ }
115
+ expo_plugin_1.logger.info(`Prerendered ${clientWidgets.length} Dynamic Widget placeholder(s)`);
116
+ return results;
117
+ }
118
+ //# sourceMappingURL=clientRenderedPrerender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientRenderedPrerender.js","sourceRoot":"","sources":["../../../src/ios-widget/clientRenderedPrerender.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDA,wEA8CC;AAtGD,yDAA2G;AAI3G;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4FAA4F;AAC5F,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAErC;;;;GAIG;AACH,SAAS,mBAAmB;IAC1B,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;QAChB,YAAY,EAAE,cAAc;QAC5B,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,OAAO;QACf,mBAAmB,EAAE,WAAW;QAChC,8BAA8B,EAAE,IAAI;QACpC,aAAa,EAAE,SAAS;QACxB,KAAK,EAAE;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,OAAO;SACvB;KACF,CAAA;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,8BAA8B,CAClD,OAA4B,EAC5B,WAAmB;IAEnB,MAAM,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAA;IAElD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,CAAC,EAA6D,EAAE,CAAC,CAAC,CAAC,cAAc,CACnF,CAAA;IACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,kFAAkF;IAClF,kFAAkF;IAClF,yCAAyC;IACzC,MAAM,WAAW,GAAG,iBAAiB,CAAA;IACrC,MAAM,EAAE,yBAAyB,EAAE,GAAG,CAAC,yBAAa,WAAW,uCAAC,CAE/D,CAAA;IAED,MAAM,cAAc,GAAG,mBAAmB,EAAE,CAAA;IAE5C,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,yCAA2B,EAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACtF,MAAM,QAAQ,GAAG,YAAY,EAAE,OAAO,IAAI,YAAY,CAAA;YACtD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,gCAAgC,MAAM,CAAC,gBAAgB,6CAA6C,CACrG,CAAA;YACH,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;YAC5C,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,CAAC,EAAE,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAA;QACH,CAAC;IACH,CAAC;IAED,oBAAM,CAAC,IAAI,CAAC,eAAe,aAAa,CAAC,MAAM,gCAAgC,CAAC,CAAA;IAChF,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -40,6 +40,7 @@ const path = __importStar(require("path"));
40
40
  const assets_1 = require("./assets");
41
41
  const entitlements_1 = require("./entitlements");
42
42
  const infoPlist_1 = require("./infoPlist");
43
+ const manifest_1 = require("./manifest");
43
44
  const swift_1 = require("./swift");
44
45
  /**
45
46
  * Plugin step that generates all widget extension files.
@@ -77,6 +78,11 @@ const generateWidgetExtensionFiles = (config, props) => {
77
78
  projectRoot,
78
79
  widgets,
79
80
  });
81
+ // Write the iOS-owned Dynamic Widgets manifest for Metro to consume later.
82
+ (0, manifest_1.generateIOSDynamicWidgetsManifest)({
83
+ projectRoot,
84
+ widgets,
85
+ });
80
86
  // Generate entitlements file (may be empty if no groupIdentifier or keychainGroup)
81
87
  (0, entitlements_1.generateEntitlements)({
82
88
  targetPath,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,uCAAwB;AACxB,2CAA4B;AAG5B,qCAAyC;AACzC,iDAAqD;AACrD,2CAA+C;AAC/C,mCAA4C;AAW5C;;;;;;;;;;;GAWG;AACI,MAAM,4BAA4B,GAAoD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7G,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE3F,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;YAE7D,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YAED,sBAAsB;YACtB,IAAA,6BAAiB,EAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YAE/D,gDAAgD;YAChD,IAAA,uBAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAE9B,uDAAuD;YACvD,MAAM,IAAA,0BAAkB,EAAC;gBACvB,UAAU;gBACV,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,mFAAmF;YACnF,IAAA,mCAAoB,EAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AA1CY,QAAA,4BAA4B,gCA0CxC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAAqE;AACrE,uCAAwB;AACxB,2CAA4B;AAG5B,qCAAyC;AACzC,iDAAqD;AACrD,2CAA+C;AAC/C,yCAA8D;AAC9D,mCAA4C;AAW5C;;;;;;;;;;;GAWG;AACI,MAAM,4BAA4B,GAAoD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;IAC7G,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAE3F,OAAO,IAAA,iCAAgB,EAAC,MAAM,EAAE;QAC9B,KAAK;QACL,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;gBACjC,OAAO,MAAM,CAAA;YACf,CAAC;YAED,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;YAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;YAE7D,iCAAiC;YACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC;YAED,sBAAsB;YACtB,IAAA,6BAAiB,EAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YAE/D,gDAAgD;YAChD,IAAA,uBAAc,EAAC,EAAE,UAAU,EAAE,CAAC,CAAA;YAE9B,uDAAuD;YACvD,MAAM,IAAA,0BAAkB,EAAC;gBACvB,UAAU;gBACV,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,2EAA2E;YAC3E,IAAA,4CAAiC,EAAC;gBAChC,WAAW;gBACX,OAAO;aACR,CAAC,CAAA;YAEF,mFAAmF;YACnF,IAAA,mCAAoB,EAAC;gBACnB,UAAU;gBACV,UAAU;gBACV,eAAe;gBACf,aAAa;aACd,CAAC,CAAA;YAEF,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAhDY,QAAA,4BAA4B,gCAgDxC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createIOSDynamicWidgetsManifest = createIOSDynamicWidgetsManifest;
37
+ exports.generateIOSDynamicWidgetsManifest = generateIOSDynamicWidgetsManifest;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const expo_plugin_1 = require("@use-voltra/expo-plugin");
41
+ const MANIFEST_PATH = path.join('.voltra', 'manifest.ios.json');
42
+ function createIOSDynamicWidgetsManifest(projectRoot, widgets) {
43
+ const manifestWidgets = [];
44
+ for (const widget of widgets) {
45
+ if (widget.entry === undefined) {
46
+ continue;
47
+ }
48
+ manifestWidgets.push({
49
+ id: widget.id,
50
+ entry: (0, expo_plugin_1.validateWidgetEntry)(widget.entry, widget.id, projectRoot),
51
+ });
52
+ }
53
+ return {
54
+ version: 1,
55
+ platform: 'ios',
56
+ widgets: manifestWidgets,
57
+ };
58
+ }
59
+ function generateIOSDynamicWidgetsManifest(options) {
60
+ const { projectRoot, widgets } = options;
61
+ const manifestPath = path.join(projectRoot, MANIFEST_PATH);
62
+ const manifest = createIOSDynamicWidgetsManifest(projectRoot, widgets ?? []);
63
+ fs.mkdirSync(path.dirname(manifestPath), { recursive: true });
64
+ fs.writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
65
+ expo_plugin_1.logger.info(`Generated ${MANIFEST_PATH}`);
66
+ }
67
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../src/ios-widget/files/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,0EAsBC;AAED,8EAQC;AA9CD,uCAAwB;AACxB,2CAA4B;AAE5B,yDAAiG;AAIjG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;AAO/D,SAAgB,+BAA+B,CAC7C,WAAmB,EACnB,OAA0B;IAE1B,MAAM,eAAe,GAAqC,EAAE,CAAA;IAE5D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAQ;QACV,CAAC;QAED,eAAe,CAAC,IAAI,CAAC;YACnB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,IAAA,iCAAmB,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,WAAW,CAAC;SACjE,CAAC,CAAA;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,eAAe;KACzB,CAAA;AACH,CAAC;AAED,SAAgB,iCAAiC,CAAC,OAAiD;IACjG,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,WAAW,EAAE,OAAO,IAAI,EAAE,CAAC,CAAA;IAE5E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IACxE,oBAAM,CAAC,IAAI,CAAC,aAAa,aAAa,EAAE,CAAC,CAAA;AAC3C,CAAC"}