newcandies 0.1.53 → 0.1.56

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 (89) hide show
  1. package/dist/index.js +4 -7
  2. package/package.json +1 -1
  3. package/templates/boilerplate/subscribed/app-env.js +56 -0
  4. package/templates/boilerplate/subscribed/app-env.ts +19 -0
  5. package/templates/boilerplate/subscribed/app.config.ts +62 -0
  6. package/templates/boilerplate/subscribed/assets/adaptive-icon.png +0 -0
  7. package/templates/boilerplate/subscribed/assets/favicon.png +0 -0
  8. package/templates/boilerplate/subscribed/assets/icon.png +0 -0
  9. package/templates/boilerplate/subscribed/assets/images/empty-categories.png +0 -0
  10. package/templates/boilerplate/subscribed/assets/images/empty-subscriptions.png +0 -0
  11. package/templates/boilerplate/subscribed/assets/images/empty-upcoming-payments.png +0 -0
  12. package/templates/boilerplate/subscribed/assets/images/onboarding-hero.png +0 -0
  13. package/templates/boilerplate/subscribed/assets/subscribed.png +0 -0
  14. package/templates/boilerplate/subscribed/babel.config.js +7 -0
  15. package/templates/boilerplate/subscribed/bun.lock +2247 -0
  16. package/templates/boilerplate/subscribed/eas.json +1 -0
  17. package/templates/boilerplate/subscribed/eslint.config.mjs +111 -0
  18. package/templates/boilerplate/subscribed/global.css +173 -0
  19. package/templates/boilerplate/subscribed/metro.config.js +12 -0
  20. package/templates/boilerplate/subscribed/package.json +85 -0
  21. package/templates/boilerplate/subscribed/plugins/withIosDeploymentTarget.js +38 -0
  22. package/templates/boilerplate/subscribed/src/app/+not-found.tsx +16 -0
  23. package/templates/boilerplate/subscribed/src/app/_layout.tsx +7 -0
  24. package/templates/boilerplate/subscribed/src/app/index.tsx +9 -0
  25. package/templates/boilerplate/subscribed/src/config/theme.ts +54 -0
  26. package/templates/boilerplate/subscribed/src/data/static/index.ts +9 -0
  27. package/templates/boilerplate/subscribed/src/data/static/services.ts +450 -0
  28. package/templates/boilerplate/subscribed/src/data/static/subscription-detail.ts +11 -0
  29. package/templates/boilerplate/subscribed/src/data/static/subscription-stats.ts +37 -0
  30. package/templates/boilerplate/subscribed/src/data/static/subscriptions.ts +328 -0
  31. package/templates/boilerplate/subscribed/src/data/static/user.ts +13 -0
  32. package/templates/boilerplate/subscribed/src/lib/utils.ts +7 -0
  33. package/templates/boilerplate/subscribed/src/types/index.ts +98 -0
  34. package/templates/boilerplate/subscribed/src/types/uniwind.d.ts +10 -0
  35. package/templates/boilerplate/subscribed/tsconfig.json +11 -0
  36. package/templates/boilerplate/subscribed/uniwind-types.d.ts +10 -0
  37. package/templates/mini-boilerplate/fiesta-widgets-mini/app-env.js +58 -0
  38. package/templates/mini-boilerplate/fiesta-widgets-mini/app-env.ts +18 -0
  39. package/templates/mini-boilerplate/fiesta-widgets-mini/app.config.ts +52 -0
  40. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/adaptive-icon.png +0 -0
  41. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/favicon.png +0 -0
  42. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/fiesta-transparent.png +0 -0
  43. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/fiesta.png +0 -0
  44. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/icon.png +0 -0
  45. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/images/empty-categories.png +0 -0
  46. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/images/empty-subscriptions.png +0 -0
  47. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/images/empty-upcoming-payments.png +0 -0
  48. package/templates/mini-boilerplate/fiesta-widgets-mini/assets/images/onboarding-hero.png +0 -0
  49. package/templates/mini-boilerplate/fiesta-widgets-mini/babel.config.js +7 -0
  50. package/templates/mini-boilerplate/fiesta-widgets-mini/eas.json +21 -0
  51. package/templates/mini-boilerplate/fiesta-widgets-mini/eslint.config.mjs +111 -0
  52. package/templates/mini-boilerplate/fiesta-widgets-mini/global.css +60 -0
  53. package/templates/mini-boilerplate/fiesta-widgets-mini/metro.config.js +10 -0
  54. package/templates/mini-boilerplate/fiesta-widgets-mini/package.json +87 -0
  55. package/templates/mini-boilerplate/fiesta-widgets-mini/skia-stub.d.ts +3 -0
  56. package/templates/mini-boilerplate/fiesta-widgets-mini/src/app/(tabs)/_layout.tsx +40 -0
  57. package/templates/mini-boilerplate/fiesta-widgets-mini/src/app/(tabs)/index.tsx +28 -0
  58. package/templates/mini-boilerplate/fiesta-widgets-mini/src/app/(tabs)/widgets.tsx +13 -0
  59. package/templates/mini-boilerplate/fiesta-widgets-mini/src/app/+not-found.tsx +16 -0
  60. package/templates/mini-boilerplate/fiesta-widgets-mini/src/app/_layout.tsx +47 -0
  61. package/templates/mini-boilerplate/fiesta-widgets-mini/src/app/event/[id].tsx +177 -0
  62. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/buttons/back-button.tsx +44 -0
  63. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/buttons/button.tsx +175 -0
  64. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/buttons/icon-button.tsx +33 -0
  65. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/buttons/pressable.tsx +6 -0
  66. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/inputs/input.tsx +43 -0
  67. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/layout/card.tsx +25 -0
  68. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/layout/safe-area-view.tsx +6 -0
  69. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/layout/screen.tsx +23 -0
  70. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/layout/scroll-view.tsx +6 -0
  71. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/layout/squircle.tsx +8 -0
  72. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/layout/view.tsx +6 -0
  73. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/navigation/stack.tsx +18 -0
  74. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/ui/icon-symbol.tsx +131 -0
  75. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/ui/image.tsx +6 -0
  76. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/ui/loading.tsx +35 -0
  77. package/templates/mini-boilerplate/fiesta-widgets-mini/src/components/ui/text.tsx +44 -0
  78. package/templates/mini-boilerplate/fiesta-widgets-mini/src/config/theme.ts +54 -0
  79. package/templates/mini-boilerplate/fiesta-widgets-mini/src/data/fiesta-data.ts +14 -0
  80. package/templates/mini-boilerplate/fiesta-widgets-mini/src/features/home/celebration-card.tsx +84 -0
  81. package/templates/mini-boilerplate/fiesta-widgets-mini/src/features/home/today-hero.tsx +151 -0
  82. package/templates/mini-boilerplate/fiesta-widgets-mini/src/lib/celebrations.ts +167 -0
  83. package/templates/mini-boilerplate/fiesta-widgets-mini/src/lib/theme.ts +29 -0
  84. package/templates/mini-boilerplate/fiesta-widgets-mini/src/lib/utils.ts +7 -0
  85. package/templates/mini-boilerplate/fiesta-widgets-mini/src/types/index.ts +26 -0
  86. package/templates/mini-boilerplate/fiesta-widgets-mini/src/types/uniwind.d.ts +10 -0
  87. package/templates/mini-boilerplate/fiesta-widgets-mini/tsconfig.json +11 -0
  88. package/templates/mini-boilerplate/fiesta-widgets-mini/uniwind-types.d.ts +10 -0
  89. package/templates/registry.json +13 -0
package/dist/index.js CHANGED
@@ -114,11 +114,7 @@ async function main() {
114
114
  install: async () => {
115
115
  return false;
116
116
  },
117
- pm: async ({ results }) => {
118
- const type = results.type;
119
- if (type === "boilerplates" || type === "mini-boilerplates") {
120
- return "pnpm";
121
- }
117
+ pm: async () => {
122
118
  return "bun";
123
119
  }
124
120
  },
@@ -269,12 +265,13 @@ async function main() {
269
265
  }
270
266
  }
271
267
  const runCmd = (cmd) => ` ${project.pm} ${cmd}`;
268
+ const prebuildCmd = project.pm === "bun" ? "bunx expo prebuild --clean" : "pnpx expo prebuild --clean";
272
269
  const nextSteps = [
273
270
  pc.magenta("\u2726 Next steps:"),
274
271
  ` cd ${project.name}`,
275
272
  ` ${project.pm} install`,
276
- runCmd("prebuild --clean"),
277
- runCmd("ios") + ` or ${project.pm} android`
273
+ ` ${prebuildCmd}`,
274
+ runCmd("ios") + " or " + runCmd("android")
278
275
  ];
279
276
  p.outro(nextSteps.filter(Boolean).join("\n") + "\n\n" + pc.dim("Happy coding! \u2362"));
280
277
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "newcandies",
3
- "version": "0.1.53",
3
+ "version": "0.1.56",
4
4
  "description": "Scaffold Expo Router + Uniwind React Native apps with layered templates.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Environment configuration for Subscribed.
3
+ * Supports: local | preview | production
4
+ *
5
+ * @type {'local' | 'preview' | 'production'}
6
+ */
7
+ const APP_ENV = process.env.EXPO_PUBLIC_APP_ENV ?? "local";
8
+
9
+ const { version } = require("./package.json");
10
+
11
+ // Bundle IDs per environment
12
+ const BUNDLE_IDS = {
13
+ local: "com.subscribed.app.local",
14
+ preview: "com.subscribed.app.preview",
15
+ production: "com.subscribed.app",
16
+ };
17
+
18
+ // Android package names per environment
19
+ const PACKAGES = {
20
+ local: "com.subscribed.app.local",
21
+ preview: "com.subscribed.app.preview",
22
+ production: "com.subscribed.app",
23
+ };
24
+
25
+ // URL schemes per environment
26
+ const SCHEMES = {
27
+ local: "subscribed.local",
28
+ preview: "subscribed.preview",
29
+ production: "subscribed",
30
+ };
31
+
32
+ // App names per environment
33
+ const NAMES = {
34
+ local: "Subscribed (Local)",
35
+ preview: "Subscribed (Preview)",
36
+ production: "Subscribed",
37
+ };
38
+
39
+ // API URL per environment
40
+ const API_URLS = {
41
+ local: "https://subscribed-apis.onrender.com",
42
+ preview: "https://subscribed-apis.onrender.com",
43
+ production: "https://subscribed-apis.onrender.com",
44
+ };
45
+
46
+ const Env = {
47
+ APP_ENV,
48
+ NAME: NAMES[APP_ENV],
49
+ SCHEME: SCHEMES[APP_ENV],
50
+ BUNDLE_ID: BUNDLE_IDS[APP_ENV],
51
+ PACKAGE: PACKAGES[APP_ENV],
52
+ VERSION: version,
53
+ API_URL: process.env.EXPO_PUBLIC_API_URL ?? API_URLS[APP_ENV],
54
+ };
55
+
56
+ module.exports = Env;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Type-safe re-export of app-env.js for use in src/ code.
3
+ */
4
+
5
+ export type AppEnv = "local" | "preview" | "production";
6
+
7
+ interface EnvConfig {
8
+ APP_ENV: AppEnv;
9
+ NAME: string;
10
+ SCHEME: string;
11
+ BUNDLE_ID: string;
12
+ PACKAGE: string;
13
+ API_URL: string;
14
+ }
15
+
16
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
17
+ const Env: EnvConfig = require("./app-env.js");
18
+
19
+ export default Env;
@@ -0,0 +1,62 @@
1
+ import type { ConfigContext, ExpoConfig } from "expo/config";
2
+
3
+ const Env = require("./app-env.js");
4
+
5
+ export default ({ config }: ConfigContext): ExpoConfig => ({
6
+ ...config,
7
+ name: Env.NAME,
8
+ slug: "subscribed",
9
+ version: Env.VERSION,
10
+ orientation: "portrait",
11
+ icon: "./assets/icon.png",
12
+ scheme: Env.SCHEME,
13
+ userInterfaceStyle: "automatic",
14
+ ios: {
15
+ supportsTablet: true,
16
+ bundleIdentifier: Env.BUNDLE_ID,
17
+ infoPlist: {
18
+ NSAppTransportSecurity: {
19
+ NSAllowsArbitraryLoads: true,
20
+ NSAllowsLocalNetworking: true,
21
+ },
22
+ ITSAppUsesNonExemptEncryption: false,
23
+ },
24
+ },
25
+ android: {
26
+ adaptiveIcon: {
27
+ foregroundImage: "./assets/adaptive-icon.png",
28
+ backgroundColor: "#ffffff",
29
+ },
30
+ package: Env.PACKAGE,
31
+ },
32
+ web: {
33
+ bundler: "metro",
34
+ output: "static",
35
+ favicon: "./assets/favicon.png",
36
+ },
37
+ plugins: [
38
+ "expo-router",
39
+ "expo-image",
40
+ "expo-font",
41
+ [
42
+ "expo-build-properties",
43
+ {
44
+ ios: { deploymentTarget: "17.0" },
45
+ },
46
+ ],
47
+ // Force iOS 17.0 for all targets (app + Voltra widget extension) so Swift APIs compile
48
+ "./plugins/withIosDeploymentTarget.js",
49
+ ],
50
+ experiments: {
51
+ typedRoutes: true,
52
+ reactCompiler: true,
53
+ },
54
+ extra: {
55
+ APP_ENV: Env.APP_ENV,
56
+ API_URL: Env.API_URL,
57
+ router: {},
58
+ eas: {
59
+ projectId: "your-project-id-here",
60
+ },
61
+ },
62
+ });
@@ -0,0 +1,7 @@
1
+ module.exports = function (api) {
2
+ api.cache(true);
3
+ return {
4
+ presets: ["babel-preset-expo"],
5
+ plugins: ["react-native-reanimated/plugin"],
6
+ };
7
+ };