hey-pharmacist-ecommerce 1.1.42 → 1.1.43

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 (65) hide show
  1. package/README.md +70 -8
  2. package/dist/index.d.mts +380 -2364
  3. package/dist/index.d.ts +380 -2364
  4. package/dist/index.js +287 -326
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +287 -323
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +2 -2
  9. package/src/components/AccountOverviewTab.tsx +5 -5
  10. package/src/components/CartItem.tsx +15 -15
  11. package/src/components/Notification.tsx +3 -3
  12. package/src/components/ProductCard.tsx +10 -10
  13. package/src/components/QuickViewModal.tsx +16 -16
  14. package/src/components/ReviewCard.tsx +2 -2
  15. package/src/lib/Apis/api.ts +0 -1
  16. package/src/lib/Apis/models/group-with-no-users-dto.ts +0 -6
  17. package/src/lib/Apis/models/group-with-users-dto.ts +0 -6
  18. package/src/lib/Apis/models/index.ts +0 -35
  19. package/src/lib/Apis/models/order.ts +0 -6
  20. package/src/lib/Apis/models/populated-order.ts +0 -6
  21. package/src/lib/Apis/models/preference-update-item.ts +1 -0
  22. package/src/lib/Apis/models/update-user-dto.ts +0 -6
  23. package/src/lib/Apis/models/user-group.ts +0 -6
  24. package/src/lib/Apis/models/user-with-no-id.ts +0 -6
  25. package/src/lib/Apis/sharedConfig.ts +1 -1
  26. package/src/screens/CartScreen.tsx +10 -10
  27. package/src/screens/CheckoutScreen.tsx +12 -12
  28. package/src/screens/ProductDetailScreen.tsx +39 -39
  29. package/src/screens/ShopScreen.tsx +20 -20
  30. package/src/lib/Apis/apis/marketing-api.ts +0 -3099
  31. package/src/lib/Apis/models/add-contact-to-list-dto.ts +0 -33
  32. package/src/lib/Apis/models/browser-stats-response-dto.ts +0 -40
  33. package/src/lib/Apis/models/campaign-content-response-dto.ts +0 -40
  34. package/src/lib/Apis/models/campaign-draft-dto.ts +0 -175
  35. package/src/lib/Apis/models/campaign-draft-response-dto.ts +0 -40
  36. package/src/lib/Apis/models/campaign-draft-schedule-dto.ts +0 -49
  37. package/src/lib/Apis/models/campaign-draft-schedule-response-dto.ts +0 -40
  38. package/src/lib/Apis/models/campaign-draft-sending-dto.ts +0 -43
  39. package/src/lib/Apis/models/campaign-draft-sending-response-dto.ts +0 -40
  40. package/src/lib/Apis/models/contact-aggregated-stats-response-dto.ts +0 -40
  41. package/src/lib/Apis/models/contact-full-dto.ts +0 -93
  42. package/src/lib/Apis/models/contact-full-response-dto.ts +0 -40
  43. package/src/lib/Apis/models/contact-list-stats-response-dto.ts +0 -40
  44. package/src/lib/Apis/models/contact-lists-response-dto.ts +0 -40
  45. package/src/lib/Apis/models/country-stats-response-dto.ts +0 -40
  46. package/src/lib/Apis/models/create-contact-dto.ts +0 -39
  47. package/src/lib/Apis/models/create-contact-list-dto.ts +0 -27
  48. package/src/lib/Apis/models/create-email-template-dto.ts +0 -51
  49. package/src/lib/Apis/models/create-marketing-campaign-dto.ts +0 -81
  50. package/src/lib/Apis/models/email-template-response-dto.ts +0 -117
  51. package/src/lib/Apis/models/general-stats-response-dto.ts +0 -40
  52. package/src/lib/Apis/models/link-stats-response-dto.ts +0 -40
  53. package/src/lib/Apis/models/marketing-campaign-content-dto.ts +0 -27
  54. package/src/lib/Apis/models/marketing-list-contact-dto.ts +0 -51
  55. package/src/lib/Apis/models/schedule-campaign-draft-dto.ts +0 -27
  56. package/src/lib/Apis/models/send-test-email-dto.ts +0 -28
  57. package/src/lib/Apis/models/single-browser-stats-dto.ts +0 -45
  58. package/src/lib/Apis/models/single-contact-aggregated-stats-dto.ts +0 -129
  59. package/src/lib/Apis/models/single-contact-list-stats-dto.ts +0 -117
  60. package/src/lib/Apis/models/single-country-stats-dto.ts +0 -39
  61. package/src/lib/Apis/models/single-general-stats.ts +0 -153
  62. package/src/lib/Apis/models/single-link-stats-dto.ts +0 -39
  63. package/src/lib/Apis/models/single-recipient-dto.ts +0 -33
  64. package/src/lib/Apis/models/update-campaign-draft-content-dto.ts +0 -27
  65. package/src/lib/Apis/models/update-marketing-camp-draft-dto.ts +0 -81
@@ -109,14 +109,14 @@ export function CartScreen() {
109
109
 
110
110
  return (
111
111
  <div className="min-h-screen bg-white">
112
- <div className="max-w-[1400px] mx-auto px-8 md:px-12">
113
- <div className="container mx-auto px-4 py-8">
112
+ <div className="max-w-[1400px] mx-auto px-4 md:px-12">
113
+ <div className="py-8">
114
114
  {/* Header */}
115
- <div className="mb-12">
116
- <h1 className="font-['Poppins',sans-serif] font-semibold text-hsecondary tracking-[-2px] mb-2 text-4xl">
115
+ <div className="mb-8 md:mb-12">
116
+ <h1 className="font-semibold text-hsecondary tracking-[-1px] md:tracking-[-2px] mb-2 text-3xl md:text-4xl">
117
117
  Shopping Cart
118
118
  </h1>
119
- <p className="font-['Poppins',sans-serif] text-[16px] text-hmuted">
119
+ <p className="text-[14px] md:text-[16px] text-hmuted">
120
120
  {itemCount} {itemCount === 1 ? 'item' : 'items'} in your cart
121
121
  </p>
122
122
  </div>
@@ -148,15 +148,15 @@ export function CartScreen() {
148
148
  initial={{ opacity: 0, y: 24 }}
149
149
  animate={{ opacity: 1, y: 0 }}
150
150
  transition={{ delay: 0.1 }}
151
- className="space-y-6 lg:sticky lg:top-24 h-fit lg:col-span-1"
151
+ className="lg:sticky lg:top-24 h-fit lg:col-span-1"
152
152
  >
153
- <div className="bg-linear-to-br from-hsecondary/10 to-hsecondary/10 rounded-[24px] p-8 border-2 border-hsecondary/20 sticky top-24">
154
- <h2 className="font-['Poppins',sans-serif] font-semibold text-hsecondary mb-6">Order Summary</h2>
153
+ <div className="bg-hsecondary/[0.03] md:bg-linear-to-br md:from-hsecondary/10 md:to-hsecondary/10 rounded-[24px] p-6 md:p-8 border-2 border-hsecondary/10 md:border-hsecondary/20 lg:sticky lg:top-24">
154
+ <h2 className="font-semibold text-hsecondary mb-6">Order Summary</h2>
155
155
 
156
156
  <div className="space-y-4 mb-6">
157
157
  <div className="flex items-center justify-between">
158
- <span className="font-['Poppins',sans-serif] text-[14px] text-hmuted">Subtotal ({itemCount} {itemCount === 1 ? 'item' : 'items'})</span>
159
- <span className="font-['Poppins',sans-serif] font-semibold text-[14px] text-hsecondary">{formatPrice(subtotal)}</span>
158
+ <span className="text-[14px] text-hmuted">Subtotal ({itemCount} {itemCount === 1 ? 'item' : 'items'})</span>
159
+ <span className="font-semibold text-[14px] text-hsecondary">{formatPrice(subtotal)}</span>
160
160
  </div>
161
161
  <div className="flex items-center justify-between text-sm">
162
162
  <span className="text-gray-600">Shipping</span>
@@ -557,10 +557,10 @@ export function CheckoutScreen() {
557
557
  >
558
558
  {/* Header */}
559
559
  <div className="mb-12">
560
- <h1 className="font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] mb-2 text-3xl">
560
+ <h1 className="font-semibold text-[#2B4B7C] mb-2 text-3xl">
561
561
  Checkout
562
562
  </h1>
563
- <p className="font-['Poppins',sans-serif] text-[14px] text-[#676c80] text-md leading-relaxed">
563
+ <p className="text-[14px] text-[#676c80] text-md leading-relaxed">
564
564
  Complete your order information below
565
565
  </p>
566
566
  </div>
@@ -694,7 +694,7 @@ export function CheckoutScreen() {
694
694
  <section className="bg-white border-2 border-gray-100 rounded-[24px] p-8 text-[#2B4B7C]">
695
695
  <div className="flex flex-wrap items-center justify-between gap-4">
696
696
  <div>
697
- <h2 className="font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] mb-2 text-2xl">
697
+ <h2 className="font-semibold text-[#2B4B7C] mb-2 text-2xl">
698
698
  {isDelivery ? 'Delivery Address' : 'Contact Information'}
699
699
  </h2>
700
700
  <p className="text-sm text-slate-500">
@@ -828,7 +828,7 @@ export function CheckoutScreen() {
828
828
  <div className="bg-white border-2 border-gray-100 rounded-[24px] p-8 text-[#2B4B7C]">
829
829
  <div className="flex items-center gap-3 text-xl font-semibold text-gray-900 pb-4 mb-8 border-b">
830
830
  <Truck className="w-8 h-8 flex items-center justify-center text-[#2B4B7C]" />
831
- <h2 className="font-['Poppins',sans-serif] font-semibold text-[#2B4B7C] text-2xl">Shipping Options</h2>
831
+ <h2 className="font-semibold text-[#2B4B7C] text-2xl">Shipping Options</h2>
832
832
  </div>
833
833
 
834
834
  {shippingRatesLoading ? (
@@ -980,7 +980,7 @@ export function CheckoutScreen() {
980
980
  >
981
981
  {/* Order Summary */}
982
982
  <div className="bg-linear-to-br from-hsecondary/10 to-hsecondary/10 rounded-[24px] p-8 border-2 border-hsecondary/20 sticky top-24">
983
- <h2 className="font-['Poppins',sans-serif] font-semibold text-hsecondary mb-6 text-2xl">Order Summary</h2>
983
+ <h2 className="font-semibold text-hsecondary mb-6 text-2xl">Order Summary</h2>
984
984
 
985
985
 
986
986
  {/* Cart Summary */}
@@ -992,13 +992,13 @@ export function CheckoutScreen() {
992
992
  <Image src={item.productVariantData?.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC} alt={item.productVariantData.name} className="w-full h-full object-cover" height={200} width={200} />
993
993
  </div>
994
994
  <div className="flex-1 min-w-0">
995
- <p className="font-['Poppins',sans-serif] font-medium text-[12px] text-[#2B4B7C] mb-1">
995
+ <p className="font-medium text-[12px] text-[#2B4B7C] mb-1">
996
996
  {item?.productVariantData?.name}
997
997
  </p>
998
- <p className="font-['Poppins',sans-serif] text-[11px] text-[#676c80]">
998
+ <p className="text-[11px] text-[#676c80]">
999
999
  {item?.productVariantData?.brand} • Qty: {item.quantity}
1000
1000
  </p>
1001
- <p className="font-['Poppins',sans-serif] font-semibold text-[12px] text-hsecondary mt-1">
1001
+ <p className="font-semibold text-[12px] text-hsecondary mt-1">
1002
1002
  {formatPrice(item.productVariantData.finalPrice * item.quantity)}
1003
1003
  </p>
1004
1004
  </div>
@@ -1045,8 +1045,8 @@ export function CheckoutScreen() {
1045
1045
  <div className="h-px bg-hsecondary/20 mt-6" />
1046
1046
 
1047
1047
  <div className="flex items-center justify-between mb-6">
1048
- <span className="font-['Poppins',sans-serif] font-semibold text-[16px] text-hsecondary">Total</span>
1049
- <span className="font-['Poppins',sans-serif] font-bold text-[24px] text-hsecondary">{formatPrice(total)}</span>
1048
+ <span className="font-semibold text-[16px] text-hsecondary">Total</span>
1049
+ <span className="font-bold text-[24px] text-hsecondary">{formatPrice(total)}</span>
1050
1050
  </div>
1051
1051
  {/* <p className="mt-1 text-xs text-slate-500">
1052
1052
  Tax is estimated. Final amount confirmed after payment.
@@ -1054,7 +1054,7 @@ export function CheckoutScreen() {
1054
1054
  </div>
1055
1055
 
1056
1056
  <div className="bg-white/80 rounded-xl p-4">
1057
- <p className="font-['Poppins',sans-serif] text-[11px] text-[#676c80] leading-[1.6]">
1057
+ <p className="text-[11px] text-[#676c80] leading-[1.6]">
1058
1058
  <strong className="text-hsecondary">Payment:</strong> We&apos;ll contact you to arrange payment upon pickup or delivery. We accept cash, credit cards, and all major payment methods.
1059
1059
  </p>
1060
1060
  </div>
@@ -1093,7 +1093,7 @@ export function CheckoutScreen() {
1093
1093
  <button
1094
1094
  type="submit"
1095
1095
  disabled={isSubmitting}
1096
- className="font-['Poppins',sans-serif] font-medium text-[14px] px-6 py-3 rounded-full text-white hover:bg-[#d66f45] hover:shadow-lg transition-all duration-300 mt-4 w-full bg-hsecondary hover:bg-[#2B4B7C] flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed"
1096
+ className="font-medium text-[14px] px-6 py-3 rounded-full text-white hover:bg-[#d66f45] hover:shadow-lg transition-all duration-300 mt-4 w-full bg-hsecondary hover:bg-[#2B4B7C] flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed"
1097
1097
  >
1098
1098
  <CreditCard className="h-5 w-5" />
1099
1099
  {isSubmitting ? 'Placing order...' : 'Place Secure Order'}
@@ -361,7 +361,7 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
361
361
  <div className="max-w-[1400px] mx-auto px-8 md:px-12">
362
362
  <button
363
363
  onClick={() => router.push(buildPath('/shop'))}
364
- className="flex items-center gap-2 font-['Poppins',sans-serif] text-[13px] text-hmuted hover:text-hprimary transition-colors"
364
+ className="flex items-center gap-2 text-[13px] text-hmuted hover:text-hprimary transition-colors"
365
365
  >
366
366
  <ChevronLeft className="size-4" />
367
367
  Back to Shop
@@ -405,22 +405,22 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
405
405
 
406
406
  <div className="absolute top-6 left-6 flex flex-col gap-3">
407
407
  {discount > 0 && (
408
- <div className="bg-[#E67E50] text-white rounded-full px-4 py-2">
409
- <span className="font-['Poppins',sans-serif] font-bold text-[12px] uppercase tracking-wide">
408
+ <div className="bg-hsecondary text-white rounded-full px-4 py-2">
409
+ <span className="font-bold text-[12px] uppercase tracking-wide">
410
410
  Save {discount}%
411
411
  </span>
412
412
  </div>
413
413
  )}
414
414
  {/* {product.bestseller && (
415
415
  <div className="bg-hsecondary text-white rounded-full px-4 py-2">
416
- <span className="font-['Poppins',sans-serif] font-semibold text-[11px] uppercase tracking-wide">
416
+ <span className="font-semibold text-[11px] uppercase tracking-wide">
417
417
  Bestseller
418
418
  </span>
419
419
  </div>
420
420
  )}
421
421
  {product.newArrival && (
422
422
  <div className="bg-hprimary text-white rounded-full px-4 py-2">
423
- <span className="font-['Poppins',sans-serif] font-semibold text-[11px] uppercase tracking-wide">
423
+ <span className="font-semibold text-[11px] uppercase tracking-wide">
424
424
  New Arrival
425
425
  </span>
426
426
  </div>
@@ -461,10 +461,10 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
461
461
  <aside className="space-y-6 lg:sticky lg:top-24">
462
462
  {/* Category Path */}
463
463
  <div className="mb-4">
464
- <p className="font-['Poppins',sans-serif] text-[12px] text-hprimary uppercase tracking-wide font-medium mb-2">
464
+ <p className="text-[12px] text-hprimary uppercase tracking-wide font-medium mb-2">
465
465
  {product.brand} • {product.categoryIds?.[0]?.name || 'Uncategorized'}
466
466
  </p>
467
- <h1 className="text-3xl font-['Poppins',sans-serif] font-semibold text-hsecondary tracking-[-1.5px] mb-3">
467
+ <h1 className="text-3xl font-semibold text-hsecondary tracking-[-1.5px] mb-3">
468
468
  {selectedVariant?.name || product.name}
469
469
  </h1>
470
470
  {/* Rating */}
@@ -480,22 +480,22 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
480
480
  />
481
481
  ))}
482
482
  </div>
483
- <span className="font-['Poppins',sans-serif] text-[14px] text-hmuted">
483
+ <span className="text-[14px] text-hmuted">
484
484
  {reviewStats.averageRating} ({reviewStats.reviewCount} {reviewStats.reviewCount === 1 ? 'review' : 'reviews'})
485
485
  </span>
486
486
  </div>
487
487
  {selectedVariant && (
488
488
  <div className="flex items-center gap-3 mb-6 pb-6 border-b-2 border-gray-100">
489
- <span className="font-['Poppins',sans-serif] font-bold text-[40px] text-[#E67E50]">
489
+ <span className="font-bold text-[40px] text-hsecondary">
490
490
  ${variantPrice.toFixed(2)}
491
491
  </span>
492
492
  {variantComparePrice && variantComparePrice > variantPrice && (
493
493
  <>
494
- <span className="font-['Poppins',sans-serif] text-[24px] text-hmuted line-through">
494
+ <span className="text-[24px] text-hmuted line-through">
495
495
  ${variantComparePrice.toFixed(2)}
496
496
  </span>
497
- <div className="px-3 py-1 rounded-full bg-[#E67E50]/10">
498
- <span className="font-['Poppins',sans-serif] font-semibold text-[13px] text-[#E67E50]">
497
+ <div className="px-3 py-1 rounded-full bg-hsecondary/10">
498
+ <span className="font-semibold text-[13px] text-hsecondary">
499
499
  Save ${formatPrice(variantComparePrice - variantPrice)}
500
500
  </span>
501
501
  </div>
@@ -510,28 +510,28 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
510
510
  {selectedVariant.inventoryStatus === ProductVariantInventoryStatusEnum.OUTOFSTOCK ? (
511
511
  <>
512
512
  <div className="size-3 rounded-full bg-red-500" />
513
- <span className="font-['Poppins',sans-serif] text-[13px] text-red-600 font-medium">
513
+ <span className="text-[13px] text-red-600 font-medium">
514
514
  Out of Stock
515
515
  </span>
516
516
  </>
517
517
  ) : selectedVariant.inventoryStatus === ProductVariantInventoryStatusEnum.LOWSTOCK || selectedVariant.inventoryCount <= 10 ? (
518
518
  <>
519
519
  <div className="size-3 rounded-full bg-hprimary animate-pulse" />
520
- <span className="font-['Poppins',sans-serif] text-[13px] text-hprimary font-medium">
520
+ <span className="text-[13px] text-hprimary font-medium">
521
521
  Only {selectedVariant.inventoryCount} left in stock - Order soon!
522
522
  </span>
523
523
  </>
524
524
  ) : (
525
525
  <>
526
526
  <div className="size-3 rounded-full bg-green-500" />
527
- <span className="font-['Poppins',sans-serif] text-[13px] text-green-600 font-medium">
527
+ <span className="text-[13px] text-green-600 font-medium">
528
528
  In Stock
529
529
  </span>
530
530
  </>
531
531
  )}
532
532
 
533
533
  </div>
534
- <p className="font-['Poppins',sans-serif] text-[12px] text-hmuted">
534
+ <p className="text-[12px] text-hmuted">
535
535
  SKU: {selectedVariant?.sku || product?.sku}
536
536
  </p>
537
537
  </div>
@@ -540,7 +540,7 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
540
540
  {/* Description */}
541
541
  {product.description && (
542
542
  <div
543
- className="font-['Poppins',sans-serif] text-[14px] text-hmuted leading-[1.7] mb-8 max-w-full overflow-hidden break-words"
543
+ className="text-[14px] text-hmuted leading-[1.7] mb-8 max-w-full overflow-hidden break-words"
544
544
  dangerouslySetInnerHTML={{ __html: product.description }}
545
545
  />
546
546
  )}
@@ -548,7 +548,7 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
548
548
  {/* Variant Selector with Images */}
549
549
  {product?.variants && product.variants.length > 0 && (
550
550
  <div className="mb-6">
551
- <h3 className="font-['Poppins',sans-serif] font-semibold text-[14px] text-hsecondary mb-3">
551
+ <h3 className="font-semibold text-[14px] text-hsecondary mb-3">
552
552
  Select Variant
553
553
  </h3>
554
554
  <div className="flex flex-wrap gap-3">
@@ -598,7 +598,7 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
598
598
 
599
599
  {/* Quantity Selector */}
600
600
  <div className="mb-8">
601
- <h3 className="font-['Poppins',sans-serif] font-semibold text-[14px] text-hsecondary mb-3">
601
+ <h3 className="font-semibold text-[14px] text-hsecondary mb-3">
602
602
  Quantity
603
603
  </h3>
604
604
  <div className="flex items-center gap-3">
@@ -608,18 +608,18 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
608
608
  type="button"
609
609
  onClick={() => setQuantity((current) => Math.max(1, current - 1))}
610
610
 
611
- className="font-['Poppins',sans-serif] font-bold text-[18px] text-hsecondary hover:text-hprimary transition-colors"
611
+ className="font-bold text-[18px] text-hsecondary hover:text-hprimary transition-colors"
612
612
  aria-label="Increase quantity"
613
613
  >
614
614
  -
615
615
  </button>
616
- <span className="font-['Poppins',sans-serif] font-semibold text-[16px] text-hsecondary min-w-[30px] text-center">
616
+ <span className="font-semibold text-[16px] text-hsecondary min-w-[30px] text-center">
617
617
  {quantity}
618
618
  </span>
619
619
  <button
620
620
  onClick={() => setQuantity(Math.min(selectedVariant?.inventoryCount || product.inventoryCount || 999, quantity + 1))}
621
621
  disabled={quantity >= (selectedVariant?.inventoryCount || product.inventoryCount || 0)}
622
- className="font-['Poppins',sans-serif] font-bold text-[18px] text-hsecondary hover:text-hprimary transition-colors disabled:opacity-50"
622
+ className="font-bold text-[18px] text-hsecondary hover:text-hprimary transition-colors disabled:opacity-50"
623
623
  >
624
624
  +
625
625
  </button>
@@ -635,7 +635,7 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
635
635
  {/* Action Buttons */}
636
636
  <div className="flex flex-col sm:flex-row gap-3 mb-8">
637
637
  <button
638
- className="flex-1 font-['Poppins',sans-serif] font-medium text-[14px] px-8 py-4 rounded-full transition-all duration-300 flex items-center justify-center gap-3 bg-[#E67E50] text-white hover:bg-[#d66f45] hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed"
638
+ className="flex-1 font-medium text-[14px] px-8 py-4 rounded-full transition-all duration-300 flex items-center justify-center gap-3 bg-hsecondary text-white hover:bg-hsecondary/80 hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed"
639
639
  onClick={handleAddToCart}
640
640
  disabled={!selectedVariant || selectedVariant.inventoryStatus === ProductVariantInventoryStatusEnum.OUTOFSTOCK || isAddingToCart}
641
641
  >
@@ -675,10 +675,10 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
675
675
  <Truck className="size-5 text-hprimary" />
676
676
  </div>
677
677
  <div>
678
- <p className="font-['Poppins',sans-serif] font-semibold text-[12px] text-hsecondary mb-1">
678
+ <p className="font-semibold text-[12px] text-hsecondary mb-1">
679
679
  Free Shipping
680
680
  </p>
681
- <p className="font-['Poppins',sans-serif] text-[11px] text-hmuted">
681
+ <p className="text-[11px] text-hmuted">
682
682
  On all orders
683
683
  </p>
684
684
  </div>
@@ -688,10 +688,10 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
688
688
  <RotateCcw className="size-5 text-hprimary" />
689
689
  </div>
690
690
  <div>
691
- <p className="font-['Poppins',sans-serif] font-semibold text-[12px] text-hsecondary mb-1">
691
+ <p className="font-semibold text-[12px] text-hsecondary mb-1">
692
692
  Easy Returns
693
693
  </p>
694
- <p className="font-['Poppins',sans-serif] text-[11px] text-hmuted">
694
+ <p className="text-[11px] text-hmuted">
695
695
  30-day return policy
696
696
  </p>
697
697
  </div>
@@ -701,10 +701,10 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
701
701
  <Shield className="size-5 text-hprimary" />
702
702
  </div>
703
703
  <div>
704
- <p className="font-['Poppins',sans-serif] font-semibold text-[12px] text-hsecondary mb-1">
704
+ <p className="font-semibold text-[12px] text-hsecondary mb-1">
705
705
  Secure Checkout
706
706
  </p>
707
- <p className="font-['Poppins',sans-serif] text-[11px] text-hmuted">
707
+ <p className="text-[11px] text-hmuted">
708
708
  Safe & protected
709
709
  </p>
710
710
  </div>
@@ -714,10 +714,10 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
714
714
  <Package className="size-5 text-hprimary" />
715
715
  </div>
716
716
  <div>
717
- <p className="font-['Poppins',sans-serif] font-semibold text-[12px] text-hsecondary mb-1">
717
+ <p className="font-semibold text-[12px] text-hsecondary mb-1">
718
718
  Quality Guaranteed
719
719
  </p>
720
- <p className="font-['Poppins',sans-serif] text-[11px] text-hmuted">
720
+ <p className="text-[11px] text-hmuted">
721
721
  Premium materials
722
722
  </p>
723
723
  </div>
@@ -734,7 +734,7 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
734
734
  <button
735
735
  key={tab}
736
736
  onClick={() => setActiveTab(tab)}
737
- className={`font-['Poppins',sans-serif] font-medium text-[14px] px-6 py-4 transition-all ${activeTab === tab
737
+ className={`font-medium text-[14px] px-6 py-4 transition-all ${activeTab === tab
738
738
  ? 'text-hprimary border-b-2 border-hprimary -mb-0.5'
739
739
  : 'text-hmuted hover:text-hprimary'
740
740
  }`}
@@ -747,29 +747,29 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
747
747
  <div className="bg-white rounded-[24px] p-8 border-2 border-gray-100">
748
748
  {activeTab === 'description' && (
749
749
  <div>
750
- <h3 className="font-['Poppins',sans-serif] font-semibold text-hsecondary mb-4">
750
+ <h3 className="font-semibold text-hsecondary mb-4">
751
751
  Product Description
752
752
  </h3>
753
753
  <div
754
- className="font-['Poppins',sans-serif] text-[14px] text-hmuted leading-[1.8] mb-4 max-w-full overflow-hidden break-words"
754
+ className="text-[14px] text-hmuted leading-[1.8] mb-4 max-w-full overflow-hidden break-words"
755
755
  dangerouslySetInnerHTML={{ __html: product.description }}
756
756
  />
757
757
 
758
758
  <div className="mt-6">
759
- <h4 className="font-['Poppins',sans-serif] font-semibold text-[13px] text-hsecondary mb-3">
759
+ <h4 className="font-semibold text-[13px] text-hsecondary mb-3">
760
760
  Last updated:
761
761
  </h4>
762
- <p className="font-['Poppins',sans-serif] text-[14px] text-hmuted">
762
+ <p className="text-[14px] text-hmuted">
763
763
  {lastUpdatedLabel}
764
764
  </p>
765
765
  </div>
766
766
 
767
767
  {/* shipped from */}
768
768
  <div className="mt-6">
769
- <h4 className="font-['Poppins',sans-serif] font-semibold text-[13px] text-hsecondary mb-3">
769
+ <h4 className="font-semibold text-[13px] text-hsecondary mb-3">
770
770
  Shipped from:
771
771
  </h4>
772
- <p className="font-['Poppins',sans-serif] text-[14px] text-hmuted">
772
+ <p className="text-[14px] text-hmuted">
773
773
  Local pharmacy distribution center
774
774
  </p>
775
775
  </div>
@@ -786,7 +786,7 @@ export function ProductDetailScreen({ productId }: ProductDetailScreenProps) {
786
786
  {/* Related Products */}
787
787
  {relatedProducts.length > 0 && (
788
788
  <div>
789
- <h2 className="font-['Poppins',sans-serif] font-semibold text-hsecondary mb-8 text-2xl">
789
+ <h2 className="font-semibold text-hsecondary mb-8 text-2xl">
790
790
  You May Also Like
791
791
  </h2>
792
792
  <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
@@ -664,12 +664,12 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
664
664
 
665
665
  <div className={`lg:w-72 ${showFilters ? 'block rounded-full' : 'hidden lg:block'}`}>
666
666
  <div className="bg-white rounded-[24px] p-6 border-2 border-gray-100 sticky top-24">
667
- <h3 className="font-['Poppins',sans-serif] font-semibold text-hsecondary">
667
+ <h3 className="font-semibold text-hsecondary">
668
668
  Filters
669
669
  </h3>
670
670
  {/* Search */}
671
671
  <div className="mb-6">
672
- <label className="font-['Poppins',sans-serif] text-[12px] text-hmuted mb-2 block font-medium">
672
+ <label className="text-[12px] text-hmuted mb-2 block font-medium">
673
673
  Search Products
674
674
  </label>
675
675
  <div className="relative">
@@ -679,7 +679,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
679
679
  placeholder="Search..."
680
680
  value={searchQuery}
681
681
  onChange={handleInputChange}
682
- className="w-full pl-10 pr-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-hprimary focus:outline-hidden font-['Poppins',sans-serif] text-[13px] text-hsecondary"
682
+ className="w-full pl-10 pr-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-hprimary focus:outline-hidden text-[13px] text-hsecondary"
683
683
  />
684
684
  </div>
685
685
  </div>
@@ -690,7 +690,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
690
690
  onClick={() => toggleFilterSection('category')}
691
691
  className="w-full flex items-center justify-between mb-3"
692
692
  >
693
- <label className="font-['Poppins',sans-serif] text-[12px] text-hmuted font-medium cursor-pointer">
693
+ <label className="text-[12px] text-hmuted font-medium cursor-pointer">
694
694
  Category
695
695
  </label>
696
696
  {expandedFilterSections.category ? (
@@ -713,7 +713,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
713
713
  if (!isExpanded) toggleCategoryExpand(categoryId);
714
714
  handleCategoryChange(categoryId);
715
715
  }}
716
- className={`w-full text-left px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all flex items-center gap-3 ${isCategoryActive
716
+ className={`w-full text-left px-4 py-3 rounded-xl text-[13px] transition-all flex items-center gap-3 ${isCategoryActive
717
717
  ? 'bg-hprimary text-white shadow-lg'
718
718
  : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
719
719
  }`}
@@ -733,7 +733,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
733
733
  onClick={() => toggleFilterSection('brand')}
734
734
  className="w-full flex items-center justify-between mb-3"
735
735
  >
736
- <label className="font-['Poppins',sans-serif] text-[12px] text-hmuted font-medium cursor-pointer">
736
+ <label className="text-[12px] text-hmuted font-medium cursor-pointer">
737
737
  Brand
738
738
  </label>
739
739
  <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.brand ? 'rotate-180' : ''}`} />
@@ -748,7 +748,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
748
748
  <button
749
749
  key={brand}
750
750
  onClick={() => handleBrandChange(brand)}
751
- className={`w-full text-left px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all ${isSelected
751
+ className={`w-full text-left px-4 py-3 rounded-xl text-[13px] transition-all ${isSelected
752
752
  ? 'bg-hprimary text-white shadow-lg'
753
753
  : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
754
754
  }`}
@@ -769,7 +769,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
769
769
  onClick={() => toggleFilterSection('availability')}
770
770
  className="w-full flex items-center justify-between mb-3"
771
771
  >
772
- <label className="font-['Poppins',sans-serif] text-[12px] text-hmuted font-medium cursor-pointer">
772
+ <label className="text-[12px] text-hmuted font-medium cursor-pointer">
773
773
  Availability
774
774
  </label>
775
775
  <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.availability ? 'rotate-180' : ''}`} />
@@ -778,7 +778,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
778
778
  <div className="space-y-2">
779
779
  <button
780
780
  onClick={handleToggleStock}
781
- className={`w-full flex items-center justify-between px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all border-2 ${inStockOnly
781
+ className={`w-full flex items-center justify-between px-4 py-3 rounded-xl text-[13px] transition-all border-2 ${inStockOnly
782
782
  ? 'bg-hprimary text-white shadow-lg'
783
783
  : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
784
784
  }`}
@@ -794,7 +794,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
794
794
  onClick={() => toggleFilterSection('price')}
795
795
  className="w-full flex items-center justify-between mb-3"
796
796
  >
797
- <label className="font-['Poppins',sans-serif] text-[12px] text-hmuted font-medium cursor-pointer">
797
+ <label className="text-[12px] text-hmuted font-medium cursor-pointer">
798
798
  Price Range
799
799
  </label>
800
800
  <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.price ? 'rotate-180' : ''}`} />
@@ -809,7 +809,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
809
809
  type="button"
810
810
  key={range.value}
811
811
  onClick={() => handlePriceRangeSelect(range.value)}
812
- className={`w-full flex items-center justify-between px-4 py-3 rounded-xl font-['Poppins',sans-serif] text-[13px] transition-all border-2 ${isActive
812
+ className={`w-full flex items-center justify-between px-4 py-3 rounded-xl text-[13px] transition-all border-2 ${isActive
813
813
  ? 'bg-hprimary text-white shadow-lg'
814
814
  : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
815
815
  }`}
@@ -828,7 +828,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
828
828
  onChange={(event) =>
829
829
  setCustomPrice((current) => ({ ...current, min: event.target.value }))
830
830
  }
831
- className="w-1/2 px-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-hprimary focus:outline-hidden font-['Poppins',sans-serif] text-[13px] text-hsecondary"
831
+ className="w-1/2 px-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-hprimary focus:outline-hidden text-[13px] text-hsecondary"
832
832
  />
833
833
  <Input
834
834
  type="number"
@@ -838,7 +838,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
838
838
  onChange={(event) =>
839
839
  setCustomPrice((current) => ({ ...current, max: event.target.value }))
840
840
  }
841
- className="w-1/2 px-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-hprimary focus:outline-hidden font-['Poppins',sans-serif] text-[13px] text-hsecondary"
841
+ className="w-1/2 px-4 py-2.5 rounded-xl border-2 border-gray-200 focus:border-hprimary focus:outline-hidden text-[13px] text-hsecondary"
842
842
  />
843
843
  </div>
844
844
  <button
@@ -926,9 +926,9 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
926
926
  </section>
927
927
 
928
928
  {/* Shop by Category Section */}
929
- <section className="py-8 bg-white">
929
+ <section className="py-8 bg-white/50">
930
930
  <div className="container mx-auto px-4">
931
- <h2 className="text-2xl md:text-3xl font-['Poppins',sans-serif] font-semibold text-hsecondary mb-6">
931
+ <h2 className="text-2xl md:text-3xl font-semibold text-hsecondary mb-6">
932
932
  Shop by Category
933
933
  </h2>
934
934
  <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-4">
@@ -948,11 +948,11 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
948
948
  <Package className={`size-6 ${!categoryFilter ? 'text-white' : 'text-hprimary'
949
949
  }`} />
950
950
  </div>
951
- <h3 className={`font-['Poppins',sans-serif] font-semibold text-[14px] mb-1.5 ${!categoryFilter ? 'text-white' : 'text-hsecondary'
951
+ <h3 className={`font-semibold text-[14px] mb-1.5 ${!categoryFilter ? 'text-white' : 'text-hsecondary'
952
952
  }`}>
953
953
  All Products
954
954
  </h3>
955
- <p className={`font-['Poppins',sans-serif] text-[11px] ${!categoryFilter ? 'text-white/80' : 'text-hmuted'
955
+ <p className={`text-[11px] ${!categoryFilter ? 'text-white/80' : 'text-hmuted'
956
956
  }`}>
957
957
  Browse Everything
958
958
  </p>
@@ -983,11 +983,11 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
983
983
  <Icon className={`size-6 ${isSelected ? 'text-white' : 'text-hprimary'
984
984
  }`} />
985
985
  </div>
986
- <h3 className={`font-['Poppins',sans-serif] font-semibold text-[14px] mb-1.5 ${isSelected ? 'text-white' : 'text-hsecondary'
986
+ <h3 className={`font-semibold text-[14px] mb-1.5 ${isSelected ? 'text-white' : 'text-hsecondary'
987
987
  }`}>
988
988
  {category.name}
989
989
  </h3>
990
- <p className={`font-['Poppins',sans-serif] text-[11px] ${isSelected ? 'text-white/80' : 'text-hmuted'
990
+ <p className={`text-[11px] ${isSelected ? 'text-white/80' : 'text-hmuted'
991
991
  }`}>
992
992
  {category.description}
993
993
  </p>
@@ -1177,7 +1177,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
1177
1177
  event.stopPropagation();
1178
1178
  router.push(buildPath(`/products/${product._id}`));
1179
1179
  }}
1180
- className="w-full font-['Poppins',sans-serif] font-medium text-sm px-3 py-2 rounded-xl bg-hsecondary text-white hover:opacity-80 hover:shadow-lg transition-all duration-300 flex items-center justify-center gap-1.5 disabled:opacity-50 disabled:cursor-not-allowed"
1180
+ className="w-full font-medium text-sm px-3 py-2 rounded-xl bg-hsecondary text-white hover:opacity-80 hover:shadow-lg transition-all duration-300 flex items-center justify-center gap-1.5 disabled:opacity-50 disabled:cursor-not-allowed"
1181
1181
  >
1182
1182
  View product
1183
1183
  </button>