hey-pharmacist-ecommerce 1.1.41 → 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 (98) 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 +576 -615
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +576 -612
  7. package/dist/index.mjs.map +1 -1
  8. package/package.json +2 -2
  9. package/src/components/AccountAddressesTab.tsx +9 -9
  10. package/src/components/AccountOrdersTab.tsx +11 -11
  11. package/src/components/AccountOverviewTab.tsx +26 -26
  12. package/src/components/AccountPaymentTab.tsx +2 -2
  13. package/src/components/AccountReviewsTab.tsx +1 -1
  14. package/src/components/AccountSettingsTab.tsx +6 -6
  15. package/src/components/AddressFormModal.tsx +2 -2
  16. package/src/components/CartItem.tsx +15 -15
  17. package/src/components/FilterChips.tsx +7 -7
  18. package/src/components/Footer.tsx +9 -9
  19. package/src/components/Header.tsx +7 -7
  20. package/src/components/Notification.tsx +3 -3
  21. package/src/components/NotificationBell.tsx +3 -3
  22. package/src/components/NotificationDrawer.tsx +1 -1
  23. package/src/components/NotificationModal.tsx +1 -1
  24. package/src/components/OrderCard.tsx +2 -2
  25. package/src/components/ProductCard.tsx +13 -13
  26. package/src/components/QuickViewModal.tsx +28 -28
  27. package/src/components/ReviewCard.tsx +6 -6
  28. package/src/components/TabNavigation.tsx +2 -2
  29. package/src/components/ui/Badge.tsx +2 -2
  30. package/src/components/ui/Button.tsx +3 -3
  31. package/src/components/ui/ConfirmModal.tsx +3 -3
  32. package/src/components/ui/Input.tsx +1 -1
  33. package/src/lib/Apis/api.ts +0 -1
  34. package/src/lib/Apis/models/group-with-no-users-dto.ts +0 -6
  35. package/src/lib/Apis/models/group-with-users-dto.ts +0 -6
  36. package/src/lib/Apis/models/index.ts +0 -35
  37. package/src/lib/Apis/models/order.ts +0 -6
  38. package/src/lib/Apis/models/populated-order.ts +0 -6
  39. package/src/lib/Apis/models/preference-update-item.ts +1 -0
  40. package/src/lib/Apis/models/update-user-dto.ts +0 -6
  41. package/src/lib/Apis/models/user-group.ts +0 -6
  42. package/src/lib/Apis/models/user-with-no-id.ts +0 -6
  43. package/src/lib/Apis/sharedConfig.ts +1 -1
  44. package/src/providers/ThemeProvider.tsx +2 -2
  45. package/src/screens/AddressesScreen.tsx +6 -6
  46. package/src/screens/CartScreen.tsx +23 -23
  47. package/src/screens/ChangePasswordScreen.tsx +2 -2
  48. package/src/screens/CheckoutScreen.tsx +28 -28
  49. package/src/screens/CurrentOrdersScreen.tsx +4 -4
  50. package/src/screens/EditProfileScreen.tsx +1 -1
  51. package/src/screens/ForgotPasswordScreen.tsx +11 -11
  52. package/src/screens/LoginScreen.tsx +12 -12
  53. package/src/screens/OrderDetailScreen.tsx +30 -30
  54. package/src/screens/OrdersScreen.tsx +3 -3
  55. package/src/screens/ProductDetailScreen.tsx +59 -59
  56. package/src/screens/ProfileScreen.tsx +2 -2
  57. package/src/screens/RegisterScreen.tsx +15 -15
  58. package/src/screens/ResetPasswordScreen.tsx +14 -14
  59. package/src/screens/SearchResultsScreen.tsx +7 -7
  60. package/src/screens/ShopScreen.tsx +55 -55
  61. package/src/screens/WishlistScreen.tsx +22 -22
  62. package/src/styles/globals.css +43 -43
  63. package/src/lib/Apis/apis/marketing-api.ts +0 -3099
  64. package/src/lib/Apis/models/add-contact-to-list-dto.ts +0 -33
  65. package/src/lib/Apis/models/browser-stats-response-dto.ts +0 -40
  66. package/src/lib/Apis/models/campaign-content-response-dto.ts +0 -40
  67. package/src/lib/Apis/models/campaign-draft-dto.ts +0 -175
  68. package/src/lib/Apis/models/campaign-draft-response-dto.ts +0 -40
  69. package/src/lib/Apis/models/campaign-draft-schedule-dto.ts +0 -49
  70. package/src/lib/Apis/models/campaign-draft-schedule-response-dto.ts +0 -40
  71. package/src/lib/Apis/models/campaign-draft-sending-dto.ts +0 -43
  72. package/src/lib/Apis/models/campaign-draft-sending-response-dto.ts +0 -40
  73. package/src/lib/Apis/models/contact-aggregated-stats-response-dto.ts +0 -40
  74. package/src/lib/Apis/models/contact-full-dto.ts +0 -93
  75. package/src/lib/Apis/models/contact-full-response-dto.ts +0 -40
  76. package/src/lib/Apis/models/contact-list-stats-response-dto.ts +0 -40
  77. package/src/lib/Apis/models/contact-lists-response-dto.ts +0 -40
  78. package/src/lib/Apis/models/country-stats-response-dto.ts +0 -40
  79. package/src/lib/Apis/models/create-contact-dto.ts +0 -39
  80. package/src/lib/Apis/models/create-contact-list-dto.ts +0 -27
  81. package/src/lib/Apis/models/create-email-template-dto.ts +0 -51
  82. package/src/lib/Apis/models/create-marketing-campaign-dto.ts +0 -81
  83. package/src/lib/Apis/models/email-template-response-dto.ts +0 -117
  84. package/src/lib/Apis/models/general-stats-response-dto.ts +0 -40
  85. package/src/lib/Apis/models/link-stats-response-dto.ts +0 -40
  86. package/src/lib/Apis/models/marketing-campaign-content-dto.ts +0 -27
  87. package/src/lib/Apis/models/marketing-list-contact-dto.ts +0 -51
  88. package/src/lib/Apis/models/schedule-campaign-draft-dto.ts +0 -27
  89. package/src/lib/Apis/models/send-test-email-dto.ts +0 -28
  90. package/src/lib/Apis/models/single-browser-stats-dto.ts +0 -45
  91. package/src/lib/Apis/models/single-contact-aggregated-stats-dto.ts +0 -129
  92. package/src/lib/Apis/models/single-contact-list-stats-dto.ts +0 -117
  93. package/src/lib/Apis/models/single-country-stats-dto.ts +0 -39
  94. package/src/lib/Apis/models/single-general-stats.ts +0 -153
  95. package/src/lib/Apis/models/single-link-stats-dto.ts +0 -39
  96. package/src/lib/Apis/models/single-recipient-dto.ts +0 -33
  97. package/src/lib/Apis/models/update-campaign-draft-content-dto.ts +0 -27
  98. package/src/lib/Apis/models/update-marketing-camp-draft-dto.ts +0 -81
@@ -98,8 +98,8 @@ export default function AccountPage() {
98
98
  <div className="container mx-auto px-4 py-4">
99
99
  <div className="flex items-center justify-between">
100
100
  <div>
101
- <h1 className="text-2xl font-semibold text-secondary">My Account</h1>
102
- <p className="text-sm text-muted">
101
+ <h1 className="text-2xl font-semibold text-hsecondary">My Account</h1>
102
+ <p className="text-sm text-hmuted">
103
103
  Manage your profile, orders, and preferences
104
104
  </p>
105
105
  </div>
@@ -98,9 +98,9 @@ export function RegisterScreen() {
98
98
  >
99
99
  <div className="w-full max-w-xl space-y-10 text-center">
100
100
  <div className="space-y-2">
101
- <UserPlus strokeWidth={2} className='h-16 w-16 mx-auto text-white rounded-full bg-primary m-2 mb-4 px-4' />
102
- <h2 className="text-4xl text-secondary">Create Your Account</h2>
103
- <p className="text-sm text-muted">Join Holmdel Pharmacy Care for convenient healthcare access
101
+ <UserPlus strokeWidth={2} className='h-16 w-16 mx-auto text-white rounded-full bg-hprimary m-2 mb-4 px-4' />
102
+ <h2 className="text-4xl text-hsecondary">Create Your Account</h2>
103
+ <p className="text-sm text-hmuted">Join Holmdel Pharmacy Care for convenient healthcare access
104
104
  </p>
105
105
  </div>
106
106
 
@@ -113,7 +113,7 @@ export function RegisterScreen() {
113
113
  >
114
114
  <div className="grid gap-4 md:grid-cols-2 text-start">
115
115
  <div>
116
- <h2 className="text-sm text-secondary mb-3">First name <span className='text-primary-500'>*</span></h2>
116
+ <h2 className="text-sm text-hsecondary mb-3">First name <span className='text-hprimary-500'>*</span></h2>
117
117
  <Input
118
118
  placeholder="Alex"
119
119
  {...register('firstname')}
@@ -121,7 +121,7 @@ export function RegisterScreen() {
121
121
  />
122
122
  </div>
123
123
  <div>
124
- <h2 className="text-sm text-secondary mb-3">Last name <span className='text-primary-500'>*</span></h2>
124
+ <h2 className="text-sm text-hsecondary mb-3">Last name <span className='text-hprimary-500'>*</span></h2>
125
125
  <Input
126
126
  placeholder="Morgan"
127
127
  {...register('lastname')}
@@ -130,7 +130,7 @@ export function RegisterScreen() {
130
130
  </div>
131
131
  </div>
132
132
  <div>
133
- <h2 className="text-sm text-secondary mb-3">Email Address <span className='text-primary-500'>*</span></h2>
133
+ <h2 className="text-sm text-hsecondary mb-3">Email Address <span className='text-hprimary-500'>*</span></h2>
134
134
  <Input
135
135
  type="email"
136
136
  placeholder="you@example.com"
@@ -139,7 +139,7 @@ export function RegisterScreen() {
139
139
  />
140
140
  </div>
141
141
  <div>
142
- <h2 className="text-sm text-secondary mb-3">Phone Number</h2>
142
+ <h2 className="text-sm text-hsecondary mb-3">Phone Number</h2>
143
143
  <Input
144
144
  type="tel"
145
145
  placeholder="+1 (555) 123-4567"
@@ -149,7 +149,7 @@ export function RegisterScreen() {
149
149
  </div>
150
150
  <div className="relative">
151
151
 
152
- <h2 className="text-sm text-secondary mb-3">Password <span className='text-primary-500'>*</span></h2>
152
+ <h2 className="text-sm text-hsecondary mb-3">Password <span className='text-hprimary-500'>*</span></h2>
153
153
  <Input
154
154
  type={showPassword ? 'text' : 'password'}
155
155
  placeholder="••••••••"
@@ -165,7 +165,7 @@ export function RegisterScreen() {
165
165
  </button>
166
166
  </div>
167
167
  <div className="relative">
168
- <h2 className="text-sm text-secondary mb-3">Confirm Password <span className='text-primary-500'>*</span></h2>
168
+ <h2 className="text-sm text-hsecondary mb-3">Confirm Password <span className='text-hprimary-500'>*</span></h2>
169
169
  <Input
170
170
  type={showConfirmPassword ? 'text' : 'password'}
171
171
  placeholder="••••••••"
@@ -182,16 +182,16 @@ export function RegisterScreen() {
182
182
  </div>
183
183
 
184
184
  <div className="flex items-start gap-3 rounded-2xl bg-slate-50 p-4 text-sm text-slate-600">
185
- <Shield strokeWidth={2} className="mt-0.5 h-8 w-8 text-primary" />
185
+ <Shield strokeWidth={2} className="mt-0.5 h-8 w-8 text-hprimary" />
186
186
  <span>
187
187
  By creating an account, you agree to our{' '}
188
- <Link href={buildPath('/terms')} className="font-semibold text-primary hover:opacity-70">
188
+ <Link href={buildPath('/terms')} className="font-semibold text-hprimary hover:opacity-70">
189
189
  Terms of Service
190
190
  </Link>{' '}
191
191
  and{' '}
192
192
  <Link
193
193
  href={buildPath('/privacy')}
194
- className="font-semibold text-primary hover:opacity-70"
194
+ className="font-semibold text-hprimary hover:opacity-70"
195
195
  >
196
196
  Privacy Policy
197
197
  </Link>
@@ -202,7 +202,7 @@ export function RegisterScreen() {
202
202
  <button
203
203
  type="submit"
204
204
  disabled={isSubmitting}
205
- className="w-full bg-secondary hover:opacity-80 text-white font-medium py-3 px-4 rounded-lg transition-colors disabled:opacity-70 disabled:cursor-not-allowed"
205
+ className="w-full bg-hsecondary hover:opacity-80 text-white font-medium py-3 px-4 rounded-lg transition-colors disabled:opacity-70 disabled:cursor-not-allowed"
206
206
  >
207
207
  {isSubmitting ? 'Creating account...' : 'Create my account'}
208
208
  </button>
@@ -210,7 +210,7 @@ export function RegisterScreen() {
210
210
 
211
211
  {/* <div className="rounded-3xl border border-slate-100 bg-slate-50 p-6 text-sm text-slate-600">
212
212
  <div className="flex items-start gap-3">
213
- <Heart className="mt-0.5 h-5 w-5 text-primary-500" />
213
+ <Heart className="mt-0.5 h-5 w-5 text-hprimary-500" />
214
214
  <div>
215
215
  <p className="font-semibold text-slate-800">Members love us</p>
216
216
  <p>
@@ -222,7 +222,7 @@ export function RegisterScreen() {
222
222
  </div> */}
223
223
 
224
224
  <div className="mt-4">
225
- <p className="text-muted">Already have an account? <Link href={buildPath('/login')} className="font-medium text-primary transition hover:opacity-90">Sign in</Link></p>
225
+ <p className="text-hmuted">Already have an account? <Link href={buildPath('/login')} className="font-medium text-hprimary transition hover:opacity-90">Sign in</Link></p>
226
226
  </div>
227
227
  </div>
228
228
  </motion.section>
@@ -107,10 +107,10 @@ export function ResetPasswordScreen() {
107
107
  <div className="space-y-2">
108
108
  <Lock
109
109
  strokeWidth={2}
110
- className="h-16 w-16 mx-auto text-white rounded-full bg-secondary m-2 mb-4 px-4"
110
+ className="h-16 w-16 mx-auto text-white rounded-full bg-hsecondary m-2 mb-4 px-4"
111
111
  />
112
- <h2 className="text-4xl text-secondary">Reset Password</h2>
113
- <p className="text-sm text-muted">
112
+ <h2 className="text-4xl text-hsecondary">Reset Password</h2>
113
+ <p className="text-sm text-hmuted">
114
114
  Enter your new password below to reset your account password.
115
115
  </p>
116
116
  </div>
@@ -134,16 +134,16 @@ export function ResetPasswordScreen() {
134
134
  </div>
135
135
  )}
136
136
 
137
- <div className="relative text-start text-secondary">
138
- <h2 className="text-sm text-secondary mb-3">
139
- New Password <span className="text-primary-500">*</span>
137
+ <div className="relative text-start text-hsecondary">
138
+ <h2 className="text-sm text-hsecondary mb-3">
139
+ New Password <span className="text-hprimary-500">*</span>
140
140
  </h2>
141
141
  <Input
142
142
  type={showPassword ? 'text' : 'password'}
143
143
  placeholder="Enter new password (min. 8 characters)"
144
144
  {...register('newPassword')}
145
145
  error={errors.newPassword?.message}
146
- className="text-secondary"
146
+ className="text-hsecondary"
147
147
  />
148
148
  <button
149
149
  type="button"
@@ -154,16 +154,16 @@ export function ResetPasswordScreen() {
154
154
  </button>
155
155
  </div>
156
156
 
157
- <div className="relative text-start text-secondary">
158
- <h2 className="text-sm text-secondary mb-3">
159
- Confirm Password <span className="text-primary-500">*</span>
157
+ <div className="relative text-start text-hsecondary">
158
+ <h2 className="text-sm text-hsecondary mb-3">
159
+ Confirm Password <span className="text-hprimary-500">*</span>
160
160
  </h2>
161
161
  <Input
162
162
  type={showConfirmPassword ? 'text' : 'password'}
163
163
  placeholder="Re-enter new password"
164
164
  {...register('confirmPassword')}
165
165
  error={errors.confirmPassword?.message}
166
- className="text-secondary"
166
+ className="text-hsecondary"
167
167
  />
168
168
  <button
169
169
  type="button"
@@ -181,20 +181,20 @@ export function ResetPasswordScreen() {
181
181
  <button
182
182
  type="submit"
183
183
  disabled={isSubmitting || !token}
184
- className="w-full bg-secondary hover:opacity-80 text-white font-medium py-3 px-4 rounded-lg transition-colors disabled:opacity-70 disabled:cursor-not-allowed"
184
+ className="w-full bg-hsecondary hover:opacity-80 text-white font-medium py-3 px-4 rounded-lg transition-colors disabled:opacity-70 disabled:cursor-not-allowed"
185
185
  >
186
186
  {isSubmitting ? 'Resetting Password...' : 'Reset Password'}
187
187
  </button>
188
188
 
189
189
  <div className="flex items-center gap-2 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm text-slate-600">
190
- <ShieldCheck className="h-4 w-4 text-primary-600" />
190
+ <ShieldCheck className="h-4 w-4 text-hprimary-600" />
191
191
  Use a strong password that you haven't used elsewhere.
192
192
  </div>
193
193
 
194
194
  <div className="pt-4 border-t border-slate-200">
195
195
  <Link
196
196
  href={buildPath('/login')}
197
- className="text-sm font-medium text-primary transition hover:opacity-80"
197
+ className="text-sm font-medium text-hprimary transition hover:opacity-80"
198
198
  >
199
199
  Back to login
200
200
  </Link>
@@ -214,7 +214,7 @@ export default function SearchPage() {
214
214
  onFocus={handleInputFocus}
215
215
  onBlur={() => setTimeout(() => setShowSuggestions(false), 200)}
216
216
  placeholder="Search for products..."
217
- className="pl-10 pr-10 py-6 text-base rounded-lg border-gray-300 focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
217
+ className="pl-10 pr-10 py-6 text-base rounded-lg border-gray-300 focus:ring-2 focus:ring-hprimary-500 focus:border-hprimary-500"
218
218
  autoComplete="off"
219
219
  />
220
220
  {searchInput && (
@@ -251,7 +251,7 @@ export default function SearchPage() {
251
251
  onClick={() => handleSuggestionClick(suggestion)}
252
252
  className="w-full text-left px-3 py-2.5 hover:bg-gray-50 rounded-md transition-colors flex items-center gap-2 group"
253
253
  >
254
- <Search className="h-4 w-4 text-gray-400 group-hover:text-primary-500" />
254
+ <Search className="h-4 w-4 text-gray-400 group-hover:text-hprimary-500" />
255
255
  <span className="text-sm text-gray-700 group-hover:text-gray-900">
256
256
  {suggestion}
257
257
  </span>
@@ -274,7 +274,7 @@ export default function SearchPage() {
274
274
  onClick={() => handleSuggestionClick(search)}
275
275
  className="w-full text-left px-3 py-2.5 hover:bg-gray-50 rounded-md transition-colors flex items-center gap-2 group"
276
276
  >
277
- <Clock className="h-4 w-4 text-gray-400 group-hover:text-primary-500" />
277
+ <Clock className="h-4 w-4 text-gray-400 group-hover:text-hprimary-500" />
278
278
  <span className="text-sm text-gray-700 group-hover:text-gray-900">
279
279
  {search}
280
280
  </span>
@@ -288,7 +288,7 @@ export default function SearchPage() {
288
288
  </div>
289
289
  <button
290
290
  type="submit"
291
- className="mt-4 w-full bg-primary-600 hover:bg-primary-700 text-white font-medium py-2 px-4 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
291
+ className="mt-4 w-full bg-hprimary-600 hover:bg-hprimary-700 text-white font-medium py-2 px-4 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
292
292
  disabled={!searchInput.trim()}
293
293
  >
294
294
  Search
@@ -346,7 +346,7 @@ export default function SearchPage() {
346
346
 
347
347
  <Link
348
348
  href={buildPath('/shop')}
349
- className="px-6 py-2.5 bg-primary-600 text-white rounded-lg hover:bg-primary-700 transition-colors font-medium"
349
+ className="px-6 py-2.5 bg-hprimary-600 text-white rounded-lg hover:bg-hprimary-700 transition-colors font-medium"
350
350
  >
351
351
  Browse All Products
352
352
  </Link>
@@ -371,8 +371,8 @@ export default function SearchPage() {
371
371
  </div>
372
372
  ) : (
373
373
  <div className="text-center py-12">
374
- <div className="w-16 h-16 bg-primary-50 rounded-full flex items-center justify-center mx-auto mb-4">
375
- <Search className="h-8 w-8 text-primary-500" />
374
+ <div className="w-16 h-16 bg-hprimary-50 rounded-full flex items-center justify-center mx-auto mb-4">
375
+ <Search className="h-8 w-8 text-hprimary-500" />
376
376
  </div>
377
377
  <h3 className="text-xl font-semibold text-gray-900 mb-2">
378
378
  Start Searching
@@ -664,22 +664,22 @@ 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-secondary">
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-muted 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">
676
- <Search className="absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted" />
676
+ <Search className="absolute left-3 top-1/2 -translate-y-1/2 size-4 text-hmuted" />
677
677
  <input
678
678
  type="text"
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-primary focus:outline-hidden font-['Poppins',sans-serif] text-[13px] text-secondary"
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,13 +690,13 @@ 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-muted 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 ? (
697
- <ChevronDown className={`size-4 text-muted transition-transform ${expandedFilterSections.category ? 'rotate-180' : ''}`} />
697
+ <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.category ? 'rotate-180' : ''}`} />
698
698
  ) : (
699
- <ChevronDown className={`size-4 text-muted transition-transform ${expandedFilterSections.category ? 'rotate-180' : ''}`} />
699
+ <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.category ? 'rotate-180' : ''}`} />
700
700
  )}
701
701
  </button>
702
702
  {expandedFilterSections.category && (
@@ -713,9 +713,9 @@ 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
717
- ? 'bg-primary text-white shadow-lg'
718
- : 'text-secondary hover:bg-gray-50 border-2 border-gray-100'
716
+ className={`w-full text-left px-4 py-3 rounded-xl text-[13px] transition-all flex items-center gap-3 ${isCategoryActive
717
+ ? 'bg-hprimary text-white shadow-lg'
718
+ : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
719
719
  }`}
720
720
  >
721
721
  <Icon className="size-4" />
@@ -733,10 +733,10 @@ 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-muted font-medium cursor-pointer">
736
+ <label className="text-[12px] text-hmuted font-medium cursor-pointer">
737
737
  Brand
738
738
  </label>
739
- <ChevronDown className={`size-4 text-muted transition-transform ${expandedFilterSections.brand ? 'rotate-180' : ''}`} />
739
+ <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.brand ? 'rotate-180' : ''}`} />
740
740
  </button>
741
741
  {expandedFilterSections.brand && (
742
742
  <div className="space-y-2">
@@ -748,9 +748,9 @@ 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
752
- ? 'bg-primary text-white shadow-lg'
753
- : 'text-secondary hover:bg-gray-50 border-2 border-gray-100'
751
+ className={`w-full text-left px-4 py-3 rounded-xl text-[13px] transition-all ${isSelected
752
+ ? 'bg-hprimary text-white shadow-lg'
753
+ : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
754
754
  }`}
755
755
  >
756
756
  {brand}
@@ -769,18 +769,18 @@ 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-muted font-medium cursor-pointer">
772
+ <label className="text-[12px] text-hmuted font-medium cursor-pointer">
773
773
  Availability
774
774
  </label>
775
- <ChevronDown className={`size-4 text-muted transition-transform ${expandedFilterSections.availability ? 'rotate-180' : ''}`} />
775
+ <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.availability ? 'rotate-180' : ''}`} />
776
776
  </button>
777
777
  {expandedFilterSections.availability && (
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
782
- ? 'bg-primary text-white shadow-lg'
783
- : 'text-secondary hover:bg-gray-50 border-2 border-gray-100'
781
+ className={`w-full flex items-center justify-between px-4 py-3 rounded-xl text-[13px] transition-all border-2 ${inStockOnly
782
+ ? 'bg-hprimary text-white shadow-lg'
783
+ : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
784
784
  }`}
785
785
  >
786
786
  In Stock Only
@@ -794,10 +794,10 @@ 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-muted font-medium cursor-pointer">
797
+ <label className="text-[12px] text-hmuted font-medium cursor-pointer">
798
798
  Price Range
799
799
  </label>
800
- <ChevronDown className={`size-4 text-muted transition-transform ${expandedFilterSections.price ? 'rotate-180' : ''}`} />
800
+ <ChevronDown className={`size-4 text-hmuted transition-transform ${expandedFilterSections.price ? 'rotate-180' : ''}`} />
801
801
  </button>
802
802
  {expandedFilterSections.price && (
803
803
  <div className="space-y-2">
@@ -809,9 +809,9 @@ 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
813
- ? 'bg-primary text-white shadow-lg'
814
- : 'text-secondary hover:bg-gray-50 border-2 border-gray-100'
812
+ className={`w-full flex items-center justify-between px-4 py-3 rounded-xl text-[13px] transition-all border-2 ${isActive
813
+ ? 'bg-hprimary text-white shadow-lg'
814
+ : 'text-hsecondary hover:bg-gray-50 border-2 border-gray-100'
815
815
  }`}
816
816
  >
817
817
  {range.label}
@@ -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-primary focus:outline-hidden font-['Poppins',sans-serif] text-[13px] text-secondary"
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,14 +838,14 @@ 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-primary focus:outline-hidden font-['Poppins',sans-serif] text-[13px] text-secondary"
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
845
845
  type="button"
846
846
  onClick={applyCustomPrice}
847
847
  disabled={!isCustomPriceDirty}
848
- className="w-full rounded-lg border border-primary bg-primary-10 px-4 py-2 text-sm font-medium text-primary transition hover:bg-primary-20 disabled:cursor-not-allowed disabled:border-slate-200 disabled:text-slate-400"
848
+ className="w-full rounded-lg border border-hprimary bg-hprimary-10 px-4 py-2 text-sm font-medium text-hprimary transition hover:bg-hprimary-20 disabled:cursor-not-allowed disabled:border-slate-200 disabled:text-slate-400"
849
849
  >
850
850
  Apply
851
851
  </button>
@@ -878,7 +878,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
878
878
  return (
879
879
  <div className="min-h-screen bg-[#F9FAFB]">
880
880
  {/* Header Section */}
881
- <section className="relative overflow-hidden bg-primary-bg py-16 md:py-24">
881
+ <section className="relative overflow-hidden bg-hprimary-bg py-16 md:py-24">
882
882
  <div className="container mx-auto px-4">
883
883
  <motion.div
884
884
  initial={{ opacity: 0, y: 24 }}
@@ -887,8 +887,8 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
887
887
  >
888
888
  {/* Orange icon and badge */}
889
889
  <div className="flex items-center justify-center gap-2 mb-4">
890
- <Star className="h-5 w-5 text-primary fill-primary" />
891
- <span className="text-sm font-semibold uppercase tracking-wider text-primary">
890
+ <Star className="h-5 w-5 text-hprimary fill-primary" />
891
+ <span className="text-sm font-semibold uppercase tracking-wider text-hprimary">
892
892
  COMPLETE PHARMACY SHOP
893
893
  </span>
894
894
  </div>
@@ -916,7 +916,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
916
916
  value={searchQuery}
917
917
  onChange={handleInputChange}
918
918
  onKeyDown={handleKeyDown}
919
- className="flex h-16 w-full rounded-full border-0 bg-white px-5 pl-14 pr-5 text-base text-slate-900 placeholder-slate-400 shadow-lg focus:outline-hidden focus:ring-2 focus:ring-primary-500/30 disabled:opacity-50"
919
+ className="flex h-16 w-full rounded-full border-0 bg-white px-5 pl-14 pr-5 text-base text-slate-900 placeholder-slate-400 shadow-lg focus:outline-hidden focus:ring-2 focus:ring-hprimary-500/30 disabled:opacity-50"
920
920
  disabled={isSearching}
921
921
  />
922
922
  </div>
@@ -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-secondary 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">
@@ -936,23 +936,23 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
936
936
  onClick={handleClearCategory}
937
937
  initial={{ opacity: 0, y: 20 }}
938
938
  animate={{ opacity: 1, y: 0 }}
939
- className={`group relative overflow-hidden rounded-[24px] p-6 min-h-[180px] min-w-[170px] transition-all duration-300 ${!categoryFilter ? 'bg-linear-to-br from-primary to-secondary text-white shadow-xl scale-105'
940
- : 'bg-linear-to-br from-gray-50 to-white hover:shadow-lg border-2 border-gray-100 hover:border-primary'
939
+ className={`group relative overflow-hidden rounded-[24px] p-6 min-h-[180px] min-w-[170px] transition-all duration-300 ${!categoryFilter ? 'bg-linear-to-br from-hprimary to-hsecondary text-white shadow-xl scale-105'
940
+ : 'bg-linear-to-br from-gray-50 to-white hover:shadow-lg border-2 border-gray-100 hover:border-hprimary'
941
941
  }`}
942
942
  >
943
943
  <div className="relative">
944
944
  <div className={`size-12 rounded-full mb-3 mx-auto flex items-center justify-center transition-all ${!categoryFilter
945
945
  ? 'bg-white/20'
946
- : 'bg-linear-to-br from-primary-10 to-secondary-10 group-hover:scale-110'
946
+ : 'bg-linear-to-br from-hprimary-10 to-hsecondary-10 group-hover:scale-110'
947
947
  }`}>
948
- <Package className={`size-6 ${!categoryFilter ? 'text-white' : 'text-primary'
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-secondary'
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-muted'
955
+ <p className={`text-[11px] ${!categoryFilter ? 'text-white/80' : 'text-hmuted'
956
956
  }`}>
957
957
  Browse Everything
958
958
  </p>
@@ -971,23 +971,23 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
971
971
  animate={{ opacity: 1, y: 0 }}
972
972
  transition={{ delay: index * 0.1 }}
973
973
  onClick={() => handleCategoryChange(categoryId)}
974
- className={`group relative overflow-hidden rounded-[24px] p-6 min-h-[180px] min-w-[170px] transition-all duration-300 ${isSelected ? 'bg-linear-to-br from-primary to-secondary text-white shadow-xl scale-105'
975
- : 'bg-linear-to-br from-gray-50 to-white hover:shadow-lg border-2 border-gray-100 hover:border-primary'
974
+ className={`group relative overflow-hidden rounded-[24px] p-6 min-h-[180px] min-w-[170px] transition-all duration-300 ${isSelected ? 'bg-linear-to-br from-hprimary to-hsecondary text-white shadow-xl scale-105'
975
+ : 'bg-linear-to-br from-gray-50 to-white hover:shadow-lg border-2 border-gray-100 hover:border-hprimary'
976
976
  }`}
977
977
  >
978
978
  <div className="relative">
979
979
  <div className={`size-12 rounded-full mb-3 mx-auto flex items-center justify-center transition-all ${isSelected
980
980
  ? 'bg-white/20'
981
- : 'bg-linear-to-br from-primary-10 to-secondary-10 group-hover:scale-110'
981
+ : 'bg-linear-to-br from-hprimary-10 to-hsecondary-10 group-hover:scale-110'
982
982
  }`}>
983
- <Icon className={`size-6 ${isSelected ? 'text-white' : 'text-primary'
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-secondary'
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-muted'
990
+ <p className={`text-[11px] ${isSelected ? 'text-white/80' : 'text-hmuted'
991
991
  }`}>
992
992
  {category.description}
993
993
  </p>
@@ -1027,7 +1027,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
1027
1027
  onChange={(event) => {
1028
1028
  setSortOption(event.target.value as SortOption);
1029
1029
  }}
1030
- className="appearance-none rounded-full border border-gray-200 bg-white py-2.5 pl-10 pr-9 text-sm font-medium text-gray-700 shadow-xs transition focus:outline-hidden focus:ring-1 focus:ring-secondary focus:border-primary"
1030
+ className="appearance-none rounded-full border border-gray-200 bg-white py-2.5 pl-10 pr-9 text-sm font-medium text-gray-700 shadow-xs transition focus:outline-hidden focus:ring-1 focus:ring-hsecondary focus:border-hprimary"
1031
1031
  >
1032
1032
  <option value="featured">Featured products</option>
1033
1033
  <option value="price-low-high">Price: low to high</option>
@@ -1041,7 +1041,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
1041
1041
  type="button"
1042
1042
  onClick={() => setViewMode('grid')}
1043
1043
  className={`flex items-center gap-2 rounded-full px-4 py-2 text-sm font-medium transition ${viewMode === 'grid'
1044
- ? 'bg-white text-primary shadow-md'
1044
+ ? 'bg-white text-hprimary shadow-md'
1045
1045
  : 'text-gray-500 hover:text-gray-700'
1046
1046
  }`}
1047
1047
  aria-pressed={viewMode === 'grid'}
@@ -1052,7 +1052,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
1052
1052
  type="button"
1053
1053
  onClick={() => setViewMode('list')}
1054
1054
  className={`flex items-center gap-2 rounded-full px-4 py-2 text-sm font-medium transition ${viewMode === 'list'
1055
- ? 'bg-white text-primary shadow-md'
1055
+ ? 'bg-white text-hprimary shadow-md'
1056
1056
  : 'text-gray-500 hover:text-gray-700'
1057
1057
  }`}
1058
1058
  aria-pressed={viewMode === 'list'}
@@ -1070,10 +1070,10 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
1070
1070
  key={chip.key}
1071
1071
  type="button"
1072
1072
  onClick={chip.onRemove}
1073
- className="group flex items-center gap-2 rounded-full bg-primary-50 px-3 py-1.5 text-sm font-medium text-primary-700 transition hover:bg-primary-100"
1073
+ className="group flex items-center gap-2 rounded-full bg-hprimary-50 px-3 py-1.5 text-sm font-medium text-hprimary-700 transition hover:bg-hprimary-100"
1074
1074
  >
1075
1075
  {chip.label}
1076
- <X className="h-4 w-4 text-primary-500 group-hover:text-primary-700" />
1076
+ <X className="h-4 w-4 text-hprimary-500 group-hover:text-hprimary-700" />
1077
1077
  </button>
1078
1078
  ))}
1079
1079
  <button
@@ -1136,7 +1136,7 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
1136
1136
  </div>
1137
1137
 
1138
1138
  <div className="flex-1 space-y-3">
1139
- <div className="flex flex-wrap items-center gap-2 text-xs font-semibold uppercase tracking-wide text-primary-600">
1139
+ <div className="flex flex-wrap items-center gap-2 text-xs font-semibold uppercase tracking-wide text-hprimary-600">
1140
1140
  {product.tags?.slice(0, 3).map((tag: string) => (
1141
1141
  <span
1142
1142
  key={tag}
@@ -1150,12 +1150,12 @@ export function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProp
1150
1150
  {product.name}
1151
1151
  </h3>
1152
1152
  <div className="flex flex-wrap items-center gap-4 text-sm text-gray-500">
1153
- <span className="inline-flex items-center gap-2 font-medium text-primary-600">
1153
+ <span className="inline-flex items-center gap-2 font-medium text-hprimary-600">
1154
1154
  <ShieldCheck className="h-4 w-4" />
1155
1155
  {displayInventoryCount > 0 ? 'In stock & ready to ship' : 'Restocking soon'}
1156
1156
  </span>
1157
1157
  <span className="inline-flex items-center gap-2">
1158
- <Clock className="h-4 w-4 text-primary-500" />
1158
+ <Clock className="h-4 w-4 text-hprimary-500" />
1159
1159
  Added {new Date(product.createdAt).toLocaleDateString()}
1160
1160
  </span>
1161
1161
  </div>
@@ -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-secondary 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>