@mohasinac/appkit 4.11.3 → 4.12.1

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 (160) hide show
  1. package/dist/_internal/server/features/auctions/service.d.ts +7 -1
  2. package/dist/_internal/server/features/auctions/service.js +13 -5
  3. package/dist/_internal/server/features/checkout/actions.d.ts +36 -18
  4. package/dist/_internal/server/features/checkout/actions.js +127 -45
  5. package/dist/_internal/server/features/orders/actions.js +5 -3
  6. package/dist/_internal/server/features/orders/adapters.js +13 -0
  7. package/dist/_internal/server/features/products/list-public.d.ts +28 -0
  8. package/dist/_internal/server/features/products/list-public.js +92 -0
  9. package/dist/_internal/server/functions/firestore.d.ts +1 -2
  10. package/dist/_internal/server/functions/firestore.js +1 -9
  11. package/dist/_internal/server/jobs/core/auctionSettlement.js +5 -2
  12. package/dist/_internal/server/jobs/core/index.d.ts +0 -1
  13. package/dist/_internal/server/jobs/core/index.js +0 -1
  14. package/dist/_internal/server/jobs/core/offerExpiry.js +33 -1
  15. package/dist/_internal/server/jobs/handlers/index.d.ts +1 -2
  16. package/dist/_internal/server/jobs/handlers/index.js +1 -2
  17. package/dist/_internal/shared/checkout/lanes.d.ts +20 -0
  18. package/dist/_internal/shared/checkout/lanes.js +28 -0
  19. package/dist/_internal/shared/features/auctions/config.d.ts +34 -0
  20. package/dist/_internal/shared/features/auctions/config.js +47 -3
  21. package/dist/_internal/shared/features/checkout/config.d.ts +4 -0
  22. package/dist/_internal/shared/features/checkout/config.js +8 -0
  23. package/dist/_internal/shared/fees/calculator.d.ts +34 -2
  24. package/dist/_internal/shared/fees/calculator.js +45 -1
  25. package/dist/_internal/shared/listing-types/auction/config.js +1 -1
  26. package/dist/_internal/shared/listing-types/digital-code/config.js +1 -1
  27. package/dist/_internal/shared/listing-types/live/config.js +1 -1
  28. package/dist/_internal/shared/listing-types/pre-order/config.js +1 -1
  29. package/dist/client.d.ts +7 -1
  30. package/dist/client.js +4 -1
  31. package/dist/constants/api-endpoints.d.ts +6 -0
  32. package/dist/constants/api-endpoints.js +2 -0
  33. package/dist/features/account/components/NotificationBell.js +1 -1
  34. package/dist/features/admin/components/AdminAddressesView.js +18 -10
  35. package/dist/features/admin/components/AdminArtView.d.ts +9 -0
  36. package/dist/features/admin/components/AdminArtView.js +11 -35
  37. package/dist/features/admin/components/AdminClassifiedView.d.ts +9 -0
  38. package/dist/features/admin/components/AdminClassifiedView.js +11 -35
  39. package/dist/features/admin/components/AdminDigitalCodesView.d.ts +9 -0
  40. package/dist/features/admin/components/AdminDigitalCodesView.js +11 -42
  41. package/dist/features/admin/components/AdminLiveView.d.ts +9 -0
  42. package/dist/features/admin/components/AdminLiveView.js +11 -41
  43. package/dist/features/admin/components/AdminNotificationsView.js +4 -1
  44. package/dist/features/admin/components/AdminOrderEditorView.d.ts +14 -1
  45. package/dist/features/admin/components/AdminOrderEditorView.js +18 -5
  46. package/dist/features/admin/components/AdminOrdersView.js +15 -1
  47. package/dist/features/admin/components/AdminPaymentMethodsView.js +15 -10
  48. package/dist/features/admin/components/AdminSiteConfigGuideView.js +1 -1
  49. package/dist/features/admin/components/AdminSiteSettingsView.js +4 -2
  50. package/dist/features/admin/components/AdminStickersView.d.ts +9 -0
  51. package/dist/features/admin/components/AdminStickersView.js +11 -35
  52. package/dist/features/admin/hooks/useAdminListing.js +7 -2
  53. package/dist/features/admin/schemas/firestore.d.ts +5 -0
  54. package/dist/features/admin/schemas/firestore.js +1 -0
  55. package/dist/features/auctions/actions/bid-actions.js +73 -11
  56. package/dist/features/auctions/components/AuctionDetailPageView.js +8 -2
  57. package/dist/features/auctions/components/MarketplaceAuctionCard.js +3 -3
  58. package/dist/features/auctions/components/PlaceBidFormClient.js +89 -14
  59. package/dist/features/auctions/schemas/bid-input.d.ts +19 -6
  60. package/dist/features/auctions/schemas/bid-input.js +19 -7
  61. package/dist/features/auth/repository/user.repository.js +6 -0
  62. package/dist/features/cart/components/CartDrawer.d.ts +9 -1
  63. package/dist/features/cart/components/CartDrawer.js +4 -3
  64. package/dist/features/cart/components/CartPriceBreakdown.d.ts +61 -0
  65. package/dist/features/cart/components/CartPriceBreakdown.js +25 -0
  66. package/dist/features/cart/components/StoreAddonsPicker.d.ts +47 -0
  67. package/dist/features/cart/components/StoreAddonsPicker.js +21 -0
  68. package/dist/features/cart/components/index.d.ts +4 -0
  69. package/dist/features/cart/components/index.js +2 -0
  70. package/dist/features/cart/repository/cart.repository.d.ts +20 -2
  71. package/dist/features/cart/repository/cart.repository.js +49 -0
  72. package/dist/features/cart/schemas/firestore.d.ts +26 -0
  73. package/dist/features/faq/components/FAQHelpfulButtons.js +2 -2
  74. package/dist/features/filters/FilterFacetSection.js +1 -1
  75. package/dist/features/homepage/components/WhatsAppCommunitySection.js +1 -1
  76. package/dist/features/layout/BackToTop.js +1 -1
  77. package/dist/features/layout/BottomActions.js +38 -5
  78. package/dist/features/layout/BottomActionsContext.d.ts +12 -0
  79. package/dist/features/layout/BottomActionsContext.js +5 -0
  80. package/dist/features/layout/FooterLayout.js +2 -2
  81. package/dist/features/layout/TitleBarLayout.js +1 -1
  82. package/dist/features/layout/hooks/useBottomActions.d.ts +6 -0
  83. package/dist/features/layout/hooks/useBottomActions.js +11 -1
  84. package/dist/features/orders/components/OrderAddonBadges.d.ts +36 -0
  85. package/dist/features/orders/components/OrderAddonBadges.js +28 -0
  86. package/dist/features/orders/components/index.d.ts +1 -0
  87. package/dist/features/orders/components/index.js +1 -0
  88. package/dist/features/orders/repository/orders.repository.d.ts +32 -0
  89. package/dist/features/orders/repository/orders.repository.js +14 -0
  90. package/dist/features/orders/types/index.d.ts +22 -0
  91. package/dist/features/pre-orders/components/MarketplacePreorderCard.js +3 -3
  92. package/dist/features/products/components/ArtStickersListView.js +5 -4
  93. package/dist/features/products/components/MarketplaceBundleCard.js +2 -2
  94. package/dist/features/products/components/MarketplacePrizeDrawCard.js +2 -2
  95. package/dist/features/products/components/PrizeDrawCollage.js +1 -1
  96. package/dist/features/products/components/PrizeDrawItemsEditor.js +1 -1
  97. package/dist/features/products/components/PrizeDrawsListingView.js +18 -33
  98. package/dist/features/products/components/ProductDetailPageView.js +1 -1
  99. package/dist/features/products/components/ProductGrid.js +3 -3
  100. package/dist/features/products/components/ProductsIndexListing.js +87 -11
  101. package/dist/features/products/components/ProductsIndexPageView.js +14 -2
  102. package/dist/features/products/config/listing-type-listing-config.d.ts +31 -0
  103. package/dist/features/products/config/listing-type-listing-config.js +74 -0
  104. package/dist/features/products/hooks/useProducts.js +14 -0
  105. package/dist/features/products/repository/products.repository.d.ts +0 -4
  106. package/dist/features/products/repository/products.repository.js +0 -15
  107. package/dist/features/products/types/index.d.ts +15 -0
  108. package/dist/features/promotions/repository/coupons.repository.d.ts +12 -0
  109. package/dist/features/promotions/repository/coupons.repository.js +12 -0
  110. package/dist/features/seller/components/SellerOrdersView.js +2 -1
  111. package/dist/features/seller/components/SellerSidebar.js +1 -1
  112. package/dist/features/stores/components/StoreArtStickersPageView.d.ts +21 -0
  113. package/dist/features/stores/components/StoreArtStickersPageView.js +30 -0
  114. package/dist/features/stores/components/StoreAuctionsPageView.d.ts +4 -1
  115. package/dist/features/stores/components/StoreAuctionsPageView.js +17 -17
  116. package/dist/features/stores/components/StoreClassifiedsListing.js +7 -0
  117. package/dist/features/stores/components/StoreClassifiedsPageView.d.ts +4 -1
  118. package/dist/features/stores/components/StoreClassifiedsPageView.js +16 -12
  119. package/dist/features/stores/components/StoreDetailLayoutView.js +4 -3
  120. package/dist/features/stores/components/StoreDigitalCodesListing.js +5 -0
  121. package/dist/features/stores/components/StoreDigitalCodesPageView.d.ts +4 -1
  122. package/dist/features/stores/components/StoreDigitalCodesPageView.js +16 -12
  123. package/dist/features/stores/components/StoreLiveItemsListing.js +7 -0
  124. package/dist/features/stores/components/StoreLiveItemsPageView.d.ts +4 -1
  125. package/dist/features/stores/components/StoreLiveItemsPageView.js +16 -12
  126. package/dist/features/stores/components/StorePreOrdersPageView.d.ts +4 -1
  127. package/dist/features/stores/components/StorePreOrdersPageView.js +17 -17
  128. package/dist/features/stores/components/StorePrizeDrawsPageView.d.ts +4 -8
  129. package/dist/features/stores/components/StorePrizeDrawsPageView.js +17 -22
  130. package/dist/features/stores/components/StoreProductsListing.d.ts +7 -1
  131. package/dist/features/stores/components/StoreProductsListing.js +3 -2
  132. package/dist/features/stores/components/StoreProductsPageView.d.ts +1 -1
  133. package/dist/features/stores/components/StoreProductsPageView.js +16 -21
  134. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +875 -0
  135. package/dist/features/whatsapp-bot/components/WhatsAppChatButton.js +1 -1
  136. package/dist/jobs.d.ts +1 -1
  137. package/dist/jobs.js +1 -1
  138. package/dist/next/routing/route-map.d.ts +2 -0
  139. package/dist/next/routing/route-map.js +5 -0
  140. package/dist/seed/homepage-sections-seed-data.js +5 -1
  141. package/dist/seed/reviews-seed-data.js +52 -0
  142. package/dist/seed/site-settings-seed-data.js +18 -0
  143. package/dist/server-entry.d.ts +1 -0
  144. package/dist/server-entry.js +1 -0
  145. package/dist/styles.css +66 -1
  146. package/dist/tailwind-utilities.css +1 -1
  147. package/dist/tokens/color-pairs.js +1 -0
  148. package/dist/tokens/tokens.css +33 -0
  149. package/dist/ui/components/Button.style.css +21 -0
  150. package/dist/ui/components/Checkbox.d.ts +10 -1
  151. package/dist/ui/components/Checkbox.js +14 -2
  152. package/dist/ui/components/Checkbox.style.css +11 -0
  153. package/dist/ui/components/ImageLightbox.js +7 -4
  154. package/dist/ui/components/surface-tokens.d.ts +7 -0
  155. package/dist/ui/components/surface-tokens.js +7 -0
  156. package/package.json +1 -1
  157. package/dist/_internal/server/jobs/core/onBidPlaced.d.ts +0 -15
  158. package/dist/_internal/server/jobs/core/onBidPlaced.js +0 -63
  159. package/dist/_internal/server/jobs/handlers/onBidPlaced.d.ts +0 -3
  160. package/dist/_internal/server/jobs/handlers/onBidPlaced.js +0 -9
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import Link from "next/link";
3
- const CLS_WA_BTN = "inline-flex items-center gap-[var(--appkit-space-2)] rounded-lg bg-success-surface px-[var(--appkit-space-4)] py-[var(--appkit-space-2)] text-[length:var(--appkit-text-sm)] font-semibold text-white transition-colors hover:bg-success-surface";
3
+ const CLS_WA_BTN = "inline-flex items-center gap-[var(--appkit-space-2)] rounded-lg bg-success-solid px-[var(--appkit-space-4)] py-[var(--appkit-space-2)] text-[length:var(--appkit-text-sm)] font-semibold text-success-on-solid transition-colors hover:brightness-110";
4
4
  export function WhatsAppChatButton({ waNumber, message = "Hi! I have a question.", label = "Chat on WhatsApp", className, }) {
5
5
  const href = `https://wa.me/${waNumber}?text=${encodeURIComponent(message)}`;
6
6
  return (_jsxs(Link, { href: href, target: "_blank", rel: "noopener noreferrer", className: `${CLS_WA_BTN} ${className ?? ""}`, children: [_jsx("svg", { className: "h-4 w-4", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z" }) }), label] }));
package/dist/jobs.d.ts CHANGED
@@ -20,7 +20,7 @@
20
20
  * listingProcessorHandler,
21
21
  * } from "@mohasinac/appkit/jobs";
22
22
  */
23
- export { couponExpiryHandler, offerExpiryHandler, cartPruneHandler, notificationPruneHandler, dailyDataCleanupHandler, cleanupRtdbEventsHandler, auctionSettlementHandler, autoPayoutEligibilityHandler, countersReconcileHandler, onOrderCreateHandler, onOrderStatusChangeHandler, onBidPlacedHandler, onReviewWriteHandler, promotionsHandler, mediaTmpCleanupHandler, pendingOrderTimeoutHandler, productStatsSyncHandler, positionsReconcileHandler, payoutBatchHandler, weeklyPayoutEligibilityHandler, onCategoryWriteHandler, onProductWriteHandler, onStoreWriteHandler, adminAnalyticsHandler, storeAnalyticsHandler, listingProcessorHandler, supportedListingCollections, onPrizeDrawPaymentConfirmedHandler, prizeDrawSoldOutRevealHandler, prizeDrawExpiryRevealHandler, bundleStockSyncHandler, onProductStockChangeHandler, triggerEventRaffleHandler, assignSpinPrizeHandler, draftPruneHandler, onSupportTicketCreateHandler, onSupportTicketUpdateHandler, onUserBanChangeHandler, onScamReportCreateHandler, onScamReportUpdateHandler, bindSchedule, bindDocumentWritten, bindDocumentCreated, bindDocumentUpdated, bindCallable, bindHttps, bindToFirebase, } from "./_internal/server/jobs/index.js";
23
+ export { couponExpiryHandler, offerExpiryHandler, cartPruneHandler, notificationPruneHandler, dailyDataCleanupHandler, cleanupRtdbEventsHandler, auctionSettlementHandler, autoPayoutEligibilityHandler, countersReconcileHandler, onOrderCreateHandler, onOrderStatusChangeHandler, onReviewWriteHandler, promotionsHandler, mediaTmpCleanupHandler, pendingOrderTimeoutHandler, productStatsSyncHandler, positionsReconcileHandler, payoutBatchHandler, weeklyPayoutEligibilityHandler, onCategoryWriteHandler, onProductWriteHandler, onStoreWriteHandler, adminAnalyticsHandler, storeAnalyticsHandler, listingProcessorHandler, supportedListingCollections, onPrizeDrawPaymentConfirmedHandler, prizeDrawSoldOutRevealHandler, prizeDrawExpiryRevealHandler, bundleStockSyncHandler, onProductStockChangeHandler, triggerEventRaffleHandler, assignSpinPrizeHandler, draftPruneHandler, onSupportTicketCreateHandler, onSupportTicketUpdateHandler, onUserBanChangeHandler, onScamReportCreateHandler, onScamReportUpdateHandler, bindSchedule, bindDocumentWritten, bindDocumentCreated, bindDocumentUpdated, bindCallable, bindHttps, bindToFirebase, } from "./_internal/server/jobs/index.js";
24
24
  export { defineFunction, mergeFunctionRegistries, bindAllFromRegistry, APPKIT_FUNCTIONS, APPKIT_FUNCTIONS_BY_NAME, } from "./_internal/server/functions/index.js";
25
25
  export { orderRepository, siteSettingsRepository } from "./repositories/index.js";
26
26
  export type { OrderDocument, OrderDocumentItem } from "./features/orders/index.js";
package/dist/jobs.js CHANGED
@@ -22,7 +22,7 @@
22
22
  */
23
23
  export {
24
24
  // S4–S5: Job handlers (pure, framework-agnostic)
25
- couponExpiryHandler, offerExpiryHandler, cartPruneHandler, notificationPruneHandler, dailyDataCleanupHandler, cleanupRtdbEventsHandler, auctionSettlementHandler, autoPayoutEligibilityHandler, countersReconcileHandler, onOrderCreateHandler, onOrderStatusChangeHandler, onBidPlacedHandler, onReviewWriteHandler, promotionsHandler, mediaTmpCleanupHandler, pendingOrderTimeoutHandler, productStatsSyncHandler, positionsReconcileHandler, payoutBatchHandler, weeklyPayoutEligibilityHandler, onCategoryWriteHandler, onProductWriteHandler, onStoreWriteHandler, adminAnalyticsHandler, storeAnalyticsHandler, listingProcessorHandler, supportedListingCollections,
25
+ couponExpiryHandler, offerExpiryHandler, cartPruneHandler, notificationPruneHandler, dailyDataCleanupHandler, cleanupRtdbEventsHandler, auctionSettlementHandler, autoPayoutEligibilityHandler, countersReconcileHandler, onOrderCreateHandler, onOrderStatusChangeHandler, onReviewWriteHandler, promotionsHandler, mediaTmpCleanupHandler, pendingOrderTimeoutHandler, productStatsSyncHandler, positionsReconcileHandler, payoutBatchHandler, weeklyPayoutEligibilityHandler, onCategoryWriteHandler, onProductWriteHandler, onStoreWriteHandler, adminAnalyticsHandler, storeAnalyticsHandler, listingProcessorHandler, supportedListingCollections,
26
26
  // SB1-L (S7-PrizeDraws) — prize-draw reveal redesigned to a fully-automatic model.
27
27
  onPrizeDrawPaymentConfirmedHandler, prizeDrawSoldOutRevealHandler, prizeDrawExpiryRevealHandler, bundleStockSyncHandler,
28
28
  // SB-UNI-V — Firestore onWrite trigger for product stock changes.
@@ -44,6 +44,7 @@ export declare const DEFAULT_ROUTE_MAP: {
44
44
  readonly STORE_CLASSIFIEDS: (storeSlug: string) => string;
45
45
  readonly STORE_DIGITAL_CODES: (storeSlug: string) => string;
46
46
  readonly STORE_LIVE: (storeSlug: string) => string;
47
+ readonly STORE_ART: (storeSlug: string) => string;
47
48
  readonly CATEGORIES: "/categories";
48
49
  readonly CATEGORY_DETAIL: (slug: string) => string;
49
50
  readonly BRANDS: "/brands";
@@ -415,6 +416,7 @@ export declare const ROUTES: {
415
416
  readonly STORE_CLASSIFIEDS: (storeSlug: string) => string;
416
417
  readonly STORE_DIGITAL_CODES: (storeSlug: string) => string;
417
418
  readonly STORE_LIVE: (storeSlug: string) => string;
419
+ readonly STORE_ART: (storeSlug: string) => string;
418
420
  readonly CATEGORIES: "/categories";
419
421
  readonly CATEGORY_DETAIL: (slug: string) => string;
420
422
  readonly BRANDS: "/brands";
@@ -33,6 +33,11 @@ export const DEFAULT_ROUTE_MAP = {
33
33
  STORE_CLASSIFIEDS: (storeSlug) => `/stores/${storeSlug}/classified`,
34
34
  STORE_DIGITAL_CODES: (storeSlug) => `/stores/${storeSlug}/digital-codes`,
35
35
  STORE_LIVE: (storeSlug) => `/stores/${storeSlug}/live`,
36
+ // Combined art + stickers, mirroring the public /art page. The store's
37
+ // "Art & Stickers" tab used to point at STORE_PRODUCTS, which filters to
38
+ // `standard` — so the tab showed a real non-zero count and then landed on
39
+ // a page containing none of those items.
40
+ STORE_ART: (storeSlug) => `/stores/${storeSlug}/art`,
36
41
  CATEGORIES: "/categories",
37
42
  CATEGORY_DETAIL: (slug) => `/categories/${slug}`,
38
43
  BRANDS: "/brands",
@@ -279,7 +279,11 @@ export const homepageSectionsSeedData = [
279
279
  config: {
280
280
  title: "Join the LetItRip Collectors Community",
281
281
  description: "Connect with Indian collectors on WhatsApp. Share pulls, get authentication help, and be first to know about new drops.",
282
- groupLink: "https://chat.whatsapp.com/letitrip-collectors",
282
+ // Real invite. The previous value ("…/letitrip-collectors") was not a valid
283
+ // WhatsApp invite code, so the homepage CTA opened a dead link. Stored
284
+ // canonical — the ?s=/&p=/&mlu= params on a shared link are share-sheet
285
+ // attribution from the copying device, not part of the invite.
286
+ groupLink: "https://chat.whatsapp.com/JOlbdSwhVWYDKujolcBZDr",
283
287
  memberCount: 1200,
284
288
  benefits: [
285
289
  "First look at rare listings before they go live",
@@ -119,4 +119,56 @@ for (let i = 0; i < 65; i++) {
119
119
  updatedAt: daysAgo(daysAgoCreated - 1),
120
120
  });
121
121
  }
122
+ /**
123
+ * A deliberately deep review list on ONE product, so the paginated reviews tab is
124
+ * actually exercisable.
125
+ *
126
+ * The round-robin above spreads 65 reviews across 14 products — 4-5 each, which is
127
+ * below the 10-per-page detail-page size, so pagination could never appear on a product
128
+ * page and the tester checklist cases for it would be untestable. This block pushes
129
+ * "Beyblade Original Dranzer S" to 5 + 14 = 19 approved reviews (2 pages), and spreads
130
+ * ratings across all five stars so the rating filter and the average/distribution
131
+ * summary have something real to act on.
132
+ *
133
+ * Ids and every field are derived from the loop index — no Math.random(), no Date.now()
134
+ * in an id — so `appkit-seed load` stays idempotent (Recurrent Root Cause #25).
135
+ */
136
+ const DEEP_REVIEW_PRODUCT = {
137
+ id: "product-beyblade-original-dranzer-s",
138
+ title: "Beyblade Original Dranzer S",
139
+ store: "store-beyblade-arena",
140
+ };
141
+ for (let i = 0; i < 14; i++) {
142
+ const template = reviewTemplates[i % reviewTemplates.length];
143
+ const buyer = buyers[i % buyers.length];
144
+ // 1..5, cycling — guarantees every star bucket is populated for the rating filter.
145
+ const rating = (i % 5) + 1;
146
+ // Distinct from the main loop's 90-i range so the two sets interleave predictably
147
+ // and "newest first" is verifiable by eye.
148
+ const daysAgoCreated = 28 - i;
149
+ const hasImage = i % 4 === 0;
150
+ _rawReviewsSeedData.push({
151
+ id: `review-dranzer-deep-${i + 1}`,
152
+ productId: DEEP_REVIEW_PRODUCT.id,
153
+ productTitle: DEEP_REVIEW_PRODUCT.title,
154
+ storeId: DEEP_REVIEW_PRODUCT.store,
155
+ userId: buyer.id,
156
+ userName: buyer.name,
157
+ rating,
158
+ title: `${template.title} (${rating}★)`,
159
+ comment: template.comment,
160
+ images: hasImage
161
+ ? [
162
+ seedExtMedia(`https://picsum.photos/seed/review-image-dranzer-deep-${i + 1}/800/800`),
163
+ ]
164
+ : [],
165
+ hasImages: hasImage,
166
+ verified: i % 3 !== 2,
167
+ status: "approved",
168
+ helpfulCount: (i * 3) % 17,
169
+ reportCount: 0,
170
+ createdAt: daysAgo(daysAgoCreated),
171
+ updatedAt: daysAgo(daysAgoCreated),
172
+ });
173
+ }
122
174
  export const reviewsSeedData = _rawReviewsSeedData;
@@ -14,6 +14,7 @@
14
14
  */
15
15
  import { seedExtMedia } from "./_helpers/media";
16
16
  import { ROUTES } from "../next/routing/route-map";
17
+ import { DEFAULT_AUCTION_BID_INCREMENT_TIERS } from "../_internal/shared/features/auctions/config";
17
18
  const NOW = new Date();
18
19
  const daysAgo = (n) => new Date(NOW.getTime() - n * 86400000);
19
20
  const adPlacementsSeed = [
@@ -440,6 +441,23 @@ export const siteSettingsSeedData = {
440
441
  },
441
442
  ],
442
443
  },
444
+ // This block was missing entirely until 2026-08-21, and it is the data-layer
445
+ // half of the "+₹1 / +₹5 / +₹10 quick-bid buttons" bug. `DEFAULT_SITE_SETTINGS_DATA`
446
+ // (features/admin/schemas/firestore.ts) has always carried an `auctionConfig`,
447
+ // but that object is not what writes Firestore — this seed file is, and it
448
+ // declared no `auctionConfig` at all. The seed CLI runs the payload through
449
+ // `stripUndefined()` and writes with `{ merge: true }`, so an absent key is
450
+ // simply skipped: no `appkit-seed load`, however many times it ran, could ever
451
+ // create `auctionConfig.bidIncrementTiers`. Every caller then read
452
+ // `settings.auctionConfig?.bidIncrementTiers ?? []` and resolved the ₹1
453
+ // last-resort increment. Sourced from the shared constant so the seed, the
454
+ // schema default and the admin editor's initial state cannot drift apart —
455
+ // which is exactly what that constant's docstring already claimed.
456
+ auctionConfig: {
457
+ bidIncrementTiers: DEFAULT_AUCTION_BID_INCREMENT_TIERS,
458
+ autoExtendWindowMinutes: 5,
459
+ settlementGracePeriodHours: 24,
460
+ },
443
461
  commissions: {
444
462
  platformFeePercent: 5,
445
463
  gstPercent: 18,
@@ -44,6 +44,7 @@ export { StoreBundlesPageView } from "./features/stores/components/StoreBundlesP
44
44
  export { StoreClassifiedsPageView } from "./features/stores/components/StoreClassifiedsPageView";
45
45
  export { StoreDigitalCodesPageView } from "./features/stores/components/StoreDigitalCodesPageView";
46
46
  export { StoreLiveItemsPageView } from "./features/stores/components/StoreLiveItemsPageView";
47
+ export { StoreArtStickersPageView } from "./features/stores/components/StoreArtStickersPageView";
47
48
  export { getProductForDetail, listSitemapProducts, type SitemapProduct, } from "./_internal/server/features/products/index";
48
49
  export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, type PublicProductListInput, type PublicProductListResult, type PublicProductListOptions, type PublicProductExecutor, type PublicProductQuery, } from "./_internal/server/features/products/index";
49
50
  export { getAuctionForDetail, getProductFeaturesForAuction, } from "./_internal/server/features/auctions/index";
@@ -49,6 +49,7 @@ export { StoreBundlesPageView } from "./features/stores/components/StoreBundlesP
49
49
  export { StoreClassifiedsPageView } from "./features/stores/components/StoreClassifiedsPageView";
50
50
  export { StoreDigitalCodesPageView } from "./features/stores/components/StoreDigitalCodesPageView";
51
51
  export { StoreLiveItemsPageView } from "./features/stores/components/StoreLiveItemsPageView";
52
+ export { StoreArtStickersPageView } from "./features/stores/components/StoreArtStickersPageView";
52
53
  // S2: products data layer — deduped via React.cache()
53
54
  export { getProductForDetail, listSitemapProducts, } from "./_internal/server/features/products/index";
54
55
  export { listPublicProducts, parsePublicProductParams, PUBLIC_PRODUCT_MAX_PAGE_SIZE, } from "./_internal/server/features/products/index";