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.
- package/FEATURE-DEPENDENCY-SPEC.md +338 -0
- package/dist/__tests__/integration.test.d.ts +2 -0
- package/dist/__tests__/integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration.test.js +219 -0
- package/dist/__tests__/integration.test.js.map +1 -0
- package/dist/__tests__/recipes.test.d.ts +2 -0
- package/dist/__tests__/recipes.test.d.ts.map +1 -0
- package/dist/__tests__/recipes.test.js +143 -0
- package/dist/__tests__/recipes.test.js.map +1 -0
- package/dist/commands/__tests__/init.test.d.ts +2 -0
- package/dist/commands/__tests__/init.test.d.ts.map +1 -0
- package/dist/commands/__tests__/init.test.js +95 -0
- package/dist/commands/__tests__/init.test.js.map +1 -0
- package/dist/commands/__tests__/platform.test.d.ts +2 -0
- package/dist/commands/__tests__/platform.test.d.ts.map +1 -0
- package/dist/commands/__tests__/platform.test.js +123 -0
- package/dist/commands/__tests__/platform.test.js.map +1 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +8 -5
- package/dist/commands/add.js.map +1 -1
- package/dist/core/journal.d.ts.map +1 -1
- package/dist/core/journal.js +36 -19
- package/dist/core/journal.js.map +1 -1
- package/dist/core/recipes.d.ts +1 -1
- package/dist/core/recipes.d.ts.map +1 -1
- package/dist/core/recipes.js +12 -41
- package/dist/core/recipes.js.map +1 -1
- package/package.json +1 -1
- package/recipes/ios-widget/recipe.json +78 -0
- package/recipes/ios-widget/targets/widget/AppIntent.swift +46 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/Contents.json +122 -0
- package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
- package/recipes/ios-widget/targets/widget/CalorieTrackerWidget.swift +424 -0
- package/recipes/ios-widget/targets/widget/HabitTrackerWidget.swift +305 -0
- package/recipes/ios-widget/targets/widget/Info.plist +11 -0
- package/recipes/ios-widget/targets/widget/WidgetLiveActivity.swift +75 -0
- package/recipes/ios-widget/targets/widget/expo-target.config.js +10 -0
- package/recipes/ios-widget/targets/widget/generated.entitlements +5 -0
- package/recipes/ios-widget/targets/widget/index.swift +18 -0
- package/recipes/ios-widget/targets/widget/widgets.swift +96 -0
- package/recipes/ios-widget@latest.zip +0 -0
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/index.tsx +74 -0
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/local.tsx +25 -0
- package/recipes/payments/apps/native/src/app/(root)/(protected)/paywall/remote.tsx +23 -0
- package/recipes/payments/apps/native/src/features/payments/README.md +200 -0
- package/recipes/payments/apps/native/src/features/payments/app/local-paywall.tsx +194 -0
- package/recipes/payments/apps/native/src/features/payments/app/remote-paywall.tsx +79 -0
- package/recipes/payments/apps/native/src/features/payments/components/payment-initializer.tsx +95 -0
- package/recipes/payments/apps/native/src/features/payments/components/paywall-error-state.tsx +60 -0
- package/recipes/payments/apps/native/src/features/payments/components/paywall-local-mode.tsx +116 -0
- package/recipes/payments/apps/native/src/features/payments/components/paywall-product-card.tsx +133 -0
- package/recipes/payments/apps/native/src/features/payments/components/paywall-remote-mode.tsx +146 -0
- package/recipes/payments/apps/native/src/features/payments/hooks/use-entitlement.ts +63 -0
- package/recipes/payments/apps/native/src/features/payments/index.ts +8 -0
- package/recipes/payments/apps/native/src/features/payments/services/revenuecat-adapter.ts +407 -0
- package/recipes/payments/recipe.json +58 -0
- package/recipes/payments@latest.zip +0 -0
- package/src/__tests__/integration.test.ts +249 -0
- package/src/__tests__/recipes.test.ts +168 -0
- package/src/commands/__tests__/init.test.ts +112 -0
- package/src/commands/__tests__/platform.test.ts +141 -0
- package/src/commands/add.ts +9 -5
- package/src/core/journal.ts +42 -25
- package/src/core/recipes.ts +12 -42
package/dist/core/journal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/core/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA0BrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/core/journal.ts"],"names":[],"mappings":"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"}
|
package/dist/core/recipes.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/core/recipes.js
CHANGED
|
@@ -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: '
|
|
66
|
-
category: '
|
|
67
|
-
description: '
|
|
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: '
|
|
102
|
-
category: '
|
|
103
|
-
description: '
|
|
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
|
-
|
|
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
|
package/dist/core/recipes.js.map
CHANGED
|
@@ -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;
|
|
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
|
@@ -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
|
+
}
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png
ADDED
|
Binary file
|
package/recipes/ios-widget/targets/widget/Assets.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png
ADDED
|
Binary file
|
|
Binary file
|
|
@@ -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
|
+
}
|