storefront-layouts 1.0.16 → 1.0.18

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 (232) hide show
  1. package/dist/components/auth/LoginForm.js +1 -1
  2. package/dist/components/auth/LoginSheet.js +1 -1
  3. package/dist/components/auth/login-form-core.js +2 -2
  4. package/dist/components/auth/login-sheet-registry.js +2 -2
  5. package/dist/components/auth/login-sheet-themes/booking-agenda.theme.js +1 -1
  6. package/dist/components/auth/login-sheet-themes/booking.theme.js +1 -1
  7. package/dist/components/auth/login-sheet-themes/clothing-minimal.theme.js +1 -1
  8. package/dist/components/auth/login-sheet-themes/clothing.theme.js +1 -1
  9. package/dist/components/auth/login-sheet-themes/electronics-grid.theme.js +1 -1
  10. package/dist/components/auth/login-sheet-themes/electronics.theme.js +1 -1
  11. package/dist/components/auth/login-sheet-themes/food-modern.theme.js +1 -1
  12. package/dist/components/auth/login-sheet-themes/food.theme.js +1 -1
  13. package/dist/components/auth/login-sheet-themes/index.js +9 -9
  14. package/dist/components/auth/login-sheet-themes/motivational-speaker.theme.js +1 -1
  15. package/dist/components/auth/login-sheets/StoreLoginSheetShell.js +3 -3
  16. package/dist/components/categories/category-masonry-grid.js +3 -3
  17. package/dist/components/learning/CertificateViewer.js +1 -1
  18. package/dist/components/rich-text/CategoryDescription.js +2 -2
  19. package/dist/components/rich-text/ProductDescription.js +2 -2
  20. package/dist/components/rich-text/RichTextExcerpt.js +1 -1
  21. package/dist/components/rich-text/SafeRichHtml.js +1 -1
  22. package/dist/components/shipping/ProductDeliveryInfoSection.js +2 -2
  23. package/dist/components/ui/alert-modal.js +1 -1
  24. package/dist/components/ui/guest-checkout-modal.js +2 -2
  25. package/dist/components/ui/image-skeleton.js +1 -1
  26. package/dist/components/ui/image-with-fallback.js +1 -1
  27. package/dist/components/ui/loading-skeleton-wrapper.js +1 -1
  28. package/dist/components/ui/modal.js +1 -1
  29. package/dist/components/ui/page-content-loader.js +1 -1
  30. package/dist/components/ui/product-card.d.ts.map +1 -1
  31. package/dist/components/ui/product-card.js +3 -2
  32. package/dist/components/ui/route-skeleton-loader.js +5 -5
  33. package/dist/components/ui/sheet.js +1 -1
  34. package/dist/components/ui/skeletons/index.js +5 -5
  35. package/dist/components/ui/skeletons/product-grid-skeleton.js +1 -1
  36. package/dist/editor/alignment-schemas/booking.js +1 -1
  37. package/dist/editor/alignment-schemas/clothing-minimal.js +1 -1
  38. package/dist/editor/alignment-schemas/index.js +20 -20
  39. package/dist/editor/alignment-schemas/lazy-loader.js +1 -1
  40. package/dist/editor/alignment-schemas/metadata.js +1 -1
  41. package/dist/editor/alignment-schemas/resolve-canvas-inspector-leaf.js +3 -3
  42. package/dist/editor/blocks/index.js +3 -3
  43. package/dist/editor/blocks/migrate-clothing-minimal.js +3 -3
  44. package/dist/editor/blocks/nav-outline-utils.js +2 -2
  45. package/dist/editor/blocks/registry.js +1 -1
  46. package/dist/editor/document/adapter.js +4 -4
  47. package/dist/editor/document/block-tree.js +1 -1
  48. package/dist/editor/document/index.js +6 -6
  49. package/dist/editor/document/validate.js +1 -1
  50. package/dist/editor/index.js +12 -12
  51. package/dist/editor/layout-content-loader.js +3 -3
  52. package/dist/editor/payaza-form/ArrayItemManager.js +2 -2
  53. package/dist/editor/payaza-form/EditorCanvasPreview.js +4 -4
  54. package/dist/editor/payaza-form/FieldRenderer.js +17 -17
  55. package/dist/editor/payaza-form/IframePreviewMessageBridge.js +3 -3
  56. package/dist/editor/payaza-form/PayazaFormEditor.js +29 -29
  57. package/dist/editor/payaza-form/PayazaFormEditorFullPage.js +2 -2
  58. package/dist/editor/payaza-form/SliderArrayEditor.js +2 -2
  59. package/dist/editor/payaza-form/components/ArrayField.js +1 -1
  60. package/dist/editor/payaza-form/components/BlockStylesInspector.js +1 -1
  61. package/dist/editor/payaza-form/components/BlocksField.js +8 -8
  62. package/dist/editor/payaza-form/components/ButtonField.js +3 -3
  63. package/dist/editor/payaza-form/components/CanvasGranularInspector.js +11 -11
  64. package/dist/editor/payaza-form/components/IconField.js +2 -2
  65. package/dist/editor/payaza-form/components/ImageField.js +1 -1
  66. package/dist/editor/payaza-form/components/NumberField.js +1 -1
  67. package/dist/editor/payaza-form/components/RichTextField.js +2 -2
  68. package/dist/editor/payaza-form/components/SectionSchemaInspector.js +3 -3
  69. package/dist/editor/payaza-form/components/StarRatingField.js +1 -1
  70. package/dist/editor/payaza-form/components/TextField.js +1 -1
  71. package/dist/editor/payaza-form/data-merger.js +6 -6
  72. package/dist/editor/payaza-form/data-transformer.js +3 -3
  73. package/dist/editor/payaza-form/engine.js +1 -1
  74. package/dist/editor/payaza-form/examples/custom-widgets.example.js +1 -1
  75. package/dist/editor/payaza-form/index.js +8 -8
  76. package/dist/editor/payaza-form/layout-loader.js +2 -2
  77. package/dist/editor/payaza-form/preview-message-handler.js +3 -3
  78. package/dist/editor/payaza-form/schema-bridge.js +3 -3
  79. package/dist/editor/payaza-form/widget-registry.js +1 -1
  80. package/dist/editor/shared/BlockOutlineTree.js +1 -1
  81. package/dist/editor/shared/EditorHeader.js +1 -1
  82. package/dist/editor/shared/EditorNavigator.js +1 -1
  83. package/dist/editor/shared/IframePreview.js +6 -6
  84. package/dist/editor/shared/InlineCanvasPreview.js +7 -7
  85. package/dist/editor/shared/LayoutRenderer.js +1 -1
  86. package/dist/editor/shared/ResizableSidebar.js +1 -1
  87. package/dist/editor/shared/index.js +7 -7
  88. package/dist/hooks/use-product-reviews.js +1 -1
  89. package/dist/hooks/usePreviewSlideSync.js +1 -1
  90. package/dist/index.js +143 -143
  91. package/dist/layouts/booking/components/BookingHomePage.js +1 -1
  92. package/dist/layouts/booking/components/BookingMultilineHeading.js +1 -1
  93. package/dist/layouts/booking/components/BookingTestimonialCard.js +1 -1
  94. package/dist/layouts/booking/components/booking-footer-defaults.js +2 -2
  95. package/dist/layouts/booking/index.js +8 -8
  96. package/dist/layouts/booking/pages/AboutPage.d.ts.map +1 -1
  97. package/dist/layouts/booking/pages/AboutPage.js +16 -7
  98. package/dist/layouts/booking/pages/BookPage.js +1 -1
  99. package/dist/layouts/booking/pages/CategoriesPage.js +2 -2
  100. package/dist/layouts/booking/pages/ProductDetailPage.js +3 -3
  101. package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.js +3 -3
  102. package/dist/layouts/booking-agenda/index.js +8 -8
  103. package/dist/layouts/booking-agenda/pages/AboutPage.d.ts.map +1 -1
  104. package/dist/layouts/booking-agenda/pages/AboutPage.js +16 -7
  105. package/dist/layouts/booking-agenda/pages/CategoriesPage.js +1 -1
  106. package/dist/layouts/booking-agenda/pages/ProductDetailPage.js +3 -3
  107. package/dist/layouts/clothing/components/ClothingHomePage.d.ts.map +1 -1
  108. package/dist/layouts/clothing/components/ClothingHomePage.js +13 -12
  109. package/dist/layouts/clothing/index.js +7 -7
  110. package/dist/layouts/clothing/pages/AboutPage.d.ts.map +1 -1
  111. package/dist/layouts/clothing/pages/AboutPage.js +11 -5
  112. package/dist/layouts/clothing/pages/CategoriesPage.js +9 -9
  113. package/dist/layouts/clothing/pages/CategoryPage.js +7 -7
  114. package/dist/layouts/clothing/pages/ContactPage.js +3 -3
  115. package/dist/layouts/clothing/pages/ProductDetailPage.js +24 -24
  116. package/dist/layouts/clothing/pages/ProductsPage.js +17 -17
  117. package/dist/layouts/clothing/payaza-bindings.js +2 -2
  118. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts.map +1 -1
  119. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.js +11 -10
  120. package/dist/layouts/clothing-minimal/components/clothing-minimal-block-render.js +7 -7
  121. package/dist/layouts/clothing-minimal/index.js +7 -7
  122. package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts.map +1 -1
  123. package/dist/layouts/clothing-minimal/pages/AboutPage.js +12 -5
  124. package/dist/layouts/clothing-minimal/pages/CategoriesPage.js +8 -8
  125. package/dist/layouts/clothing-minimal/pages/CategoryPage.js +7 -7
  126. package/dist/layouts/clothing-minimal/pages/ContactPage.js +3 -3
  127. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.js +24 -24
  128. package/dist/layouts/clothing-minimal/pages/ProductsPage.js +18 -18
  129. package/dist/layouts/electronics/components/ElectronicsCategoriesPage.js +3 -3
  130. package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts.map +1 -1
  131. package/dist/layouts/electronics/components/ElectronicsGridProductCard.js +4 -3
  132. package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts.map +1 -1
  133. package/dist/layouts/electronics/components/ElectronicsHomePage.js +5 -4
  134. package/dist/layouts/electronics/components/ElectronicsPageWrapper.js +2 -2
  135. package/dist/layouts/electronics/components/ElectronicsProductsPage.js +4 -4
  136. package/dist/layouts/electronics/components/ElectronicsStoreHeader.js +1 -1
  137. package/dist/layouts/electronics/index.js +18 -18
  138. package/dist/layouts/electronics/pages/AboutPage.d.ts.map +1 -1
  139. package/dist/layouts/electronics/pages/AboutPage.js +7 -2
  140. package/dist/layouts/electronics/pages/CategoriesPage.js +1 -1
  141. package/dist/layouts/electronics/pages/ProductDetailPage.js +3 -3
  142. package/dist/layouts/electronics/pages/ProductsPage.js +2 -2
  143. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts.map +1 -1
  144. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.js +4 -3
  145. package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.js +2 -2
  146. package/dist/layouts/electronics-grid/index.js +14 -14
  147. package/dist/layouts/electronics-grid/pages/AboutPage.d.ts.map +1 -1
  148. package/dist/layouts/electronics-grid/pages/AboutPage.js +7 -2
  149. package/dist/layouts/electronics-grid/pages/CategoriesPage.js +1 -1
  150. package/dist/layouts/electronics-grid/pages/ProductDetailPage.js +3 -3
  151. package/dist/layouts/electronics-grid/pages/ProductsPage.js +2 -2
  152. package/dist/layouts/food/components/FoodHomePage.js +1 -1
  153. package/dist/layouts/food/index.js +8 -8
  154. package/dist/layouts/food/pages/AboutPage.d.ts.map +1 -1
  155. package/dist/layouts/food/pages/AboutPage.js +5 -1
  156. package/dist/layouts/food/pages/CategoriesPage.js +2 -2
  157. package/dist/layouts/food/pages/CategoryPage.js +2 -2
  158. package/dist/layouts/food/pages/ProductDetailPage.js +4 -4
  159. package/dist/layouts/food/pages/ProductsPage.js +2 -2
  160. package/dist/layouts/food-modern/components/FoodHomePageModern.js +3 -3
  161. package/dist/layouts/food-modern/index.js +8 -8
  162. package/dist/layouts/food-modern/pages/AboutPage.d.ts.map +1 -1
  163. package/dist/layouts/food-modern/pages/AboutPage.js +10 -3
  164. package/dist/layouts/food-modern/pages/CategoriesPage.js +1 -1
  165. package/dist/layouts/food-modern/pages/CategoryPage.js +2 -2
  166. package/dist/layouts/food-modern/pages/ProductDetailPage.js +3 -3
  167. package/dist/layouts/food-modern/pages/ProductsPage.js +2 -2
  168. package/dist/layouts/motivational-speaker/components/MotivationalSpeakerPageWrapper.js +1 -1
  169. package/dist/layouts/motivational-speaker/index.js +9 -9
  170. package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts.map +1 -1
  171. package/dist/layouts/motivational-speaker/pages/AboutPage.js +9 -2
  172. package/dist/layouts/motivational-speaker/pages/ProductsPage.js +2 -2
  173. package/dist/layouts/shared/about-story-media.d.ts +27 -0
  174. package/dist/layouts/shared/about-story-media.d.ts.map +1 -0
  175. package/dist/layouts/shared/about-story-media.js +46 -0
  176. package/dist/layouts/shared/components/BaseStoreLayout.js +9 -9
  177. package/dist/layouts/shared/components/GenericPageWrapper.js +3 -3
  178. package/dist/layouts/shared/components/PdpVariationSelectors.js +2 -2
  179. package/dist/layouts/shared/components/PromoBanner.js +4 -4
  180. package/dist/layouts/shared/components/StoreCartSheet.js +9 -9
  181. package/dist/layouts/shared/components/StoreFooter.js +9 -9
  182. package/dist/layouts/shared/components/StoreHeader.js +8 -8
  183. package/dist/layouts/shared/components/headers/BookingAgendaSidebar.js +2 -2
  184. package/dist/layouts/shared/components/headers/ClothingMinimalHeader.js +9 -9
  185. package/dist/layouts/shared/components/headers/FoodModernHeader.js +7 -7
  186. package/dist/layouts/shared/index.js +22 -22
  187. package/dist/layouts/shared/pages/StoreMaintenanceScreen.js +2 -2
  188. package/dist/layouts/shared/wrappers/BookingAgendaLayout.js +16 -16
  189. package/dist/layouts/shared/wrappers/ClothingLayout.js +8 -8
  190. package/dist/layouts/shared/wrappers/ClothingMinimalLayout.js +7 -7
  191. package/dist/layouts/shared/wrappers/ElectronicsLayout.js +5 -5
  192. package/dist/layouts/shared/wrappers/FoodModernLayout.js +6 -6
  193. package/dist/layouts/shared/wrappers/MotivationalLayout.js +9 -9
  194. package/dist/layouts/shared/wrappers/StandardLayout.js +8 -8
  195. package/dist/lib/auth-context.js +2 -2
  196. package/dist/lib/layout-config-hydration.js +2 -2
  197. package/dist/lib/product-variation-utils.js +1 -1
  198. package/dist/lib/services/analytics.service.js +1 -1
  199. package/dist/lib/services/auth.service.js +1 -1
  200. package/dist/lib/services/booking.service.js +1 -1
  201. package/dist/lib/services/category.service.js +1 -1
  202. package/dist/lib/services/checkout.service.js +1 -1
  203. package/dist/lib/services/contact.service.js +1 -1
  204. package/dist/lib/services/customer.service.js +1 -1
  205. package/dist/lib/services/fees.service.js +1 -1
  206. package/dist/lib/services/index.js +13 -13
  207. package/dist/lib/services/location.service.js +1 -1
  208. package/dist/lib/services/order.service.js +1 -1
  209. package/dist/lib/services/payment.service.js +1 -1
  210. package/dist/lib/services/product.service.js +1 -1
  211. package/dist/lib/services/promo.service.js +1 -1
  212. package/dist/lib/services/review.service.js +1 -1
  213. package/dist/lib/services/service.service.js +1 -1
  214. package/dist/lib/services/shipping.service.js +1 -1
  215. package/dist/lib/services/store.service.js +1 -1
  216. package/dist/lib/store-config-utils.js +7 -7
  217. package/dist/lib/store-config.js +1 -1
  218. package/dist/lib/store-context.js +12 -12
  219. package/dist/lib/utils/asset-helpers.js +2 -2
  220. package/dist/lib/utils/editor-preview.js +3 -3
  221. package/dist/lib/utils/index.js +3 -3
  222. package/dist/lib/utils/product-images.js +1 -1
  223. package/dist/lib/utils/product-share.js +1 -1
  224. package/dist/lib/utils/url-helpers.js +1 -1
  225. package/dist/preview/LayoutPreview.js +5 -5
  226. package/dist/preview/PreviewRouter.js +2 -2
  227. package/dist/preview/canvas/PreviewCanvasEnhancer.js +8 -8
  228. package/dist/preview/canvas/preview-flush-await.js +1 -1
  229. package/dist/preview/canvas/preview-isolation.js +1 -1
  230. package/dist/preview/canvas/preview-route.js +2 -2
  231. package/dist/preview/index.js +4 -4
  232. package/package.json +30 -31
@@ -7,6 +7,7 @@ import { useStore } from '../../../lib/store-context.js';
7
7
  import Image from 'next/image';
8
8
  import { SafeRichHtml } from '../../../components/rich-text/SafeRichHtml.js';
9
9
  import { RichTextExcerpt } from '../../../components/rich-text/RichTextExcerpt.js';
10
+ import { storySectionImage, storySectionLabel, storySectionTitle, storyTeamSubtitle, storyTeamTitle, } from '../../shared/about-story-media.js';
10
11
  export function AboutPage({ storeConfig: initialConfig }) {
11
12
  const { store } = useStore();
12
13
  const storeConfig = store || initialConfig;
@@ -18,7 +19,13 @@ export function AboutPage({ storeConfig: initialConfig }) {
18
19
  const pageTitle = aboutConfig?.hero?.title || aboutConfig?.title || "Empowering Minds, Changing Lives.";
19
20
  const pageContent = aboutConfig?.story?.content || aboutConfig?.content || storeConfig.description;
20
21
  const missionStatement = aboutConfig?.hero?.missionStatement || aboutConfig?.missionStatement;
21
- const galleryImages = aboutConfig?.gallerySection;
22
+ const storyConfig = aboutConfig?.story || aboutConfig;
23
+ const galleryImages = storyConfig?.gallerySection || aboutConfig?.gallerySection;
24
+ const storyImage = storySectionImage(storyConfig);
25
+ const storyLabel = storySectionLabel(storyConfig);
26
+ const storyTitle = storySectionTitle(storyConfig);
27
+ const storyCaptionTitle = storyTeamTitle(storyConfig);
28
+ const storyCaptionSubtitle = storyTeamSubtitle(storyConfig);
22
29
  const values = [
23
30
  {
24
31
  icon: Award,
@@ -41,7 +48,7 @@ export function AboutPage({ storeConfig: initialConfig }) {
41
48
  description: "Success built on integrity, balance, and sustainable high performance."
42
49
  }
43
50
  ];
44
- 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(SafeRichHtml, { value: missionStatement || storeConfig.description, as: "div", className: "text-xl md:text-2xl text-gray-200 max-w-2xl leading-relaxed font-light [&_p]:mb-0" })] }) }) })] }), _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(RichTextExcerpt, { value: item.description, as: "p", className: "text-gray-600 text-sm leading-relaxed" })] })] }, 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: [
51
+ 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(SafeRichHtml, { value: missionStatement || storeConfig.description, as: "div", className: "text-xl md:text-2xl text-gray-200 max-w-2xl leading-relaxed font-light [&_p]:mb-0" })] }) }) })] }), _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: storyImage, alt: storyCaptionTitle, 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: storyCaptionTitle }), _jsx("p", { className: "text-white/80 text-sm", children: storyCaptionSubtitle })] })] })), _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(RichTextExcerpt, { value: item.description, as: "p", className: "text-gray-600 text-sm leading-relaxed" })] })] }, 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: [
45
52
  { label: "Students Empowered", value: "25k+" },
46
53
  { label: "Hours of Content", value: "500+" },
47
54
  { label: "Global Events", value: "100+" },
@@ -20,12 +20,12 @@ import { filterActiveProducts } from '../../../lib/utils/index.js';
20
20
  import { getAllCategoryIds, flattenCategoryTree, buildCategoryTree } from '../../../lib/utils/category-tree.js';
21
21
  import { getBannerImage, getLayoutText } from '../../../lib/utils/asset-helpers.js';
22
22
  import { shouldUseAPI } from '../../../lib/utils/demo-detection.js';
23
- import { productCategoryFilterChipClass } from '../../shared/product-category-filter-chip';
23
+ import { productCategoryFilterChipClass } from '../../shared/product-category-filter-chip.js';
24
24
  import { useCatalogPriceRange } from '../../../hooks/use-catalog-price-range.js';
25
25
  import { getApiPriceFilterActive, isWithinActivePriceRange } from '../../../lib/utils/catalog-price-bounds.js';
26
26
  import { buildFilteredProductQuery, getFilteredProductQueryKey, productMatchesCategoryIds, productMatchesCategorySlug, } from '../../../lib/utils/filtered-product-query.js';
27
27
  import { transformProductToStoreProduct } from '../../../lib/store-config-utils.js';
28
- import { ProductPriceFilterSection } from '../../shared/components/ProductPriceFilterSection';
28
+ import { ProductPriceFilterSection } from '../../shared/components/ProductPriceFilterSection.js';
29
29
  function ProductsPageContent({ storeConfig }) {
30
30
  const searchParams = useSearchParams();
31
31
  const categoryParam = searchParams.get('category');
@@ -0,0 +1,27 @@
1
+ export declare const DEFAULT_ABOUT_STORY_IMAGE = "https://images.unsplash.com/photo-1522202176988-66273c2fd55f?q=80&w=2071&auto=format&fit=crop";
2
+ export type AboutStoryConfig = {
3
+ storyImage?: unknown;
4
+ teamImage?: unknown;
5
+ image?: unknown;
6
+ teamTitle?: unknown;
7
+ teamSubtitle?: unknown;
8
+ teamBadgeTitle?: unknown;
9
+ teamBadgeSubtitle?: unknown;
10
+ galleryOverlayTitle?: unknown;
11
+ galleryOverlaySubtitle?: unknown;
12
+ teamCaption?: unknown;
13
+ teamSubCaption?: unknown;
14
+ sectionLabel?: unknown;
15
+ label?: unknown;
16
+ subLabel?: unknown;
17
+ title?: unknown;
18
+ sectionHeading?: unknown;
19
+ heading?: unknown;
20
+ } | null | undefined;
21
+ export declare function resolveLayoutImageUrl(value: unknown): string;
22
+ export declare function storySectionImage(config: AboutStoryConfig, fallback?: string): string;
23
+ export declare function storySectionLabel(config: AboutStoryConfig, fallback?: string): string;
24
+ export declare function storySectionTitle(config: AboutStoryConfig, fallback?: string): string;
25
+ export declare function storyTeamTitle(config: AboutStoryConfig, fallback?: string): string;
26
+ export declare function storyTeamSubtitle(config: AboutStoryConfig, fallback?: string): string;
27
+ //# sourceMappingURL=about-story-media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"about-story-media.d.ts","sourceRoot":"","sources":["../../../src/layouts/shared/about-story-media.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,kGAA8B,CAAC;AAErE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,IAAI,GAAG,SAAS,CAAC;AAErB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAe5D;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,GAAE,MAAkC,GAC3C,MAAM,CAMR;AAMD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,SAAe,GACtB,MAAM,CAKR;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,SAAgB,GACvB,MAAM,CAKR;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,SAAmB,GAC1B,MAAM,CAQR;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,SAAyC,GAChD,MAAM,CAQR"}
@@ -0,0 +1,46 @@
1
+ import { BOOKING_DEFAULT_STORY_IMAGE } from '../booking/components/booking-about-defaults.js';
2
+ export const DEFAULT_ABOUT_STORY_IMAGE = BOOKING_DEFAULT_STORY_IMAGE;
3
+ export function resolveLayoutImageUrl(value) {
4
+ if (value == null)
5
+ return '';
6
+ if (typeof value === 'string') {
7
+ return value.trim();
8
+ }
9
+ if (typeof value === 'object') {
10
+ const record = value;
11
+ for (const key of ['url', 'src', 'imageUrl', 'image']) {
12
+ const candidate = record[key];
13
+ if (typeof candidate === 'string' && candidate.trim()) {
14
+ return candidate.trim();
15
+ }
16
+ }
17
+ }
18
+ return '';
19
+ }
20
+ export function storySectionImage(config, fallback = DEFAULT_ABOUT_STORY_IMAGE) {
21
+ const resolved = resolveLayoutImageUrl(config?.storyImage) ||
22
+ resolveLayoutImageUrl(config?.teamImage) ||
23
+ resolveLayoutImageUrl(config?.image);
24
+ return resolved || fallback;
25
+ }
26
+ function readText(value, fallback) {
27
+ return typeof value === 'string' && value.trim() ? value.trim() : fallback;
28
+ }
29
+ export function storySectionLabel(config, fallback = 'Who We Are') {
30
+ return readText(config?.sectionLabel ?? config?.label ?? config?.subLabel, fallback);
31
+ }
32
+ export function storySectionTitle(config, fallback = 'Our Journey') {
33
+ return readText(config?.title ?? config?.sectionHeading ?? config?.heading, fallback);
34
+ }
35
+ export function storyTeamTitle(config, fallback = 'The Dream Team') {
36
+ return readText(config?.teamTitle ??
37
+ config?.teamBadgeTitle ??
38
+ config?.galleryOverlayTitle ??
39
+ config?.teamCaption, fallback);
40
+ }
41
+ export function storyTeamSubtitle(config, fallback = 'Working together to serve you better') {
42
+ return readText(config?.teamSubtitle ??
43
+ config?.teamBadgeSubtitle ??
44
+ config?.galleryOverlaySubtitle ??
45
+ config?.teamSubCaption, fallback);
46
+ }
@@ -1,14 +1,14 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { isBookingAgendaStoreRoot } from '../../../lib/layout-route-utils';
4
- import { StandardLayout } from '../wrappers/StandardLayout';
5
- import { ClothingLayout } from '../wrappers/ClothingLayout';
6
- import { ClothingMinimalLayout } from '../wrappers/ClothingMinimalLayout';
7
- import { FoodModernLayout } from '../wrappers/FoodModernLayout';
8
- import { BookingAgendaLayout } from '../wrappers/BookingAgendaLayout';
9
- import { ElectronicsLayout } from '../wrappers/ElectronicsLayout';
10
- import { MotivationalLayout } from '../wrappers/MotivationalLayout';
11
- import { LoginSheet } from '../../../components/auth/LoginSheet';
3
+ import { isBookingAgendaStoreRoot } from '../../../lib/layout-route-utils.js';
4
+ import { StandardLayout } from '../wrappers/StandardLayout.js';
5
+ import { ClothingLayout } from '../wrappers/ClothingLayout.js';
6
+ import { ClothingMinimalLayout } from '../wrappers/ClothingMinimalLayout.js';
7
+ import { FoodModernLayout } from '../wrappers/FoodModernLayout.js';
8
+ import { BookingAgendaLayout } from '../wrappers/BookingAgendaLayout.js';
9
+ import { ElectronicsLayout } from '../wrappers/ElectronicsLayout.js';
10
+ import { MotivationalLayout } from '../wrappers/MotivationalLayout.js';
11
+ import { LoginSheet } from '../../../components/auth/LoginSheet.js';
12
12
  import { usePathname, useSearchParams } from 'next/navigation';
13
13
  export function BaseStoreLayout({ children, storeConfig }) {
14
14
  const pathname = usePathname();
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { StoreHeader } from '../../shared/components/StoreHeader';
4
- import { StoreFooter } from '../../shared/components/StoreFooter';
5
- import { useStore } from '../../../lib/store-context';
3
+ import { StoreHeader } from '../../shared/components/StoreHeader.js';
4
+ import { StoreFooter } from '../../shared/components/StoreFooter.js';
5
+ import { useStore } from '../../../lib/store-context.js';
6
6
  export function GenericPageWrapper({ children, storeConfig: initialConfig }) {
7
7
  const { store } = useStore();
8
8
  const storeConfig = store || initialConfig;
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { getSortedVariationOptionKeys, getVariationAttributeLabel, } from '../../../lib/product-variation-utils';
4
- import { PdpColorSwatch } from './PdpColorSwatch';
3
+ import { getSortedVariationOptionKeys, getVariationAttributeLabel, } from '../../../lib/product-variation-utils.js';
4
+ import { PdpColorSwatch } from './PdpColorSwatch.js';
5
5
  const DEFAULT_COLOR_SWATCHES = {
6
6
  White: '#FFFFFF',
7
7
  white: '#FFFFFF',
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import Link from 'next/link';
4
- import { Button } from '../../../components/ui/button';
5
- import { cn } from '../../../lib/utils';
6
- import { useStore } from '../../../lib/store-context';
7
- import { toStoreHref } from '../../../lib/utils/url-helpers';
4
+ import { Button } from '../../../components/ui/button.js';
5
+ import { cn } from '../../../lib/utils/index.js';
6
+ import { useStore } from '../../../lib/store-context.js';
7
+ import { toStoreHref } from '../../../lib/utils/url-helpers.js';
8
8
  export function PromoBanner({ config, layoutStyle = 'default', className, storeSlug: storeSlugProp }) {
9
9
  const { store } = useStore();
10
10
  if (!config?.show)
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { ShoppingBag, Minus, Plus, Trash2 } from 'lucide-react';
4
- import { Sheet } from '../../../components/ui/sheet';
5
- import { Button } from '../../../components/ui/button';
6
- import { CheckoutButton } from '../../../components/ui/checkout-button';
7
- import { ImageWithFallback } from '../../../components/ui/image-with-fallback';
4
+ import { Sheet } from '../../../components/ui/sheet.js';
5
+ import { Button } from '../../../components/ui/button.js';
6
+ import { CheckoutButton } from '../../../components/ui/checkout-button.js';
7
+ import { ImageWithFallback } from '../../../components/ui/image-with-fallback.js';
8
8
  import { useMemo } from 'react';
9
- import { useStore } from '../../../lib/store-context';
10
- import { formatCurrency } from '../../../lib/utils';
11
- import { getCartLineImage } from '../../../lib/product-variation-utils';
12
- import { getLayoutText } from '../../../lib/utils/asset-helpers';
13
- import { resolveCartChargeCurrency } from '../../../lib/cart-charge-currency';
9
+ import { useStore } from '../../../lib/store-context.js';
10
+ import { formatCurrency } from '../../../lib/utils/index.js';
11
+ import { getCartLineImage } from '../../../lib/product-variation-utils.js';
12
+ import { getLayoutText } from '../../../lib/utils/asset-helpers.js';
13
+ import { resolveCartChargeCurrency } from '../../../lib/cart-charge-currency.js';
14
14
  export function StoreCartSheet({ storeConfig, title }) {
15
15
  const { cart, removeFromCart, updateCartQuantity, isCartOpen, setIsCartOpen, cartTotal, } = useStore();
16
16
  const { currency: cartCurrency } = useMemo(() => resolveCartChargeCurrency(cart, storeConfig.settings?.currency), [cart, storeConfig.settings?.currency]);
@@ -3,16 +3,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import Link from 'next/link';
4
4
  import { getCurrentYear } from '../../../utils/date.js';
5
5
  import { Facebook, Twitter, Instagram, Share2 } from 'lucide-react';
6
- import { DotPattern } from '../../../components/ui/background-patterns';
7
- import { cn } from '../../../lib/utils';
8
- import { getLogoUrl } from '../../../lib/utils/asset-helpers';
9
- import { StoreLogo } from '../../../components/ui/store-logos';
10
- import { useStore } from '../../../lib/store-context';
11
- import { payazaInlineBindingProps } from '../../../preview/canvas/field-key';
12
- import { isEditorPreviewMode } from '../../../lib/utils/editor-preview';
13
- import { resolveStoreLink } from '../../../lib/layout-route-utils';
6
+ import { DotPattern } from '../../../components/ui/background-patterns.js';
7
+ import { cn } from '../../../lib/utils/index.js';
8
+ import { getLogoUrl } from '../../../lib/utils/asset-helpers.js';
9
+ import { StoreLogo } from '../../../components/ui/store-logos.js';
10
+ import { useStore } from '../../../lib/store-context.js';
11
+ import { payazaInlineBindingProps } from '../../../preview/canvas/field-key.js';
12
+ import { isEditorPreviewMode } from '../../../lib/utils/editor-preview.js';
13
+ import { resolveStoreLink } from '../../../lib/layout-route-utils.js';
14
14
  import { RichTextExcerpt } from '../../../components/rich-text/RichTextExcerpt.js';
15
- import { BOOKING_DEFAULT_FOOTER_TAGLINE, resolveBookingFooterMainLinks, resolveBookingFooterSupportLinks, resolveBookingFooterPrimaryColumnTitle, } from '../../booking/components/booking-footer-defaults';
15
+ import { BOOKING_DEFAULT_FOOTER_TAGLINE, resolveBookingFooterMainLinks, resolveBookingFooterSupportLinks, resolveBookingFooterPrimaryColumnTitle, } from '../../booking/components/booking-footer-defaults.js';
16
16
  export function StoreFooter({ storeConfig: initialConfig }) {
17
17
  const { store } = useStore();
18
18
  const storeConfig = store || initialConfig;
@@ -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 Link from 'next/link';
4
- import { Button } from '../../../components/ui/button';
4
+ import { Button } from '../../../components/ui/button.js';
5
5
  import { ShoppingCart, Heart, Search, Menu, X, ChevronRight, ChevronDown, Instagram, Twitter, Youtube, Home, Info, Phone, Package, Calendar, BookOpen, GraduationCap, Sparkles, Tag, LayoutGrid } from 'lucide-react';
6
6
  // Navigation icon helper
7
7
  const getNavIcon = (label) => {
@@ -30,14 +30,14 @@ const getNavIcon = (label) => {
30
30
  };
31
31
  import { useState, useEffect, useRef } from 'react';
32
32
  import { usePathname } from 'next/navigation';
33
- import { cn, formatStoreDisplayName } from '../../../lib/utils';
34
- import { useAuth } from '../../../lib/auth-context';
35
- import { StoreLogo } from '../../../components/ui/store-logos';
36
- import { useStore } from '../../../lib/store-context';
37
- import { getLogoUrl } from '../../../lib/utils/asset-helpers';
38
- import { AvatarImage } from '../../../components/ui/avatar-image';
33
+ import { cn, formatStoreDisplayName } from '../../../lib/utils/index.js';
34
+ import { useAuth } from '../../../lib/auth-context.js';
35
+ import { StoreLogo } from '../../../components/ui/store-logos.js';
36
+ import { useStore } from '../../../lib/store-context.js';
37
+ import { getLogoUrl } from '../../../lib/utils/asset-helpers.js';
38
+ import { AvatarImage } from '../../../components/ui/avatar-image.js';
39
39
  import { motion, AnimatePresence } from 'framer-motion';
40
- import { StoreCartSheet } from './StoreCartSheet';
40
+ import { StoreCartSheet } from './StoreCartSheet.js';
41
41
  function headerNavLinkClass(isDarkTheme) {
42
42
  return cn('px-2 py-2.5 text-[11px] font-bold uppercase tracking-[0.12em] transition-colors underline-offset-4 decoration-2 inline-flex items-center gap-2 whitespace-nowrap', isDarkTheme
43
43
  ? 'text-gray-400 hover:text-white hover:underline'
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button } from '../../../../components/ui/button';
3
+ import { Button } from '../../../../components/ui/button.js';
4
4
  import { User, Sparkles, X, MoreHorizontal, Calendar, Search, Heart } from 'lucide-react';
5
5
  import Link from 'next/link';
6
6
  import { useState } from 'react';
7
- import { getLayoutText, getThemeColor } from '../../../../lib/utils/asset-helpers';
7
+ import { getLayoutText, getThemeColor } from '../../../../lib/utils/asset-helpers.js';
8
8
  export function BookingAgendaSidebar({ storeConfig, onBookClick }) {
9
9
  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
10
10
  const categories = storeConfig.categories || [];
@@ -1,18 +1,18 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Button } from '../../../../components/ui/button';
4
- import { Sheet } from '../../../../components/ui/sheet';
5
- import { StoreCartSheet } from '../StoreCartSheet';
6
- import { useStore } from '../../../../lib/store-context';
3
+ import { Button } from '../../../../components/ui/button.js';
4
+ import { Sheet } from '../../../../components/ui/sheet.js';
5
+ import { StoreCartSheet } from '../StoreCartSheet.js';
6
+ import { useStore } from '../../../../lib/store-context.js';
7
7
  import { ShoppingBag, Menu, Search } from 'lucide-react';
8
8
  import Link from 'next/link';
9
9
  import { useState, useEffect } from 'react';
10
10
  import { usePathname } from 'next/navigation';
11
- import { formatStoreDisplayName } from '../../../../lib/utils';
12
- import { getLayoutText, getLogoUrl } from '../../../../lib/utils/asset-helpers';
13
- import { StoreLogo } from '../../../../components/ui/store-logos';
14
- import { useAuth } from '../../../../lib/auth-context';
15
- import { AvatarImage } from '../../../../components/ui/avatar-image';
11
+ import { formatStoreDisplayName } from '../../../../lib/utils/index.js';
12
+ import { getLayoutText, getLogoUrl } from '../../../../lib/utils/asset-helpers.js';
13
+ import { StoreLogo } from '../../../../components/ui/store-logos.js';
14
+ import { useAuth } from '../../../../lib/auth-context.js';
15
+ import { AvatarImage } from '../../../../components/ui/avatar-image.js';
16
16
  import { User } from 'lucide-react';
17
17
  export function ClothingMinimalHeader({ storeConfig }) {
18
18
  const { isCartOpen, setIsCartOpen, cartCount } = useStore();
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Button } from '../../../../components/ui/button';
4
- import { Modal } from '../../../../components/ui/modal';
5
- import { useToast } from '../../../../components/ui/toast';
3
+ import { Button } from '../../../../components/ui/button.js';
4
+ import { Modal } from '../../../../components/ui/modal.js';
5
+ import { useToast } from '../../../../components/ui/toast.js';
6
6
  import { Menu as MenuIcon, Search, X, Calendar, Clock, Users, Mail, Phone, CheckCircle, User } from 'lucide-react';
7
- import { useAuth } from '../../../../lib/auth-context';
7
+ import { useAuth } from '../../../../lib/auth-context.js';
8
8
  import { usePathname } from 'next/navigation';
9
9
  import Link from 'next/link';
10
10
  import { useState, useEffect } from 'react';
11
- import { getLayoutText, getLogoUrl } from '../../../../lib/utils/asset-helpers';
12
- import { formatStoreDisplayName } from '../../../../lib/utils';
13
- import { StoreLogo } from '../../../../components/ui/store-logos';
11
+ import { getLayoutText, getLogoUrl } from '../../../../lib/utils/asset-helpers.js';
12
+ import { formatStoreDisplayName } from '../../../../lib/utils/index.js';
13
+ import { StoreLogo } from '../../../../components/ui/store-logos.js';
14
14
  export function FoodModernHeader({ storeConfig }) {
15
15
  const { addToast } = useToast();
16
16
  const { isAuthenticated, openLogin } = useAuth();
@@ -1,23 +1,23 @@
1
1
  // Shared layout exports
2
- export { BaseStoreLayout } from './components/BaseStoreLayout';
3
- export { GenericPageWrapper } from './components/GenericPageWrapper';
4
- export { PromoBanner } from './components/PromoBanner';
5
- export { StoreFooter } from './components/StoreFooter';
6
- export { StoreHeader } from './components/StoreHeader';
7
- export { TestimonialCard } from './components/TestimonialCard';
8
- export { AccountPage } from './pages/AccountPage';
9
- export { CartPage } from './pages/CartPage';
10
- export { CheckoutPage } from './pages/CheckoutPage';
11
- export { CookiePolicyPage } from './pages/CookiePolicyPage';
12
- export { FeatureDisabledPage } from './pages/FeatureDisabledPage';
13
- export { HelpCenterPage } from './pages/HelpCenterPage';
14
- export { MaintenancePage } from './pages/MaintenancePage';
15
- export { PortfolioPage } from './pages/PortfolioPage';
16
- export { PrivacyPolicyPage } from './pages/PrivacyPolicyPage';
17
- export { ShippingReturnsPage } from './pages/ShippingReturnsPage';
18
- export { SizeGuidePage } from './pages/SizeGuidePage';
19
- export { StyleGuidePage } from './pages/StyleGuidePage';
20
- export { TeamPage } from './pages/TeamPage';
21
- export { TermsPage } from './pages/TermsPage';
22
- export { TrackOrderPage } from './pages/TrackOrderPage';
23
- export { WishlistPage } from './pages/WishlistPage';
2
+ export { BaseStoreLayout } from './components/BaseStoreLayout.js';
3
+ export { GenericPageWrapper } from './components/GenericPageWrapper.js';
4
+ export { PromoBanner } from './components/PromoBanner.js';
5
+ export { StoreFooter } from './components/StoreFooter.js';
6
+ export { StoreHeader } from './components/StoreHeader.js';
7
+ export { TestimonialCard } from './components/TestimonialCard.js';
8
+ export { AccountPage } from './pages/AccountPage.js';
9
+ export { CartPage } from './pages/CartPage.js';
10
+ export { CheckoutPage } from './pages/CheckoutPage.js';
11
+ export { CookiePolicyPage } from './pages/CookiePolicyPage.js';
12
+ export { FeatureDisabledPage } from './pages/FeatureDisabledPage.js';
13
+ export { HelpCenterPage } from './pages/HelpCenterPage.js';
14
+ export { MaintenancePage } from './pages/MaintenancePage.js';
15
+ export { PortfolioPage } from './pages/PortfolioPage.js';
16
+ export { PrivacyPolicyPage } from './pages/PrivacyPolicyPage.js';
17
+ export { ShippingReturnsPage } from './pages/ShippingReturnsPage.js';
18
+ export { SizeGuidePage } from './pages/SizeGuidePage.js';
19
+ export { StyleGuidePage } from './pages/StyleGuidePage.js';
20
+ export { TeamPage } from './pages/TeamPage.js';
21
+ export { TermsPage } from './pages/TermsPage.js';
22
+ export { TrackOrderPage } from './pages/TrackOrderPage.js';
23
+ export { WishlistPage } from './pages/WishlistPage.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { MaintenancePage } from './MaintenancePage';
4
- import { StoreOfflinePage } from './StoreOfflinePage';
3
+ import { MaintenancePage } from './MaintenancePage.js';
4
+ import { StoreOfflinePage } from './StoreOfflinePage.js';
5
5
  export function StoreMaintenanceScreen({ storeConfig, reason = 'unpublished', }) {
6
6
  if (reason === 'offline') {
7
7
  return _jsx(StoreOfflinePage, { storeConfig: storeConfig });
@@ -1,22 +1,22 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { createContext, useContext, useState, useEffect, useRef } from 'react';
4
- import { BookingAgendaSidebar } from '../components/headers/BookingAgendaSidebar';
5
- import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper';
6
- import { PageContentLoader } from '../../../components/ui/page-content-loader';
7
- import { useLoading } from '../../../lib/loading-context';
8
- import { getThemeColor, getLayoutText } from '../../../lib/utils/asset-helpers';
9
- import { AlertModalProvider } from '../../../components/ui/alert-modal';
10
- import { Modal } from '../../../components/ui/modal';
11
- import { Button } from '../../../components/ui/button';
12
- import { usePayazaCheckout } from '../../../hooks/use-payaza-checkout';
13
- import { checkoutService } from '../../../lib/services/checkout.service';
14
- import { requireCheckoutPayazaPublicKey } from '../../../lib/payaza-public-key';
15
- import { getOrCreateIdempotencyKey } from '../../../lib/utils/idempotency-key';
16
- import { CHECKOUT_UNAVAILABLE_MESSAGE } from '../../../lib/checkout-availability';
17
- import { useToast } from '../../../components/ui/toast';
18
- import { useAuth } from '../../../lib/auth-context';
19
- import { filterActiveServices, formatCurrency } from '../../../lib/utils';
4
+ import { BookingAgendaSidebar } from '../components/headers/BookingAgendaSidebar.js';
5
+ import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper.js';
6
+ import { PageContentLoader } from '../../../components/ui/page-content-loader.js';
7
+ import { useLoading } from '../../../lib/loading-context.js';
8
+ import { getThemeColor, getLayoutText } from '../../../lib/utils/asset-helpers.js';
9
+ import { AlertModalProvider } from '../../../components/ui/alert-modal.js';
10
+ import { Modal } from '../../../components/ui/modal.js';
11
+ import { Button } from '../../../components/ui/button.js';
12
+ import { usePayazaCheckout } from '../../../hooks/use-payaza-checkout.js';
13
+ import { checkoutService } from '../../../lib/services/checkout.service.js';
14
+ import { requireCheckoutPayazaPublicKey } from '../../../lib/payaza-public-key.js';
15
+ import { getOrCreateIdempotencyKey } from '../../../lib/utils/idempotency-key.js';
16
+ import { CHECKOUT_UNAVAILABLE_MESSAGE } from '../../../lib/checkout-availability.js';
17
+ import { useToast } from '../../../components/ui/toast.js';
18
+ import { useAuth } from '../../../lib/auth-context.js';
19
+ import { filterActiveServices, formatCurrency } from '../../../lib/utils/index.js';
20
20
  import { CheckCircle, Sparkles, Lock } from 'lucide-react';
21
21
  import { formatDateSafe } from '../../../utils/date.js';
22
22
  const BookingContext = createContext(undefined);
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { StoreHeader } from '../components/StoreHeader';
4
- import { StoreFooter } from '../components/StoreFooter';
5
- import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper';
6
- import { PageContentLoader } from '../../../components/ui/page-content-loader';
7
- import { useStore } from '../../../lib/store-context';
8
- import { useLoading } from '../../../lib/loading-context';
9
- import { getThemeColor } from '../../../lib/utils/asset-helpers';
10
- import { AlertModalProvider } from '../../../components/ui/alert-modal';
3
+ import { StoreHeader } from '../components/StoreHeader.js';
4
+ import { StoreFooter } from '../components/StoreFooter.js';
5
+ import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper.js';
6
+ import { PageContentLoader } from '../../../components/ui/page-content-loader.js';
7
+ import { useStore } from '../../../lib/store-context.js';
8
+ import { useLoading } from '../../../lib/loading-context.js';
9
+ import { getThemeColor } from '../../../lib/utils/asset-helpers.js';
10
+ import { AlertModalProvider } from '../../../components/ui/alert-modal.js';
11
11
  import '../../clothing/styles/clothing.css';
12
12
  /** Fashion Hub shell — scoped CSS + theme tokens under data-layout="clothing". */
13
13
  export function ClothingLayout({ children, storeConfig }) {
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { ClothingMinimalHeader } from '../components/headers/ClothingMinimalHeader';
4
- import { StoreFooter } from '../components/StoreFooter';
5
- import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper';
6
- import { PageContentLoader } from '../../../components/ui/page-content-loader';
3
+ import { ClothingMinimalHeader } from '../components/headers/ClothingMinimalHeader.js';
4
+ import { StoreFooter } from '../components/StoreFooter.js';
5
+ import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper.js';
6
+ import { PageContentLoader } from '../../../components/ui/page-content-loader.js';
7
7
  import { usePathname } from 'next/navigation';
8
- import { useLoading } from '../../../lib/loading-context';
9
- import { getThemeColor } from '../../../lib/utils/asset-helpers';
10
- import { AlertModalProvider } from '../../../components/ui/alert-modal';
8
+ import { useLoading } from '../../../lib/loading-context.js';
9
+ import { getThemeColor } from '../../../lib/utils/asset-helpers.js';
10
+ import { AlertModalProvider } from '../../../components/ui/alert-modal.js';
11
11
  export function ClothingMinimalLayout({ children, storeConfig }) {
12
12
  const pathname = usePathname();
13
13
  const { isBackendLoading } = useLoading();
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper';
4
- import { PageContentLoader } from '../../../components/ui/page-content-loader';
5
- import { useLoading } from '../../../lib/loading-context';
6
- import { getThemeColor } from '../../../lib/utils/asset-helpers';
7
- import { AlertModalProvider } from '../../../components/ui/alert-modal';
3
+ import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper.js';
4
+ import { PageContentLoader } from '../../../components/ui/page-content-loader.js';
5
+ import { useLoading } from '../../../lib/loading-context.js';
6
+ import { getThemeColor } from '../../../lib/utils/asset-helpers.js';
7
+ import { AlertModalProvider } from '../../../components/ui/alert-modal.js';
8
8
  export function ElectronicsLayout({ children, storeConfig }) {
9
9
  const { isBackendLoading } = useLoading();
10
10
  // Get theme colors with fallbacks
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { FoodModernHeader } from '../components/headers/FoodModernHeader';
4
- import { StoreFooter } from '../components/StoreFooter';
5
- import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper';
6
- import { PageContentLoader } from '../../../components/ui/page-content-loader';
3
+ import { FoodModernHeader } from '../components/headers/FoodModernHeader.js';
4
+ import { StoreFooter } from '../components/StoreFooter.js';
5
+ import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper.js';
6
+ import { PageContentLoader } from '../../../components/ui/page-content-loader.js';
7
7
  import { usePathname } from 'next/navigation';
8
- import { useLoading } from '../../../lib/loading-context';
9
- import { AlertModalProvider } from '../../../components/ui/alert-modal';
8
+ import { useLoading } from '../../../lib/loading-context.js';
9
+ import { AlertModalProvider } from '../../../components/ui/alert-modal.js';
10
10
  export function FoodModernLayout({ children, storeConfig }) {
11
11
  const pathname = usePathname();
12
12
  const { isBackendLoading } = useLoading();
@@ -1,15 +1,15 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { StoreHeader } from '../components/StoreHeader';
4
- import { StoreFooter } from '../components/StoreFooter';
5
- import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper';
6
- import { PageContentLoader } from '../../../components/ui/page-content-loader';
7
- import { useStore } from '../../../lib/store-context';
8
- import { useLoading } from '../../../lib/loading-context';
9
- import { getThemeColor } from '../../../lib/utils/asset-helpers';
10
- import { AlertModalProvider } from '../../../components/ui/alert-modal';
3
+ import { StoreHeader } from '../components/StoreHeader.js';
4
+ import { StoreFooter } from '../components/StoreFooter.js';
5
+ import { PageAnimateWrapper } from '../../../components/ui/page-animate-wrapper.js';
6
+ import { PageContentLoader } from '../../../components/ui/page-content-loader.js';
7
+ import { useStore } from '../../../lib/store-context.js';
8
+ import { useLoading } from '../../../lib/loading-context.js';
9
+ import { getThemeColor } from '../../../lib/utils/asset-helpers.js';
10
+ import { AlertModalProvider } from '../../../components/ui/alert-modal.js';
11
11
  import { usePathname } from 'next/navigation';
12
- import { cn } from '../../../lib/utils';
12
+ import { cn } from '../../../lib/utils/index.js';
13
13
  export function MotivationalLayout({ children, storeConfig }) {
14
14
  const { cartCount } = useStore();
15
15
  const { isBackendLoading } = useLoading();