@mohasinac/appkit 2.7.30 → 2.7.31

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 (73) hide show
  1. package/dist/_internal/client/features/filters/filter-load-options.d.ts +29 -0
  2. package/dist/_internal/client/features/filters/filter-load-options.js +98 -0
  3. package/dist/_internal/server/features/classified/adapters.js +1 -1
  4. package/dist/_internal/server/features/digital-code/adapters.js +1 -1
  5. package/dist/_internal/server/features/live/adapters.js +1 -1
  6. package/dist/_internal/shared/actions/action-registry.js +194 -1
  7. package/dist/client.d.ts +2 -0
  8. package/dist/client.js +1 -0
  9. package/dist/constants/api-endpoints.d.ts +6 -0
  10. package/dist/constants/api-endpoints.js +2 -0
  11. package/dist/constants/field-names.d.ts +1 -0
  12. package/dist/constants/field-names.js +1 -0
  13. package/dist/features/about/components/PublicProfileView.js +2 -2
  14. package/dist/features/admin/components/AdminAddressEditorView.d.ts +7 -0
  15. package/dist/features/admin/components/AdminAddressEditorView.js +117 -0
  16. package/dist/features/admin/components/AdminCategoryEditorView.js +12 -9
  17. package/dist/features/admin/components/AdminFeatureFlagsView.js +58 -13
  18. package/dist/features/admin/components/AdminProductEditorView.d.ts +3 -1
  19. package/dist/features/admin/components/AdminProductEditorView.js +12 -9
  20. package/dist/features/admin/components/AdminReturnRequestsView.js +5 -4
  21. package/dist/features/admin/components/AdminReviewsView.js +5 -4
  22. package/dist/features/admin/components/index.d.ts +2 -0
  23. package/dist/features/admin/components/index.js +1 -0
  24. package/dist/features/auctions/components/AuctionBidsTable.d.ts +13 -0
  25. package/dist/features/auctions/components/AuctionBidsTable.js +62 -0
  26. package/dist/features/auctions/components/AuctionDetailPageView.js +2 -2
  27. package/dist/features/auctions/components/AuctionFilters.d.ts +7 -1
  28. package/dist/features/auctions/components/AuctionFilters.js +3 -2
  29. package/dist/features/auctions/components/index.d.ts +2 -0
  30. package/dist/features/auctions/components/index.js +1 -0
  31. package/dist/features/cart/components/CartView.js +2 -1
  32. package/dist/features/cart/components/CheckoutView.js +2 -1
  33. package/dist/features/categories/components/BrandDetailTabs.d.ts +5 -1
  34. package/dist/features/categories/components/BrandDetailTabs.js +29 -15
  35. package/dist/features/categories/components/CategoryDetailTabs.d.ts +5 -1
  36. package/dist/features/categories/components/CategoryDetailTabs.js +30 -15
  37. package/dist/features/classified/components/ClassifiedFilters.d.ts +5 -1
  38. package/dist/features/classified/components/ClassifiedFilters.js +3 -2
  39. package/dist/features/digital-codes/components/DigitalCodeFilters.d.ts +5 -1
  40. package/dist/features/digital-codes/components/DigitalCodeFilters.js +3 -2
  41. package/dist/features/events/repository/event-entry.repository.d.ts +1 -0
  42. package/dist/features/events/repository/event-entry.repository.js +5 -0
  43. package/dist/features/filters/index.d.ts +2 -0
  44. package/dist/features/filters/index.js +1 -0
  45. package/dist/features/layout/AppLayoutShell.d.ts +1 -1
  46. package/dist/features/layout/AppLayoutShell.js +1 -1
  47. package/dist/features/live/components/LiveItemFilters.d.ts +5 -1
  48. package/dist/features/live/components/LiveItemFilters.js +3 -2
  49. package/dist/features/pre-orders/components/PreOrderDetailPageView.js +2 -2
  50. package/dist/features/pre-orders/components/PreOrderFilters.d.ts +7 -1
  51. package/dist/features/pre-orders/components/PreOrderFilters.js +3 -2
  52. package/dist/features/products/columns/productTableColumns.js +1 -1
  53. package/dist/features/products/components/CompareOverlay.d.ts +2 -0
  54. package/dist/features/products/components/CompareOverlay.js +1 -1
  55. package/dist/features/products/components/ProductFilters.d.ts +7 -1
  56. package/dist/features/products/components/ProductFilters.js +3 -2
  57. package/dist/features/products/components/ProductForm.js +6 -6
  58. package/dist/features/products/components/ProductGrid.js +1 -1
  59. package/dist/features/products/repository/products.repository.d.ts +4 -0
  60. package/dist/features/products/repository/products.repository.js +22 -3
  61. package/dist/features/products/schemas/firestore.d.ts +7 -1
  62. package/dist/features/products/types/index.d.ts +4 -0
  63. package/dist/features/stores/components/StoreDetailLayoutView.js +16 -2
  64. package/dist/index.d.ts +6 -0
  65. package/dist/index.js +6 -0
  66. package/dist/next/routing/route-map.d.ts +14 -0
  67. package/dist/next/routing/route-map.js +7 -0
  68. package/dist/seed/products-auctions-seed-data.js +40 -40
  69. package/dist/seed/products-preorders-seed-data.js +16 -16
  70. package/dist/seed/products-prize-draws-seed-data.js +4 -4
  71. package/dist/seed/products-standard-seed-data.js +202 -202
  72. package/dist/tailwind-utilities.css +1 -1
  73. package/package.json +1 -1
@@ -1,9 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cache } from "react";
3
- import { storeRepository, productRepository, categoriesRepository } from "../../../repositories";
3
+ import { storeRepository, productRepository, categoriesRepository, siteSettingsRepository } from "../../../repositories";
4
4
  import { ROUTES } from "../../../next";
5
5
  import { Container, Main, Section, Text } from "../../../ui";
6
6
  import { STORE_PAGE_TABS } from "../../products/constants/listing-tabs";
7
+ import { isListingTypeEnabled, isCategoryTypeEnabled } from "../../../_internal/shared/listing-types/feature-flags";
7
8
  import { StoreHeader } from "./StoreHeader";
8
9
  import { StoreNavTabs } from "./StoreNavTabs";
9
10
  const STORE_LISTING_HREF = {
@@ -25,6 +26,7 @@ export async function StoreDetailLayoutView({ storeSlug, activeTab, children, })
25
26
  return (_jsx(Main, { children: _jsx(Section, { className: "py-20", children: _jsx(Container, { size: "md", children: _jsx(Text, { className: "text-center text-zinc-500", children: "Store not found." }) }) }) }));
26
27
  }
27
28
  const storeId = store?.id;
29
+ const settings = await siteSettingsRepository.findById("global").catch(() => null);
28
30
  const [productsCount, auctionsCount, preOrdersCount, prizeDrawsCount, bundlesCount] = storeId
29
31
  ? await Promise.all([
30
32
  productRepository
@@ -58,8 +60,20 @@ export async function StoreDetailLayoutView({ storeSlug, activeTab, children, })
58
60
  "prize-draws": prizeDrawsCount,
59
61
  bundles: bundlesCount,
60
62
  };
63
+ const TAB_LISTING_TYPE = {
64
+ products: "standard",
65
+ auctions: "auction",
66
+ "pre-orders": "pre-order",
67
+ "prize-draws": "prize-draw",
68
+ };
69
+ const visibleStoreTabs = STORE_PAGE_TABS.filter((tab) => {
70
+ if (tab.id === "bundles")
71
+ return isCategoryTypeEnabled("bundle", settings);
72
+ const lt = TAB_LISTING_TYPE[tab.id];
73
+ return lt ? isListingTypeEnabled(lt, settings) : true;
74
+ });
61
75
  const tabs = [
62
- ...STORE_PAGE_TABS.map((tab) => ({
76
+ ...visibleStoreTabs.map((tab) => ({
63
77
  value: tab.id,
64
78
  label: tabLabel(tab.label, listingCounts[tab.id]),
65
79
  href: STORE_LISTING_HREF[tab.id](storeSlug),
package/dist/index.d.ts CHANGED
@@ -1058,6 +1058,8 @@ export { AdminBrandsView } from "./features/admin/index";
1058
1058
  export type { AdminBrandsViewProps } from "./features/admin/index";
1059
1059
  export { AdminBrandEditorView } from "./features/admin/index";
1060
1060
  export type { AdminBrandEditorViewProps } from "./features/admin/index";
1061
+ export { AdminAddressEditorView } from "./features/admin/index";
1062
+ export type { AdminAddressEditorViewProps } from "./features/admin/index";
1061
1063
  export { AdminCategoriesView } from "./features/admin/index";
1062
1064
  export { AdminCategoryEditorView } from "./features/admin/index";
1063
1065
  export type { AdminCategoryEditorViewProps } from "./features/admin/index";
@@ -1297,6 +1299,8 @@ export { BID_PUBLIC_FIELDS } from "./features/auctions/index";
1297
1299
  export { BID_UPDATABLE_FIELDS } from "./features/auctions/index";
1298
1300
  export { BidStatusValues } from "./features/auctions/index";
1299
1301
  export { DEFAULT_BID_DATA } from "./features/auctions/index";
1302
+ export { AuctionBidsTable } from "./features/auctions/index";
1303
+ export type { AuctionBidsTableProps, AuctionWithBids } from "./features/auctions/index";
1300
1304
  export { MarketplaceAuctionCard } from "./features/auctions/index";
1301
1305
  export { MarketplaceAuctionGrid } from "./features/auctions/index";
1302
1306
  export { auctionAdminColumns } from "./features/auctions/index";
@@ -1886,6 +1890,8 @@ export type { FaqUpdateInput } from "./features/faq/server";
1886
1890
  export type { VoteFaqActionInput } from "./features/faq/server";
1887
1891
  export type { VoteFaqActionResult } from "./features/faq/server";
1888
1892
  export { FilterFacetSection } from "./features/filters/index";
1893
+ export { AsyncFacetSection } from "./features/filters/index";
1894
+ export type { AsyncFacetSectionProps } from "./features/filters/index";
1889
1895
  export { FilterPanel } from "./features/filters/index";
1890
1896
  export { RangeFilter } from "./features/filters/index";
1891
1897
  export { SwitchFilter } from "./features/filters/index";
package/dist/index.js CHANGED
@@ -2071,6 +2071,8 @@ export { AdminCarouselEditorView } from "./features/admin/index";
2071
2071
  export { AdminBrandsView } from "./features/admin/index";
2072
2072
  // AdminBrandEditorView - Component for admin brand create/edit form.
2073
2073
  export { AdminBrandEditorView } from "./features/admin/index";
2074
+ // AdminAddressEditorView - Component for admin address create/edit form.
2075
+ export { AdminAddressEditorView } from "./features/admin/index";
2074
2076
  // AdminCategoriesView - Component for admin categories view.
2075
2077
  export { AdminCategoriesView } from "./features/admin/index";
2076
2078
  // AdminCategoryEditorView - Component for admin category create/edit form.
@@ -2457,6 +2459,8 @@ export { BidStatusValues } from "./features/auctions/index";
2457
2459
  // DEFAULT_BID_DATA - Constant used across modules.
2458
2460
  export { DEFAULT_BID_DATA } from "./features/auctions/index";
2459
2461
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
2462
+ // AuctionBidsTable - Collapsible auction-grouped bids table for buyer/store/admin portals.
2463
+ export { AuctionBidsTable } from "./features/auctions/index";
2460
2464
  // MarketplaceAuctionCard - Component for marketplace auction card.
2461
2465
  export { MarketplaceAuctionCard } from "./features/auctions/index";
2462
2466
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
@@ -3614,6 +3618,8 @@ export { voteFaq } from "./features/faq/server";
3614
3618
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3615
3619
  // FilterFacetSection - Shared export for filter facet section.
3616
3620
  export { FilterFacetSection } from "./features/filters/index";
3621
+ // AsyncFacetSection - Async paginated filter section (replaces FilterFacetSection for large datasets).
3622
+ export { AsyncFacetSection } from "./features/filters/index";
3617
3623
  // [CLIENT-SSR]-Runs in both SSR and browser â€" React component or hook that does not depend on browser-only APIs.
3618
3624
  // FilterPanel - Shared export for filter panel.
3619
3625
  export { FilterPanel } from "./features/filters/index";
@@ -126,6 +126,10 @@ export declare const DEFAULT_ROUTE_MAP: {
126
126
  readonly RETURNS: "/user/returns";
127
127
  readonly SUPPORT: "/user/support";
128
128
  readonly SUPPORT_TICKET: (id: string) => string;
129
+ readonly PRE_ORDERS: "/user/pre-orders";
130
+ readonly DIGITAL_CODES: "/user/digital-codes";
131
+ readonly PRIZE_DRAWS: "/user/prize-draws";
132
+ readonly EVENTS: "/user/events";
129
133
  };
130
134
  readonly STORE: {
131
135
  readonly DASHBOARD: "/store";
@@ -238,6 +242,9 @@ export declare const DEFAULT_ROUTE_MAP: {
238
242
  readonly HISTORY: "/admin/history";
239
243
  readonly RETURN_REQUESTS: "/admin/return-requests";
240
244
  readonly STORE_ADDRESSES: "/admin/store-addresses";
245
+ readonly ADDRESSES: "/admin/addresses";
246
+ readonly ADDRESSES_NEW: "/admin/addresses/new";
247
+ readonly ADDRESSES_EDIT: (id: string) => string;
241
248
  readonly SUBLISTING_CATEGORIES: "/admin/sublisting-categories";
242
249
  readonly SUBLISTING_CATEGORIES_NEW: "/admin/sublisting-categories/new";
243
250
  readonly SUBLISTING_CATEGORIES_EDIT: (id: string) => string;
@@ -381,6 +388,10 @@ export declare const ROUTES: {
381
388
  readonly RETURNS: "/user/returns";
382
389
  readonly SUPPORT: "/user/support";
383
390
  readonly SUPPORT_TICKET: (id: string) => string;
391
+ readonly PRE_ORDERS: "/user/pre-orders";
392
+ readonly DIGITAL_CODES: "/user/digital-codes";
393
+ readonly PRIZE_DRAWS: "/user/prize-draws";
394
+ readonly EVENTS: "/user/events";
384
395
  };
385
396
  readonly STORE: {
386
397
  readonly DASHBOARD: "/store";
@@ -493,6 +504,9 @@ export declare const ROUTES: {
493
504
  readonly HISTORY: "/admin/history";
494
505
  readonly RETURN_REQUESTS: "/admin/return-requests";
495
506
  readonly STORE_ADDRESSES: "/admin/store-addresses";
507
+ readonly ADDRESSES: "/admin/addresses";
508
+ readonly ADDRESSES_NEW: "/admin/addresses/new";
509
+ readonly ADDRESSES_EDIT: (id: string) => string;
496
510
  readonly SUBLISTING_CATEGORIES: "/admin/sublisting-categories";
497
511
  readonly SUBLISTING_CATEGORIES_NEW: "/admin/sublisting-categories/new";
498
512
  readonly SUBLISTING_CATEGORIES_EDIT: (id: string) => string;
@@ -114,6 +114,10 @@ export const DEFAULT_ROUTE_MAP = {
114
114
  RETURNS: "/user/returns",
115
115
  SUPPORT: "/user/support",
116
116
  SUPPORT_TICKET: (id) => `/user/support/${id}`,
117
+ PRE_ORDERS: "/user/pre-orders",
118
+ DIGITAL_CODES: "/user/digital-codes",
119
+ PRIZE_DRAWS: "/user/prize-draws",
120
+ EVENTS: "/user/events",
117
121
  },
118
122
  STORE: {
119
123
  DASHBOARD: "/store",
@@ -228,6 +232,9 @@ export const DEFAULT_ROUTE_MAP = {
228
232
  HISTORY: "/admin/history",
229
233
  RETURN_REQUESTS: "/admin/return-requests",
230
234
  STORE_ADDRESSES: "/admin/store-addresses",
235
+ ADDRESSES: "/admin/addresses",
236
+ ADDRESSES_NEW: "/admin/addresses/new",
237
+ ADDRESSES_EDIT: (id) => `/admin/addresses/${id}/edit`,
231
238
  SUBLISTING_CATEGORIES: "/admin/sublisting-categories",
232
239
  SUBLISTING_CATEGORIES_NEW: "/admin/sublisting-categories/new",
233
240
  SUBLISTING_CATEGORIES_EDIT: (id) => `/admin/sublisting-categories/${id}/edit`,
@@ -19,8 +19,8 @@ const _rawProductsAuctionsSeedData = [
19
19
  slug: "auction-pokemon-charizard-base1-psa9",
20
20
  title: "Pokémon Base Set 1st Edition Charizard #4 Holo — PSA 9 MINT (AUCTION)",
21
21
  description: "An absolutely pristine 1st Edition Base Set Charizard #4 graded PSA 9 MINT — one of the most iconic and sought-after Pokémon cards in existence. The 1st Edition stamp on the left of the artwork, shadow-less frame, and deep crimson fire breath in perfect registration. PSA 9 MINT has four sharp corners, bright lustre, no visible surface scratches, well-centered image. Certificate number visible on slab. This is auction lot 1 of 1 — once this card is gone, there is no re-stock. A generational collectible.",
22
- category: "category-vintage-tcg",
23
- categoryName: "Vintage TCG",
22
+ categorySlugs: ["category-vintage-tcg"],
23
+ categoryNames: ["Vintage TCG"],
24
24
  brand: "The Pokémon Company",
25
25
  brandSlug: "brand-pokemon-company",
26
26
  auctionEndDate: hoursAhead(12),
@@ -86,8 +86,8 @@ const _rawProductsAuctionsSeedData = [
86
86
  slug: "auction-yugioh-lob1-exodia-1st-psa8",
87
87
  title: "Yu-Gi-Oh! Exodia the Forbidden One — LOB-000 1st Edition PSA 8 NM-MT (AUCTION)",
88
88
  description: "Ultra-rare 1st Edition Exodia the Forbidden One from the original Legend of Blue Eyes White Dragon set (LOB-000), graded PSA 8 Near Mint to Mint. Exodia is one of the most iconic and mythological cards in all of Yu-Gi-Oh — the card that ends the game instantly when all five Exodia pieces are assembled. This 1st Edition LOB-000 printing is the most desirable version, identifiable by the 1st Edition stamp in the lower left of the card frame. PSA 8 NM-MT: four nearly perfect corners, excellent surface, minimal wear. A tournament legend in slab form.",
89
- category: "category-vintage-tcg",
90
- categoryName: "Vintage TCG",
89
+ categorySlugs: ["category-vintage-tcg"],
90
+ categoryNames: ["Vintage TCG"],
91
91
  brand: "Konami",
92
92
  brandSlug: "brand-konami",
93
93
  auctionEndDate: hoursAhead(48),
@@ -153,8 +153,8 @@ const _rawProductsAuctionsSeedData = [
153
153
  slug: "auction-hot-wheels-redline-camaro-pink",
154
154
  title: "Hot Wheels Redline 1967 Custom Camaro — Spectraflame Pink (Vintage, AUCTION)",
155
155
  description: "Extremely rare 1967 Hot Wheels Redline Custom Camaro in Spectraflame Pink — one of the most sought-after Redline colourways among serious diecast collectors. The Spectraflame Pink finish has a characteristic metallic candy-pink lustre that was only produced for a very limited run. This example is in Very Good (VG) condition: strong pink spectraflame with minor surface abrasion on the hood, red-line tyres intact, all four wheels spin freely. Sourced from a Japan Redline collector who acquired it at a 1980s Tokyo toy show. No repaints, no replaced parts. Accompanied by a collector's provenance letter.",
156
- category: "category-hot-wheels",
157
- categoryName: "Hot Wheels",
156
+ categorySlugs: ["category-hot-wheels"],
157
+ categoryNames: ["Hot Wheels"],
158
158
  brand: "Hot Wheels",
159
159
  brandSlug: "brand-hot-wheels",
160
160
  auctionEndDate: hoursAhead(6),
@@ -221,8 +221,8 @@ const _rawProductsAuctionsSeedData = [
221
221
  slug: "auction-beyblade-metal-fusion-signed",
222
222
  title: "Beyblade Metal Fusion BB-10 Storm Pegasus — Factory Sealed + Signed by Voice Actor (UPCOMING AUCTION)",
223
223
  description: "Extraordinary lot: a factory-sealed Beyblade Metal Fusion BB-10 Storm Pegasus Starter Set, signed on the outer box by the Japanese voice actor for Ginga Hagane (Kei Shindo), with certificate of authenticity. BB-10 Storm Pegasus is the iconic starting Beyblade for the Metal Fusion series, and factory-sealed examples are increasingly rare as most were opened immediately. The signature was obtained at WonFes 2019 and is accompanied by a photograph of the signing session. Opening bid at ₹2,999 — no reserve. This auction starts in 72 hours.",
224
- category: "category-beyblade-classic",
225
- categoryName: "Metal Fight Classic",
224
+ categorySlugs: ["category-beyblade-classic"],
225
+ categoryNames: ["Metal Fight Classic"],
226
226
  brand: "Beyblade",
227
227
  brandSlug: "brand-beyblade",
228
228
  auctionEndDate: daysAhead(7),
@@ -286,8 +286,8 @@ const _rawProductsAuctionsSeedData = [
286
286
  slug: "auction-gundam-pg-strike-freedom-box",
287
287
  title: "Bandai Gunpla PG 1/60 Strike Freedom Gundam — Factory Sealed (AUCTION ENDED)",
288
288
  description: "AUCTION CLOSED — This auction has ended. Final winning bid: ₹29,999. A factory-sealed Bandai Perfect Grade 1/60 Strike Freedom Gundam — Bandai's magnum opus kit, widely regarded as the most complex and visually stunning Gunpla ever produced. The PG 1/60 stands 37 cm tall assembled, features 500+ parts, full LED lighting system runner (sold separately), internal frame with gold-plated parts, wing of light effect set, and METEOR unit attachment. The winner has been notified and shipment is being arranged.",
289
- category: "category-gunpla",
290
- categoryName: "Gunpla",
289
+ categorySlugs: ["category-gunpla"],
290
+ categoryNames: ["Gunpla"],
291
291
  brand: "Bandai",
292
292
  brandSlug: "brand-bandai",
293
293
  auctionEndDate: daysAgo(7),
@@ -349,8 +349,8 @@ const _rawProductsAuctionsSeedData = [
349
349
  slug: "auction-pokemon-mew-1st-edition-psa10",
350
350
  title: "Pokémon Base Set 1st Edition Mew Promo #8 — PSA 10 GEM MINT (AUCTION)",
351
351
  description: "A PSA 10 GEM MINT 1st Edition Mew Promo card (#8, Ancient Mew alt art) — one of the rarest PSA 10s in existence due to the delicate nature of the foil stock used in this promo. The Ancient Mew promotional card was distributed with Pokémon: The Movie 2000 tickets in Japan and the US. This copy has four perfect corners, flawless surface, and perfect centering under the PSA slab. PSA population report shows fewer than 50 PSA 10s of this card exist globally. Opening bid ₹99,999. Reserve met.",
352
- category: "category-vintage-tcg",
353
- categoryName: "Vintage TCG",
352
+ categorySlugs: ["category-vintage-tcg"],
353
+ categoryNames: ["Vintage TCG"],
354
354
  brand: "The Pokémon Company",
355
355
  brandSlug: "brand-pokemon-company",
356
356
  auctionEndDate: hoursAhead(24),
@@ -405,8 +405,8 @@ const _rawProductsAuctionsSeedData = [
405
405
  slug: "auction-yugioh-blue-eyes-lob-1st-psa9",
406
406
  title: "Yu-Gi-Oh! Blue-Eyes White Dragon — LOB-001 1st Edition PSA 9 MINT (AUCTION)",
407
407
  description: "The most iconic card in Yu-Gi-Oh! — Blue-Eyes White Dragon (LOB-001) in 1st Edition, graded PSA 9 MINT. This is the first-print 1st Edition Blue-Eyes from the original Legend of Blue Eyes White Dragon set, identifiable by the 1st Edition stamp and the original Konami of America watermark text. PSA 9 MINT: four near-perfect corners, excellent surface, no visible scratches, well-centred. The Blue-Eyes 1st Edition LOB is a cornerstone of any serious Yu-Gi-Oh! investment collection and has shown consistent appreciation over 20 years.",
408
- category: "category-vintage-tcg",
409
- categoryName: "Vintage TCG",
408
+ categorySlugs: ["category-vintage-tcg"],
409
+ categoryNames: ["Vintage TCG"],
410
410
  brand: "Konami",
411
411
  brandSlug: "brand-konami",
412
412
  auctionEndDate: hoursAhead(72),
@@ -461,8 +461,8 @@ const _rawProductsAuctionsSeedData = [
461
461
  slug: "auction-hot-wheels-redline-deora-japan",
462
462
  title: "Hot Wheels Redline 1968 Deora — Spectraflame Copper (Japan-sourced, VG+, AUCTION)",
463
463
  description: "1968 Hot Wheels Redline Deora in the rare Spectraflame Copper finish — sourced from a Japanese Redline collector through the Tokyo Toy Show. Copper Deoras are considerably rarer than the standard aqua version, with fewer units produced and an extremely high attrition rate due to the delicate copper Spectraflame. This example is in Very Good Plus (VG+) condition: copper paint at approximately 90% vibrancy, both surfboards present, red-line tyres intact, all four wheels spin. One minor nick on the passenger door — visible in photos. Accompanied by a provenance letter from the Japanese collector.",
464
- category: "category-hot-wheels",
465
- categoryName: "Hot Wheels",
464
+ categorySlugs: ["category-hot-wheels"],
465
+ categoryNames: ["Hot Wheels"],
466
466
  brand: "Hot Wheels",
467
467
  brandSlug: "brand-hot-wheels",
468
468
  auctionEndDate: hoursAhead(36),
@@ -518,8 +518,8 @@ const _rawProductsAuctionsSeedData = [
518
518
  slug: "auction-gundam-pg-astray-red-frame",
519
519
  title: "Bandai Gunpla PG 1/60 Astray Red Frame — Factory Sealed (UPCOMING AUCTION, 5 Days)",
520
520
  description: "Upcoming auction for a factory-sealed Bandai Perfect Grade 1/60 MBF-P02 Gundam Astray Red Frame — one of the most visually striking PG kits ever made, featuring the iconic Gerbera Straight katana, red colour scheme, and articulated flight pack. The PG Astray stands 30cm assembled with 300+ parts including a complex inner frame. Factory sealed in original shrink wrap — never opened. Opens to bidding in 5 days. No reserve on this lot — opening bid ₹9,999.",
521
- category: "category-gunpla",
522
- categoryName: "Gunpla",
521
+ categorySlugs: ["category-gunpla"],
522
+ categoryNames: ["Gunpla"],
523
523
  brand: "Bandai",
524
524
  brandSlug: "brand-bandai",
525
525
  auctionEndDate: daysAhead(12),
@@ -572,8 +572,8 @@ const _rawProductsAuctionsSeedData = [
572
572
  slug: "auction-nendoroid-miku-100-limited",
573
573
  title: "Good Smile Company Nendoroid Hatsune Miku #100 (Original Release, Rare) — AUCTION",
574
574
  description: "The original 2009 Good Smile Company Nendoroid Hatsune Miku #100 — the first Miku Nendoroid ever produced and the figure that launched the Nendoroid line into global fame. This is an original 2009 first-release box, not a re-release. Identifiable by the original box artwork (pre-2.0 box design) and the 2009 copyright date on the base. Condition: box is Very Good (minor shelf wear), figure is Near Mint — all accessories present including 3 faces, stand, and original inner tray. An absolute piece of Nendoroid history.",
575
- category: "category-nendoroids-chibis",
576
- categoryName: "Nendoroids & Chibis",
575
+ categorySlugs: ["category-nendoroids-chibis"],
576
+ categoryNames: ["Nendoroids & Chibis"],
577
577
  brand: "Good Smile Company",
578
578
  brandSlug: "brand-good-smile",
579
579
  auctionEndDate: hoursAhead(4),
@@ -628,8 +628,8 @@ const _rawProductsAuctionsSeedData = [
628
628
  slug: "auction-bandai-dbz-bulma-vintage",
629
629
  title: "Bandai Dragon Ball Z Bulma Vintage Figure — 1989 First-Run (AUCTION ENDED)",
630
630
  description: "AUCTION CLOSED — This auction has ended. Final winning bid: ₹7,999. A rare 1989 first-run Bandai Dragon Ball Z Bulma figure from the original Bandai Japanese toy line, released to coincide with the DBZ anime broadcast. This early figure has the original Bandai stamp on the base, painted hair and face details accurate to the original 1989 anime character sheet, and all original accessories. Condition is Good (G) — honest display wear, original paint throughout, no missing parts. Sourced from a Tokyo toy collector through the 2024 Japan trip.",
631
- category: "category-vintage-figures",
632
- categoryName: "Vintage Figures",
631
+ categorySlugs: ["category-vintage-figures"],
632
+ categoryNames: ["Vintage Figures"],
633
633
  brand: "Bandai",
634
634
  brandSlug: "brand-bandai",
635
635
  auctionEndDate: daysAgo(30),
@@ -693,8 +693,8 @@ const _rawProductsAuctionsSeedData = [
693
693
  slug: "auction-pokemon-lugia-neo-genesis-psa9",
694
694
  title: "Pokémon Neo Genesis Lugia #9 Holo — PSA 9 MINT (AUCTION)",
695
695
  description: "Neo Genesis Lugia #9 Holo graded PSA 9 MINT — one of the most desirable Neo-era chase cards. Sharp corners, deep blue holo with full mirror, well-centred image. Neo Genesis was the first major post-Base set, and PSA 9 Lugias have a strong appreciation track record. Reserve set at ₹65,000. Authentication confirmed via PSA cert lookup.",
696
- category: "category-vintage-tcg",
697
- categoryName: "Vintage TCG",
696
+ categorySlugs: ["category-vintage-tcg"],
697
+ categoryNames: ["Vintage TCG"],
698
698
  brand: "The Pokémon Company",
699
699
  brandSlug: "brand-pokemon-company",
700
700
  auctionEndDate: hoursAhead(60),
@@ -747,8 +747,8 @@ const _rawProductsAuctionsSeedData = [
747
747
  slug: "auction-funko-stan-lee-glow-chase",
748
748
  title: "Funko Pop Stan Lee Glow-in-the-Dark Chase Variant — Vaulted (AUCTION)",
749
749
  description: "Vaulted Funko Pop Stan Lee Glow-in-the-Dark Chase variant — the 1-in-6 chase exclusive that has appreciated significantly since Marvel's vaulting. Box near-mint with light shelf wear on one corner. Figure mint inside protector. Highly collectible Marvel-themed piece for Funko Pop chase hunters.",
750
- category: "category-funko-pops",
751
- categoryName: "Funko Pops",
750
+ categorySlugs: ["category-funko-pops"],
751
+ categoryNames: ["Funko Pops"],
752
752
  brand: "Funko",
753
753
  brandSlug: "brand-funko",
754
754
  auctionEndDate: hoursAhead(96),
@@ -800,8 +800,8 @@ const _rawProductsAuctionsSeedData = [
800
800
  slug: "auction-beyblade-spriggan-requiem-tournament",
801
801
  title: "Beyblade Burst B-100 Spriggan Requiem — Tournament Limited Edition (AUCTION)",
802
802
  description: "B-100 Spriggan Requiem Tournament Limited Edition — a prize-only release given to top finishers at the 2018 Japan National Tournament. Black recolour with gold accents and engraved serial number. Includes original tournament pouch. One of fewer than 500 produced. Mint condition.",
803
- category: "category-beyblade-burst",
804
- categoryName: "Beyblade Burst",
803
+ categorySlugs: ["category-beyblade-burst"],
804
+ categoryNames: ["Beyblade Burst"],
805
805
  brand: "Beyblade",
806
806
  brandSlug: "brand-beyblade",
807
807
  auctionEndDate: daysAhead(5),
@@ -854,8 +854,8 @@ const _rawProductsAuctionsSeedData = [
854
854
  slug: "auction-pokemon-trophy-pikachu-world",
855
855
  title: "Pokémon Trophy Pikachu World Championships 2006 Promo (UPCOMING AUCTION)",
856
856
  description: "Authenticated Trophy Pikachu from the 2006 World Championships staff-only distribution — one of the rarest modern Pokémon promos. Card-only sale, no slab. Provenance: ex-WCS judge. Auction opens in 4 days. Opening bid ₹4,99,999. No reserve.",
857
- category: "category-vintage-tcg",
858
- categoryName: "Vintage TCG",
857
+ categorySlugs: ["category-vintage-tcg"],
858
+ categoryNames: ["Vintage TCG"],
859
859
  brand: "The Pokémon Company",
860
860
  brandSlug: "brand-pokemon-company",
861
861
  auctionEndDate: daysAhead(11),
@@ -906,8 +906,8 @@ const _rawProductsAuctionsSeedData = [
906
906
  slug: "auction-hot-wheels-th-set-2024",
907
907
  title: "Hot Wheels 2024 Super Treasure Hunt Full Set — All 15 Cars (UPCOMING AUCTION)",
908
908
  description: "Complete 2024 Hot Wheels Super Treasure Hunt full series — all 15 cars assembled over the year via case-breaks. Each in original blister. A complete-year STH set is a rare find. Auction opens in 10 days. No reserve.",
909
- category: "category-hot-wheels",
910
- categoryName: "Hot Wheels",
909
+ categorySlugs: ["category-hot-wheels"],
910
+ categoryNames: ["Hot Wheels"],
911
911
  brand: "Hot Wheels",
912
912
  brandSlug: "brand-hot-wheels",
913
913
  auctionEndDate: daysAhead(17),
@@ -960,8 +960,8 @@ const _rawProductsAuctionsSeedData = [
960
960
  slug: "auction-shf-goku-ultra-instinct",
961
961
  title: "S.H.Figuarts Son Goku Ultra Instinct — Tamashii Limited (AUCTION ENDED)",
962
962
  description: "AUCTION CLOSED — Final winning bid ₹14,999. S.H.Figuarts Goku Ultra Instinct Tamashii Web Exclusive — sealed in original packaging. Winner declared, shipment in progress.",
963
- category: "category-anime-figures",
964
- categoryName: "Anime Figures",
963
+ categorySlugs: ["category-anime-figures"],
964
+ categoryNames: ["Anime Figures"],
965
965
  brand: "Bandai",
966
966
  brandSlug: "brand-bandai",
967
967
  auctionEndDate: daysAgo(3),
@@ -1009,8 +1009,8 @@ const _rawProductsAuctionsSeedData = [
1009
1009
  slug: "auction-pokemon-blastoise-shadowless-bgs",
1010
1010
  title: "Pokémon Base Set Shadowless Blastoise #2 Holo — BGS 8.5 (AUCTION ENDED)",
1011
1011
  description: "AUCTION CLOSED — Final bid ₹39,999. Shadowless Base Set Blastoise graded BGS 8.5. Winner notified, slab dispatched.",
1012
- category: "category-vintage-tcg",
1013
- categoryName: "Vintage TCG",
1012
+ categorySlugs: ["category-vintage-tcg"],
1013
+ categoryNames: ["Vintage TCG"],
1014
1014
  brand: "The Pokémon Company",
1015
1015
  brandSlug: "brand-pokemon-company",
1016
1016
  auctionEndDate: daysAgo(14),
@@ -1058,8 +1058,8 @@ const _rawProductsAuctionsSeedData = [
1058
1058
  slug: "auction-vintage-tomica-skyline-no-reserve-fail",
1059
1059
  title: "Vintage Tomica Nissan Skyline GT-R Hakosuka 1973 — Reserve Not Met (AUCTION ENDED)",
1060
1060
  description: "AUCTION CLOSED — Reserve not met. Highest bid ₹4,999 fell short of the ₹8,000 reserve. Listing kept for record. Item remains with seller and may be relisted.",
1061
- category: "category-tomica-premium",
1062
- categoryName: "Tomica",
1061
+ categorySlugs: ["category-tomica-premium"],
1062
+ categoryNames: ["Tomica"],
1063
1063
  brand: "Takara Tomy",
1064
1064
  brandSlug: "brand-takara-tomy",
1065
1065
  auctionEndDate: daysAgo(10),
@@ -1107,8 +1107,8 @@ const _rawProductsAuctionsSeedData = [
1107
1107
  slug: "auction-vintage-yugioh-thousand-dragon-fail",
1108
1108
  title: "Yu-Gi-Oh! Thousand Dragon LOB-040 1st Edition — Zero Bids (AUCTION ENDED)",
1109
1109
  description: "AUCTION CLOSED — No bids received. Opening bid of ₹9,999 was too high relative to recent comparables. Item remains with seller. Listing kept for analytics record.",
1110
- category: "category-vintage-tcg",
1111
- categoryName: "Vintage TCG",
1110
+ categorySlugs: ["category-vintage-tcg"],
1111
+ categoryNames: ["Vintage TCG"],
1112
1112
  brand: "Konami",
1113
1113
  brandSlug: "brand-konami",
1114
1114
  auctionEndDate: daysAgo(5),
@@ -16,8 +16,8 @@ const _rawProductsPreOrdersSeedData = [
16
16
  slug: "preorder-beyblade-x-bx10-booster",
17
17
  title: "PRE-ORDER: Beyblade X BX-10 Dran Dagger Booster — Official Takara Tomy (Ships ~45 Days)",
18
18
  description: "Pre-order the BX-10 Dran Dagger Booster from the latest Beyblade X wave — authenticated Takara Tomy Japan stock. BX-10 Dran Dagger features the Dagger 3 blade with an aggressive attack profile and new DB driver for explosive Extreme Dash (X-Dash) manoeuvres. Deposit 30% (₹449.70) now and pay the remaining ₹1,049.30 on shipment confirmation. Estimated dispatch in 45 days from Japan warehouse — direct Takara Tomy import.",
19
- category: "category-beyblade-x",
20
- categoryName: "Beyblade X",
19
+ categorySlugs: ["category-beyblade-x"],
20
+ categoryNames: ["Beyblade X"],
21
21
  brand: "Beyblade",
22
22
  brandSlug: "brand-beyblade",
23
23
  preOrderDeliveryDate: daysAhead(45),
@@ -78,8 +78,8 @@ const _rawProductsPreOrdersSeedData = [
78
78
  slug: "preorder-pokemon-sv5-booster-box",
79
79
  title: "PRE-ORDER: Pokémon TCG Scarlet & Violet — Shrouded Fable Booster Box (36 Packs, Ships ~60 Days)",
80
80
  description: "Pre-order the sealed Scarlet & Violet — Shrouded Fable Booster Box (36 packs) before the official India release. SV Shrouded Fable focuses on the mysterious Pecharunt and features returning Pokémon as shiny Illustration Rare special art cards. A pivotal investment set with high pull rates for gold and special illustration rares. Deposit 30% (₹2,999) now. Remaining ₹6,999 charged on shipment confirmation. Estimated 60-day window to official India release via authorised distributor.",
81
- category: "category-sealed-product",
82
- categoryName: "Sealed Product",
81
+ categorySlugs: ["category-sealed-product"],
82
+ categoryNames: ["Sealed Product"],
83
83
  brand: "The Pokémon Company",
84
84
  brandSlug: "brand-pokemon-company",
85
85
  preOrderDeliveryDate: daysAhead(60),
@@ -141,8 +141,8 @@ const _rawProductsPreOrdersSeedData = [
141
141
  slug: "preorder-shf-broly-super-hero",
142
142
  title: "PRE-ORDER: Bandai S.H.Figuarts Broly (Dragon Ball Super: Super Hero Ver.) — Ships ~30 Days",
143
143
  description: "Pre-order the highly anticipated Bandai S.H.Figuarts Broly from Dragon Ball Super: Super Hero — Tamashii Web Exclusive. This figure captures Broly in his Super Hero movie design with an all-new sculpt: massive body with enhanced muscle detail, rage expression faceplate, green ki effect parts, and four pairs of interchangeable hands. Height approximately 18 cm. Estimated 30-day window to Japan warehouse shipment. 50% deposit required — Tamashii exclusives ship in limited quantities and sell out fast.",
144
- category: "category-poseable-figures",
145
- categoryName: "Poseable Action Figures",
144
+ categorySlugs: ["category-poseable-figures"],
145
+ categoryNames: ["Poseable Action Figures"],
146
146
  brand: "Bandai",
147
147
  brandSlug: "brand-bandai",
148
148
  preOrderDeliveryDate: daysAhead(30),
@@ -204,8 +204,8 @@ const _rawProductsPreOrdersSeedData = [
204
204
  slug: "preorder-gundam-pg-unicorn-ver15",
205
205
  title: "UPCOMING PRE-ORDER: Bandai Gunpla PG 1/60 Unicorn Gundam Ver. 1.5 — Pre-Orders Open in ~14 Days",
206
206
  description: "Coming soon: the Bandai Perfect Grade 1/60 Unicorn Gundam Ver. 1.5 — a revised and enhanced version of the legendary PG Unicorn featuring improved transformation mechanism, updated LED unit compatibility, and revised psychoframe effect parts. The PG Unicorn is one of Bandai's greatest engineering achievements: transforms between Unicorn Mode (white armour closed) and Destroy Mode (psychoframe exposed) with 500+ parts. Est. delivery 120 days from pre-order open. Register your interest now to be notified when pre-orders open in approximately 14 days.",
207
- category: "category-gunpla",
208
- categoryName: "Gunpla",
207
+ categorySlugs: ["category-gunpla"],
208
+ categoryNames: ["Gunpla"],
209
209
  brand: "Bandai",
210
210
  brandSlug: "brand-bandai",
211
211
  preOrderDeliveryDate: daysAhead(134),
@@ -267,8 +267,8 @@ const _rawProductsPreOrdersSeedData = [
267
267
  slug: "preorder-pokemon-stellar-crown-etb",
268
268
  title: "PRE-ORDER: Pokémon TCG Scarlet & Violet — Stellar Crown Elite Trainer Box (Ships ~30 Days)",
269
269
  description: "Pre-order the Scarlet & Violet — Stellar Crown Elite Trainer Box before official India release. Stellar Crown introduces new Stellar Crown ex Pokémon and the Terastallization mechanic at the card level. Each ETB contains 9 booster packs, 65 card sleeves, 45 energy cards, and player accessories. Deposit 30% (₹1,349) now, balance of ₹3,149 charged on shipment confirmation. Estimated 30-day window — directly from authorised distributor.",
270
- category: "category-pokemon-tcg",
271
- categoryName: "Pokémon TCG",
270
+ categorySlugs: ["category-pokemon-tcg"],
271
+ categoryNames: ["Pokémon TCG"],
272
272
  brand: "The Pokémon Company",
273
273
  brandSlug: "brand-pokemon-company",
274
274
  preOrderDeliveryDate: daysAhead(30),
@@ -320,8 +320,8 @@ const _rawProductsPreOrdersSeedData = [
320
320
  slug: "preorder-beyblade-x-bx20-phoenix-wing",
321
321
  title: "PRE-ORDER: Beyblade X BX-20 Phoenix Wing Starter Set — Official Takara Tomy (Ships ~60 Days)",
322
322
  description: "Pre-order the next-gen Beyblade X BX-20 Phoenix Wing starter set — the most anticipated release in the Beyblade X second wave. Phoenix Wing features the redesigned Wing 5 blade with aerodynamic profile adjustments for improved X-Dash trajectory control, and the new Phoenix driver for balance-type play. This is a Japan-warehouse pre-order — direct Takara Tomy import. Deposit 30% (₹599.70) now, balance charged on shipment confirmation in approximately 60 days.",
323
- category: "category-beyblade-x",
324
- categoryName: "Beyblade X",
323
+ categorySlugs: ["category-beyblade-x"],
324
+ categoryNames: ["Beyblade X"],
325
325
  brand: "Beyblade",
326
326
  brandSlug: "brand-beyblade",
327
327
  preOrderDeliveryDate: daysAhead(60),
@@ -373,8 +373,8 @@ const _rawProductsPreOrdersSeedData = [
373
373
  slug: "preorder-gundam-rg-hi-nu-verka",
374
374
  title: "PRE-ORDER: Bandai Gunpla RG 1/144 Hi-ν Gundam Ver.Ka — Real Grade Kit (Ships ~90 Days)",
375
375
  description: "Pre-order the highly anticipated RG 1/144 Hi-ν Gundam Ver.Ka — a Real Grade adaptation of Hajime Katoki's definitive Hi-Nu design featuring the iconic asymmetric fin funnel array in purple. This RG features pre-coloured inner frame runners, the complete 6-fin funnel set in deployable configuration, Hi-Mega Cannon effect parts, and Beam Sabre effects. Estimated 90-day window from Japan warehouse dispatch. 30% deposit locks your unit — limited to 25 units through Gundam Galaxy.",
376
- category: "category-gunpla",
377
- categoryName: "Gunpla",
376
+ categorySlugs: ["category-gunpla"],
377
+ categoryNames: ["Gunpla"],
378
378
  brand: "Bandai",
379
379
  brandSlug: "brand-bandai",
380
380
  preOrderDeliveryDate: daysAhead(90),
@@ -426,8 +426,8 @@ const _rawProductsPreOrdersSeedData = [
426
426
  slug: "preorder-hot-wheels-rlc-2026",
427
427
  title: "SOLD OUT: Hot Wheels Red Line Club (RLC) 2026 Annual Membership — Pre-Order Closed",
428
428
  description: "SOLD OUT — Pre-orders for the Hot Wheels Red Line Club (RLC) 2026 Annual Membership have closed. All 15 allocated membership slots have been reserved. RLC Annual Membership entitles members to purchase all 2026 RLC exclusive cars (approx. 6–8 cars per year), first access to Hot Wheels Collectors events, and a membership card. This listing is maintained for reference — join our waitlist by messaging the store for cancellation availability. Membership price was ₹6,499.",
429
- category: "category-hot-wheels",
430
- categoryName: "Hot Wheels",
429
+ categorySlugs: ["category-hot-wheels"],
430
+ categoryNames: ["Hot Wheels"],
431
431
  brand: "Hot Wheels",
432
432
  brandSlug: "brand-hot-wheels",
433
433
  preOrderDeliveryDate: daysAhead(180),
@@ -18,8 +18,8 @@ const _rawProductsPrizeDrawsSeedData = [
18
18
  slug: "prize-pokemon-mystery-box-june",
19
19
  title: "Pokémon Mystery Box — June Mega Draw",
20
20
  description: "10 sealed Pokémon TCG mystery prizes. Each entry gives you a fair shot at one of the 10 prizes — from a Charizard-themed ETB to a genuine PSA 9 Base Set holo. Reveal opens June 25, 10:00 IST. Non-refundable digital entry.",
21
- category: "category-pokemon-tcg",
22
- categoryName: "Pokémon TCG",
21
+ categorySlugs: ["category-pokemon-tcg"],
22
+ categoryNames: ["Pokémon TCG"],
23
23
  brand: "The Pokémon Company",
24
24
  brandSlug: "brand-pokemon-company",
25
25
  price: 500, // ₹5 per entry (matches pricePerEntry; price is the unit cost for cart totals)
@@ -68,8 +68,8 @@ const _rawProductsPrizeDrawsSeedData = [
68
68
  slug: "prize-hot-wheels-treasure-hunt",
69
69
  title: "Hot Wheels Super Treasure Hunt Draw",
70
70
  description: "8 confirmed Super Treasure Hunt Hot Wheels — including a 1969 Volkswagen Squareback, Datsun 510, and Custom Mustang. Single entry, single reveal, single prize. RNG verified post-reveal on GitHub.",
71
- category: "category-diecast-vehicles",
72
- categoryName: "Diecast Vehicles",
71
+ categorySlugs: ["category-diecast-vehicles"],
72
+ categoryNames: ["Diecast Vehicles"],
73
73
  brand: "Hot Wheels",
74
74
  brandSlug: "brand-hot-wheels",
75
75
  price: 29900, // ₹299 per entry