expo-bbase 1.3.3 → 1.3.5
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/README.md +53 -22
- package/dist/index.js +146 -150
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -77,7 +77,7 @@ var networkModule = {
|
|
|
77
77
|
devDependencies: {},
|
|
78
78
|
files: [
|
|
79
79
|
{
|
|
80
|
-
path: "
|
|
80
|
+
path: "api/client.ts",
|
|
81
81
|
content: lines(
|
|
82
82
|
'import { Alert } from "react-native";',
|
|
83
83
|
"",
|
|
@@ -249,7 +249,7 @@ var networkModule = {
|
|
|
249
249
|
)
|
|
250
250
|
},
|
|
251
251
|
{
|
|
252
|
-
path: "
|
|
252
|
+
path: "api/interceptors.ts",
|
|
253
253
|
content: lines(
|
|
254
254
|
'import type { RequestConfig } from "./client";',
|
|
255
255
|
'import { apiClient } from "./client";',
|
|
@@ -297,7 +297,7 @@ var networkModule = {
|
|
|
297
297
|
)
|
|
298
298
|
},
|
|
299
299
|
{
|
|
300
|
-
path: "
|
|
300
|
+
path: "api/types.ts",
|
|
301
301
|
content: lines(
|
|
302
302
|
"/** Common API response types */",
|
|
303
303
|
"",
|
|
@@ -343,7 +343,7 @@ var networkModule = {
|
|
|
343
343
|
)
|
|
344
344
|
},
|
|
345
345
|
{
|
|
346
|
-
path: "
|
|
346
|
+
path: "api/queries.ts",
|
|
347
347
|
content: lines(
|
|
348
348
|
'import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";',
|
|
349
349
|
'import { apiClient, handleApiError } from "./client";',
|
|
@@ -426,11 +426,11 @@ var stateModule = {
|
|
|
426
426
|
devDependencies: {},
|
|
427
427
|
files: [
|
|
428
428
|
{
|
|
429
|
-
path: "
|
|
429
|
+
path: "stores/index.ts",
|
|
430
430
|
content: lines('export { useUserStore } from "./slices/userSlice";')
|
|
431
431
|
},
|
|
432
432
|
{
|
|
433
|
-
path: "
|
|
433
|
+
path: "stores/slices/userSlice.ts",
|
|
434
434
|
content: lines(
|
|
435
435
|
'import { create } from "zustand";',
|
|
436
436
|
'import { persist, createJSONStorage } from "zustand/middleware";',
|
|
@@ -536,7 +536,7 @@ var storageModule = {
|
|
|
536
536
|
devDependencies: {},
|
|
537
537
|
files: [
|
|
538
538
|
{
|
|
539
|
-
path: "
|
|
539
|
+
path: "storage/index.ts",
|
|
540
540
|
content: lines(
|
|
541
541
|
'import { MMKV } from "react-native-mmkv";',
|
|
542
542
|
"",
|
|
@@ -637,14 +637,14 @@ var paymentModule = {
|
|
|
637
637
|
devDependencies: {},
|
|
638
638
|
files: [
|
|
639
639
|
{
|
|
640
|
-
path: "
|
|
640
|
+
path: "modules/payment/index.ts",
|
|
641
641
|
content: lines(
|
|
642
642
|
'export { usePayment } from "./usePayment";',
|
|
643
643
|
'export type { ProductInfo, PurchaseResult, PaymentError } from "./types";'
|
|
644
644
|
)
|
|
645
645
|
},
|
|
646
646
|
{
|
|
647
|
-
path: "
|
|
647
|
+
path: "modules/payment/types.ts",
|
|
648
648
|
content: lines(
|
|
649
649
|
'import type { Product, Purchase } from "react-native-iap";',
|
|
650
650
|
"",
|
|
@@ -675,7 +675,7 @@ var paymentModule = {
|
|
|
675
675
|
)
|
|
676
676
|
},
|
|
677
677
|
{
|
|
678
|
-
path: "
|
|
678
|
+
path: "modules/payment/usePayment.ts",
|
|
679
679
|
content: lines(
|
|
680
680
|
'import { useCallback, useEffect, useRef, useState } from "react";',
|
|
681
681
|
"import {",
|
|
@@ -841,7 +841,7 @@ var formModule = {
|
|
|
841
841
|
devDependencies: {},
|
|
842
842
|
files: [
|
|
843
843
|
{
|
|
844
|
-
path: "
|
|
844
|
+
path: "modules/form/index.ts",
|
|
845
845
|
content: lines(
|
|
846
846
|
'export { useForm } from "react-hook-form";',
|
|
847
847
|
'export { z } from "zod";',
|
|
@@ -850,7 +850,7 @@ var formModule = {
|
|
|
850
850
|
)
|
|
851
851
|
},
|
|
852
852
|
{
|
|
853
|
-
path: "
|
|
853
|
+
path: "modules/form/schemas/auth.ts",
|
|
854
854
|
content: lines(
|
|
855
855
|
'import { z } from "zod";',
|
|
856
856
|
"",
|
|
@@ -929,7 +929,7 @@ var imageModule = {
|
|
|
929
929
|
devDependencies: {},
|
|
930
930
|
files: [
|
|
931
931
|
{
|
|
932
|
-
path: "
|
|
932
|
+
path: "modules/media/CachedImage.tsx",
|
|
933
933
|
content: lines(
|
|
934
934
|
'import React, { useMemo } from "react";',
|
|
935
935
|
'import { Image, type ImageProps } from "expo-image";',
|
|
@@ -1011,7 +1011,7 @@ var videoModule = {
|
|
|
1011
1011
|
devDependencies: {},
|
|
1012
1012
|
files: [
|
|
1013
1013
|
{
|
|
1014
|
-
path: "
|
|
1014
|
+
path: "modules/media/VideoPlayer.tsx",
|
|
1015
1015
|
content: lines(
|
|
1016
1016
|
'import React, { useCallback, useRef, useState } from "react";',
|
|
1017
1017
|
"import {",
|
|
@@ -1127,7 +1127,7 @@ var authGoogleModule = {
|
|
|
1127
1127
|
devDependencies: {},
|
|
1128
1128
|
files: [
|
|
1129
1129
|
{
|
|
1130
|
-
path: "
|
|
1130
|
+
path: "modules/auth/google.ts",
|
|
1131
1131
|
content: lines(
|
|
1132
1132
|
"import {",
|
|
1133
1133
|
" GoogleSignin,",
|
|
@@ -1219,92 +1219,88 @@ var auth_google_default = authGoogleModule;
|
|
|
1219
1219
|
var authFacebookModule = {
|
|
1220
1220
|
id: "auth-facebook",
|
|
1221
1221
|
name: "Facebook \u767B\u5F55",
|
|
1222
|
-
description: "expo-facebook",
|
|
1222
|
+
description: "expo-auth-session + expo-web-browser\uFF08SDK 54 \u4E0D\u518D\u652F\u6301 expo-facebook\uFF09",
|
|
1223
1223
|
defaultChecked: false,
|
|
1224
1224
|
dependencies: {
|
|
1225
|
-
"expo-
|
|
1225
|
+
"expo-auth-session": "~7.0.11",
|
|
1226
|
+
"expo-web-browser": "~15.0.11",
|
|
1227
|
+
"expo-crypto": "~15.0.9"
|
|
1226
1228
|
},
|
|
1227
1229
|
devDependencies: {},
|
|
1228
1230
|
files: [
|
|
1229
1231
|
{
|
|
1230
|
-
path: "
|
|
1232
|
+
path: "modules/auth/facebook.ts",
|
|
1231
1233
|
content: lines(
|
|
1232
|
-
'import
|
|
1234
|
+
'import { responseTypes } from "expo-auth-session";',
|
|
1235
|
+
'import { makeRedirectUri, useAuthRequest, useAutoDiscovery } from "expo-auth-session";',
|
|
1236
|
+
'import * as WebBrowser from "expo-web-browser";',
|
|
1233
1237
|
"",
|
|
1238
|
+
"// Facebook OAuth \u914D\u7F6E",
|
|
1234
1239
|
"export interface FacebookAuthConfig {",
|
|
1235
|
-
"
|
|
1236
|
-
" appName: string;",
|
|
1240
|
+
" clientId: string; // Facebook App ID",
|
|
1237
1241
|
"}",
|
|
1238
1242
|
"",
|
|
1239
|
-
"
|
|
1240
|
-
"
|
|
1241
|
-
"
|
|
1242
|
-
" appName: config.appName,",
|
|
1243
|
-
" });",
|
|
1244
|
-
"}",
|
|
1243
|
+
"// Facebook OAuth \u7AEF\u70B9",
|
|
1244
|
+
'const FACEBOOK_AUTH_ENDPOINT = "https://www.facebook.com/v18.0/dialog/oauth";',
|
|
1245
|
+
'const FACEBOOK_TOKEN_ENDPOINT = "https://graph.facebook.com/v18.0/oauth/access_token";',
|
|
1245
1246
|
"",
|
|
1246
|
-
"
|
|
1247
|
-
"
|
|
1248
|
-
" userId: string | null;",
|
|
1249
|
-
" userName: string | null;",
|
|
1250
|
-
" error: string | null;",
|
|
1251
|
-
"}> {",
|
|
1252
|
-
" try {",
|
|
1253
|
-
" const result = await Facebook.logInWithReadPermissionsAsync({",
|
|
1254
|
-
' permissions: ["public_profile", "email"],',
|
|
1255
|
-
" });",
|
|
1247
|
+
"// \u786E\u4FDD WebBrowser \u56DE\u8C03\u5B8C\u6210\u65F6\u5173\u95ED",
|
|
1248
|
+
"WebBrowser.maybeCompleteAuthSession();",
|
|
1256
1249
|
"",
|
|
1257
|
-
|
|
1258
|
-
"
|
|
1259
|
-
"
|
|
1260
|
-
"
|
|
1261
|
-
"
|
|
1250
|
+
"/**",
|
|
1251
|
+
" * \u4F7F\u7528 expo-auth-session \u5B9E\u73B0 Facebook \u767B\u5F55",
|
|
1252
|
+
" *",
|
|
1253
|
+
" * \u7528\u6CD5\uFF1A",
|
|
1254
|
+
" * 1. \u5728 Facebook Developer Console \u521B\u5EFA\u5E94\u7528\uFF0C\u83B7\u53D6 App ID",
|
|
1255
|
+
" * 2. \u914D\u7F6E OAuth \u91CD\u5B9A\u5411 URI",
|
|
1256
|
+
" * 3. \u5728\u7EC4\u4EF6\u4E2D\u4F7F\u7528 useFacebookAuth hook",
|
|
1257
|
+
" *",
|
|
1258
|
+
" * \u6CE8\u610F\uFF1ASDK 54 \u4E0D\u518D\u652F\u6301 expo-facebook\uFF0C\u6539\u7528 expo-auth-session",
|
|
1259
|
+
" */",
|
|
1262
1260
|
"",
|
|
1263
|
-
"
|
|
1264
|
-
"
|
|
1265
|
-
"
|
|
1266
|
-
"
|
|
1267
|
-
"
|
|
1268
|
-
"
|
|
1269
|
-
"
|
|
1270
|
-
"
|
|
1271
|
-
"
|
|
1272
|
-
"
|
|
1273
|
-
"
|
|
1274
|
-
|
|
1275
|
-
"
|
|
1261
|
+
"export function useFacebookAuth(config: FacebookAuthConfig) {",
|
|
1262
|
+
" const redirectUri = makeRedirectUri({",
|
|
1263
|
+
" scheme: 'your-app-scheme', // \u66FF\u6362\u4E3A\u4F60\u7684 app scheme",
|
|
1264
|
+
" });",
|
|
1265
|
+
"",
|
|
1266
|
+
" const [request, response, promptAsync] = useAuthRequest(",
|
|
1267
|
+
" {",
|
|
1268
|
+
" clientId: config.clientId,",
|
|
1269
|
+
" scopes: ['public_profile', 'email'],",
|
|
1270
|
+
" redirectUri,",
|
|
1271
|
+
" },",
|
|
1272
|
+
" {",
|
|
1273
|
+
" authorizationEndpoint: FACEBOOK_AUTH_ENDPOINT,",
|
|
1274
|
+
" tokenEndpoint: FACEBOOK_TOKEN_ENDPOINT,",
|
|
1276
1275
|
" }",
|
|
1277
|
-
"
|
|
1278
|
-
|
|
1279
|
-
"
|
|
1280
|
-
" token: null,",
|
|
1281
|
-
" userId: null,",
|
|
1282
|
-
" userName: null,",
|
|
1283
|
-
' error: "Facebook \u767B\u5F55\u5931\u8D25",',
|
|
1284
|
-
" };",
|
|
1285
|
-
" }",
|
|
1276
|
+
" );",
|
|
1277
|
+
"",
|
|
1278
|
+
" return { request, response, promptAsync };",
|
|
1286
1279
|
"}",
|
|
1287
1280
|
"",
|
|
1288
|
-
"
|
|
1289
|
-
"
|
|
1290
|
-
"
|
|
1291
|
-
"
|
|
1292
|
-
|
|
1293
|
-
"
|
|
1281
|
+
"/**",
|
|
1282
|
+
" * \u4ECE Facebook OAuth \u54CD\u5E94\u4E2D\u63D0\u53D6\u7528\u6237\u4FE1\u606F",
|
|
1283
|
+
" */",
|
|
1284
|
+
"export async function getFacebookUserInfo(accessToken: string): Promise<{",
|
|
1285
|
+
" userId: string;",
|
|
1286
|
+
" userName: string;",
|
|
1287
|
+
" email: string | null;",
|
|
1288
|
+
"}> {",
|
|
1289
|
+
" const response = await fetch(",
|
|
1290
|
+
" `https://graph.facebook.com/me?access_token=${accessToken}&fields=id,name,email`",
|
|
1291
|
+
" );",
|
|
1292
|
+
" const userData = await response.json();",
|
|
1293
|
+
"",
|
|
1294
|
+
" return {",
|
|
1295
|
+
" userId: userData.id,",
|
|
1296
|
+
" userName: userData.name,",
|
|
1297
|
+
" email: userData.email ?? null,",
|
|
1298
|
+
" };",
|
|
1294
1299
|
"}"
|
|
1295
1300
|
)
|
|
1296
1301
|
}
|
|
1297
1302
|
],
|
|
1298
|
-
appConfig: {
|
|
1299
|
-
plugins: [
|
|
1300
|
-
[
|
|
1301
|
-
"expo-facebook",
|
|
1302
|
-
{
|
|
1303
|
-
appId: "YOUR_FACEBOOK_APP_ID"
|
|
1304
|
-
}
|
|
1305
|
-
]
|
|
1306
|
-
]
|
|
1307
|
-
}
|
|
1303
|
+
appConfig: {}
|
|
1308
1304
|
};
|
|
1309
1305
|
var auth_facebook_default = authFacebookModule;
|
|
1310
1306
|
|
|
@@ -1320,7 +1316,7 @@ var authAppleModule = {
|
|
|
1320
1316
|
devDependencies: {},
|
|
1321
1317
|
files: [
|
|
1322
1318
|
{
|
|
1323
|
-
path: "
|
|
1319
|
+
path: "modules/auth/apple.ts",
|
|
1324
1320
|
content: lines(
|
|
1325
1321
|
'import * as AppleAuthentication from "expo-apple-authentication";',
|
|
1326
1322
|
'import { Platform } from "react-native";',
|
|
@@ -1415,7 +1411,7 @@ var webviewModule = {
|
|
|
1415
1411
|
devDependencies: {},
|
|
1416
1412
|
files: [
|
|
1417
1413
|
{
|
|
1418
|
-
path: "
|
|
1414
|
+
path: "modules/webview/WebViewContainer.tsx",
|
|
1419
1415
|
content: lines(
|
|
1420
1416
|
'import React, { useCallback, useRef } from "react";',
|
|
1421
1417
|
'import { View, StyleSheet, ActivityIndicator } from "react-native";',
|
|
@@ -1523,7 +1519,7 @@ var webviewModule = {
|
|
|
1523
1519
|
)
|
|
1524
1520
|
},
|
|
1525
1521
|
{
|
|
1526
|
-
path: "
|
|
1522
|
+
path: "modules/webview/bridge.ts",
|
|
1527
1523
|
content: lines(
|
|
1528
1524
|
"export interface BridgeMessage {",
|
|
1529
1525
|
" type: string;",
|
|
@@ -1593,7 +1589,7 @@ var i18nModule = {
|
|
|
1593
1589
|
devDependencies: {},
|
|
1594
1590
|
files: [
|
|
1595
1591
|
{
|
|
1596
|
-
path: "
|
|
1592
|
+
path: "modules/i18n/index.ts",
|
|
1597
1593
|
content: lines(
|
|
1598
1594
|
'import i18n from "i18next";',
|
|
1599
1595
|
'import { initReactI18next } from "react-i18next";',
|
|
@@ -1628,7 +1624,7 @@ var i18nModule = {
|
|
|
1628
1624
|
)
|
|
1629
1625
|
},
|
|
1630
1626
|
{
|
|
1631
|
-
path: "
|
|
1627
|
+
path: "modules/i18n/locales/en.json",
|
|
1632
1628
|
content: [
|
|
1633
1629
|
"{",
|
|
1634
1630
|
' "common": {',
|
|
@@ -1672,7 +1668,7 @@ var i18nModule = {
|
|
|
1672
1668
|
].join("\n")
|
|
1673
1669
|
},
|
|
1674
1670
|
{
|
|
1675
|
-
path: "
|
|
1671
|
+
path: "modules/i18n/locales/zh.json",
|
|
1676
1672
|
content: [
|
|
1677
1673
|
"{",
|
|
1678
1674
|
' "common": {',
|
|
@@ -1747,13 +1743,13 @@ var animationModule = {
|
|
|
1747
1743
|
`
|
|
1748
1744
|
},
|
|
1749
1745
|
{
|
|
1750
|
-
path: "
|
|
1746
|
+
path: "modules/animation/index.ts",
|
|
1751
1747
|
content: lines(
|
|
1752
1748
|
'export { FadeIn, FadeOut, SlideIn, SlideOut, ScaleIn, ScaleOut } from "./transitions";'
|
|
1753
1749
|
)
|
|
1754
1750
|
},
|
|
1755
1751
|
{
|
|
1756
|
-
path: "
|
|
1752
|
+
path: "modules/animation/transitions.ts",
|
|
1757
1753
|
content: lines(
|
|
1758
1754
|
"import Animated, {",
|
|
1759
1755
|
" FadeIn as ReanimatedFadeIn,",
|
|
@@ -1821,7 +1817,7 @@ var otaModule = {
|
|
|
1821
1817
|
devDependencies: {},
|
|
1822
1818
|
files: [
|
|
1823
1819
|
{
|
|
1824
|
-
path: "
|
|
1820
|
+
path: "modules/ota/useOTAUpdate.ts",
|
|
1825
1821
|
content: lines(
|
|
1826
1822
|
'import { useCallback, useEffect, useState } from "react";',
|
|
1827
1823
|
'import * as Updates from "expo-updates";',
|
|
@@ -1940,14 +1936,14 @@ var notificationModule = {
|
|
|
1940
1936
|
devDependencies: {},
|
|
1941
1937
|
files: [
|
|
1942
1938
|
{
|
|
1943
|
-
path: "
|
|
1939
|
+
path: "modules/notification/index.ts",
|
|
1944
1940
|
content: lines(
|
|
1945
1941
|
'export { InAppNotification, useInAppNotification } from "./InAppNotification";',
|
|
1946
1942
|
'export { setupNotificationHandlers } from "./InAppNotification";'
|
|
1947
1943
|
)
|
|
1948
1944
|
},
|
|
1949
1945
|
{
|
|
1950
|
-
path: "
|
|
1946
|
+
path: "modules/notification/InAppNotification.tsx",
|
|
1951
1947
|
content: lines(
|
|
1952
1948
|
"import React, {",
|
|
1953
1949
|
" createContext,",
|
|
@@ -2169,7 +2165,7 @@ var permissionModule = {
|
|
|
2169
2165
|
devDependencies: {},
|
|
2170
2166
|
files: [
|
|
2171
2167
|
{
|
|
2172
|
-
path: "
|
|
2168
|
+
path: "modules/permission/index.ts",
|
|
2173
2169
|
content: lines(
|
|
2174
2170
|
'import * as ImagePicker from "expo-image-picker";',
|
|
2175
2171
|
'import * as Camera from "expo-camera";',
|
|
@@ -2326,7 +2322,7 @@ var bottomSheetModule = {
|
|
|
2326
2322
|
devDependencies: {},
|
|
2327
2323
|
files: [
|
|
2328
2324
|
{
|
|
2329
|
-
path: "
|
|
2325
|
+
path: "components/AppBottomSheet.tsx",
|
|
2330
2326
|
content: lines(
|
|
2331
2327
|
'import React, { useCallback, useRef } from "react";',
|
|
2332
2328
|
'import { View, Text, StyleSheet } from "react-native";',
|
|
@@ -2435,7 +2431,7 @@ var flashlistModule = {
|
|
|
2435
2431
|
devDependencies: {},
|
|
2436
2432
|
files: [
|
|
2437
2433
|
{
|
|
2438
|
-
path: "
|
|
2434
|
+
path: "components/AppFlashList.tsx",
|
|
2439
2435
|
content: lines(
|
|
2440
2436
|
'import React, { useCallback } from "react";',
|
|
2441
2437
|
'import { View, Text, StyleSheet, type ListRenderItemInfo } from "react-native";',
|
|
@@ -2552,7 +2548,7 @@ var uiReusablesModule = {
|
|
|
2552
2548
|
files: [
|
|
2553
2549
|
// ─── lib/utils.ts ────────────────────────────────────────────────────
|
|
2554
2550
|
{
|
|
2555
|
-
path: "
|
|
2551
|
+
path: "lib/utils.ts",
|
|
2556
2552
|
content: lines(
|
|
2557
2553
|
'import { type ClassValue, clsx } from "clsx";',
|
|
2558
2554
|
'import { twMerge } from "tailwind-merge";',
|
|
@@ -2565,9 +2561,9 @@ var uiReusablesModule = {
|
|
|
2565
2561
|
},
|
|
2566
2562
|
// ─── components/ui/text.tsx ──────────────────────────────────────────
|
|
2567
2563
|
{
|
|
2568
|
-
path: "
|
|
2564
|
+
path: "components/ui/text.tsx",
|
|
2569
2565
|
content: lines(
|
|
2570
|
-
'import { cn } from "@/
|
|
2566
|
+
'import { cn } from "@/lib/utils";',
|
|
2571
2567
|
'import { Slot } from "@rn-primitives/slot";',
|
|
2572
2568
|
'import { cva, type VariantProps } from "class-variance-authority";',
|
|
2573
2569
|
'import * as React from "react";',
|
|
@@ -2665,10 +2661,10 @@ var uiReusablesModule = {
|
|
|
2665
2661
|
},
|
|
2666
2662
|
// ─── components/ui/button.tsx ────────────────────────────────────────
|
|
2667
2663
|
{
|
|
2668
|
-
path: "
|
|
2664
|
+
path: "components/ui/button.tsx",
|
|
2669
2665
|
content: lines(
|
|
2670
|
-
'import { TextClassContext } from "@/
|
|
2671
|
-
'import { cn } from "@/
|
|
2666
|
+
'import { TextClassContext } from "@/components/ui/text";',
|
|
2667
|
+
'import { cn } from "@/lib/utils";',
|
|
2672
2668
|
'import { cva, type VariantProps } from "class-variance-authority";',
|
|
2673
2669
|
'import { Platform, Pressable } from "react-native";',
|
|
2674
2670
|
"",
|
|
@@ -2789,9 +2785,9 @@ var uiReusablesModule = {
|
|
|
2789
2785
|
},
|
|
2790
2786
|
// ─── components/ui/input.tsx ──────────────────────────────────────────
|
|
2791
2787
|
{
|
|
2792
|
-
path: "
|
|
2788
|
+
path: "components/ui/input.tsx",
|
|
2793
2789
|
content: lines(
|
|
2794
|
-
'import { cn } from "@/
|
|
2790
|
+
'import { cn } from "@/lib/utils";',
|
|
2795
2791
|
'import { Platform, TextInput } from "react-native";',
|
|
2796
2792
|
"",
|
|
2797
2793
|
"function Input({",
|
|
@@ -2828,9 +2824,9 @@ var uiReusablesModule = {
|
|
|
2828
2824
|
},
|
|
2829
2825
|
// ─── components/ui/label.tsx ─────────────────────────────────────────
|
|
2830
2826
|
{
|
|
2831
|
-
path: "
|
|
2827
|
+
path: "components/ui/label.tsx",
|
|
2832
2828
|
content: lines(
|
|
2833
|
-
'import { cn } from "@/
|
|
2829
|
+
'import { cn } from "@/lib/utils";',
|
|
2834
2830
|
'import * as LabelPrimitive from "@rn-primitives/label";',
|
|
2835
2831
|
'import { Platform } from "react-native";',
|
|
2836
2832
|
"",
|
|
@@ -2876,10 +2872,10 @@ var uiReusablesModule = {
|
|
|
2876
2872
|
},
|
|
2877
2873
|
// ─── components/ui/card.tsx ──────────────────────────────────────────
|
|
2878
2874
|
{
|
|
2879
|
-
path: "
|
|
2875
|
+
path: "components/ui/card.tsx",
|
|
2880
2876
|
content: lines(
|
|
2881
|
-
'import { Text, TextClassContext } from "@/
|
|
2882
|
-
'import { cn } from "@/
|
|
2877
|
+
'import { Text, TextClassContext } from "@/components/ui/text";',
|
|
2878
|
+
'import { cn } from "@/lib/utils";',
|
|
2883
2879
|
'import { View } from "react-native";',
|
|
2884
2880
|
"",
|
|
2885
2881
|
"function Card({",
|
|
@@ -2957,9 +2953,9 @@ var uiReusablesModule = {
|
|
|
2957
2953
|
},
|
|
2958
2954
|
// ─── components/ui/separator.tsx ──────────────────────────────────────
|
|
2959
2955
|
{
|
|
2960
|
-
path: "
|
|
2956
|
+
path: "components/ui/separator.tsx",
|
|
2961
2957
|
content: lines(
|
|
2962
|
-
'import { cn } from "@/
|
|
2958
|
+
'import { cn } from "@/lib/utils";',
|
|
2963
2959
|
'import * as SeparatorPrimitive from "@rn-primitives/separator";',
|
|
2964
2960
|
"",
|
|
2965
2961
|
"function Separator({",
|
|
@@ -2988,11 +2984,11 @@ var uiReusablesModule = {
|
|
|
2988
2984
|
},
|
|
2989
2985
|
// ─── components/ui/alert-dialog.tsx ──────────────────────────────────
|
|
2990
2986
|
{
|
|
2991
|
-
path: "
|
|
2987
|
+
path: "components/ui/alert-dialog.tsx",
|
|
2992
2988
|
content: lines(
|
|
2993
|
-
'import { buttonTextVariants, buttonVariants } from "@/
|
|
2994
|
-
'import { TextClassContext } from "@/
|
|
2995
|
-
'import { cn } from "@/
|
|
2989
|
+
'import { buttonTextVariants, buttonVariants } from "@/components/ui/button";',
|
|
2990
|
+
'import { TextClassContext } from "@/components/ui/text";',
|
|
2991
|
+
'import { cn } from "@/lib/utils";',
|
|
2996
2992
|
'import * as AlertDialogPrimitive from "@rn-primitives/alert-dialog";',
|
|
2997
2993
|
'import * as React from "react";',
|
|
2998
2994
|
'import { Platform, View, type ViewProps } from "react-native";',
|
|
@@ -3176,7 +3172,7 @@ import * as SplashScreen from "expo-splash-screen";
|
|
|
3176
3172
|
import { useEffect } from "react";
|
|
3177
3173
|
import { useColorScheme } from "react-native";
|
|
3178
3174
|
|
|
3179
|
-
import { Colors } from "@/
|
|
3175
|
+
import { Colors } from "@/constants/Colors";
|
|
3180
3176
|
|
|
3181
3177
|
SplashScreen.preventAutoHideAsync();
|
|
3182
3178
|
|
|
@@ -3213,8 +3209,8 @@ export default function RootLayout() {
|
|
|
3213
3209
|
content: `import { Tabs } from "expo-router";
|
|
3214
3210
|
import { Platform } from "react-native";
|
|
3215
3211
|
|
|
3216
|
-
import { Colors } from "@/
|
|
3217
|
-
import { useColorScheme } from "@/
|
|
3212
|
+
import { Colors } from "@/constants/Colors";
|
|
3213
|
+
import { useColorScheme } from "@/hooks/useColorScheme";
|
|
3218
3214
|
|
|
3219
3215
|
export default function TabLayout() {
|
|
3220
3216
|
const colorScheme = useColorScheme();
|
|
@@ -3258,9 +3254,9 @@ export default function TabLayout() {
|
|
|
3258
3254
|
{
|
|
3259
3255
|
path: "app/(tabs)/index.tsx",
|
|
3260
3256
|
content: `import { Image, StyleSheet, Platform } from "react-native";
|
|
3261
|
-
import { HelloWave } from "@/
|
|
3262
|
-
import { ThemedText } from "@/
|
|
3263
|
-
import { ThemedView } from "@/
|
|
3257
|
+
import { HelloWave } from "@/components/HelloWave";
|
|
3258
|
+
import { ThemedText } from "@/components/Themed";
|
|
3259
|
+
import { ThemedView } from "@/components/Themed";
|
|
3264
3260
|
import { Link } from "expo-router";
|
|
3265
3261
|
|
|
3266
3262
|
export default function HomeScreen() {
|
|
@@ -3316,8 +3312,8 @@ const styles = StyleSheet.create({
|
|
|
3316
3312
|
{
|
|
3317
3313
|
path: "app/(tabs)/explore.tsx",
|
|
3318
3314
|
content: `import { StyleSheet, Image, Platform } from "react-native";
|
|
3319
|
-
import { ThemedText } from "@/
|
|
3320
|
-
import { ThemedView } from "@/
|
|
3315
|
+
import { ThemedText } from "@/components/Themed";
|
|
3316
|
+
import { ThemedView } from "@/components/Themed";
|
|
3321
3317
|
|
|
3322
3318
|
export default function ExploreScreen() {
|
|
3323
3319
|
return (
|
|
@@ -3349,8 +3345,8 @@ const styles = StyleSheet.create({
|
|
|
3349
3345
|
path: "app/+not-found.tsx",
|
|
3350
3346
|
content: `import { Link, Stack } from "expo-router";
|
|
3351
3347
|
import { StyleSheet } from "react-native";
|
|
3352
|
-
import { ThemedText } from "@/
|
|
3353
|
-
import { ThemedView } from "@/
|
|
3348
|
+
import { ThemedText } from "@/components/Themed";
|
|
3349
|
+
import { ThemedView } from "@/components/Themed";
|
|
3354
3350
|
|
|
3355
3351
|
export default function NotFoundScreen() {
|
|
3356
3352
|
return (
|
|
@@ -3382,10 +3378,10 @@ const styles = StyleSheet.create({
|
|
|
3382
3378
|
},
|
|
3383
3379
|
// ─── src/components/Themed.tsx ───────────────────────────────────────
|
|
3384
3380
|
{
|
|
3385
|
-
path: "
|
|
3381
|
+
path: "components/Themed.tsx",
|
|
3386
3382
|
content: `import { Text, type TextProps, View, type ViewProps } from "react-native";
|
|
3387
|
-
import { useColorScheme } from "@/
|
|
3388
|
-
import { Colors } from "@/
|
|
3383
|
+
import { useColorScheme } from "@/hooks/useColorScheme";
|
|
3384
|
+
import { Colors } from "@/constants/Colors";
|
|
3389
3385
|
|
|
3390
3386
|
/** Themed text component that adapts to light/dark mode */
|
|
3391
3387
|
export function ThemedText({
|
|
@@ -3423,7 +3419,7 @@ export function ThemedView({ style, ...rest }: ViewProps) {
|
|
|
3423
3419
|
},
|
|
3424
3420
|
// ─── src/components/HelloWave.tsx ────────────────────────────────────
|
|
3425
3421
|
{
|
|
3426
|
-
path: "
|
|
3422
|
+
path: "components/HelloWave.tsx",
|
|
3427
3423
|
content: `import { useEffect } from "react";
|
|
3428
3424
|
import { Animated, Easing } from "react-native";
|
|
3429
3425
|
import { ThemedText } from "./Themed";
|
|
@@ -3471,7 +3467,7 @@ export function HelloWave() {
|
|
|
3471
3467
|
},
|
|
3472
3468
|
// ─── src/hooks/useColorScheme.ts ─────────────────────────────────────
|
|
3473
3469
|
{
|
|
3474
|
-
path: "
|
|
3470
|
+
path: "hooks/useColorScheme.ts",
|
|
3475
3471
|
content: `import { useColorScheme as useRNColorScheme } from "react-native";
|
|
3476
3472
|
|
|
3477
3473
|
/**
|
|
@@ -3485,7 +3481,7 @@ export function useColorScheme(): "light" | "dark" {
|
|
|
3485
3481
|
},
|
|
3486
3482
|
// ─── src/constants/Colors.ts ─────────────────────────────────────────
|
|
3487
3483
|
{
|
|
3488
|
-
path: "
|
|
3484
|
+
path: "constants/Colors.ts",
|
|
3489
3485
|
content: `/**
|
|
3490
3486
|
* Color tokens for light and dark themes.
|
|
3491
3487
|
* Used by Themed components and navigation theming.
|
|
@@ -3510,7 +3506,7 @@ export const Colors = {
|
|
|
3510
3506
|
},
|
|
3511
3507
|
// ─── src/types/index.ts ─────────────────────────────────────────────
|
|
3512
3508
|
{
|
|
3513
|
-
path: "
|
|
3509
|
+
path: "types/index.ts",
|
|
3514
3510
|
content: `/** Global type definitions */
|
|
3515
3511
|
|
|
3516
3512
|
/** Extend this to declare module-specific types */
|
|
@@ -3769,7 +3765,7 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
3769
3765
|
'import { useEffect } from "react";',
|
|
3770
3766
|
'import { useColorScheme } from "react-native";',
|
|
3771
3767
|
"",
|
|
3772
|
-
'import { Colors } from "@/
|
|
3768
|
+
'import { Colors } from "@/constants/Colors";',
|
|
3773
3769
|
"",
|
|
3774
3770
|
"SplashScreen.preventAutoHideAsync();",
|
|
3775
3771
|
"",
|
|
@@ -3806,7 +3802,7 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
3806
3802
|
{
|
|
3807
3803
|
path: "app/login.tsx",
|
|
3808
3804
|
content: lines(
|
|
3809
|
-
'import { SignInForm } from "@/
|
|
3805
|
+
'import { SignInForm } from "@/components/SignInForm";',
|
|
3810
3806
|
'import { View } from "react-native";',
|
|
3811
3807
|
"",
|
|
3812
3808
|
"export default function LoginScreen() {",
|
|
@@ -3826,8 +3822,8 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
3826
3822
|
'import { Tabs } from "expo-router";',
|
|
3827
3823
|
'import { Platform } from "react-native";',
|
|
3828
3824
|
"",
|
|
3829
|
-
'import { Colors } from "@/
|
|
3830
|
-
'import { useColorScheme } from "@/
|
|
3825
|
+
'import { Colors } from "@/constants/Colors";',
|
|
3826
|
+
'import { useColorScheme } from "@/hooks/useColorScheme";',
|
|
3831
3827
|
"",
|
|
3832
3828
|
"export default function TabLayout() {",
|
|
3833
3829
|
" const colorScheme = useColorScheme();",
|
|
@@ -3879,7 +3875,7 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
3879
3875
|
{
|
|
3880
3876
|
path: "app/(tabs)/home.tsx",
|
|
3881
3877
|
content: lines(
|
|
3882
|
-
'import { Button } from "@/
|
|
3878
|
+
'import { Button } from "@/components/ui/button";',
|
|
3883
3879
|
"import {",
|
|
3884
3880
|
" AlertDialog,",
|
|
3885
3881
|
" AlertDialogAction,",
|
|
@@ -3890,8 +3886,8 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
3890
3886
|
" AlertDialogHeader,",
|
|
3891
3887
|
" AlertDialogTitle,",
|
|
3892
3888
|
" AlertDialogTrigger,",
|
|
3893
|
-
'} from "@/
|
|
3894
|
-
'import { Text } from "@/
|
|
3889
|
+
'} from "@/components/ui/alert-dialog";',
|
|
3890
|
+
'import { Text } from "@/components/ui/text";',
|
|
3895
3891
|
'import { View } from "react-native";',
|
|
3896
3892
|
"",
|
|
3897
3893
|
"export default function HomeScreen() {",
|
|
@@ -3962,8 +3958,8 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
3962
3958
|
{
|
|
3963
3959
|
path: "app/(tabs)/list.tsx",
|
|
3964
3960
|
content: lines(
|
|
3965
|
-
'import { Text } from "@/
|
|
3966
|
-
'import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/
|
|
3961
|
+
'import { Text } from "@/components/ui/text";',
|
|
3962
|
+
'import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";',
|
|
3967
3963
|
'import { View, ScrollView } from "react-native";',
|
|
3968
3964
|
"",
|
|
3969
3965
|
"const ITEMS = Array.from({ length: 20 }, (_, i) => ({",
|
|
@@ -3997,9 +3993,9 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
3997
3993
|
{
|
|
3998
3994
|
path: "app/(tabs)/mine.tsx",
|
|
3999
3995
|
content: lines(
|
|
4000
|
-
'import { Button } from "@/
|
|
4001
|
-
'import { Card, CardContent, CardHeader, CardTitle } from "@/
|
|
4002
|
-
'import { Text } from "@/
|
|
3996
|
+
'import { Button } from "@/components/ui/button";',
|
|
3997
|
+
'import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";',
|
|
3998
|
+
'import { Text } from "@/components/ui/text";',
|
|
4003
3999
|
'import { View } from "react-native";',
|
|
4004
4000
|
'import { router } from "expo-router";',
|
|
4005
4001
|
"",
|
|
@@ -4037,20 +4033,20 @@ function generateLoginTabsTemplates(projectName) {
|
|
|
4037
4033
|
},
|
|
4038
4034
|
// ─── src/components/SignInForm.tsx ───────────────────────────────────
|
|
4039
4035
|
{
|
|
4040
|
-
path: "
|
|
4036
|
+
path: "components/SignInForm.tsx",
|
|
4041
4037
|
content: lines(
|
|
4042
|
-
'import { Button } from "@/
|
|
4038
|
+
'import { Button } from "@/components/ui/button";',
|
|
4043
4039
|
"import {",
|
|
4044
4040
|
" Card,",
|
|
4045
4041
|
" CardContent,",
|
|
4046
4042
|
" CardDescription,",
|
|
4047
4043
|
" CardHeader,",
|
|
4048
4044
|
" CardTitle,",
|
|
4049
|
-
'} from "@/
|
|
4050
|
-
'import { Input } from "@/
|
|
4051
|
-
'import { Label } from "@/
|
|
4052
|
-
'import { Separator } from "@/
|
|
4053
|
-
'import { Text } from "@/
|
|
4045
|
+
'} from "@/components/ui/card";',
|
|
4046
|
+
'import { Input } from "@/components/ui/input";',
|
|
4047
|
+
'import { Label } from "@/components/ui/label";',
|
|
4048
|
+
'import { Separator } from "@/components/ui/separator";',
|
|
4049
|
+
'import { Text } from "@/components/ui/text";',
|
|
4054
4050
|
'import * as React from "react";',
|
|
4055
4051
|
'import { Pressable, type TextInput, View } from "react-native";',
|
|
4056
4052
|
'import { router } from "expo-router";',
|
|
@@ -4215,7 +4211,7 @@ function generateBasePackageJson(projectName) {
|
|
|
4215
4211
|
|
|
4216
4212
|
// src/index.ts
|
|
4217
4213
|
var import_execa = require("execa");
|
|
4218
|
-
var CLI_VERSION = "1.3.
|
|
4214
|
+
var CLI_VERSION = "1.3.5";
|
|
4219
4215
|
var CONFIG_FILE = ".expo-bbase.json";
|
|
4220
4216
|
async function run() {
|
|
4221
4217
|
const program = new import_commander.Command();
|