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,22 +1,13 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button } from '../../../components/ui/button.js';
4
- import { Clock, ArrowRight, User, Sparkles } from 'lucide-react';
5
- import { DynamicIcon } from '../../../components/ui/dynamic-icon.js';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Button } from '../../../components/ui/button';
4
+ import { Clock, Star, ArrowRight, User, Sparkles } from 'lucide-react';
6
5
  import Link from 'next/link';
7
6
  import Image from 'next/image';
8
- import { RichTextExcerpt } from '../../../components/rich-text/RichTextExcerpt.js';
9
- import { useStore } from '../../../lib/store-context.js';
10
- import { formatCurrency, filterActiveServices } from '../../../lib/utils/index.js';
11
- import { getBannerImage, getServiceImage, getTeamMemberImage, getTextContent, getFeaturesList, getLayoutText } from '../../../lib/utils/asset-helpers.js';
12
- import { encodePayazaFieldKey, payazaInlineBindingProps, payazaIconBindingProps } from '../../../preview/canvas/field-key.js';
13
- import { BookingMultilineHeading } from './BookingMultilineHeading.js';
14
- import { BookingTestimonialCard } from './BookingTestimonialCard.js';
15
- import { BookingTestimonialsEmptyState } from './BookingTestimonialsEmptyState.js';
16
- import { resolveBookingTestimonialsForDisplay } from './booking-testimonial-defaults.js';
17
- import { getPayazaSectionInlineStyle } from '../../../lib/payaza-section-styles.js';
18
- import { resolveStoreLink } from '../../../lib/layout-route-utils.js';
19
- import { showLayoutDecorativeBadges } from '../../../lib/layout-badges.js';
7
+ import { useStore } from '../../../lib/store-context';
8
+ import { formatCurrency, filterActiveServices } from '../../../lib/utils';
9
+ import { getBannerImage, getServiceImage, getTeamMemberImage, getTextContent, getFeaturesList, getLayoutText } from '../../../lib/utils/asset-helpers';
10
+ import { TestimonialCard } from '../../shared/components/TestimonialCard';
20
11
  export function BookingHomePage({ storeConfig: initialConfig }) {
21
12
  const { store } = useStore();
22
13
  const storeConfig = store || initialConfig;
@@ -24,7 +15,6 @@ export function BookingHomePage({ storeConfig: initialConfig }) {
24
15
  const layoutConfig = storeConfig.layoutConfig;
25
16
  // In preview mode, use mock services if none are available
26
17
  const isPreview = (typeof window !== 'undefined' && window.__IS_PREVIEW__) || storeConfig.layoutConfig?.isPreview;
27
- const payaza = (sectionKey, segments) => isPreview ? encodePayazaFieldKey(sectionKey, segments) : undefined;
28
18
  const rawServices = storeConfig.services || [];
29
19
  const activeServices = filterActiveServices(rawServices);
30
20
  // Use real active services if available, otherwise if in preview, use all services (including drafts),
@@ -39,69 +29,73 @@ export function BookingHomePage({ storeConfig: initialConfig }) {
39
29
  { id: 'mock-3', name: 'Full Facial Spa', description: 'Deep cleansing and hydration treatment', price: 85, duration: 60, categoryId: 'cat-2', status: 'active', image: 'https://images.unsplash.com/photo-1540555700478-4be289fbecef?w=800', slug: 'full-facial-spa' }
40
30
  ] : []));
41
31
  const heroBg = getBannerImage(storeConfig, 'hero_bg', 'https://images.unsplash.com/photo-1457972729786-0411a3b2b626?q=80&w=2070&auto=format&fit=crop');
42
- return (_jsxs("div", { className: "min-h-screen bg-white", children: [(layoutConfig?.sections?.hero?.show ?? layoutConfig?.hero?.show) !== false && _jsxs("section", { "data-section": "hero", "data-payaza-section-key": "hero", "data-payaza-page": "home", className: "relative h-[85vh] min-h-[600px] w-full overflow-hidden flex items-center bg-gray-900", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'hero'), children: [_jsxs("div", { className: "absolute inset-0 z-0", "data-payaza-image": payaza('hero', ['hero_bg']), children: [_jsx(Image, { src: heroBg, alt: "Makeup Studio", fill: true, className: "object-cover", unoptimized: true }), _jsx("div", { className: "absolute inset-0 bg-black/40" })] }), _jsx("div", { className: "container mx-auto px-4 relative z-10 text-white", children: _jsxs("div", { className: "max-w-2xl animate-fade-in-up", children: [showLayoutDecorativeBadges() && (_jsxs("div", { className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/20 backdrop-blur-md border border-white/30 text-white text-sm font-medium mb-6", children: [_jsx(Sparkles, { className: "w-4 h-4" }), _jsx("span", { "data-payaza-edit": payaza('hero', ['hero_badge']), children: layoutConfig?.sections?.hero?.hero_badge || getTextContent(storeConfig, 'hero_badge', 'Premium Beauty Studio') })] })), _jsx(BookingMultilineHeading, { as: "h1", className: "text-4xl md:text-5xl lg:text-7xl font-serif font-light mb-6 tracking-tight leading-tight", defaultText: "Reveal Your\\nInner Radiance.", text: layoutConfig?.sections?.hero?.title ||
43
- getTextContent(storeConfig, 'hero_title', 'Reveal Your\nInner Radiance.'), isPreview: isPreview, sectionKey: "hero", fieldPath: ['title'] }), _jsx("p", { className: "text-xl md:text-2xl text-gray-200 mb-10 font-light leading-relaxed max-w-lg whitespace-pre-line", ...payazaInlineBindingProps(isPreview, 'hero', ['subtitle']), children: layoutConfig?.sections?.hero?.subtitle || getTextContent(storeConfig, 'hero_subtitle', storeConfig.description || "Enhance your natural beauty with our professional makeup artistry.") }), _jsxs("div", { className: "flex flex-col sm:flex-row gap-4", children: [_jsx(Link, { href: `/${storeConfig.slug}/book`, children: _jsx(Button, { size: "lg", className: "h-14 px-8 rounded-full text-lg font-medium bg-white text-black hover:bg-gray-100 transition-colors", children: _jsx("span", { "data-payaza-edit": payaza('hero', ['primaryButton', 'text']), children: layoutConfig?.sections?.hero?.primaryButton?.text || layoutConfig?.sections?.hero?.primaryCTA || getLayoutText(storeConfig, 'booking.bookAppointment', getTextContent(storeConfig, 'book_btn', 'Book Appointment')) }) }) }), _jsx(Link, { href: `/${storeConfig.slug}/services`, children: _jsx(Button, { size: "lg", variant: "outline", className: "h-14 px-8 rounded-full text-lg font-medium border-white/80 text-white bg-white/5 hover:bg-white/15 hover:text-white transition-colors backdrop-blur-sm shadow-lg", children: _jsx("span", { "data-payaza-edit": payaza('hero', ['secondaryButton', 'text']), children: layoutConfig?.sections?.hero?.secondaryButton?.text || layoutConfig?.sections?.hero?.secondaryCTA || getLayoutText(storeConfig, 'booking.viewServices', getTextContent(storeConfig, 'view_services_btn', 'View Services')) }) }) })] })] }) })] }), (layoutConfig?.sections?.featuredServices?.show) !== false && (_jsx("section", { "data-section": "featuredServices", "data-payaza-section-key": "featuredServices", "data-payaza-page": "home", className: "py-12 md:py-20 px-4 bg-gray-50/50", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'featuredServices'), children: _jsxs("div", { className: "container mx-auto max-w-7xl", children: [_jsxs("div", { className: "flex justify-between items-end mb-8 md:mb-12", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-3xl font-bold text-gray-900 mb-2", children: _jsx("span", { "data-payaza-edit": payaza('featuredServices', ['title']), children: layoutConfig?.sections?.featuredServices?.title || getLayoutText(storeConfig, 'sections.featuredServices.title', getTextContent(storeConfig, 'services_section_title', 'Signature Looks')) }) }), _jsx("p", { className: "text-gray-500 whitespace-pre-line", children: _jsx("span", { "data-payaza-edit": payaza('featuredServices', ['subtitle']), children: layoutConfig?.sections?.featuredServices?.subtitle || getLayoutText(storeConfig, 'sections.featuredServices.subtitle', getTextContent(storeConfig, 'services_section_subtitle', 'Curated styles for every occasion')) }) })] }), _jsxs(Link, { href: `/${storeConfig.slug}/services`, className: "flex items-center gap-2 text-sm font-bold tracking-wide uppercase hover:underline", style: { color: primaryColor }, children: [_jsx("span", { "data-payaza-edit": payaza('featuredServices', ['viewAllLabel']), children: layoutConfig?.sections?.featuredServices?.viewAllLabel || getLayoutText(storeConfig, 'sections.featuredServices.viewAll', getTextContent(storeConfig, 'services_view_all', 'View All')) }), _jsx(ArrowRight, { className: "w-4 h-4" })] })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: services.slice(0, 3).map((service) => (_jsxs(Link, { href: `/${storeConfig.slug}/book?service=${service.slug}`, className: "group cursor-pointer", children: [_jsxs("div", { className: "relative aspect-[4/3] overflow-hidden rounded-2xl mb-6 bg-gray-200", children: [_jsx(Image, { src: getServiceImage(service.image, storeConfig, "https://images.unsplash.com/photo-1522337660859-02fbefca4702?q=80&w=2069&auto=format&fit=crop"), alt: service.name, fill: true, className: "object-cover transition-transform duration-700 group-hover:scale-110", unoptimized: true }), _jsx("div", { className: "absolute top-4 right-4 bg-white/90 backdrop-blur px-3 py-1 rounded-full text-sm font-bold shadow-sm", children: formatCurrency(service.price, service.currency || storeConfig.settings?.currency || 'USD') })] }), _jsx("h3", { className: "text-xl font-bold text-gray-900 mb-2 group-hover:text-gray-600 transition-colors", children: service.name }), _jsx(RichTextExcerpt, { value: service.description, as: "p", className: "text-gray-500 line-clamp-2 mb-4" }), _jsxs("div", { className: "flex items-center gap-4 text-sm text-gray-400", children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Clock, { className: "w-4 h-4" }), " ", service.duration, " mins"] }), service.provider && (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(User, { className: "w-4 h-4" }), " ", service.provider.name] }))] })] }, service.id))) })] }) })), layoutConfig?.sections?.team?.show !== false && _jsx("section", { "data-section": "team", "data-payaza-section-key": "team", "data-payaza-page": "home", className: "py-12 md:py-24 px-4 bg-white", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'team'), children: _jsx("div", { className: "container mx-auto max-w-7xl", children: (() => {
44
- const teamSection = layoutConfig?.sections?.team;
32
+ return (_jsxs("div", { className: "min-h-screen bg-white", children: [_jsxs("section", { "data-section": "hero", className: "relative h-[85vh] min-h-[600px] w-full overflow-hidden flex items-center bg-gray-900", children: [_jsxs("div", { className: "absolute inset-0 z-0", children: [_jsx(Image, { src: heroBg, alt: "Makeup Studio", fill: true, className: "object-cover" }), _jsx("div", { className: "absolute inset-0 bg-black/40" })] }), _jsx("div", { className: "container mx-auto px-4 relative z-10 text-white", children: _jsxs("div", { className: "max-w-2xl animate-fade-in-up", children: [_jsxs("div", { className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/20 backdrop-blur-md border border-white/30 text-white text-sm font-medium mb-6", children: [_jsx(Sparkles, { className: "w-4 h-4" }), _jsx("span", { children: getTextContent(storeConfig, 'hero_badge', 'Premium Beauty Studio') })] }), _jsx("h1", { className: "text-4xl md:text-5xl lg:text-7xl font-light mb-6 tracking-tight leading-tight", children: (() => {
33
+ const titleText = layoutConfig?.sections?.hero?.title || getTextContent(storeConfig, 'hero_title', 'Reveal Your\nInner Radiance.');
34
+ const lines = titleText.split('\n');
35
+ return lines.map((line, i) => (_jsx("span", { children: i === lines.length - 1 ? (_jsx("span", { className: "font-bold", children: line })) : (_jsxs(_Fragment, { children: [line, " ", _jsx("br", {})] })) }, i)));
36
+ })() }), _jsx("p", { className: "text-xl md:text-2xl text-gray-200 mb-10 font-light leading-relaxed max-w-lg", children: layoutConfig?.sections?.hero?.subtitle || getTextContent(storeConfig, 'hero_subtitle', storeConfig.description || "Enhance your natural beauty with our professional makeup artistry.") }), _jsxs("div", { className: "flex flex-col sm:flex-row gap-4", children: [_jsx(Link, { href: `/${storeConfig.slug}/book`, children: _jsx(Button, { size: "lg", className: "h-14 px-8 rounded-full text-lg font-medium bg-white text-black hover:bg-gray-100 transition-colors", children: layoutConfig?.sections?.hero?.primaryCTA || getLayoutText(storeConfig, 'booking.bookAppointment', getTextContent(storeConfig, 'book_btn', 'Book Appointment')) }) }), _jsx(Link, { href: `/${storeConfig.slug}/services`, children: _jsx(Button, { size: "lg", variant: "outline", className: "h-14 px-8 rounded-full text-lg font-medium border-white/80 text-white bg-white/5 hover:bg-white/15 hover:text-white transition-colors backdrop-blur-sm shadow-lg", children: layoutConfig?.sections?.hero?.secondaryCTA || getLayoutText(storeConfig, 'booking.viewServices', getTextContent(storeConfig, 'view_services_btn', 'View Services')) }) })] })] }) })] }), _jsx("section", { "data-section": "featuredServices", className: "py-12 md:py-20 px-4 bg-gray-50/50", children: _jsxs("div", { className: "container mx-auto max-w-7xl", children: [_jsxs("div", { className: "flex justify-between items-end mb-8 md:mb-12", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-3xl font-bold text-gray-900 mb-2", children: layoutConfig?.sections?.featuredServices?.title || getLayoutText(storeConfig, 'sections.featuredServices.title', getTextContent(storeConfig, 'services_section_title', 'Signature Looks')) }), _jsx("p", { className: "text-gray-500", children: layoutConfig?.sections?.featuredServices?.subtitle || getLayoutText(storeConfig, 'sections.featuredServices.subtitle', getTextContent(storeConfig, 'services_section_subtitle', 'Curated styles for every occasion')) })] }), _jsxs(Link, { href: `/${storeConfig.slug}/services`, className: "flex items-center gap-2 text-sm font-bold tracking-wide uppercase hover:underline", style: { color: primaryColor }, children: [layoutConfig?.sections?.featuredServices?.viewAllLabel || getLayoutText(storeConfig, 'sections.featuredServices.viewAll', getTextContent(storeConfig, 'services_view_all', 'View All')), ' ', _jsx(ArrowRight, { className: "w-4 h-4" })] })] }), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: services.slice(0, 3).map((service) => (_jsxs(Link, { href: `/${storeConfig.slug}/book?service=${service.slug}`, className: "group cursor-pointer", children: [_jsxs("div", { className: "relative aspect-[4/3] overflow-hidden rounded-2xl mb-6 bg-gray-200", children: [_jsx(Image, { src: getServiceImage(service.image, storeConfig, "https://images.unsplash.com/photo-1522337660859-02fbefca4702?q=80&w=2069&auto=format&fit=crop"), alt: service.name, fill: true, className: "object-cover transition-transform duration-700 group-hover:scale-110" }), _jsx("div", { className: "absolute top-4 right-4 bg-white/90 backdrop-blur px-3 py-1 rounded-full text-sm font-bold shadow-sm", children: formatCurrency(service.price, service.currency || storeConfig.settings?.currency || 'USD') })] }), _jsx("h3", { className: "text-xl font-bold text-gray-900 mb-2 group-hover:text-gray-600 transition-colors", children: service.name }), _jsx("p", { className: "text-gray-500 line-clamp-2 mb-4", children: service.description }), _jsxs("div", { className: "flex items-center gap-4 text-sm text-gray-400", children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(Clock, { className: "w-4 h-4" }), " ", service.duration, " mins"] }), service.provider && (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx(User, { className: "w-4 h-4" }), " ", service.provider.name] }))] })] }, service.id))) })] }) }), _jsx("section", { "data-section": "team", className: "py-12 md:py-24 px-4 bg-white", children: _jsx("div", { className: "container mx-auto max-w-7xl", children: (() => {
45
37
  const teamMembers = storeConfig.layoutConfig?.pages?.team?.members || [];
46
- const specialistFallback = 'https://blog.sugar.ng/files/styles/width-640/public/We%20Just%20Found%20the%20Perfect%20Nikkai%20Bridal%20Look%20for%20You.jpg?itok=HGIlGdwB';
47
- const configFeaturedMember = teamSection && teamSection.show !== false
48
- ? {
49
- name: teamSection.memberName ||
50
- getLayoutText(storeConfig, 'sections.team.memberName', getTextContent(storeConfig, 'team_member_name', 'Sarah Mitchell')),
51
- role: teamSection.memberRole ||
52
- getLayoutText(storeConfig, 'sections.team.memberRole', getTextContent(storeConfig, 'team_member_role', 'Lead Makeup Artist')),
53
- photo: (typeof teamSection.specialist_image === 'string' &&
54
- teamSection.specialist_image.trim()
55
- ? teamSection.specialist_image.trim()
56
- : null) ||
57
- getTeamMemberImage(storeConfig, teamSection.memberName || 'Sarah Mitchell', 'specialist_image', specialistFallback),
58
- }
59
- : null;
60
38
  const fallbackTeam = [
61
39
  {
62
40
  name: 'Sarah Mitchell',
63
41
  role: 'Lead Artist',
64
- photo: specialistFallback,
65
- },
42
+ photo: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=400"
43
+ }
66
44
  ];
67
- const members = teamMembers.length > 0
68
- ? teamMembers
69
- : configFeaturedMember
70
- ? [configFeaturedMember]
71
- : isPreview
72
- ? fallbackTeam
73
- : [];
74
- const featuredMember = members[0] ?? null;
75
- if (!featuredMember) {
76
- return null;
77
- }
78
- return (_jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-10 md:gap-16 items-center", children: [_jsxs("div", { className: "relative", children: [_jsx("div", { className: "aspect-[4/5] rounded-[2rem] overflow-hidden bg-gray-100 relative", "data-payaza-image": payaza('team', ['specialist_image']), children: _jsx(Image, { src: featuredMember.photo, alt: featuredMember.name, fill: true, className: "object-cover", unoptimized: true }) }), _jsxs("div", { className: "absolute bottom-8 left-8 right-8 bg-white/95 backdrop-blur p-6 rounded-2xl shadow-xl", children: [_jsx("h3", { className: "text-xl font-bold text-gray-900", "data-payaza-edit": payaza('team', ['memberName']), children: featuredMember.name }), _jsx("p", { className: "text-gray-500 mb-4", "data-payaza-edit": payaza('team', ['memberRole']), children: featuredMember.role }), _jsxs("div", { className: "flex items-center gap-1 text-yellow-500", children: [_jsx("div", { ...payazaIconBindingProps(isPreview, 'team', ['ratingIcon']), children: _jsx(DynamicIcon, { name: layoutConfig?.sections?.team?.ratingIcon || 'Star', className: "w-4 h-4 fill-current" }) }), _jsx("span", { className: "font-bold text-black", "data-payaza-edit": payaza('team', ['memberRating']), children: layoutConfig?.sections?.team?.memberRating || '5.0' }), _jsx("span", { className: "text-gray-400 text-sm ml-1", "data-payaza-edit": payaza('team', ['memberReviewCount']), children: layoutConfig?.sections?.team?.memberReviewCount || '(150+ Reviews)' })] })] })] }), _jsxs("div", { className: "space-y-8", children: [_jsx(BookingMultilineHeading, { as: "h2", className: "text-4xl md:text-5xl font-serif font-light text-gray-900 leading-tight", defaultText: storeConfig.pageFeatures?.teamPage
79
- ? 'Artistry in\nevery brushstroke.'
80
- : 'Excellence in\nevery detail.', text: layoutConfig?.sections?.team?.title ||
81
- getLayoutText(storeConfig, 'sections.team.title', getTextContent(storeConfig, 'team_section_title', storeConfig.pageFeatures?.teamPage
45
+ const members = teamMembers.length > 0 ? teamMembers : (isPreview ? fallbackTeam : []);
46
+ const featuredMember = members[0] || {
47
+ name: getLayoutText(storeConfig, 'sections.team.memberName', getTextContent(storeConfig, 'team_member_name', 'Sarah Mitchell')),
48
+ role: getLayoutText(storeConfig, 'sections.team.memberRole', getTextContent(storeConfig, 'team_member_role', 'Lead Makeup Artist')),
49
+ photo: getTeamMemberImage(storeConfig, 'Sarah Mitchell', 'specialist_image', "https://blog.sugar.ng/files/styles/width-640/public/We%20Just%20Found%20the%20Perfect%20Nikkai%20Bridal%20Look%20for%20You.jpg?itok=HGIlGdwB")
50
+ };
51
+ return (_jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-10 md:gap-16 items-center", children: [_jsxs("div", { className: "relative", children: [_jsx("div", { className: "aspect-[4/5] rounded-[2rem] overflow-hidden bg-gray-100 relative", children: _jsx(Image, { src: featuredMember.photo, alt: featuredMember.name, fill: true, className: "object-cover" }) }), _jsxs("div", { className: "absolute bottom-8 left-8 right-8 bg-white/95 backdrop-blur p-6 rounded-2xl shadow-xl", children: [_jsx("h3", { className: "text-xl font-bold text-gray-900", children: featuredMember.name }), _jsx("p", { className: "text-gray-500 mb-4", children: featuredMember.role }), _jsxs("div", { className: "flex items-center gap-1 text-yellow-500", children: [_jsx(Star, { className: "w-4 h-4 fill-current" }), _jsx("span", { className: "font-bold text-black", children: "5.0" }), _jsx("span", { className: "text-gray-400 text-sm ml-1", children: "(150+ Reviews)" })] })] })] }), _jsxs("div", { className: "space-y-8", children: [_jsx("h2", { className: "text-4xl md:text-5xl font-light text-gray-900 leading-tight", children: (() => {
52
+ const defaultTitle = storeConfig.pageFeatures?.teamPage
82
53
  ? 'Artistry in\nevery brushstroke.'
83
- : 'Excellence in\nevery detail.')), isPreview: isPreview, sectionKey: "team", fieldPath: ['title'] }), _jsx("p", { className: "text-xl text-gray-500 font-light leading-relaxed whitespace-pre-line", ...payazaInlineBindingProps(isPreview, 'team', ['subtitle']), children: layoutConfig?.sections?.team?.subtitle || getLayoutText(storeConfig, 'sections.team.subtitle', getTextContent(storeConfig, 'team_desc', storeConfig.pageFeatures?.teamPage
54
+ : 'Excellence in\nevery detail.';
55
+ const titleText = layoutConfig?.sections?.team?.title || getLayoutText(storeConfig, 'sections.team.title', getTextContent(storeConfig, 'team_section_title', defaultTitle));
56
+ const lines = titleText.split('\n');
57
+ return lines.map((line, i) => (_jsx("span", { children: i === lines.length - 1 ? (_jsx("span", { className: "font-bold", children: line })) : (_jsxs(_Fragment, { children: [line, " ", _jsx("br", {})] })) }, i)));
58
+ })() }), _jsx("p", { className: "text-xl text-gray-500 font-light leading-relaxed", children: layoutConfig?.sections?.team?.subtitle || getLayoutText(storeConfig, 'sections.team.subtitle', getTextContent(storeConfig, 'team_desc', storeConfig.pageFeatures?.teamPage
84
59
  ? "Our team of certified makeup artists brings passion and precision to every look. Whether it's your big day or a night out, we create looks that enhance your natural beauty."
85
- : "We bring passion and precision to every look. Whether it's your big day or a night out, we create looks that enhance your natural beauty.")) }), _jsx("div", { className: "space-y-6", children: (() => {
86
- const storedFeatures = layoutConfig?.sections?.team?.features || [];
87
- const defaultFeatureItems = getFeaturesList(storeConfig, 'team_feature_', [
88
- "Certified Professional Artists",
89
- "Premium & Luxury Brands",
90
- "Customized Color Matching",
91
- "Long-lasting Techniques"
92
- ]);
93
- const featureItems = storedFeatures.length > 0
94
- ? storedFeatures
95
- : defaultFeatureItems.map((text) => ({ text }));
96
- return featureItems.map((item, i) => (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "w-10 h-10 rounded-full flex items-center justify-center bg-gray-50 text-gray-900", ...payazaIconBindingProps(isPreview, 'team', ['features', String(i), 'icon']), children: _jsx(DynamicIcon, { name: item.icon || 'Star', className: "w-5 h-5" }) }), _jsx("span", { className: "text-lg font-medium text-gray-900", "data-payaza-edit": payaza('team', ['features', String(i), 'text']), children: item.text })] }, i)));
97
- })() }), storeConfig.pageFeatures?.teamPage && (_jsx(Link, { href: `/${storeConfig.slug}/team`, children: _jsx(Button, { size: "lg", className: "mt-8 h-14 px-8 rounded-full text-lg", style: { backgroundColor: primaryColor }, children: "Meet Our Team" }) })), storeConfig.pageFeatures?.portfolioPage && !storeConfig.pageFeatures?.teamPage && (_jsx(Link, { href: `/${storeConfig.slug}/portfolio`, children: _jsx(Button, { size: "lg", className: "mt-8 h-14 px-8 rounded-full text-lg", style: { backgroundColor: primaryColor }, children: "View Portfolio" }) }))] })] }));
98
- })() }) }), layoutConfig?.sections?.testimonials?.show !== false && (_jsxs("section", { "data-section": "testimonials", "data-payaza-section-key": "testimonials", "data-payaza-page": "home", className: "py-16 md:py-24 px-4 bg-black text-white relative overflow-hidden", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'testimonials'), children: [_jsx("div", { className: "absolute top-0 right-0 -mr-20 -mt-20 w-96 h-96 bg-white/5 rounded-full blur-3xl" }), _jsxs("div", { className: "container mx-auto max-w-7xl relative z-10", children: [_jsxs("div", { className: "text-center mb-12", children: [_jsx("h2", { className: "text-2xl md:text-4xl font-bold mb-4", children: _jsx("span", { "data-payaza-edit": payaza('testimonials', ['title']), children: layoutConfig?.sections?.testimonials?.title || getLayoutText(storeConfig, 'sections.testimonials.title', 'What Our Clients Say') }) }), layoutConfig?.sections?.testimonials?.subtitle && (_jsx("p", { className: "text-white/70 text-lg whitespace-pre-line", children: _jsx("span", { "data-payaza-edit": payaza('testimonials', ['subtitle']), children: layoutConfig.sections.testimonials.subtitle }) }))] }), (() => {
99
- const testimonialsConfig = layoutConfig?.sections?.testimonials;
100
- const showRatings = testimonialsConfig?.showRatings !== false;
101
- const visible = resolveBookingTestimonialsForDisplay(testimonialsConfig, { isPreview });
102
- if (visible.length === 0) {
103
- return (_jsx(BookingTestimonialsEmptyState, { isPreview: isPreview, variant: "dark" }));
104
- }
105
- return (_jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: visible.map((testimonial, index) => (_jsx(BookingTestimonialCard, { testimonial: testimonial, index: index, isPreview: isPreview, showRatings: showRatings }, testimonial.id || `${testimonial.name}-${index}`))) }));
106
- })()] })] })), layoutConfig?.sections?.marketing?.show !== false && _jsx("section", { "data-section": "marketing", "data-payaza-section-key": "marketing", "data-payaza-page": "home", className: "py-24 px-4 bg-gray-50 text-center", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'marketing'), children: _jsxs("div", { className: "container mx-auto max-w-2xl", children: [_jsx("h2", { className: "text-3xl md:text-4xl font-bold mb-6", children: _jsx("span", { "data-payaza-edit": payaza('marketing', ['ctaTitle']), children: layoutConfig?.sections?.marketing?.ctaTitle || getLayoutText(storeConfig, 'sections.cta.title', getTextContent(storeConfig, 'cta_title', 'Ready to glow?')) }) }), _jsx("p", { className: "text-gray-500 text-lg mb-10 whitespace-pre-line", children: _jsx("span", { "data-payaza-edit": payaza('marketing', ['ctaDescription']), children: layoutConfig?.sections?.marketing?.ctaDescription || getLayoutText(storeConfig, 'sections.cta.description', getTextContent(storeConfig, 'cta_description', 'Book your session today and let us create the perfect look for you.')) }) }), _jsx(Link, { href: `/${storeConfig.slug}/book`, children: _jsx(Button, { size: "lg", className: "h-16 px-12 rounded-full text-xl shadow-xl hover:shadow-2xl transition-all hover:-translate-y-1", style: { backgroundColor: primaryColor }, children: _jsx("span", { "data-payaza-edit": payaza('marketing', ['ctaButton']), children: layoutConfig?.sections?.marketing?.ctaButton || getLayoutText(storeConfig, 'booking.bookAppointment', 'Book Appointment') }) }) })] }) }), layoutConfig?.sections?.promoBanner?.show && (_jsxs("section", { "data-section": "promoBanner", "data-payaza-section-key": "promoBanner", "data-payaza-page": "home", className: "relative w-full overflow-hidden", style: getPayazaSectionInlineStyle(storeConfig, 'home', 'promoBanner'), children: [layoutConfig.sections.promoBanner.image && (_jsxs("div", { className: "absolute inset-0 z-0", "data-payaza-image": payaza('promoBanner', ['image']), children: [_jsx(Image, { src: layoutConfig.sections.promoBanner.image, alt: "Promotional Banner", fill: true, className: "object-cover", unoptimized: true }), _jsx("div", { className: "absolute inset-0 bg-black/50" })] })), _jsx("div", { className: `relative z-10 py-20 px-4 text-center ${layoutConfig.sections.promoBanner.image ? 'text-white' : 'bg-gray-900 text-white'}`, children: _jsxs("div", { className: "container mx-auto max-w-3xl", children: [layoutConfig.sections.promoBanner.title && (_jsx("h2", { className: "text-3xl md:text-5xl font-bold mb-4 whitespace-pre-line", children: _jsx("span", { "data-payaza-edit": payaza('promoBanner', ['title']), children: layoutConfig.sections.promoBanner.title }) })), layoutConfig.sections.promoBanner.subtitle && (_jsx("p", { className: "text-lg md:text-xl mb-8 opacity-90 whitespace-pre-line", children: _jsx("span", { "data-payaza-edit": payaza('promoBanner', ['subtitle']), children: layoutConfig.sections.promoBanner.subtitle }) })), layoutConfig.sections.promoBanner.buttonText && (_jsx(Link, { href: resolveStoreLink(layoutConfig.sections.promoBanner.buttonLink || 'book', storeConfig.slug), children: _jsx(Button, { size: "lg", className: "h-14 px-10 rounded-full text-lg font-semibold bg-white text-gray-900 hover:bg-gray-100 transition-colors shadow-xl", children: _jsx("span", { "data-payaza-edit": payaza('promoBanner', ['buttonText']), children: layoutConfig.sections.promoBanner.buttonText }) }) }))] }) })] }))] }));
60
+ : "We bring passion and precision to every look. Whether it's your big day or a night out, we create looks that enhance your natural beauty.")) }), _jsx("div", { className: "space-y-6", children: getFeaturesList(storeConfig, 'team_feature_', [
61
+ "Certified Professional Artists",
62
+ "Premium & Luxury Brands",
63
+ "Customized Color Matching",
64
+ "Long-lasting Techniques"
65
+ ]).map((item, i) => (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "w-10 h-10 rounded-full flex items-center justify-center bg-gray-50 text-gray-900", children: _jsx(Star, { className: "w-5 h-5" }) }), _jsx("span", { className: "text-lg font-medium text-gray-900", children: item })] }, i))) }), storeConfig.pageFeatures?.teamPage && (_jsx(Link, { href: `/${storeConfig.slug}/team`, children: _jsx(Button, { size: "lg", className: "mt-8 h-14 px-8 rounded-full text-lg", style: { backgroundColor: primaryColor }, children: "Meet Our Team" }) })), storeConfig.pageFeatures?.portfolioPage && !storeConfig.pageFeatures?.teamPage && (_jsx(Link, { href: `/${storeConfig.slug}/portfolio`, children: _jsx(Button, { size: "lg", className: "mt-8 h-14 px-8 rounded-full text-lg", style: { backgroundColor: primaryColor }, children: "View Portfolio" }) }))] })] }));
66
+ })() }) }), layoutConfig?.sections?.testimonials?.show !== false && (_jsxs("section", { "data-section": "testimonials", className: "py-16 md:py-24 px-4 bg-black text-white relative overflow-hidden", children: [_jsx("div", { className: "absolute top-0 right-0 -mr-20 -mt-20 w-96 h-96 bg-white/5 rounded-full blur-3xl" }), _jsxs("div", { className: "container mx-auto max-w-7xl relative z-10", children: [_jsxs("div", { className: "text-center mb-12", children: [_jsx("h2", { className: "text-2xl md:text-4xl font-bold mb-4", children: layoutConfig?.sections?.testimonials?.title || getLayoutText(storeConfig, 'sections.testimonials.title', 'What Our Clients Say') }), layoutConfig?.sections?.testimonials?.subtitle && (_jsx("p", { className: "text-white/70 text-lg", children: layoutConfig.sections.testimonials.subtitle }))] }), (() => {
67
+ const backendTestimonials = layoutConfig?.sections?.testimonials?.items || [];
68
+ const fallbackTestimonials = [
69
+ {
70
+ id: '1',
71
+ name: getLayoutText(storeConfig, 'sections.testimonials.author', getTextContent(storeConfig, 'testimonial_author', 'Emily Davis')),
72
+ role: getLayoutText(storeConfig, 'sections.testimonials.role', getTextContent(storeConfig, 'testimonial_role', 'Bridal Client')),
73
+ quote: getLayoutText(storeConfig, 'sections.testimonials.quote', getTextContent(storeConfig, 'testimonial_quote', "I've never felt more beautiful. The makeup was flawless and lasted all night. Absolutely stunning work!")),
74
+ rating: 5,
75
+ image: getTeamMemberImage(storeConfig, 'Emily Davis', 'testimonial_image', "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=150&h=150&fit=crop"),
76
+ order: 1
77
+ }
78
+ ];
79
+ const testimonials = backendTestimonials.length > 0 ? backendTestimonials : (isPreview ? [
80
+ {
81
+ id: '1',
82
+ name: 'Emily Davis',
83
+ role: 'Bridal Client',
84
+ quote: "I've never felt more beautiful. The makeup was flawless and lasted all night. Absolutely stunning work!",
85
+ rating: 5,
86
+ image: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=150",
87
+ order: 1
88
+ },
89
+ {
90
+ id: '2',
91
+ name: 'Sarah Johnson',
92
+ role: 'Fashion Model',
93
+ quote: "Professional, creative and punctual. They really know how to work with light and camera!",
94
+ rating: 5,
95
+ image: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=150",
96
+ order: 2
97
+ }
98
+ ] : []);
99
+ return (_jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: testimonials.slice(0, 3).map((testimonial) => (_jsx("div", { className: "bg-white/5 backdrop-blur-sm rounded-2xl p-8 border border-white/10", children: _jsx(TestimonialCard, { testimonial: testimonial }) }, testimonial.id || testimonial.name))) }));
100
+ })()] })] })), _jsx("section", { "data-section": "marketing", className: "py-24 px-4 bg-gray-50 text-center", children: _jsxs("div", { className: "container mx-auto max-w-2xl", children: [_jsx("h2", { className: "text-3xl md:text-4xl font-bold mb-6", children: layoutConfig?.sections?.marketing?.ctaTitle || getLayoutText(storeConfig, 'sections.cta.title', getTextContent(storeConfig, 'cta_title', 'Ready to glow?')) }), _jsx("p", { className: "text-gray-500 text-lg mb-10", children: layoutConfig?.sections?.marketing?.ctaDescription || getLayoutText(storeConfig, 'sections.cta.description', getTextContent(storeConfig, 'cta_description', 'Book your session today and let us create the perfect look for you.')) }), _jsx(Link, { href: `/${storeConfig.slug}/book`, children: _jsx(Button, { size: "lg", className: "h-16 px-12 rounded-full text-xl shadow-xl hover:shadow-2xl transition-all hover:-translate-y-1", style: { backgroundColor: primaryColor }, children: layoutConfig?.sections?.marketing?.ctaButton || getLayoutText(storeConfig, 'booking.bookAppointment', 'Book Appointment') }) })] }) })] }));
107
101
  }
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React from 'react';
4
- import { payazaInlineBindingProps } from '../../../preview/canvas/field-key.js';
4
+ import { payazaInlineBindingProps } from '../../../preview/canvas/field-key';
5
5
  function coalesceMultilineBreaks(text, fallback) {
6
6
  if (!text || text.includes('\n'))
7
7
  return text;
@@ -2,8 +2,8 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import Image from 'next/image';
4
4
  import { Star } from 'lucide-react';
5
- import { cn } from '../../../lib/utils/index.js';
6
- import { encodePayazaFieldKey, payazaRatingBindingProps } from '../../../preview/canvas/field-key.js';
5
+ import { cn } from '../../../lib/utils';
6
+ import { encodePayazaFieldKey, payazaRatingBindingProps } from '../../../preview/canvas/field-key';
7
7
  export function BookingTestimonialCard({ testimonial, index, isPreview, showRatings = true, }) {
8
8
  const payaza = (...segments) => isPreview ? encodePayazaFieldKey('testimonials', ['items', String(index), ...segments]) : undefined;
9
9
  const rating = Math.min(5, Math.max(1, Number(testimonial.rating) || 5));
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { MessageCircle, Star } from 'lucide-react';
4
- import { cn } from '../../../lib/utils/index.js';
4
+ import { cn } from '../../../lib/utils';
5
5
  function TypingDots({ className }) {
6
6
  return (_jsx("span", { className: cn('inline-flex items-center gap-1 ml-1', className), "aria-hidden": true, children: [0, 1, 2].map((index) => (_jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-current animate-bounce", style: { animationDelay: `${index * 160}ms`, animationDuration: '1.1s' } }, index))) }));
7
7
  }
@@ -1,5 +1,5 @@
1
- import { getDefaultFooterMainLinks, getDefaultFooterSupportLinks, getFooterPrimaryColumnTitle, } from '../../../lib/utils/footer-nav-defaults.js';
2
- import { mergeBookingAboutArrayItems } from './booking-about-defaults.js';
1
+ import { getDefaultFooterMainLinks, getDefaultFooterSupportLinks, getFooterPrimaryColumnTitle, } from '../../../lib/utils/footer-nav-defaults';
2
+ import { mergeBookingAboutArrayItems } from './booking-about-defaults';
3
3
  export const BOOKING_DEFAULT_FOOTER_MAIN_LINKS = [
4
4
  { id: 'f-m1', label: 'Services', href: '/services' },
5
5
  { id: 'f-m2', label: 'Book Appointment', href: '/book' },
@@ -1,9 +1,9 @@
1
1
  // BookEasy Standard (booking) layout — fully sandboxed exports
2
- export { BookingHomePage } from './components/BookingHomePage.js';
3
- export { BookingBookPage } from './pages/BookPage.js';
4
- export { BookingServicesPage } from './pages/ServicesPage.js';
5
- export { BookingProductDetailPage } from './pages/ProductDetailPage.js';
6
- export { BookingCategoryPage } from './pages/CategoryPage.js';
7
- export { BookingCategoriesPage } from './pages/CategoriesPage.js';
8
- export { BookingAboutPage } from './pages/AboutPage.js';
9
- export { BookingContactPage } from './pages/ContactPage.js';
2
+ export { BookingHomePage } from './components/BookingHomePage';
3
+ export { BookingBookPage } from './pages/BookPage';
4
+ export { BookingServicesPage } from './pages/ServicesPage';
5
+ export { BookingProductDetailPage } from './pages/ProductDetailPage';
6
+ export { BookingCategoryPage } from './pages/CategoryPage';
7
+ export { BookingCategoriesPage } from './pages/CategoriesPage';
8
+ export { BookingAboutPage } from './pages/AboutPage';
9
+ export { BookingContactPage } 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 BookingAboutPage({ 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/booking/pages/AboutPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAqBhD,UAAU,cAAc;IACtB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,cAAc,2CAyV9E"}
1
+ {"version":3,"file":"AboutPage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/booking/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"}
@@ -1,69 +1,48 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Heart, ArrowRight } from 'lucide-react';
4
- import { Button } from '../../../components/ui/button.js';
5
- import { DotPattern } from '../../../components/ui/background-patterns.js';
6
- import { DynamicIcon } from '../../../components/ui/dynamic-icon.js';
7
- import { useStore } from '../../../lib/store-context.js';
3
+ import { Users, Award, Heart, Leaf, MapPin, Clock, Mail, ArrowRight } from 'lucide-react';
4
+ import { Button } from '../../../components/ui/button';
5
+ import { DotPattern } from '../../../components/ui/background-patterns';
6
+ import { useStore } from '../../../lib/store-context';
8
7
  import Image from 'next/image';
9
- import Link from 'next/link';
10
- import { payazaInlineBindingProps, payazaIconBindingProps, encodePayazaFieldKey, } from '../../../preview/canvas/field-key.js';
11
- import { showLayoutDecorativeBadges } from '../../../lib/layout-badges.js';
12
- import { resolveStoreLink } from '../../../lib/layout-route-utils.js';
13
- import { BOOKING_DEFAULT_STORY_IMAGE, resolveBookingAboutStats, resolveBookingAboutValues, } from '../components/booking-about-defaults.js';
14
- export function BookingAboutPage({ storeConfig: initialConfig }) {
8
+ export function AboutPage({ storeConfig: initialConfig }) {
15
9
  const { store } = useStore();
16
10
  const storeConfig = store || initialConfig;
17
11
  const primaryColor = storeConfig.branding.primaryColor;
18
12
  const secondaryColor = storeConfig.branding.secondaryColor || primaryColor;
19
13
  const aboutConfig = storeConfig.layoutConfig?.pages?.about;
20
- const isPreview = !!storeConfig.isPreview;
21
- const payaza = (sectionKey, segments) => isPreview ? encodePayazaFieldKey(sectionKey, segments) : undefined;
22
- const inline = (sectionKey, path) => payazaInlineBindingProps(isPreview, sectionKey, path);
23
- // Hero
24
- const heroConfig = aboutConfig?.hero;
25
- const heroImage = heroConfig?.heroImage || aboutConfig?.heroImage || 'https://images.unsplash.com/photo-1522071820081-009f0129c71c?q=80&w=2070&auto=format&fit=crop';
26
- const pageTitle = heroConfig?.title || aboutConfig?.title || 'Crafting Experiences, Delivering Joy.';
27
- const missionStatement = heroConfig?.missionStatement || aboutConfig?.missionStatement;
28
- // Story
29
- const storyConfig = aboutConfig?.story;
30
- const pageContent = storyConfig?.content || aboutConfig?.content || storeConfig.description;
31
- const storyLabel = storyConfig?.sectionLabel || 'Who We Are';
32
- const storyHeading = storyConfig?.sectionHeading || 'Our Journey';
33
- const storyImage = storyConfig?.storyImage || BOOKING_DEFAULT_STORY_IMAGE;
34
- const galleryImages = aboutConfig?.gallerySection || storyConfig?.gallerySection;
35
- const galleryOverlayTitle = storyConfig?.galleryOverlayTitle || 'The Dream Team';
36
- const galleryOverlaySubtitle = storyConfig?.galleryOverlaySubtitle || 'Working together to serve you better';
37
- // Values & stats — always resolve against schema defaults so canvas indices stay stable
38
- const valuesData = resolveBookingAboutValues(aboutConfig?.values);
39
- const statsData = resolveBookingAboutStats(aboutConfig?.stats, {
40
- servicesCount: storeConfig.services?.length,
41
- });
42
- // Contact-info section
43
- const contactInfoConfig = aboutConfig?.['contact-info'];
44
- const contactInfoTitle = contactInfoConfig?.sectionTitle || 'Get in Touch';
45
- const contactInfoSubtitle = contactInfoConfig?.sectionSubtitle ||
46
- "Have questions? We'd love to hear from you. Reach out to our team via email, phone, or visit us at our store.";
47
- const visitTitle = contactInfoConfig?.visitTitle || 'Visit Us';
48
- const visitIcon = contactInfoConfig?.visitIcon || 'MapPin';
49
- const emailTitle = contactInfoConfig?.emailTitle || 'Email Us';
50
- const emailIcon = contactInfoConfig?.emailIcon || 'Mail';
51
- const hoursTitle = contactInfoConfig?.hoursTitle || 'Opening Hours';
52
- const hoursIcon = contactInfoConfig?.hoursIcon || 'Clock';
53
- const emailCTALabel = contactInfoConfig?.emailCTALabel || 'Send a message';
54
- const emailLink = contactInfoConfig?.emailLink || '/contact';
55
- const defaultAddress = [
56
- storeConfig.contactInfo?.address?.street || '123 Store Street',
57
- [storeConfig.contactInfo?.address?.city || 'Commerce City', storeConfig.contactInfo?.address?.state || 'ST', storeConfig.contactInfo?.address?.zipCode || '12345'].filter(Boolean).join(', '),
58
- ].filter(Boolean).join('\n');
59
- const addressText = contactInfoConfig?.address || defaultAddress;
60
- const emailAddress = contactInfoConfig?.email || storeConfig.contactInfo?.email || `hello@${storeConfig.slug}.com`;
61
- const phoneNumber = contactInfoConfig?.phone || storeConfig.contactInfo?.phone || '+1 (555) 123-4567';
62
- const defaultHours = 'Mon - Fri: 9am - 6pm\nSat - Sun: 10am - 4pm';
63
- const hoursText = contactInfoConfig?.hours ||
64
- (typeof storeConfig.locations?.[0]?.openingHours === 'string'
65
- ? storeConfig.locations[0].openingHours
66
- : defaultHours);
67
- const establishedYear = heroConfig?.establishedYear || 'Est. 2024';
68
- return (_jsxs("div", { className: "min-h-screen bg-white pb-20 overflow-hidden", children: [(heroConfig?.show !== false) && (_jsxs("section", { "data-section": "hero", "data-payaza-section-key": "hero", "data-payaza-page": "about", className: "relative h-[60vh] min-h-[500px] w-full overflow-hidden", children: [_jsxs("div", { className: "absolute inset-0", "data-payaza-image": payaza('hero', ['heroImage']), children: [_jsx(Image, { src: heroImage, alt: "About Us", fill: true, className: "w-full h-full object-cover transform scale-105 animate-pulse-slow", unoptimized: true }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-black/80 via-black/50 to-transparent" })] }), _jsx("div", { className: "absolute inset-0 flex items-center", children: _jsx("div", { className: "container mx-auto px-4 sm:px-6 lg:px-8", children: _jsxs("div", { className: "max-w-3xl animate-fade-in-up", children: [showLayoutDecorativeBadges() && (_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-white text-sm font-medium mb-6", children: [_jsx("span", { className: "w-2 h-2 rounded-full bg-white animate-pulse" }), _jsx("span", { ...inline('hero', ['establishedYear']), children: establishedYear })] })), _jsx("h1", { className: "text-5xl md:text-7xl font-bold text-white mb-6 tracking-tight leading-tight", children: _jsx("span", { ...inline('hero', ['title']), children: pageTitle }) }), _jsx("p", { className: "text-xl md:text-2xl text-gray-200 max-w-2xl leading-relaxed font-light", children: _jsx("span", { ...inline('hero', ['missionStatement']), children: missionStatement || storeConfig.description }) })] }) }) })] })), (storyConfig?.show !== false) && (_jsxs("section", { "data-section": "story", "data-payaza-section-key": "story", "data-payaza-page": "about", className: "py-24 px-4 sm:px-6 lg:px-8 relative", children: [_jsx("div", { className: "absolute top-0 right-0 -mt-24 -mr-24 w-96 h-96 bg-gray-50 rounded-full blur-3xl -z-10" }), _jsx("div", { className: "container mx-auto max-w-7xl", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-16 items-center", children: [_jsxs("div", { className: "relative", children: [galleryImages && galleryImages.length > 0 ? (_jsx("div", { className: "grid grid-cols-2 gap-4", children: galleryImages.slice(0, 4).map((img, i) => (_jsx("div", { className: `relative overflow-hidden rounded-2xl shadow-lg ${i === 0 ? 'col-span-2 aspect-[16/9]' : 'aspect-square'}`, "data-payaza-image": payaza('story', ['gallerySection', String(i), 'image']), children: _jsx(Image, { src: img.image, alt: img.caption || 'Gallery Image', fill: true, className: "w-full h-full object-cover hover:scale-110 transition-transform duration-500", unoptimized: true }) }, img.image || i))) })) : (_jsxs("div", { className: "relative aspect-[4/5] rounded-[2rem] overflow-hidden shadow-2xl", "data-payaza-image": payaza('story', ['storyImage']), children: [_jsx(Image, { src: storyImage, alt: "Our Team", fill: true, className: "w-full h-full object-cover", unoptimized: true }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent opacity-60" }), _jsxs("div", { className: "absolute bottom-8 left-8 text-white", children: [_jsx("p", { className: "font-bold text-lg", children: _jsx("span", { ...inline('story', ['galleryOverlayTitle']), children: galleryOverlayTitle }) }), _jsx("p", { className: "text-white/80 text-sm", children: _jsx("span", { ...inline('story', ['galleryOverlaySubtitle']), children: galleryOverlaySubtitle }) })] })] })), _jsx("div", { className: "absolute -bottom-6 -right-6 w-24 h-24 bg-white rounded-2xl shadow-xl flex items-center justify-center p-4 animate-bounce duration-[3000ms]", children: _jsx(Heart, { className: "w-10 h-10", style: { color: primaryColor, fill: primaryColor } }) })] }), _jsxs("div", { className: "space-y-10", children: [_jsxs("div", { children: [_jsx("span", { className: "text-sm font-bold uppercase tracking-widest mb-3 block", style: { color: primaryColor }, children: _jsx("span", { ...inline('story', ['sectionLabel']), children: storyLabel }) }), _jsx("h2", { className: "text-4xl md:text-5xl font-black text-gray-900 mb-6 tracking-tight", children: _jsx("span", { ...inline('story', ['sectionHeading']), children: storyHeading }) }), _jsxs("div", { className: "prose prose-lg text-gray-600 leading-relaxed space-y-6", ...payazaInlineBindingProps(isPreview, 'story', ['content'], { rich: 'inline' }), children: [pageContent?.split('\n').map((paragraph, idx) => (_jsx("p", { children: paragraph }, idx))), !pageContent && (_jsxs(_Fragment, { children: [_jsxs("p", { children: ["Founded with a bold vision to redefine excellence in the", ' ', _jsx("span", { className: "font-semibold text-gray-900", children: storeConfig.type }), " industry,", ' ', storeConfig.name, " has grown from a small passion project into a beloved brand. We believe in the power of quality, innovation, and community."] }), _jsx("p", { children: "Every day, we strive to bring you the best products, curated with care and delivered with a smile. Our team is dedicated to ensuring that your experience with us is nothing short of exceptional." })] }))] })] }), (aboutConfig?.values?.show !== false) && (_jsx("div", { "data-section": "values", "data-payaza-section-key": "values", "data-payaza-page": "about", className: "grid grid-cols-1 sm:grid-cols-2 gap-8", children: valuesData.map((item, idx) => (_jsxs("div", { className: "flex gap-4 group", "data-payaza-group": payaza('values', ['items', String(idx)]), children: [_jsx("div", { className: "flex-shrink-0", children: _jsx("div", { className: "w-14 h-14 rounded-2xl flex items-center justify-center transition-colors group-hover:bg-gray-100", style: { backgroundColor: `${primaryColor}10` }, ...payazaIconBindingProps(isPreview, 'values', ['items', String(idx), 'icon']), children: _jsx(DynamicIcon, { name: item.icon || 'Award', className: "h-7 w-7 transition-transform group-hover:scale-110", style: { color: primaryColor } }) }) }), _jsxs("div", { children: [_jsx("h4", { className: "font-bold text-gray-900 mb-2 text-lg", children: _jsx("span", { ...inline('values', ['items', String(idx), 'title']), children: item.title }) }), _jsx("p", { className: "text-gray-600 text-sm leading-relaxed", children: _jsx("span", { ...inline('values', ['items', String(idx), 'description']), children: item.description }) })] })] }, item.id || idx))) }))] })] }) })] })), (aboutConfig?.stats?.show !== false) && (_jsxs("section", { "data-section": "stats", "data-payaza-section-key": "stats", "data-payaza-page": "about", className: "py-20 relative overflow-hidden", children: [_jsx("div", { className: "absolute inset-0 opacity-10", children: _jsx(DotPattern, { color: primaryColor, cx: 2, cy: 2, cr: 2, width: 30, height: 30 }) }), _jsx("div", { className: "absolute inset-0", style: { backgroundColor: `${secondaryColor}15` } }), _jsx("div", { className: "container mx-auto px-4 relative z-10", children: _jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-8 md:gap-12", children: statsData.map((stat, idx) => (_jsxs("div", { className: "text-center group", "data-payaza-group": payaza('stats', ['items', String(idx)]), children: [_jsx("div", { className: "text-5xl md:text-6xl font-black mb-2 tracking-tight transition-transform group-hover:scale-110 duration-300", style: { color: primaryColor }, children: _jsx("span", { ...inline('stats', ['items', String(idx), 'value']), children: stat.value }) }), _jsx("div", { className: "text-gray-600 font-bold uppercase tracking-widest text-xs md:text-sm", children: _jsx("span", { ...inline('stats', ['items', String(idx), 'label']), children: stat.label }) })] }, stat.id || idx))) }) })] })), (contactInfoConfig?.show !== false) && (_jsx("section", { "data-section": "contact-info", "data-payaza-section-key": "contact-info", "data-payaza-page": "about", className: "py-24 px-4 sm:px-6 lg:px-8 bg-white", children: _jsxs("div", { className: "container mx-auto max-w-6xl", children: [_jsxs("div", { className: "text-center mb-16", children: [_jsx("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: _jsx("span", { ...inline('contact-info', ['sectionTitle']), children: contactInfoTitle }) }), _jsx("p", { className: "text-gray-500 max-w-xl mx-auto", children: _jsx("span", { ...payazaInlineBindingProps(isPreview, 'contact-info', ['sectionSubtitle'], { rich: 'inline' }), children: contactInfoSubtitle }) })] }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: [_jsxs("div", { className: "group p-8 rounded-[2rem] bg-gray-50 border border-gray-100 hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-center", children: [_jsx("div", { className: "w-16 h-16 mx-auto mb-6 rounded-2xl bg-white shadow-sm flex items-center justify-center group-hover:scale-110 transition-transform", ...payazaIconBindingProps(isPreview, 'contact-info', ['visitIcon']), children: _jsx(DynamicIcon, { name: visitIcon, className: "h-8 w-8 text-gray-400 group-hover:text-blue-500 transition-colors" }) }), _jsx("h3", { className: "font-bold text-xl text-gray-900 mb-3", children: _jsx("span", { ...inline('contact-info', ['visitTitle']), children: visitTitle }) }), _jsx("p", { className: "text-gray-600 leading-relaxed whitespace-pre-line", children: _jsx("span", { ...inline('contact-info', ['address']), children: addressText }) })] }), _jsxs("div", { className: "group p-8 rounded-[2rem] bg-gray-50 border border-gray-100 hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-center relative overflow-hidden", children: [_jsx("div", { className: "absolute inset-0 border-2 border-transparent group-hover:border-orange-100 rounded-[2rem] transition-colors pointer-events-none" }), _jsx("div", { className: "w-16 h-16 mx-auto mb-6 rounded-2xl bg-white shadow-sm flex items-center justify-center group-hover:scale-110 transition-transform", ...payazaIconBindingProps(isPreview, 'contact-info', ['emailIcon']), children: _jsx(DynamicIcon, { name: emailIcon, className: "h-8 w-8 text-gray-400 group-hover:text-orange-500 transition-colors" }) }), _jsx("h3", { className: "font-bold text-xl text-gray-900 mb-3", children: _jsx("span", { ...inline('contact-info', ['emailTitle']), children: emailTitle }) }), _jsxs("p", { className: "text-gray-600 leading-relaxed mb-4", children: [_jsx("span", { className: "block", ...inline('contact-info', ['email']), children: emailAddress }), _jsx("span", { className: "block", ...inline('contact-info', ['phone']), children: phoneNumber })] }), _jsx(Link, { href: resolveStoreLink(emailLink, storeConfig.slug), children: _jsxs(Button, { variant: "link", className: "text-orange-600 font-bold p-0 h-auto hover:no-underline group-hover:translate-x-1 transition-transform", children: [_jsx("span", { ...inline('contact-info', ['emailCTALabel']), children: emailCTALabel }), _jsx(ArrowRight, { className: "ml-1 h-4 w-4" })] }) })] }), _jsxs("div", { className: "group p-8 rounded-[2rem] bg-gray-50 border border-gray-100 hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-center", children: [_jsx("div", { className: "w-16 h-16 mx-auto mb-6 rounded-2xl bg-white shadow-sm flex items-center justify-center group-hover:scale-110 transition-transform", ...payazaIconBindingProps(isPreview, 'contact-info', ['hoursIcon']), children: _jsx(DynamicIcon, { name: hoursIcon, className: "h-8 w-8 text-gray-400 group-hover:text-green-500 transition-colors" }) }), _jsx("h3", { className: "font-bold text-xl text-gray-900 mb-3", children: _jsx("span", { ...inline('contact-info', ['hoursTitle']), children: hoursTitle }) }), _jsx("p", { className: "text-gray-600 leading-relaxed whitespace-pre-line", children: _jsx("span", { ...inline('contact-info', ['hours']), children: hoursText }) })] })] })] }) }))] }));
14
+ // Booking-specific hero image
15
+ const heroImage = aboutConfig?.heroImage || 'https://images.unsplash.com/photo-1522071820081-009f0129c71c?q=80&w=2070&auto=format&fit=crop';
16
+ const pageTitle = aboutConfig?.title || "Crafting Experiences, Delivering Joy.";
17
+ const pageContent = aboutConfig?.content || storeConfig.description;
18
+ const missionStatement = aboutConfig?.missionStatement;
19
+ const galleryImages = aboutConfig?.gallerySection;
20
+ const values = [
21
+ {
22
+ icon: Award,
23
+ title: "Certified Experts",
24
+ description: "Our professionals are highly trained and fully certified."
25
+ },
26
+ {
27
+ icon: Users,
28
+ title: "Personalized Care",
29
+ description: "We tailor every service to your specific needs and goals."
30
+ },
31
+ {
32
+ icon: Heart,
33
+ title: "Compassion",
34
+ description: "We care deeply about your well-being and results."
35
+ },
36
+ {
37
+ icon: Leaf,
38
+ title: "Premium Products",
39
+ description: "We use only the best tools and products for our services."
40
+ }
41
+ ];
42
+ return (_jsxs("div", { className: "min-h-screen bg-white pb-20 overflow-hidden", children: [_jsxs("section", { "data-section": "hero", className: "relative h-[60vh] min-h-[500px] w-full overflow-hidden", children: [_jsxs("div", { className: "absolute inset-0", children: [_jsx(Image, { src: heroImage, alt: "About Us", fill: true, className: "w-full h-full object-cover transform scale-105 animate-pulse-slow" }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-r from-black/80 via-black/50 to-transparent" })] }), _jsx("div", { className: "absolute inset-0 flex items-center", children: _jsx("div", { className: "container mx-auto px-4 sm:px-6 lg:px-8", children: _jsxs("div", { className: "max-w-3xl animate-fade-in-up", 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-white text-sm font-medium mb-6", children: [_jsx("span", { className: "w-2 h-2 rounded-full bg-white animate-pulse" }), "Est. 2024"] }), _jsx("h1", { className: "text-5xl md:text-7xl font-bold text-white mb-6 tracking-tight leading-tight", children: pageTitle }), _jsx("p", { className: "text-xl md:text-2xl text-gray-200 max-w-2xl leading-relaxed font-light", children: missionStatement || storeConfig.description })] }) }) })] }), _jsxs("section", { "data-section": "story", className: "py-24 px-4 sm:px-6 lg:px-8 relative", children: [_jsx("div", { className: "absolute top-0 right-0 -mt-24 -mr-24 w-96 h-96 bg-gray-50 rounded-full blur-3xl -z-10" }), _jsx("div", { className: "container mx-auto max-w-7xl", children: _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-16 items-center", children: [_jsxs("div", { className: "relative", children: [galleryImages && galleryImages.length > 0 ? (_jsx("div", { className: "grid grid-cols-2 gap-4", children: galleryImages.slice(0, 4).map((img, i) => (_jsx("div", { className: `relative overflow-hidden rounded-2xl shadow-lg ${i === 0 ? 'col-span-2 aspect-[16/9]' : 'aspect-square'}`, children: _jsx(Image, { src: img.image, alt: img.caption || "Gallery Image", fill: true, className: "w-full h-full object-cover hover:scale-110 transition-transform duration-500" }) }, i))) })) : (_jsxs("div", { className: "relative aspect-[4/5] rounded-[2rem] overflow-hidden shadow-2xl", children: [_jsx(Image, { src: "https://images.unsplash.com/photo-1522202176988-66273c2fd55f?q=80&w=2071&auto=format&fit=crop", alt: "Our Team", fill: true, className: "w-full h-full object-cover" }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent opacity-60" }), _jsxs("div", { className: "absolute bottom-8 left-8 text-white", children: [_jsx("p", { className: "font-bold text-lg", children: "The Dream Team" }), _jsx("p", { className: "text-white/80 text-sm", children: "Working together to serve you better" })] })] })), _jsx("div", { className: "absolute -bottom-6 -right-6 w-24 h-24 bg-white rounded-2xl shadow-xl flex items-center justify-center p-4 animate-bounce duration-[3000ms]", children: _jsx(Heart, { className: "w-10 h-10", style: { color: primaryColor, fill: primaryColor } }) })] }), _jsxs("div", { className: "space-y-10", children: [_jsxs("div", { children: [_jsx("span", { className: "text-sm font-bold uppercase tracking-widest mb-3 block", style: { color: primaryColor }, children: "Who We Are" }), _jsx("h2", { className: "text-4xl md:text-5xl font-black text-gray-900 mb-6 tracking-tight", children: "Our Journey" }), _jsxs("div", { className: "prose prose-lg text-gray-600 leading-relaxed space-y-6", children: [pageContent?.split('\n').map((paragraph, idx) => (_jsx("p", { children: paragraph }, idx))), !pageContent && (_jsxs(_Fragment, { children: [_jsxs("p", { children: ["Founded with a bold vision to redefine excellence in the ", _jsx("span", { className: "font-semibold text-gray-900", children: storeConfig.type }), " industry, ", storeConfig.name, " has grown from a small passion project into a beloved brand. We believe in the power of quality, innovation, and community."] }), _jsx("p", { children: "Every day, we strive to bring you the best products, curated with care and delivered with a smile. Our team is dedicated to ensuring that your experience with us is nothing short of exceptional." })] }))] })] }), _jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-8", children: values.map((item, idx) => (_jsxs("div", { className: "flex gap-4 group", children: [_jsx("div", { className: "flex-shrink-0", children: _jsx("div", { className: "w-14 h-14 rounded-2xl flex items-center justify-center transition-colors group-hover:bg-gray-100", style: { backgroundColor: `${primaryColor}10` }, children: _jsx(item.icon, { className: "h-7 w-7 transition-transform group-hover:scale-110", style: { color: primaryColor } }) }) }), _jsxs("div", { children: [_jsx("h4", { className: "font-bold text-gray-900 mb-2 text-lg", children: item.title }), _jsx("p", { className: "text-gray-600 text-sm leading-relaxed", children: item.description })] })] }, idx))) })] })] }) })] }), _jsxs("section", { "data-section": "stats", className: "py-20 relative overflow-hidden", children: [_jsx("div", { className: "absolute inset-0 opacity-10", children: _jsx(DotPattern, { color: primaryColor, cx: 2, cy: 2, cr: 2, width: 30, height: 30 }) }), _jsx("div", { className: "absolute inset-0", style: { backgroundColor: `${secondaryColor}15` } }), _jsx("div", { className: "container mx-auto px-4 relative z-10", children: _jsx("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-8 md:gap-12", children: [
43
+ { label: "Bookings Completed", value: "8k+" },
44
+ { label: "Expert Staff", value: "15+" },
45
+ { label: "Services Offered", value: storeConfig.services?.length ? `${storeConfig.services.length}+` : "20+" },
46
+ { label: "Years Experience", value: "10+" }
47
+ ].map((stat, idx) => (_jsxs("div", { className: "text-center group", children: [_jsx("div", { className: "text-5xl md:text-6xl font-black mb-2 tracking-tight transition-transform group-hover:scale-110 duration-300", style: { color: primaryColor }, children: stat.value }), _jsx("div", { className: "text-gray-600 font-bold uppercase tracking-widest text-xs md:text-sm", children: stat.label })] }, idx))) }) })] }), _jsx("section", { "data-section": "contact-info", className: "py-24 px-4 sm:px-6 lg:px-8 bg-white", children: _jsxs("div", { className: "container mx-auto max-w-6xl", children: [_jsxs("div", { className: "text-center mb-16", children: [_jsx("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: "Get in Touch" }), _jsx("p", { className: "text-gray-500 max-w-xl mx-auto", children: "Have questions? We'd love to hear from you. Reach out to our team via email, phone, or visit us at our store." })] }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-8", children: [_jsxs("div", { className: "group p-8 rounded-[2rem] bg-gray-50 border border-gray-100 hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-center", children: [_jsx("div", { className: "w-16 h-16 mx-auto mb-6 rounded-2xl bg-white shadow-sm flex items-center justify-center group-hover:scale-110 transition-transform", children: _jsx(MapPin, { className: "h-8 w-8 text-gray-400 group-hover:text-blue-500 transition-colors" }) }), _jsx("h3", { className: "font-bold text-xl text-gray-900 mb-3", children: "Visit Us" }), _jsxs("p", { className: "text-gray-600 leading-relaxed", children: [storeConfig.contactInfo?.address?.street || '123 Store Street', _jsx("br", {}), storeConfig.contactInfo?.address?.city || 'Commerce City', ", ", storeConfig.contactInfo?.address?.state || 'ST', " ", storeConfig.contactInfo?.address?.zipCode || '12345'] })] }), _jsxs("div", { className: "group p-8 rounded-[2rem] bg-gray-50 border border-gray-100 hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-center relative overflow-hidden", children: [_jsx("div", { className: "absolute inset-0 border-2 border-transparent group-hover:border-orange-100 rounded-[2rem] transition-colors pointer-events-none" }), _jsx("div", { className: "w-16 h-16 mx-auto mb-6 rounded-2xl bg-white shadow-sm flex items-center justify-center group-hover:scale-110 transition-transform", children: _jsx(Mail, { className: "h-8 w-8 text-gray-400 group-hover:text-orange-500 transition-colors" }) }), _jsx("h3", { className: "font-bold text-xl text-gray-900 mb-3", children: "Email Us" }), _jsxs("p", { className: "text-gray-600 leading-relaxed mb-4", children: [storeConfig.contactInfo?.email || `hello@${storeConfig.slug}.com`, _jsx("br", {}), storeConfig.contactInfo?.phone || '+1 (555) 123-4567'] }), _jsxs(Button, { variant: "link", className: "text-orange-600 font-bold p-0 h-auto hover:no-underline group-hover:translate-x-1 transition-transform", children: ["Send a message ", _jsx(ArrowRight, { className: "ml-1 h-4 w-4" })] })] }), _jsxs("div", { className: "group p-8 rounded-[2rem] bg-gray-50 border border-gray-100 hover:shadow-xl hover:-translate-y-2 transition-all duration-300 text-center", children: [_jsx("div", { className: "w-16 h-16 mx-auto mb-6 rounded-2xl bg-white shadow-sm flex items-center justify-center group-hover:scale-110 transition-transform", children: _jsx(Clock, { className: "h-8 w-8 text-gray-400 group-hover:text-green-500 transition-colors" }) }), _jsx("h3", { className: "font-bold text-xl text-gray-900 mb-3", children: "Opening Hours" }), _jsx("p", { className: "text-gray-600 leading-relaxed", children: storeConfig.locations?.[0]?.openingHours || (_jsxs(_Fragment, { children: ["Mon - Fri: 9am - 6pm", _jsx("br", {}), "Sat - Sun: 10am - 4pm"] })) })] })] })] }) })] }));
69
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BookPage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/booking/pages/BookPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAgB,MAAM,mBAAmB,CAAC;AAoB9D,UAAU,aAAa;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,aAAa,2CAikC1E"}
1
+ {"version":3,"file":"BookPage.d.ts","sourceRoot":"","sources":["../../../../src/layouts/booking/pages/BookPage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAgB,MAAM,mBAAmB,CAAC;AAqB9D,UAAU,aAAa;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,wBAAgB,eAAe,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,aAAa,2CAyjC1E"}
@@ -2,22 +2,23 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useState, useEffect, useRef } from 'react';
4
4
  import { Clock, Check, ChevronRight, ChevronLeft, ArrowLeft, ShieldCheck, CheckCircle2, Lock } from 'lucide-react';
5
- import { Button } from '../../../components/ui/button.js';
6
- import { cn, formatCurrency } from '../../../lib/utils/index.js';
5
+ import { Button } from '../../../components/ui/button';
6
+ import { cn, formatCurrency } from '../../../lib/utils';
7
7
  import Link from 'next/link';
8
- import { ImageWithFallback } from '../../../components/ui/image-with-fallback.js';
9
- import { RichTextExcerpt } from '../../../components/rich-text/RichTextExcerpt.js';
10
- import { usePayazaCheckout } from '../../../hooks/use-payaza-checkout.js';
11
- import { generateCheckoutConfig } from '../../../lib/payaza-checkout.js';
12
- import { checkoutService } from '../../../lib/services/checkout.service.js';
13
- import { paymentService, isPaymentConfirmed } from '../../../lib/services/payment.service.js';
14
- import { useToast } from '../../../components/ui/toast.js';
8
+ import { ImageWithFallback } from '../../../components/ui/image-with-fallback';
9
+ import { RichTextExcerpt } from '../../../components/rich-text/RichTextExcerpt';
10
+ import { usePayazaCheckout } from '../../../hooks/use-payaza-checkout';
11
+ import { generateCheckoutConfig } from '../../../lib/payaza-checkout';
12
+ import { requireCheckoutPayazaPublicKey } from '../../../lib/payaza-public-key';
13
+ import { checkoutService } from '../../../lib/services/checkout.service';
14
+ import { paymentService, isPaymentConfirmed } from '../../../lib/services/payment.service';
15
+ import { useToast } from '../../../components/ui/toast';
15
16
  import { useRouter, useSearchParams } from 'next/navigation';
16
- import { useAuth } from '../../../lib/auth-context.js';
17
- import { formatDateSafe } from '../../../utils/date.js';
18
- import { encodePayazaFieldKey } from '../../../preview/canvas/field-key.js';
19
- import { getOrCreateIdempotencyKey } from '../../../lib/utils/idempotency-key.js';
20
- import { CHECKOUT_UNAVAILABLE_MESSAGE } from '../../../lib/checkout-availability.js';
17
+ import { useAuth } from '../../../lib/auth-context';
18
+ import { formatDateSafe } from '../../../utils/date';
19
+ import { encodePayazaFieldKey } from '../../../preview/canvas/field-key';
20
+ import { getOrCreateIdempotencyKey } from '../../../lib/utils/idempotency-key';
21
+ import { CHECKOUT_UNAVAILABLE_MESSAGE } from '../../../lib/checkout-availability';
21
22
  export function BookingBookPage({ storeConfig, serviceSlug }) {
22
23
  const primaryColor = storeConfig.branding.primaryColor;
23
24
  const layoutConfig = storeConfig.layoutConfig;
@@ -77,11 +78,7 @@ export function BookingBookPage({ storeConfig, serviceSlug }) {
77
78
  }));
78
79
  }
79
80
  }, [isAuthenticated, user]);
80
- // Payaza Configuration
81
- // Do not hardcode a live key in code; require configuration via storeConfig/env.
82
- const payazaPublicKey = storeConfig.payment?.payazaPublicKey || process.env.NEXT_PUBLIC_PAYAZA_PUBLIC_KEY || '';
83
81
  const { checkout: initiateCheckout, isLoading: isPayazaLoading } = usePayazaCheckout({
84
- publicKey: payazaPublicKey,
85
82
  onSuccess: async (response) => {
86
83
  try {
87
84
  setIsProcessing(true);
@@ -369,10 +366,7 @@ export function BookingBookPage({ storeConfig, serviceSlug }) {
369
366
  quantity: 1,
370
367
  price: selectedService.price,
371
368
  }];
372
- // Step 3: Generate Payaza checkout config with order details
373
- // Key priority: backend-resolved key for the order currency (DB registry)
374
- // → storeConfig.payment → NEXT_PUBLIC_PAYAZA_PUBLIC_KEY
375
- const checkoutConfig = generateCheckoutConfig(checkoutItems, customerData.email, checkoutResponse.payazaPublicKey || payazaPublicKey, {
369
+ const checkoutConfig = generateCheckoutConfig(checkoutItems, customerData.email, requireCheckoutPayazaPublicKey(checkoutResponse), {
376
370
  firstName: customerData.firstName,
377
371
  lastName: customerData.lastName,
378
372
  phone: customerData.phone,
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Breadcrumbs } from '../../../components/ui/breadcrumbs.js';
4
- import { payazaInlineBindingProps, encodePayazaFieldKey } from '../../../preview/canvas/field-key.js';
5
- import { CategoryMasonryGrid } from '../../../components/categories/category-masonry-grid.js';
6
- import { useStore } from '../../../lib/store-context.js';
7
- import { useCatalogLoader } from '../../../hooks/use-catalog-loader.js';
8
- import { isEditorPreviewMode, resolveStoreCategoriesForDisplay } from '../../../lib/utils/index.js';
3
+ import { Breadcrumbs } from '../../../components/ui/breadcrumbs';
4
+ import { payazaInlineBindingProps, encodePayazaFieldKey } from '../../../preview/canvas/field-key';
5
+ import { CategoryMasonryGrid } from '../../../components/categories/category-masonry-grid';
6
+ import { useStore } from '../../../lib/store-context';
7
+ import { useCatalogLoader } from '../../../hooks/use-catalog-loader';
8
+ import { isEditorPreviewMode, resolveStoreCategoriesForDisplay } from '../../../lib/utils';
9
9
  export function BookingCategoriesPage({ storeConfig: initialConfig }) {
10
10
  const { store } = useStore();
11
11
  const storeConfig = store || initialConfig;
@@ -3,6 +3,6 @@ interface CategoryPageProps {
3
3
  storeConfig: StoreConfig;
4
4
  categorySlug: string;
5
5
  }
6
- export declare function BookingCategoryPage({ storeConfig: initialConfig, categorySlug }: CategoryPageProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function CategoryPage({ storeConfig, categorySlug }: CategoryPageProps): import("react/jsx-runtime").JSX.Element;
7
7
  export {};
8
8
  //# sourceMappingURL=CategoryPage.d.ts.map