@mohasinac/appkit 2.7.32 → 2.7.34

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 (50) hide show
  1. package/dist/_internal/server/features/faqs/index.d.ts +1 -0
  2. package/dist/_internal/server/features/faqs/index.js +1 -0
  3. package/dist/_internal/server/features/faqs/og.d.ts +9 -0
  4. package/dist/_internal/server/features/faqs/og.js +50 -0
  5. package/dist/_internal/server/features/reviews/index.d.ts +2 -0
  6. package/dist/_internal/server/features/reviews/index.js +2 -0
  7. package/dist/_internal/server/features/reviews/og-data.d.ts +1 -0
  8. package/dist/_internal/server/features/reviews/og-data.js +7 -0
  9. package/dist/_internal/server/features/reviews/og.d.ts +19 -0
  10. package/dist/_internal/server/features/reviews/og.js +70 -0
  11. package/dist/_internal/server/features/scams/index.d.ts +1 -0
  12. package/dist/_internal/server/features/scams/index.js +1 -0
  13. package/dist/_internal/server/features/scams/og.d.ts +18 -0
  14. package/dist/_internal/server/features/scams/og.js +59 -0
  15. package/dist/_internal/server/jobs/core/auctionSettlement.js +14 -14
  16. package/dist/_internal/server/jobs/core/offerExpiry.js +3 -2
  17. package/dist/_internal/server/jobs/core/onBidPlaced.js +14 -12
  18. package/dist/_internal/server/jobs/core/onOrderStatusChange.js +6 -71
  19. package/dist/_internal/server/jobs/core/onSupportTicketCreate.js +6 -8
  20. package/dist/_internal/server/jobs/core/onSupportTicketUpdate.js +6 -7
  21. package/dist/_internal/server/jobs/core/pendingOrderTimeout.js +11 -10
  22. package/dist/_internal/server/jobs/core/prizeRevealExpiry.js +2 -2
  23. package/dist/_internal/server/jobs/core/prizeRevealOpen.js +2 -2
  24. package/dist/_internal/server/jobs/core/prizeRevealReminder.js +2 -2
  25. package/dist/features/admin/actions/notification-actions.js +18 -8
  26. package/dist/features/admin/schemas/firestore.d.ts +6 -2
  27. package/dist/features/admin/schemas/firestore.js +4 -0
  28. package/dist/features/orders/actions/refund-actions.js +2 -2
  29. package/dist/features/seller/actions/offer-actions.js +5 -5
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +1 -0
  32. package/dist/seed/actions/demo-seed-actions.d.ts +1 -1
  33. package/dist/seed/conversations-seed-data.js +52 -0
  34. package/dist/seed/index.d.ts +1 -0
  35. package/dist/seed/index.js +1 -0
  36. package/dist/seed/manifest.js +5 -0
  37. package/dist/seed/notifications-seed-data.js +10 -0
  38. package/dist/seed/offers-seed-data.d.ts +10 -0
  39. package/dist/seed/offers-seed-data.js +264 -0
  40. package/dist/seed/orders-seed-data.js +116 -2
  41. package/dist/seed/sessions-seed-data.js +35 -1
  42. package/dist/seed/support-tickets-seed-data.js +43 -0
  43. package/dist/seed/users-seed-data.js +1 -1
  44. package/dist/seed/wishlists-seed-data.js +5 -1
  45. package/dist/server-entry.d.ts +3 -1
  46. package/dist/server-entry.js +3 -1
  47. package/dist/server.d.ts +5 -0
  48. package/dist/server.js +5 -0
  49. package/dist/ui/components/Input.style.css +42 -4
  50. package/package.json +1 -1
@@ -1405,9 +1405,123 @@ export const ordersSeedData = [
1405
1405
  createdAt: daysAgo(3),
1406
1406
  updatedAt: daysAgo(3),
1407
1407
  },
1408
- // ── Admin as buyer 42. PROCESSINGadmin / Good Smile Aqua Scale ────────
1408
+ // ── 43. DELIVEREDadmin as buyer ALTER Rem Wedding via accepted offer ────
1409
1409
  {
1410
- id: "order-admin-039-gsc-aqua",
1410
+ id: "order-admin-043-alter-rem-offer",
1411
+ productId: "product-alter-rem-wedding-scale",
1412
+ productTitle: "ALTER: Re:ZERO — Rem (Wedding Ver.) 1/7 Scale Figure",
1413
+ userId: "user-admin-letitrip",
1414
+ userName: "LetItRip Admin",
1415
+ userEmail: "admin@letitrip.in",
1416
+ storeId: "store-tokyo-toys-india",
1417
+ storeName: "Tokyo Toys India",
1418
+ offerId: "offer-admin-alter-rem-paid",
1419
+ items: [
1420
+ {
1421
+ productId: "product-alter-rem-wedding-scale",
1422
+ productTitle: "ALTER Rem Wedding Ver. 1/7 (offer price)",
1423
+ quantity: 1,
1424
+ unitPrice: 1099900,
1425
+ totalPrice: 1099900,
1426
+ },
1427
+ ],
1428
+ quantity: 1,
1429
+ unitPrice: 1099900,
1430
+ totalPrice: 1099900,
1431
+ currency: "INR",
1432
+ status: OrderStatusValues.DELIVERED,
1433
+ paymentStatus: PaymentStatusValues.PAID,
1434
+ paymentMethod: PaymentMethodValues.RAZORPAY,
1435
+ paymentId: "pay_razorpay_043_demo",
1436
+ shippingAddress: "LetItRip HQ, 10th Floor, BKC G Block, Mumbai 400051",
1437
+ trackingNumber: "DTDC443322110",
1438
+ shippingCarrier: "DTDC",
1439
+ shippingFee: 0,
1440
+ platformFee: 54995,
1441
+ orderDate: daysAgo(11),
1442
+ shippingDate: daysAgo(9),
1443
+ deliveryDate: daysAgo(7),
1444
+ payoutStatus: "paid",
1445
+ createdAt: daysAgo(11),
1446
+ updatedAt: daysAgo(7),
1447
+ },
1448
+ // ── 44. DELIVERED — Arjun / BX-01 via accepted offer ─────────────────────
1449
+ {
1450
+ id: "order-arjun-044-bx01-offer",
1451
+ productId: "product-beyblade-x-bx01-dran-sword-starter-pack",
1452
+ productTitle: "Beyblade X: BX-01 Dran Sword 3-60F — Starter Pack",
1453
+ userId: "user-arjun-singh",
1454
+ userName: "Arjun Singh",
1455
+ userEmail: "arjun.singh@gmail.com",
1456
+ storeId: "store-beyblade-arena",
1457
+ storeName: "Beyblade Arena",
1458
+ offerId: "offer-arjun-bx01-paid",
1459
+ items: [
1460
+ {
1461
+ productId: "product-beyblade-x-bx01-dran-sword-starter-pack",
1462
+ productTitle: "BX-01 Dran Sword Starter Pack (offer price)",
1463
+ quantity: 1,
1464
+ unitPrice: 129900,
1465
+ totalPrice: 129900,
1466
+ },
1467
+ ],
1468
+ quantity: 1,
1469
+ unitPrice: 129900,
1470
+ totalPrice: 129900,
1471
+ currency: "INR",
1472
+ status: OrderStatusValues.DELIVERED,
1473
+ paymentStatus: PaymentStatusValues.PAID,
1474
+ paymentMethod: PaymentMethodValues.UPI_MANUAL,
1475
+ shippingAddress: "78 Indiranagar 100 Ft Road, Bengaluru 560038",
1476
+ trackingNumber: "SHPR221100334",
1477
+ shippingCarrier: "Shiprocket",
1478
+ shippingFee: 0,
1479
+ platformFee: 6495,
1480
+ orderDate: daysAgo(19),
1481
+ shippingDate: daysAgo(17),
1482
+ deliveryDate: daysAgo(14),
1483
+ payoutStatus: "paid",
1484
+ createdAt: daysAgo(19),
1485
+ updatedAt: daysAgo(14),
1486
+ },
1487
+ // ── 45. DELIVERED — Kiran / Gundam Bundle (3 kits) ───────────────────────
1488
+ {
1489
+ id: "order-kiran-045-gundam-bundle",
1490
+ productId: "group-gundam-builder-essentials",
1491
+ productTitle: "Gundam Builder Essentials — MG + RG Bundle",
1492
+ userId: "user-kiran-reddy",
1493
+ userName: "Kiran Reddy",
1494
+ userEmail: "kiran.reddy@gmail.com",
1495
+ storeId: "store-gundam-galaxy",
1496
+ storeName: "Gundam Galaxy",
1497
+ items: [
1498
+ { productId: "product-gundam-rx78-mg", productTitle: "MG RX-78-2 Gundam Ver. 3.0 1/100", quantity: 1, unitPrice: 399900, totalPrice: 399900 },
1499
+ { productId: "product-gundam-wing-zero-rg", productTitle: "RG Wing Gundam Zero EW 1/144", quantity: 1, unitPrice: 249900, totalPrice: 249900 },
1500
+ { productId: "product-hg-aerial-rebuild-gundam", productTitle: "HG Aerial Rebuild 1/144", quantity: 1, unitPrice: 249900, totalPrice: 249900 },
1501
+ ],
1502
+ quantity: 3,
1503
+ unitPrice: 299900,
1504
+ totalPrice: 899700,
1505
+ currency: "INR",
1506
+ status: OrderStatusValues.DELIVERED,
1507
+ paymentStatus: PaymentStatusValues.PAID,
1508
+ paymentMethod: PaymentMethodValues.RAZORPAY,
1509
+ paymentId: "pay_razorpay_045_demo",
1510
+ shippingAddress: "18 Kondapur, Hyderabad, Telangana 500084",
1511
+ trackingNumber: "BLUE667788901",
1512
+ shippingCarrier: "Bluedart",
1513
+ shippingFee: 0,
1514
+ platformFee: 44985,
1515
+ orderDate: daysAgo(52),
1516
+ shippingDate: daysAgo(50),
1517
+ deliveryDate: daysAgo(47),
1518
+ payoutStatus: "paid",
1519
+ createdAt: daysAgo(52),
1520
+ updatedAt: daysAgo(47),
1521
+ },
1522
+ // ── Admin as buyer — 46. PROCESSING — admin / Good Smile Aqua Scale ────────
1523
+ {
1524
+ id: "order-admin-046-gsc-aqua",
1411
1525
  productId: "product-gsc-aqua-konosuba-scale",
1412
1526
  productTitle: "Good Smile Company: KonoSuba — Aqua 1/7 Scale Figure",
1413
1527
  userId: "user-admin-letitrip",
@@ -24,7 +24,7 @@ export const sessionsSeedData = [
24
24
  // -- Active: Admin — Chrome Desktop (Windows) ----------------------------
25
25
  {
26
26
  id: "session-admin-chrome-desktop-001",
27
- userId: "user-admin-user-admin",
27
+ userId: "user-admin-letitrip",
28
28
  deviceInfo: {
29
29
  userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
30
30
  browser: "Chrome 122",
@@ -351,4 +351,38 @@ export const sessionsSeedData = [
351
351
  expiresAt: daysAhead(19),
352
352
  isActive: true,
353
353
  },
354
+ // -- Active: Admin — Chrome Android (admin monitors on mobile) -----------
355
+ {
356
+ id: "session-admin-chrome-android-001",
357
+ userId: "user-admin-letitrip",
358
+ deviceInfo: {
359
+ userAgent: "Mozilla/5.0 (Linux; Android 14; Samsung Galaxy S24 Ultra) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36",
360
+ browser: "Chrome 122",
361
+ os: "Android 14",
362
+ device: "Mobile",
363
+ ip: "203.0.113.2",
364
+ },
365
+ location: { country: _locale.countryName, city: "Mumbai" },
366
+ createdAt: daysAgo(3),
367
+ lastActivity: daysAgo(1),
368
+ expiresAt: daysAhead(26),
369
+ isActive: true,
370
+ },
371
+ // -- Active: Admin — Safari macOS (secondary workstation) ----------------
372
+ {
373
+ id: "session-admin-safari-macos-001",
374
+ userId: "user-admin-letitrip",
375
+ deviceInfo: {
376
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15",
377
+ browser: "Safari 17",
378
+ os: "macOS 14",
379
+ device: "Desktop",
380
+ ip: "203.0.113.3",
381
+ },
382
+ location: { country: _locale.countryName, city: "Mumbai" },
383
+ createdAt: daysAgo(1),
384
+ lastActivity: daysAgo(0),
385
+ expiresAt: daysAhead(29),
386
+ isActive: true,
387
+ },
354
388
  ];
@@ -133,4 +133,47 @@ export const supportTicketsSeedData = [
133
133
  createdAt: daysBack(1),
134
134
  updatedAt: daysBack(1),
135
135
  },
136
+ // ── 7. Resolved — escalated fraud report (admin handled) ──────────────────
137
+ {
138
+ id: "ticket-meera-fraud-002",
139
+ userId: "user-meera-nair",
140
+ userEmail: "meera.nair@example.com",
141
+ userDisplayName: "Meera Nair",
142
+ category: "scam_report",
143
+ subject: "Seller sent empty box and is now unreachable",
144
+ description: "I paid Rs 8,499 for a S.H.Figuarts Broly via Razorpay. The seller (store-beyblade-arena) has not responded in 7 days and the tracking shows the box was 200g — way too light for the figure.",
145
+ status: SUPPORT_TICKET_FIELDS.STATUS_VALUES.RESOLVED,
146
+ priority: SUPPORT_TICKET_FIELDS.PRIORITY_VALUES.HIGH,
147
+ assignedTo: "user-admin-letitrip",
148
+ assignedToName: "LetItRip Admin",
149
+ messages: [
150
+ msg("msg-meera-002-u1", "user-meera-nair", "user", "I have the weight receipt from Delhivery. 200g is impossible for this figure. The seller is not replying on messages or phone.", 10),
151
+ msg("msg-meera-002-s1", "user-simran-kaur", "support", "Hi Meera, I have escalated this to our admin team for review as it qualifies as a potential fraud case. You will hear back within 24 hours.", 9),
152
+ msg("msg-meera-002-a1", "user-admin-letitrip", "support", "Hi Meera, this is the LetItRip admin. I have reviewed the shipment weight log and the seller communication history. We are initiating a full refund of Rs 8,499 under our buyer protection policy. The seller account has been suspended pending investigation.", 8),
153
+ msg("msg-meera-002-u2", "user-meera-nair", "user", "Thank you so much. I really appreciate the quick escalation.", 7),
154
+ ],
155
+ resolvedAt: daysBack(7),
156
+ createdAt: daysBack(10),
157
+ updatedAt: daysBack(7),
158
+ },
159
+ // ── 8. In-progress — seller account ban appeal (admin handling) ────────────
160
+ {
161
+ id: "ticket-rohit-ban-appeal-001",
162
+ userId: "user-rohit-joshi",
163
+ userEmail: "rohit.joshi@example.com",
164
+ userDisplayName: "Rohit Joshi",
165
+ category: "account",
166
+ subject: "My store was suspended — I believe it was a mistake",
167
+ description: "My store Beyblade Arena was suspended 2 days ago. I received no email explanation. I have 100% positive reviews and have never violated any policy. Please review.",
168
+ status: SUPPORT_TICKET_FIELDS.STATUS_VALUES.IN_PROGRESS,
169
+ priority: SUPPORT_TICKET_FIELDS.PRIORITY_VALUES.HIGH,
170
+ assignedTo: "user-admin-letitrip",
171
+ assignedToName: "LetItRip Admin",
172
+ messages: [
173
+ msg("msg-rohit-001-u1", "user-rohit-joshi", "user", "I run a legitimate business. I have 47 verified reviews and never had a single complaint. Please explain the suspension.", 2),
174
+ msg("msg-rohit-001-a1", "user-admin-letitrip", "support", "Hi Rohit, your store was suspended as part of an automatic fraud flag triggered by a buyer report. I am manually reviewing your transaction history and the specific report. Please share your business GST number and a copy of your most recent bank statement showing the Razorpay settlements for verification.", 1),
175
+ ],
176
+ createdAt: daysBack(2),
177
+ updatedAt: daysBack(1),
178
+ },
136
179
  ];
@@ -32,7 +32,7 @@ export const usersSeedData = [
32
32
  showWishlist: false,
33
33
  bio: "LetItRip platform administrator.",
34
34
  },
35
- stats: { totalOrders: 4, auctionsWon: 1, itemsSold: 142, reviewsCount: 0 },
35
+ stats: { totalOrders: 7, auctionsWon: 1, itemsSold: 142, reviewsCount: 0 },
36
36
  metadata: {
37
37
  lastSignInTime: daysAgo(1),
38
38
  creationTime: daysAgo(400).toISOString(),
@@ -56,11 +56,15 @@ export const wishlistsSeedData = [
56
56
  { productId: "preorder-beyblade-x-bx10-booster", productType: "preorder", addedAt: daysAgo(3) },
57
57
  { productId: "preorder-shf-broly-super-hero", productType: "preorder", addedAt: daysAgo(1) },
58
58
  ]),
59
- // Admin's personal wishlist — rare high-value collectibles
59
+ // Admin's personal wishlist — mix of listing types to test all flows
60
60
  makeDoc("user-admin-letitrip", [
61
61
  { productId: "product-mafex-miles-morales-spiderman", productType: "product", addedAt: daysAgo(60) },
62
62
  { productId: "product-figma-link-totk", productType: "product", addedAt: daysAgo(45) },
63
63
  { productId: "auction-pokemon-mew-1st-edition-psa10", productType: "auction", addedAt: daysAgo(20) },
64
64
  { productId: "product-alter-rem-wedding-scale", productType: "product", addedAt: daysAgo(8) },
65
+ { productId: "prize-pokemon-mystery-box-june", productType: "product", addedAt: daysAgo(5) },
66
+ { productId: "prize-hot-wheels-treasure-hunt", productType: "product", addedAt: daysAgo(4) },
67
+ { productId: "preorder-gundam-pg-unicorn-ver15", productType: "preorder", addedAt: daysAgo(3) },
68
+ { productId: "auction-pokemon-charizard-base1-psa9", productType: "auction", addedAt: daysAgo(2) },
65
69
  ]),
66
70
  ];
@@ -55,7 +55,9 @@ export { getCouponByCode, applyCouponAction, createCouponAction, updateCouponAct
55
55
  export { getWishlistForUser, isProductInWishlist, addToWishlistAction, removeFromWishlistAction, mergeGuestWishlistAction, WISHLIST_MAX, WISHLIST_GUEST_STORAGE_KEY, WishlistCapError, } from "./_internal/server/features/wishlist/index";
56
56
  export { getHistoryForUser, trackProductViewAction, mergeGuestHistoryAction, HISTORY_MAX, HISTORY_GUEST_STORAGE_KEY, } from "./_internal/server/features/history/index";
57
57
  export { getHomepageInitial, getHomepageSections, getHeroCarouselSlides, } from "./_internal/server/features/homepage/index";
58
- export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
58
+ export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, getReviewById, renderReviewOg, renderReviewOgImage, type ReviewOgData, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
59
+ export { renderFaqOg, renderFaqOgImage, type FaqOgData, } from "./_internal/server/features/faqs/index";
60
+ export { renderScamOg, renderScamOgImage, type ScamOgData, getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached, } from "./_internal/server/features/scams/index";
59
61
  export { getSearchResults, searchAction, type SearchQuery, } from "./_internal/server/features/search/index";
60
62
  export { getCategoryForDetail, listRootCategories, listFeaturedCategories, listMenuCategories, getCategoryTree, listSitemapCategories, CATEGORIES_PAGE_SIZE, CATEGORIES_ROOT_TIER, CATEGORIES_MAX_DEPTH, CATEGORIES_SITEMAP_LIMIT, CATEGORIES_FEATURED_LIMIT, CATEGORIES_MENU_LIMIT, } from "./_internal/server/features/categories/index";
61
63
  export { getGroupedListingForDetail, getGroupedListingWithItems, listGroupedListings, listFeaturedGroupedListings, listSitemapGroupedListings, GROUPED_LISTINGS_PAGE_SIZE, GROUPED_LISTINGS_FEATURED_LIMIT, GROUPED_LISTINGS_SITEMAP_LIMIT, type GroupedListingWithItems, type ListGroupedListingsParams, type SitemapGroupedListing, } from "./_internal/server/features/grouped/index";
@@ -76,7 +76,9 @@ export { getHistoryForUser, trackProductViewAction, mergeGuestHistoryAction, HIS
76
76
  // S5: homepage data layer
77
77
  export { getHomepageInitial, getHomepageSections, getHeroCarouselSlides, } from "./_internal/server/features/homepage/index";
78
78
  // S5: reviews data layer + actions
79
- export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
79
+ export { getReviewsForProduct, getReviewsForStore, hasUserPurchasedProduct, getReviewById, renderReviewOg, renderReviewOgImage, createReviewAction, replyToReviewAction, deleteReviewAction, markReviewHelpfulAction, } from "./_internal/server/features/reviews/index";
80
+ export { renderFaqOg, renderFaqOgImage, } from "./_internal/server/features/faqs/index";
81
+ export { renderScamOg, renderScamOgImage, getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached, } from "./_internal/server/features/scams/index";
80
82
  // S5: search data layer + action
81
83
  export { getSearchResults, searchAction, } from "./_internal/server/features/search/index";
82
84
  // S3: categories data layer
package/dist/server.d.ts CHANGED
@@ -48,6 +48,7 @@ export { makeFullStore } from "./seed/index";
48
48
  export { makeFullUser } from "./seed/index";
49
49
  export { makeHomepageSection } from "./seed/index";
50
50
  export { makeNotification } from "./seed/index";
51
+ export { sendNotification } from "./features/admin/actions/notification-actions";
51
52
  export { makeOrder } from "./seed/index";
52
53
  export { makePayout } from "./seed/index";
53
54
  export { makeProduct } from "./seed/index";
@@ -470,6 +471,10 @@ export { renderBlogOg, renderBlogOgImage, type BlogOgData } from "./_internal/se
470
471
  export { renderEventOg, renderEventOgImage, type EventOgData } from "./_internal/server/features/events/og";
471
472
  export { renderSublistingCategoryOg, renderSublistingCategoryOgImage, type SublistingCategoryOgData } from "./_internal/server/features/sublisting-categories/og";
472
473
  export { renderProfileOg, renderPrivateProfileOgImage, renderUserProfileOgImage, type UserProfileOgData } from "./_internal/server/features/profile/og";
474
+ export { renderReviewOg, renderReviewOgImage, type ReviewOgData } from "./_internal/server/features/reviews/og";
475
+ export { renderFaqOg, renderFaqOgImage, type FaqOgData } from "./_internal/server/features/faqs/og";
476
+ export { renderScamOg, renderScamOgImage, type ScamOgData } from "./_internal/server/features/scams/og";
477
+ export { getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached } from "./_internal/server/features/scams/data";
473
478
  export { orderDocumentToOrder } from "./_internal/server/features/orders/adapters";
474
479
  export { LISTING_TYPE_CAPABILITIES, capabilityFor, canAddToCart, canBid, supportsShipping, requiresVendorVerified, requiresJurisdictionCheck, hasInstantFulfillment, assertNever, } from "./_internal/shared/listing-types/capabilities";
475
480
  export type { ListingTypeCapability } from "./_internal/shared/listing-types/capabilities";
package/dist/server.js CHANGED
@@ -149,6 +149,7 @@ export { makeHomepageSection } from "./seed/index";
149
149
  // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
150
150
  // makeNotification - Shared export for make notification.
151
151
  export { makeNotification } from "./seed/index";
152
+ export { sendNotification } from "./features/admin/actions/notification-actions";
152
153
  // [SERVER-ONLY]-Server-only — uses Node.js, Next.js server internals, or third-party server SDKs (auth, email, payment, shipping).
153
154
  // makeOrder - Shared export for make order.
154
155
  export { makeOrder } from "./seed/index";
@@ -1345,6 +1346,10 @@ export { renderBlogOg, renderBlogOgImage } from "./_internal/server/features/blo
1345
1346
  export { renderEventOg, renderEventOgImage } from "./_internal/server/features/events/og";
1346
1347
  export { renderSublistingCategoryOg, renderSublistingCategoryOgImage } from "./_internal/server/features/sublisting-categories/og";
1347
1348
  export { renderProfileOg, renderPrivateProfileOgImage, renderUserProfileOgImage } from "./_internal/server/features/profile/og";
1349
+ export { renderReviewOg, renderReviewOgImage } from "./_internal/server/features/reviews/og";
1350
+ export { renderFaqOg, renderFaqOgImage } from "./_internal/server/features/faqs/og";
1351
+ export { renderScamOg, renderScamOgImage } from "./_internal/server/features/scams/og";
1352
+ export { getScammerForDetail, getScammerProfilePageData as getScammerProfilePageDataCached } from "./_internal/server/features/scams/data";
1348
1353
  // Adapters
1349
1354
  export { orderDocumentToOrder } from "./_internal/server/features/orders/adapters";
1350
1355
  // Listing-type capability registry — SB-UNI X1.
@@ -7,22 +7,60 @@
7
7
  padding: 0.375rem 0.625rem;
8
8
  font-size: 0.875rem;
9
9
  line-height: 1.4;
10
- transition: border-color 0.2s ease, box-shadow 0.2s ease;
10
+ transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
11
+ }
12
+
13
+ .appkit-input::placeholder {
14
+ color: var(--appkit-color-text-faint);
15
+ }
16
+
17
+ .appkit-input:hover:not(:disabled):not(:focus-visible) {
18
+ border-color: var(--appkit-color-zinc-400);
11
19
  }
12
20
 
13
21
  .appkit-input:focus-visible {
14
22
  outline: none;
15
23
  border-color: var(--appkit-color-secondary);
16
- box-shadow: 0 0 0 2px rgba(101, 196, 8, 0.2);
24
+ box-shadow: 0 0 0 3px rgba(101, 196, 8, 0.25), inset 0 0 0 1px rgba(101, 196, 8, 0.15);
17
25
  }
18
26
 
19
27
  .dark .appkit-input {
20
28
  border-color: var(--appkit-color-border);
21
- background: rgba(30, 41, 59, 0.6);
29
+ background: rgba(30, 41, 59, 0.7);
22
30
  color: var(--appkit-color-text);
23
31
  }
24
32
 
33
+ .dark .appkit-input::placeholder {
34
+ color: var(--appkit-color-text-muted);
35
+ }
36
+
37
+ .dark .appkit-input:hover:not(:disabled):not(:focus-visible) {
38
+ border-color: var(--appkit-color-slate-500);
39
+ }
40
+
25
41
  .dark .appkit-input:focus-visible {
26
42
  border-color: var(--appkit-color-primary);
27
- box-shadow: 0 0 0 2px rgba(233, 30, 140, 0.2);
43
+ box-shadow: 0 0 0 3px rgba(233, 30, 140, 0.25), inset 0 0 0 1px rgba(233, 30, 140, 0.15);
44
+ }
45
+
46
+ /* Error variant */
47
+ .appkit-input--error {
48
+ border-color: var(--appkit-color-error);
49
+ background: rgba(254, 202, 202, 0.06);
50
+ }
51
+
52
+ .appkit-input--error:focus-visible {
53
+ border-color: var(--appkit-color-error);
54
+ box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.25), inset 0 0 0 1px rgba(248, 113, 113, 0.15);
55
+ }
56
+
57
+ /* Disabled state */
58
+ .appkit-input:disabled {
59
+ opacity: 0.55;
60
+ cursor: not-allowed;
61
+ background: var(--appkit-color-bg);
62
+ }
63
+
64
+ .dark .appkit-input:disabled {
65
+ background: rgba(30, 41, 59, 0.4);
28
66
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mohasinac/appkit",
3
- "version": "2.7.32",
3
+ "version": "2.7.34",
4
4
  "license": "MIT",
5
5
  "publishConfig": {
6
6
  "access": "public"