@mohasinac/appkit 2.7.17 → 2.7.18
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/dist/_internal/server/features/bundles/actions.d.ts +15 -0
- package/dist/_internal/server/features/bundles/actions.js +48 -0
- package/dist/_internal/server/features/bundles/index.d.ts +1 -0
- package/dist/_internal/server/features/bundles/index.js +1 -0
- package/dist/_internal/server/features/checkout/actions.d.ts +4 -0
- package/dist/_internal/server/features/checkout/actions.js +23 -12
- package/dist/_internal/server/features/payments/data.d.ts +5 -3
- package/dist/_internal/server/features/payments/data.js +13 -8
- package/dist/_internal/server/features/payments/index.d.ts +1 -1
- package/dist/_internal/server/features/payments/index.js +1 -1
- package/dist/_internal/shared/features/categories/bundle-config.d.ts +24 -0
- package/dist/_internal/shared/features/categories/bundle-config.js +28 -0
- package/dist/_internal/shared/features/categories/bundle-copy.d.ts +7 -0
- package/dist/_internal/shared/features/categories/bundle-copy.js +9 -0
- package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +69 -19
- package/dist/_internal/shared/features/categories/bundle-schemas.js +20 -2
- package/dist/_internal/shared/features/checkout/config.d.ts +1 -1
- package/dist/_internal/shared/features/checkout/config.js +1 -1
- package/dist/_internal/shared/features/payments/config.d.ts +2 -1
- package/dist/_internal/shared/features/payments/config.js +2 -1
- package/dist/_internal/shared/features/products/schema.d.ts +8 -8
- package/dist/constants/field-names.d.ts +8 -1
- package/dist/constants/field-names.js +9 -2
- package/dist/constants/table-keys.d.ts +3 -0
- package/dist/constants/table-keys.js +3 -0
- package/dist/features/admin/components/AdminSiteSettingsView.js +17 -15
- package/dist/features/admin/components/DashboardStats.js +20 -12
- package/dist/features/admin/components/analytics/AdminAnalyticsCharts.js +18 -2
- package/dist/features/admin/components/analytics/AdminStatCard.d.ts +7 -1
- package/dist/features/admin/components/analytics/AdminStatCard.js +13 -2
- package/dist/features/admin/schemas/firestore.d.ts +18 -4
- package/dist/features/admin/schemas/firestore.js +11 -1
- package/dist/features/categories/components/BundleBuyNowCta.d.ts +3 -1
- package/dist/features/categories/components/BundleBuyNowCta.js +3 -3
- package/dist/features/categories/components/BundleDynamicRuleEditor.d.ts +1 -1
- package/dist/features/categories/components/BundleDynamicRuleEditor.js +2 -1
- package/dist/features/categories/components/BundlesListView.d.ts +4 -1
- package/dist/features/categories/components/BundlesListView.js +2 -2
- package/dist/features/categories/components/CategoryBundlesListing.d.ts +4 -1
- package/dist/features/categories/components/CategoryBundlesListing.js +9 -8
- package/dist/features/categories/schemas/firestore.d.ts +29 -1
- package/dist/features/checkout/actions/checkout-actions.d.ts +11 -0
- package/dist/features/checkout/actions/checkout-actions.js +26 -0
- package/dist/features/filters/FilterFacetSection.d.ts +6 -1
- package/dist/features/filters/FilterFacetSection.js +25 -2
- package/dist/features/homepage/components/FeaturedBundlesSection.d.ts +4 -1
- package/dist/features/homepage/components/FeaturedBundlesSection.js +9 -8
- package/dist/features/orders/actions/refund-actions.js +10 -7
- package/dist/features/orders/schemas/firestore.d.ts +16 -13
- package/dist/features/orders/schemas/firestore.js +6 -5
- package/dist/features/pre-orders/components/MarketplacePreorderCard.js +1 -1
- package/dist/features/pre-orders/components/PreOrdersIndexListing.js +2 -1
- package/dist/features/products/components/AuctionsIndexListing.js +2 -1
- package/dist/features/products/components/ProductDetailPageView.js +3 -1
- package/dist/features/products/components/ProductDetailView.d.ts +3 -1
- package/dist/features/products/components/ProductDetailView.js +2 -2
- package/dist/features/products/components/ProductFilters.d.ts +10 -4
- package/dist/features/products/components/ProductFilters.js +20 -16
- package/dist/features/products/components/ProductGrid.js +2 -2
- package/dist/features/products/components/ProductsIndexListing.js +2 -1
- package/dist/features/products/constants/product-features.constants.js +5 -1
- package/dist/features/products/schemas/index.d.ts +2 -2
- package/dist/features/products/schemas/product-features.d.ts +1 -1
- package/dist/features/products/schemas/product-features.validators.d.ts +10 -10
- package/dist/features/products/schemas/product-features.validators.js +4 -0
- package/dist/features/seller/components/SellerCouponEditorView.js +2 -2
- package/dist/features/seller/components/analytics/SellerAnalyticsStats.js +10 -4
- package/dist/features/stores/components/StoreBundlesPageView.d.ts +4 -1
- package/dist/features/stores/components/StoreBundlesPageView.js +2 -2
- package/dist/features/stores/components/StoresIndexListing.js +2 -1
- package/dist/providers/db-firebase/admin-app-lite.js +8 -2
- package/dist/providers/db-firebase/admin.js +8 -2
- package/dist/seed/addresses-seed-data.js +24 -7
- package/dist/seed/cart-seed-data.d.ts +10 -10
- package/dist/seed/cart-seed-data.js +39 -2
- package/dist/seed/grouped-listings-seed-data.js +47 -0
- package/dist/seed/orders-seed-data.js +150 -0
- package/dist/seed/products-standard-seed-data.js +42 -0
- package/dist/seed/site-settings-seed-data.js +11 -4
- package/dist/seed/users-seed-data.js +1 -1
- package/dist/seed/wishlists-seed-data.js +7 -0
- package/dist/server-entry.d.ts +2 -1
- package/dist/server-entry.js +2 -1
- package/dist/server.d.ts +2 -1
- package/dist/server.js +3 -1
- package/dist/tailwind-utilities.css +1 -1
- package/dist/ui/components/SideDrawer.style.css +49 -11
- package/package.json +1 -1
|
@@ -80,6 +80,7 @@ export function StoresIndexListing({ initialData }) {
|
|
|
80
80
|
setSearchInput("");
|
|
81
81
|
}, [table]);
|
|
82
82
|
const activeFilterCount = FILTER_KEYS.filter((k) => !!table.get(k)).length;
|
|
83
|
+
const pendingFilterCount = FILTER_KEYS.filter((k) => !!pendingFilters[k]).length;
|
|
83
84
|
const hasActiveState = !!table.get(TABLE_KEYS.QUERY) ||
|
|
84
85
|
table.get(TABLE_KEYS.SORT) !== DEFAULT_SORT ||
|
|
85
86
|
activeFilterCount > 0;
|
|
@@ -132,5 +133,5 @@ export function StoresIndexListing({ initialData }) {
|
|
|
132
133
|
}) })) : (_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: stores.map((store) => {
|
|
133
134
|
const storeKey = store.storeSlug ?? store.id;
|
|
134
135
|
return (_jsx(InteractiveStoreCard, { store: store, href: String(ROUTES.PUBLIC.STORE_DETAIL(storeKey)), selectable: selection.isSelecting, isSelected: selection.isSelected(store.id ?? store.storeSlug), onSelect: (id, sel) => { void sel; selection.toggle(id); } }, storeKey));
|
|
135
|
-
}) })) }), filterOpen && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40 bg-black/40", "aria-hidden": "true", onClick: () => setFilterOpen(false) }), _jsxs("div", { className: "fixed inset-y-0 left-0 z-50 flex w-80 flex-col bg-white dark:bg-slate-900 shadow-2xl", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-zinc-200 dark:border-slate-700 px-4 py-3.5", children: [_jsxs("span", { className: "flex items-center gap-2 text-base font-semibold text-zinc-900 dark:text-zinc-100", children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), "Filters"] }), _jsxs("div", { className: "flex items-center gap-2", children: [
|
|
136
|
+
}) })) }), filterOpen && (_jsxs(_Fragment, { children: [_jsx("div", { className: "fixed inset-0 z-40 bg-black/40", "aria-hidden": "true", onClick: () => setFilterOpen(false) }), _jsxs("div", { className: "fixed inset-y-0 left-0 z-50 flex w-80 flex-col bg-white dark:bg-slate-900 shadow-2xl", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-zinc-200 dark:border-slate-700 px-4 py-3.5", children: [_jsxs("span", { className: "flex items-center gap-2 text-base font-semibold text-zinc-900 dark:text-zinc-100", children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), "Filters"] }), _jsxs("div", { className: "flex items-center gap-2", children: [pendingFilterCount > 0 && (_jsx("button", { type: "button", onClick: clearFilters, className: "text-xs text-zinc-500 hover:text-rose-500 dark:text-zinc-400 transition-colors", children: "Clear all" })), _jsx("button", { type: "button", onClick: () => setFilterOpen(false), "aria-label": "Close filters", className: "rounded-lg p-1.5 text-zinc-500 hover:bg-zinc-100 dark:hover:bg-slate-800 transition-colors", children: _jsx(X, { className: "h-5 w-5" }) })] })] }), _jsx("div", { className: "flex-1 overflow-y-auto px-4 py-4", children: _jsx(StoreFilters, { table: pendingTable }) }), _jsx("div", { className: "border-t border-zinc-200 dark:border-slate-700 px-4 py-3.5", children: _jsxs("button", { type: "button", onClick: applyFilters, className: "w-full rounded-lg bg-primary py-2.5 text-sm font-semibold text-white hover:bg-primary-600 transition-colors active:scale-[0.98]", children: ["Apply Filters", pendingFilterCount > 0 ? ` (${pendingFilterCount})` : ""] }) })] })] }))] }));
|
|
136
137
|
}
|
|
@@ -24,12 +24,14 @@ export function getAdminAppLite() {
|
|
|
24
24
|
return existing;
|
|
25
25
|
}
|
|
26
26
|
const keyPath = nodePath().join(nodeCwd(), "firebase-admin-key.json");
|
|
27
|
+
const storageBucket = process.env.FIREBASE_ADMIN_STORAGE_BUCKET?.trim() ??
|
|
28
|
+
process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET?.trim();
|
|
27
29
|
let app;
|
|
28
30
|
if (nodeFs().existsSync(keyPath)) {
|
|
29
31
|
const sa = JSON.parse(nodeFs().readFileSync(keyPath, "utf8"));
|
|
30
32
|
const dbUrl = process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL ??
|
|
31
33
|
`https://${sa.project_id}-default-rtdb.firebaseio.com`;
|
|
32
|
-
app = initializeApp({ credential: cert(keyPath), databaseURL: dbUrl });
|
|
34
|
+
app = initializeApp({ credential: cert(keyPath), databaseURL: dbUrl, ...(storageBucket && { storageBucket }) });
|
|
33
35
|
}
|
|
34
36
|
else if (process.env.FIREBASE_ADMIN_PROJECT_ID &&
|
|
35
37
|
process.env.FIREBASE_ADMIN_CLIENT_EMAIL &&
|
|
@@ -45,6 +47,7 @@ export function getAdminAppLite() {
|
|
|
45
47
|
privateKey: parsePrivateKey(process.env.FIREBASE_ADMIN_PRIVATE_KEY),
|
|
46
48
|
}),
|
|
47
49
|
databaseURL: dbUrl,
|
|
50
|
+
...(storageBucket && { storageBucket }),
|
|
48
51
|
});
|
|
49
52
|
}
|
|
50
53
|
else if (
|
|
@@ -66,7 +69,10 @@ export function getAdminAppLite() {
|
|
|
66
69
|
process.env.FIREBASE_ADMIN_DATABASE_URL ??
|
|
67
70
|
process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL ??
|
|
68
71
|
(projectId ? `https://${projectId}-default-rtdb.firebaseio.com` : undefined);
|
|
69
|
-
app = initializeApp(
|
|
72
|
+
app = initializeApp({
|
|
73
|
+
...(dbUrl && { databaseURL: dbUrl }),
|
|
74
|
+
...(storageBucket && { storageBucket }),
|
|
75
|
+
});
|
|
70
76
|
}
|
|
71
77
|
else {
|
|
72
78
|
throw new Error("@mohasinac/db-firebase: Firebase Admin credentials not found.");
|
|
@@ -67,13 +67,15 @@ export function getAdminApp() {
|
|
|
67
67
|
return existing;
|
|
68
68
|
}
|
|
69
69
|
const keyPath = nodePath().join(nodeCwd(), "firebase-admin-key.json");
|
|
70
|
+
const storageBucket = process.env.FIREBASE_ADMIN_STORAGE_BUCKET?.trim() ??
|
|
71
|
+
process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET?.trim();
|
|
70
72
|
let app;
|
|
71
73
|
try {
|
|
72
74
|
if (nodeFs().existsSync(keyPath)) {
|
|
73
75
|
const sa = JSON.parse(nodeFs().readFileSync(keyPath, "utf8"));
|
|
74
76
|
const dbUrl = process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL ??
|
|
75
77
|
`https://${sa.project_id}-default-rtdb.firebaseio.com`;
|
|
76
|
-
app = initializeApp({ credential: cert(keyPath), databaseURL: dbUrl });
|
|
78
|
+
app = initializeApp({ credential: cert(keyPath), databaseURL: dbUrl, ...(storageBucket && { storageBucket }) });
|
|
77
79
|
}
|
|
78
80
|
else if (process.env.FIREBASE_ADMIN_PROJECT_ID &&
|
|
79
81
|
process.env.FIREBASE_ADMIN_CLIENT_EMAIL &&
|
|
@@ -89,6 +91,7 @@ export function getAdminApp() {
|
|
|
89
91
|
privateKey: parsePrivateKey(process.env.FIREBASE_ADMIN_PRIVATE_KEY),
|
|
90
92
|
}),
|
|
91
93
|
databaseURL: dbUrl,
|
|
94
|
+
...(storageBucket && { storageBucket }),
|
|
92
95
|
});
|
|
93
96
|
}
|
|
94
97
|
else if (
|
|
@@ -112,7 +115,10 @@ export function getAdminApp() {
|
|
|
112
115
|
(projectId
|
|
113
116
|
? `https://${projectId}-default-rtdb.firebaseio.com`
|
|
114
117
|
: undefined);
|
|
115
|
-
app = initializeApp(
|
|
118
|
+
app = initializeApp({
|
|
119
|
+
...(dbUrl && { databaseURL: dbUrl }),
|
|
120
|
+
...(storageBucket && { storageBucket }),
|
|
121
|
+
});
|
|
116
122
|
}
|
|
117
123
|
else {
|
|
118
124
|
throw new Error("@mohasinac/db-firebase: Firebase Admin credentials not found.\n" +
|
|
@@ -197,14 +197,14 @@ export const addressesSeedData = [
|
|
|
197
197
|
updatedAt: daysAgo(739),
|
|
198
198
|
},
|
|
199
199
|
// ============================================
|
|
200
|
-
// Admin User's
|
|
200
|
+
// Admin User's Addresses (user-admin-letitrip)
|
|
201
201
|
// ============================================
|
|
202
202
|
{
|
|
203
203
|
id: "addr-admin-primary-1707400017",
|
|
204
|
-
userId: "user-admin-
|
|
205
|
-
label: "
|
|
206
|
-
fullName: "Admin
|
|
207
|
-
phone: `${_phonePrefix}
|
|
204
|
+
userId: "user-admin-letitrip",
|
|
205
|
+
label: "Office (LetItRip HQ)",
|
|
206
|
+
fullName: "LetItRip Admin",
|
|
207
|
+
phone: `${_phonePrefix}9876500000`,
|
|
208
208
|
addressLine1: "LetItRip HQ, 10th Floor",
|
|
209
209
|
addressLine2: "BKC, G Block",
|
|
210
210
|
city: "Mumbai",
|
|
@@ -212,7 +212,24 @@ export const addressesSeedData = [
|
|
|
212
212
|
postalCode: "400051",
|
|
213
213
|
country: _locale.countryName,
|
|
214
214
|
isDefault: true,
|
|
215
|
-
createdAt: daysAgo(
|
|
216
|
-
updatedAt: daysAgo(
|
|
215
|
+
createdAt: daysAgo(399),
|
|
216
|
+
updatedAt: daysAgo(30),
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: "addr-admin-home-1707400018",
|
|
220
|
+
userId: "user-admin-letitrip",
|
|
221
|
+
label: "Home",
|
|
222
|
+
fullName: "LetItRip Admin",
|
|
223
|
+
phone: `${_phonePrefix}9876500000`,
|
|
224
|
+
addressLine1: "A-1204, Kalpataru Horizon",
|
|
225
|
+
addressLine2: "S.K. Ahire Marg, Worli",
|
|
226
|
+
landmark: "Near Worli Sea Face",
|
|
227
|
+
city: "Mumbai",
|
|
228
|
+
state: "Maharashtra",
|
|
229
|
+
postalCode: "400018",
|
|
230
|
+
country: _locale.countryName,
|
|
231
|
+
isDefault: false,
|
|
232
|
+
createdAt: daysAgo(300),
|
|
233
|
+
updatedAt: daysAgo(30),
|
|
217
234
|
},
|
|
218
235
|
];
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Carts Seed Data
|
|
2
|
+
* Carts Seed Data â€" LetItRip Collectibles
|
|
3
3
|
*
|
|
4
4
|
* Covers all cart states for testing Add-to-Cart / Update / Remove / Checkout flows:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
5
|
+
* â€" Multi-item cart (cross-store, mixed categories) â€" Rahul Sharma
|
|
6
|
+
* â€" Single-item cart â€" Priya Patel
|
|
7
|
+
* â€" Cart with auction item â€" Arjun Singh
|
|
8
|
+
* â€" Cart with quantity > 1 â€" Meera Nair
|
|
9
|
+
* â€" Empty cart (items: []) â€" Amit Sharma
|
|
10
10
|
*
|
|
11
|
-
* Cart document ID = userId (O(1) lookup
|
|
11
|
+
* Cart document ID = userId (O(1) lookup â€" see cart.ts schema).
|
|
12
12
|
*
|
|
13
13
|
* All FK references:
|
|
14
|
-
* userId
|
|
15
|
-
* items[].productId
|
|
16
|
-
* items[].storeId
|
|
14
|
+
* userId â†' users/{uid} (see users-seed-data.ts)
|
|
15
|
+
* items[].productId â†' products/{id} (see products-standard/auctions-seed-data.ts)
|
|
16
|
+
* items[].storeId â†' stores/{id} (see stores-seed-data.ts)
|
|
17
17
|
*/
|
|
18
18
|
import type { CartDocument } from "../features/cart/schemas";
|
|
19
19
|
export declare const cartsSeedData: CartDocument[];
|
|
@@ -166,7 +166,7 @@ export const cartsSeedData = [
|
|
|
166
166
|
createdAt: daysAgo(27),
|
|
167
167
|
updatedAt: daysAgo(9),
|
|
168
168
|
},
|
|
169
|
-
//
|
|
169
|
+
// â"€â"€ P29 expansion (S17 2026-05-12) â€" 15 more carts via helper â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€â"€
|
|
170
170
|
...mkCart("user-kavya-iyer", 6, [
|
|
171
171
|
{
|
|
172
172
|
productId: "product-pokemon-151-booster-box",
|
|
@@ -280,9 +280,46 @@ export const cartsSeedData = [
|
|
|
280
280
|
listingType: "auction",
|
|
281
281
|
},
|
|
282
282
|
]),
|
|
283
|
-
// Guest carts skipped
|
|
283
|
+
// Guest carts skipped — sessionId is a runtime-only optional field on the
|
|
284
284
|
// Zod input but not on the `CartDocument` interface used by the seed array.
|
|
285
285
|
// Guest cart behavior is exercised at runtime via localStorage merge tests.
|
|
286
|
+
// -- Admin: personal collector cart (buying rare items from other stores) ---
|
|
287
|
+
{
|
|
288
|
+
id: "user-admin-letitrip",
|
|
289
|
+
userId: "user-admin-letitrip",
|
|
290
|
+
items: [
|
|
291
|
+
{
|
|
292
|
+
itemId: "cartitem-admin-nendoroid-miku-001",
|
|
293
|
+
productId: "product-nendoroid-hatsune-miku-v4x",
|
|
294
|
+
productTitle: "Nendoroid: Hatsune Miku V4X — Good Smile Company",
|
|
295
|
+
productImage: "/media/product-image-nendoroid-hatsune-miku-v4x-1-20260101.jpg",
|
|
296
|
+
price: 499900,
|
|
297
|
+
currency: _CURRENCY,
|
|
298
|
+
quantity: 1,
|
|
299
|
+
storeId: "store-letitrip-official",
|
|
300
|
+
storeName: "LetItRip Official",
|
|
301
|
+
listingType: "standard",
|
|
302
|
+
addedAt: daysAgo(3),
|
|
303
|
+
updatedAt: daysAgo(3),
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
itemId: "cartitem-admin-alter-rem-001",
|
|
307
|
+
productId: "product-alter-rem-wedding-scale",
|
|
308
|
+
productTitle: "ALTER: Re:Zero — Rem Wedding Ver. 1/7 Scale",
|
|
309
|
+
productImage: "/media/product-image-alter-rem-wedding-scale-1-20260101.jpg",
|
|
310
|
+
price: 1899900,
|
|
311
|
+
currency: _CURRENCY,
|
|
312
|
+
quantity: 1,
|
|
313
|
+
storeId: "store-tokyo-toys-india",
|
|
314
|
+
storeName: "Tokyo Toys India",
|
|
315
|
+
listingType: "standard",
|
|
316
|
+
addedAt: daysAgo(2),
|
|
317
|
+
updatedAt: daysAgo(2),
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
createdAt: daysAgo(3),
|
|
321
|
+
updatedAt: daysAgo(2),
|
|
322
|
+
},
|
|
286
323
|
];
|
|
287
324
|
/**
|
|
288
325
|
* Compact constructor for authenticated user carts. Each item gets a
|
|
@@ -175,6 +175,53 @@ export const groupedListingsSeedData = [
|
|
|
175
175
|
createdAt: daysAgo(10),
|
|
176
176
|
updatedAt: daysAgo(1),
|
|
177
177
|
},
|
|
178
|
+
// ── 9. Admin Curated — Articulated Figure Display Set (LetItRip Official) ─
|
|
179
|
+
{
|
|
180
|
+
id: "group-letitrip-figure-display-set",
|
|
181
|
+
slug: "group-letitrip-figure-display-set",
|
|
182
|
+
title: "LetItRip Curated: Premium Articulated Figure Display Set",
|
|
183
|
+
description: "Hand-picked by LetItRip's curation team — three of the finest articulated figures available right now. figma Link (TotK) for the gaming shelf, MAFEX Miles Morales for the superhero cabinet, and S.H.Figuarts UI Goku for the anime corner. All official, all brand-new. Bundled for a saving of ₹1,500 vs buying separately.",
|
|
184
|
+
productIds: [
|
|
185
|
+
"product-figma-link-totk",
|
|
186
|
+
"product-mafex-miles-morales-spiderman",
|
|
187
|
+
"product-shf-ultra-instinct-goku",
|
|
188
|
+
],
|
|
189
|
+
groupTheme: "related",
|
|
190
|
+
minActiveMembers: 2,
|
|
191
|
+
activeMemberCount: 3,
|
|
192
|
+
visibilityStatus: "visible",
|
|
193
|
+
coverImage: "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=800&h=600&fit=crop",
|
|
194
|
+
isActive: true,
|
|
195
|
+
isFeatured: true,
|
|
196
|
+
storeId: "store-letitrip-official",
|
|
197
|
+
categorySlug: "category-poseable-figures",
|
|
198
|
+
createdBy: "user-admin-letitrip",
|
|
199
|
+
createdAt: daysAgo(7),
|
|
200
|
+
updatedAt: daysAgo(1),
|
|
201
|
+
},
|
|
202
|
+
// ── 10. Admin Curated — Anime Funko Pop Starter Set (LetItRip Official) ───
|
|
203
|
+
{
|
|
204
|
+
id: "group-letitrip-funko-anime-starter",
|
|
205
|
+
slug: "group-letitrip-funko-anime-starter",
|
|
206
|
+
title: "LetItRip Curated: Anime Funko Pop Starter Collection",
|
|
207
|
+
description: "Build your Funko Pop shelf from scratch with this admin-curated set. Gojo Satoru (#1373, blindfold ver.) + Tanjiro & Nezuko Deluxe Diorama — two of the most requested Funko Pops in our anime lineup. Perfect entry point or gift set.",
|
|
208
|
+
productIds: [
|
|
209
|
+
"product-funko-pop-gojo-satoru",
|
|
210
|
+
"product-funko-pop-tanjiro-dlx",
|
|
211
|
+
],
|
|
212
|
+
groupTheme: "related",
|
|
213
|
+
minActiveMembers: 2,
|
|
214
|
+
activeMemberCount: 2,
|
|
215
|
+
visibilityStatus: "visible",
|
|
216
|
+
coverImage: "https://images.unsplash.com/photo-1558618666-fcd25c85cd64?w=800&h=600&fit=crop",
|
|
217
|
+
isActive: true,
|
|
218
|
+
isFeatured: true,
|
|
219
|
+
storeId: "store-letitrip-official",
|
|
220
|
+
categorySlug: "category-vinyl-figures",
|
|
221
|
+
createdBy: "user-admin-letitrip",
|
|
222
|
+
createdAt: daysAgo(5),
|
|
223
|
+
updatedAt: daysAgo(1),
|
|
224
|
+
},
|
|
178
225
|
// ── 8. Funko Pop Anime Collector Set (Tokyo Toys India) ───────────────────
|
|
179
226
|
{
|
|
180
227
|
id: "group-funko-pop-anime-trio",
|
|
@@ -1182,4 +1182,154 @@ export const ordersSeedData = [
|
|
|
1182
1182
|
createdAt: daysAgo(65),
|
|
1183
1183
|
updatedAt: daysAgo(59),
|
|
1184
1184
|
},
|
|
1185
|
+
// ── Admin as buyer — 36. DELIVERED — admin / MAFEX Miles Morales ─────────
|
|
1186
|
+
{
|
|
1187
|
+
id: "order-admin-036-mafex-miles",
|
|
1188
|
+
productId: "product-mafex-miles-morales-spiderman",
|
|
1189
|
+
productTitle: "MAFEX No.240: Miles Morales Spider-Man (Across the Spider-Verse)",
|
|
1190
|
+
userId: "user-admin-letitrip",
|
|
1191
|
+
userName: "LetItRip Admin",
|
|
1192
|
+
userEmail: "admin@letitrip.in",
|
|
1193
|
+
storeId: "store-tokyo-toys-india",
|
|
1194
|
+
storeName: "Tokyo Toys India",
|
|
1195
|
+
items: [
|
|
1196
|
+
{
|
|
1197
|
+
productId: "product-mafex-miles-morales-spiderman",
|
|
1198
|
+
productTitle: "MAFEX No.240: Miles Morales Spider-Man",
|
|
1199
|
+
quantity: 1,
|
|
1200
|
+
unitPrice: 849900,
|
|
1201
|
+
totalPrice: 849900,
|
|
1202
|
+
},
|
|
1203
|
+
],
|
|
1204
|
+
quantity: 1,
|
|
1205
|
+
unitPrice: 849900,
|
|
1206
|
+
totalPrice: 849900,
|
|
1207
|
+
currency: "INR",
|
|
1208
|
+
status: OrderStatusValues.DELIVERED,
|
|
1209
|
+
paymentStatus: PaymentStatusValues.PAID,
|
|
1210
|
+
paymentMethod: PaymentMethodValues.RAZORPAY,
|
|
1211
|
+
paymentId: "pay_razorpay_036_demo",
|
|
1212
|
+
shippingAddress: "LetItRip HQ, 10th Floor, BKC G Block, Mumbai 400051",
|
|
1213
|
+
trackingNumber: "SHPR880011223",
|
|
1214
|
+
shippingCarrier: "Shiprocket",
|
|
1215
|
+
shippingFee: 0,
|
|
1216
|
+
platformFee: 42495,
|
|
1217
|
+
orderDate: daysAgo(55),
|
|
1218
|
+
shippingDate: daysAgo(53),
|
|
1219
|
+
deliveryDate: daysAgo(50),
|
|
1220
|
+
payoutStatus: "paid",
|
|
1221
|
+
createdAt: daysAgo(55),
|
|
1222
|
+
updatedAt: daysAgo(50),
|
|
1223
|
+
},
|
|
1224
|
+
// ── Admin as buyer — 37. DELIVERED — admin / Figma Link TotK ─────────────
|
|
1225
|
+
{
|
|
1226
|
+
id: "order-admin-037-figma-link",
|
|
1227
|
+
productId: "product-figma-link-totk",
|
|
1228
|
+
productTitle: "figma: The Legend of Zelda: Tears of the Kingdom — Link",
|
|
1229
|
+
userId: "user-admin-letitrip",
|
|
1230
|
+
userName: "LetItRip Admin",
|
|
1231
|
+
userEmail: "admin@letitrip.in",
|
|
1232
|
+
storeId: "store-gundam-galaxy",
|
|
1233
|
+
storeName: "Gundam Galaxy",
|
|
1234
|
+
items: [
|
|
1235
|
+
{
|
|
1236
|
+
productId: "product-figma-link-totk",
|
|
1237
|
+
productTitle: "figma Link (Tears of the Kingdom)",
|
|
1238
|
+
quantity: 1,
|
|
1239
|
+
unitPrice: 699900,
|
|
1240
|
+
totalPrice: 699900,
|
|
1241
|
+
},
|
|
1242
|
+
],
|
|
1243
|
+
quantity: 1,
|
|
1244
|
+
unitPrice: 699900,
|
|
1245
|
+
totalPrice: 699900,
|
|
1246
|
+
currency: "INR",
|
|
1247
|
+
status: OrderStatusValues.DELIVERED,
|
|
1248
|
+
paymentStatus: PaymentStatusValues.PAID,
|
|
1249
|
+
paymentMethod: PaymentMethodValues.RAZORPAY,
|
|
1250
|
+
paymentId: "pay_razorpay_037_demo",
|
|
1251
|
+
shippingAddress: "LetItRip HQ, 10th Floor, BKC G Block, Mumbai 400051",
|
|
1252
|
+
trackingNumber: "DTDC990022334",
|
|
1253
|
+
shippingCarrier: "DTDC",
|
|
1254
|
+
shippingFee: 0,
|
|
1255
|
+
platformFee: 34995,
|
|
1256
|
+
orderDate: daysAgo(40),
|
|
1257
|
+
shippingDate: daysAgo(38),
|
|
1258
|
+
deliveryDate: daysAgo(35),
|
|
1259
|
+
payoutStatus: "paid",
|
|
1260
|
+
createdAt: daysAgo(40),
|
|
1261
|
+
updatedAt: daysAgo(35),
|
|
1262
|
+
},
|
|
1263
|
+
// ── Admin as buyer — 38. SHIPPED — admin / Pokémon Mew PSA 10 (won auction) ──
|
|
1264
|
+
{
|
|
1265
|
+
id: "order-admin-038-pokemon-mew-psa10",
|
|
1266
|
+
productId: "auction-pokemon-mew-1st-edition-psa10",
|
|
1267
|
+
productTitle: "Pokémon Base Set 1st Edition Mew Promo #8 — PSA 10 GEM MINT (AUCTION)",
|
|
1268
|
+
userId: "user-admin-letitrip",
|
|
1269
|
+
userName: "LetItRip Admin",
|
|
1270
|
+
userEmail: "admin@letitrip.in",
|
|
1271
|
+
storeId: "store-vintage-vault",
|
|
1272
|
+
storeName: "Vintage Vault",
|
|
1273
|
+
items: [
|
|
1274
|
+
{
|
|
1275
|
+
productId: "auction-pokemon-mew-1st-edition-psa10",
|
|
1276
|
+
productTitle: "Pokémon 1st Ed. Mew Promo — PSA 10",
|
|
1277
|
+
quantity: 1,
|
|
1278
|
+
unitPrice: 14999900,
|
|
1279
|
+
totalPrice: 14999900,
|
|
1280
|
+
},
|
|
1281
|
+
],
|
|
1282
|
+
quantity: 1,
|
|
1283
|
+
unitPrice: 14999900,
|
|
1284
|
+
totalPrice: 14999900,
|
|
1285
|
+
currency: "INR",
|
|
1286
|
+
status: OrderStatusValues.SHIPPED,
|
|
1287
|
+
paymentStatus: PaymentStatusValues.PAID,
|
|
1288
|
+
paymentMethod: PaymentMethodValues.RAZORPAY,
|
|
1289
|
+
paymentId: "pay_razorpay_038_demo",
|
|
1290
|
+
shippingAddress: "LetItRip HQ, 10th Floor, BKC G Block, Mumbai 400051",
|
|
1291
|
+
trackingNumber: "DTDC112233445",
|
|
1292
|
+
shippingCarrier: "DTDC",
|
|
1293
|
+
shippingFee: 0,
|
|
1294
|
+
platformFee: 749995,
|
|
1295
|
+
orderDate: daysAgo(10),
|
|
1296
|
+
shippingDate: daysAgo(8),
|
|
1297
|
+
payoutStatus: "eligible",
|
|
1298
|
+
createdAt: daysAgo(10),
|
|
1299
|
+
updatedAt: daysAgo(8),
|
|
1300
|
+
},
|
|
1301
|
+
// ── Admin as buyer — 39. PROCESSING — admin / Good Smile Aqua Scale ───────
|
|
1302
|
+
{
|
|
1303
|
+
id: "order-admin-039-gsc-aqua",
|
|
1304
|
+
productId: "product-gsc-aqua-konosuba-scale",
|
|
1305
|
+
productTitle: "Good Smile Company: KonoSuba — Aqua 1/7 Scale Figure",
|
|
1306
|
+
userId: "user-admin-letitrip",
|
|
1307
|
+
userName: "LetItRip Admin",
|
|
1308
|
+
userEmail: "admin@letitrip.in",
|
|
1309
|
+
storeId: "store-tokyo-toys-india",
|
|
1310
|
+
storeName: "Tokyo Toys India",
|
|
1311
|
+
items: [
|
|
1312
|
+
{
|
|
1313
|
+
productId: "product-gsc-aqua-konosuba-scale",
|
|
1314
|
+
productTitle: "GSC KonoSuba Aqua 1/7 Scale",
|
|
1315
|
+
quantity: 1,
|
|
1316
|
+
unitPrice: 1299900,
|
|
1317
|
+
totalPrice: 1299900,
|
|
1318
|
+
},
|
|
1319
|
+
],
|
|
1320
|
+
quantity: 1,
|
|
1321
|
+
unitPrice: 1299900,
|
|
1322
|
+
totalPrice: 1299900,
|
|
1323
|
+
currency: "INR",
|
|
1324
|
+
status: OrderStatusValues.PROCESSING,
|
|
1325
|
+
paymentStatus: PaymentStatusValues.PAID,
|
|
1326
|
+
paymentMethod: PaymentMethodValues.UPI_MANUAL,
|
|
1327
|
+
shippingAddress: "LetItRip HQ, 10th Floor, BKC G Block, Mumbai 400051",
|
|
1328
|
+
shippingFee: 0,
|
|
1329
|
+
platformFee: 64995,
|
|
1330
|
+
orderDate: daysAgo(2),
|
|
1331
|
+
payoutStatus: "eligible",
|
|
1332
|
+
createdAt: daysAgo(2),
|
|
1333
|
+
updatedAt: daysAgo(1),
|
|
1334
|
+
},
|
|
1185
1335
|
];
|
|
@@ -13,6 +13,8 @@ const _rawProductsStandardSeedData = [
|
|
|
13
13
|
{
|
|
14
14
|
id: "product-pokemon-sv-etb",
|
|
15
15
|
slug: "product-pokemon-sv-etb",
|
|
16
|
+
partOfBundleIds: ["group-pokemon-starter-bundle"],
|
|
17
|
+
partOfBundleTitles: ["Pokémon TCG Starter Bundle — ETB + Deck Box + Sleeves"],
|
|
16
18
|
title: "Pokémon TCG: Scarlet & Violet — Paldean Fates Elite Trainer Box",
|
|
17
19
|
description: "The Paldean Fates Elite Trainer Box is packed with Pokémon from the Paldea region in their special Shiny forms. Includes 9 Scarlet & Violet—Paldean Fates booster packs, 65 Pokémon card sleeves featuring Shiny Tinkaton ex, 45 Pokémon TCG Energy cards, a player's guide to the set, 6 damage-counter dice, 1 competition-legal coin-flip die, 2 plastic condition markers, and a collector's box.",
|
|
18
20
|
category: "category-pokemon-tcg",
|
|
@@ -122,6 +124,8 @@ const _rawProductsStandardSeedData = [
|
|
|
122
124
|
{
|
|
123
125
|
id: "product-pokemon-pikachu-plush-8",
|
|
124
126
|
slug: "product-pokemon-pikachu-plush-8",
|
|
127
|
+
partOfBundleIds: ["group-pokemon-starter-bundle", "group-pokemon-plush-pair"],
|
|
128
|
+
partOfBundleTitles: ["Pokémon TCG Starter Bundle — ETB + Deck Box + Sleeves", "Pokémon Plush Gift Pair — Pikachu + Gengar"],
|
|
125
129
|
title: "Pokémon Center: Pikachu Sitting Cuties Plush — 8 Inch",
|
|
126
130
|
description: "Official Pokémon Center Pikachu Sitting Cuties plush, 8 inches tall. Super-soft, detailed embroidery, and safe for all ages. Comes in original Pokémon Center hang-tag packaging. A must-have for every Pokémon fan — the iconic expression and bright yellow colouring make this Pikachu plush a display favourite.",
|
|
127
131
|
category: "category-nendoroids-chibis",
|
|
@@ -168,6 +172,8 @@ const _rawProductsStandardSeedData = [
|
|
|
168
172
|
{
|
|
169
173
|
id: "product-pokemon-gengar-sitting-cuties",
|
|
170
174
|
slug: "product-pokemon-gengar-sitting-cuties",
|
|
175
|
+
partOfBundleIds: ["group-pokemon-plush-pair"],
|
|
176
|
+
partOfBundleTitles: ["Pokémon Plush Gift Pair — Pikachu + Gengar"],
|
|
171
177
|
title: "Pokémon Center: Gengar Sitting Cuties Plush — 12 Inch",
|
|
172
178
|
description: "Official Pokémon Center Gengar Sitting Cuties plush in a 12-inch extra-large size. Everyone's favourite Ghost-type Pokémon rendered in super-soft plush with its iconic grin. Perfect display piece and gift. Comes with original Pokémon Center hang-tag. Limited availability — direct import from the official Pokémon Center Japan.",
|
|
173
179
|
category: "category-nendoroids-chibis",
|
|
@@ -282,6 +288,8 @@ const _rawProductsStandardSeedData = [
|
|
|
282
288
|
{
|
|
283
289
|
id: "product-yugioh-25th-tin",
|
|
284
290
|
slug: "product-yugioh-25th-tin",
|
|
291
|
+
partOfBundleIds: ["group-yugioh-tournament-pair"],
|
|
292
|
+
partOfBundleTitles: ["Yu-Gi-Oh! Tournament Ready — 25th Tin + Structure Deck"],
|
|
285
293
|
title: "Yu-Gi-Oh! 25th Anniversary Tin: Dueling Mirrors",
|
|
286
294
|
description: "Celebrate 25 years of the Yu-Gi-Oh! Trading Card Game with this premium anniversary tin. Contains 3 Mega-Packs of 16 cards each (48 cards total), including a guaranteed Ghost Rare and 3 Secret Rares per tin. Features reprint versions of popular tournament staples in ultra-rare foil treatments. The commemorative tin itself is a collector's piece with 25th anniversary embossing and gold foil detail.",
|
|
287
295
|
category: "category-yugioh-tcg",
|
|
@@ -337,6 +345,8 @@ const _rawProductsStandardSeedData = [
|
|
|
337
345
|
{
|
|
338
346
|
id: "product-yugioh-structure-albaz",
|
|
339
347
|
slug: "product-yugioh-structure-albaz",
|
|
348
|
+
partOfBundleIds: ["group-yugioh-tournament-pair"],
|
|
349
|
+
partOfBundleTitles: ["Yu-Gi-Oh! Tournament Ready — 25th Tin + Structure Deck"],
|
|
340
350
|
title: "Yu-Gi-Oh! Structure Deck: Alba Strike",
|
|
341
351
|
description: "A ready-to-play 41-card Structure Deck featuring the Albaz-related cards and Fallen of Albaz strategies. Includes powerful 'Mirrorjade the Iceblade Dragon' and 'Despian Tragedy'. Ideal for beginner-to-intermediate players looking to build a competitive Dogmatika/Albaz fusion strategy. The deck features 2 Ultra Rare, 2 Super Rare, and 37 Common cards, along with a Deck Guide and game mat.",
|
|
342
352
|
category: "category-yugioh-tcg",
|
|
@@ -393,6 +403,8 @@ const _rawProductsStandardSeedData = [
|
|
|
393
403
|
{
|
|
394
404
|
id: "product-hot-wheels-redline-1969-camaro",
|
|
395
405
|
slug: "product-hot-wheels-redline-1969-camaro",
|
|
406
|
+
partOfBundleIds: ["group-hot-wheels-car-culture-3pack"],
|
|
407
|
+
partOfBundleTitles: ["Hot Wheels Car Culture Collector 3-Pack"],
|
|
396
408
|
title: "Hot Wheels Redline 1969 Custom Camaro — Orange (Vintage, Near Mint)",
|
|
397
409
|
description: "Original 1969 Hot Wheels Redline Custom Camaro in bright orange with red-line tyres. This is a first-year release car from the original Hot Wheels line launched by Mattel in 1968. Condition is Near Mint (NM) — vibrant paint with minimal surface scratches, red lines intact, all four wheels spin freely. Stored in UV-resistant case for the past 15 years. Original collector sourced from a US estate sale. An extraordinary piece for serious Redline collectors.",
|
|
398
410
|
category: "category-hot-wheels",
|
|
@@ -452,6 +464,8 @@ const _rawProductsStandardSeedData = [
|
|
|
452
464
|
{
|
|
453
465
|
id: "product-hot-wheels-premium-5pack",
|
|
454
466
|
slug: "product-hot-wheels-premium-5pack",
|
|
467
|
+
partOfBundleIds: ["group-hot-wheels-car-culture-3pack"],
|
|
468
|
+
partOfBundleTitles: ["Hot Wheels Car Culture Collector 3-Pack"],
|
|
455
469
|
title: "Hot Wheels Car Culture: Modern Classics Premium 5-Pack",
|
|
456
470
|
description: "Hot Wheels Car Culture Modern Classics 5-car premium set featuring iconic Japanese performance cars: Honda S2000, Mazda RX-7 (FD), Nissan Skyline GT-R (R34), Toyota Supra (A80), and Honda NSX (NA1). Premium rubber tyres, opening hoods on select vehicles, and individually numbered collector cards. Each car has authentic die-cast metal construction with premium paint finish.",
|
|
457
471
|
category: "category-hot-wheels",
|
|
@@ -506,6 +520,8 @@ const _rawProductsStandardSeedData = [
|
|
|
506
520
|
{
|
|
507
521
|
id: "product-tomica-limited-datsun",
|
|
508
522
|
slug: "product-tomica-limited-datsun",
|
|
523
|
+
partOfBundleIds: ["group-hot-wheels-car-culture-3pack"],
|
|
524
|
+
partOfBundleTitles: ["Hot Wheels Car Culture Collector 3-Pack"],
|
|
509
525
|
title: "Tomica Limited Vintage: Datsun Fairlady 240Z (Silver) — TLV-N43",
|
|
510
526
|
description: "Tomica Limited Vintage precision diecast of the iconic Datsun Fairlady 240Z in silver. Part of the premium TLV-Vintage series — highly detailed 1:64 scale model with opening doors, rubber tyres, and photo-etched badges. The 240Z is widely regarded as one of the most beautiful Japanese sports cars ever made and TLV captures every curve faithfully. Comes in original Tomica Limited Vintage box with protective tray.",
|
|
511
527
|
category: "category-tomica",
|
|
@@ -681,6 +697,8 @@ const _rawProductsStandardSeedData = [
|
|
|
681
697
|
{
|
|
682
698
|
id: "product-shf-goku-ultra-instinct",
|
|
683
699
|
slug: "product-shf-goku-ultra-instinct",
|
|
700
|
+
partOfBundleIds: ["group-anime-figure-duo-rem-goku"],
|
|
701
|
+
partOfBundleTitles: ["Anime Figure Duo — Nendoroid Rem + S.H.Figuarts Goku"],
|
|
684
702
|
title: "Bandai S.H.Figuarts Son Goku -Ultra Instinct- (Dragon Ball Super: Super Hero Ver.)",
|
|
685
703
|
description: "Bandai S.H.Figuarts Son Goku in his iconic Ultra Instinct form from Dragon Ball Super. This premium figure stands approximately 14 cm tall and features over 20 points of articulation for dynamic posing. Includes multiple expression faceplates, interchangeable hand parts, effect parts for the Ultra Instinct silver aura, and a figure stand. The Ultra Instinct transformation's silver hair is rendered in transparent gradient plastic for an ethereal glow effect. Tamashii Web Exclusive edition.",
|
|
686
704
|
category: "category-poseable-figures",
|
|
@@ -737,6 +755,8 @@ const _rawProductsStandardSeedData = [
|
|
|
737
755
|
{
|
|
738
756
|
id: "product-nendoroid-rem-rezero",
|
|
739
757
|
slug: "product-nendoroid-rem-rezero",
|
|
758
|
+
partOfBundleIds: ["group-anime-figure-duo-rem-goku"],
|
|
759
|
+
partOfBundleTitles: ["Anime Figure Duo — Nendoroid Rem + S.H.Figuarts Goku"],
|
|
740
760
|
title: "Good Smile Company Nendoroid Rem (Re:Zero) — #663",
|
|
741
761
|
description: "Good Smile Company's iconic Nendoroid #663 — Rem from Re:Zero -Starting Life in Another World-. This is one of the best-selling Nendoroids of all time and a must-have for any Re:Zero fan. Stands approximately 10 cm tall in typical Nendoroid cute chibi style. Includes 3 expression faceplates (standard, smiling, and combat), 3 optional hand parts, her morning star weapon, and a Nendoroid stand. Re-release edition in standard packaging.",
|
|
742
762
|
category: "category-nendoroids-chibis",
|
|
@@ -793,6 +813,8 @@ const _rawProductsStandardSeedData = [
|
|
|
793
813
|
{
|
|
794
814
|
id: "product-funko-pop-naruto-sage",
|
|
795
815
|
slug: "product-funko-pop-naruto-sage",
|
|
816
|
+
partOfBundleIds: ["group-funko-pop-anime-trio"],
|
|
817
|
+
partOfBundleTitles: ["Funko Pop! Anime Collector Set — Naruto + Batman"],
|
|
796
818
|
title: "Funko Pop! Animation: Naruto Shippuden — Naruto Sage Mode #932",
|
|
797
819
|
description: "Funko Pop! Naruto Uzumaki in Sage Mode (#932) from Naruto Shippuden. Features Naruto in his iconic Sage Mode toad markings with orange and black design. Stands approximately 9.5 cm tall in the standard Funko Pop vinyl style with oversized head and solid black eyes. Comes in original window box. Perfect for display on any shelf — great gift for Naruto fans.",
|
|
798
820
|
category: "category-poseable-figures",
|
|
@@ -847,6 +869,8 @@ const _rawProductsStandardSeedData = [
|
|
|
847
869
|
{
|
|
848
870
|
id: "product-mcfarlane-batman-dark-knight",
|
|
849
871
|
slug: "product-mcfarlane-batman-dark-knight",
|
|
872
|
+
partOfBundleIds: ["group-funko-pop-anime-trio"],
|
|
873
|
+
partOfBundleTitles: ["Funko Pop! Anime Collector Set — Naruto + Batman"],
|
|
850
874
|
title: "McFarlane Toys DC Multiverse: Batman (The Dark Knight Returns) 7-Inch Figure",
|
|
851
875
|
description: "McFarlane Toys DC Multiverse Batman figure based on Frank Miller's legendary graphic novel The Dark Knight Returns. This 7-inch scale figure features an extremely detailed sculpt of the older, armoured Batman, over 22 points of articulation, and includes a batarang accessory and display base. The textured grey and black armour is faithfully rendered with aged weathering effects. Comes in collector-grade window box packaging with character art.",
|
|
852
876
|
category: "category-scale-figures",
|
|
@@ -903,6 +927,8 @@ const _rawProductsStandardSeedData = [
|
|
|
903
927
|
{
|
|
904
928
|
id: "product-gundam-rx78-mg",
|
|
905
929
|
slug: "product-gundam-rx78-mg",
|
|
930
|
+
partOfBundleIds: ["group-gundam-builder-essentials"],
|
|
931
|
+
partOfBundleTitles: ["Gundam Builder Essentials — MG + RG Bundle"],
|
|
906
932
|
title: "Bandai Gunpla MG 1/100 RX-78-2 Gundam Ver. 3.0 — Master Grade Model Kit",
|
|
907
933
|
description: "Bandai's definitive Master Grade RX-78-2 Gundam Ver. 3.0 — the iconic original Gundam redefined with state-of-the-art engineering. This 1/100 scale snap-fit plastic model features an internal frame with full armour over-wrap, 144 individual hand-assembly components, and impressive poseability that captures every heroic Gundam stance. Includes beam rifle, beam sabre, shield, hyper bazooka, and Gundam hammer. No glue required — perfect for builders aged 15+.",
|
|
908
934
|
category: "category-gunpla",
|
|
@@ -959,6 +985,8 @@ const _rawProductsStandardSeedData = [
|
|
|
959
985
|
{
|
|
960
986
|
id: "product-gundam-wing-zero-rg",
|
|
961
987
|
slug: "product-gundam-wing-zero-rg",
|
|
988
|
+
partOfBundleIds: ["group-gundam-builder-essentials"],
|
|
989
|
+
partOfBundleTitles: ["Gundam Builder Essentials — MG + RG Bundle"],
|
|
962
990
|
title: "Bandai Gunpla RG 1/144 Wing Gundam Zero EW (Endless Waltz) — Real Grade Kit",
|
|
963
991
|
description: "Bandai's legendary Real Grade Wing Gundam Zero from Endless Waltz — the most beautiful Gundam ever made. The RG 1/144 scale features an advanced MS Joint inner frame system, stunning wing feather detail with individual micro-articulated feathers, twin buster rifle, beam sabre effect parts, and a Sandhausen Sturm System for the signature Wing Zero cannon pose. The feathers alone have 88 individual moving components. A showpiece even un-built.",
|
|
964
992
|
category: "category-gunpla",
|
|
@@ -1016,6 +1044,8 @@ const _rawProductsStandardSeedData = [
|
|
|
1016
1044
|
{
|
|
1017
1045
|
id: "product-beyblade-x-bx01-dran-sword",
|
|
1018
1046
|
slug: "product-beyblade-x-bx01-dran-sword",
|
|
1047
|
+
partOfBundleIds: ["group-beyblade-x-starter-kit"],
|
|
1048
|
+
partOfBundleTitles: ["Beyblade X Complete Starter Kit — Top + Launcher + Stadium"],
|
|
1019
1049
|
title: "Beyblade X BX-01 Starter Set: Dran Sword 3-60F — Official Takara Tomy",
|
|
1020
1050
|
description: "The official Beyblade X launch product — BX-01 Dran Sword 3-60F Starter Set. Beyblade X is the next evolution of the competitive Beyblade system, featuring the new X-Line rail system and the Extreme Dash (X-Dash) mechanic where the Beyblade launches at high speed onto the XStadium rail for powerful finisher attacks. Includes Dran Sword top (Bit: Dran, Blade: Sword 3, Ratchet: 60, Bit: F), a high-grip X-String Launcher, and a Beyblade X Activity Guide booklet. Authentic Takara Tomy Japan import.",
|
|
1021
1051
|
category: "category-beyblade-x",
|
|
@@ -1071,6 +1101,8 @@ const _rawProductsStandardSeedData = [
|
|
|
1071
1101
|
{
|
|
1072
1102
|
id: "product-beyblade-burst-b200-valkyrie",
|
|
1073
1103
|
slug: "product-beyblade-burst-b200-valkyrie",
|
|
1104
|
+
partOfBundleIds: ["group-beyblade-x-starter-kit"],
|
|
1105
|
+
partOfBundleTitles: ["Beyblade X Complete Starter Kit — Top + Launcher + Stadium"],
|
|
1074
1106
|
title: "Beyblade Burst QuadStrike B-200 Starter: Infinite Valkyrie — Official Takara Tomy",
|
|
1075
1107
|
description: "Beyblade Burst QuadStrike B-200 Infinite Valkyrie Knight Sword 1B Starter Set — the latest evolution in the Valkyrie lineage. Part of the QuadStrike system featuring four-blade attack design with the Knight Sword contact points and 1B driver for aggressive stamina-to-attack balance. Includes Infinite Valkyrie top, QuadDrive Launcher, and Beyblade Burst activity guide. Authentic Takara Tomy Japan manufacture — no knockoffs. A top-tier competitive choice in the QuadStrike meta.",
|
|
1076
1108
|
category: "category-beyblade-burst",
|
|
@@ -3393,6 +3425,8 @@ const _rawProductsStandardSeedData = [
|
|
|
3393
3425
|
{
|
|
3394
3426
|
id: "product-figma-link-totk",
|
|
3395
3427
|
slug: "product-figma-link-totk",
|
|
3428
|
+
partOfBundleIds: ["group-letitrip-figure-display-set"],
|
|
3429
|
+
partOfBundleTitles: ["LetItRip Curated: Premium Articulated Figure Display Set"],
|
|
3396
3430
|
title: "figma: The Legend of Zelda: Tears of the Kingdom — Link (Non-Scale)",
|
|
3397
3431
|
description: "Max Factory figma articulated figure of Link from The Legend of Zelda: Tears of the Kingdom. Features 30+ points of articulation, Ultrahand ability accessories, multiple interchangeable expression faceplates, and weapons including the Master Sword and Hylian Shield. Non-scale PVC/ABS.",
|
|
3398
3432
|
category: "category-poseable-figures",
|
|
@@ -3426,6 +3460,8 @@ const _rawProductsStandardSeedData = [
|
|
|
3426
3460
|
{
|
|
3427
3461
|
id: "product-funko-pop-gojo-satoru",
|
|
3428
3462
|
slug: "product-funko-pop-gojo-satoru",
|
|
3463
|
+
partOfBundleIds: ["group-letitrip-funko-anime-starter"],
|
|
3464
|
+
partOfBundleTitles: ["LetItRip Curated: Anime Funko Pop Starter Collection"],
|
|
3429
3465
|
title: "Funko Pop! Animation: Jujutsu Kaisen — Gojo Satoru (Blindfold) #1373",
|
|
3430
3466
|
description: "Funko Pop! Animation figure of Gojo Satoru from Jujutsu Kaisen, depicting him with his iconic blindfold. Vinyl figure stands approx. 3.75 inches tall. Official licensed product. Comes in standard window-display box.",
|
|
3431
3467
|
category: "category-poseable-figures",
|
|
@@ -3491,6 +3527,8 @@ const _rawProductsStandardSeedData = [
|
|
|
3491
3527
|
{
|
|
3492
3528
|
id: "product-shf-ultra-instinct-goku",
|
|
3493
3529
|
slug: "product-shf-ultra-instinct-goku",
|
|
3530
|
+
partOfBundleIds: ["group-letitrip-figure-display-set"],
|
|
3531
|
+
partOfBundleTitles: ["LetItRip Curated: Premium Articulated Figure Display Set"],
|
|
3494
3532
|
title: "S.H.Figuarts: Dragon Ball Super — Ultra Instinct Goku (2nd Release)",
|
|
3495
3533
|
description: "Bandai S.H.Figuarts Ultra Instinct Goku from Dragon Ball Super. 2nd release with improved articulation and silver aura effect parts. Features multiple hand sets, energy effect parts, and display stand. Approx. 140mm. Official Bandai Spirits product.",
|
|
3496
3534
|
category: "category-poseable-figures",
|
|
@@ -3524,6 +3562,8 @@ const _rawProductsStandardSeedData = [
|
|
|
3524
3562
|
{
|
|
3525
3563
|
id: "product-funko-pop-tanjiro-dlx",
|
|
3526
3564
|
slug: "product-funko-pop-tanjiro-dlx",
|
|
3565
|
+
partOfBundleIds: ["group-letitrip-funko-anime-starter"],
|
|
3566
|
+
partOfBundleTitles: ["LetItRip Curated: Anime Funko Pop Starter Collection"],
|
|
3527
3567
|
title: "Funko Pop! Deluxe: Demon Slayer — Tanjiro Kamado with Nezuko (Diorama)",
|
|
3528
3568
|
description: "Funko Pop! Deluxe figure of Tanjiro Kamado with Nezuko from Demon Slayer: Kimetsu no Yaiba. Diorama set with Tanjiro in battle pose and Nezuko in bamboo-muzzle form. Larger format deluxe figure with detailed base. Official licensed product.",
|
|
3529
3569
|
category: "category-poseable-figures",
|
|
@@ -3556,6 +3596,8 @@ const _rawProductsStandardSeedData = [
|
|
|
3556
3596
|
{
|
|
3557
3597
|
id: "product-mafex-miles-morales-spiderman",
|
|
3558
3598
|
slug: "product-mafex-miles-morales-spiderman",
|
|
3599
|
+
partOfBundleIds: ["group-letitrip-figure-display-set"],
|
|
3600
|
+
partOfBundleTitles: ["LetItRip Curated: Premium Articulated Figure Display Set"],
|
|
3559
3601
|
title: "MAFEX No.240: Miles Morales Spider-Man (Across the Spider-Verse)",
|
|
3560
3602
|
description: "Medicom Toy MAFEX No.240 Miles Morales Spider-Man based on his appearance in Across the Spider-Verse. Highly articulated figure with fabric suit elements, web effect parts, and multiple expression faceplates. Approx. 155mm. One of the most detailed Miles Morales figures available.",
|
|
3561
3603
|
category: "category-poseable-figures",
|