storefront-layouts 1.0.3 → 1.0.4

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 (509) hide show
  1. package/dist/components/auth/LoginForm.js +2 -2
  2. package/dist/components/auth/LoginSheet.js +2 -2
  3. package/dist/components/auth/login-form-core.js +3 -3
  4. package/dist/components/auth/login-sheet-header.js +3 -3
  5. package/dist/components/auth/login-sheet-registry.js +2 -2
  6. package/dist/components/auth/login-sheet-themes/booking-agenda.theme.js +1 -1
  7. package/dist/components/auth/login-sheet-themes/booking.theme.js +1 -1
  8. package/dist/components/auth/login-sheet-themes/clothing-minimal.theme.js +1 -1
  9. package/dist/components/auth/login-sheet-themes/clothing.theme.js +1 -1
  10. package/dist/components/auth/login-sheet-themes/electronics-grid.theme.js +1 -1
  11. package/dist/components/auth/login-sheet-themes/electronics.theme.js +1 -1
  12. package/dist/components/auth/login-sheet-themes/food-modern.theme.js +1 -1
  13. package/dist/components/auth/login-sheet-themes/food.theme.js +1 -1
  14. package/dist/components/auth/login-sheet-themes/index.js +9 -9
  15. package/dist/components/auth/login-sheet-themes/motivational-speaker.theme.js +1 -1
  16. package/dist/components/auth/login-sheet-themes/theme-input-baselines.d.ts +2 -2
  17. package/dist/components/auth/login-sheet-themes/theme-input-baselines.d.ts.map +1 -1
  18. package/dist/components/auth/login-sheet-themes/theme-input-baselines.js +2 -2
  19. package/dist/components/auth/login-sheets/StoreLoginSheetShell.d.ts.map +1 -1
  20. package/dist/components/auth/login-sheets/StoreLoginSheetShell.js +6 -6
  21. package/dist/components/auth/use-login-submit.js +3 -3
  22. package/dist/components/cart/InventoryHoldCountdown.js +2 -2
  23. package/dist/components/categories/category-masonry-grid.js +3 -3
  24. package/dist/components/checkout/CheckoutFeeLines.js +1 -1
  25. package/dist/components/checkout/ShippingOptionsPanel.js +3 -3
  26. package/dist/components/learning/CertificateTemplates.js +2 -2
  27. package/dist/components/learning/CertificateViewer.js +3 -3
  28. package/dist/components/learning/MentorshipProgress.d.ts.map +1 -1
  29. package/dist/components/learning/MentorshipProgress.js +4 -4
  30. package/dist/components/product/ProductVariationSelectors.js +1 -1
  31. package/dist/components/rich-text/CategoryDescription.js +2 -2
  32. package/dist/components/rich-text/ProductDescription.js +2 -2
  33. package/dist/components/rich-text/RichTextExcerpt.js +1 -1
  34. package/dist/components/rich-text/SafeRichHtml.d.ts +8 -11
  35. package/dist/components/rich-text/SafeRichHtml.d.ts.map +1 -1
  36. package/dist/components/rich-text/SafeRichHtml.js +3 -5
  37. package/dist/components/shipping/ProductDeliveryInfoSection.d.ts.map +1 -1
  38. package/dist/components/shipping/ProductDeliveryInfoSection.js +7 -4
  39. package/dist/components/shipping/ShippingQuoteAddressForm.js +3 -3
  40. package/dist/components/ui/alert-modal.js +2 -2
  41. package/dist/components/ui/avatar-image.js +1 -1
  42. package/dist/components/ui/badge.js +1 -1
  43. package/dist/components/ui/breadcrumbs.js +1 -1
  44. package/dist/components/ui/button.d.ts +1 -1
  45. package/dist/components/ui/button.js +1 -1
  46. package/dist/components/ui/card.js +1 -1
  47. package/dist/components/ui/category-tree.js +2 -2
  48. package/dist/components/ui/checkout-button.d.ts.map +1 -1
  49. package/dist/components/ui/checkout-button.js +11 -283
  50. package/dist/components/ui/guest-checkout-modal.js +3 -3
  51. package/dist/components/ui/image-skeleton.js +2 -2
  52. package/dist/components/ui/image-with-fallback.d.ts +3 -1
  53. package/dist/components/ui/image-with-fallback.d.ts.map +1 -1
  54. package/dist/components/ui/image-with-fallback.js +55 -139
  55. package/dist/components/ui/input.js +1 -1
  56. package/dist/components/ui/limited-time-offer-badge.js +2 -2
  57. package/dist/components/ui/loading-skeleton-wrapper.js +1 -1
  58. package/dist/components/ui/modal.js +2 -2
  59. package/dist/components/ui/otp-input.js +1 -1
  60. package/dist/components/ui/out-of-stock-overlay.js +1 -1
  61. package/dist/components/ui/page-animate-wrapper.js +2 -2
  62. package/dist/components/ui/page-content-loader.js +2 -2
  63. package/dist/components/ui/page-loader.js +1 -1
  64. package/dist/components/ui/product-card.d.ts.map +1 -1
  65. package/dist/components/ui/product-card.js +17 -17
  66. package/dist/components/ui/product-rating.js +1 -1
  67. package/dist/components/ui/product-stock-badge.js +2 -2
  68. package/dist/components/ui/review-form.js +2 -2
  69. package/dist/components/ui/route-skeleton-loader.js +6 -6
  70. package/dist/components/ui/sheet.d.ts +2 -1
  71. package/dist/components/ui/sheet.d.ts.map +1 -1
  72. package/dist/components/ui/sheet.js +4 -4
  73. package/dist/components/ui/skeleton.js +1 -1
  74. package/dist/components/ui/skeletons/index.js +5 -5
  75. package/dist/components/ui/skeletons/product-grid-skeleton.js +1 -1
  76. package/dist/components/ui/store-logos.d.ts.map +1 -1
  77. package/dist/components/ui/store-logos.js +4 -4
  78. package/dist/components/ui/toast.js +1 -1
  79. package/dist/components/ui/video-player.js +2 -2
  80. package/dist/editor/alignment-schemas/booking.js +1 -1
  81. package/dist/editor/alignment-schemas/clothing-minimal.js +1 -1
  82. package/dist/editor/alignment-schemas/index.js +20 -20
  83. package/dist/editor/alignment-schemas/lazy-loader.js +1 -1
  84. package/dist/editor/alignment-schemas/metadata.js +1 -1
  85. package/dist/editor/alignment-schemas/resolve-canvas-inspector-leaf.js +3 -3
  86. package/dist/editor/blocks/index.js +3 -3
  87. package/dist/editor/blocks/migrate-clothing-minimal.js +3 -3
  88. package/dist/editor/blocks/nav-outline-utils.js +2 -2
  89. package/dist/editor/blocks/registry.js +1 -1
  90. package/dist/editor/document/adapter.js +4 -4
  91. package/dist/editor/document/block-tree.js +1 -1
  92. package/dist/editor/document/index.js +6 -6
  93. package/dist/editor/document/validate.js +1 -1
  94. package/dist/editor/index.js +12 -12
  95. package/dist/editor/layout-content-loader.js +3 -3
  96. package/dist/editor/payaza-form/ArrayItemManager.js +2 -2
  97. package/dist/editor/payaza-form/EditorCanvasPreview.js +5 -5
  98. package/dist/editor/payaza-form/FieldRenderer.js +17 -17
  99. package/dist/editor/payaza-form/IframePreviewMessageBridge.js +3 -3
  100. package/dist/editor/payaza-form/PayazaFormEditor.js +31 -31
  101. package/dist/editor/payaza-form/PayazaFormEditorFullPage.js +2 -2
  102. package/dist/editor/payaza-form/SliderArrayEditor.js +3 -3
  103. package/dist/editor/payaza-form/components/ArrayField.js +1 -1
  104. package/dist/editor/payaza-form/components/BlockStylesInspector.js +1 -1
  105. package/dist/editor/payaza-form/components/BlocksField.js +9 -9
  106. package/dist/editor/payaza-form/components/ButtonField.js +3 -3
  107. package/dist/editor/payaza-form/components/CanvasGranularInspector.js +11 -11
  108. package/dist/editor/payaza-form/components/IconField.js +2 -2
  109. package/dist/editor/payaza-form/components/ImageField.js +1 -1
  110. package/dist/editor/payaza-form/components/NumberField.js +1 -1
  111. package/dist/editor/payaza-form/components/RichTextField.js +2 -2
  112. package/dist/editor/payaza-form/components/SectionField.js +1 -1
  113. package/dist/editor/payaza-form/components/SectionSchemaInspector.js +3 -3
  114. package/dist/editor/payaza-form/components/StarRatingField.js +2 -2
  115. package/dist/editor/payaza-form/components/TextField.js +1 -1
  116. package/dist/editor/payaza-form/data-merger.js +6 -6
  117. package/dist/editor/payaza-form/data-transformer.js +3 -3
  118. package/dist/editor/payaza-form/engine.js +1 -1
  119. package/dist/editor/payaza-form/examples/custom-widgets.example.js +1 -1
  120. package/dist/editor/payaza-form/index.js +8 -8
  121. package/dist/editor/payaza-form/layout-loader.js +2 -2
  122. package/dist/editor/payaza-form/preview-message-handler.js +3 -3
  123. package/dist/editor/payaza-form/schema-bridge.js +3 -3
  124. package/dist/editor/payaza-form/widget-registry.js +1 -1
  125. package/dist/editor/shared/BlockOutlineTree.js +2 -2
  126. package/dist/editor/shared/EditorHeader.js +2 -2
  127. package/dist/editor/shared/EditorNavigator.js +2 -2
  128. package/dist/editor/shared/IframePreview.js +6 -6
  129. package/dist/editor/shared/InlineCanvasPreview.js +8 -8
  130. package/dist/editor/shared/LayoutRenderer.js +1 -1
  131. package/dist/editor/shared/ResizableSidebar.js +1 -1
  132. package/dist/editor/shared/index.js +7 -7
  133. package/dist/hooks/use-analytics.js +3 -3
  134. package/dist/hooks/use-api.js +1 -1
  135. package/dist/hooks/use-cart-api.d.ts.map +1 -1
  136. package/dist/hooks/use-cart-api.js +8 -3
  137. package/dist/hooks/use-catalog-loader.js +3 -3
  138. package/dist/hooks/use-catalog-price-range.d.ts +2 -5
  139. package/dist/hooks/use-catalog-price-range.d.ts.map +1 -1
  140. package/dist/hooks/use-catalog-price-range.js +20 -5
  141. package/dist/hooks/use-category-products.d.ts +8 -0
  142. package/dist/hooks/use-category-products.d.ts.map +1 -0
  143. package/dist/hooks/use-category-products.js +43 -0
  144. package/dist/hooks/use-checkout-fees.d.ts +3 -4
  145. package/dist/hooks/use-checkout-fees.d.ts.map +1 -1
  146. package/dist/hooks/use-checkout-fees.js +1 -1
  147. package/dist/hooks/use-content-ready.js +1 -1
  148. package/dist/hooks/use-featured-products.d.ts +3 -0
  149. package/dist/hooks/use-featured-products.d.ts.map +1 -0
  150. package/dist/hooks/use-featured-products.js +25 -0
  151. package/dist/hooks/use-multi-store-checkout-fees.d.ts +3 -4
  152. package/dist/hooks/use-multi-store-checkout-fees.d.ts.map +1 -1
  153. package/dist/hooks/use-multi-store-checkout-fees.js +1 -1
  154. package/dist/hooks/use-navigation-loading.js +1 -1
  155. package/dist/hooks/use-payaza-checkout.d.ts +1 -1
  156. package/dist/hooks/use-payaza-checkout.d.ts.map +1 -1
  157. package/dist/hooks/use-payaza-checkout.js +9 -3
  158. package/dist/hooks/use-product-brands.d.ts +5 -0
  159. package/dist/hooks/use-product-brands.d.ts.map +1 -0
  160. package/dist/hooks/use-product-brands.js +25 -0
  161. package/dist/hooks/use-product-by-slug.d.ts +7 -0
  162. package/dist/hooks/use-product-by-slug.d.ts.map +1 -0
  163. package/dist/hooks/use-product-by-slug.js +38 -0
  164. package/dist/hooks/use-product-reviews.d.ts +15 -0
  165. package/dist/hooks/use-product-reviews.d.ts.map +1 -0
  166. package/dist/hooks/use-product-reviews.js +75 -0
  167. package/dist/hooks/use-product-variation-selection.d.ts +2 -8
  168. package/dist/hooks/use-product-variation-selection.d.ts.map +1 -1
  169. package/dist/hooks/use-product-variation-selection.js +1 -1
  170. package/dist/hooks/use-products-api.js +3 -3
  171. package/dist/hooks/use-shipping-quote.js +2 -2
  172. package/dist/hooks/use-store-api.js +4 -4
  173. package/dist/hooks/usePreviewSlideSync.js +1 -1
  174. package/dist/index.d.ts +62 -74
  175. package/dist/index.d.ts.map +1 -1
  176. package/dist/index.js +141 -153
  177. package/dist/layouts/booking/components/BookingHomePage.d.ts.map +1 -1
  178. package/dist/layouts/booking/components/BookingHomePage.js +68 -74
  179. package/dist/layouts/booking/components/BookingMultilineHeading.js +1 -1
  180. package/dist/layouts/booking/components/BookingTestimonialCard.js +2 -2
  181. package/dist/layouts/booking/components/BookingTestimonialsEmptyState.js +1 -1
  182. package/dist/layouts/booking/components/booking-footer-defaults.js +2 -2
  183. package/dist/layouts/booking/index.js +8 -8
  184. package/dist/layouts/booking/pages/AboutPage.d.ts +1 -1
  185. package/dist/layouts/booking/pages/AboutPage.d.ts.map +1 -1
  186. package/dist/layouts/booking/pages/AboutPage.js +39 -60
  187. package/dist/layouts/booking/pages/BookPage.d.ts.map +1 -1
  188. package/dist/layouts/booking/pages/BookPage.js +16 -22
  189. package/dist/layouts/booking/pages/CategoriesPage.js +6 -6
  190. package/dist/layouts/booking/pages/CategoryPage.d.ts +1 -1
  191. package/dist/layouts/booking/pages/CategoryPage.d.ts.map +1 -1
  192. package/dist/layouts/booking/pages/CategoryPage.js +17 -26
  193. package/dist/layouts/booking/pages/ContactPage.d.ts +1 -1
  194. package/dist/layouts/booking/pages/ContactPage.d.ts.map +1 -1
  195. package/dist/layouts/booking/pages/ContactPage.js +5 -12
  196. package/dist/layouts/booking/pages/ProductDetailPage.d.ts +1 -1
  197. package/dist/layouts/booking/pages/ProductDetailPage.d.ts.map +1 -1
  198. package/dist/layouts/booking/pages/ProductDetailPage.js +203 -150
  199. package/dist/layouts/booking/pages/ServicesPage.d.ts +1 -1
  200. package/dist/layouts/booking/pages/ServicesPage.d.ts.map +1 -1
  201. package/dist/layouts/booking/pages/ServicesPage.js +11 -31
  202. package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.d.ts.map +1 -1
  203. package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.js +21 -30
  204. package/dist/layouts/booking-agenda/index.js +8 -8
  205. package/dist/layouts/booking-agenda/pages/AboutPage.d.ts +1 -1
  206. package/dist/layouts/booking-agenda/pages/AboutPage.d.ts.map +1 -1
  207. package/dist/layouts/booking-agenda/pages/AboutPage.js +11 -14
  208. package/dist/layouts/booking-agenda/pages/BookPage.d.ts.map +1 -1
  209. package/dist/layouts/booking-agenda/pages/BookPage.js +15 -21
  210. package/dist/layouts/booking-agenda/pages/CategoriesPage.js +5 -5
  211. package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts +1 -1
  212. package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts.map +1 -1
  213. package/dist/layouts/booking-agenda/pages/CategoryPage.js +12 -18
  214. package/dist/layouts/booking-agenda/pages/ContactPage.d.ts +1 -1
  215. package/dist/layouts/booking-agenda/pages/ContactPage.d.ts.map +1 -1
  216. package/dist/layouts/booking-agenda/pages/ContactPage.js +8 -13
  217. package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts +1 -1
  218. package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts.map +1 -1
  219. package/dist/layouts/booking-agenda/pages/ProductDetailPage.js +202 -149
  220. package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts +1 -1
  221. package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts.map +1 -1
  222. package/dist/layouts/booking-agenda/pages/ServicesPage.js +8 -23
  223. package/dist/layouts/clothing/components/ClothingHomePage.d.ts.map +1 -1
  224. package/dist/layouts/clothing/components/ClothingHomePage.js +199 -136
  225. package/dist/layouts/clothing/index.js +7 -7
  226. package/dist/layouts/clothing/pages/AboutPage.d.ts +1 -1
  227. package/dist/layouts/clothing/pages/AboutPage.d.ts.map +1 -1
  228. package/dist/layouts/clothing/pages/AboutPage.js +19 -33
  229. package/dist/layouts/clothing/pages/CategoriesPage.js +8 -8
  230. package/dist/layouts/clothing/pages/CategoryPage.d.ts +1 -1
  231. package/dist/layouts/clothing/pages/CategoryPage.d.ts.map +1 -1
  232. package/dist/layouts/clothing/pages/CategoryPage.js +15 -41
  233. package/dist/layouts/clothing/pages/ContactPage.d.ts +1 -1
  234. package/dist/layouts/clothing/pages/ContactPage.d.ts.map +1 -1
  235. package/dist/layouts/clothing/pages/ContactPage.js +5 -8
  236. package/dist/layouts/clothing/pages/ProductDetailPage.d.ts +1 -1
  237. package/dist/layouts/clothing/pages/ProductDetailPage.d.ts.map +1 -1
  238. package/dist/layouts/clothing/pages/ProductDetailPage.js +256 -167
  239. package/dist/layouts/clothing/pages/ProductsPage.d.ts +1 -1
  240. package/dist/layouts/clothing/pages/ProductsPage.d.ts.map +1 -1
  241. package/dist/layouts/clothing/pages/ProductsPage.js +125 -59
  242. package/dist/layouts/clothing/payaza-bindings.js +2 -2
  243. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts.map +1 -1
  244. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.js +32 -131
  245. package/dist/layouts/clothing-minimal/components/clothing-minimal-block-render.js +8 -8
  246. package/dist/layouts/clothing-minimal/index.js +7 -7
  247. package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts +1 -1
  248. package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts.map +1 -1
  249. package/dist/layouts/clothing-minimal/pages/AboutPage.js +37 -61
  250. package/dist/layouts/clothing-minimal/pages/CategoriesPage.js +7 -7
  251. package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts +1 -1
  252. package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts.map +1 -1
  253. package/dist/layouts/clothing-minimal/pages/CategoryPage.js +13 -18
  254. package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts +1 -1
  255. package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts.map +1 -1
  256. package/dist/layouts/clothing-minimal/pages/ContactPage.js +5 -8
  257. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts +1 -1
  258. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts.map +1 -1
  259. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.js +202 -143
  260. package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts +1 -1
  261. package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts.map +1 -1
  262. package/dist/layouts/clothing-minimal/pages/ProductsPage.js +126 -57
  263. package/dist/layouts/electronics/components/ElectronicsCategoriesPage.js +7 -7
  264. package/dist/layouts/electronics/components/ElectronicsGridProductCard.js +10 -10
  265. package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts.map +1 -1
  266. package/dist/layouts/electronics/components/ElectronicsHomePage.js +29 -31
  267. package/dist/layouts/electronics/components/ElectronicsPageWrapper.js +4 -4
  268. package/dist/layouts/electronics/components/ElectronicsProductsPage.d.ts.map +1 -1
  269. package/dist/layouts/electronics/components/ElectronicsProductsPage.js +81 -23
  270. package/dist/layouts/electronics/components/ElectronicsStoreFooter.js +2 -2
  271. package/dist/layouts/electronics/components/ElectronicsStoreHeader.js +6 -6
  272. package/dist/layouts/electronics/index.js +18 -18
  273. package/dist/layouts/electronics/pages/AboutPage.d.ts +1 -1
  274. package/dist/layouts/electronics/pages/AboutPage.d.ts.map +1 -1
  275. package/dist/layouts/electronics/pages/AboutPage.js +11 -14
  276. package/dist/layouts/electronics/pages/CategoriesPage.js +1 -1
  277. package/dist/layouts/electronics/pages/CategoryPage.d.ts +1 -1
  278. package/dist/layouts/electronics/pages/CategoryPage.d.ts.map +1 -1
  279. package/dist/layouts/electronics/pages/CategoryPage.js +14 -20
  280. package/dist/layouts/electronics/pages/ContactPage.d.ts +1 -1
  281. package/dist/layouts/electronics/pages/ContactPage.d.ts.map +1 -1
  282. package/dist/layouts/electronics/pages/ContactPage.js +8 -13
  283. package/dist/layouts/electronics/pages/HelpCenterPage.js +1 -1
  284. package/dist/layouts/electronics/pages/PrivacyPolicyPage.js +1 -1
  285. package/dist/layouts/electronics/pages/ProductDetailPage.d.ts +1 -1
  286. package/dist/layouts/electronics/pages/ProductDetailPage.d.ts.map +1 -1
  287. package/dist/layouts/electronics/pages/ProductDetailPage.js +201 -142
  288. package/dist/layouts/electronics/pages/ProductsPage.d.ts +1 -1
  289. package/dist/layouts/electronics/pages/ProductsPage.d.ts.map +1 -1
  290. package/dist/layouts/electronics/pages/ProductsPage.js +119 -49
  291. package/dist/layouts/electronics/pages/TermsPage.js +1 -1
  292. package/dist/layouts/electronics/pages/TrackOrderPage.js +4 -4
  293. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.js +10 -10
  294. package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.d.ts.map +1 -1
  295. package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.js +75 -33
  296. package/dist/layouts/electronics-grid/index.js +14 -14
  297. package/dist/layouts/electronics-grid/pages/AboutPage.d.ts +1 -1
  298. package/dist/layouts/electronics-grid/pages/AboutPage.d.ts.map +1 -1
  299. package/dist/layouts/electronics-grid/pages/AboutPage.js +11 -14
  300. package/dist/layouts/electronics-grid/pages/CategoriesPage.js +1 -1
  301. package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts +1 -1
  302. package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts.map +1 -1
  303. package/dist/layouts/electronics-grid/pages/CategoryPage.js +14 -20
  304. package/dist/layouts/electronics-grid/pages/ContactPage.d.ts +1 -1
  305. package/dist/layouts/electronics-grid/pages/ContactPage.d.ts.map +1 -1
  306. package/dist/layouts/electronics-grid/pages/ContactPage.js +8 -13
  307. package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.js +6 -6
  308. package/dist/layouts/electronics-grid/pages/HelpCenterPage.js +1 -1
  309. package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.js +1 -1
  310. package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts +1 -1
  311. package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts.map +1 -1
  312. package/dist/layouts/electronics-grid/pages/ProductDetailPage.js +201 -142
  313. package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts +1 -1
  314. package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts.map +1 -1
  315. package/dist/layouts/electronics-grid/pages/ProductsPage.js +121 -52
  316. package/dist/layouts/electronics-grid/pages/TermsPage.js +1 -1
  317. package/dist/layouts/electronics-grid/pages/TrackOrderPage.js +4 -4
  318. package/dist/layouts/food/components/FoodHomePage.d.ts.map +1 -1
  319. package/dist/layouts/food/components/FoodHomePage.js +42 -41
  320. package/dist/layouts/food/index.js +8 -8
  321. package/dist/layouts/food/pages/AboutPage.d.ts +1 -1
  322. package/dist/layouts/food/pages/AboutPage.d.ts.map +1 -1
  323. package/dist/layouts/food/pages/AboutPage.js +44 -45
  324. package/dist/layouts/food/pages/CategoriesPage.js +6 -6
  325. package/dist/layouts/food/pages/CategoryPage.d.ts +1 -1
  326. package/dist/layouts/food/pages/CategoryPage.d.ts.map +1 -1
  327. package/dist/layouts/food/pages/CategoryPage.js +23 -21
  328. package/dist/layouts/food/pages/ContactPage.d.ts +1 -1
  329. package/dist/layouts/food/pages/ContactPage.d.ts.map +1 -1
  330. package/dist/layouts/food/pages/ContactPage.js +5 -7
  331. package/dist/layouts/food/pages/MenuPage.d.ts +1 -1
  332. package/dist/layouts/food/pages/MenuPage.d.ts.map +1 -1
  333. package/dist/layouts/food/pages/MenuPage.js +81 -42
  334. package/dist/layouts/food/pages/ProductDetailPage.d.ts +1 -1
  335. package/dist/layouts/food/pages/ProductDetailPage.d.ts.map +1 -1
  336. package/dist/layouts/food/pages/ProductDetailPage.js +209 -171
  337. package/dist/layouts/food/pages/ProductsPage.d.ts +1 -1
  338. package/dist/layouts/food/pages/ProductsPage.d.ts.map +1 -1
  339. package/dist/layouts/food/pages/ProductsPage.js +130 -45
  340. package/dist/layouts/food-modern/components/FoodHomePageModern.js +10 -10
  341. package/dist/layouts/food-modern/index.js +8 -8
  342. package/dist/layouts/food-modern/pages/AboutPage.d.ts +1 -1
  343. package/dist/layouts/food-modern/pages/AboutPage.d.ts.map +1 -1
  344. package/dist/layouts/food-modern/pages/AboutPage.js +11 -14
  345. package/dist/layouts/food-modern/pages/CategoriesPage.js +5 -5
  346. package/dist/layouts/food-modern/pages/CategoryPage.d.ts +1 -1
  347. package/dist/layouts/food-modern/pages/CategoryPage.d.ts.map +1 -1
  348. package/dist/layouts/food-modern/pages/CategoryPage.js +23 -20
  349. package/dist/layouts/food-modern/pages/ContactPage.d.ts +1 -1
  350. package/dist/layouts/food-modern/pages/ContactPage.d.ts.map +1 -1
  351. package/dist/layouts/food-modern/pages/ContactPage.js +5 -7
  352. package/dist/layouts/food-modern/pages/MenuPage.d.ts +1 -1
  353. package/dist/layouts/food-modern/pages/MenuPage.d.ts.map +1 -1
  354. package/dist/layouts/food-modern/pages/MenuPage.js +81 -46
  355. package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts +1 -1
  356. package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts.map +1 -1
  357. package/dist/layouts/food-modern/pages/ProductDetailPage.js +202 -143
  358. package/dist/layouts/food-modern/pages/ProductsPage.d.ts +1 -1
  359. package/dist/layouts/food-modern/pages/ProductsPage.d.ts.map +1 -1
  360. package/dist/layouts/food-modern/pages/ProductsPage.js +117 -33
  361. package/dist/layouts/motivational-speaker/components/MotivationalHomePage.d.ts.map +1 -1
  362. package/dist/layouts/motivational-speaker/components/MotivationalHomePage.js +32 -23
  363. package/dist/layouts/motivational-speaker/components/MotivationalSpeakerPageWrapper.js +1 -1
  364. package/dist/layouts/motivational-speaker/index.js +9 -9
  365. package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts +1 -1
  366. package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts.map +1 -1
  367. package/dist/layouts/motivational-speaker/pages/AboutPage.js +6 -9
  368. package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts +1 -1
  369. package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts.map +1 -1
  370. package/dist/layouts/motivational-speaker/pages/CategoryPage.js +18 -22
  371. package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts +1 -1
  372. package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts.map +1 -1
  373. package/dist/layouts/motivational-speaker/pages/ContactPage.js +9 -13
  374. package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts +1 -1
  375. package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts.map +1 -1
  376. package/dist/layouts/motivational-speaker/pages/ProductsPage.js +121 -52
  377. package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts +1 -1
  378. package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts.map +1 -1
  379. package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.js +15 -24
  380. package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts +1 -1
  381. package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts.map +1 -1
  382. package/dist/layouts/motivational-speaker/pages/ServicesPage.js +8 -23
  383. package/dist/layouts/motivational-speaker/pages/SubscriptionPage.js +7 -7
  384. package/dist/layouts/shared/components/BaseStoreLayout.js +9 -9
  385. package/dist/layouts/shared/components/CartLineQuantityControl.js +1 -1
  386. package/dist/layouts/shared/components/GenericPageWrapper.js +3 -3
  387. package/dist/layouts/shared/components/ProductPriceFilterSection.js +4 -4
  388. package/dist/layouts/shared/components/PromoBanner.d.ts +1 -4
  389. package/dist/layouts/shared/components/PromoBanner.d.ts.map +1 -1
  390. package/dist/layouts/shared/components/PromoBanner.js +12 -8
  391. package/dist/layouts/shared/components/StoreFooter.js +10 -10
  392. package/dist/layouts/shared/components/StoreHeader.js +7 -7
  393. package/dist/layouts/shared/components/TestimonialCard.d.ts.map +1 -1
  394. package/dist/layouts/shared/components/TestimonialCard.js +2 -2
  395. package/dist/layouts/shared/components/headers/BookingAgendaSidebar.js +2 -2
  396. package/dist/layouts/shared/components/headers/ClothingMinimalHeader.js +11 -11
  397. package/dist/layouts/shared/components/headers/FoodModernHeader.js +7 -7
  398. package/dist/layouts/shared/index.js +22 -22
  399. package/dist/layouts/shared/pages/AccountPage.d.ts.map +1 -1
  400. package/dist/layouts/shared/pages/AccountPage.js +101 -27
  401. package/dist/layouts/shared/pages/CartPage.d.ts.map +1 -1
  402. package/dist/layouts/shared/pages/CartPage.js +39 -90
  403. package/dist/layouts/shared/pages/CheckoutPage.d.ts.map +1 -1
  404. package/dist/layouts/shared/pages/CheckoutPage.js +349 -868
  405. package/dist/layouts/shared/pages/CookiePolicyPage.js +1 -1
  406. package/dist/layouts/shared/pages/FeatureDisabledPage.js +1 -1
  407. package/dist/layouts/shared/pages/HelpCenterPage.js +1 -1
  408. package/dist/layouts/shared/pages/MaintenancePage.d.ts.map +1 -1
  409. package/dist/layouts/shared/pages/MaintenancePage.js +2 -3
  410. package/dist/layouts/shared/pages/PortfolioPage.d.ts.map +1 -1
  411. package/dist/layouts/shared/pages/PortfolioPage.js +2 -2
  412. package/dist/layouts/shared/pages/PrivacyPolicyPage.js +1 -1
  413. package/dist/layouts/shared/pages/SizeGuidePage.js +1 -1
  414. package/dist/layouts/shared/pages/StyleGuidePage.js +3 -3
  415. package/dist/layouts/shared/pages/TeamPage.d.ts.map +1 -1
  416. package/dist/layouts/shared/pages/TeamPage.js +1 -1
  417. package/dist/layouts/shared/pages/TermsPage.js +1 -1
  418. package/dist/layouts/shared/pages/TrackOrderPage.js +4 -4
  419. package/dist/layouts/shared/pages/WishlistPage.d.ts.map +1 -1
  420. package/dist/layouts/shared/pages/WishlistPage.js +44 -29
  421. package/dist/layouts/shared/wrappers/BookingAgendaLayout.d.ts.map +1 -1
  422. package/dist/layouts/shared/wrappers/BookingAgendaLayout.js +80 -35
  423. package/dist/layouts/shared/wrappers/ClothingLayout.js +8 -8
  424. package/dist/layouts/shared/wrappers/ClothingMinimalLayout.js +7 -7
  425. package/dist/layouts/shared/wrappers/ElectronicsLayout.js +5 -5
  426. package/dist/layouts/shared/wrappers/FoodModernLayout.js +6 -6
  427. package/dist/layouts/shared/wrappers/MotivationalLayout.js +9 -9
  428. package/dist/layouts/shared/wrappers/StandardLayout.js +8 -8
  429. package/dist/lib/api.d.ts +3 -4
  430. package/dist/lib/api.d.ts.map +1 -1
  431. package/dist/lib/api.js +69 -109
  432. package/dist/lib/auth-context.js +2 -2
  433. package/dist/lib/content-selectors.d.ts +1 -1
  434. package/dist/lib/content-selectors.d.ts.map +1 -1
  435. package/dist/lib/content-selectors.js +8 -0
  436. package/dist/lib/layout-config-hydration.js +2 -2
  437. package/dist/lib/loading-context.d.ts.map +1 -1
  438. package/dist/lib/loading-context.js +11 -21
  439. package/dist/lib/payaza-checkout.d.ts.map +1 -1
  440. package/dist/lib/payaza-checkout.js +2 -4
  441. package/dist/lib/payaza-public-key.d.ts +6 -0
  442. package/dist/lib/payaza-public-key.d.ts.map +1 -0
  443. package/dist/lib/payaza-public-key.js +10 -0
  444. package/dist/lib/rich-html.d.ts +31 -26
  445. package/dist/lib/rich-html.d.ts.map +1 -1
  446. package/dist/lib/rich-html.js +1 -0
  447. package/dist/lib/services/analytics.service.js +1 -1
  448. package/dist/lib/services/auth.service.js +1 -1
  449. package/dist/lib/services/booking.service.js +1 -1
  450. package/dist/lib/services/category.service.js +1 -1
  451. package/dist/lib/services/checkout.service.d.ts +3 -0
  452. package/dist/lib/services/checkout.service.d.ts.map +1 -1
  453. package/dist/lib/services/checkout.service.js +1 -1
  454. package/dist/lib/services/contact.service.js +1 -1
  455. package/dist/lib/services/customer.service.js +1 -1
  456. package/dist/lib/services/fees.service.d.ts +17 -63
  457. package/dist/lib/services/fees.service.d.ts.map +1 -1
  458. package/dist/lib/services/fees.service.js +4 -138
  459. package/dist/lib/services/index.js +13 -13
  460. package/dist/lib/services/location.service.js +1 -1
  461. package/dist/lib/services/order.service.js +1 -1
  462. package/dist/lib/services/payment.service.js +1 -1
  463. package/dist/lib/services/product.service.d.ts +7 -2
  464. package/dist/lib/services/product.service.d.ts.map +1 -1
  465. package/dist/lib/services/product.service.js +13 -1
  466. package/dist/lib/services/promo.service.js +1 -1
  467. package/dist/lib/services/review.service.js +1 -1
  468. package/dist/lib/services/service.service.js +1 -1
  469. package/dist/lib/services/shipping.service.js +1 -1
  470. package/dist/lib/services/store.service.js +1 -1
  471. package/dist/lib/store-config-utils.d.ts +1 -10
  472. package/dist/lib/store-config-utils.d.ts.map +1 -1
  473. package/dist/lib/store-config-utils.js +73 -261
  474. package/dist/lib/store-config.js +1 -1
  475. package/dist/lib/store-context.d.ts +1 -23
  476. package/dist/lib/store-context.d.ts.map +1 -1
  477. package/dist/lib/store-context.js +89 -111
  478. package/dist/lib/store-types.d.ts +9 -91
  479. package/dist/lib/store-types.d.ts.map +1 -1
  480. package/dist/lib/utils/asset-helpers.js +1 -1
  481. package/dist/lib/utils/catalog-price-bounds.d.ts +16 -6
  482. package/dist/lib/utils/catalog-price-bounds.d.ts.map +1 -1
  483. package/dist/lib/utils/catalog-price-bounds.js +58 -14
  484. package/dist/lib/utils/category-tree.d.ts +9 -0
  485. package/dist/lib/utils/category-tree.d.ts.map +1 -1
  486. package/dist/lib/utils/category-tree.js +26 -0
  487. package/dist/lib/utils/editor-preview.d.ts +5 -0
  488. package/dist/lib/utils/editor-preview.d.ts.map +1 -1
  489. package/dist/lib/utils/editor-preview.js +17 -3
  490. package/dist/lib/utils/fee-calculations.d.ts +5 -1
  491. package/dist/lib/utils/fee-calculations.d.ts.map +1 -1
  492. package/dist/lib/utils/fee-calculations.js +28 -31
  493. package/dist/lib/utils/index.d.ts +1 -1
  494. package/dist/lib/utils/index.d.ts.map +1 -1
  495. package/dist/lib/utils/index.js +4 -4
  496. package/dist/lib/utils/product-images.js +1 -1
  497. package/dist/lib/utils/product-share.js +1 -1
  498. package/dist/lib/utils/url-helpers.d.ts +6 -0
  499. package/dist/lib/utils/url-helpers.d.ts.map +1 -1
  500. package/dist/lib/utils/url-helpers.js +20 -4
  501. package/dist/preview/LayoutPreview.js +6 -6
  502. package/dist/preview/PreviewRouter.js +4 -4
  503. package/dist/preview/canvas/PreviewCanvasEnhancer.js +8 -8
  504. package/dist/preview/canvas/preview-flush-await.js +1 -1
  505. package/dist/preview/canvas/preview-isolation.js +1 -1
  506. package/dist/preview/canvas/preview-route.js +2 -2
  507. package/dist/preview/index.js +5 -5
  508. package/dist/styles/index.css +190 -149
  509. package/package.json +31 -43
@@ -1,42 +1,57 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Button } from '../../../components/ui/button.js';
4
- import { Breadcrumbs } from '../../../components/ui/breadcrumbs.js';
5
- import { Sheet } from '../../../components/ui/sheet.js';
6
- import { ImageWithFallback } from '../../../components/ui/image-with-fallback.js';
7
- import { RichTextExcerpt } from '../../../components/rich-text/RichTextExcerpt.js';
8
- import { richFieldPlainTextForDisplay } from '../../../lib/rich-html.js';
9
- import { ProductGridSkeleton } from '../../../components/ui/skeletons/index.js';
10
- import { useStore } from '../../../lib/store-context.js';
11
- import { useToast } from '../../../components/ui/toast.js';
12
- import { useLoading } from '../../../lib/loading-context.js';
13
- import { useAnalytics } from '../../../hooks/use-analytics.js';
3
+ import { Button } from '../../../components/ui/button';
4
+ import { Breadcrumbs } from '../../../components/ui/breadcrumbs';
5
+ import { Sheet } from '../../../components/ui/sheet';
6
+ import { ImageWithFallback } from '../../../components/ui/image-with-fallback';
7
+ import { ProductGridSkeleton } from '../../../components/ui/skeletons';
8
+ import { useStore } from '../../../lib/store-context';
9
+ import { useToast } from '../../../components/ui/toast';
10
+ import { useLoading } from '../../../lib/loading-context';
11
+ import { useAnalytics } from '../../../hooks/use-analytics';
14
12
  import { Check, Search, RotateCcw, SlidersHorizontal } from 'lucide-react';
15
13
  import { useSearchParams } from 'next/navigation';
16
- import { useState, useMemo, useEffect, Suspense } from 'react';
17
- import { formatCurrency, isEditorPreviewMode, resolveMenuItemsForDisplay, resolveStoreCategoriesForDisplay } from '../../../lib/utils/index.js';
18
- import { useCatalogLoader } from '../../../hooks/use-catalog-loader.js';
19
- import { useCatalogPriceRange } from '../../../hooks/use-catalog-price-range.js';
20
- import { payazaInlineBindingProps } from '../../../preview/canvas/field-key.js';
21
- import { getBannerImage, getLayoutText } from '../../../lib/utils/asset-helpers.js';
22
- import { shouldUseAPI } from '../../../lib/utils/demo-detection.js';
23
- import { showLayoutDecorativeBadges } from '../../../lib/layout-badges.js';
14
+ import { useState, useMemo, useEffect, useRef, Suspense } from 'react';
15
+ import { formatCurrency } from '../../../lib/utils';
16
+ import { getBannerImage, getLayoutText } from '../../../lib/utils/asset-helpers';
17
+ import { shouldUseAPI } from '../../../lib/utils/demo-detection';
18
+ import { useCatalogPriceRange } from '../../../hooks/use-catalog-price-range';
19
+ import { isWithinActivePriceRange } from '../../../lib/utils/catalog-price-bounds';
20
+ import { ProductPriceFilterSection } from '../../shared/components/ProductPriceFilterSection';
21
+ import { productService } from '../../../lib/services/product.service';
22
+ import { transformProductToStoreProduct } from '../../../lib/store-config-utils';
24
23
  function ProductsPageContent({ storeConfig: initialConfig }) {
25
24
  const { store, addToCart } = useStore();
26
25
  const storeConfig = store || initialConfig;
27
26
  const searchParams = useSearchParams();
28
27
  const categoryParam = searchParams.get('category');
29
- const isPreview = isEditorPreviewMode(storeConfig);
30
- const { products: loadedProducts, categories: loadedCategories, menuItems: loadedMenuItems } = useCatalogLoader(storeConfig, { fetchServices: false });
31
- const menuItems = useMemo(() => resolveMenuItemsForDisplay(loadedMenuItems, loadedProducts, isPreview), [loadedMenuItems, loadedProducts, isPreview]);
32
- const categories = resolveStoreCategoriesForDisplay(loadedCategories, isPreview);
28
+ const [menuItems, setMenuItems] = useState(storeConfig.menuItems || []);
29
+ const [currentPage, setCurrentPage] = useState(1);
30
+ const [totalProducts, setTotalProducts] = useState(storeConfig.productsTotal || storeConfig.menuItems?.length || 0);
31
+ const [isLoadingProducts, setIsLoadingProducts] = useState(false);
32
+ const categories = storeConfig.categories || [];
33
33
  const { addToast } = useToast();
34
34
  const { startBackendLoading, stopBackendLoading } = useLoading();
35
35
  const { trackEvent } = useAnalytics();
36
36
  const productsConfig = storeConfig.layoutConfig?.pages?.products;
37
+ const toMenuItems = (products) => products.map((apiProduct) => {
38
+ const product = transformProductToStoreProduct(apiProduct);
39
+ return {
40
+ id: product.id,
41
+ name: product.name,
42
+ description: product.description || '',
43
+ price: product.price,
44
+ image: product.images[0],
45
+ categoryId: product.categoryId,
46
+ inStock: product.inStock,
47
+ dietaryInfo: [],
48
+ customizable: !!product.variants?.length,
49
+ };
50
+ });
37
51
  // State for filters & sort
38
- const { priceRange, setPriceRange, catalogBounds, sliderMax, resetPriceRange, hasActivePriceFilter, } = useCatalogPriceRange(menuItems, { fallbackMax: 100 });
39
52
  const [selectedCategories, setSelectedCategories] = useState([]);
53
+ const storeCurrency = storeConfig.settings?.currency || 'NGN';
54
+ const { priceRange, setPriceRange, catalogBounds, resetPriceRange, hasActivePriceFilter, } = useCatalogPriceRange(menuItems);
40
55
  const [selectedCategoryFilter, setSelectedCategoryFilter] = useState(null);
41
56
  const [searchQuery, setSearchQuery] = useState('');
42
57
  // Initialize filters from URL
@@ -59,7 +74,7 @@ function ProductsPageContent({ storeConfig: initialConfig }) {
59
74
  const filteredAndSortedItems = useMemo(() => {
60
75
  let result = menuItems.filter(item => {
61
76
  // Search Filter
62
- if (searchQuery && !item.name.toLowerCase().includes(searchQuery.toLowerCase()) && !richFieldPlainTextForDisplay(item.description).toLowerCase().includes(searchQuery.toLowerCase())) {
77
+ if (searchQuery && !item.name.toLowerCase().includes(searchQuery.toLowerCase()) && !item.description.toLowerCase().includes(searchQuery.toLowerCase())) {
63
78
  return false;
64
79
  }
65
80
  // Category filter (Sidebar)
@@ -69,7 +84,7 @@ function ProductsPageContent({ storeConfig: initialConfig }) {
69
84
  }
70
85
  }
71
86
  // Price filter
72
- if (item.price < priceRange[0] || item.price > priceRange[1]) {
87
+ if (!isWithinActivePriceRange(item.price, priceRange, catalogBounds)) {
73
88
  return false;
74
89
  }
75
90
  // Category Filter (Top Buttons)
@@ -95,8 +110,78 @@ function ProductsPageContent({ storeConfig: initialConfig }) {
95
110
  }
96
111
  return result;
97
112
  }, [menuItems, selectedCategories, priceRange, selectedCategoryFilter, sortBy, searchQuery, categories]);
113
+ const productQuery = useMemo(() => {
114
+ const categoryIds = new Set(selectedCategories);
115
+ const selectedCategory = categories.find((category) => category.slug === selectedCategoryFilter);
116
+ if (selectedCategory)
117
+ categoryIds.add(selectedCategory.id);
118
+ return {
119
+ storeId: storeConfig.id,
120
+ categoryIds: categoryIds.size ? Array.from(categoryIds).join(',') : undefined,
121
+ search: searchQuery || undefined,
122
+ minPrice: priceRange[0] || undefined,
123
+ maxPrice: priceRange[1] < catalogBounds.max ? priceRange[1] : undefined,
124
+ sortBy,
125
+ };
126
+ }, [catalogBounds.max, categories, priceRange, searchQuery, selectedCategories, selectedCategoryFilter, sortBy, storeConfig.id]);
127
+ const skipBootstrapRefetch = useRef(true);
128
+ useEffect(() => {
129
+ let cancelled = false;
130
+ const isDefaultQuery = !productQuery.categoryIds &&
131
+ !productQuery.search &&
132
+ !productQuery.minPrice &&
133
+ productQuery.maxPrice === undefined &&
134
+ productQuery.sortBy === 'featured';
135
+ const fetchFilteredProducts = async () => {
136
+ if (skipBootstrapRefetch.current && isDefaultQuery && menuItems.length > 0) {
137
+ skipBootstrapRefetch.current = false;
138
+ setTotalProducts(storeConfig.productsTotal || menuItems.length);
139
+ return;
140
+ }
141
+ skipBootstrapRefetch.current = false;
142
+ setIsLoadingProducts(true);
143
+ try {
144
+ const response = await productService.getProducts({ ...productQuery, page: 1, limit: 12 });
145
+ if (cancelled)
146
+ return;
147
+ setMenuItems(toMenuItems(response.data));
148
+ setCurrentPage(1);
149
+ setTotalProducts(response.meta.total);
150
+ setVisibleProducts(12);
151
+ }
152
+ catch (error) {
153
+ if (!cancelled)
154
+ console.error('Failed to fetch menu items:', error);
155
+ }
156
+ finally {
157
+ if (!cancelled)
158
+ setIsLoadingProducts(false);
159
+ }
160
+ };
161
+ const timer = window.setTimeout(fetchFilteredProducts, searchQuery ? 250 : 0);
162
+ return () => { cancelled = true; window.clearTimeout(timer); };
163
+ }, [productQuery, searchQuery]);
98
164
  const displayedItems = filteredAndSortedItems.slice(0, visibleProducts);
99
- const hasMore = visibleProducts < filteredAndSortedItems.length;
165
+ const hasMore = currentPage * 12 < totalProducts;
166
+ const handleLoadMore = async () => {
167
+ if (isLoadingProducts || !hasMore)
168
+ return;
169
+ setIsLoadingProducts(true);
170
+ try {
171
+ const nextPage = currentPage + 1;
172
+ const response = await productService.getProducts({ ...productQuery, page: nextPage, limit: 12 });
173
+ setMenuItems((current) => [...current, ...toMenuItems(response.data)]);
174
+ setCurrentPage(nextPage);
175
+ setTotalProducts(response.meta.total);
176
+ setVisibleProducts((current) => current + 12);
177
+ }
178
+ catch (error) {
179
+ console.error('Failed to load more menu items:', error);
180
+ }
181
+ finally {
182
+ setIsLoadingProducts(false);
183
+ }
184
+ };
100
185
  const handleAddToCart = (item) => {
101
186
  const product = {
102
187
  ...item,
@@ -142,8 +227,7 @@ function ProductsPageContent({ storeConfig: initialConfig }) {
142
227
  getBannerImage(storeConfig, 'category_header', '');
143
228
  console.log('[ProductsPage] Category header image:', categoryHeaderImage ? 'found' : 'not found', categoryHeaderImage);
144
229
  // Get category header title from assignedText
145
- const categoryHeaderTitle = productsConfig?.productsHeader?.title ||
146
- layoutConfig?.assignedText?.['category_header:title'] ||
230
+ const categoryHeaderTitle = layoutConfig?.assignedText?.['category_header:title'] ||
147
231
  getLayoutText(storeConfig, 'category_header:title', `Explore The Collections of ${storeConfig.name}`);
148
232
  // Get category header buttons from configuration (if available)
149
233
  // assignedText values are always strings
@@ -159,17 +243,17 @@ function ProductsPageContent({ storeConfig: initialConfig }) {
159
243
  const secondaryButtonText = hasSecondaryButtonFromConfig
160
244
  ? (categoryHeaderSecondaryButton && categoryHeaderSecondaryButton.trim() !== '' ? categoryHeaderSecondaryButton.trim() : null)
161
245
  : getLayoutText(storeConfig, 'sections.categories.viewAll', 'View Categories');
162
- return (_jsxs("div", { className: "min-h-screen bg-white font-sans text-slate-900", children: [_jsxs("div", { "data-section": "productsHeader", "data-payaza-section-key": "productsHeader", "data-payaza-page": "products", className: "relative overflow-hidden bg-white", children: [categoryHeaderImage && (_jsxs("div", { className: "absolute inset-0 z-0", children: [_jsx(ImageWithFallback, { src: categoryHeaderImage, alt: categoryHeaderTitle || storeConfig.name, className: "w-full h-full object-cover", skeletonAspectRatio: "16/9" }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-black/60 via-black/40 to-black/60" })] })), !categoryHeaderImage && (_jsxs("div", { className: "absolute top-0 left-0 w-full h-full overflow-hidden z-0 pointer-events-none", children: [_jsx("div", { className: "absolute top-[-10%] right-[-5%] w-[500px] h-[500px] bg-gray-100 rounded-full mix-blend-multiply filter blur-3xl opacity-70 animate-pulse-slow" }), _jsx("div", { className: "absolute bottom-[-10%] left-[-10%] w-[400px] h-[400px] bg-gray-50 rounded-full mix-blend-multiply filter blur-3xl opacity-70 animate-pulse-slow", style: { animationDelay: '2s' } })] })), _jsx("div", { className: `container mx-auto px-4 sm:px-6 lg:px-8 relative z-10 pt-12 pb-16 lg:pt-20 lg:pb-24 ${categoryHeaderImage ? 'min-h-[500px] flex items-center' : ''}`, children: _jsx("div", { className: "flex flex-col items-center w-full max-w-4xl mx-auto", children: _jsxs("div", { className: `w-full text-center lg:text-left animate-fade-in-up ${categoryHeaderImage ? 'text-white' : ''}`, children: [_jsx("div", { className: "flex justify-center lg:justify-start mb-6", children: _jsx(Breadcrumbs, { items: breadcrumbItems, variant: categoryHeaderImage ? 'light' : 'default' }) }), showLayoutDecorativeBadges() && (_jsxs("div", { className: `inline-flex items-center gap-2 px-3 py-1 rounded-full text-xs font-bold tracking-wider uppercase mb-6 ${categoryHeaderImage ? 'bg-white/20 backdrop-blur-md text-white border border-white/30' : 'bg-black/5 text-gray-900'}`, children: [_jsx("span", { className: `w-2 h-2 rounded-full animate-pulse ${categoryHeaderImage ? 'bg-white' : 'bg-black'}` }), getLayoutText(storeConfig, 'common.newArrivals', 'New Arrivals 2024')] })), _jsx("h1", { className: `text-4xl sm:text-5xl lg:text-6xl font-bold tracking-tight mb-6 leading-[1.1] ${categoryHeaderImage ? 'text-white' : 'text-gray-900'}`, ...payazaInlineBindingProps(isPreview, 'productsHeader', ['title']), children: categoryHeaderTitle || (_jsxs(_Fragment, { children: ["Explore The Collections of ", _jsx("br", {}), _jsx("span", { className: "text-transparent bg-clip-text bg-gradient-to-r from-gray-900 via-gray-700 to-gray-900", children: storeConfig.name })] })) }), _jsx("p", { className: `text-lg mb-8 leading-relaxed max-w-lg mx-auto lg:mx-0 ${categoryHeaderImage ? 'text-white/90' : 'text-gray-600'}`, children: getLayoutText(storeConfig, 'category_header:description', "Don't miss out on shopping our latest collection! curated for quality and style. Experience the perfect blend of modern aesthetics and premium craftsmanship.") }), _jsxs("div", { className: "flex flex-col sm:flex-row gap-4 justify-center lg:justify-start", children: [primaryButtonText && primaryButtonText.trim() !== '' && (_jsx(Button, { className: `h-12 px-8 rounded-full text-base font-medium shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 ${categoryHeaderImage ? 'bg-white text-gray-900 hover:bg-gray-100' : ''}`, onClick: () => {
246
+ return (_jsxs("div", { className: "min-h-screen bg-white font-sans text-slate-900", children: [_jsxs("div", { className: "relative overflow-hidden bg-white", children: [categoryHeaderImage && (_jsxs("div", { className: "absolute inset-0 z-0", children: [_jsx(ImageWithFallback, { src: categoryHeaderImage, alt: categoryHeaderTitle || storeConfig.name, className: "w-full h-full object-cover", skeletonAspectRatio: "16/9" }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-black/60 via-black/40 to-black/60" })] })), !categoryHeaderImage && (_jsxs("div", { className: "absolute top-0 left-0 w-full h-full overflow-hidden z-0 pointer-events-none", children: [_jsx("div", { className: "absolute top-[-10%] right-[-5%] w-[500px] h-[500px] bg-gray-100 rounded-full mix-blend-multiply filter blur-3xl opacity-70 animate-pulse-slow" }), _jsx("div", { className: "absolute bottom-[-10%] left-[-10%] w-[400px] h-[400px] bg-gray-50 rounded-full mix-blend-multiply filter blur-3xl opacity-70 animate-pulse-slow", style: { animationDelay: '2s' } })] })), _jsx("div", { className: `container mx-auto px-4 sm:px-6 lg:px-8 relative z-10 pt-12 pb-16 lg:pt-20 lg:pb-24 ${categoryHeaderImage ? 'min-h-[500px] flex items-center' : ''}`, children: _jsx("div", { className: "flex flex-col items-center w-full max-w-4xl mx-auto", children: _jsxs("div", { className: `w-full text-center lg:text-left animate-fade-in-up ${categoryHeaderImage ? 'text-white' : ''}`, children: [_jsx("div", { className: "flex justify-center lg:justify-start mb-6", children: _jsx("div", { className: categoryHeaderImage ? 'bg-white/10 backdrop-blur-md px-4 py-2 rounded-full border border-white/20' : '', children: _jsx(Breadcrumbs, { items: breadcrumbItems, variant: categoryHeaderImage ? 'light' : 'default' }) }) }), _jsxs("div", { className: `inline-flex items-center gap-2 px-3 py-1 rounded-full text-xs font-bold tracking-wider uppercase mb-6 ${categoryHeaderImage ? 'bg-white/20 backdrop-blur-md text-white border border-white/30' : 'bg-black/5 text-gray-900'}`, children: [_jsx("span", { className: `w-2 h-2 rounded-full animate-pulse ${categoryHeaderImage ? 'bg-white' : 'bg-black'}` }), getLayoutText(storeConfig, 'common.newArrivals', 'New Arrivals 2024')] }), _jsx("h1", { className: `text-4xl sm:text-5xl lg:text-6xl font-bold tracking-tight mb-6 leading-[1.1] ${categoryHeaderImage ? 'text-white' : 'text-gray-900'}`, children: categoryHeaderTitle || (_jsxs(_Fragment, { children: ["Explore The Collections of ", _jsx("br", {}), _jsx("span", { className: "text-transparent bg-clip-text bg-gradient-to-r from-gray-900 via-gray-700 to-gray-900", children: storeConfig.name })] })) }), _jsx("p", { className: `text-lg mb-8 leading-relaxed max-w-lg mx-auto lg:mx-0 ${categoryHeaderImage ? 'text-white/90' : 'text-gray-600'}`, children: getLayoutText(storeConfig, 'category_header:description', "Don't miss out on shopping our latest collection! curated for quality and style. Experience the perfect blend of modern aesthetics and premium craftsmanship.") }), _jsxs("div", { className: "flex flex-col sm:flex-row gap-4 justify-center lg:justify-start", children: [primaryButtonText && primaryButtonText.trim() !== '' && (_jsx(Button, { className: `h-12 px-8 rounded-full text-base font-medium shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 ${categoryHeaderImage ? 'bg-white text-gray-900 hover:bg-gray-100' : ''}`, onClick: () => {
163
247
  const element = document.getElementById('product-grid');
164
248
  element?.scrollIntoView({ behavior: 'smooth' });
165
249
  }, children: primaryButtonText })), secondaryButtonText && secondaryButtonText.trim() !== '' && (_jsx(Button, { className: `h-12 px-8 rounded-full text-base font-medium shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 ${categoryHeaderImage ? 'bg-white/10 backdrop-blur-md text-white border border-white/30 hover:bg-white/20' : 'bg-gray-100 text-gray-900 hover:bg-gray-200 border border-gray-200'}`, onClick: () => {
166
250
  window.location.href = `/${storeConfig.slug}/categories`;
167
- }, children: secondaryButtonText }))] })] }) }) })] }), _jsxs("div", { "data-content-ready": true, "data-section": "productsGrid", "data-payaza-section-key": "productsGrid", "data-payaza-page": "products", className: "container mx-auto px-4 sm:px-6 lg:px-8 py-8", children: [_jsxs("div", { className: "flex gap-3 mb-8 overflow-x-auto pb-2 scrollbar-hide", children: [_jsx("button", { onClick: () => setSelectedCategoryFilter(null), className: `px-6 py-2.5 rounded-lg text-sm font-semibold whitespace-nowrap transition-all ${!selectedCategoryFilter
251
+ }, children: secondaryButtonText }))] })] }) }) })] }), _jsxs("div", { "data-content-ready": true, className: "container mx-auto px-4 sm:px-6 lg:px-8 py-8", children: [_jsxs("div", { className: "flex gap-3 mb-8 overflow-x-auto pb-2 scrollbar-hide", children: [_jsx("button", { onClick: () => setSelectedCategoryFilter(null), className: `px-6 py-2.5 rounded-lg text-sm font-semibold whitespace-nowrap transition-all ${!selectedCategoryFilter
168
252
  ? 'bg-gray-900 text-white hover:bg-blue-600'
169
253
  : 'bg-gray-100 text-gray-700 hover:bg-blue-50 hover:text-blue-600'}`, children: "All" }), categories.map((category) => (_jsx("button", { onClick: () => setSelectedCategoryFilter(selectedCategoryFilter === category.slug ? null : category.slug), className: `px-6 py-2.5 rounded-lg text-sm font-semibold whitespace-nowrap transition-all ${selectedCategoryFilter === category.slug
170
254
  ? 'bg-gray-900 text-white hover:bg-blue-600'
171
- : 'bg-gray-100 text-gray-700 hover:bg-blue-50 hover:text-blue-600'}`, children: category.name }, category.id)))] }), _jsxs("div", { id: "product-grid", className: "grid grid-cols-1 lg:grid-cols-4 gap-8", children: [_jsxs("aside", { className: "hidden lg:block col-span-1 space-y-8 sticky top-24 h-fit max-h-[calc(100vh-8rem)] overflow-y-auto pr-2 scrollbar-thin scrollbar-thumb-white/10 scrollbar-track-transparent", children: [_jsxs("div", { className: "flex items-center justify-between pb-4 border-b border-white/5", children: [_jsx("h2", { className: "text-xl font-bold text-white uppercase tracking-tight", children: "Filters" }), hasActiveFilters && (_jsxs("button", { onClick: clearAllFilters, className: "text-xs font-medium text-orange-500 hover:text-orange-400 flex items-center gap-1 uppercase tracking-widest", children: [_jsx(RotateCcw, { className: "h-3 w-3" }), " Reset"] }))] }), _jsxs("div", { children: [_jsx("h3", { className: "text-xs font-bold text-gray-500 uppercase tracking-[0.2em] mb-4", children: "Search" }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500" }), _jsx("input", { type: "text", placeholder: "Search menu...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "w-full pl-10 pr-4 py-3 bg-[#1A1A1A] border border-white/10 rounded-none text-sm text-white focus:outline-none focus:border-orange-500 transition-all" })] })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-xs font-bold text-gray-500 uppercase tracking-[0.2em] mb-4", children: "Categories" }), _jsx("div", { className: "space-y-2", children: categories.map((category) => (_jsxs("label", { className: "flex items-center gap-3 cursor-pointer group p-2 -ml-2 rounded-none hover:bg-white/5 transition-colors", children: [_jsx("div", { className: `w-5 h-5 rounded-none border flex items-center justify-center transition-colors ${selectedCategories.includes(category.id) ? 'bg-orange-600 border-orange-600' : 'border-white/20 group-hover:border-white/40'}`, children: selectedCategories.includes(category.id) && _jsx(Check, { className: "h-3 w-3 text-white" }) }), _jsx("input", { type: "checkbox", className: "hidden", checked: selectedCategories.includes(category.id), onChange: () => setSelectedCategories(prev => prev.includes(category.id) ? prev.filter(id => id !== category.id) : [...prev, category.id]) }), _jsx("span", { className: "text-sm text-gray-400 font-medium group-hover:text-white transition-colors uppercase tracking-wide", children: category.name })] }, category.id))) })] }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsx("h3", { className: "text-xs font-bold text-gray-500 uppercase tracking-[0.2em]", children: "Max Price" }), hasActivePriceFilter && (_jsx("button", { onClick: () => resetPriceRange(), className: "text-xs text-orange-500 hover:text-orange-400 font-medium transition-colors uppercase tracking-widest", children: "Reset" }))] }), _jsxs("div", { className: "space-y-4", children: [_jsx("input", { type: "range", min: "0", max: sliderMax, step: "5", value: priceRange[1], onChange: (e) => setPriceRange([priceRange[0], parseInt(e.target.value)]), className: "w-full h-1 bg-white/10 rounded-none appearance-none cursor-pointer accent-orange-600" }), _jsxs("div", { className: "flex items-center justify-between text-[10px] font-bold text-gray-500 uppercase tracking-widest", children: [_jsx("span", { children: "$0" }), _jsx("span", { className: "text-white", children: formatCurrency(priceRange[1], storeConfig.settings?.currency || 'USD', { minimumFractionDigits: 0, maximumFractionDigits: 0 }) })] })] })] })] }), _jsxs("div", { className: "lg:col-span-3", children: [_jsxs("div", { className: "lg:hidden mb-6 flex items-center justify-between", children: [_jsxs(Button, { onClick: () => setIsFilterOpen(true), variant: "outline", className: "flex items-center gap-2 border-white/10 text-white rounded-none uppercase tracking-widest text-xs", children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), " Filters"] }), _jsxs("select", { value: sortBy, onChange: (e) => setSortBy(e.target.value), className: "bg-transparent text-xs font-bold text-gray-400 uppercase tracking-widest focus:outline-none", children: [_jsx("option", { value: "featured", children: "Featured" }), _jsx("option", { value: "price-asc", children: "Price: Low-High" }), _jsx("option", { value: "price-desc", children: "Price: High-Low" })] })] }), _jsxs("div", { className: "hidden lg:flex items-center justify-between mb-8", children: [_jsxs("p", { className: "text-xs font-bold text-gray-500 uppercase tracking-[0.2em]", children: ["Showing ", _jsx("span", { className: "text-white", children: filteredAndSortedItems.length }), " delicacies"] }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx("span", { className: "text-[10px] font-bold text-gray-600 uppercase tracking-[0.3em]", children: "Sort by" }), _jsxs("select", { value: sortBy, onChange: (e) => setSortBy(e.target.value), className: "bg-transparent text-xs font-bold text-white uppercase tracking-widest focus:outline-none cursor-pointer hover:text-orange-500 transition-colors", children: [_jsx("option", { value: "featured", children: "Featured" }), _jsx("option", { value: "price-asc", children: "Price: Low to High" }), _jsx("option", { value: "price-desc", children: "Price: High to Low" })] })] })] }), isFiltering ? (_jsx(ProductGridSkeleton, { count: 12, columns: 3 })) : displayedItems.length > 0 ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8", children: displayedItems.map((item) => (_jsxs("div", { className: "group bg-[#1A1A1A] rounded-none overflow-hidden border border-white/5 hover:border-orange-500/30 transition-all duration-500 flex flex-col h-full", children: [_jsxs("div", { className: "relative aspect-square overflow-hidden grayscale hover:grayscale-0 transition-all duration-700", children: [_jsx(ImageWithFallback, { src: item.image, alt: item.name, className: "w-full h-full object-cover transition-transform duration-1000 group-hover:scale-110", skeletonAspectRatio: "square" }), _jsx("div", { className: "absolute inset-0 bg-black/40 opacity-0 group-hover:opacity-100 transition-opacity duration-500 flex items-center justify-center", children: _jsx(Button, { className: "rounded-none bg-white text-black hover:bg-orange-600 hover:text-white transform translate-y-4 group-hover:translate-y-0 transition-all duration-500 shadow-2xl font-bold px-8 uppercase tracking-widest text-[10px]", onClick: () => handleAddToCart(item), children: "Add to Order" }) })] }), _jsxs("div", { className: "p-8 flex flex-col flex-1 text-center", children: [_jsx("h3", { className: "font-bold text-lg text-white uppercase tracking-tight mb-2 group-hover:text-orange-500 transition-colors transition-all", children: item.name }), _jsx(RichTextExcerpt, { value: item.description, as: "p", className: "text-gray-500 text-sm mb-6 line-clamp-2 leading-relaxed flex-1 font-light italic" }), _jsx("span", { className: "text-2xl font-serif text-white", children: formatCurrency(item.price, storeConfig.settings?.currency || 'USD') })] })] }, item.id))) }), hasMore && (_jsx("div", { className: "mt-16 text-center", children: _jsx(Button, { onClick: () => setVisibleProducts(prev => prev + 12), variant: "outline", className: "min-w-[240px] rounded-none font-bold h-14 border-white/10 text-white hover:bg-white hover:text-black uppercase tracking-[0.2em] text-xs transition-all", children: "Load More" }) }))] })) : (_jsxs("div", { className: "flex flex-col items-center justify-center py-32 bg-[#1A1A1A] rounded-none border border-white/5 text-center", children: [_jsx("div", { className: "w-20 h-20 bg-white/5 rounded-full flex items-center justify-center mb-8 text-gray-600", children: _jsx(Search, { className: "h-10 w-10" }) }), _jsx("h3", { className: "text-2xl font-bold text-white uppercase tracking-tight mb-4", children: "Nothing Found" }), _jsx("p", { className: "text-gray-500 mb-10 max-w-sm mx-auto font-light italic", children: "Our culinary team couldn't find any items matching your criteria." }), _jsx(Button, { onClick: clearAllFilters, className: "rounded-none px-12 h-14 bg-white text-black hover:bg-orange-600 hover:text-white uppercase tracking-widest font-bold text-xs", children: "Reset Filters" })] }))] })] })] }), _jsxs(Sheet, { isOpen: isFilterOpen, onClose: () => setIsFilterOpen(false), title: "Filters", side: "right", className: "bg-[#0F0F0F] text-white border-white/10", children: [_jsxs("div", { className: "flex flex-col h-full overflow-y-auto pb-24 space-y-10 p-1", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-[10px] font-bold text-gray-500 uppercase tracking-[0.3em] mb-6", children: "Search" }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500" }), _jsx("input", { type: "text", placeholder: "Search menu...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "w-full pl-10 pr-4 py-4 bg-[#1A1A1A] border border-white/10 rounded-none text-sm text-white outline-none focus:border-orange-500" })] })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-[10px] font-bold text-gray-500 uppercase tracking-[0.3em] mb-6", children: "Categories" }), _jsx("div", { className: "space-y-4", children: categories.map((category) => (_jsxs("label", { className: "flex items-center gap-4", children: [_jsx("input", { type: "checkbox", checked: selectedCategories.includes(category.id), onChange: () => setSelectedCategories(prev => prev.includes(category.id) ? prev.filter(id => id !== category.id) : [...prev, category.id]), className: "w-5 h-5 rounded-none border-white/20 bg-transparent text-orange-600 focus:ring-orange-500" }), _jsx("span", { className: "text-sm text-gray-400 font-medium uppercase tracking-wider", children: category.name })] }, category.id))) })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-[10px] font-bold text-gray-500 uppercase tracking-[0.3em] mb-6", children: "Max Price" }), _jsx("input", { type: "range", min: "0", max: sliderMax, step: "5", value: priceRange[1], onChange: (e) => setPriceRange([priceRange[0], parseInt(e.target.value)]), className: "w-full h-1 bg-white/10 rounded-none appearance-none cursor-pointer accent-orange-600 mb-6" }), _jsxs("div", { className: "flex justify-between font-bold text-[10px] text-gray-500 uppercase tracking-widest", children: [_jsx("span", { children: "$0" }), _jsx("span", { className: "text-white", children: formatCurrency(priceRange[1], storeConfig.settings?.currency || 'USD', { minimumFractionDigits: 0, maximumFractionDigits: 0 }) })] })] })] }), _jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-6 bg-[#0F0F0F] border-t border-white/10 flex gap-4", children: [_jsx(Button, { onClick: clearAllFilters, variant: "outline", className: "flex-1 h-14 font-bold rounded-none border-white/10 text-white uppercase tracking-widest text-[10px]", children: "Reset" }), _jsx(Button, { onClick: () => setIsFilterOpen(false), className: "flex-[2] bg-white text-black hover:bg-orange-600 hover:text-white h-14 font-bold rounded-none transition-colors uppercase tracking-widest text-[10px]", children: "Apply" })] })] })] }));
255
+ : 'bg-gray-100 text-gray-700 hover:bg-blue-50 hover:text-blue-600'}`, children: category.name }, category.id)))] }), _jsxs("div", { id: "product-grid", className: "grid grid-cols-1 lg:grid-cols-4 gap-8", children: [_jsxs("aside", { className: "hidden lg:block col-span-1 space-y-8 sticky top-24 h-fit max-h-[calc(100vh-8rem)] overflow-y-auto pr-2 scrollbar-thin scrollbar-thumb-white/10 scrollbar-track-transparent", children: [_jsxs("div", { className: "flex items-center justify-between pb-4 border-b border-white/5", children: [_jsx("h2", { className: "text-xl font-bold text-white uppercase tracking-tight", children: "Filters" }), hasActiveFilters && (_jsxs("button", { onClick: clearAllFilters, className: "text-xs font-medium text-orange-500 hover:text-orange-400 flex items-center gap-1 uppercase tracking-widest", children: [_jsx(RotateCcw, { className: "h-3 w-3" }), " Reset"] }))] }), _jsxs("div", { children: [_jsx("h3", { className: "text-xs font-bold text-gray-500 uppercase tracking-[0.2em] mb-4", children: "Search" }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500" }), _jsx("input", { type: "text", placeholder: "Search menu...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "w-full pl-10 pr-4 py-3 bg-[#1A1A1A] border border-white/10 rounded-none text-sm text-white focus:outline-none focus:border-orange-500 transition-all" })] })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-xs font-bold text-gray-500 uppercase tracking-[0.2em] mb-4", children: "Categories" }), _jsx("div", { className: "space-y-2", children: categories.map((category) => (_jsxs("label", { className: "flex items-center gap-3 cursor-pointer group p-2 -ml-2 rounded-none hover:bg-white/5 transition-colors", children: [_jsx("div", { className: `w-5 h-5 rounded-none border flex items-center justify-center transition-colors ${selectedCategories.includes(category.id) ? 'bg-orange-600 border-orange-600' : 'border-white/20 group-hover:border-white/40'}`, children: selectedCategories.includes(category.id) && _jsx(Check, { className: "h-3 w-3 text-white" }) }), _jsx("input", { type: "checkbox", className: "hidden", checked: selectedCategories.includes(category.id), onChange: () => setSelectedCategories(prev => prev.includes(category.id) ? prev.filter(id => id !== category.id) : [...prev, category.id]) }), _jsx("span", { className: "text-sm text-gray-400 font-medium group-hover:text-white transition-colors uppercase tracking-wide", children: category.name })] }, category.id))) })] }), _jsx(ProductPriceFilterSection, { currency: storeCurrency, priceRange: priceRange, onPriceRangeChange: setPriceRange, bounds: catalogBounds, isFilterActive: hasActivePriceFilter, onReset: resetPriceRange })] }), _jsxs("div", { className: "lg:col-span-3", children: [_jsxs("div", { className: "lg:hidden mb-6 flex items-center justify-between", children: [_jsxs(Button, { onClick: () => setIsFilterOpen(true), variant: "outline", className: "flex items-center gap-2 border-white/10 text-white rounded-none uppercase tracking-widest text-xs", children: [_jsx(SlidersHorizontal, { className: "h-4 w-4" }), " Filters"] }), _jsxs("select", { value: sortBy, onChange: (e) => setSortBy(e.target.value), className: "bg-transparent text-xs font-bold text-gray-400 uppercase tracking-widest focus:outline-none", children: [_jsx("option", { value: "featured", children: "Featured" }), _jsx("option", { value: "price-asc", children: "Price: Low-High" }), _jsx("option", { value: "price-desc", children: "Price: High-Low" })] })] }), _jsxs("div", { className: "hidden lg:flex items-center justify-between mb-8", children: [_jsxs("p", { className: "text-xs font-bold text-gray-500 uppercase tracking-[0.2em]", children: ["Showing ", _jsx("span", { className: "text-white", children: filteredAndSortedItems.length }), " delicacies"] }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx("span", { className: "text-[10px] font-bold text-gray-600 uppercase tracking-[0.3em]", children: "Sort by" }), _jsxs("select", { value: sortBy, onChange: (e) => setSortBy(e.target.value), className: "bg-transparent text-xs font-bold text-white uppercase tracking-widest focus:outline-none cursor-pointer hover:text-orange-500 transition-colors", children: [_jsx("option", { value: "featured", children: "Featured" }), _jsx("option", { value: "price-asc", children: "Price: Low to High" }), _jsx("option", { value: "price-desc", children: "Price: High to Low" })] })] })] }), isFiltering ? (_jsx(ProductGridSkeleton, { count: 12, columns: 3 })) : displayedItems.length > 0 ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8", children: displayedItems.map((item) => (_jsxs("div", { className: "group bg-[#1A1A1A] rounded-none overflow-hidden border border-white/5 hover:border-orange-500/30 transition-all duration-500 flex flex-col h-full", children: [_jsxs("div", { className: "relative aspect-square overflow-hidden grayscale hover:grayscale-0 transition-all duration-700", children: [_jsx(ImageWithFallback, { src: item.image, alt: item.name, className: "w-full h-full object-cover transition-transform duration-1000 group-hover:scale-110", skeletonAspectRatio: "square" }), _jsx("div", { className: "absolute inset-0 bg-black/40 opacity-0 group-hover:opacity-100 transition-opacity duration-500 flex items-center justify-center", children: _jsx(Button, { className: "rounded-none bg-white text-black hover:bg-orange-600 hover:text-white transform translate-y-4 group-hover:translate-y-0 transition-all duration-500 shadow-2xl font-bold px-8 uppercase tracking-widest text-[10px]", onClick: () => handleAddToCart(item), children: "Add to Order" }) })] }), _jsxs("div", { className: "p-8 flex flex-col flex-1 text-center", children: [_jsx("h3", { className: "font-bold text-lg text-white uppercase tracking-tight mb-2 group-hover:text-orange-500 transition-colors transition-all", children: item.name }), _jsx("p", { className: "text-gray-500 text-sm mb-6 line-clamp-2 leading-relaxed flex-1 font-light italic", children: item.description }), _jsx("span", { className: "text-2xl font-serif text-white", children: formatCurrency(item.price, storeConfig.settings?.currency || 'USD') })] })] }, item.id))) }), hasMore && (_jsx("div", { className: "mt-16 text-center", children: _jsx(Button, { onClick: handleLoadMore, variant: "outline", className: "min-w-[240px] rounded-none font-bold h-14 border-white/10 text-white hover:bg-white hover:text-black uppercase tracking-[0.2em] text-xs transition-all", children: "Load More" }) }))] })) : (_jsxs("div", { className: "flex flex-col items-center justify-center py-32 bg-[#1A1A1A] rounded-none border border-white/5 text-center", children: [_jsx("div", { className: "w-20 h-20 bg-white/5 rounded-full flex items-center justify-center mb-8 text-gray-600", children: _jsx(Search, { className: "h-10 w-10" }) }), _jsx("h3", { className: "text-2xl font-bold text-white uppercase tracking-tight mb-4", children: "Nothing Found" }), _jsx("p", { className: "text-gray-500 mb-10 max-w-sm mx-auto font-light italic", children: "Our culinary team couldn't find any items matching your criteria." }), _jsx(Button, { onClick: clearAllFilters, className: "rounded-none px-12 h-14 bg-white text-black hover:bg-orange-600 hover:text-white uppercase tracking-widest font-bold text-xs", children: "Reset Filters" })] }))] })] })] }), _jsxs(Sheet, { isOpen: isFilterOpen, onClose: () => setIsFilterOpen(false), title: "Filters", side: "right", className: "bg-[#0F0F0F] text-white border-white/10", children: [_jsxs("div", { className: "flex flex-col h-full overflow-y-auto pb-24 space-y-10 p-1", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-[10px] font-bold text-gray-500 uppercase tracking-[0.3em] mb-6", children: "Search" }), _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-500" }), _jsx("input", { type: "text", placeholder: "Search menu...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "w-full pl-10 pr-4 py-4 bg-[#1A1A1A] border border-white/10 rounded-none text-sm text-white outline-none focus:border-orange-500" })] })] }), _jsxs("div", { children: [_jsx("h3", { className: "text-[10px] font-bold text-gray-500 uppercase tracking-[0.3em] mb-6", children: "Categories" }), _jsx("div", { className: "space-y-4", children: categories.map((category) => (_jsxs("label", { className: "flex items-center gap-4", children: [_jsx("input", { type: "checkbox", checked: selectedCategories.includes(category.id), onChange: () => setSelectedCategories(prev => prev.includes(category.id) ? prev.filter(id => id !== category.id) : [...prev, category.id]), className: "w-5 h-5 rounded-none border-white/20 bg-transparent text-orange-600 focus:ring-orange-500" }), _jsx("span", { className: "text-sm text-gray-400 font-medium uppercase tracking-wider", children: category.name })] }, category.id))) })] }), _jsx(ProductPriceFilterSection, { currency: storeCurrency, priceRange: priceRange, onPriceRangeChange: setPriceRange, bounds: catalogBounds, isFilterActive: hasActivePriceFilter, onReset: resetPriceRange })] }), _jsxs("div", { className: "absolute bottom-0 left-0 right-0 p-6 bg-[#0F0F0F] border-t border-white/10 flex gap-4", children: [_jsx(Button, { onClick: clearAllFilters, variant: "outline", className: "flex-1 h-14 font-bold rounded-none border-white/10 text-white uppercase tracking-widest text-[10px]", children: "Reset" }), _jsx(Button, { onClick: () => setIsFilterOpen(false), className: "flex-[2] bg-white text-black hover:bg-orange-600 hover:text-white h-14 font-bold rounded-none transition-colors uppercase tracking-widest text-[10px]", children: "Apply" })] })] })] }));
172
256
  }
173
- export function FoodModernProductsPage(props) {
257
+ export function ProductsPage(props) {
174
258
  return (_jsx(Suspense, { fallback: _jsx("div", { className: "min-h-screen flex items-center justify-center", children: _jsx("div", { className: "w-8 h-8 border-2 border-black border-t-transparent rounded-full animate-spin" }) }), children: _jsx(ProductsPageContent, { ...props }) }));
175
259
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MotivationalHomePage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/motivational-speaker/components/MotivationalHomePage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAehD,UAAU,yBAAyB;IAC/B,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,yBAAyB,2CA4nB7F"}
1
+ {"version":3,"file":"MotivationalHomePage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/motivational-speaker/components/MotivationalHomePage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAahD,UAAU,yBAAyB;IAC/B,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,yBAAyB,2CAqqB7F"}
@@ -1,22 +1,26 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button } from '../../../components/ui/button.js';
4
- import { Play, FileText, Headphones, ArrowRight, Lock, Star, CheckCircle, ChevronDown, Quote, Youtube, Instagram, Twitter } from 'lucide-react';
3
+ import { Button } from '../../../components/ui/button';
4
+ import { Play, FileText, Headphones, ArrowRight, Lock, Star, CheckCircle, Mail, ChevronDown, Quote, Youtube, Instagram, Twitter } from 'lucide-react';
5
5
  import Link from 'next/link';
6
6
  import Image from 'next/image';
7
- import { formatCurrency, filterActiveServices } from '../../../lib/utils/index.js';
8
- import { getBannerImage, getServiceImage, getTextContent } from '../../../lib/utils/asset-helpers.js';
7
+ import { formatCurrency, filterActiveServices } from '../../../lib/utils';
8
+ import { getBannerImage, getServiceImage, getTextContent } from '../../../lib/utils/asset-helpers';
9
9
  import { motion, useScroll, useTransform } from 'framer-motion';
10
- import { useRef, useState } from 'react';
11
- import { useAuth } from '../../../lib/auth-context.js';
12
- import { useStore } from '../../../lib/store-context.js';
13
- import { getPayazaSectionInlineStyle } from '../../../lib/payaza-section-styles.js';
14
- import { resolveStoreLink } from '../../../lib/layout-route-utils.js';
15
- import { showLayoutDecorativeBadges } from '../../../lib/layout-badges.js';
10
+ import { useRef, useState, useContext } from 'react';
11
+ import { useAuth } from '../../../lib/auth-context';
12
+ import { useStore } from '../../../lib/store-context';
13
+ import { AlertModalContext } from '../../../components/ui/alert-modal';
16
14
  export function MotivationalHomePage({ storeConfig: initialConfig }) {
17
15
  const { store } = useStore();
18
16
  const storeConfig = store || initialConfig;
19
17
  const { isAuthenticated } = useAuth();
18
+ // Safely get alert modal context with fallback
19
+ const alertContext = useContext(AlertModalContext);
20
+ const showAlert = alertContext?.showAlert || ((message, type, options) => {
21
+ // Fallback: log to console if provider is not available
22
+ console.log(`[Alert] ${type || 'info'}: ${message}`, options);
23
+ });
20
24
  // In preview mode, use mock content if none are available
21
25
  const isPreview = (typeof window !== 'undefined' && window.__IS_PREVIEW__) || storeConfig.layoutConfig?.isPreview;
22
26
  const rawContent = storeConfig.services || [];
@@ -33,6 +37,7 @@ export function MotivationalHomePage({ storeConfig: initialConfig }) {
33
37
  { id: 'mock-3', name: 'Leadership Blueprint', description: 'The comprehensive guide to leading with impact, authenticity, and clear vision.', price: 0, currency: 'USD', status: 'active', image: 'https://images.unsplash.com/photo-1475721027785-f74ec0f711b1?w=800', slug: 'leadership-blueprint', contentType: 'pdf' }
34
38
  ] : []));
35
39
  const layoutConfig = storeConfig.layoutConfig;
40
+ const [email, setEmail] = useState('');
36
41
  const [openFaqIndex, setOpenFaqIndex] = useState(null);
37
42
  // Assets
38
43
  const heroBg = getBannerImage(storeConfig, 'hero_image', 'https://images.unsplash.com/photo-1475721027785-f74ec0f711b1?w=2070&auto=format&fit=crop');
@@ -71,13 +76,19 @@ export function MotivationalHomePage({ storeConfig: initialConfig }) {
71
76
  answer: "For individual course purchases, you have lifetime access. For membership subscribers, access continues as long as your subscription is active."
72
77
  }
73
78
  ];
74
- const faqItems = backendFaqItems && backendFaqItems.length > 0
75
- ? backendFaqItems
76
- : (isPreview ? fallbackFaqItems : []);
79
+ const faqItems = backendFaqItems && backendFaqItems.length > 0 ? backendFaqItems : fallbackFaqItems;
80
+ const handleSubscribe = (e) => {
81
+ e.preventDefault();
82
+ if (email) {
83
+ // In a real app, this would call an API
84
+ showAlert('Thank you for subscribing to our newsletter! Please check your email inbox to confirm your subscription.', 'success', { title: 'Subscription Successful' });
85
+ setEmail('');
86
+ }
87
+ };
77
88
  const toggleFaq = (index) => {
78
89
  setOpenFaqIndex(openFaqIndex === index ? null : index);
79
90
  };
80
- return (_jsxs("div", { className: "bg-white font-sans text-gray-900 selection:bg-black selection:text-white", children: [_jsxs("section", { "data-section": "hero", "data-payaza-section-key": "hero", "data-payaza-page": "home", ref: heroRef, className: "relative h-screen min-h-[800px] flex items-center justify-center overflow-hidden bg-black", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'hero'), children: [_jsxs("div", { className: "absolute inset-0 z-0", children: [heroVideo ? (_jsx("video", { src: heroVideo, autoPlay: true, loop: true, muted: true, playsInline: true, className: "w-full h-full object-cover opacity-60" })) : (_jsx(Image, { src: heroBg, alt: "Hero Background", fill: true, className: "object-cover opacity-80", priority: true, unoptimized: true })), _jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-black/70 via-black/40 to-black/80" }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-transparent via-black/10 to-transparent animate-pulse" })] }), _jsx(motion.div, { style: { opacity: heroOpacity, scale: heroScale }, className: "container mx-auto px-6 relative z-10 text-center text-white pt-20", children: _jsxs(motion.div, { initial: { opacity: 0, y: 30 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.8, ease: "easeOut" }, className: "max-w-4xl mx-auto space-y-8", children: [showLayoutDecorativeBadges() && (_jsx(motion.span, { initial: { opacity: 0, scale: 0.9 }, animate: { opacity: 1, scale: 1 }, transition: { delay: 0.2, duration: 0.6 }, className: "inline-block py-1.5 px-4 border border-white/30 rounded-full text-sm font-medium tracking-widest uppercase backdrop-blur-md bg-white/5", children: layoutConfig?.sections?.hero?.subtitle || getTextContent(storeConfig, 'hero_subtitle', 'Master Your Mindset') })), _jsx(motion.h1, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3, duration: 0.8 }, className: "text-6xl md:text-8xl font-serif font-medium tracking-tight leading-tight", children: layoutConfig?.sections?.hero?.title || getTextContent(storeConfig, 'hero_title', 'Unlock Your True Potential') }), _jsx(motion.p, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.5, duration: 0.8 }, className: "text-xl md:text-2xl text-gray-300 max-w-2xl mx-auto font-light leading-relaxed", children: layoutConfig?.sections?.hero?.description || storeConfig.description || "Join thousands of students learning to master their mindset and achieve their dreams." }), _jsxs(motion.div, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.7, duration: 0.8 }, className: "flex flex-col sm:flex-row gap-6 justify-center pt-8", children: [_jsx(Link, { href: isAuthenticated ? resolveStoreLink('account?tab=learning', storeConfig.slug) : resolveStoreLink('subscription', storeConfig.slug), children: _jsxs(Button, { size: "lg", className: "h-16 px-12 rounded-full text-lg font-medium bg-white text-black hover:bg-gray-200 transition-all transform hover:-translate-y-1 hover:shadow-2xl", children: [isAuthenticated ? 'Continue Learning' : (layoutConfig?.sections?.hero?.primaryCTA || getTextContent(storeConfig, 'cta_primary', 'Start Learning Now')), _jsx(ArrowRight, { className: "ml-2 h-5 w-5" })] }) }), _jsx(Link, { href: resolveStoreLink('services', storeConfig.slug), children: _jsxs(Button, { size: "lg", variant: "outline", className: "h-16 px-12 rounded-full text-lg font-medium border-2 border-white/40 text-white hover:bg-white hover:text-black hover:border-white transition-all backdrop-blur-sm", children: [layoutConfig?.sections?.hero?.secondaryCTA || 'Explore Catalogue', _jsx(ArrowRight, { className: "ml-2 h-5 w-5" })] }) })] })] }) }), _jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { delay: 1, duration: 0.6 }, className: "absolute bottom-10 left-1/2 -translate-x-1/2", children: _jsx(motion.div, { animate: { y: [0, 10, 0] }, transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }, className: "w-[1px] h-16 bg-gradient-to-b from-white to-transparent opacity-50" }) })] }), _jsxs("section", { "data-section": "trust", "data-payaza-section-key": "trust", "data-payaza-page": "home", className: "py-20 border-y border-gray-100 bg-white overflow-hidden", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'trust'), children: [_jsx("div", { className: "container mx-auto px-6 mb-10", children: _jsx("p", { className: "text-center text-[10px] font-black uppercase tracking-[0.4em] text-gray-400", children: "Trusted by Global Institutions" }) }), _jsx("div", { className: "relative flex overflow-x-hidden group", children: _jsx("div", { className: "animate-scroll flex items-center gap-20 whitespace-nowrap min-w-full", children: [
91
+ return (_jsxs("div", { className: "bg-white font-sans text-gray-900 selection:bg-black selection:text-white", children: [_jsxs("section", { "data-section": "hero", ref: heroRef, className: "relative h-screen min-h-[800px] flex items-center justify-center overflow-hidden bg-black", children: [_jsxs("div", { className: "absolute inset-0 z-0", children: [heroVideo ? (_jsx("video", { src: heroVideo, autoPlay: true, loop: true, muted: true, playsInline: true, className: "w-full h-full object-cover opacity-60" })) : (_jsx(Image, { src: heroBg, alt: "Hero Background", fill: true, className: "object-cover opacity-80", priority: true })), _jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-black/70 via-black/40 to-black/80" }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-transparent via-black/10 to-transparent animate-pulse" })] }), _jsx(motion.div, { style: { opacity: heroOpacity, scale: heroScale }, className: "container mx-auto px-6 relative z-10 text-center text-white pt-20", children: _jsxs(motion.div, { initial: { opacity: 0, y: 30 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.8, ease: "easeOut" }, className: "max-w-4xl mx-auto space-y-8", children: [_jsx(motion.span, { initial: { opacity: 0, scale: 0.9 }, animate: { opacity: 1, scale: 1 }, transition: { delay: 0.2, duration: 0.6 }, className: "inline-block py-1.5 px-4 border border-white/30 rounded-full text-sm font-medium tracking-widest uppercase backdrop-blur-md bg-white/5", children: layoutConfig?.sections?.hero?.subtitle || getTextContent(storeConfig, 'hero_subtitle', 'Master Your Mindset') }), _jsx(motion.h1, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.3, duration: 0.8 }, className: "text-6xl md:text-8xl font-serif font-medium tracking-tight leading-tight", children: layoutConfig?.sections?.hero?.title || getTextContent(storeConfig, 'hero_title', 'Unlock Your True Potential') }), _jsx(motion.p, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.5, duration: 0.8 }, className: "text-xl md:text-2xl text-gray-300 max-w-2xl mx-auto font-light leading-relaxed", children: layoutConfig?.sections?.hero?.description || storeConfig.description || "Join thousands of students learning to master their mindset and achieve their dreams." }), _jsxs(motion.div, { initial: { opacity: 0, y: 20 }, animate: { opacity: 1, y: 0 }, transition: { delay: 0.7, duration: 0.8 }, className: "flex flex-col sm:flex-row gap-6 justify-center pt-8", children: [_jsx(Link, { href: isAuthenticated ? `/${storeConfig.slug}/account?tab=learning` : `/${storeConfig.slug}/subscription`, children: _jsxs(Button, { size: "lg", className: "h-16 px-12 rounded-full text-lg font-medium bg-white text-black hover:bg-gray-200 transition-all transform hover:-translate-y-1 hover:shadow-2xl", children: [isAuthenticated ? 'Continue Learning' : (layoutConfig?.sections?.hero?.primaryCTA || getTextContent(storeConfig, 'cta_primary', 'Start Learning Now')), _jsx(ArrowRight, { className: "ml-2 h-5 w-5" })] }) }), _jsx(Link, { href: `/${storeConfig.slug}/services`, children: _jsxs(Button, { size: "lg", variant: "outline", className: "h-16 px-12 rounded-full text-lg font-medium border-2 border-white/40 text-white hover:bg-white hover:text-black hover:border-white transition-all backdrop-blur-sm", children: [layoutConfig?.sections?.hero?.secondaryCTA || 'Explore Catalogue', _jsx(ArrowRight, { className: "ml-2 h-5 w-5" })] }) })] })] }) }), _jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { delay: 1, duration: 0.6 }, className: "absolute bottom-10 left-1/2 -translate-x-1/2", children: _jsx(motion.div, { animate: { y: [0, 10, 0] }, transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }, className: "w-[1px] h-16 bg-gradient-to-b from-white to-transparent opacity-50" }) })] }), _jsxs("section", { "data-section": "trust", className: "py-20 border-y border-gray-100 bg-white overflow-hidden", children: [_jsx("div", { className: "container mx-auto px-6 mb-10", children: _jsx("p", { className: "text-center text-[10px] font-black uppercase tracking-[0.4em] text-gray-400", children: "Trusted by Global Institutions" }) }), _jsx("div", { className: "relative flex overflow-x-hidden group", children: _jsx("div", { className: "animate-scroll flex items-center gap-20 whitespace-nowrap min-w-full", children: [
81
92
  { name: "Forbes", logo: "https://logos-world.net/wp-content/uploads/2021/03/Forbes-Logo.png" },
82
93
  { name: "Entrepreneur", logo: "https://logos-world.net/wp-content/uploads/2023/11/Entrepreneur-Logo.png" },
83
94
  { name: "TED", logo: "https://logos-world.net/wp-content/uploads/2023/11/TED-Logo.png" },
@@ -91,7 +102,7 @@ export function MotivationalHomePage({ storeConfig: initialConfig }) {
91
102
  { name: "Wired", logo: "https://logos-world.net/wp-content/uploads/2023/11/Wired-Logo.png" },
92
103
  { name: "Fast Company", logo: "https://logos-world.net/wp-content/uploads/2023/11/Fast-Company-Logo.png" },
93
104
  { name: "Inc", logo: "https://logos-world.net/wp-content/uploads/2023/11/Inc-Logo.png" },
94
- ].map((brand, i) => (_jsx("div", { className: "flex items-center justify-center w-32 h-10 grayscale opacity-40 hover:grayscale-0 hover:opacity-100 transition-all duration-700 mx-10", children: _jsx(Image, { src: brand.logo, alt: brand.name, width: 120, height: 40, className: "object-contain max-h-full", unoptimized: true }) }, i))) }) })] }), _jsx("section", { "data-section": "about", "data-payaza-section-key": "about", "data-payaza-page": "home", className: "py-32 bg-white", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'about'), children: _jsx("div", { className: "container mx-auto px-6 max-w-7xl", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-16 items-center", children: [_jsxs(motion.div, { initial: { opacity: 0, x: -50 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8 }, className: "lg:col-span-5 relative", children: [_jsx("div", { className: "relative aspect-[4/5] overflow-hidden bg-gray-100 rounded-lg", children: _jsx(Image, { src: speakerImage, alt: "Speaker Portrait", fill: true, className: "object-cover grayscale hover:grayscale-0 transition-all duration-700 ease-in-out", unoptimized: true }) }), _jsx("div", { className: "absolute -bottom-6 -right-6 w-32 h-32 border-r-2 border-b-2 border-black/10 -z-10 backdrop-blur-sm bg-white/30" }), _jsx("div", { className: "absolute -top-6 -left-6 w-32 h-32 border-t-2 border-l-2 border-black/10 -z-10 backdrop-blur-sm bg-white/30" })] }), _jsx("div", { className: "lg:col-span-1" }), " ", _jsxs(motion.div, { initial: { opacity: 0, x: 50 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8, delay: 0.2 }, className: "lg:col-span-6 space-y-10", children: [_jsx("h2", { className: "text-4xl md:text-6xl font-serif text-gray-900 leading-tight", children: layoutConfig?.sections?.about?.title || getTextContent(storeConfig, 'bio_title', "Hi, I'm here to help you grow.") }), _jsx("div", { className: "space-y-6 text-xl text-gray-600 font-light leading-relaxed", children: _jsx("p", { children: layoutConfig?.sections?.about?.description || getTextContent(storeConfig, 'bio_desc', "I have dedicated my life to helping individuals break through their barriers. My courses are designed to give you practical tools for everyday success.") }) }), _jsxs("div", { className: "grid grid-cols-3 gap-8 pt-8 border-t border-gray-100", children: [_jsxs("div", { children: [_jsx("div", { className: "text-4xl font-serif text-gray-900 mb-1", children: "50k+" }), _jsx("div", { className: "text-sm uppercase tracking-wider text-gray-400", children: "Students" })] }), _jsxs("div", { children: [_jsx("div", { className: "text-4xl font-serif text-gray-900 mb-1", children: "100+" }), _jsx("div", { className: "text-sm uppercase tracking-wider text-gray-400", children: "Modules" })] }), _jsxs("div", { children: [_jsx("div", { className: "text-4xl font-serif text-gray-900 mb-1", children: "4.9" }), _jsx("div", { className: "text-sm uppercase tracking-wider text-gray-400", children: "Rating" })] })] }), _jsxs("div", { className: "flex items-center gap-4 pt-4", children: [storeConfig.branding.socialMedia?.youtube && (_jsx("a", { href: storeConfig.branding.socialMedia.youtube, target: "_blank", rel: "noopener noreferrer", className: "p-3 rounded-full bg-gray-100 hover:bg-gray-200 transition-colors", children: _jsx(Youtube, { className: "w-5 h-5 text-gray-700" }) })), storeConfig.branding.socialMedia?.instagram && (_jsx("a", { href: storeConfig.branding.socialMedia.instagram, target: "_blank", rel: "noopener noreferrer", className: "p-3 rounded-full bg-gray-100 hover:bg-gray-200 transition-colors", children: _jsx(Instagram, { className: "w-5 h-5 text-gray-700" }) })), storeConfig.branding.socialMedia?.twitter && (_jsx("a", { href: storeConfig.branding.socialMedia.twitter, target: "_blank", rel: "noopener noreferrer", className: "p-3 rounded-full bg-gray-100 hover:bg-gray-200 transition-colors", children: _jsx(Twitter, { className: "w-5 h-5 text-gray-700" }) }))] })] })] }) }) }), _jsx("section", { "data-section": "services", "data-payaza-section-key": "services", "data-payaza-page": "home", className: "py-32 bg-gray-50", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'services'), children: _jsxs("div", { className: "container mx-auto px-6 max-w-7xl", children: [_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6 }, className: "flex flex-col md:flex-row justify-between items-end mb-20 gap-8", children: [_jsxs("div", { children: [_jsx("span", { className: "text-gray-400 font-bold tracking-widest uppercase text-xs mb-4 block", children: "Catalogue" }), _jsx("h2", { className: "text-4xl md:text-5xl font-serif text-gray-900", children: layoutConfig?.sections?.services?.title || 'Latest Materials' })] }), _jsxs(Link, { href: `/${storeConfig.slug}/services`, className: "group flex items-center gap-3 text-lg font-medium hover:text-gray-600 transition-colors", children: [layoutConfig?.sections?.services?.viewAllLabel || 'View All Material', " ", _jsx(ArrowRight, { className: "w-5 h-5 group-hover:translate-x-1 transition-transform" })] })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10", children: contentItems.slice(0, 6).map((item, index) => {
105
+ ].map((brand, i) => (_jsx("div", { className: "flex items-center justify-center w-32 h-10 grayscale opacity-40 hover:grayscale-0 hover:opacity-100 transition-all duration-700 mx-10", children: _jsx(Image, { src: brand.logo, alt: brand.name, width: 120, height: 40, className: "object-contain max-h-full" }) }, i))) }) })] }), _jsx("section", { "data-section": "about", className: "py-32 bg-white", children: _jsx("div", { className: "container mx-auto px-6 max-w-7xl", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-12 gap-16 items-center", children: [_jsxs(motion.div, { initial: { opacity: 0, x: -50 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8 }, className: "lg:col-span-5 relative", children: [_jsx("div", { className: "relative aspect-[4/5] overflow-hidden bg-gray-100 rounded-lg", children: _jsx(Image, { src: speakerImage, alt: "Speaker Portrait", fill: true, className: "object-cover grayscale hover:grayscale-0 transition-all duration-700 ease-in-out" }) }), _jsx("div", { className: "absolute -bottom-6 -right-6 w-32 h-32 border-r-2 border-b-2 border-black/10 -z-10 backdrop-blur-sm bg-white/30" }), _jsx("div", { className: "absolute -top-6 -left-6 w-32 h-32 border-t-2 border-l-2 border-black/10 -z-10 backdrop-blur-sm bg-white/30" })] }), _jsx("div", { className: "lg:col-span-1" }), " ", _jsxs(motion.div, { initial: { opacity: 0, x: 50 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8, delay: 0.2 }, className: "lg:col-span-6 space-y-10", children: [_jsx("h2", { className: "text-4xl md:text-6xl font-serif text-gray-900 leading-tight", children: layoutConfig?.sections?.about?.title || getTextContent(storeConfig, 'bio_title', "Hi, I'm here to help you grow.") }), _jsx("div", { className: "space-y-6 text-xl text-gray-600 font-light leading-relaxed", children: _jsx("p", { children: layoutConfig?.sections?.about?.description || getTextContent(storeConfig, 'bio_desc', "I have dedicated my life to helping individuals break through their barriers. My courses are designed to give you practical tools for everyday success.") }) }), _jsxs("div", { className: "grid grid-cols-3 gap-8 pt-8 border-t border-gray-100", children: [_jsxs("div", { children: [_jsx("div", { className: "text-4xl font-serif text-gray-900 mb-1", children: "50k+" }), _jsx("div", { className: "text-sm uppercase tracking-wider text-gray-400", children: "Students" })] }), _jsxs("div", { children: [_jsx("div", { className: "text-4xl font-serif text-gray-900 mb-1", children: "100+" }), _jsx("div", { className: "text-sm uppercase tracking-wider text-gray-400", children: "Modules" })] }), _jsxs("div", { children: [_jsx("div", { className: "text-4xl font-serif text-gray-900 mb-1", children: "4.9" }), _jsx("div", { className: "text-sm uppercase tracking-wider text-gray-400", children: "Rating" })] })] }), _jsxs("div", { className: "flex items-center gap-4 pt-4", children: [storeConfig.branding.socialMedia?.youtube && (_jsx("a", { href: storeConfig.branding.socialMedia.youtube, target: "_blank", rel: "noopener noreferrer", className: "p-3 rounded-full bg-gray-100 hover:bg-gray-200 transition-colors", children: _jsx(Youtube, { className: "w-5 h-5 text-gray-700" }) })), storeConfig.branding.socialMedia?.instagram && (_jsx("a", { href: storeConfig.branding.socialMedia.instagram, target: "_blank", rel: "noopener noreferrer", className: "p-3 rounded-full bg-gray-100 hover:bg-gray-200 transition-colors", children: _jsx(Instagram, { className: "w-5 h-5 text-gray-700" }) })), storeConfig.branding.socialMedia?.twitter && (_jsx("a", { href: storeConfig.branding.socialMedia.twitter, target: "_blank", rel: "noopener noreferrer", className: "p-3 rounded-full bg-gray-100 hover:bg-gray-200 transition-colors", children: _jsx(Twitter, { className: "w-5 h-5 text-gray-700" }) }))] })] })] }) }) }), _jsx("section", { "data-section": "services", className: "py-32 bg-gray-50", children: _jsxs("div", { className: "container mx-auto px-6 max-w-7xl", children: [_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6 }, className: "flex flex-col md:flex-row justify-between items-end mb-20 gap-8", children: [_jsxs("div", { children: [_jsx("span", { className: "text-gray-400 font-bold tracking-widest uppercase text-xs mb-4 block", children: "Catalogue" }), _jsx("h2", { className: "text-4xl md:text-5xl font-serif text-gray-900", children: layoutConfig?.sections?.services?.title || 'Latest Materials' })] }), _jsxs(Link, { href: `/${storeConfig.slug}/services`, className: "group flex items-center gap-3 text-lg font-medium hover:text-gray-600 transition-colors", children: [layoutConfig?.sections?.services?.viewAllLabel || 'View All Material', " ", _jsx(ArrowRight, { className: "w-5 h-5 group-hover:translate-x-1 transition-transform" })] })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10", children: contentItems.slice(0, 6).map((item, index) => {
95
106
  // Infer Type & Badge
96
107
  let TypeIcon = Play;
97
108
  let typeLabel = "Course";
@@ -109,23 +120,21 @@ export function MotivationalHomePage({ storeConfig: initialConfig }) {
109
120
  }
110
121
  // Access Status
111
122
  const isLocked = item.accessLevel === 'subscription' || item.accessLevel === 'paid';
112
- return (_jsx(motion.div, { initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6, delay: index * 0.1 }, children: _jsx(Link, { href: `/${storeConfig.slug}/services/${item.slug}`, className: "group block h-full", children: _jsxs("article", { className: "bg-white h-full flex flex-col hover:shadow-2xl transition-all duration-500 ease-out border border-gray-200/50 hover:border-gray-300 rounded-lg overflow-hidden", children: [_jsxs("div", { className: "relative aspect-[16/10] overflow-hidden bg-gray-200", children: [_jsx(Image, { src: getServiceImage(item.image, storeConfig, "https://images.unsplash.com/photo-1516321318423-f06f85e504b3?w=800&auto=format&fit=crop"), alt: item.name, fill: true, className: "object-cover group-hover:scale-110 transition-transform duration-700", unoptimized: true }), _jsxs("div", { className: "absolute top-4 left-4 flex gap-2", children: [_jsxs("div", { className: "bg-white/90 backdrop-blur-md text-black px-4 py-2 text-xs font-bold uppercase tracking-wider flex items-center gap-2 rounded-full shadow-lg", children: [_jsx(TypeIcon, { className: "w-3 h-3" }), " ", typeLabel] }), isLocked && (_jsxs("div", { className: "bg-black/90 backdrop-blur-md text-white px-3 py-2 text-xs font-bold uppercase tracking-wider flex items-center gap-2 rounded-full shadow-lg", children: [_jsx(Lock, { className: "w-3 h-3" }), " Premium"] }))] })] }), _jsxs("div", { className: "p-8 flex flex-col flex-1", children: [_jsx("h3", { className: "text-2xl font-serif text-gray-900 mb-3 group-hover:underline decoration-1 underline-offset-4 decoration-gray-300", children: item.name }), _jsx("p", { className: "text-gray-500 font-light leading-relaxed mb-8 line-clamp-3", children: item.description }), _jsxs("div", { className: "mt-auto pt-6 border-t border-gray-100 flex items-center justify-between", children: [_jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs uppercase tracking-wider text-gray-400 mb-1", children: "Access" }), _jsx("span", { className: "font-medium text-lg", children: item.price > 0 ? formatCurrency(item.price, item.currency || 'USD') : 'Free' })] }), _jsx("div", { className: "w-10 h-10 border border-gray-200 rounded-full flex items-center justify-center group-hover:bg-black group-hover:border-black group-hover:text-white transition-all", children: _jsx(ArrowRight, { className: "w-4 h-4" }) })] })] })] }) }) }, item.id));
113
- }) })] }) }), _jsxs("section", { "data-section": "subscription", "data-payaza-section-key": "subscription", "data-payaza-page": "home", className: "relative py-32 bg-[#0a0a0a] text-white overflow-hidden", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'subscription'), children: [_jsx("div", { className: "absolute inset-0 opacity-20", children: _jsx(Image, { src: subBanner, alt: "Background", fill: true, className: "object-cover", unoptimized: true }) }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-black via-[#0a0a0a] to-transparent" }), _jsx("div", { className: "container mx-auto px-6 relative z-10 max-w-7xl", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-20 items-center", children: [_jsxs(motion.div, { initial: { opacity: 0, x: -30 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8 }, children: [_jsx("span", { className: "text-yellow-500 font-bold tracking-widest uppercase text-xs mb-6 block", children: layoutConfig?.sections?.marketing?.subscriptionBadge || 'Inner Circle Access' }), _jsx("h2", { className: "text-5xl md:text-7xl font-serif mb-8 leading-none", children: layoutConfig?.sections?.marketing?.subscriptionTitle || getTextContent(storeConfig, 'sub_title', 'Join the Movement') }), _jsx("p", { className: "text-xl text-gray-400 mb-12 font-light leading-relaxed max-w-lg", children: layoutConfig?.sections?.marketing?.subscriptionDescription || getTextContent(storeConfig, 'sub_desc', 'Get unlimited access to all courses, exclusive live sessions, and a community of like-minded individuals.') }), _jsx("div", { className: "flex flex-col sm:flex-row gap-6", children: _jsx(Link, { href: resolveStoreLink('subscription', storeConfig.slug), children: _jsxs(Button, { size: "lg", className: "h-16 px-12 rounded-full text-lg font-bold bg-yellow-500 text-black hover:bg-yellow-400 border-0 shadow-lg hover:shadow-xl transition-all transform hover:-translate-y-1", children: [layoutConfig?.sections?.marketing?.subscriptionButton || getTextContent(storeConfig, 'sub_cta', 'Become a Member'), _jsx(ArrowRight, { className: "ml-2 h-5 w-5" })] }) }) })] }), _jsxs(motion.div, { initial: { opacity: 0, x: 30 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8, delay: 0.2 }, className: "bg-white/5 backdrop-blur-md border border-white/10 p-10 lg:p-14 rounded-2xl", children: [_jsx("h3", { className: "text-2xl font-serif mb-8", children: "Membership Benefits" }), _jsx("ul", { className: "space-y-6", children: [
123
+ return (_jsx(motion.div, { initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6, delay: index * 0.1 }, children: _jsx(Link, { href: `/${storeConfig.slug}/services/${item.slug}`, className: "group block h-full", children: _jsxs("article", { className: "bg-white h-full flex flex-col hover:shadow-2xl transition-all duration-500 ease-out border border-gray-200/50 hover:border-gray-300 rounded-lg overflow-hidden", children: [_jsxs("div", { className: "relative aspect-[16/10] overflow-hidden bg-gray-200", children: [_jsx(Image, { src: getServiceImage(item.image, storeConfig, "https://images.unsplash.com/photo-1516321318423-f06f85e504b3?w=800&auto=format&fit=crop"), alt: item.name, fill: true, className: "object-cover group-hover:scale-110 transition-transform duration-700" }), _jsxs("div", { className: "absolute top-4 left-4 flex gap-2", children: [_jsxs("div", { className: "bg-white/90 backdrop-blur-md text-black px-4 py-2 text-xs font-bold uppercase tracking-wider flex items-center gap-2 rounded-full shadow-lg", children: [_jsx(TypeIcon, { className: "w-3 h-3" }), " ", typeLabel] }), isLocked && (_jsxs("div", { className: "bg-black/90 backdrop-blur-md text-white px-3 py-2 text-xs font-bold uppercase tracking-wider flex items-center gap-2 rounded-full shadow-lg", children: [_jsx(Lock, { className: "w-3 h-3" }), " Premium"] }))] })] }), _jsxs("div", { className: "p-8 flex flex-col flex-1", children: [_jsx("h3", { className: "text-2xl font-serif text-gray-900 mb-3 group-hover:underline decoration-1 underline-offset-4 decoration-gray-300", children: item.name }), _jsx("p", { className: "text-gray-500 font-light leading-relaxed mb-8 line-clamp-3", children: item.description }), _jsxs("div", { className: "mt-auto pt-6 border-t border-gray-100 flex items-center justify-between", children: [_jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs uppercase tracking-wider text-gray-400 mb-1", children: "Access" }), _jsx("span", { className: "font-medium text-lg", children: item.price > 0 ? formatCurrency(item.price, item.currency || 'USD') : 'Free' })] }), _jsx("div", { className: "w-10 h-10 border border-gray-200 rounded-full flex items-center justify-center group-hover:bg-black group-hover:border-black group-hover:text-white transition-all", children: _jsx(ArrowRight, { className: "w-4 h-4" }) })] })] })] }) }) }, item.id));
124
+ }) })] }) }), _jsxs("section", { "data-section": "subscription", className: "relative py-32 bg-[#0a0a0a] text-white overflow-hidden", children: [_jsx("div", { className: "absolute inset-0 opacity-20", children: _jsx(Image, { src: subBanner, alt: "Background", fill: true, className: "object-cover" }) }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-black via-[#0a0a0a] to-transparent" }), _jsx("div", { className: "container mx-auto px-6 relative z-10 max-w-7xl", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-20 items-center", children: [_jsxs(motion.div, { initial: { opacity: 0, x: -30 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8 }, children: [_jsx("span", { className: "text-yellow-500 font-bold tracking-widest uppercase text-xs mb-6 block", children: layoutConfig?.sections?.marketing?.subscriptionBadge || 'Inner Circle Access' }), _jsx("h2", { className: "text-5xl md:text-7xl font-serif mb-8 leading-none", children: layoutConfig?.sections?.marketing?.subscriptionTitle || getTextContent(storeConfig, 'sub_title', 'Join the Movement') }), _jsx("p", { className: "text-xl text-gray-400 mb-12 font-light leading-relaxed max-w-lg", children: layoutConfig?.sections?.marketing?.subscriptionDescription || getTextContent(storeConfig, 'sub_desc', 'Get unlimited access to all courses, exclusive live sessions, and a community of like-minded individuals.') }), _jsx("div", { className: "flex flex-col sm:flex-row gap-6", children: _jsx(Link, { href: `/${storeConfig.slug}/subscription`, children: _jsxs(Button, { size: "lg", className: "h-16 px-12 rounded-full text-lg font-bold bg-yellow-500 text-black hover:bg-yellow-400 border-0 shadow-lg hover:shadow-xl transition-all transform hover:-translate-y-1", children: [layoutConfig?.sections?.marketing?.subscriptionButton || getTextContent(storeConfig, 'sub_cta', 'Become a Member'), _jsx(ArrowRight, { className: "ml-2 h-5 w-5" })] }) }) })] }), _jsxs(motion.div, { initial: { opacity: 0, x: 30 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { duration: 0.8, delay: 0.2 }, className: "bg-white/5 backdrop-blur-md border border-white/10 p-10 lg:p-14 rounded-2xl", children: [_jsx("h3", { className: "text-2xl font-serif mb-8", children: "Membership Benefits" }), _jsx("ul", { className: "space-y-6", children: [
114
125
  "Unlimited access to all video courses",
115
126
  "Downloadable PDF workbooks & guides",
116
127
  "Weekly live Q&A sessions",
117
128
  "Exclusive community access",
118
129
  "Priority support"
119
- ].map((benefit, i) => (_jsxs(motion.li, { initial: { opacity: 0, x: 20 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { delay: i * 0.1 }, className: "flex items-start gap-4", children: [_jsx(CheckCircle, { className: "w-6 h-6 text-yellow-500 shrink-0" }), _jsx("span", { className: "text-lg font-light text-gray-200", children: benefit })] }, i))) })] })] }) })] }), layoutConfig?.sections?.testimonials?.show !== false && (_jsx("section", { "data-section": "testimonials", "data-payaza-section-key": "testimonials", "data-payaza-page": "home", className: "py-32 bg-white", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'testimonials'), children: _jsxs("div", { className: "container mx-auto px-6 max-w-7xl", children: [_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6 }, className: "text-center mb-24", children: [_jsx("h2", { className: "text-3xl md:text-4xl font-serif mb-4", children: "Success Stories" }), _jsx("div", { className: "w-12 h-1 bg-gray-200 mx-auto" })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-12", children: (() => {
130
+ ].map((benefit, i) => (_jsxs(motion.li, { initial: { opacity: 0, x: 20 }, whileInView: { opacity: 1, x: 0 }, viewport: { once: true }, transition: { delay: i * 0.1 }, className: "flex items-start gap-4", children: [_jsx(CheckCircle, { className: "w-6 h-6 text-yellow-500 shrink-0" }), _jsx("span", { className: "text-lg font-light text-gray-200", children: benefit })] }, i))) })] })] }) })] }), layoutConfig?.sections?.testimonials?.show !== false && (_jsx("section", { "data-section": "testimonials", className: "py-32 bg-white", children: _jsxs("div", { className: "container mx-auto px-6 max-w-7xl", children: [_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6 }, className: "text-center mb-24", children: [_jsx("h2", { className: "text-3xl md:text-4xl font-serif mb-4", children: "Success Stories" }), _jsx("div", { className: "w-12 h-1 bg-gray-200 mx-auto" })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-12", children: (() => {
120
131
  const backendTestimonials = layoutConfig?.sections?.testimonials?.items || [];
121
132
  const fallbackTestimonials = [
122
133
  { id: '1', name: 'Michael Chen', role: 'Entrepreneur', quote: "Completely changed my perspective on leadership.", rating: 5, image: 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=150&h=150&fit=crop', order: 1 },
123
134
  { id: '2', name: 'Sarah Johnson', role: 'Creative Director', quote: "Worth every penny. The depth of content is unmatched.", rating: 5, image: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=150&h=150&fit=crop', order: 2 },
124
135
  { id: '3', name: 'David Lee', role: 'Developer', quote: "Simple, practical, and effective. Highly recommend.", rating: 5, image: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=150&h=150&fit=crop', order: 3 },
125
136
  ];
126
- const testimonials = backendTestimonials.length > 0
127
- ? backendTestimonials
128
- : (isPreview ? fallbackTestimonials : []);
129
- return testimonials.slice(0, 3).map((testimonial, index) => (_jsxs(motion.div, { initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6, delay: index * 0.1 }, className: "text-center space-y-6", children: [_jsx("div", { className: "relative w-20 h-20 mx-auto rounded-full overflow-hidden mb-6 ring-4 ring-gray-100", children: _jsx(Image, { src: testimonial.image || '', alt: testimonial.name, fill: true, className: "object-cover", unoptimized: true }) }), _jsx("div", { className: "flex justify-center gap-1 mb-4 text-yellow-500", children: [...Array(5)].map((_, i) => _jsx(Star, { className: "w-4 h-4 fill-current" }, i)) }), _jsx(Quote, { className: "w-8 h-8 text-gray-300 mx-auto" }), _jsxs("p", { className: "text-xl font-serif text-gray-800 italic leading-relaxed", children: ["\"", testimonial.quote, "\""] }), _jsxs("div", { children: [_jsx("div", { className: "font-bold uppercase tracking-wider text-sm", children: testimonial.name }), _jsx("div", { className: "text-gray-400 text-xs mt-1", children: testimonial.role })] })] }, testimonial.id || testimonial.name)));
130
- })() })] }) })), _jsx("section", { "data-section": "faq", "data-payaza-section-key": "faq", "data-payaza-page": "home", className: "py-32 bg-white", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'faq'), children: _jsxs("div", { className: "container mx-auto px-6 max-w-4xl", children: [_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6 }, className: "text-center mb-16", children: [_jsx("span", { className: "text-gray-400 font-bold tracking-widest uppercase text-xs mb-4 block", children: "Support" }), _jsx("h2", { className: "text-4xl md:text-5xl font-serif text-gray-900 mb-4", children: "Frequently Asked Questions" }), _jsx("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: "Everything you need to know about our courses and membership." })] }), _jsx("div", { className: "space-y-4", children: faqItems.map((faq, index) => (_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.4, delay: index * 0.1 }, className: "border border-gray-200 rounded-lg overflow-hidden bg-white hover:shadow-lg transition-shadow", children: [_jsxs("button", { onClick: () => toggleFaq(index), className: "w-full px-6 py-5 flex items-center justify-between text-left hover:bg-gray-50 transition-colors", children: [_jsx("span", { className: "text-lg font-semibold text-gray-900 pr-8", children: faq.question }), _jsx(ChevronDown, { className: `w-5 h-5 text-gray-500 transition-transform shrink-0 ${openFaqIndex === index ? 'transform rotate-180' : ''}` })] }), openFaqIndex === index && (_jsx(motion.div, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: 'auto' }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.3 }, className: "px-6 pb-5", children: _jsx("p", { className: "text-gray-600 leading-relaxed", children: faq.answer }) }))] }, index))) })] }) })] }));
137
+ const testimonials = backendTestimonials.length > 0 ? backendTestimonials : fallbackTestimonials;
138
+ return testimonials.slice(0, 3).map((testimonial, index) => (_jsxs(motion.div, { initial: { opacity: 0, y: 30 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6, delay: index * 0.1 }, className: "text-center space-y-6", children: [_jsx("div", { className: "relative w-20 h-20 mx-auto rounded-full overflow-hidden mb-6 ring-4 ring-gray-100", children: _jsx(Image, { src: testimonial.image || '', alt: testimonial.name, fill: true, className: "object-cover" }) }), _jsx("div", { className: "flex justify-center gap-1 mb-4 text-yellow-500", children: [...Array(5)].map((_, i) => _jsx(Star, { className: "w-4 h-4 fill-current" }, i)) }), _jsx(Quote, { className: "w-8 h-8 text-gray-300 mx-auto" }), _jsxs("p", { className: "text-xl font-serif text-gray-800 italic leading-relaxed", children: ["\"", testimonial.quote, "\""] }), _jsxs("div", { children: [_jsx("div", { className: "font-bold uppercase tracking-wider text-sm", children: testimonial.name }), _jsx("div", { className: "text-gray-400 text-xs mt-1", children: testimonial.role })] })] }, testimonial.id || testimonial.name)));
139
+ })() })] }) })), _jsxs("section", { "data-section": "marketing", className: "py-24 bg-gradient-to-br from-gray-900 via-gray-800 to-black text-white relative overflow-hidden", children: [_jsxs("div", { className: "absolute inset-0 opacity-10", children: [_jsx("div", { className: "absolute top-0 left-0 w-96 h-96 bg-yellow-500 rounded-full blur-3xl" }), _jsx("div", { className: "absolute bottom-0 right-0 w-96 h-96 bg-blue-500 rounded-full blur-3xl" })] }), _jsx("div", { className: "container mx-auto px-6 max-w-4xl relative z-10", children: _jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6 }, className: "text-center space-y-8", children: [_jsxs("div", { className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/10 backdrop-blur-md border border-white/20 text-xs font-bold uppercase tracking-widest", children: [_jsx(Mail, { className: "w-3 h-3" }), layoutConfig?.sections?.marketing?.newsletterBadge || 'Stay Connected'] }), _jsx("h2", { className: "text-4xl md:text-5xl font-serif", children: layoutConfig?.sections?.marketing?.newsletterTitle || 'Join Our Newsletter' }), _jsx("p", { className: "text-xl text-gray-300 max-w-2xl mx-auto font-light", children: layoutConfig?.sections?.marketing?.newsletterSubtitle || 'Get weekly insights, exclusive content, and early access to new courses delivered straight to your inbox.' }), _jsxs("form", { onSubmit: handleSubscribe, className: "flex flex-col sm:flex-row gap-4 max-w-lg mx-auto", children: [_jsx("input", { type: "email", value: email, onChange: (e) => setEmail(e.target.value), placeholder: layoutConfig?.sections?.marketing?.newsletterPlaceholder || 'Enter your email', required: true, className: "flex-1 px-6 py-4 rounded-full bg-white/10 backdrop-blur-md border border-white/20 text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-yellow-500 focus:border-transparent" }), _jsxs(Button, { type: "submit", size: "lg", className: "h-14 px-8 rounded-full bg-yellow-500 text-black hover:bg-yellow-400 font-bold text-lg transition-all transform hover:-translate-y-1 hover:shadow-xl", children: [layoutConfig?.sections?.marketing?.newsletterButton || 'Subscribe', _jsx(ArrowRight, { className: "ml-2 h-5 w-5" })] })] }), _jsx("p", { className: "text-sm text-gray-400", children: "We respect your privacy. Unsubscribe at any time." })] }) })] }), _jsx("section", { "data-section": "faq", className: "py-32 bg-white", children: _jsxs("div", { className: "container mx-auto px-6 max-w-4xl", children: [_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.6 }, className: "text-center mb-16", children: [_jsx("span", { className: "text-gray-400 font-bold tracking-widest uppercase text-xs mb-4 block", children: "Support" }), _jsx("h2", { className: "text-4xl md:text-5xl font-serif text-gray-900 mb-4", children: "Frequently Asked Questions" }), _jsx("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: "Everything you need to know about our courses and membership." })] }), _jsx("div", { className: "space-y-4", children: faqItems.map((faq, index) => (_jsxs(motion.div, { initial: { opacity: 0, y: 20 }, whileInView: { opacity: 1, y: 0 }, viewport: { once: true }, transition: { duration: 0.4, delay: index * 0.1 }, className: "border border-gray-200 rounded-lg overflow-hidden bg-white hover:shadow-lg transition-shadow", children: [_jsxs("button", { onClick: () => toggleFaq(index), className: "w-full px-6 py-5 flex items-center justify-between text-left hover:bg-gray-50 transition-colors", children: [_jsx("span", { className: "text-lg font-semibold text-gray-900 pr-8", children: faq.question }), _jsx(ChevronDown, { className: `w-5 h-5 text-gray-500 transition-transform shrink-0 ${openFaqIndex === index ? 'transform rotate-180' : ''}` })] }), openFaqIndex === index && (_jsx(motion.div, { initial: { opacity: 0, height: 0 }, animate: { opacity: 1, height: 'auto' }, exit: { opacity: 0, height: 0 }, transition: { duration: 0.3 }, className: "px-6 pb-5", children: _jsx("p", { className: "text-gray-600 leading-relaxed", children: faq.answer }) }))] }, index))) })] }) })] }));
131
140
  }
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { MotivationalLayout } from '../../shared/wrappers/MotivationalLayout.js';
3
+ import { MotivationalLayout } from '../../shared/wrappers/MotivationalLayout';
4
4
  export const MotivationalSpeakerPageWrapper = (props) => {
5
5
  return _jsx(MotivationalLayout, { ...props });
6
6
  };
@@ -1,10 +1,10 @@
1
1
  // Motivational Speaker layout — fully sandboxed exports
2
- export { MotivationalHomePage } from './components/MotivationalHomePage.js';
3
- export { MotivationalSpeakerPageWrapper as MotivationalPageWrapper } from './components/MotivationalSpeakerPageWrapper.js';
4
- export { MotivationalProductsPage } from './pages/ProductsPage.js';
5
- export { MotivationalServiceDetailPage } from './pages/ServiceDetailPage.js';
6
- export { MotivationalServicesPage } from './pages/ServicesPage.js';
7
- export { MotivationalSubscriptionPage } from './pages/SubscriptionPage.js';
8
- export { MotivationalCategoryPage } from './pages/CategoryPage.js';
9
- export { MotivationalAboutPage } from './pages/AboutPage.js';
10
- export { MotivationalContactPage } from './pages/ContactPage.js';
2
+ export { MotivationalHomePage } from './components/MotivationalHomePage';
3
+ export { MotivationalSpeakerPageWrapper as MotivationalPageWrapper } from './components/MotivationalSpeakerPageWrapper';
4
+ export { MotivationalProductsPage } from './pages/ProductsPage';
5
+ export { MotivationalServiceDetailPage } from './pages/ServiceDetailPage';
6
+ export { MotivationalServicesPage } from './pages/ServicesPage';
7
+ export { MotivationalSubscriptionPage } from './pages/SubscriptionPage';
8
+ export { MotivationalCategoryPage } from './pages/CategoryPage';
9
+ export { MotivationalAboutPage } from './pages/AboutPage';
10
+ export { MotivationalContactPage } from './pages/ContactPage';
@@ -2,6 +2,6 @@ import { StoreConfig } from '../../../lib/store-types';
2
2
  interface AboutPageProps {
3
3
  storeConfig: StoreConfig;
4
4
  }
5
- export declare function MotivationalAboutPage({ storeConfig: initialConfig }: AboutPageProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function AboutPage({ storeConfig: initialConfig }: AboutPageProps): import("react/jsx-runtime").JSX.Element;
6
6
  export {};
7
7
  //# sourceMappingURL=AboutPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AboutPage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/motivational-speaker/pages/AboutPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,UAAU,cAAc;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,cAAc,2CA4PnF"}
1
+ {"version":3,"file":"AboutPage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/motivational-speaker/pages/AboutPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,UAAU,cAAc;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,SAAS,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,cAAc,2CA2OvE"}