vibefast-cli 0.5.0 → 0.5.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 (78) hide show
  1. package/FEATURE-DEPENDENCY-SPEC.md +338 -0
  2. package/dist/__tests__/integration.test.d.ts +2 -0
  3. package/dist/__tests__/integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/integration.test.js +219 -0
  5. package/dist/__tests__/integration.test.js.map +1 -0
  6. package/dist/__tests__/recipes.test.d.ts +2 -0
  7. package/dist/__tests__/recipes.test.d.ts.map +1 -0
  8. package/dist/__tests__/recipes.test.js +143 -0
  9. package/dist/__tests__/recipes.test.js.map +1 -0
  10. package/dist/commands/__tests__/init.test.d.ts +2 -0
  11. package/dist/commands/__tests__/init.test.d.ts.map +1 -0
  12. package/dist/commands/__tests__/init.test.js +95 -0
  13. package/dist/commands/__tests__/init.test.js.map +1 -0
  14. package/dist/commands/__tests__/platform.test.d.ts +2 -0
  15. package/dist/commands/__tests__/platform.test.d.ts.map +1 -0
  16. package/dist/commands/__tests__/platform.test.js +123 -0
  17. package/dist/commands/__tests__/platform.test.js.map +1 -0
  18. package/dist/commands/add.d.ts.map +1 -1
  19. package/dist/commands/add.js +8 -5
  20. package/dist/commands/add.js.map +1 -1
  21. package/dist/core/journal.d.ts.map +1 -1
  22. package/dist/core/journal.js +36 -19
  23. package/dist/core/journal.js.map +1 -1
  24. package/dist/core/recipes.d.ts +1 -1
  25. package/dist/core/recipes.d.ts.map +1 -1
  26. package/dist/core/recipes.js +12 -41
  27. package/dist/core/recipes.js.map +1 -1
  28. package/package.json +1 -1
  29. package/recipes/ios-widget/recipe.json +78 -0
  30. package/recipes/ios-widget/targets/widget/AppIntent.swift +46 -0
  31. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
  32. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
  33. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
  34. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
  35. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
  36. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
  37. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
  38. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
  39. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
  40. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
  41. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
  42. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
  43. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
  44. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
  45. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +122 -0
  46. package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
  47. package/recipes/ios-widget/targets/widget/CalorieTrackerWidget.swift +424 -0
  48. package/recipes/ios-widget/targets/widget/HabitTrackerWidget.swift +305 -0
  49. package/recipes/ios-widget/targets/widget/Info.plist +11 -0
  50. package/recipes/ios-widget/targets/widget/WidgetLiveActivity.swift +75 -0
  51. package/recipes/ios-widget/targets/widget/expo-target.config.js +10 -0
  52. package/recipes/ios-widget/targets/widget/generated.entitlements +5 -0
  53. package/recipes/ios-widget/targets/widget/index.swift +18 -0
  54. package/recipes/ios-widget/targets/widget/widgets.swift +96 -0
  55. package/recipes/ios-widget@latest.zip +0 -0
  56. package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/index.tsx +74 -0
  57. package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/local.tsx +25 -0
  58. package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/remote.tsx +23 -0
  59. package/recipes/payments/apps/native/src/features/payments/README.md +200 -0
  60. package/recipes/payments/apps/native/src/features/payments/app/local-paywall.tsx +194 -0
  61. package/recipes/payments/apps/native/src/features/payments/app/remote-paywall.tsx +79 -0
  62. package/recipes/payments/apps/native/src/features/payments/components/payment-initializer.tsx +95 -0
  63. package/recipes/payments/apps/native/src/features/payments/components/paywall-error-state.tsx +60 -0
  64. package/recipes/payments/apps/native/src/features/payments/components/paywall-local-mode.tsx +116 -0
  65. package/recipes/payments/apps/native/src/features/payments/components/paywall-product-card.tsx +133 -0
  66. package/recipes/payments/apps/native/src/features/payments/components/paywall-remote-mode.tsx +146 -0
  67. package/recipes/payments/apps/native/src/features/payments/hooks/use-entitlement.ts +63 -0
  68. package/recipes/payments/apps/native/src/features/payments/index.ts +8 -0
  69. package/recipes/payments/apps/native/src/features/payments/services/revenuecat-adapter.ts +407 -0
  70. package/recipes/payments/recipe.json +58 -0
  71. package/recipes/payments@latest.zip +0 -0
  72. package/src/__tests__/integration.test.ts +249 -0
  73. package/src/__tests__/recipes.test.ts +168 -0
  74. package/src/commands/__tests__/init.test.ts +112 -0
  75. package/src/commands/__tests__/platform.test.ts +141 -0
  76. package/src/commands/add.ts +9 -5
  77. package/src/core/journal.ts +42 -25
  78. package/src/core/recipes.ts +12 -42
@@ -1 +1 @@
1
- {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/core/journal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/core/journal.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export declare const RECIPES: RecipeInfo[];
17
17
  */
18
18
  export declare function getRecipesByCategory(category: RecipeCategory): RecipeInfo[];
19
19
  /**
20
- * Get all categories
20
+ * Get all categories that have recipes
21
21
  */
22
22
  export declare function getCategories(): RecipeCategory[];
23
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,UAAU,EAoG/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,EAAE,CAE3E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAS/D"}
1
+ {"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,UAAU,EAoE/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,EAAE,CAE3E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAIhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAS/D"}
@@ -60,48 +60,17 @@ export const RECIPES = [
60
60
  description: 'Wake word detection with Vosk',
61
61
  icon: '🎙️',
62
62
  },
63
- // Advanced UI Components
64
63
  {
65
- name: 'glowing-button',
66
- category: 'advanced-ui',
67
- description: 'Animated glowing button with shimmer effect',
68
- icon: '',
69
- },
70
- {
71
- name: 'animated-switch',
72
- category: 'advanced-ui',
73
- description: 'Smooth animated toggle switch',
74
- icon: '🎚️',
75
- },
76
- {
77
- name: 'animated-chip',
78
- category: 'advanced-ui',
79
- description: 'Animated chip/tag component with press effects',
80
- icon: '🏷️',
81
- },
82
- {
83
- name: 'number-stepper',
84
- category: 'advanced-ui',
85
- description: 'Number input with +/- buttons',
86
- icon: '🔢',
87
- },
88
- {
89
- name: 'progress-circle',
90
- category: 'advanced-ui',
91
- description: 'Circular progress indicator with animation',
92
- icon: '⭕',
93
- },
94
- {
95
- name: 'swipe-slider',
96
- category: 'advanced-ui',
97
- description: 'Interactive swipe-to-confirm slider',
98
- icon: '👆',
64
+ name: 'ios-widget',
65
+ category: 'feature',
66
+ description: 'iOS Home Screen widgets with Live Activities',
67
+ icon: '📱',
99
68
  },
100
69
  {
101
- name: 'timeline',
102
- category: 'advanced-ui',
103
- description: 'Activity timeline view for feeds',
104
- icon: '📅',
70
+ name: 'payments',
71
+ category: 'feature',
72
+ description: 'In-app purchases and subscriptions with RevenueCat',
73
+ icon: '💳',
105
74
  },
106
75
  ];
107
76
  /**
@@ -111,10 +80,12 @@ export function getRecipesByCategory(category) {
111
80
  return RECIPES.filter((r) => r.category === category);
112
81
  }
113
82
  /**
114
- * Get all categories
83
+ * Get all categories that have recipes
115
84
  */
116
85
  export function getCategories() {
117
- return ['feature', 'advanced-ui'];
86
+ const categories = new Set();
87
+ RECIPES.forEach(r => categories.add(r.category));
88
+ return Array.from(categories);
118
89
  }
119
90
  /**
120
91
  * Get recipe info by name
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAiB;IACnC,WAAW;IACX;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,KAAK;KACZ;IACD;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,KAAK;KACZ;IAED,yBAAyB;IACzB;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,6CAA6C;QAC1D,IAAI,EAAE,GAAG;KACV;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,KAAK;KACZ;IACD;QACE,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,KAAK;KACZ;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,GAAG;KACV;IACD;QACE,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,qCAAqC;QAClD,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,IAAI;KACX;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAwB;IAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAwB;IACrD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC;QACpB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,aAAa;YAChB,OAAO,cAAc,CAAC;IAC1B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/core/recipes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAiB;IACnC,WAAW;IACX;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,gDAAgD;QAC7D,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,KAAK;KACZ;IACD;QACE,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,KAAK;KACZ;IACD;QACE,IAAI,EAAE,YAAY;QAClB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,8CAA8C;QAC3D,IAAI,EAAE,IAAI;KACX;IACD;QACE,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,oDAAoD;QACjE,IAAI,EAAE,IAAI;KACX;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAwB;IAC3D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAwB;IACrD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC;QACpB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,aAAa;YAChB,OAAO,cAAc,CAAC;IAC1B,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibefast-cli",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "CLI for installing VibeFast features into your monorepo",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "ios-widget",
3
+ "version": "1.0.0",
4
+ "description": "iOS Home Screen widgets with Live Activities",
5
+ "category": "feature",
6
+ "icon": "📱",
7
+ "complexity": "medium",
8
+ "platforms": ["native"],
9
+ "files": [
10
+ {
11
+ "source": "targets/widget/AppIntent.swift",
12
+ "destination": "apps/native/targets/widget/AppIntent.swift"
13
+ },
14
+ {
15
+ "source": "targets/widget/CalorieTrackerWidget.swift",
16
+ "destination": "apps/native/targets/widget/CalorieTrackerWidget.swift"
17
+ },
18
+ {
19
+ "source": "targets/widget/expo-target.config.js",
20
+ "destination": "apps/native/targets/widget/expo-target.config.js"
21
+ },
22
+ {
23
+ "source": "targets/widget/generated.entitlements",
24
+ "destination": "apps/native/targets/widget/generated.entitlements"
25
+ },
26
+ {
27
+ "source": "targets/widget/HabitTrackerWidget.swift",
28
+ "destination": "apps/native/targets/widget/HabitTrackerWidget.swift"
29
+ },
30
+ {
31
+ "source": "targets/widget/index.swift",
32
+ "destination": "apps/native/targets/widget/index.swift"
33
+ },
34
+ {
35
+ "source": "targets/widget/Info.plist",
36
+ "destination": "apps/native/targets/widget/Info.plist"
37
+ },
38
+ {
39
+ "source": "targets/widget/WidgetLiveActivity.swift",
40
+ "destination": "apps/native/targets/widget/WidgetLiveActivity.swift"
41
+ },
42
+ {
43
+ "source": "targets/widget/widgets.swift",
44
+ "destination": "apps/native/targets/widget/widgets.swift"
45
+ },
46
+ {
47
+ "source": "targets/widget/Assets.xcassets",
48
+ "destination": "apps/native/targets/widget/Assets.xcassets",
49
+ "type": "directory"
50
+ }
51
+ ],
52
+ "dependencies": {
53
+ "npm": ["@bacons/apple-targets"],
54
+ "expo": []
55
+ },
56
+ "manualSteps": [
57
+ {
58
+ "title": "Configure Widget Plugin",
59
+ "description": "Add the @bacons/apple-targets plugin to your app.config.ts",
60
+ "file": "apps/native/app.config.ts",
61
+ "content": "[\n '@bacons/apple-targets',\n {\n targets: [\n {\n name: 'VibeFastWidget',\n type: 'widget',\n bundleIdentifier: `${Env.BUNDLE_ID}.widget`,\n entitlements: {\n 'com.apple.security.application-groups': [\n 'group.com.vibefast.vibefast',\n ],\n },\n },\n ],\n },\n]"
62
+ },
63
+ {
64
+ "title": "Configure App Groups",
65
+ "description": "Ensure your main app has App Groups entitlements in app.config.ts",
66
+ "file": "apps/native/app.config.ts",
67
+ "content": "ios: {\n entitlements: {\n 'com.apple.security.application-groups': ['group.com.vibefast.shared'],\n },\n}"
68
+ }
69
+ ],
70
+ "postInstall": {
71
+ "instructions": [
72
+ "Widget target files have been added",
73
+ "Run 'npx expo prebuild --clean' to regenerate native projects",
74
+ "Build and run on iOS to see the widgets",
75
+ "Long-press on home screen > Add Widget > Select your app"
76
+ ]
77
+ }
78
+ }
@@ -0,0 +1,46 @@
1
+ import WidgetKit
2
+ import AppIntents
3
+
4
+ @available(iOSApplicationExtension 17.0, *)
5
+ struct CalorieWidgetConfigurationIntent: WidgetConfigurationIntent {
6
+ static var title: LocalizedStringResource { "Widget Configuration" }
7
+ static var description: IntentDescription { "Configure how your nutrition data is displayed in the widget." }
8
+
9
+ @available(iOSApplicationExtension 17.0, *)
10
+ @Parameter(title: "Display Mode", default: .fullMacros)
11
+ var displayMode: DisplayMode
12
+
13
+ @available(iOSApplicationExtension 17.0, *)
14
+ @Parameter(title: "Show Progress Ring", default: true)
15
+ var showProgressRing: Bool
16
+ }
17
+
18
+ // Simple App Intent for the basic widget
19
+ @available(iOSApplicationExtension 17.0, *)
20
+ struct ConfigurationAppIntent: WidgetConfigurationIntent {
21
+ static var title: LocalizedStringResource { "Configuration" }
22
+ static var description: IntentDescription { "Configure the widget display." }
23
+
24
+ @available(iOSApplicationExtension 17.0, *)
25
+ @Parameter(title: "Favorite Emoji", default: "😀")
26
+ var favoriteEmoji: String
27
+ }
28
+
29
+ @available(iOSApplicationExtension 17.0, *)
30
+ enum DisplayMode: String, AppEnum {
31
+ case caloriesOnly = "calories_only"
32
+ case fullMacros = "full_macros"
33
+ case progressEmphasis = "progress_emphasis"
34
+
35
+ static var typeDisplayRepresentation: TypeDisplayRepresentation {
36
+ TypeDisplayRepresentation(name: "Display Mode")
37
+ }
38
+
39
+ static var caseDisplayRepresentations: [DisplayMode: DisplayRepresentation] {
40
+ [
41
+ .caloriesOnly: DisplayRepresentation(title: "Calories Only", subtitle: "Show only calorie information"),
42
+ .fullMacros: DisplayRepresentation(title: "Full Macros", subtitle: "Show calories and macronutrients"),
43
+ .progressEmphasis: DisplayRepresentation(title: "Progress Focus", subtitle: "Emphasize progress and goals")
44
+ ]
45
+ }
46
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "images": [
3
+ {
4
+ "idiom": "iphone",
5
+ "size": "20x20",
6
+ "scale": "2x",
7
+ "filename": "App-Icon-20x20@2x.png"
8
+ },
9
+ {
10
+ "idiom": "iphone",
11
+ "size": "20x20",
12
+ "scale": "3x",
13
+ "filename": "App-Icon-20x20@3x.png"
14
+ },
15
+ {
16
+ "idiom": "iphone",
17
+ "size": "29x29",
18
+ "scale": "1x",
19
+ "filename": "App-Icon-29x29@1x.png"
20
+ },
21
+ {
22
+ "idiom": "iphone",
23
+ "size": "29x29",
24
+ "scale": "2x",
25
+ "filename": "App-Icon-29x29@2x.png"
26
+ },
27
+ {
28
+ "idiom": "iphone",
29
+ "size": "29x29",
30
+ "scale": "3x",
31
+ "filename": "App-Icon-29x29@3x.png"
32
+ },
33
+ {
34
+ "idiom": "iphone",
35
+ "size": "40x40",
36
+ "scale": "2x",
37
+ "filename": "App-Icon-40x40@2x.png"
38
+ },
39
+ {
40
+ "idiom": "iphone",
41
+ "size": "40x40",
42
+ "scale": "3x",
43
+ "filename": "App-Icon-40x40@3x.png"
44
+ },
45
+ {
46
+ "idiom": "iphone",
47
+ "size": "60x60",
48
+ "scale": "2x",
49
+ "filename": "App-Icon-60x60@2x.png"
50
+ },
51
+ {
52
+ "idiom": "iphone",
53
+ "size": "60x60",
54
+ "scale": "3x",
55
+ "filename": "App-Icon-60x60@3x.png"
56
+ },
57
+ {
58
+ "idiom": "ipad",
59
+ "size": "20x20",
60
+ "scale": "1x",
61
+ "filename": "App-Icon-20x20@1x.png"
62
+ },
63
+ {
64
+ "idiom": "ipad",
65
+ "size": "20x20",
66
+ "scale": "2x",
67
+ "filename": "App-Icon-20x20@2x.png"
68
+ },
69
+ {
70
+ "idiom": "ipad",
71
+ "size": "29x29",
72
+ "scale": "1x",
73
+ "filename": "App-Icon-29x29@1x.png"
74
+ },
75
+ {
76
+ "idiom": "ipad",
77
+ "size": "29x29",
78
+ "scale": "2x",
79
+ "filename": "App-Icon-29x29@2x.png"
80
+ },
81
+ {
82
+ "idiom": "ipad",
83
+ "size": "40x40",
84
+ "scale": "1x",
85
+ "filename": "App-Icon-40x40@1x.png"
86
+ },
87
+ {
88
+ "idiom": "ipad",
89
+ "size": "40x40",
90
+ "scale": "2x",
91
+ "filename": "App-Icon-40x40@2x.png"
92
+ },
93
+ {
94
+ "idiom": "ipad",
95
+ "size": "76x76",
96
+ "scale": "1x",
97
+ "filename": "App-Icon-76x76@1x.png"
98
+ },
99
+ {
100
+ "idiom": "ipad",
101
+ "size": "76x76",
102
+ "scale": "2x",
103
+ "filename": "App-Icon-76x76@2x.png"
104
+ },
105
+ {
106
+ "idiom": "ipad",
107
+ "size": "83.5x83.5",
108
+ "scale": "2x",
109
+ "filename": "App-Icon-83.5x83.5@2x.png"
110
+ },
111
+ {
112
+ "idiom": "ios-marketing",
113
+ "size": "1024x1024",
114
+ "scale": "1x",
115
+ "filename": "ItunesArtwork@2x.png"
116
+ }
117
+ ],
118
+ "info": {
119
+ "version": 1,
120
+ "author": "expo"
121
+ }
122
+ }