@mohasinac/appkit 4.3.2 → 4.4.0

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 (183) hide show
  1. package/dist/_internal/client/features/maintenance/views/AnalysisRunnerView.js +1 -1
  2. package/dist/_internal/client/features/maintenance/views/CloudLogsListView.js +1 -1
  3. package/dist/_internal/client/features/maintenance/views/MaintenanceDashboardView.js +1 -1
  4. package/dist/_internal/client/features/maintenance/views/ServerErrorDetailView.js +1 -1
  5. package/dist/_internal/client/features/maintenance/views/ServerErrorsListView.js +1 -1
  6. package/dist/_internal/server/jobs/core/assignSpinPrize.d.ts +14 -3
  7. package/dist/_internal/server/jobs/core/assignSpinPrize.js +95 -56
  8. package/dist/_internal/server/jobs/handlers/assignSpinPrize.js +8 -2
  9. package/dist/_internal/shared/actions/action-registry.js +15 -0
  10. package/dist/_internal/shared/features/brands/schema.d.ts +4 -4
  11. package/dist/_internal/shared/features/categories/bundle-schemas.d.ts +4 -4
  12. package/dist/_internal/shared/features/orders/schema.d.ts +8 -8
  13. package/dist/_internal/shared/features/reviews/schema.d.ts +2 -2
  14. package/dist/client.d.ts +36 -0
  15. package/dist/client.js +30 -0
  16. package/dist/constants/api-endpoints.d.ts +6 -0
  17. package/dist/constants/api-endpoints.js +2 -0
  18. package/dist/constants/field-names.d.ts +3 -0
  19. package/dist/constants/field-names.js +4 -0
  20. package/dist/features/about/components/DeveloperView.d.ts +16 -0
  21. package/dist/features/about/components/DeveloperView.js +29 -0
  22. package/dist/features/about/index.d.ts +2 -0
  23. package/dist/features/about/index.js +1 -0
  24. package/dist/features/account/schemas/index.d.ts +16 -16
  25. package/dist/features/addresses/schemas/index.d.ts +8 -8
  26. package/dist/features/admin/components/AdminAddressesView.js +1 -1
  27. package/dist/features/admin/components/AdminAllEventEntriesView.js +2 -2
  28. package/dist/features/admin/components/AdminArtView.js +1 -1
  29. package/dist/features/admin/components/AdminBidsView.js +2 -2
  30. package/dist/features/admin/components/AdminBlogView.js +2 -2
  31. package/dist/features/admin/components/AdminBrandsView.js +2 -2
  32. package/dist/features/admin/components/AdminBundlesView.js +2 -2
  33. package/dist/features/admin/components/AdminCartsView.js +2 -2
  34. package/dist/features/admin/components/AdminCategoriesView.js +2 -2
  35. package/dist/features/admin/components/AdminClassifiedView.js +1 -1
  36. package/dist/features/admin/components/AdminContactView.js +2 -2
  37. package/dist/features/admin/components/AdminCouponsView.js +2 -2
  38. package/dist/features/admin/components/AdminDigitalCodesView.js +1 -1
  39. package/dist/features/admin/components/AdminFaqsView.js +2 -2
  40. package/dist/features/admin/components/AdminFeaturesView.js +1 -1
  41. package/dist/features/admin/components/AdminGroupedListingsView.js +1 -1
  42. package/dist/features/admin/components/AdminHistoryView.js +1 -1
  43. package/dist/features/admin/components/AdminLiveView.js +1 -1
  44. package/dist/features/admin/components/AdminNewsletterView.js +2 -2
  45. package/dist/features/admin/components/AdminNotificationsView.js +2 -2
  46. package/dist/features/admin/components/AdminOrdersView.js +2 -2
  47. package/dist/features/admin/components/AdminPaymentMethodsView.js +1 -1
  48. package/dist/features/admin/components/AdminPayoutsView.js +2 -2
  49. package/dist/features/admin/components/AdminPrizeDrawsView.js +2 -2
  50. package/dist/features/admin/components/AdminProductsView.js +2 -2
  51. package/dist/features/admin/components/AdminReturnRequestsView.js +1 -1
  52. package/dist/features/admin/components/AdminReviewsView.js +2 -2
  53. package/dist/features/admin/components/AdminScammersView.js +2 -2
  54. package/dist/features/admin/components/AdminSessionsView.js +2 -2
  55. package/dist/features/admin/components/AdminStickersView.js +1 -1
  56. package/dist/features/admin/components/AdminStoreAddressesView.js +1 -1
  57. package/dist/features/admin/components/AdminStoresView.js +2 -2
  58. package/dist/features/admin/components/AdminSublistingCategoriesView.js +1 -1
  59. package/dist/features/admin/components/AdminSupportTicketsView.js +2 -2
  60. package/dist/features/admin/components/AdminTeamView.js +2 -2
  61. package/dist/features/admin/components/AdminTesterChecklistView.js +2 -2
  62. package/dist/features/admin/components/AdminUsersView.js +2 -2
  63. package/dist/features/admin/components/AdminWishlistsView.js +1 -1
  64. package/dist/features/admin/hooks/useAdminListing.d.ts +1 -1
  65. package/dist/features/auth/hooks/useAuth.d.ts +1 -1
  66. package/dist/features/blog/actions/blog-actions.d.ts +14 -14
  67. package/dist/features/blog/schemas/index.d.ts +14 -14
  68. package/dist/features/cart/hooks/useAddToCart.d.ts +6 -2
  69. package/dist/features/cart/hooks/useAddToCart.js +20 -3
  70. package/dist/features/cart/schemas/index.d.ts +3 -3
  71. package/dist/features/cart/utils/pending-ops.d.ts +20 -0
  72. package/dist/features/cart/utils/pending-ops.js +22 -0
  73. package/dist/features/catalogue/components/AdminCatalogueApprovalsView.js +1 -1
  74. package/dist/features/categories/components/CategoryBundlesListing.js +1 -1
  75. package/dist/features/categories/components/CategoryFilters.js +1 -1
  76. package/dist/features/categories/components/CategoryTree.js +1 -1
  77. package/dist/features/categories/schemas/index.d.ts +16 -16
  78. package/dist/features/events/actions/event-actions.d.ts +21 -1
  79. package/dist/features/events/actions/event-actions.js +85 -3
  80. package/dist/features/events/components/AdminEventEditorView.js +11 -2
  81. package/dist/features/events/components/AdminEventEntriesView.js +37 -4
  82. package/dist/features/events/components/AdminEventsView.js +2 -2
  83. package/dist/features/events/components/EventLeaderboard.d.ts +12 -2
  84. package/dist/features/events/components/EventLeaderboard.js +4 -1
  85. package/dist/features/events/components/EventRafflesSection.js +2 -2
  86. package/dist/features/events/repository/event-entry.repository.d.ts +39 -0
  87. package/dist/features/events/repository/event-entry.repository.js +153 -0
  88. package/dist/features/events/schemas/firestore.d.ts +28 -1
  89. package/dist/features/events/schemas/firestore.js +9 -0
  90. package/dist/features/events/schemas/index.d.ts +13 -13
  91. package/dist/features/events/types/index.d.ts +26 -0
  92. package/dist/features/faq/actions/faq-actions.d.ts +8 -8
  93. package/dist/features/faq/schemas/index.d.ts +22 -22
  94. package/dist/features/grouped/schemas/index.d.ts +2 -2
  95. package/dist/features/homepage/components/AnnouncementBar.d.ts +9 -1
  96. package/dist/features/homepage/components/AnnouncementBar.js +6 -3
  97. package/dist/features/homepage/components/MarketplaceHomepageView.js +2 -2
  98. package/dist/features/homepage/components/SectionCarousel.js +5 -1
  99. package/dist/features/homepage/components/WelcomeSection.js +2 -2
  100. package/dist/features/homepage/schemas/index.d.ts +2 -2
  101. package/dist/features/layout/BottomNavbar.js +8 -6
  102. package/dist/features/lottery/schemas/zod.d.ts +10 -10
  103. package/dist/features/media/MediaVideo.js +11 -3
  104. package/dist/features/orders/schemas/index.d.ts +52 -52
  105. package/dist/features/products/components/CompareOverlay.d.ts +9 -0
  106. package/dist/features/products/components/CompareOverlay.js +28 -3
  107. package/dist/features/products/components/InteractiveProductCard.js +9 -3
  108. package/dist/features/products/components/MakeOfferForm.js +1 -1
  109. package/dist/features/products/components/PlaceBidForm.js +1 -1
  110. package/dist/features/products/components/PrizeDrawCollage.js +1 -1
  111. package/dist/features/products/components/PrizeDrawsSection.js +2 -2
  112. package/dist/features/products/components/ProductDetailActions.js +3 -1
  113. package/dist/features/products/components/ProductGrid.js +1 -1
  114. package/dist/features/products/components/ProductInfo.js +1 -1
  115. package/dist/features/products/components/ProductsIndexListing.js +12 -2
  116. package/dist/features/products/hooks/useRelatedProducts.js +1 -1
  117. package/dist/features/products/schemas/index.d.ts +10 -10
  118. package/dist/features/promotions/schemas/index.d.ts +8 -8
  119. package/dist/features/reviews/schemas/index.d.ts +12 -12
  120. package/dist/features/scams/schemas/index.d.ts +6 -6
  121. package/dist/features/seller/components/CouponInlineSelect.js +1 -1
  122. package/dist/features/seller/components/SellerArtView.js +2 -2
  123. package/dist/features/seller/components/SellerAuctionsView.js +2 -2
  124. package/dist/features/seller/components/SellerBidsView.js +2 -2
  125. package/dist/features/seller/components/SellerBundlesView.js +1 -1
  126. package/dist/features/seller/components/SellerClassifiedView.js +2 -2
  127. package/dist/features/seller/components/SellerCouponsView.js +2 -2
  128. package/dist/features/seller/components/SellerDigitalCodesView.js +2 -2
  129. package/dist/features/seller/components/SellerGroupedListingsView.js +1 -1
  130. package/dist/features/seller/components/SellerLiveView.js +2 -2
  131. package/dist/features/seller/components/SellerOffersView.js +2 -2
  132. package/dist/features/seller/components/SellerOrdersView.js +2 -2
  133. package/dist/features/seller/components/SellerPayoutMethodsView.js +2 -2
  134. package/dist/features/seller/components/SellerPayoutsView.js +2 -2
  135. package/dist/features/seller/components/SellerPreOrdersView.js +2 -2
  136. package/dist/features/seller/components/SellerPrizeDrawsView.js +2 -2
  137. package/dist/features/seller/components/SellerProductsView.js +2 -2
  138. package/dist/features/seller/components/SellerShippingConfigsView.js +2 -2
  139. package/dist/features/seller/components/SellerStickersView.js +2 -2
  140. package/dist/features/seller/components/SellerStoreCategoriesView.js +1 -1
  141. package/dist/features/seller/components/SublistingInlineSelect.js +1 -1
  142. package/dist/features/seller/hooks/useSellerListingData.d.ts +1 -1
  143. package/dist/features/seller/schemas/index.d.ts +16 -16
  144. package/dist/features/server-errors/schemas/index.d.ts +4 -4
  145. package/dist/features/shell/StepForm.d.ts +1 -1
  146. package/dist/features/shipments/components/AdminShipmentsView.js +2 -2
  147. package/dist/features/stores/components/StoreProductsView.js +1 -1
  148. package/dist/features/stores/components/StoresIndexListing.js +1 -1
  149. package/dist/features/stores/schemas/index.d.ts +30 -30
  150. package/dist/features/support/schemas/index.d.ts +2 -2
  151. package/dist/features/tester/seed-data/tester-checklist-seed-data.js +68 -1
  152. package/dist/features/whatsapp-bot/helpers/payment-proof-message.d.ts +14 -0
  153. package/dist/features/whatsapp-bot/helpers/payment-proof-message.js +17 -0
  154. package/dist/features/whatsapp-bot/helpers/whatsapp.d.ts +2 -8
  155. package/dist/features/whatsapp-bot/helpers/whatsapp.js +4 -11
  156. package/dist/features/wishlist/repository/user-wishlist.repository.d.ts +11 -0
  157. package/dist/features/wishlist/repository/user-wishlist.repository.js +33 -0
  158. package/dist/index.d.ts +7 -12
  159. package/dist/index.js +16 -28
  160. package/dist/next/components/ErrorView.js +1 -1
  161. package/dist/next/components/NotFoundView.js +1 -1
  162. package/dist/next/components/UnauthorizedView.js +1 -1
  163. package/dist/next/routing/route-map.d.ts +4 -0
  164. package/dist/next/routing/route-map.js +2 -0
  165. package/dist/react/contexts/SessionContext.d.ts +1 -1
  166. package/dist/react/hooks/use-action-dispatch.d.ts +1 -1
  167. package/dist/react/hooks/useFormStatePreservation.d.ts +1 -1
  168. package/dist/schemas/registry.d.ts +236 -236
  169. package/dist/schemas/webhooks/razorpay.d.ts +100 -100
  170. package/dist/security/index.d.ts +1 -1
  171. package/dist/security/index.js +1 -1
  172. package/dist/security/rate-limit.d.ts +10 -0
  173. package/dist/security/rate-limit.js +13 -1
  174. package/dist/seed/events-seed-data.js +52 -1
  175. package/dist/server.d.ts +6 -0
  176. package/dist/server.js +8 -0
  177. package/dist/styles.css +25 -1
  178. package/dist/tailwind-utilities.css +1 -1
  179. package/dist/ui/components/HorizontalScroller.d.ts +7 -1
  180. package/dist/ui/components/HorizontalScroller.js +2 -2
  181. package/dist/ui/components/HorizontalScroller.style.css +24 -0
  182. package/dist/validation/schemas.d.ts +12 -12
  183. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { sortBy } from "@mohasinac/appkit";
3
+ import { sortBy } from "@mohasinac/appkit/client";
4
4
  import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints";
5
5
  import { ACTIONS } from "../../../_internal/shared/actions/action-registry";
6
6
  import { buildBulkAction } from "../../../_internal/shared/actions/bulk-helpers";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { SIEVE_OP, Stack, sieveFilter } from "@mohasinac/appkit";
4
- import { sortBy } from "@mohasinac/appkit";
3
+ import { SIEVE_OP, Stack, sieveFilter } from "@mohasinac/appkit/client";
4
+ import { sortBy } from "@mohasinac/appkit/client";
5
5
  import React, { useState } from "react";
6
6
  import { useRouter } from "next/navigation";
7
7
  import { FilterChipGroup, ListingLayout, RowActionMenu, Span, Text } from "../../../ui";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { sieveFilter, SIEVE_OP } from "@mohasinac/appkit";
4
- import { sortBy } from "@mohasinac/appkit";
3
+ import { sieveFilter, SIEVE_OP } from "@mohasinac/appkit/client";
4
+ import { sortBy } from "@mohasinac/appkit/client";
5
5
  import React, { useState, useCallback } from "react";
6
6
  import { UserPlus } from "lucide-react";
7
7
  import { Button, FilterChipGroup, ListingLayout, RowActionMenu } from "../../../ui";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { SIEVE_OP, Stack, sieveFilter } from "@mohasinac/appkit";
4
- import { sortBy } from "@mohasinac/appkit";
3
+ import { SIEVE_OP, Stack, sieveFilter } from "@mohasinac/appkit/client";
4
+ import { sortBy } from "@mohasinac/appkit/client";
5
5
  import React, { useMemo } from "react";
6
6
  import { useQueryClient } from "@tanstack/react-query";
7
7
  import { FilterChipGroup, Heading, ListingLayout, RowActionMenu, Span, Text } from "../../../ui";
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useApiMutation } from "@mohasinac/appkit/client";
4
- import { sieveFilter, SIEVE_OP } from "@mohasinac/appkit";
5
- import { sortBy } from "@mohasinac/appkit";
4
+ import { sieveFilter, SIEVE_OP } from "@mohasinac/appkit/client";
5
+ import { sortBy } from "@mohasinac/appkit/client";
6
6
  import React, { useEffect, useState } from "react";
7
7
  import { useQueryClient } from "@tanstack/react-query";
8
8
  import { Button, FilterChipGroup, Form, FormActions, Input, ListingLayout, Modal, RowActionMenu, Text as AppText, useToast, } from "../../../ui";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { sortBy } from "@mohasinac/appkit";
3
+ import { sortBy } from "@mohasinac/appkit/client";
4
4
  import React from "react";
5
5
  import { ListingLayout } from "../../../ui";
6
6
  import { ADMIN_ENDPOINTS } from "../../../constants/api-endpoints";
@@ -54,7 +54,7 @@ export declare function useAdminListing<TResponse, TRow extends {
54
54
  refetch: () => void;
55
55
  currentPage: number;
56
56
  totalPages: number;
57
- selection: import("../../../react").UseBulkSelectionReturn;
57
+ selection: import("../../../client").UseBulkSelectionReturn;
58
58
  defaultSort: string;
59
59
  pageSize: number;
60
60
  setPageSize: (next: number) => void;
@@ -1,4 +1,4 @@
1
- import type { JsonValue } from "@mohasinac/appkit";
1
+ import type { JsonValue } from "@mohasinac/appkit/client";
2
2
  import type { AuthUser } from "../types";
3
3
  interface UseCurrentUserOptions {
4
4
  initialData?: AuthUser | null;
@@ -78,13 +78,13 @@ export declare const createBlogPostSchema: z.ZodObject<{
78
78
  isFeatured: boolean;
79
79
  excerpt: string;
80
80
  readTimeMinutes: number;
81
- contentImages: {
81
+ additionalImages: {
82
82
  type: "video" | "image" | "file";
83
83
  url: string;
84
84
  alt?: string | undefined;
85
85
  thumbnailUrl?: string | undefined;
86
86
  }[];
87
- additionalImages: {
87
+ contentImages: {
88
88
  type: "video" | "image" | "file";
89
89
  url: string;
90
90
  alt?: string | undefined;
@@ -124,15 +124,15 @@ export declare const createBlogPostSchema: z.ZodObject<{
124
124
  authorId?: string | undefined;
125
125
  authorName?: string | undefined;
126
126
  readTimeMinutes?: number | undefined;
127
- metaTitle?: string | undefined;
128
- metaDescription?: string | undefined;
129
- contentImages?: {
127
+ additionalImages?: {
130
128
  type: "video" | "image" | "file";
131
129
  url: string;
132
130
  alt?: string | undefined;
133
131
  thumbnailUrl?: string | undefined;
134
132
  }[] | undefined;
135
- additionalImages?: {
133
+ metaTitle?: string | undefined;
134
+ metaDescription?: string | undefined;
135
+ contentImages?: {
136
136
  type: "video" | "image" | "file";
137
137
  url: string;
138
138
  alt?: string | undefined;
@@ -229,15 +229,15 @@ export declare const updateBlogPostSchema: z.ZodObject<{
229
229
  authorId?: string | undefined;
230
230
  authorName?: string | undefined;
231
231
  readTimeMinutes?: number | undefined;
232
- metaTitle?: string | undefined;
233
- metaDescription?: string | undefined;
234
- contentImages?: {
232
+ additionalImages?: {
235
233
  type: "video" | "image" | "file";
236
234
  url: string;
237
235
  alt?: string | undefined;
238
236
  thumbnailUrl?: string | undefined;
239
237
  }[] | undefined;
240
- additionalImages?: {
238
+ metaTitle?: string | undefined;
239
+ metaDescription?: string | undefined;
240
+ contentImages?: {
241
241
  type: "video" | "image" | "file";
242
242
  url: string;
243
243
  alt?: string | undefined;
@@ -263,15 +263,15 @@ export declare const updateBlogPostSchema: z.ZodObject<{
263
263
  authorId?: string | undefined;
264
264
  authorName?: string | undefined;
265
265
  readTimeMinutes?: number | undefined;
266
- metaTitle?: string | undefined;
267
- metaDescription?: string | undefined;
268
- contentImages?: {
266
+ additionalImages?: {
269
267
  type: "video" | "image" | "file";
270
268
  url: string;
271
269
  alt?: string | undefined;
272
270
  thumbnailUrl?: string | undefined;
273
271
  }[] | undefined;
274
- additionalImages?: {
272
+ metaTitle?: string | undefined;
273
+ metaDescription?: string | undefined;
274
+ contentImages?: {
275
275
  type: "video" | "image" | "file";
276
276
  url: string;
277
277
  alt?: string | undefined;
@@ -136,9 +136,7 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
136
136
  thumbnailUrl?: string | undefined;
137
137
  youtubeId?: string | undefined;
138
138
  } | undefined;
139
- metaTitle?: string | undefined;
140
- metaDescription?: string | undefined;
141
- contentImages?: {
139
+ additionalImages?: {
142
140
  type: "video" | "image" | "file";
143
141
  url: string;
144
142
  source?: "upload" | "youtube" | "external" | undefined;
@@ -146,7 +144,9 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
146
144
  thumbnailUrl?: string | undefined;
147
145
  youtubeId?: string | undefined;
148
146
  }[] | undefined;
149
- additionalImages?: {
147
+ metaTitle?: string | undefined;
148
+ metaDescription?: string | undefined;
149
+ contentImages?: {
150
150
  type: "video" | "image" | "file";
151
151
  url: string;
152
152
  source?: "upload" | "youtube" | "external" | undefined;
@@ -186,9 +186,7 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
186
186
  thumbnailUrl?: string | undefined;
187
187
  youtubeId?: string | undefined;
188
188
  } | undefined;
189
- metaTitle?: string | undefined;
190
- metaDescription?: string | undefined;
191
- contentImages?: {
189
+ additionalImages?: {
192
190
  type: "video" | "image" | "file";
193
191
  url: string;
194
192
  source?: "upload" | "youtube" | "external" | undefined;
@@ -196,7 +194,9 @@ export declare const blogPostFirestoreSchema: z.ZodObject<{
196
194
  thumbnailUrl?: string | undefined;
197
195
  youtubeId?: string | undefined;
198
196
  }[] | undefined;
199
- additionalImages?: {
197
+ metaTitle?: string | undefined;
198
+ metaDescription?: string | undefined;
199
+ contentImages?: {
200
200
  type: "video" | "image" | "file";
201
201
  url: string;
202
202
  source?: "upload" | "youtube" | "external" | undefined;
@@ -345,7 +345,7 @@ export declare const blogPostSchema: z.ZodObject<{
345
345
  url: string;
346
346
  type: "image";
347
347
  } | null;
348
- contentImages: {
348
+ additionalImages: {
349
349
  type: "video" | "image" | "file";
350
350
  url: string;
351
351
  source?: "upload" | "youtube" | "external" | undefined;
@@ -353,7 +353,7 @@ export declare const blogPostSchema: z.ZodObject<{
353
353
  thumbnailUrl?: string | undefined;
354
354
  youtubeId?: string | undefined;
355
355
  }[];
356
- additionalImages: {
356
+ contentImages: {
357
357
  type: "video" | "image" | "file";
358
358
  url: string;
359
359
  source?: "upload" | "youtube" | "external" | undefined;
@@ -400,9 +400,7 @@ export declare const blogPostSchema: z.ZodObject<{
400
400
  authorName?: string | undefined;
401
401
  readTimeMinutes?: number | undefined;
402
402
  views?: number | undefined;
403
- metaTitle?: string | undefined;
404
- metaDescription?: string | undefined;
405
- contentImages?: {
403
+ additionalImages?: {
406
404
  type: "video" | "image" | "file";
407
405
  url: string;
408
406
  source?: "upload" | "youtube" | "external" | undefined;
@@ -410,7 +408,9 @@ export declare const blogPostSchema: z.ZodObject<{
410
408
  thumbnailUrl?: string | undefined;
411
409
  youtubeId?: string | undefined;
412
410
  }[] | undefined;
413
- additionalImages?: {
411
+ metaTitle?: string | undefined;
412
+ metaDescription?: string | undefined;
413
+ contentImages?: {
414
414
  type: "video" | "image" | "file";
415
415
  url: string;
416
416
  source?: "upload" | "youtube" | "external" | undefined;
@@ -1,5 +1,5 @@
1
1
  import { type ApiClientError } from "../../../http";
2
- import type { JsonValue } from "@mohasinac/appkit";
2
+ import type { JsonValue } from "@mohasinac/appkit/client";
3
3
  interface AddToCartPayload {
4
4
  productId: string;
5
5
  quantity: number;
@@ -10,6 +10,10 @@ interface AddToCartPayload {
10
10
  storeName?: string;
11
11
  [key: string]: JsonValue | undefined;
12
12
  }
13
+ interface AddToCartServerResponse {
14
+ itemCount?: number;
15
+ subtotal?: number;
16
+ }
13
17
  interface UseAddToCartOptions {
14
18
  endpoint?: string;
15
19
  onSuccess?: () => void;
@@ -24,7 +28,7 @@ export declare function useAddToCart(options?: UseAddToCartOptions): {
24
28
  mutate: (data: AddToCartPayload) => Promise<unknown>;
25
29
  isLoading: boolean;
26
30
  error: ApiClientError | null;
27
- data: unknown;
31
+ data: AddToCartServerResponse | undefined;
28
32
  reset: () => void;
29
33
  };
30
34
  export {};
@@ -3,8 +3,15 @@ import { normalizeError } from "../../../errors/normalize";
3
3
  import { useCallback, useEffect, useRef } from "react";
4
4
  import { useMutation, useQueryClient } from "@tanstack/react-query";
5
5
  import { apiClient } from "../../../http";
6
- import { addToGuestCart } from "../utils/guest-cart";
6
+ import { addToGuestCart, getGuestCartItems } from "../utils/guest-cart";
7
7
  import { CART_ENDPOINTS } from "../../../constants/api-endpoints";
8
+ import { dispatchCartUpdated, formatCartAddedMessage } from "../utils/pending-ops";
9
+ import { useToast } from "../../../ui/components/Toast";
10
+ import { formatCurrency } from "../../../utils/number.formatter";
11
+ import { getDefaultCurrency } from "../../../core/baseline-resolver";
12
+ function showAddedToast(showToast, detail) {
13
+ showToast(formatCartAddedMessage(detail, (amount) => formatCurrency(amount, getDefaultCurrency())), "success");
14
+ }
8
15
  /**
9
16
  * useAddToCart
10
17
  *
@@ -13,14 +20,19 @@ import { CART_ENDPOINTS } from "../../../constants/api-endpoints";
13
20
  export function useAddToCart(options) {
14
21
  const queryClient = useQueryClient();
15
22
  const endpoint = options?.endpoint ?? CART_ENDPOINTS.GET;
23
+ const { showToast } = useToast();
16
24
  const optionsRef = useRef(options);
17
25
  useEffect(() => {
18
26
  optionsRef.current = options;
19
27
  }, [options]);
20
28
  const serverMutation = useMutation({
21
29
  mutationFn: (data) => apiClient.post(endpoint, data),
22
- onSuccess: () => {
30
+ onSuccess: (data, variables) => {
23
31
  queryClient.invalidateQueries({ queryKey: ["cart"] });
32
+ const itemCount = data?.itemCount ?? 0;
33
+ const totalValue = data?.subtotal ?? 0;
34
+ showAddedToast(showToast, { productTitle: variables.productTitle, itemCount, totalValue });
35
+ dispatchCartUpdated({ itemCount, totalValue, productTitle: variables.productTitle });
24
36
  optionsRef.current?.onSuccess?.();
25
37
  },
26
38
  onError: (err) => optionsRef.current?.onError?.(err),
@@ -40,12 +52,17 @@ export function useAddToCart(options) {
40
52
  storeId: data.storeId,
41
53
  storeName: data.storeName,
42
54
  });
55
+ const guestItems = getGuestCartItems();
56
+ const itemCount = guestItems.reduce((sum, it) => sum + it.quantity, 0);
57
+ const totalValue = guestItems.reduce((sum, it) => sum + (it.price ?? 0) * it.quantity, 0);
58
+ showAddedToast(showToast, { productTitle: data.productTitle, itemCount, totalValue });
59
+ dispatchCartUpdated({ itemCount, totalValue, productTitle: data.productTitle });
43
60
  optionsRef.current?.onSuccess?.();
44
61
  return undefined;
45
62
  }
46
63
  throw err;
47
64
  }
48
- }, [serverMutation]);
65
+ }, [serverMutation, showToast]);
49
66
  return {
50
67
  mutate,
51
68
  isLoading: serverMutation.isPending,
@@ -80,8 +80,8 @@ export declare const cartItemSchema: z.ZodObject<{
80
80
  attributes?: Record<string, string> | undefined;
81
81
  } | undefined;
82
82
  userId?: string | undefined;
83
- sessionId?: string | undefined;
84
83
  quantity?: number | undefined;
84
+ sessionId?: string | undefined;
85
85
  addedAt?: string | undefined;
86
86
  }>;
87
87
  export declare const cartSummarySchema: z.ZodObject<{
@@ -136,8 +136,8 @@ export declare const cartSummarySchema: z.ZodObject<{
136
136
  attributes?: Record<string, string> | undefined;
137
137
  } | undefined;
138
138
  userId?: string | undefined;
139
- sessionId?: string | undefined;
140
139
  quantity?: number | undefined;
140
+ sessionId?: string | undefined;
141
141
  addedAt?: string | undefined;
142
142
  }>, "many">;
143
143
  subtotal: z.ZodNumber;
@@ -174,8 +174,8 @@ export declare const cartSummarySchema: z.ZodObject<{
174
174
  attributes?: Record<string, string> | undefined;
175
175
  } | undefined;
176
176
  userId?: string | undefined;
177
- sessionId?: string | undefined;
178
177
  quantity?: number | undefined;
178
+ sessionId?: string | undefined;
179
179
  addedAt?: string | undefined;
180
180
  }[];
181
181
  subtotal: number;
@@ -11,6 +11,26 @@
11
11
  * useSyncManager interval (up to 30s) to reflect a just-added item. */
12
12
  export declare const CART_OPS_CHANGE_EVENT = "appkit/cart/ops-changed";
13
13
  export declare const WISHLIST_OPS_CHANGE_EVENT = "appkit/wishlist/ops-changed";
14
+ /** Fired whenever an item is successfully added to the cart (server or guest
15
+ * path), carrying the resulting totals — so any layout chrome (header cart
16
+ * badge, a UPI-quick-pay widget, etc.) can react to the exact new
17
+ * itemCount/totalValue without re-fetching, instead of just knowing "the
18
+ * cart changed" like `CART_OPS_CHANGE_EVENT` (which carries no payload). */
19
+ export declare const CART_UPDATED_EVENT = "appkit/cart/updated";
20
+ export interface CartUpdatedEventDetail {
21
+ itemCount: number;
22
+ totalValue: number;
23
+ productTitle?: string;
24
+ }
25
+ export declare function dispatchCartUpdated(detail: CartUpdatedEventDetail): void;
26
+ /**
27
+ * Shared "added to cart" toast copy — every add-to-cart entry point (the
28
+ * server-backed `useAddToCart` hook, and the local-first quick-add actions
29
+ * on listing grids) shows the same item + updated count/total message
30
+ * instead of a bare "Added to cart", so callers only need to format
31
+ * currency, not compose the sentence twice.
32
+ */
33
+ export declare function formatCartAddedMessage(detail: CartUpdatedEventDetail, formatCurrency: (amount: number) => string): string;
14
34
  export type CartOpKind = "add" | "remove";
15
35
  export type WishlistOpKind = "add" | "remove";
16
36
  export interface CartOp {
@@ -17,6 +17,28 @@ const WL_OPS_KEY = () => `${APP_ID()}_wl_ops`;
17
17
  * useSyncManager interval (up to 30s) to reflect a just-added item. */
18
18
  export const CART_OPS_CHANGE_EVENT = "appkit/cart/ops-changed";
19
19
  export const WISHLIST_OPS_CHANGE_EVENT = "appkit/wishlist/ops-changed";
20
+ /** Fired whenever an item is successfully added to the cart (server or guest
21
+ * path), carrying the resulting totals — so any layout chrome (header cart
22
+ * badge, a UPI-quick-pay widget, etc.) can react to the exact new
23
+ * itemCount/totalValue without re-fetching, instead of just knowing "the
24
+ * cart changed" like `CART_OPS_CHANGE_EVENT` (which carries no payload). */
25
+ export const CART_UPDATED_EVENT = "appkit/cart/updated";
26
+ export function dispatchCartUpdated(detail) {
27
+ if (typeof window === "undefined")
28
+ return;
29
+ window.dispatchEvent(new CustomEvent(CART_UPDATED_EVENT, { detail }));
30
+ }
31
+ /**
32
+ * Shared "added to cart" toast copy — every add-to-cart entry point (the
33
+ * server-backed `useAddToCart` hook, and the local-first quick-add actions
34
+ * on listing grids) shows the same item + updated count/total message
35
+ * instead of a bare "Added to cart", so callers only need to format
36
+ * currency, not compose the sentence twice.
37
+ */
38
+ export function formatCartAddedMessage(detail, formatCurrency) {
39
+ const itemLabel = detail.productTitle ? `"${detail.productTitle}"` : "Item";
40
+ return `${itemLabel} added to cart — ${detail.itemCount} item${detail.itemCount !== 1 ? "s" : ""}, ${formatCurrency(detail.totalValue)} total`;
41
+ }
20
42
  function dispatchCartOpsChange() {
21
43
  if (typeof window === "undefined")
22
44
  return;
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import React from "react";
4
- import { sortBy } from "@mohasinac/appkit";
4
+ import { sortBy } from "@mohasinac/appkit/client";
5
5
  import { useQueryClient } from "@tanstack/react-query";
6
6
  import { useApiMutation } from "@mohasinac/appkit/client";
7
7
  import { Button, Modal, Row, Stack, Text, Textarea } from "../../../ui";
@@ -8,7 +8,7 @@ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
8
8
  * All data is server-fetched; this component owns URL-state driven
9
9
  * sort/search/filter/pagination on top of the initial snapshot.
10
10
  */
11
- import { Row, Stack, sortBy } from "@mohasinac/appkit";
11
+ import { Row, Stack, sortBy } from "@mohasinac/appkit/client";
12
12
  import { useMemo, useCallback, useState } from "react";
13
13
  import { Div, Label, Span, Text, Toggle, StickyToolbar } from "../../../ui";
14
14
  import { ListingToolbar, Pagination, FilterDrawer } from "../../../ui";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { sortBy } from "@mohasinac/appkit";
3
+ import { sortBy } from "@mohasinac/appkit/client";
4
4
  import { useTranslations } from "next-intl";
5
5
  import { FilterFacetSection } from "../../filters/FilterFacetSection";
6
6
  import { RangeFilter } from "../../filters/RangeFilter";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Row } from "@mohasinac/appkit";
3
+ import { Row } from "@mohasinac/appkit/client";
4
4
  import { useState } from "react";
5
5
  import { Div, Span, Text } from "../../../ui";
6
6
  function CategoryTreeNode({ item, children = [], activeId, onSelect, depth = 0, }) {
@@ -385,8 +385,12 @@ export declare const categoryFirestoreSchema: z.ZodObject<{
385
385
  slug: string;
386
386
  order: number;
387
387
  position: number;
388
- isActive: boolean;
389
388
  isFeatured: boolean;
389
+ isActive: boolean;
390
+ createdBy: string;
391
+ rootId: string;
392
+ tier: number;
393
+ isLeaf: boolean;
390
394
  seo: {
391
395
  title: string;
392
396
  description: string;
@@ -394,10 +398,6 @@ export declare const categoryFirestoreSchema: z.ZodObject<{
394
398
  ogImage?: string | undefined;
395
399
  canonicalUrl?: string | undefined;
396
400
  };
397
- createdBy: string;
398
- rootId: string;
399
- tier: number;
400
- isLeaf: boolean;
401
401
  parentIds: string[];
402
402
  isSearchable: boolean;
403
403
  childrenIds: string[];
@@ -420,10 +420,10 @@ export declare const categoryFirestoreSchema: z.ZodObject<{
420
420
  tier: number;
421
421
  }[];
422
422
  description?: string | undefined;
423
- bundleProductIds?: string[] | undefined;
424
423
  showOnHomepage?: boolean | undefined;
425
424
  categoryType?: "brand" | "category" | "sublisting" | "bundle" | undefined;
426
425
  bundleKind?: "brand" | "special" | undefined;
426
+ bundleProductIds?: string[] | undefined;
427
427
  bundleItemDetails?: {
428
428
  productId: string;
429
429
  title?: string | undefined;
@@ -479,8 +479,12 @@ export declare const categoryFirestoreSchema: z.ZodObject<{
479
479
  slug: string;
480
480
  order: number;
481
481
  position: number;
482
- isActive: boolean;
483
482
  isFeatured: boolean;
483
+ isActive: boolean;
484
+ createdBy: string;
485
+ rootId: string;
486
+ tier: number;
487
+ isLeaf: boolean;
484
488
  seo: {
485
489
  title: string;
486
490
  description: string;
@@ -488,10 +492,6 @@ export declare const categoryFirestoreSchema: z.ZodObject<{
488
492
  ogImage?: string | undefined;
489
493
  canonicalUrl?: string | undefined;
490
494
  };
491
- createdBy: string;
492
- rootId: string;
493
- tier: number;
494
- isLeaf: boolean;
495
495
  parentIds: string[];
496
496
  isSearchable: boolean;
497
497
  childrenIds: string[];
@@ -514,10 +514,10 @@ export declare const categoryFirestoreSchema: z.ZodObject<{
514
514
  tier: number;
515
515
  }[];
516
516
  description?: string | undefined;
517
- bundleProductIds?: string[] | undefined;
518
517
  showOnHomepage?: boolean | undefined;
519
518
  categoryType?: "brand" | "category" | "sublisting" | "bundle" | undefined;
520
519
  bundleKind?: "brand" | "special" | undefined;
520
+ bundleProductIds?: string[] | undefined;
521
521
  bundleItemDetails?: {
522
522
  productId: string;
523
523
  title?: string | undefined;
@@ -685,14 +685,14 @@ export declare const categoryItemSchema: z.ZodObject<{
685
685
  description?: string | undefined;
686
686
  order?: number | undefined;
687
687
  isFeatured?: boolean | undefined;
688
+ rootId?: string | undefined;
689
+ isLeaf?: boolean | undefined;
688
690
  seo?: {
689
691
  title?: string | undefined;
690
692
  description?: string | undefined;
691
693
  keywords?: string[] | undefined;
692
694
  ogImage?: string | undefined;
693
695
  } | undefined;
694
- rootId?: string | undefined;
695
- isLeaf?: boolean | undefined;
696
696
  parentIds?: string[] | undefined;
697
697
  featuredPriority?: number | undefined;
698
698
  childrenIds?: string[] | undefined;
@@ -718,14 +718,14 @@ export declare const categoryItemSchema: z.ZodObject<{
718
718
  description?: string | undefined;
719
719
  order?: number | undefined;
720
720
  isFeatured?: boolean | undefined;
721
+ rootId?: string | undefined;
722
+ isLeaf?: boolean | undefined;
721
723
  seo?: {
722
724
  title?: string | undefined;
723
725
  description?: string | undefined;
724
726
  keywords?: string[] | undefined;
725
727
  ogImage?: string | undefined;
726
728
  } | undefined;
727
- rootId?: string | undefined;
728
- isLeaf?: boolean | undefined;
729
729
  parentIds?: string[] | undefined;
730
730
  featuredPriority?: number | undefined;
731
731
  childrenIds?: string[] | undefined;
@@ -66,6 +66,26 @@ export declare function listPublicEvents(params?: string | {
66
66
  }): Promise<FirebaseSieveResult<EventDocument>>;
67
67
  export declare function getPublicEventById(id: string): Promise<EventDocument | null>;
68
68
  export declare function getEventLeaderboard(eventId: string): Promise<import("../types").LeaderboardEntry[]>;
69
+ /**
70
+ * Last N spins that actually won a prize, most recent first — powers the
71
+ * public "Last 10 Spin Results" tab on spin_wheel events. Joins each entry's
72
+ * `spinPrizeId` against the event's `spinPrizes` config for a human label
73
+ * (the entries repository has no access to the events collection, mirroring
74
+ * `getEventPollResults`' join pattern above) and marks guest spins so the
75
+ * caller can render a generic "Guest" label instead of a raw hash.
76
+ */
77
+ export declare function getEventSpinResults(eventId: string, limit?: number): Promise<import("../types").SpinResultEntry[]>;
78
+ /**
79
+ * Per-option vote tally for a poll event — replaces the voter-ranked
80
+ * leaderboard for event.type === "poll", where ranking "who happened to
81
+ * vote" is meaningless. Mirrors the resultsVisibility gating already used by
82
+ * the /api/events/[id] live-tally response: results are only surfaced when
83
+ * pollConfig.resultsVisibility is "always", or "after_end" once the event
84
+ * has actually ended. ("after_vote" visibility needs per-viewer vote state,
85
+ * which this public/cached read path has no user context for, so it's
86
+ * treated as not-yet-visible here.)
87
+ */
88
+ export declare function getEventPollResults(eventId: string): Promise<import("../types").PollResultEntry[]>;
69
89
  /** Related events — other active events sharing at least one tag, excluding this one. */
70
90
  export declare function getRelatedEvents(tags: string[], excludeId: string, limit?: number): Promise<EventDocument[]>;
71
91
  export declare function adminListEvents(params?: {
@@ -89,6 +109,6 @@ export declare function enterEvent(eventId: string, input: EnterEventInput, user
89
109
  uid: string;
90
110
  displayName?: string;
91
111
  email?: string;
92
- }): Promise<{
112
+ }, request?: Request): Promise<{
93
113
  entryId: string;
94
114
  }>;