@mohasinac/appkit 4.11.1 → 4.11.3

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 (212) hide show
  1. package/dist/_internal/server/features/checkout/actions.d.ts +4 -0
  2. package/dist/_internal/server/features/checkout/actions.js +138 -27
  3. package/dist/_internal/server/features/checkout/data.d.ts +10 -0
  4. package/dist/_internal/server/features/checkout/locked-lines.d.ts +30 -0
  5. package/dist/_internal/server/features/checkout/locked-lines.js +116 -0
  6. package/dist/_internal/server/features/orders/adapters.js +7 -0
  7. package/dist/_internal/server/features/products/data.d.ts +12 -3
  8. package/dist/_internal/server/features/products/data.js +55 -4
  9. package/dist/_internal/server/features/products/index.d.ts +2 -1
  10. package/dist/_internal/server/features/products/index.js +2 -1
  11. package/dist/_internal/server/features/products/list-public.d.ts +130 -0
  12. package/dist/_internal/server/features/products/list-public.js +375 -0
  13. package/dist/_internal/server/features/reviews/data.d.ts +1 -1
  14. package/dist/_internal/server/features/reviews/data.js +3 -2
  15. package/dist/_internal/server/features/tester/visibility.js +3 -3
  16. package/dist/_internal/server/jobs/core/auctionSettlement.js +89 -16
  17. package/dist/_internal/server/jobs/core/offerExpiry.js +116 -4
  18. package/dist/_internal/server/jobs/core/testerSandboxCleanup.d.ts +1 -1
  19. package/dist/_internal/server/jobs/core/testerSandboxCleanup.js +4 -1
  20. package/dist/_internal/server/jobs/core/testerSandboxRefresh.js +2 -0
  21. package/dist/_internal/server/jobs/handlers/_helpers.js +4 -1
  22. package/dist/_internal/server/jobs/handlers/messages.d.ts +5 -0
  23. package/dist/_internal/server/jobs/handlers/messages.js +5 -0
  24. package/dist/_internal/shared/checkout/lanes.d.ts +41 -0
  25. package/dist/_internal/shared/checkout/lanes.js +106 -0
  26. package/dist/_internal/shared/checkout/order-math.d.ts +19 -0
  27. package/dist/_internal/shared/checkout/order-math.js +30 -6
  28. package/dist/_internal/shared/features/promotions/schema.d.ts +0 -16
  29. package/dist/_internal/shared/features/promotions/schema.js +0 -2
  30. package/dist/_internal/shared/features/reviews/config.d.ts +8 -1
  31. package/dist/_internal/shared/features/reviews/config.js +8 -1
  32. package/dist/_internal/shared/listing-types/_registry.d.ts +88 -1
  33. package/dist/_internal/shared/listing-types/_registry.js +63 -1
  34. package/dist/_internal/shared/listing-types/art/config.d.ts +59 -0
  35. package/dist/_internal/shared/listing-types/art/config.js +12 -0
  36. package/dist/_internal/shared/listing-types/auction/config.d.ts +53 -0
  37. package/dist/_internal/shared/listing-types/auction/config.js +17 -0
  38. package/dist/_internal/shared/listing-types/classified/config.d.ts +59 -0
  39. package/dist/_internal/shared/listing-types/classified/config.js +14 -0
  40. package/dist/_internal/shared/listing-types/digital-code/config.d.ts +59 -0
  41. package/dist/_internal/shared/listing-types/digital-code/config.js +12 -0
  42. package/dist/_internal/shared/listing-types/feature-flags.d.ts +1 -0
  43. package/dist/_internal/shared/listing-types/feature-flags.js +24 -10
  44. package/dist/_internal/shared/listing-types/live/config.d.ts +59 -0
  45. package/dist/_internal/shared/listing-types/live/config.js +14 -0
  46. package/dist/_internal/shared/listing-types/pre-order/config.d.ts +110 -0
  47. package/dist/_internal/shared/listing-types/pre-order/config.js +14 -0
  48. package/dist/_internal/shared/listing-types/prize-draw/config.d.ts +44 -0
  49. package/dist/_internal/shared/listing-types/prize-draw/config.js +10 -0
  50. package/dist/_internal/shared/listing-types/standard/config.d.ts +59 -0
  51. package/dist/_internal/shared/listing-types/standard/config.js +9 -0
  52. package/dist/_internal/shared/listing-types/stickers/config.d.ts +59 -0
  53. package/dist/_internal/shared/listing-types/stickers/config.js +12 -0
  54. package/dist/client.d.ts +7 -2
  55. package/dist/client.js +8 -2
  56. package/dist/constants/field-names.d.ts +12 -0
  57. package/dist/constants/field-names.js +12 -0
  58. package/dist/constants/table-keys.d.ts +2 -0
  59. package/dist/constants/table-keys.js +2 -0
  60. package/dist/features/account/components/NotificationBell.js +1 -0
  61. package/dist/features/account/components/UserOffersPanel.js +8 -1
  62. package/dist/features/account/components/UserOrdersView.js +27 -5
  63. package/dist/features/admin/actions/notification-actions.js +1 -1
  64. package/dist/features/admin/components/AdminAddressesView.js +3 -1
  65. package/dist/features/admin/components/AdminCouponEditorView.js +1 -4
  66. package/dist/features/admin/components/AdminPaymentMethodsView.js +3 -1
  67. package/dist/features/admin/components/AdminProductsView.js +34 -18
  68. package/dist/features/admin/constants/filter-tabs.d.ts +26 -9
  69. package/dist/features/admin/constants/filter-tabs.js +22 -9
  70. package/dist/features/admin/schemas/firestore.d.ts +2 -1
  71. package/dist/features/admin/schemas/firestore.js +1 -0
  72. package/dist/features/auctions/actions/bid-actions.d.ts +11 -1
  73. package/dist/features/auctions/actions/bid-actions.js +29 -15
  74. package/dist/features/auctions/components/AuctionBidsTable.js +6 -2
  75. package/dist/features/auctions/components/AuctionBottomActions.js +1 -0
  76. package/dist/features/auctions/components/AuctionDetailPageView.js +13 -11
  77. package/dist/features/auctions/components/AuctionsListView.js +12 -53
  78. package/dist/features/auctions/components/PlaceBidFormClient.js +10 -1
  79. package/dist/features/auctions/repository/bid.repository.d.ts +15 -0
  80. package/dist/features/auctions/repository/bid.repository.js +19 -0
  81. package/dist/features/auctions/schemas/firestore.d.ts +11 -1
  82. package/dist/features/auctions/schemas/firestore.js +1 -0
  83. package/dist/features/cart/actions/cart-actions.d.ts +11 -0
  84. package/dist/features/cart/actions/cart-actions.js +24 -0
  85. package/dist/features/cart/repository/cart.repository.d.ts +24 -1
  86. package/dist/features/cart/repository/cart.repository.js +71 -6
  87. package/dist/features/cart/schemas/firestore.d.ts +23 -4
  88. package/dist/features/categories/components/BrandDetailTabs.js +31 -11
  89. package/dist/features/categories/components/CategoryDetailTabs.js +27 -7
  90. package/dist/features/categories/components/CategoryProductsListing.d.ts +9 -1
  91. package/dist/features/categories/components/CategoryProductsListing.js +5 -2
  92. package/dist/features/classified/components/ClassifiedDetailPageView.js +2 -1
  93. package/dist/features/contact/email.js +56 -1
  94. package/dist/features/digital-codes/components/DigitalCodeDetailPageView.js +17 -16
  95. package/dist/features/homepage/components/FeaturedResultsSection.js +1 -1
  96. package/dist/features/homepage/components/SectionCarousel.js +1 -1
  97. package/dist/features/homepage/components/ShopByCategorySection.js +1 -1
  98. package/dist/features/layout/AppLayoutShell.js +9 -2
  99. package/dist/features/layout/BottomActions.js +26 -3
  100. package/dist/features/layout/BottomActionsContext.d.ts +14 -0
  101. package/dist/features/layout/BottomActionsContext.js +13 -1
  102. package/dist/features/layout/hooks/useBottomActions.d.ts +6 -1
  103. package/dist/features/layout/hooks/useBottomActions.js +4 -1
  104. package/dist/features/layout/index.d.ts +1 -1
  105. package/dist/features/live/components/LiveItemDetailPageView.js +7 -6
  106. package/dist/features/orders/repository/orders.repository.d.ts +4 -15
  107. package/dist/features/orders/repository/orders.repository.js +4 -27
  108. package/dist/features/orders/types/index.d.ts +16 -0
  109. package/dist/features/orders/utils/order-splitter.js +14 -2
  110. package/dist/features/pre-orders/components/PreOrderBottomActions.d.ts +1 -1
  111. package/dist/features/pre-orders/components/PreOrderBottomActions.js +3 -19
  112. package/dist/features/pre-orders/components/PreOrdersListView.js +11 -39
  113. package/dist/features/products/components/ArtStickersListView.js +10 -49
  114. package/dist/features/products/components/AuctionsIndexListing.js +1 -2
  115. package/dist/features/products/components/ListingBottomActions.d.ts +28 -0
  116. package/dist/features/products/components/ListingBottomActions.js +25 -0
  117. package/dist/features/products/components/PrizeDrawBottomActions.d.ts +1 -1
  118. package/dist/features/products/components/PrizeDrawBottomActions.js +3 -21
  119. package/dist/features/products/components/ProductDetailActions.js +4 -0
  120. package/dist/features/products/components/ProductDetailPageView.js +7 -7
  121. package/dist/features/products/components/ProductsIndexPageView.js +9 -62
  122. package/dist/features/products/constants/listing-tabs.d.ts +43 -198
  123. package/dist/features/products/constants/listing-tabs.js +71 -58
  124. package/dist/features/products/constants/sieve.d.ts +104 -1
  125. package/dist/features/products/constants/sieve.js +27 -7
  126. package/dist/features/products/repository/products.repository.d.ts +45 -1
  127. package/dist/features/products/repository/products.repository.js +67 -8
  128. package/dist/features/products/utils/listing-badge-variant.d.ts +20 -1
  129. package/dist/features/products/utils/listing-badge-variant.js +26 -1
  130. package/dist/features/products/utils/listing-type.d.ts +24 -0
  131. package/dist/features/products/utils/listing-type.js +48 -0
  132. package/dist/features/promotions/actions/coupon-actions.d.ts +7 -0
  133. package/dist/features/promotions/actions/coupon-actions.js +12 -1
  134. package/dist/features/promotions/actions/coupon-stacking.d.ts +24 -0
  135. package/dist/features/promotions/actions/coupon-stacking.js +21 -0
  136. package/dist/features/promotions/actions/index.d.ts +1 -0
  137. package/dist/features/promotions/actions/index.js +1 -0
  138. package/dist/features/promotions/actions/seller-coupon-actions.d.ts +0 -1
  139. package/dist/features/promotions/actions/seller-coupon-actions.js +0 -1
  140. package/dist/features/promotions/components/CouponHelpDetails.d.ts +20 -0
  141. package/dist/features/promotions/components/CouponHelpDetails.js +17 -0
  142. package/dist/features/promotions/components/CouponsIndexListing.js +2 -1
  143. package/dist/features/promotions/components/index.d.ts +2 -0
  144. package/dist/features/promotions/components/index.js +1 -0
  145. package/dist/features/promotions/constants/coupon-help.d.ts +27 -0
  146. package/dist/features/promotions/constants/coupon-help.js +42 -0
  147. package/dist/features/promotions/repository/coupons.repository.d.ts +10 -1
  148. package/dist/features/promotions/repository/coupons.repository.js +22 -8
  149. package/dist/features/promotions/schemas/firestore.d.ts +0 -1
  150. package/dist/features/promotions/schemas/firestore.js +1 -1
  151. package/dist/features/promotions/schemas/index.d.ts +0 -20
  152. package/dist/features/promotions/schemas/index.js +0 -1
  153. package/dist/features/reviews/actions/review-actions.js +5 -1
  154. package/dist/features/reviews/components/ReviewDetailPageView.js +2 -1
  155. package/dist/features/reviews/components/ReviewFilters.d.ts +7 -1
  156. package/dist/features/reviews/components/ReviewFilters.js +4 -3
  157. package/dist/features/reviews/components/ReviewsIndexListing.d.ts +6 -0
  158. package/dist/features/reviews/components/ReviewsIndexListing.js +9 -109
  159. package/dist/features/reviews/components/ReviewsListingPanel.d.ts +41 -0
  160. package/dist/features/reviews/components/ReviewsListingPanel.js +226 -0
  161. package/dist/features/reviews/components/index.d.ts +2 -0
  162. package/dist/features/reviews/components/index.js +1 -0
  163. package/dist/features/reviews/hooks/useReviews.d.ts +8 -0
  164. package/dist/features/reviews/hooks/useReviews.js +14 -6
  165. package/dist/features/reviews/repository/reviews.repository.d.ts +29 -1
  166. package/dist/features/reviews/repository/reviews.repository.js +77 -41
  167. package/dist/features/reviews/types/index.d.ts +8 -1
  168. package/dist/features/seller/actions/offer-actions.d.ts +6 -0
  169. package/dist/features/seller/actions/offer-actions.js +8 -9
  170. package/dist/features/seller/components/SellerOffersView.d.ts +6 -1
  171. package/dist/features/seller/components/SellerOffersView.js +59 -8
  172. package/dist/features/seller/components/SellerProductsCards.js +2 -2
  173. package/dist/features/seller/components/SellerProductsView.js +21 -18
  174. package/dist/features/seller/repository/offer.repository.d.ts +18 -2
  175. package/dist/features/seller/repository/offer.repository.js +38 -2
  176. package/dist/features/seller/schemas/firestore.d.ts +7 -2
  177. package/dist/features/seller/schemas/firestore.js +3 -0
  178. package/dist/features/seller/schemas/offer-forms.d.ts +12 -0
  179. package/dist/features/seller/schemas/offer-forms.js +28 -0
  180. package/dist/features/stores/actions/store-query-actions.js +1 -1
  181. package/dist/features/stores/components/StoreAuctionsListing.js +5 -11
  182. package/dist/features/stores/components/StorePreOrdersListing.js +6 -11
  183. package/dist/features/stores/components/StoreReviewsListing.d.ts +4 -0
  184. package/dist/features/stores/components/StoreReviewsListing.js +7 -108
  185. package/dist/features/stores/schemas/index.d.ts +2 -2
  186. package/dist/features/tester/seed-data/coupons-tester-seed-data.js +3 -3
  187. package/dist/features/tester/seed-data/index.d.ts +1 -0
  188. package/dist/features/tester/seed-data/index.js +1 -0
  189. package/dist/features/tester/seed-data/offers-tester-seed-data.d.ts +2 -0
  190. package/dist/features/tester/seed-data/offers-tester-seed-data.js +61 -0
  191. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +337 -1
  192. package/dist/index.d.ts +11 -4
  193. package/dist/index.js +15 -3
  194. package/dist/react/hooks/useListingTypeFlags.d.ts +12 -19
  195. package/dist/react/hooks/useListingTypeFlags.js +4 -9
  196. package/dist/schemas/registry.d.ts +0 -12
  197. package/dist/seed/claimed-coupons-seed-data.js +3 -3
  198. package/dist/seed/coupons-seed-data.js +29 -10
  199. package/dist/seed/faq-seed-data.js +2 -2
  200. package/dist/seed/manifest.js +2 -2
  201. package/dist/server-entry.d.ts +1 -0
  202. package/dist/server-entry.js +1 -0
  203. package/dist/server.d.ts +1 -0
  204. package/dist/server.js +3 -0
  205. package/dist/styles.css +44 -39
  206. package/dist/tailwind-utilities.css +1 -1
  207. package/dist/ui/components/FilterChipGroup.d.ts +21 -3
  208. package/dist/ui/components/FilterChipGroup.js +33 -4
  209. package/dist/ui/components/HorizontalScroller.d.ts +1 -2
  210. package/dist/ui/components/HorizontalScroller.js +9 -5
  211. package/dist/ui/components/HorizontalScroller.style.css +43 -38
  212. package/package.json +1 -1
@@ -1,111 +1,10 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useState, useCallback, useMemo } from "react";
4
- import { useUrlTable } from "../../../react/hooks/useUrlTable";
5
- import { Div, ListingFilterDrawer, ListingToolbar, Pagination, Row, Span, Stack, Text, StickyToolbar } from "../../../ui";
6
- import { ReviewCard } from "../../reviews/components/ReviewsList";
7
- import { ReviewFilters, REVIEW_PUBLIC_SORT_OPTIONS } from "../../reviews/components/ReviewFilters";
8
- import { useStoreReviews } from "../hooks/useStores";
9
- import { TABLE_KEYS, VIEW_MODE } from "../../../constants/table-keys";
10
- import { sortBy } from "../../../constants/sort";
11
- import { REVIEW_FIELDS } from "../../../constants/field-names";
12
- const __P = {
13
- p4: "p-[var(--appkit-space-4)]",
14
- };
15
- const __O = {
16
- hidden: "overflow-hidden",
17
- };
18
- const PAGE_SIZE = 12;
19
- const DEFAULT_SORT = sortBy(REVIEW_FIELDS.CREATED_AT);
20
- const FILTER_KEYS = ["rating", TABLE_KEYS.DATE_FROM, TABLE_KEYS.DATE_TO, "hasImages"];
21
- const SORT_OPTION_LABELS = {
22
- sortNewest: "Newest First",
23
- sortOldest: "Oldest First",
24
- sortHighestRated: "Highest Rated",
25
- sortLowestRated: "Lowest Rated",
26
- };
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { ReviewsListingPanel } from "../../reviews/components/ReviewsListingPanel";
4
+ /**
5
+ * The `/stores/[slug]/reviews` tab. Delegates to the shared `ReviewsListingPanel`
6
+ * see the note in `ReviewsIndexListing` for why the two were merged.
7
+ */
27
8
  export function StoreReviewsListing({ storeSlug }) {
28
- const table = useUrlTable({ defaults: { pageSize: String(PAGE_SIZE), sort: DEFAULT_SORT } });
29
- const [searchInput, setSearchInput] = useState(table.get(TABLE_KEYS.QUERY) || "");
30
- const [filterOpen, setFilterOpen] = useState(false);
31
- const [view, setView] = useState(table.get(TABLE_KEYS.VIEW) || VIEW_MODE.GRID);
32
- const handleViewToggle = (next) => {
33
- if (next === VIEW_MODE.TABLE)
34
- return;
35
- setView(next);
36
- table.set(TABLE_KEYS.VIEW, next);
37
- };
38
- const sort = table.get(TABLE_KEYS.SORT) || DEFAULT_SORT;
39
- const currentPage = table.getNumber(TABLE_KEYS.PAGE, 1);
40
- const [pendingFilters, setPendingFilters] = useState(() => Object.fromEntries(FILTER_KEYS.map((k) => [k, table.get(k)])));
41
- const pendingTable = useMemo(() => ({
42
- get: (key) => pendingFilters[key] ?? "",
43
- getNumber: (key, fallback = 0) => {
44
- const v = pendingFilters[key];
45
- if (!v)
46
- return fallback;
47
- const n = Number(v);
48
- return isNaN(n) ? fallback : n;
49
- },
50
- set: (key, value) => setPendingFilters((p) => ({ ...p, [key]: value })),
51
- setMany: (updates) => setPendingFilters((p) => ({ ...p, ...updates })),
52
- clear: (keys) => {
53
- const ks = keys ?? FILTER_KEYS;
54
- setPendingFilters((p) => ({
55
- ...p,
56
- ...Object.fromEntries(ks.map((k) => [k, ""])),
57
- }));
58
- },
59
- setPage: (_) => { },
60
- setPageSize: (_) => { },
61
- setSort: (_) => { },
62
- buildSieveParams: () => "",
63
- buildSearchParams: () => "",
64
- params: new URLSearchParams(),
65
- }), [pendingFilters]);
66
- const openFilters = useCallback(() => {
67
- setPendingFilters(Object.fromEntries(FILTER_KEYS.map((k) => [k, table.get(k)])));
68
- setFilterOpen(true);
69
- }, [table]);
70
- const applyFilters = useCallback(() => {
71
- const updates = { page: "1" };
72
- for (const k of FILTER_KEYS)
73
- updates[k] = pendingFilters[k] ?? "";
74
- table.setMany(updates);
75
- setFilterOpen(false);
76
- }, [pendingFilters, table]);
77
- const clearFilters = useCallback(() => {
78
- setPendingFilters(Object.fromEntries(FILTER_KEYS.map((k) => [k, ""])));
79
- }, []);
80
- const resetAll = useCallback(() => {
81
- const updates = { [TABLE_KEYS.QUERY]: "", [TABLE_KEYS.SORT]: "" };
82
- for (const k of FILTER_KEYS)
83
- updates[k] = "";
84
- table.setMany(updates);
85
- setSearchInput("");
86
- }, [table]);
87
- const commitSearch = useCallback(() => {
88
- table.set(TABLE_KEYS.QUERY, searchInput.trim());
89
- }, [searchInput, table]);
90
- const ratingRaw = table.get("rating");
91
- const ratingNum = ratingRaw ? Number(ratingRaw.split("|")[0]) : undefined;
92
- const activeFilterCount = FILTER_KEYS.filter((k) => !!table.get(k)).length;
93
- const hasActiveState = !!table.get(TABLE_KEYS.QUERY) ||
94
- table.get(TABLE_KEYS.SORT) !== DEFAULT_SORT ||
95
- activeFilterCount > 0;
96
- const { reviews, averageRating, totalReviews, totalPages, isLoading } = useStoreReviews(storeSlug, {
97
- rating: ratingNum,
98
- page: currentPage,
99
- pageSize: PAGE_SIZE,
100
- sort,
101
- q: table.get(TABLE_KEYS.QUERY) || undefined,
102
- dateFrom: table.get(TABLE_KEYS.DATE_FROM) || undefined,
103
- dateTo: table.get(TABLE_KEYS.DATE_TO) || undefined,
104
- hasImages: table.get("hasImages") === "true" ? true : undefined,
105
- });
106
- const sortOptions = REVIEW_PUBLIC_SORT_OPTIONS.map((opt) => ({
107
- value: opt.value,
108
- label: SORT_OPTION_LABELS[opt.key] ?? opt.key,
109
- }));
110
- return (_jsxs(Div, { className: "min-h-screen", children: [totalReviews > 0 && (_jsxs(Row, { border: "default", align: "center", gap: "sm", className: "border-b", padding: "inline", children: [_jsx(Span, { weight: "bold", size: "2xl", color: "primary", children: averageRating.toFixed(1) }), _jsxs(Span, { size: "sm", color: "muted", children: ["/ 5 \u00B7 ", totalReviews, " reviews"] })] })), _jsx(ListingToolbar, { filterCount: activeFilterCount, onFiltersClick: openFilters, searchValue: searchInput, searchPlaceholder: "Search reviews...", onSearchChange: setSearchInput, onSearchCommit: commitSearch, sortValue: sort, sortOptions: sortOptions, onSortChange: (v) => { table.set(TABLE_KEYS.SORT, v); }, view: view, onViewChange: handleViewToggle, onResetAll: resetAll, hasActiveState: hasActiveState }), totalPages > 1 && (_jsx(StickyToolbar, { offset: "header+pagination", tone: "translucent", border: true, padding: "toolbar", children: _jsx(Row, { justify: "center", children: _jsx(Pagination, { currentPage: currentPage, totalPages: totalPages, onPageChange: (p) => table.setPage(p) }) }) })), _jsx(Div, { paddingY: "y-lg", paddingX: "x-md", children: isLoading ? (_jsx(Div, { layout: "grid", gap: "6", className: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => (_jsx(Div, { className: `${__O.hidden} animate-pulse`, border: "subtle", rounded: "xl", children: _jsxs(Stack, { className: `${__P.p4}`, gap: "3", children: [_jsx(Div, { className: "h-4 w-3/4", surface: "subtle", rounded: "default" }), _jsx(Div, { className: "h-3 w-full", surface: "subtle", rounded: "default" }), _jsx(Div, { className: "h-3 w-2/3", surface: "subtle", rounded: "default" })] }) }, i))) })) : reviews.length === 0 ? (_jsx(Text, { paddingY: "3xl", color: "muted", size: "sm", align: "start", children: "No reviews found." })) : view === "list" ? (_jsx(Stack, { className: "divide-y divide-zinc-100 divide-[var(--appkit-color-border-subtle)]", border: "subtle", rounded: "xl", children: reviews.map((review) => (_jsx(ReviewCard, { review: review, context: "store" }, review.id))) })) : (_jsx(Div, { layout: "grid", gap: "6", className: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3", children: reviews.map((review) => (_jsx(ReviewCard, { review: review, context: "store" }, review.id))) })) }), _jsx(ListingFilterDrawer, { open: filterOpen, onClose: () => setFilterOpen(false), onApply: applyFilters, onClear: clearFilters, activeCount: activeFilterCount, children: _jsx(ReviewFilters, { table: pendingTable, variant: "public" }) })] }));
9
+ return (_jsx(ReviewsListingPanel, { source: { kind: "store", storeSlug }, stateMode: "url", context: "store", className: "min-h-screen" }));
111
10
  }
@@ -617,9 +617,9 @@ export declare const storeListItemSchema: z.ZodObject<{
617
617
  storeLogoURL?: string | undefined;
618
618
  storeBannerURL?: string | undefined;
619
619
  itemsSold?: number | undefined;
620
+ averageRating?: number | undefined;
620
621
  totalProducts?: number | undefined;
621
622
  totalReviews?: number | undefined;
622
- averageRating?: number | undefined;
623
623
  }, {
624
624
  status: string;
625
625
  id: string;
@@ -633,9 +633,9 @@ export declare const storeListItemSchema: z.ZodObject<{
633
633
  storeLogoURL?: string | undefined;
634
634
  storeBannerURL?: string | undefined;
635
635
  itemsSold?: number | undefined;
636
+ averageRating?: number | undefined;
636
637
  totalProducts?: number | undefined;
637
638
  totalReviews?: number | undefined;
638
- averageRating?: number | undefined;
639
639
  }>;
640
640
  export declare const storeListParamsSchema: z.ZodObject<{
641
641
  category: z.ZodOptional<z.ZodString>;
@@ -34,7 +34,7 @@ export const couponsTesterSeedData = [
34
34
  discount: { value: 10, maxDiscount: 100, minPurchase: 100 },
35
35
  usage: { totalLimit: undefined, perUserLimit: 1, currentUsage: 0 },
36
36
  validity: { startDate: daysAgo(1), endDate: daysAhead(7), isActive: true },
37
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
37
+ restrictions: { firstTimeUserOnly: false },
38
38
  createdBy: "user-admin-letitrip",
39
39
  createdAt: daysAgo(1),
40
40
  updatedAt: daysAgo(1),
@@ -50,7 +50,7 @@ export const couponsTesterSeedData = [
50
50
  discount: { value: 50, maxDiscount: 50, minPurchase: 100 },
51
51
  usage: { totalLimit: undefined, perUserLimit: 5, currentUsage: 0 },
52
52
  validity: { startDate: daysAgo(30), endDate: daysAgo(1), isActive: true },
53
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
53
+ restrictions: { firstTimeUserOnly: false },
54
54
  createdBy: "user-admin-letitrip",
55
55
  createdAt: daysAgo(30),
56
56
  updatedAt: daysAgo(30),
@@ -67,7 +67,7 @@ export const couponsTesterSeedData = [
67
67
  discount: { value: 5, maxDiscount: 50, minPurchase: 0 },
68
68
  usage: { totalLimit: undefined, perUserLimit: 3, currentUsage: 0 },
69
69
  validity: { startDate: daysAgo(1), endDate: daysAhead(7), isActive: true },
70
- restrictions: { firstTimeUserOnly: false, combineWithSellerCoupons: true },
70
+ restrictions: { firstTimeUserOnly: false },
71
71
  createdBy: "user-admin-letitrip",
72
72
  createdAt: daysAgo(1),
73
73
  updatedAt: daysAgo(1),
@@ -7,3 +7,4 @@ export { eventsTesterSeedData } from "./events-tester-seed-data";
7
7
  export { couponsTesterSeedData } from "./coupons-tester-seed-data";
8
8
  export { bidsTesterSeedData } from "./bids-tester-seed-data";
9
9
  export { ordersTesterSeedData } from "./orders-tester-seed-data";
10
+ export { offersTesterSeedData } from "./offers-tester-seed-data";
@@ -7,3 +7,4 @@ export { eventsTesterSeedData } from "./events-tester-seed-data";
7
7
  export { couponsTesterSeedData } from "./coupons-tester-seed-data";
8
8
  export { bidsTesterSeedData } from "./bids-tester-seed-data";
9
9
  export { ordersTesterSeedData } from "./orders-tester-seed-data";
10
+ export { offersTesterSeedData } from "./offers-tester-seed-data";
@@ -0,0 +1,2 @@
1
+ import type { OfferDocument } from "../../seller/schemas/firestore";
2
+ export declare const offersTesterSeedData: Partial<OfferDocument>[];
@@ -0,0 +1,61 @@
1
+ /*
2
+ * WHY: Shared tester sandbox — a pre-ACCEPTED offer for the tester persona.
3
+ * Needed because the offer lifecycle spans two parties: a tester can make
4
+ * an offer (buyer side) but cannot accept it, since acceptance belongs to
5
+ * the store that owns the listing (`store-beyblade-arena`, not the
6
+ * tester's own sandbox store). Without a pre-accepted fixture, the
7
+ * "checkout at the agreed price" and "offer flips to paid" cases are not
8
+ * reachable by a single tester at all.
9
+ * WHAT: Exports offersTesterSeedData — 1 Partial<OfferDocument> already in the
10
+ * `accepted` state, with a live `checkoutDeadline`, so the tester can
11
+ * drive it straight through the Offers checkout lane.
12
+ *
13
+ * Every date is Date.now()-relative (per CLAUDE.md's tester-fixture standards)
14
+ * so the 4-hour testerSandboxRefresh re-arms it instead of letting it go stale.
15
+ *
16
+ * EXPORTS:
17
+ * offersTesterSeedData — Array of 1 Partial<OfferDocument> for the seed runner
18
+ *
19
+ * @tag domain:offers,seller,tester
20
+ * @tag layer:seed
21
+ * @tag pattern:none
22
+ * @tag access:server-only
23
+ * @tag consumers:seed/manifest.ts,seed-cli.mjs
24
+ * @tag sideEffects:none
25
+ */
26
+ import { OfferStatusValues } from "../../seller/schemas/firestore";
27
+ import { testDataExpiresAt } from "./tester-ttl";
28
+ const NOW = new Date();
29
+ const hoursAgo = (n) => new Date(NOW.getTime() - n * 3600000);
30
+ const hoursFromNow = (n) => new Date(NOW.getTime() + n * 3600000);
31
+ export const offersTesterSeedData = [
32
+ {
33
+ id: "offer-tester-sandbox-accepted",
34
+ productId: "product-beyblade-burst-valkyrie",
35
+ productTitle: "Beyblade Burst Valkyrie",
36
+ productSlug: "product-beyblade-burst-valkyrie",
37
+ storeId: "store-beyblade-arena",
38
+ storeName: "Beyblade Arena",
39
+ buyerUid: "user-tester-qa",
40
+ buyerName: "QA Tester",
41
+ buyerEmail: "tester@letitrip.in",
42
+ listedPrice: 1899,
43
+ offerAmount: 1450,
44
+ // The agreed price. Checkout MUST bill this, not `listedPrice` — that
45
+ // divergence is exactly what the paired checklist case checks.
46
+ lockedPrice: 1450,
47
+ currency: "INR",
48
+ status: OfferStatusValues.ACCEPTED,
49
+ buyerNote: "Sandbox offer — already accepted so testers can drive checkout.",
50
+ sellerNote: "Accepted for QA sandbox testing.",
51
+ expiresAt: hoursFromNow(24),
52
+ acceptedAt: hoursAgo(1),
53
+ respondedAt: hoursAgo(1),
54
+ // Well inside the 48h window so the lane is live for a whole test session.
55
+ checkoutDeadline: hoursFromNow(36),
56
+ createdAt: hoursAgo(2),
57
+ updatedAt: hoursAgo(1),
58
+ isTestData: true,
59
+ testDataExpiresAt: testDataExpiresAt(),
60
+ },
61
+ ];