storefront-layouts-staging 1.0.0-staging.0

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 (1204) hide show
  1. package/README.md +539 -0
  2. package/dist/components/auth/LoginForm.d.ts +9 -0
  3. package/dist/components/auth/LoginForm.d.ts.map +1 -0
  4. package/dist/components/auth/LoginForm.js +21 -0
  5. package/dist/components/auth/LoginSheet.d.ts +7 -0
  6. package/dist/components/auth/LoginSheet.d.ts.map +1 -0
  7. package/dist/components/auth/LoginSheet.js +8 -0
  8. package/dist/components/auth/login-form-core.d.ts +11 -0
  9. package/dist/components/auth/login-form-core.d.ts.map +1 -0
  10. package/dist/components/auth/login-form-core.js +19 -0
  11. package/dist/components/auth/login-sheet-header.d.ts +10 -0
  12. package/dist/components/auth/login-sheet-header.d.ts.map +1 -0
  13. package/dist/components/auth/login-sheet-header.js +10 -0
  14. package/dist/components/auth/login-sheet-registry.d.ts +11 -0
  15. package/dist/components/auth/login-sheet-registry.d.ts.map +1 -0
  16. package/dist/components/auth/login-sheet-registry.js +9 -0
  17. package/dist/components/auth/login-sheet-theme.types.d.ts +29 -0
  18. package/dist/components/auth/login-sheet-theme.types.d.ts.map +1 -0
  19. package/dist/components/auth/login-sheet-theme.types.js +1 -0
  20. package/dist/components/auth/login-sheet-themes/booking-agenda.theme.d.ts +3 -0
  21. package/dist/components/auth/login-sheet-themes/booking-agenda.theme.d.ts.map +1 -0
  22. package/dist/components/auth/login-sheet-themes/booking-agenda.theme.js +21 -0
  23. package/dist/components/auth/login-sheet-themes/booking.theme.d.ts +3 -0
  24. package/dist/components/auth/login-sheet-themes/booking.theme.d.ts.map +1 -0
  25. package/dist/components/auth/login-sheet-themes/booking.theme.js +20 -0
  26. package/dist/components/auth/login-sheet-themes/clothing-minimal.theme.d.ts +3 -0
  27. package/dist/components/auth/login-sheet-themes/clothing-minimal.theme.d.ts.map +1 -0
  28. package/dist/components/auth/login-sheet-themes/clothing-minimal.theme.js +20 -0
  29. package/dist/components/auth/login-sheet-themes/clothing.theme.d.ts +3 -0
  30. package/dist/components/auth/login-sheet-themes/clothing.theme.d.ts.map +1 -0
  31. package/dist/components/auth/login-sheet-themes/clothing.theme.js +21 -0
  32. package/dist/components/auth/login-sheet-themes/electronics-grid.theme.d.ts +3 -0
  33. package/dist/components/auth/login-sheet-themes/electronics-grid.theme.d.ts.map +1 -0
  34. package/dist/components/auth/login-sheet-themes/electronics-grid.theme.js +20 -0
  35. package/dist/components/auth/login-sheet-themes/electronics.theme.d.ts +3 -0
  36. package/dist/components/auth/login-sheet-themes/electronics.theme.d.ts.map +1 -0
  37. package/dist/components/auth/login-sheet-themes/electronics.theme.js +20 -0
  38. package/dist/components/auth/login-sheet-themes/food-modern.theme.d.ts +3 -0
  39. package/dist/components/auth/login-sheet-themes/food-modern.theme.d.ts.map +1 -0
  40. package/dist/components/auth/login-sheet-themes/food-modern.theme.js +22 -0
  41. package/dist/components/auth/login-sheet-themes/food.theme.d.ts +3 -0
  42. package/dist/components/auth/login-sheet-themes/food.theme.d.ts.map +1 -0
  43. package/dist/components/auth/login-sheet-themes/food.theme.js +22 -0
  44. package/dist/components/auth/login-sheet-themes/index.d.ts +14 -0
  45. package/dist/components/auth/login-sheet-themes/index.d.ts.map +1 -0
  46. package/dist/components/auth/login-sheet-themes/index.js +29 -0
  47. package/dist/components/auth/login-sheet-themes/motivational-speaker.theme.d.ts +3 -0
  48. package/dist/components/auth/login-sheet-themes/motivational-speaker.theme.d.ts.map +1 -0
  49. package/dist/components/auth/login-sheet-themes/motivational-speaker.theme.js +20 -0
  50. package/dist/components/auth/login-sheet-themes/theme-input-baselines.d.ts +24 -0
  51. package/dist/components/auth/login-sheet-themes/theme-input-baselines.d.ts.map +1 -0
  52. package/dist/components/auth/login-sheet-themes/theme-input-baselines.js +23 -0
  53. package/dist/components/auth/login-sheets/StoreLoginSheetShell.d.ts +13 -0
  54. package/dist/components/auth/login-sheets/StoreLoginSheetShell.d.ts.map +1 -0
  55. package/dist/components/auth/login-sheets/StoreLoginSheetShell.js +14 -0
  56. package/dist/components/auth/use-login-submit.d.ts +22 -0
  57. package/dist/components/auth/use-login-submit.d.ts.map +1 -0
  58. package/dist/components/auth/use-login-submit.js +99 -0
  59. package/dist/components/cart/InventoryHoldCountdown.d.ts +8 -0
  60. package/dist/components/cart/InventoryHoldCountdown.d.ts.map +1 -0
  61. package/dist/components/cart/InventoryHoldCountdown.js +73 -0
  62. package/dist/components/categories/category-masonry-grid.d.ts +18 -0
  63. package/dist/components/categories/category-masonry-grid.d.ts.map +1 -0
  64. package/dist/components/categories/category-masonry-grid.js +50 -0
  65. package/dist/components/categories/category-masonry-utils.d.ts +9 -0
  66. package/dist/components/categories/category-masonry-utils.d.ts.map +1 -0
  67. package/dist/components/categories/category-masonry-utils.js +67 -0
  68. package/dist/components/checkout/CheckoutFeeLines.d.ts +12 -0
  69. package/dist/components/checkout/CheckoutFeeLines.d.ts.map +1 -0
  70. package/dist/components/checkout/CheckoutFeeLines.js +9 -0
  71. package/dist/components/checkout/ShippingOptionsPanel.d.ts +54 -0
  72. package/dist/components/checkout/ShippingOptionsPanel.d.ts.map +1 -0
  73. package/dist/components/checkout/ShippingOptionsPanel.js +115 -0
  74. package/dist/components/learning/CertificateTemplates.d.ts +25 -0
  75. package/dist/components/learning/CertificateTemplates.d.ts.map +1 -0
  76. package/dist/components/learning/CertificateTemplates.js +31 -0
  77. package/dist/components/learning/CertificateViewer.d.ts +11 -0
  78. package/dist/components/learning/CertificateViewer.d.ts.map +1 -0
  79. package/dist/components/learning/CertificateViewer.js +114 -0
  80. package/dist/components/learning/MentorshipProgress.d.ts +18 -0
  81. package/dist/components/learning/MentorshipProgress.d.ts.map +1 -0
  82. package/dist/components/learning/MentorshipProgress.js +20 -0
  83. package/dist/components/product/ProductVariationSelectors.d.ts +10 -0
  84. package/dist/components/product/ProductVariationSelectors.d.ts.map +1 -0
  85. package/dist/components/product/ProductVariationSelectors.js +27 -0
  86. package/dist/components/rich-text/CategoryDescription.d.ts +7 -0
  87. package/dist/components/rich-text/CategoryDescription.d.ts.map +1 -0
  88. package/dist/components/rich-text/CategoryDescription.js +11 -0
  89. package/dist/components/rich-text/ProductDescription.d.ts +9 -0
  90. package/dist/components/rich-text/ProductDescription.d.ts.map +1 -0
  91. package/dist/components/rich-text/ProductDescription.js +10 -0
  92. package/dist/components/rich-text/RichTextExcerpt.d.ts +10 -0
  93. package/dist/components/rich-text/RichTextExcerpt.d.ts.map +1 -0
  94. package/dist/components/rich-text/RichTextExcerpt.js +12 -0
  95. package/dist/components/rich-text/SafeRichHtml.d.ts +14 -0
  96. package/dist/components/rich-text/SafeRichHtml.d.ts.map +1 -0
  97. package/dist/components/rich-text/SafeRichHtml.js +15 -0
  98. package/dist/components/shipping/MerchantHandledDeliveryNotice.d.ts +7 -0
  99. package/dist/components/shipping/MerchantHandledDeliveryNotice.d.ts.map +1 -0
  100. package/dist/components/shipping/MerchantHandledDeliveryNotice.js +7 -0
  101. package/dist/components/shipping/ProductDeliveryInfoSection.d.ts +21 -0
  102. package/dist/components/shipping/ProductDeliveryInfoSection.d.ts.map +1 -0
  103. package/dist/components/shipping/ProductDeliveryInfoSection.js +22 -0
  104. package/dist/components/shipping/ShippingQuoteAddressForm.d.ts +11 -0
  105. package/dist/components/shipping/ShippingQuoteAddressForm.d.ts.map +1 -0
  106. package/dist/components/shipping/ShippingQuoteAddressForm.js +66 -0
  107. package/dist/components/ui/address-selector.d.ts +11 -0
  108. package/dist/components/ui/address-selector.d.ts.map +1 -0
  109. package/dist/components/ui/address-selector.js +21 -0
  110. package/dist/components/ui/alert-modal.d.ts +21 -0
  111. package/dist/components/ui/alert-modal.d.ts.map +1 -0
  112. package/dist/components/ui/alert-modal.js +59 -0
  113. package/dist/components/ui/avatar-image.d.ts +11 -0
  114. package/dist/components/ui/avatar-image.d.ts.map +1 -0
  115. package/dist/components/ui/avatar-image.js +39 -0
  116. package/dist/components/ui/background-patterns.d.ts +27 -0
  117. package/dist/components/ui/background-patterns.d.ts.map +1 -0
  118. package/dist/components/ui/background-patterns.js +5 -0
  119. package/dist/components/ui/badge.d.ts +10 -0
  120. package/dist/components/ui/badge.d.ts.map +1 -0
  121. package/dist/components/ui/badge.js +20 -0
  122. package/dist/components/ui/breadcrumbs.d.ts +12 -0
  123. package/dist/components/ui/breadcrumbs.d.ts.map +1 -0
  124. package/dist/components/ui/breadcrumbs.js +12 -0
  125. package/dist/components/ui/button.d.ts +11 -0
  126. package/dist/components/ui/button.d.ts.map +1 -0
  127. package/dist/components/ui/button.js +34 -0
  128. package/dist/components/ui/card.d.ts +10 -0
  129. package/dist/components/ui/card.d.ts.map +1 -0
  130. package/dist/components/ui/card.js +24 -0
  131. package/dist/components/ui/category-tree.d.ts +16 -0
  132. package/dist/components/ui/category-tree.d.ts.map +1 -0
  133. package/dist/components/ui/category-tree.js +74 -0
  134. package/dist/components/ui/checkout-button.d.ts +11 -0
  135. package/dist/components/ui/checkout-button.d.ts.map +1 -0
  136. package/dist/components/ui/checkout-button.js +298 -0
  137. package/dist/components/ui/dynamic-icon.d.ts +11 -0
  138. package/dist/components/ui/dynamic-icon.d.ts.map +1 -0
  139. package/dist/components/ui/dynamic-icon.js +77 -0
  140. package/dist/components/ui/guest-checkout-modal.d.ts +19 -0
  141. package/dist/components/ui/guest-checkout-modal.d.ts.map +1 -0
  142. package/dist/components/ui/guest-checkout-modal.js +95 -0
  143. package/dist/components/ui/image-skeleton.d.ts +7 -0
  144. package/dist/components/ui/image-skeleton.d.ts.map +1 -0
  145. package/dist/components/ui/image-skeleton.js +15 -0
  146. package/dist/components/ui/image-with-fallback.d.ts +10 -0
  147. package/dist/components/ui/image-with-fallback.d.ts.map +1 -0
  148. package/dist/components/ui/image-with-fallback.js +165 -0
  149. package/dist/components/ui/input.d.ts +6 -0
  150. package/dist/components/ui/input.d.ts.map +1 -0
  151. package/dist/components/ui/input.js +8 -0
  152. package/dist/components/ui/limited-time-offer-badge.d.ts +12 -0
  153. package/dist/components/ui/limited-time-offer-badge.d.ts.map +1 -0
  154. package/dist/components/ui/limited-time-offer-badge.js +13 -0
  155. package/dist/components/ui/loading-skeleton-wrapper.d.ts +6 -0
  156. package/dist/components/ui/loading-skeleton-wrapper.d.ts.map +1 -0
  157. package/dist/components/ui/loading-skeleton-wrapper.js +10 -0
  158. package/dist/components/ui/modal.d.ts +11 -0
  159. package/dist/components/ui/modal.d.ts.map +1 -0
  160. package/dist/components/ui/modal.js +26 -0
  161. package/dist/components/ui/otp-input.d.ts +10 -0
  162. package/dist/components/ui/otp-input.d.ts.map +1 -0
  163. package/dist/components/ui/otp-input.js +57 -0
  164. package/dist/components/ui/out-of-stock-overlay.d.ts +8 -0
  165. package/dist/components/ui/out-of-stock-overlay.d.ts.map +1 -0
  166. package/dist/components/ui/out-of-stock-overlay.js +12 -0
  167. package/dist/components/ui/page-animate-wrapper.d.ts +7 -0
  168. package/dist/components/ui/page-animate-wrapper.d.ts.map +1 -0
  169. package/dist/components/ui/page-animate-wrapper.js +13 -0
  170. package/dist/components/ui/page-content-loader.d.ts +13 -0
  171. package/dist/components/ui/page-content-loader.d.ts.map +1 -0
  172. package/dist/components/ui/page-content-loader.js +12 -0
  173. package/dist/components/ui/page-loader.d.ts +20 -0
  174. package/dist/components/ui/page-loader.d.ts.map +1 -0
  175. package/dist/components/ui/page-loader.js +31 -0
  176. package/dist/components/ui/product-card.d.ts +11 -0
  177. package/dist/components/ui/product-card.d.ts.map +1 -0
  178. package/dist/components/ui/product-card.js +124 -0
  179. package/dist/components/ui/product-rating.d.ts +17 -0
  180. package/dist/components/ui/product-rating.d.ts.map +1 -0
  181. package/dist/components/ui/product-rating.js +54 -0
  182. package/dist/components/ui/product-stock-badge.d.ts +9 -0
  183. package/dist/components/ui/product-stock-badge.d.ts.map +1 -0
  184. package/dist/components/ui/product-stock-badge.js +20 -0
  185. package/dist/components/ui/review-form.d.ts +9 -0
  186. package/dist/components/ui/review-form.d.ts.map +1 -0
  187. package/dist/components/ui/review-form.js +28 -0
  188. package/dist/components/ui/route-skeleton-loader.d.ts +7 -0
  189. package/dist/components/ui/route-skeleton-loader.d.ts.map +1 -0
  190. package/dist/components/ui/route-skeleton-loader.js +75 -0
  191. package/dist/components/ui/sheet.d.ts +29 -0
  192. package/dist/components/ui/sheet.d.ts.map +1 -0
  193. package/dist/components/ui/sheet.js +45 -0
  194. package/dist/components/ui/skeleton.d.ts +3 -0
  195. package/dist/components/ui/skeleton.d.ts.map +1 -0
  196. package/dist/components/ui/skeleton.js +6 -0
  197. package/dist/components/ui/skeletons/category-grid-skeleton.d.ts +6 -0
  198. package/dist/components/ui/skeletons/category-grid-skeleton.d.ts.map +1 -0
  199. package/dist/components/ui/skeletons/category-grid-skeleton.js +9 -0
  200. package/dist/components/ui/skeletons/checkout-skeleton.d.ts +2 -0
  201. package/dist/components/ui/skeletons/checkout-skeleton.d.ts.map +1 -0
  202. package/dist/components/ui/skeletons/checkout-skeleton.js +4 -0
  203. package/dist/components/ui/skeletons/index.d.ts +6 -0
  204. package/dist/components/ui/skeletons/index.d.ts.map +1 -0
  205. package/dist/components/ui/skeletons/index.js +5 -0
  206. package/dist/components/ui/skeletons/page-skeleton.d.ts +2 -0
  207. package/dist/components/ui/skeletons/page-skeleton.d.ts.map +1 -0
  208. package/dist/components/ui/skeletons/page-skeleton.js +4 -0
  209. package/dist/components/ui/skeletons/product-card-skeleton.d.ts +2 -0
  210. package/dist/components/ui/skeletons/product-card-skeleton.d.ts.map +1 -0
  211. package/dist/components/ui/skeletons/product-card-skeleton.js +4 -0
  212. package/dist/components/ui/skeletons/product-detail-skeleton.d.ts +2 -0
  213. package/dist/components/ui/skeletons/product-detail-skeleton.d.ts.map +1 -0
  214. package/dist/components/ui/skeletons/product-detail-skeleton.js +4 -0
  215. package/dist/components/ui/skeletons/product-grid-skeleton.d.ts +7 -0
  216. package/dist/components/ui/skeletons/product-grid-skeleton.d.ts.map +1 -0
  217. package/dist/components/ui/skeletons/product-grid-skeleton.js +12 -0
  218. package/dist/components/ui/store-logos.d.ts +43 -0
  219. package/dist/components/ui/store-logos.d.ts.map +1 -0
  220. package/dist/components/ui/store-logos.js +83 -0
  221. package/dist/components/ui/toast.d.ts +20 -0
  222. package/dist/components/ui/toast.d.ts.map +1 -0
  223. package/dist/components/ui/toast.js +33 -0
  224. package/dist/components/ui/video-player.d.ts +48 -0
  225. package/dist/components/ui/video-player.d.ts.map +1 -0
  226. package/dist/components/ui/video-player.js +101 -0
  227. package/dist/editor/alignment-schemas/booking-agenda.d.ts +3 -0
  228. package/dist/editor/alignment-schemas/booking-agenda.d.ts.map +1 -0
  229. package/dist/editor/alignment-schemas/booking-agenda.js +145 -0
  230. package/dist/editor/alignment-schemas/booking-footer-section.d.ts +4 -0
  231. package/dist/editor/alignment-schemas/booking-footer-section.d.ts.map +1 -0
  232. package/dist/editor/alignment-schemas/booking-footer-section.js +69 -0
  233. package/dist/editor/alignment-schemas/booking.d.ts +3 -0
  234. package/dist/editor/alignment-schemas/booking.d.ts.map +1 -0
  235. package/dist/editor/alignment-schemas/booking.js +476 -0
  236. package/dist/editor/alignment-schemas/clothing-minimal.d.ts +3 -0
  237. package/dist/editor/alignment-schemas/clothing-minimal.d.ts.map +1 -0
  238. package/dist/editor/alignment-schemas/clothing-minimal.js +363 -0
  239. package/dist/editor/alignment-schemas/clothing.d.ts +3 -0
  240. package/dist/editor/alignment-schemas/clothing.d.ts.map +1 -0
  241. package/dist/editor/alignment-schemas/clothing.js +477 -0
  242. package/dist/editor/alignment-schemas/electronics-grid.d.ts +3 -0
  243. package/dist/editor/alignment-schemas/electronics-grid.d.ts.map +1 -0
  244. package/dist/editor/alignment-schemas/electronics-grid.js +97 -0
  245. package/dist/editor/alignment-schemas/electronics.d.ts +3 -0
  246. package/dist/editor/alignment-schemas/electronics.d.ts.map +1 -0
  247. package/dist/editor/alignment-schemas/electronics.js +145 -0
  248. package/dist/editor/alignment-schemas/food-modern.d.ts +3 -0
  249. package/dist/editor/alignment-schemas/food-modern.d.ts.map +1 -0
  250. package/dist/editor/alignment-schemas/food-modern.js +237 -0
  251. package/dist/editor/alignment-schemas/food.d.ts +3 -0
  252. package/dist/editor/alignment-schemas/food.d.ts.map +1 -0
  253. package/dist/editor/alignment-schemas/food.js +494 -0
  254. package/dist/editor/alignment-schemas/index.d.ts +15 -0
  255. package/dist/editor/alignment-schemas/index.d.ts.map +1 -0
  256. package/dist/editor/alignment-schemas/index.js +50 -0
  257. package/dist/editor/alignment-schemas/lazy-loader.d.ts +14 -0
  258. package/dist/editor/alignment-schemas/lazy-loader.d.ts.map +1 -0
  259. package/dist/editor/alignment-schemas/lazy-loader.js +80 -0
  260. package/dist/editor/alignment-schemas/metadata.d.ts +25 -0
  261. package/dist/editor/alignment-schemas/metadata.d.ts.map +1 -0
  262. package/dist/editor/alignment-schemas/metadata.js +225 -0
  263. package/dist/editor/alignment-schemas/motivational-speaker.d.ts +3 -0
  264. package/dist/editor/alignment-schemas/motivational-speaker.d.ts.map +1 -0
  265. package/dist/editor/alignment-schemas/motivational-speaker.js +185 -0
  266. package/dist/editor/alignment-schemas/resolve-canvas-inspector-leaf.d.ts +18 -0
  267. package/dist/editor/alignment-schemas/resolve-canvas-inspector-leaf.d.ts.map +1 -0
  268. package/dist/editor/alignment-schemas/resolve-canvas-inspector-leaf.js +166 -0
  269. package/dist/editor/alignment-schemas/resolve-field.d.ts +9 -0
  270. package/dist/editor/alignment-schemas/resolve-field.d.ts.map +1 -0
  271. package/dist/editor/alignment-schemas/resolve-field.js +56 -0
  272. package/dist/editor/alignment-schemas/types.d.ts +53 -0
  273. package/dist/editor/alignment-schemas/types.d.ts.map +1 -0
  274. package/dist/editor/alignment-schemas/types.js +1 -0
  275. package/dist/editor/blocks/defaults/clothing-minimal-home.d.ts +9 -0
  276. package/dist/editor/blocks/defaults/clothing-minimal-home.d.ts.map +1 -0
  277. package/dist/editor/blocks/defaults/clothing-minimal-home.js +207 -0
  278. package/dist/editor/blocks/index.d.ts +4 -0
  279. package/dist/editor/blocks/index.d.ts.map +1 -0
  280. package/dist/editor/blocks/index.js +3 -0
  281. package/dist/editor/blocks/migrate-clothing-minimal.d.ts +5 -0
  282. package/dist/editor/blocks/migrate-clothing-minimal.d.ts.map +1 -0
  283. package/dist/editor/blocks/migrate-clothing-minimal.js +140 -0
  284. package/dist/editor/blocks/nav-outline-utils.d.ts +47 -0
  285. package/dist/editor/blocks/nav-outline-utils.d.ts.map +1 -0
  286. package/dist/editor/blocks/nav-outline-utils.js +201 -0
  287. package/dist/editor/blocks/registry.d.ts +19 -0
  288. package/dist/editor/blocks/registry.d.ts.map +1 -0
  289. package/dist/editor/blocks/registry.js +118 -0
  290. package/dist/editor/blocks/types.d.ts +14 -0
  291. package/dist/editor/blocks/types.d.ts.map +1 -0
  292. package/dist/editor/blocks/types.js +14 -0
  293. package/dist/editor/document/adapter.d.ts +44 -0
  294. package/dist/editor/document/adapter.d.ts.map +1 -0
  295. package/dist/editor/document/adapter.js +159 -0
  296. package/dist/editor/document/block-tree.d.ts +46 -0
  297. package/dist/editor/document/block-tree.d.ts.map +1 -0
  298. package/dist/editor/document/block-tree.js +345 -0
  299. package/dist/editor/document/constants.d.ts +6 -0
  300. package/dist/editor/document/constants.d.ts.map +1 -0
  301. package/dist/editor/document/constants.js +14 -0
  302. package/dist/editor/document/index.d.ts +7 -0
  303. package/dist/editor/document/index.d.ts.map +1 -0
  304. package/dist/editor/document/index.js +6 -0
  305. package/dist/editor/document/layout-id.d.ts +3 -0
  306. package/dist/editor/document/layout-id.d.ts.map +1 -0
  307. package/dist/editor/document/layout-id.js +17 -0
  308. package/dist/editor/document/types.d.ts +91 -0
  309. package/dist/editor/document/types.d.ts.map +1 -0
  310. package/dist/editor/document/types.js +1 -0
  311. package/dist/editor/document/validate.d.ts +11 -0
  312. package/dist/editor/document/validate.d.ts.map +1 -0
  313. package/dist/editor/document/validate.js +92 -0
  314. package/dist/editor/feature-flags.d.ts +11 -0
  315. package/dist/editor/feature-flags.d.ts.map +1 -0
  316. package/dist/editor/feature-flags.js +19 -0
  317. package/dist/editor/index.d.ts +28 -0
  318. package/dist/editor/index.d.ts.map +1 -0
  319. package/dist/editor/index.js +72 -0
  320. package/dist/editor/layout-content-loader.d.ts +13 -0
  321. package/dist/editor/layout-content-loader.d.ts.map +1 -0
  322. package/dist/editor/layout-content-loader.js +222 -0
  323. package/dist/editor/payaza-form/ActiveArrayFocusContext.d.ts +20 -0
  324. package/dist/editor/payaza-form/ActiveArrayFocusContext.d.ts.map +1 -0
  325. package/dist/editor/payaza-form/ActiveArrayFocusContext.js +31 -0
  326. package/dist/editor/payaza-form/ArrayItemManager.d.ts +19 -0
  327. package/dist/editor/payaza-form/ArrayItemManager.d.ts.map +1 -0
  328. package/dist/editor/payaza-form/ArrayItemManager.js +62 -0
  329. package/dist/editor/payaza-form/AssetSelectionContext.d.ts +17 -0
  330. package/dist/editor/payaza-form/AssetSelectionContext.d.ts.map +1 -0
  331. package/dist/editor/payaza-form/AssetSelectionContext.js +81 -0
  332. package/dist/editor/payaza-form/EditorCanvasPreview.d.ts +41 -0
  333. package/dist/editor/payaza-form/EditorCanvasPreview.d.ts.map +1 -0
  334. package/dist/editor/payaza-form/EditorCanvasPreview.js +56 -0
  335. package/dist/editor/payaza-form/EditorLayoutContext.d.ts +8 -0
  336. package/dist/editor/payaza-form/EditorLayoutContext.d.ts.map +1 -0
  337. package/dist/editor/payaza-form/EditorLayoutContext.js +6 -0
  338. package/dist/editor/payaza-form/FieldRenderer.d.ts +16 -0
  339. package/dist/editor/payaza-form/FieldRenderer.d.ts.map +1 -0
  340. package/dist/editor/payaza-form/FieldRenderer.js +192 -0
  341. package/dist/editor/payaza-form/IframePreviewMessageBridge.d.ts +29 -0
  342. package/dist/editor/payaza-form/IframePreviewMessageBridge.d.ts.map +1 -0
  343. package/dist/editor/payaza-form/IframePreviewMessageBridge.js +46 -0
  344. package/dist/editor/payaza-form/PayazaFormEditor.d.ts +12 -0
  345. package/dist/editor/payaza-form/PayazaFormEditor.d.ts.map +1 -0
  346. package/dist/editor/payaza-form/PayazaFormEditor.js +1226 -0
  347. package/dist/editor/payaza-form/PayazaFormEditorFullPage.d.ts +9 -0
  348. package/dist/editor/payaza-form/PayazaFormEditorFullPage.d.ts.map +1 -0
  349. package/dist/editor/payaza-form/PayazaFormEditorFullPage.js +6 -0
  350. package/dist/editor/payaza-form/SliderArrayEditor.d.ts +17 -0
  351. package/dist/editor/payaza-form/SliderArrayEditor.d.ts.map +1 -0
  352. package/dist/editor/payaza-form/SliderArrayEditor.js +96 -0
  353. package/dist/editor/payaza-form/components/ArrayField.d.ts +21 -0
  354. package/dist/editor/payaza-form/components/ArrayField.d.ts.map +1 -0
  355. package/dist/editor/payaza-form/components/ArrayField.js +18 -0
  356. package/dist/editor/payaza-form/components/BlockStylesInspector.d.ts +9 -0
  357. package/dist/editor/payaza-form/components/BlockStylesInspector.d.ts.map +1 -0
  358. package/dist/editor/payaza-form/components/BlockStylesInspector.js +150 -0
  359. package/dist/editor/payaza-form/components/BlocksField.d.ts +17 -0
  360. package/dist/editor/payaza-form/components/BlocksField.d.ts.map +1 -0
  361. package/dist/editor/payaza-form/components/BlocksField.js +108 -0
  362. package/dist/editor/payaza-form/components/ButtonField.d.ts +15 -0
  363. package/dist/editor/payaza-form/components/ButtonField.d.ts.map +1 -0
  364. package/dist/editor/payaza-form/components/ButtonField.js +17 -0
  365. package/dist/editor/payaza-form/components/CanvasGranularInspector.d.ts +16 -0
  366. package/dist/editor/payaza-form/components/CanvasGranularInspector.d.ts.map +1 -0
  367. package/dist/editor/payaza-form/components/CanvasGranularInspector.js +32 -0
  368. package/dist/editor/payaza-form/components/FieldDensityContext.d.ts +10 -0
  369. package/dist/editor/payaza-form/components/FieldDensityContext.d.ts.map +1 -0
  370. package/dist/editor/payaza-form/components/FieldDensityContext.js +13 -0
  371. package/dist/editor/payaza-form/components/IconField.d.ts +12 -0
  372. package/dist/editor/payaza-form/components/IconField.d.ts.map +1 -0
  373. package/dist/editor/payaza-form/components/IconField.js +42 -0
  374. package/dist/editor/payaza-form/components/ImageField.d.ts +10 -0
  375. package/dist/editor/payaza-form/components/ImageField.d.ts.map +1 -0
  376. package/dist/editor/payaza-form/components/ImageField.js +30 -0
  377. package/dist/editor/payaza-form/components/NumberField.d.ts +14 -0
  378. package/dist/editor/payaza-form/components/NumberField.d.ts.map +1 -0
  379. package/dist/editor/payaza-form/components/NumberField.js +23 -0
  380. package/dist/editor/payaza-form/components/ObjectField.d.ts +11 -0
  381. package/dist/editor/payaza-form/components/ObjectField.d.ts.map +1 -0
  382. package/dist/editor/payaza-form/components/ObjectField.js +7 -0
  383. package/dist/editor/payaza-form/components/RichTextField.d.ts +15 -0
  384. package/dist/editor/payaza-form/components/RichTextField.d.ts.map +1 -0
  385. package/dist/editor/payaza-form/components/RichTextField.js +88 -0
  386. package/dist/editor/payaza-form/components/SectionField.d.ts +14 -0
  387. package/dist/editor/payaza-form/components/SectionField.d.ts.map +1 -0
  388. package/dist/editor/payaza-form/components/SectionField.js +8 -0
  389. package/dist/editor/payaza-form/components/SectionSchemaInspector.d.ts +18 -0
  390. package/dist/editor/payaza-form/components/SectionSchemaInspector.d.ts.map +1 -0
  391. package/dist/editor/payaza-form/components/SectionSchemaInspector.js +64 -0
  392. package/dist/editor/payaza-form/components/SegmentedControlField.d.ts +13 -0
  393. package/dist/editor/payaza-form/components/SegmentedControlField.d.ts.map +1 -0
  394. package/dist/editor/payaza-form/components/SegmentedControlField.js +7 -0
  395. package/dist/editor/payaza-form/components/StarRatingField.d.ts +13 -0
  396. package/dist/editor/payaza-form/components/StarRatingField.d.ts.map +1 -0
  397. package/dist/editor/payaza-form/components/StarRatingField.js +16 -0
  398. package/dist/editor/payaza-form/components/TextField.d.ts +13 -0
  399. package/dist/editor/payaza-form/components/TextField.d.ts.map +1 -0
  400. package/dist/editor/payaza-form/components/TextField.js +12 -0
  401. package/dist/editor/payaza-form/components/TextareaField.d.ts +11 -0
  402. package/dist/editor/payaza-form/components/TextareaField.d.ts.map +1 -0
  403. package/dist/editor/payaza-form/components/TextareaField.js +6 -0
  404. package/dist/editor/payaza-form/components/ToggleField.d.ts +12 -0
  405. package/dist/editor/payaza-form/components/ToggleField.d.ts.map +1 -0
  406. package/dist/editor/payaza-form/components/ToggleField.js +15 -0
  407. package/dist/editor/payaza-form/data-merger.d.ts +28 -0
  408. package/dist/editor/payaza-form/data-merger.d.ts.map +1 -0
  409. package/dist/editor/payaza-form/data-merger.js +878 -0
  410. package/dist/editor/payaza-form/data-transformer.d.ts +28 -0
  411. package/dist/editor/payaza-form/data-transformer.d.ts.map +1 -0
  412. package/dist/editor/payaza-form/data-transformer.js +304 -0
  413. package/dist/editor/payaza-form/engine.d.ts +72 -0
  414. package/dist/editor/payaza-form/engine.d.ts.map +1 -0
  415. package/dist/editor/payaza-form/engine.js +140 -0
  416. package/dist/editor/payaza-form/examples/custom-widgets.example.d.ts +8 -0
  417. package/dist/editor/payaza-form/examples/custom-widgets.example.d.ts.map +1 -0
  418. package/dist/editor/payaza-form/examples/custom-widgets.example.js +51 -0
  419. package/dist/editor/payaza-form/field-renderer-ref.d.ts +4 -0
  420. package/dist/editor/payaza-form/field-renderer-ref.d.ts.map +1 -0
  421. package/dist/editor/payaza-form/field-renderer-ref.js +16 -0
  422. package/dist/editor/payaza-form/index.d.ts +11 -0
  423. package/dist/editor/payaza-form/index.d.ts.map +1 -0
  424. package/dist/editor/payaza-form/index.js +8 -0
  425. package/dist/editor/payaza-form/layout-loader.d.ts +12 -0
  426. package/dist/editor/payaza-form/layout-loader.d.ts.map +1 -0
  427. package/dist/editor/payaza-form/layout-loader.js +43 -0
  428. package/dist/editor/payaza-form/payaza-style-sanitize.d.ts +14 -0
  429. package/dist/editor/payaza-form/payaza-style-sanitize.d.ts.map +1 -0
  430. package/dist/editor/payaza-form/payaza-style-sanitize.js +76 -0
  431. package/dist/editor/payaza-form/preview-message-handler.d.ts +18 -0
  432. package/dist/editor/payaza-form/preview-message-handler.d.ts.map +1 -0
  433. package/dist/editor/payaza-form/preview-message-handler.js +89 -0
  434. package/dist/editor/payaza-form/schema-bridge.d.ts +12 -0
  435. package/dist/editor/payaza-form/schema-bridge.d.ts.map +1 -0
  436. package/dist/editor/payaza-form/schema-bridge.js +90 -0
  437. package/dist/editor/payaza-form/widget-registry.d.ts +94 -0
  438. package/dist/editor/payaza-form/widget-registry.d.ts.map +1 -0
  439. package/dist/editor/payaza-form/widget-registry.js +107 -0
  440. package/dist/editor/shared/AIGenerateModal.d.ts +17 -0
  441. package/dist/editor/shared/AIGenerateModal.d.ts.map +1 -0
  442. package/dist/editor/shared/AIGenerateModal.js +59 -0
  443. package/dist/editor/shared/BlockOutlineTree.d.ts +14 -0
  444. package/dist/editor/shared/BlockOutlineTree.d.ts.map +1 -0
  445. package/dist/editor/shared/BlockOutlineTree.js +47 -0
  446. package/dist/editor/shared/EditorHeader.d.ts +61 -0
  447. package/dist/editor/shared/EditorHeader.d.ts.map +1 -0
  448. package/dist/editor/shared/EditorHeader.js +181 -0
  449. package/dist/editor/shared/EditorNavigator.d.ts +42 -0
  450. package/dist/editor/shared/EditorNavigator.d.ts.map +1 -0
  451. package/dist/editor/shared/EditorNavigator.js +44 -0
  452. package/dist/editor/shared/IframePreview.d.ts +36 -0
  453. package/dist/editor/shared/IframePreview.d.ts.map +1 -0
  454. package/dist/editor/shared/IframePreview.js +217 -0
  455. package/dist/editor/shared/InlineCanvasPreview.d.ts +36 -0
  456. package/dist/editor/shared/InlineCanvasPreview.d.ts.map +1 -0
  457. package/dist/editor/shared/InlineCanvasPreview.js +174 -0
  458. package/dist/editor/shared/LayoutRenderer.d.ts +11 -0
  459. package/dist/editor/shared/LayoutRenderer.d.ts.map +1 -0
  460. package/dist/editor/shared/LayoutRenderer.js +7 -0
  461. package/dist/editor/shared/PageTabs.d.ts +13 -0
  462. package/dist/editor/shared/PageTabs.d.ts.map +1 -0
  463. package/dist/editor/shared/PageTabs.js +6 -0
  464. package/dist/editor/shared/ResizableSidebar.d.ts +14 -0
  465. package/dist/editor/shared/ResizableSidebar.d.ts.map +1 -0
  466. package/dist/editor/shared/ResizableSidebar.js +45 -0
  467. package/dist/editor/shared/index.d.ts +8 -0
  468. package/dist/editor/shared/index.d.ts.map +1 -0
  469. package/dist/editor/shared/index.js +7 -0
  470. package/dist/editor/shared/preview-viewport.d.ts +9 -0
  471. package/dist/editor/shared/preview-viewport.d.ts.map +1 -0
  472. package/dist/editor/shared/preview-viewport.js +17 -0
  473. package/dist/editor/shared/useEditorChromeMetrics.d.ts +15 -0
  474. package/dist/editor/shared/useEditorChromeMetrics.d.ts.map +1 -0
  475. package/dist/editor/shared/useEditorChromeMetrics.js +52 -0
  476. package/dist/editor/types.d.ts +162 -0
  477. package/dist/editor/types.d.ts.map +1 -0
  478. package/dist/editor/types.js +1 -0
  479. package/dist/hooks/use-analytics.d.ts +15 -0
  480. package/dist/hooks/use-analytics.d.ts.map +1 -0
  481. package/dist/hooks/use-analytics.js +62 -0
  482. package/dist/hooks/use-api.d.ts +17 -0
  483. package/dist/hooks/use-api.d.ts.map +1 -0
  484. package/dist/hooks/use-api.js +53 -0
  485. package/dist/hooks/use-cart-api.d.ts +28 -0
  486. package/dist/hooks/use-cart-api.d.ts.map +1 -0
  487. package/dist/hooks/use-cart-api.js +116 -0
  488. package/dist/hooks/use-catalog-loader.d.ts +19 -0
  489. package/dist/hooks/use-catalog-loader.d.ts.map +1 -0
  490. package/dist/hooks/use-catalog-loader.js +107 -0
  491. package/dist/hooks/use-catalog-price-range.d.ts +17 -0
  492. package/dist/hooks/use-catalog-price-range.d.ts.map +1 -0
  493. package/dist/hooks/use-catalog-price-range.js +26 -0
  494. package/dist/hooks/use-checkout-fees.d.ts +16 -0
  495. package/dist/hooks/use-checkout-fees.d.ts.map +1 -0
  496. package/dist/hooks/use-checkout-fees.js +105 -0
  497. package/dist/hooks/use-content-ready.d.ts +17 -0
  498. package/dist/hooks/use-content-ready.d.ts.map +1 -0
  499. package/dist/hooks/use-content-ready.js +197 -0
  500. package/dist/hooks/use-debounce.d.ts +6 -0
  501. package/dist/hooks/use-debounce.d.ts.map +1 -0
  502. package/dist/hooks/use-debounce.js +17 -0
  503. package/dist/hooks/use-multi-store-checkout-fees.d.ts +25 -0
  504. package/dist/hooks/use-multi-store-checkout-fees.d.ts.map +1 -0
  505. package/dist/hooks/use-multi-store-checkout-fees.js +116 -0
  506. package/dist/hooks/use-navigation-loading.d.ts +4 -0
  507. package/dist/hooks/use-navigation-loading.d.ts.map +1 -0
  508. package/dist/hooks/use-navigation-loading.js +14 -0
  509. package/dist/hooks/use-payaza-checkout.d.ts +15 -0
  510. package/dist/hooks/use-payaza-checkout.d.ts.map +1 -0
  511. package/dist/hooks/use-payaza-checkout.js +123 -0
  512. package/dist/hooks/use-product-variation-selection.d.ts +26 -0
  513. package/dist/hooks/use-product-variation-selection.d.ts.map +1 -0
  514. package/dist/hooks/use-product-variation-selection.js +26 -0
  515. package/dist/hooks/use-products-api.d.ts +19 -0
  516. package/dist/hooks/use-products-api.d.ts.map +1 -0
  517. package/dist/hooks/use-products-api.js +84 -0
  518. package/dist/hooks/use-shipping-quote.d.ts +25 -0
  519. package/dist/hooks/use-shipping-quote.d.ts.map +1 -0
  520. package/dist/hooks/use-shipping-quote.js +80 -0
  521. package/dist/hooks/use-store-api.d.ts +12 -0
  522. package/dist/hooks/use-store-api.d.ts.map +1 -0
  523. package/dist/hooks/use-store-api.js +73 -0
  524. package/dist/hooks/usePreviewSlideSync.d.ts +5 -0
  525. package/dist/hooks/usePreviewSlideSync.d.ts.map +1 -0
  526. package/dist/hooks/usePreviewSlideSync.js +28 -0
  527. package/dist/index.d.ts +150 -0
  528. package/dist/index.d.ts.map +1 -0
  529. package/dist/index.js +164 -0
  530. package/dist/json/booking-agenda.json +166 -0
  531. package/dist/json/booking.json +224 -0
  532. package/dist/json/clothing-minimal.json +203 -0
  533. package/dist/json/clothing.json +418 -0
  534. package/dist/json/electronics-grid.json +246 -0
  535. package/dist/json/electronics.json +303 -0
  536. package/dist/json/food-modern.json +191 -0
  537. package/dist/json/food.json +283 -0
  538. package/dist/json/json-map.d.ts +7 -0
  539. package/dist/json/json-map.d.ts.map +1 -0
  540. package/dist/json/json-map.js +36 -0
  541. package/dist/json/motivational-speaker.json +361 -0
  542. package/dist/layouts/booking/components/BookingHomePage.d.ts +7 -0
  543. package/dist/layouts/booking/components/BookingHomePage.d.ts.map +1 -0
  544. package/dist/layouts/booking/components/BookingHomePage.js +107 -0
  545. package/dist/layouts/booking/components/BookingMultilineHeading.d.ts +20 -0
  546. package/dist/layouts/booking/components/BookingMultilineHeading.d.ts.map +1 -0
  547. package/dist/layouts/booking/components/BookingMultilineHeading.js +32 -0
  548. package/dist/layouts/booking/components/BookingTestimonialCard.d.ts +10 -0
  549. package/dist/layouts/booking/components/BookingTestimonialCard.d.ts.map +1 -0
  550. package/dist/layouts/booking/components/BookingTestimonialCard.js +11 -0
  551. package/dist/layouts/booking/components/BookingTestimonialsEmptyState.d.ts +9 -0
  552. package/dist/layouts/booking/components/BookingTestimonialsEmptyState.d.ts.map +1 -0
  553. package/dist/layouts/booking/components/BookingTestimonialsEmptyState.js +19 -0
  554. package/dist/layouts/booking/components/booking-about-defaults.d.ts +26 -0
  555. package/dist/layouts/booking/components/booking-about-defaults.d.ts.map +1 -0
  556. package/dist/layouts/booking/components/booking-about-defaults.js +99 -0
  557. package/dist/layouts/booking/components/booking-footer-defaults.d.ts +19 -0
  558. package/dist/layouts/booking/components/booking-footer-defaults.d.ts.map +1 -0
  559. package/dist/layouts/booking/components/booking-footer-defaults.js +52 -0
  560. package/dist/layouts/booking/components/booking-testimonial-defaults.d.ts +21 -0
  561. package/dist/layouts/booking/components/booking-testimonial-defaults.d.ts.map +1 -0
  562. package/dist/layouts/booking/components/booking-testimonial-defaults.js +112 -0
  563. package/dist/layouts/booking/index.d.ts +9 -0
  564. package/dist/layouts/booking/index.d.ts.map +1 -0
  565. package/dist/layouts/booking/index.js +9 -0
  566. package/dist/layouts/booking/pages/AboutPage.d.ts +7 -0
  567. package/dist/layouts/booking/pages/AboutPage.d.ts.map +1 -0
  568. package/dist/layouts/booking/pages/AboutPage.js +69 -0
  569. package/dist/layouts/booking/pages/BookPage.d.ts +8 -0
  570. package/dist/layouts/booking/pages/BookPage.d.ts.map +1 -0
  571. package/dist/layouts/booking/pages/BookPage.js +482 -0
  572. package/dist/layouts/booking/pages/CategoriesPage.d.ts +7 -0
  573. package/dist/layouts/booking/pages/CategoriesPage.d.ts.map +1 -0
  574. package/dist/layouts/booking/pages/CategoriesPage.js +30 -0
  575. package/dist/layouts/booking/pages/CategoryPage.d.ts +8 -0
  576. package/dist/layouts/booking/pages/CategoryPage.d.ts.map +1 -0
  577. package/dist/layouts/booking/pages/CategoryPage.js +51 -0
  578. package/dist/layouts/booking/pages/ContactPage.d.ts +7 -0
  579. package/dist/layouts/booking/pages/ContactPage.d.ts.map +1 -0
  580. package/dist/layouts/booking/pages/ContactPage.js +59 -0
  581. package/dist/layouts/booking/pages/ProductDetailPage.d.ts +8 -0
  582. package/dist/layouts/booking/pages/ProductDetailPage.d.ts.map +1 -0
  583. package/dist/layouts/booking/pages/ProductDetailPage.js +433 -0
  584. package/dist/layouts/booking/pages/ServicesPage.d.ts +9 -0
  585. package/dist/layouts/booking/pages/ServicesPage.d.ts.map +1 -0
  586. package/dist/layouts/booking/pages/ServicesPage.js +54 -0
  587. package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.d.ts +7 -0
  588. package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.d.ts.map +1 -0
  589. package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.js +283 -0
  590. package/dist/layouts/booking-agenda/index.d.ts +9 -0
  591. package/dist/layouts/booking-agenda/index.d.ts.map +1 -0
  592. package/dist/layouts/booking-agenda/index.js +9 -0
  593. package/dist/layouts/booking-agenda/pages/AboutPage.d.ts +7 -0
  594. package/dist/layouts/booking-agenda/pages/AboutPage.d.ts.map +1 -0
  595. package/dist/layouts/booking-agenda/pages/AboutPage.js +51 -0
  596. package/dist/layouts/booking-agenda/pages/BookPage.d.ts +8 -0
  597. package/dist/layouts/booking-agenda/pages/BookPage.d.ts.map +1 -0
  598. package/dist/layouts/booking-agenda/pages/BookPage.js +468 -0
  599. package/dist/layouts/booking-agenda/pages/CategoriesPage.d.ts +7 -0
  600. package/dist/layouts/booking-agenda/pages/CategoriesPage.d.ts.map +1 -0
  601. package/dist/layouts/booking-agenda/pages/CategoriesPage.js +23 -0
  602. package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts +8 -0
  603. package/dist/layouts/booking-agenda/pages/CategoryPage.d.ts.map +1 -0
  604. package/dist/layouts/booking-agenda/pages/CategoryPage.js +48 -0
  605. package/dist/layouts/booking-agenda/pages/ContactPage.d.ts +7 -0
  606. package/dist/layouts/booking-agenda/pages/ContactPage.d.ts.map +1 -0
  607. package/dist/layouts/booking-agenda/pages/ContactPage.js +57 -0
  608. package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts +8 -0
  609. package/dist/layouts/booking-agenda/pages/ProductDetailPage.d.ts.map +1 -0
  610. package/dist/layouts/booking-agenda/pages/ProductDetailPage.js +433 -0
  611. package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts +9 -0
  612. package/dist/layouts/booking-agenda/pages/ServicesPage.d.ts.map +1 -0
  613. package/dist/layouts/booking-agenda/pages/ServicesPage.js +46 -0
  614. package/dist/layouts/clothing/components/ClothingHomePage.d.ts +7 -0
  615. package/dist/layouts/clothing/components/ClothingHomePage.d.ts.map +1 -0
  616. package/dist/layouts/clothing/components/ClothingHomePage.js +260 -0
  617. package/dist/layouts/clothing/index.d.ts +8 -0
  618. package/dist/layouts/clothing/index.d.ts.map +1 -0
  619. package/dist/layouts/clothing/index.js +8 -0
  620. package/dist/layouts/clothing/pages/AboutPage.d.ts +7 -0
  621. package/dist/layouts/clothing/pages/AboutPage.d.ts.map +1 -0
  622. package/dist/layouts/clothing/pages/AboutPage.js +55 -0
  623. package/dist/layouts/clothing/pages/CategoriesPage.d.ts +7 -0
  624. package/dist/layouts/clothing/pages/CategoriesPage.d.ts.map +1 -0
  625. package/dist/layouts/clothing/pages/CategoriesPage.js +34 -0
  626. package/dist/layouts/clothing/pages/CategoryPage.d.ts +8 -0
  627. package/dist/layouts/clothing/pages/CategoryPage.d.ts.map +1 -0
  628. package/dist/layouts/clothing/pages/CategoryPage.js +77 -0
  629. package/dist/layouts/clothing/pages/ContactPage.d.ts +7 -0
  630. package/dist/layouts/clothing/pages/ContactPage.d.ts.map +1 -0
  631. package/dist/layouts/clothing/pages/ContactPage.js +58 -0
  632. package/dist/layouts/clothing/pages/ProductDetailPage.d.ts +8 -0
  633. package/dist/layouts/clothing/pages/ProductDetailPage.d.ts.map +1 -0
  634. package/dist/layouts/clothing/pages/ProductDetailPage.js +393 -0
  635. package/dist/layouts/clothing/pages/ProductsPage.d.ts +7 -0
  636. package/dist/layouts/clothing/pages/ProductsPage.d.ts.map +1 -0
  637. package/dist/layouts/clothing/pages/ProductsPage.js +268 -0
  638. package/dist/layouts/clothing/payaza-bindings.d.ts +23 -0
  639. package/dist/layouts/clothing/payaza-bindings.d.ts.map +1 -0
  640. package/dist/layouts/clothing/payaza-bindings.js +17 -0
  641. package/dist/layouts/clothing/styles/clothing.css +80 -0
  642. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts +7 -0
  643. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts.map +1 -0
  644. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.js +163 -0
  645. package/dist/layouts/clothing-minimal/components/clothing-minimal-block-render.d.ts +40 -0
  646. package/dist/layouts/clothing-minimal/components/clothing-minimal-block-render.d.ts.map +1 -0
  647. package/dist/layouts/clothing-minimal/components/clothing-minimal-block-render.js +180 -0
  648. package/dist/layouts/clothing-minimal/index.d.ts +8 -0
  649. package/dist/layouts/clothing-minimal/index.d.ts.map +1 -0
  650. package/dist/layouts/clothing-minimal/index.js +8 -0
  651. package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts +7 -0
  652. package/dist/layouts/clothing-minimal/pages/AboutPage.d.ts.map +1 -0
  653. package/dist/layouts/clothing-minimal/pages/AboutPage.js +71 -0
  654. package/dist/layouts/clothing-minimal/pages/CategoriesPage.d.ts +7 -0
  655. package/dist/layouts/clothing-minimal/pages/CategoriesPage.d.ts.map +1 -0
  656. package/dist/layouts/clothing-minimal/pages/CategoriesPage.js +35 -0
  657. package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts +8 -0
  658. package/dist/layouts/clothing-minimal/pages/CategoryPage.d.ts.map +1 -0
  659. package/dist/layouts/clothing-minimal/pages/CategoryPage.js +56 -0
  660. package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts +7 -0
  661. package/dist/layouts/clothing-minimal/pages/ContactPage.d.ts.map +1 -0
  662. package/dist/layouts/clothing-minimal/pages/ContactPage.js +53 -0
  663. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts +8 -0
  664. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.d.ts.map +1 -0
  665. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.js +432 -0
  666. package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts +7 -0
  667. package/dist/layouts/clothing-minimal/pages/ProductsPage.d.ts.map +1 -0
  668. package/dist/layouts/clothing-minimal/pages/ProductsPage.js +274 -0
  669. package/dist/layouts/electronics/components/ElectronicsCategoriesPage.d.ts +7 -0
  670. package/dist/layouts/electronics/components/ElectronicsCategoriesPage.d.ts.map +1 -0
  671. package/dist/layouts/electronics/components/ElectronicsCategoriesPage.js +40 -0
  672. package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts +10 -0
  673. package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts.map +1 -0
  674. package/dist/layouts/electronics/components/ElectronicsGridProductCard.js +107 -0
  675. package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts +7 -0
  676. package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts.map +1 -0
  677. package/dist/layouts/electronics/components/ElectronicsHomePage.js +96 -0
  678. package/dist/layouts/electronics/components/ElectronicsPageWrapper.d.ts +8 -0
  679. package/dist/layouts/electronics/components/ElectronicsPageWrapper.d.ts.map +1 -0
  680. package/dist/layouts/electronics/components/ElectronicsPageWrapper.js +10 -0
  681. package/dist/layouts/electronics/components/ElectronicsProductsPage.d.ts +7 -0
  682. package/dist/layouts/electronics/components/ElectronicsProductsPage.d.ts.map +1 -0
  683. package/dist/layouts/electronics/components/ElectronicsProductsPage.js +99 -0
  684. package/dist/layouts/electronics/components/ElectronicsStoreFooter.d.ts +7 -0
  685. package/dist/layouts/electronics/components/ElectronicsStoreFooter.d.ts.map +1 -0
  686. package/dist/layouts/electronics/components/ElectronicsStoreFooter.js +11 -0
  687. package/dist/layouts/electronics/components/ElectronicsStoreHeader.d.ts +7 -0
  688. package/dist/layouts/electronics/components/ElectronicsStoreHeader.d.ts.map +1 -0
  689. package/dist/layouts/electronics/components/ElectronicsStoreHeader.js +39 -0
  690. package/dist/layouts/electronics/index.d.ts +19 -0
  691. package/dist/layouts/electronics/index.d.ts.map +1 -0
  692. package/dist/layouts/electronics/index.js +19 -0
  693. package/dist/layouts/electronics/pages/AboutPage.d.ts +7 -0
  694. package/dist/layouts/electronics/pages/AboutPage.d.ts.map +1 -0
  695. package/dist/layouts/electronics/pages/AboutPage.js +51 -0
  696. package/dist/layouts/electronics/pages/CategoriesPage.d.ts +7 -0
  697. package/dist/layouts/electronics/pages/CategoriesPage.d.ts.map +1 -0
  698. package/dist/layouts/electronics/pages/CategoriesPage.js +6 -0
  699. package/dist/layouts/electronics/pages/CategoryPage.d.ts +8 -0
  700. package/dist/layouts/electronics/pages/CategoryPage.d.ts.map +1 -0
  701. package/dist/layouts/electronics/pages/CategoryPage.js +55 -0
  702. package/dist/layouts/electronics/pages/ContactPage.d.ts +7 -0
  703. package/dist/layouts/electronics/pages/ContactPage.d.ts.map +1 -0
  704. package/dist/layouts/electronics/pages/ContactPage.js +57 -0
  705. package/dist/layouts/electronics/pages/HelpCenterPage.d.ts +7 -0
  706. package/dist/layouts/electronics/pages/HelpCenterPage.d.ts.map +1 -0
  707. package/dist/layouts/electronics/pages/HelpCenterPage.js +55 -0
  708. package/dist/layouts/electronics/pages/PrivacyPolicyPage.d.ts +7 -0
  709. package/dist/layouts/electronics/pages/PrivacyPolicyPage.d.ts.map +1 -0
  710. package/dist/layouts/electronics/pages/PrivacyPolicyPage.js +9 -0
  711. package/dist/layouts/electronics/pages/ProductDetailPage.d.ts +8 -0
  712. package/dist/layouts/electronics/pages/ProductDetailPage.d.ts.map +1 -0
  713. package/dist/layouts/electronics/pages/ProductDetailPage.js +430 -0
  714. package/dist/layouts/electronics/pages/ProductsPage.d.ts +7 -0
  715. package/dist/layouts/electronics/pages/ProductsPage.d.ts.map +1 -0
  716. package/dist/layouts/electronics/pages/ProductsPage.js +273 -0
  717. package/dist/layouts/electronics/pages/ShippingReturnsPage.d.ts +7 -0
  718. package/dist/layouts/electronics/pages/ShippingReturnsPage.d.ts.map +1 -0
  719. package/dist/layouts/electronics/pages/ShippingReturnsPage.js +7 -0
  720. package/dist/layouts/electronics/pages/TermsPage.d.ts +7 -0
  721. package/dist/layouts/electronics/pages/TermsPage.d.ts.map +1 -0
  722. package/dist/layouts/electronics/pages/TermsPage.js +9 -0
  723. package/dist/layouts/electronics/pages/TrackOrderPage.d.ts +7 -0
  724. package/dist/layouts/electronics/pages/TrackOrderPage.d.ts.map +1 -0
  725. package/dist/layouts/electronics/pages/TrackOrderPage.js +376 -0
  726. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts +10 -0
  727. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts.map +1 -0
  728. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.js +107 -0
  729. package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.d.ts +7 -0
  730. package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.d.ts.map +1 -0
  731. package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.js +111 -0
  732. package/dist/layouts/electronics-grid/index.d.ts +15 -0
  733. package/dist/layouts/electronics-grid/index.d.ts.map +1 -0
  734. package/dist/layouts/electronics-grid/index.js +15 -0
  735. package/dist/layouts/electronics-grid/pages/AboutPage.d.ts +7 -0
  736. package/dist/layouts/electronics-grid/pages/AboutPage.d.ts.map +1 -0
  737. package/dist/layouts/electronics-grid/pages/AboutPage.js +51 -0
  738. package/dist/layouts/electronics-grid/pages/CategoriesPage.d.ts +7 -0
  739. package/dist/layouts/electronics-grid/pages/CategoriesPage.d.ts.map +1 -0
  740. package/dist/layouts/electronics-grid/pages/CategoriesPage.js +6 -0
  741. package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts +8 -0
  742. package/dist/layouts/electronics-grid/pages/CategoryPage.d.ts.map +1 -0
  743. package/dist/layouts/electronics-grid/pages/CategoryPage.js +55 -0
  744. package/dist/layouts/electronics-grid/pages/ContactPage.d.ts +7 -0
  745. package/dist/layouts/electronics-grid/pages/ContactPage.d.ts.map +1 -0
  746. package/dist/layouts/electronics-grid/pages/ContactPage.js +57 -0
  747. package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.d.ts +7 -0
  748. package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.d.ts.map +1 -0
  749. package/dist/layouts/electronics-grid/pages/ElectronicsGridCategoriesPage.js +26 -0
  750. package/dist/layouts/electronics-grid/pages/HelpCenterPage.d.ts +7 -0
  751. package/dist/layouts/electronics-grid/pages/HelpCenterPage.d.ts.map +1 -0
  752. package/dist/layouts/electronics-grid/pages/HelpCenterPage.js +55 -0
  753. package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.d.ts +7 -0
  754. package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.d.ts.map +1 -0
  755. package/dist/layouts/electronics-grid/pages/PrivacyPolicyPage.js +9 -0
  756. package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts +8 -0
  757. package/dist/layouts/electronics-grid/pages/ProductDetailPage.d.ts.map +1 -0
  758. package/dist/layouts/electronics-grid/pages/ProductDetailPage.js +430 -0
  759. package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts +7 -0
  760. package/dist/layouts/electronics-grid/pages/ProductsPage.d.ts.map +1 -0
  761. package/dist/layouts/electronics-grid/pages/ProductsPage.js +273 -0
  762. package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.d.ts +7 -0
  763. package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.d.ts.map +1 -0
  764. package/dist/layouts/electronics-grid/pages/ShippingReturnsPage.js +7 -0
  765. package/dist/layouts/electronics-grid/pages/TermsPage.d.ts +7 -0
  766. package/dist/layouts/electronics-grid/pages/TermsPage.d.ts.map +1 -0
  767. package/dist/layouts/electronics-grid/pages/TermsPage.js +9 -0
  768. package/dist/layouts/electronics-grid/pages/TrackOrderPage.d.ts +7 -0
  769. package/dist/layouts/electronics-grid/pages/TrackOrderPage.d.ts.map +1 -0
  770. package/dist/layouts/electronics-grid/pages/TrackOrderPage.js +376 -0
  771. package/dist/layouts/food/components/FoodHomePage.d.ts +7 -0
  772. package/dist/layouts/food/components/FoodHomePage.d.ts.map +1 -0
  773. package/dist/layouts/food/components/FoodHomePage.js +387 -0
  774. package/dist/layouts/food/index.d.ts +9 -0
  775. package/dist/layouts/food/index.d.ts.map +1 -0
  776. package/dist/layouts/food/index.js +9 -0
  777. package/dist/layouts/food/pages/AboutPage.d.ts +7 -0
  778. package/dist/layouts/food/pages/AboutPage.d.ts.map +1 -0
  779. package/dist/layouts/food/pages/AboutPage.js +67 -0
  780. package/dist/layouts/food/pages/CategoriesPage.d.ts +7 -0
  781. package/dist/layouts/food/pages/CategoriesPage.d.ts.map +1 -0
  782. package/dist/layouts/food/pages/CategoriesPage.js +26 -0
  783. package/dist/layouts/food/pages/CategoryPage.d.ts +8 -0
  784. package/dist/layouts/food/pages/CategoryPage.d.ts.map +1 -0
  785. package/dist/layouts/food/pages/CategoryPage.js +65 -0
  786. package/dist/layouts/food/pages/ContactPage.d.ts +7 -0
  787. package/dist/layouts/food/pages/ContactPage.d.ts.map +1 -0
  788. package/dist/layouts/food/pages/ContactPage.js +55 -0
  789. package/dist/layouts/food/pages/MenuPage.d.ts +8 -0
  790. package/dist/layouts/food/pages/MenuPage.d.ts.map +1 -0
  791. package/dist/layouts/food/pages/MenuPage.js +107 -0
  792. package/dist/layouts/food/pages/ProductDetailPage.d.ts +8 -0
  793. package/dist/layouts/food/pages/ProductDetailPage.d.ts.map +1 -0
  794. package/dist/layouts/food/pages/ProductDetailPage.js +485 -0
  795. package/dist/layouts/food/pages/ProductsPage.d.ts +7 -0
  796. package/dist/layouts/food/pages/ProductsPage.d.ts.map +1 -0
  797. package/dist/layouts/food/pages/ProductsPage.js +174 -0
  798. package/dist/layouts/food-modern/components/FoodHomePageModern.d.ts +7 -0
  799. package/dist/layouts/food-modern/components/FoodHomePageModern.d.ts.map +1 -0
  800. package/dist/layouts/food-modern/components/FoodHomePageModern.js +101 -0
  801. package/dist/layouts/food-modern/index.d.ts +9 -0
  802. package/dist/layouts/food-modern/index.d.ts.map +1 -0
  803. package/dist/layouts/food-modern/index.js +9 -0
  804. package/dist/layouts/food-modern/pages/AboutPage.d.ts +7 -0
  805. package/dist/layouts/food-modern/pages/AboutPage.d.ts.map +1 -0
  806. package/dist/layouts/food-modern/pages/AboutPage.js +52 -0
  807. package/dist/layouts/food-modern/pages/CategoriesPage.d.ts +7 -0
  808. package/dist/layouts/food-modern/pages/CategoriesPage.d.ts.map +1 -0
  809. package/dist/layouts/food-modern/pages/CategoriesPage.js +23 -0
  810. package/dist/layouts/food-modern/pages/CategoryPage.d.ts +8 -0
  811. package/dist/layouts/food-modern/pages/CategoryPage.d.ts.map +1 -0
  812. package/dist/layouts/food-modern/pages/CategoryPage.js +64 -0
  813. package/dist/layouts/food-modern/pages/ContactPage.d.ts +7 -0
  814. package/dist/layouts/food-modern/pages/ContactPage.d.ts.map +1 -0
  815. package/dist/layouts/food-modern/pages/ContactPage.js +55 -0
  816. package/dist/layouts/food-modern/pages/MenuPage.d.ts +8 -0
  817. package/dist/layouts/food-modern/pages/MenuPage.d.ts.map +1 -0
  818. package/dist/layouts/food-modern/pages/MenuPage.js +110 -0
  819. package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts +8 -0
  820. package/dist/layouts/food-modern/pages/ProductDetailPage.d.ts.map +1 -0
  821. package/dist/layouts/food-modern/pages/ProductDetailPage.js +427 -0
  822. package/dist/layouts/food-modern/pages/ProductsPage.d.ts +7 -0
  823. package/dist/layouts/food-modern/pages/ProductsPage.d.ts.map +1 -0
  824. package/dist/layouts/food-modern/pages/ProductsPage.js +175 -0
  825. package/dist/layouts/motivational-speaker/components/MotivationalHomePage.d.ts +7 -0
  826. package/dist/layouts/motivational-speaker/components/MotivationalHomePage.d.ts.map +1 -0
  827. package/dist/layouts/motivational-speaker/components/MotivationalHomePage.js +131 -0
  828. package/dist/layouts/motivational-speaker/components/MotivationalSpeakerPageWrapper.d.ts +3 -0
  829. package/dist/layouts/motivational-speaker/components/MotivationalSpeakerPageWrapper.d.ts.map +1 -0
  830. package/dist/layouts/motivational-speaker/components/MotivationalSpeakerPageWrapper.js +7 -0
  831. package/dist/layouts/motivational-speaker/index.d.ts +10 -0
  832. package/dist/layouts/motivational-speaker/index.d.ts.map +1 -0
  833. package/dist/layouts/motivational-speaker/index.js +10 -0
  834. package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts +7 -0
  835. package/dist/layouts/motivational-speaker/pages/AboutPage.d.ts.map +1 -0
  836. package/dist/layouts/motivational-speaker/pages/AboutPage.js +51 -0
  837. package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts +8 -0
  838. package/dist/layouts/motivational-speaker/pages/CategoryPage.d.ts.map +1 -0
  839. package/dist/layouts/motivational-speaker/pages/CategoryPage.js +72 -0
  840. package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts +7 -0
  841. package/dist/layouts/motivational-speaker/pages/ContactPage.d.ts.map +1 -0
  842. package/dist/layouts/motivational-speaker/pages/ContactPage.js +57 -0
  843. package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts +7 -0
  844. package/dist/layouts/motivational-speaker/pages/ProductsPage.d.ts.map +1 -0
  845. package/dist/layouts/motivational-speaker/pages/ProductsPage.js +273 -0
  846. package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts +8 -0
  847. package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.d.ts.map +1 -0
  848. package/dist/layouts/motivational-speaker/pages/ServiceDetailPage.js +153 -0
  849. package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts +9 -0
  850. package/dist/layouts/motivational-speaker/pages/ServicesPage.d.ts.map +1 -0
  851. package/dist/layouts/motivational-speaker/pages/ServicesPage.js +46 -0
  852. package/dist/layouts/motivational-speaker/pages/SubscriptionPage.d.ts +7 -0
  853. package/dist/layouts/motivational-speaker/pages/SubscriptionPage.d.ts.map +1 -0
  854. package/dist/layouts/motivational-speaker/pages/SubscriptionPage.js +137 -0
  855. package/dist/layouts/shared/components/BaseStoreLayout.d.ts +8 -0
  856. package/dist/layouts/shared/components/BaseStoreLayout.d.ts.map +1 -0
  857. package/dist/layouts/shared/components/BaseStoreLayout.js +49 -0
  858. package/dist/layouts/shared/components/CartLineQuantityControl.d.ts +12 -0
  859. package/dist/layouts/shared/components/CartLineQuantityControl.d.ts.map +1 -0
  860. package/dist/layouts/shared/components/CartLineQuantityControl.js +99 -0
  861. package/dist/layouts/shared/components/GenericPageWrapper.d.ts +8 -0
  862. package/dist/layouts/shared/components/GenericPageWrapper.d.ts.map +1 -0
  863. package/dist/layouts/shared/components/GenericPageWrapper.js +24 -0
  864. package/dist/layouts/shared/components/PromoBanner.d.ts +12 -0
  865. package/dist/layouts/shared/components/PromoBanner.d.ts.map +1 -0
  866. package/dist/layouts/shared/components/PromoBanner.js +17 -0
  867. package/dist/layouts/shared/components/StoreFooter.d.ts +7 -0
  868. package/dist/layouts/shared/components/StoreFooter.d.ts.map +1 -0
  869. package/dist/layouts/shared/components/StoreFooter.js +156 -0
  870. package/dist/layouts/shared/components/StoreHeader.d.ts +8 -0
  871. package/dist/layouts/shared/components/StoreHeader.d.ts.map +1 -0
  872. package/dist/layouts/shared/components/StoreHeader.js +111 -0
  873. package/dist/layouts/shared/components/TestimonialCard.d.ts +8 -0
  874. package/dist/layouts/shared/components/TestimonialCard.d.ts.map +1 -0
  875. package/dist/layouts/shared/components/TestimonialCard.js +10 -0
  876. package/dist/layouts/shared/components/headers/BookingAgendaSidebar.d.ts +8 -0
  877. package/dist/layouts/shared/components/headers/BookingAgendaSidebar.d.ts.map +1 -0
  878. package/dist/layouts/shared/components/headers/BookingAgendaSidebar.js +16 -0
  879. package/dist/layouts/shared/components/headers/ClothingMinimalHeader.d.ts +7 -0
  880. package/dist/layouts/shared/components/headers/ClothingMinimalHeader.d.ts.map +1 -0
  881. package/dist/layouts/shared/components/headers/ClothingMinimalHeader.js +38 -0
  882. package/dist/layouts/shared/components/headers/FoodModernHeader.d.ts +7 -0
  883. package/dist/layouts/shared/components/headers/FoodModernHeader.d.ts.map +1 -0
  884. package/dist/layouts/shared/components/headers/FoodModernHeader.js +61 -0
  885. package/dist/layouts/shared/index.d.ts +23 -0
  886. package/dist/layouts/shared/index.d.ts.map +1 -0
  887. package/dist/layouts/shared/index.js +23 -0
  888. package/dist/layouts/shared/pages/AccountPage.d.ts +7 -0
  889. package/dist/layouts/shared/pages/AccountPage.d.ts.map +1 -0
  890. package/dist/layouts/shared/pages/AccountPage.js +549 -0
  891. package/dist/layouts/shared/pages/CartPage.d.ts +7 -0
  892. package/dist/layouts/shared/pages/CartPage.d.ts.map +1 -0
  893. package/dist/layouts/shared/pages/CartPage.js +121 -0
  894. package/dist/layouts/shared/pages/CheckoutPage.d.ts +7 -0
  895. package/dist/layouts/shared/pages/CheckoutPage.d.ts.map +1 -0
  896. package/dist/layouts/shared/pages/CheckoutPage.js +1430 -0
  897. package/dist/layouts/shared/pages/CookiePolicyPage.d.ts +7 -0
  898. package/dist/layouts/shared/pages/CookiePolicyPage.d.ts.map +1 -0
  899. package/dist/layouts/shared/pages/CookiePolicyPage.js +9 -0
  900. package/dist/layouts/shared/pages/FeatureDisabledPage.d.ts +9 -0
  901. package/dist/layouts/shared/pages/FeatureDisabledPage.d.ts.map +1 -0
  902. package/dist/layouts/shared/pages/FeatureDisabledPage.js +8 -0
  903. package/dist/layouts/shared/pages/HelpCenterPage.d.ts +7 -0
  904. package/dist/layouts/shared/pages/HelpCenterPage.d.ts.map +1 -0
  905. package/dist/layouts/shared/pages/HelpCenterPage.js +55 -0
  906. package/dist/layouts/shared/pages/MaintenancePage.d.ts +7 -0
  907. package/dist/layouts/shared/pages/MaintenancePage.d.ts.map +1 -0
  908. package/dist/layouts/shared/pages/MaintenancePage.js +10 -0
  909. package/dist/layouts/shared/pages/PortfolioPage.d.ts +7 -0
  910. package/dist/layouts/shared/pages/PortfolioPage.d.ts.map +1 -0
  911. package/dist/layouts/shared/pages/PortfolioPage.js +130 -0
  912. package/dist/layouts/shared/pages/PrivacyPolicyPage.d.ts +7 -0
  913. package/dist/layouts/shared/pages/PrivacyPolicyPage.d.ts.map +1 -0
  914. package/dist/layouts/shared/pages/PrivacyPolicyPage.js +9 -0
  915. package/dist/layouts/shared/pages/ShippingReturnsPage.d.ts +7 -0
  916. package/dist/layouts/shared/pages/ShippingReturnsPage.d.ts.map +1 -0
  917. package/dist/layouts/shared/pages/ShippingReturnsPage.js +7 -0
  918. package/dist/layouts/shared/pages/SizeGuidePage.d.ts +7 -0
  919. package/dist/layouts/shared/pages/SizeGuidePage.d.ts.map +1 -0
  920. package/dist/layouts/shared/pages/SizeGuidePage.js +10 -0
  921. package/dist/layouts/shared/pages/StyleGuidePage.d.ts +7 -0
  922. package/dist/layouts/shared/pages/StyleGuidePage.d.ts.map +1 -0
  923. package/dist/layouts/shared/pages/StyleGuidePage.js +126 -0
  924. package/dist/layouts/shared/pages/TeamPage.d.ts +7 -0
  925. package/dist/layouts/shared/pages/TeamPage.d.ts.map +1 -0
  926. package/dist/layouts/shared/pages/TeamPage.js +39 -0
  927. package/dist/layouts/shared/pages/TermsPage.d.ts +7 -0
  928. package/dist/layouts/shared/pages/TermsPage.d.ts.map +1 -0
  929. package/dist/layouts/shared/pages/TermsPage.js +9 -0
  930. package/dist/layouts/shared/pages/TrackOrderPage.d.ts +7 -0
  931. package/dist/layouts/shared/pages/TrackOrderPage.d.ts.map +1 -0
  932. package/dist/layouts/shared/pages/TrackOrderPage.js +379 -0
  933. package/dist/layouts/shared/pages/WishlistPage.d.ts +7 -0
  934. package/dist/layouts/shared/pages/WishlistPage.d.ts.map +1 -0
  935. package/dist/layouts/shared/pages/WishlistPage.js +144 -0
  936. package/dist/layouts/shared/wrappers/BookingAgendaLayout.d.ts +14 -0
  937. package/dist/layouts/shared/wrappers/BookingAgendaLayout.d.ts.map +1 -0
  938. package/dist/layouts/shared/wrappers/BookingAgendaLayout.js +152 -0
  939. package/dist/layouts/shared/wrappers/ClothingLayout.d.ts +10 -0
  940. package/dist/layouts/shared/wrappers/ClothingLayout.d.ts.map +1 -0
  941. package/dist/layouts/shared/wrappers/ClothingLayout.js +44 -0
  942. package/dist/layouts/shared/wrappers/ClothingMinimalLayout.d.ts +8 -0
  943. package/dist/layouts/shared/wrappers/ClothingMinimalLayout.d.ts.map +1 -0
  944. package/dist/layouts/shared/wrappers/ClothingMinimalLayout.js +48 -0
  945. package/dist/layouts/shared/wrappers/ElectronicsLayout.d.ts +8 -0
  946. package/dist/layouts/shared/wrappers/ElectronicsLayout.d.ts.map +1 -0
  947. package/dist/layouts/shared/wrappers/ElectronicsLayout.js +40 -0
  948. package/dist/layouts/shared/wrappers/FoodModernLayout.d.ts +8 -0
  949. package/dist/layouts/shared/wrappers/FoodModernLayout.d.ts.map +1 -0
  950. package/dist/layouts/shared/wrappers/FoodModernLayout.js +48 -0
  951. package/dist/layouts/shared/wrappers/MotivationalLayout.d.ts +8 -0
  952. package/dist/layouts/shared/wrappers/MotivationalLayout.d.ts.map +1 -0
  953. package/dist/layouts/shared/wrappers/MotivationalLayout.js +51 -0
  954. package/dist/layouts/shared/wrappers/StandardLayout.d.ts +8 -0
  955. package/dist/layouts/shared/wrappers/StandardLayout.d.ts.map +1 -0
  956. package/dist/layouts/shared/wrappers/StandardLayout.js +45 -0
  957. package/dist/lib/alignment-schemas.d.ts +51 -0
  958. package/dist/lib/alignment-schemas.d.ts.map +1 -0
  959. package/dist/lib/alignment-schemas.js +637 -0
  960. package/dist/lib/api.d.ts +11 -0
  961. package/dist/lib/api.d.ts.map +1 -0
  962. package/dist/lib/api.js +167 -0
  963. package/dist/lib/auth-context.d.ts +49 -0
  964. package/dist/lib/auth-context.d.ts.map +1 -0
  965. package/dist/lib/auth-context.js +296 -0
  966. package/dist/lib/checkout-availability.d.ts +10 -0
  967. package/dist/lib/checkout-availability.d.ts.map +1 -0
  968. package/dist/lib/checkout-availability.js +16 -0
  969. package/dist/lib/compact-array-items.d.ts +7 -0
  970. package/dist/lib/compact-array-items.d.ts.map +1 -0
  971. package/dist/lib/compact-array-items.js +13 -0
  972. package/dist/lib/content-selectors.d.ts +21 -0
  973. package/dist/lib/content-selectors.d.ts.map +1 -0
  974. package/dist/lib/content-selectors.js +75 -0
  975. package/dist/lib/countries.d.ts +13 -0
  976. package/dist/lib/countries.d.ts.map +1 -0
  977. package/dist/lib/countries.js +292 -0
  978. package/dist/lib/currency-symbols.d.ts +36 -0
  979. package/dist/lib/currency-symbols.d.ts.map +1 -0
  980. package/dist/lib/currency-symbols.js +153 -0
  981. package/dist/lib/guest-user.d.ts +27 -0
  982. package/dist/lib/guest-user.d.ts.map +1 -0
  983. package/dist/lib/guest-user.js +71 -0
  984. package/dist/lib/inventory-utils.d.ts +41 -0
  985. package/dist/lib/inventory-utils.d.ts.map +1 -0
  986. package/dist/lib/inventory-utils.js +180 -0
  987. package/dist/lib/layout-badges.d.ts +4 -0
  988. package/dist/lib/layout-badges.d.ts.map +1 -0
  989. package/dist/lib/layout-badges.js +5 -0
  990. package/dist/lib/layout-config-hydration.d.ts +25 -0
  991. package/dist/lib/layout-config-hydration.d.ts.map +1 -0
  992. package/dist/lib/layout-config-hydration.js +264 -0
  993. package/dist/lib/layout-field-normalize.d.ts +18 -0
  994. package/dist/lib/layout-field-normalize.d.ts.map +1 -0
  995. package/dist/lib/layout-field-normalize.js +190 -0
  996. package/dist/lib/layout-route-utils.d.ts +30 -0
  997. package/dist/lib/layout-route-utils.d.ts.map +1 -0
  998. package/dist/lib/layout-route-utils.js +79 -0
  999. package/dist/lib/limited-time-offer.d.ts +6 -0
  1000. package/dist/lib/limited-time-offer.d.ts.map +1 -0
  1001. package/dist/lib/limited-time-offer.js +24 -0
  1002. package/dist/lib/loading-context.d.ts +20 -0
  1003. package/dist/lib/loading-context.d.ts.map +1 -0
  1004. package/dist/lib/loading-context.js +212 -0
  1005. package/dist/lib/mock-stores.d.ts +24 -0
  1006. package/dist/lib/mock-stores.d.ts.map +1 -0
  1007. package/dist/lib/mock-stores.js +2106 -0
  1008. package/dist/lib/order-success-cart.d.ts +5 -0
  1009. package/dist/lib/order-success-cart.d.ts.map +1 -0
  1010. package/dist/lib/order-success-cart.js +50 -0
  1011. package/dist/lib/payaza-checkout.d.ts +147 -0
  1012. package/dist/lib/payaza-checkout.d.ts.map +1 -0
  1013. package/dist/lib/payaza-checkout.js +717 -0
  1014. package/dist/lib/payaza-section-styles.d.ts +16 -0
  1015. package/dist/lib/payaza-section-styles.d.ts.map +1 -0
  1016. package/dist/lib/payaza-section-styles.js +93 -0
  1017. package/dist/lib/preview-data.d.ts +58 -0
  1018. package/dist/lib/preview-data.d.ts.map +1 -0
  1019. package/dist/lib/preview-data.js +2576 -0
  1020. package/dist/lib/product-variation-utils.d.ts +8 -0
  1021. package/dist/lib/product-variation-utils.d.ts.map +1 -0
  1022. package/dist/lib/product-variation-utils.js +101 -0
  1023. package/dist/lib/rich-html.d.ts +38 -0
  1024. package/dist/lib/rich-html.d.ts.map +1 -0
  1025. package/dist/lib/rich-html.js +272 -0
  1026. package/dist/lib/services/analytics.service.d.ts +59 -0
  1027. package/dist/lib/services/analytics.service.d.ts.map +1 -0
  1028. package/dist/lib/services/analytics.service.js +382 -0
  1029. package/dist/lib/services/auth.service.d.ts +63 -0
  1030. package/dist/lib/services/auth.service.d.ts.map +1 -0
  1031. package/dist/lib/services/auth.service.js +101 -0
  1032. package/dist/lib/services/booking.service.d.ts +53 -0
  1033. package/dist/lib/services/booking.service.d.ts.map +1 -0
  1034. package/dist/lib/services/booking.service.js +52 -0
  1035. package/dist/lib/services/category.service.d.ts +21 -0
  1036. package/dist/lib/services/category.service.d.ts.map +1 -0
  1037. package/dist/lib/services/category.service.js +41 -0
  1038. package/dist/lib/services/checkout.service.d.ts +168 -0
  1039. package/dist/lib/services/checkout.service.d.ts.map +1 -0
  1040. package/dist/lib/services/checkout.service.js +48 -0
  1041. package/dist/lib/services/contact.service.d.ts +26 -0
  1042. package/dist/lib/services/contact.service.d.ts.map +1 -0
  1043. package/dist/lib/services/contact.service.js +23 -0
  1044. package/dist/lib/services/customer.service.d.ts +54 -0
  1045. package/dist/lib/services/customer.service.d.ts.map +1 -0
  1046. package/dist/lib/services/customer.service.js +64 -0
  1047. package/dist/lib/services/fees.service.d.ts +85 -0
  1048. package/dist/lib/services/fees.service.d.ts.map +1 -0
  1049. package/dist/lib/services/fees.service.js +147 -0
  1050. package/dist/lib/services/index.d.ts +19 -0
  1051. package/dist/lib/services/index.d.ts.map +1 -0
  1052. package/dist/lib/services/index.js +18 -0
  1053. package/dist/lib/services/location.service.d.ts +31 -0
  1054. package/dist/lib/services/location.service.d.ts.map +1 -0
  1055. package/dist/lib/services/location.service.js +25 -0
  1056. package/dist/lib/services/order.service.d.ts +5 -0
  1057. package/dist/lib/services/order.service.d.ts.map +1 -0
  1058. package/dist/lib/services/order.service.js +12 -0
  1059. package/dist/lib/services/payment.service.d.ts +56 -0
  1060. package/dist/lib/services/payment.service.d.ts.map +1 -0
  1061. package/dist/lib/services/payment.service.js +122 -0
  1062. package/dist/lib/services/product.service.d.ts +92 -0
  1063. package/dist/lib/services/product.service.d.ts.map +1 -0
  1064. package/dist/lib/services/product.service.js +86 -0
  1065. package/dist/lib/services/promo.service.d.ts +31 -0
  1066. package/dist/lib/services/promo.service.d.ts.map +1 -0
  1067. package/dist/lib/services/promo.service.js +29 -0
  1068. package/dist/lib/services/review.service.d.ts +47 -0
  1069. package/dist/lib/services/review.service.d.ts.map +1 -0
  1070. package/dist/lib/services/review.service.js +54 -0
  1071. package/dist/lib/services/service.service.d.ts +55 -0
  1072. package/dist/lib/services/service.service.d.ts.map +1 -0
  1073. package/dist/lib/services/service.service.js +37 -0
  1074. package/dist/lib/services/shipping.service.d.ts +62 -0
  1075. package/dist/lib/services/shipping.service.d.ts.map +1 -0
  1076. package/dist/lib/services/shipping.service.js +39 -0
  1077. package/dist/lib/services/store.service.d.ts +89 -0
  1078. package/dist/lib/services/store.service.d.ts.map +1 -0
  1079. package/dist/lib/services/store.service.js +41 -0
  1080. package/dist/lib/shipping-address.util.d.ts +76 -0
  1081. package/dist/lib/shipping-address.util.d.ts.map +1 -0
  1082. package/dist/lib/shipping-address.util.js +149 -0
  1083. package/dist/lib/shipping-settings.util.d.ts +4 -0
  1084. package/dist/lib/shipping-settings.util.d.ts.map +1 -0
  1085. package/dist/lib/shipping-settings.util.js +6 -0
  1086. package/dist/lib/store-config-utils.d.ts +50 -0
  1087. package/dist/lib/store-config-utils.d.ts.map +1 -0
  1088. package/dist/lib/store-config-utils.js +1713 -0
  1089. package/dist/lib/store-config.d.ts +4 -0
  1090. package/dist/lib/store-config.d.ts.map +1 -0
  1091. package/dist/lib/store-config.js +4 -0
  1092. package/dist/lib/store-context.d.ts +69 -0
  1093. package/dist/lib/store-context.d.ts.map +1 -0
  1094. package/dist/lib/store-context.js +456 -0
  1095. package/dist/lib/store-types.d.ts +921 -0
  1096. package/dist/lib/store-types.d.ts.map +1 -0
  1097. package/dist/lib/store-types.js +1 -0
  1098. package/dist/lib/template-pages.d.ts +8 -0
  1099. package/dist/lib/template-pages.d.ts.map +1 -0
  1100. package/dist/lib/template-pages.js +62 -0
  1101. package/dist/lib/utils/asset-helpers.d.ts +111 -0
  1102. package/dist/lib/utils/asset-helpers.d.ts.map +1 -0
  1103. package/dist/lib/utils/asset-helpers.js +462 -0
  1104. package/dist/lib/utils/catalog-price-bounds.d.ts +13 -0
  1105. package/dist/lib/utils/catalog-price-bounds.d.ts.map +1 -0
  1106. package/dist/lib/utils/catalog-price-bounds.js +24 -0
  1107. package/dist/lib/utils/category-tree.d.ts +25 -0
  1108. package/dist/lib/utils/category-tree.d.ts.map +1 -0
  1109. package/dist/lib/utils/category-tree.js +85 -0
  1110. package/dist/lib/utils/demo-detection.d.ts +23 -0
  1111. package/dist/lib/utils/demo-detection.d.ts.map +1 -0
  1112. package/dist/lib/utils/demo-detection.js +36 -0
  1113. package/dist/lib/utils/editor-preview.d.ts +42 -0
  1114. package/dist/lib/utils/editor-preview.d.ts.map +1 -0
  1115. package/dist/lib/utils/editor-preview.js +214 -0
  1116. package/dist/lib/utils/fee-calculations.d.ts +35 -0
  1117. package/dist/lib/utils/fee-calculations.d.ts.map +1 -0
  1118. package/dist/lib/utils/fee-calculations.js +81 -0
  1119. package/dist/lib/utils/footer-nav-defaults.d.ts +11 -0
  1120. package/dist/lib/utils/footer-nav-defaults.d.ts.map +1 -0
  1121. package/dist/lib/utils/footer-nav-defaults.js +67 -0
  1122. package/dist/lib/utils/idempotency-key.d.ts +15 -0
  1123. package/dist/lib/utils/idempotency-key.d.ts.map +1 -0
  1124. package/dist/lib/utils/idempotency-key.js +22 -0
  1125. package/dist/lib/utils/index.d.ts +45 -0
  1126. package/dist/lib/utils/index.d.ts.map +1 -0
  1127. package/dist/lib/utils/index.js +197 -0
  1128. package/dist/lib/utils/mobile-editor.d.ts +13 -0
  1129. package/dist/lib/utils/mobile-editor.d.ts.map +1 -0
  1130. package/dist/lib/utils/mobile-editor.js +34 -0
  1131. package/dist/lib/utils/phone-format.d.ts +6 -0
  1132. package/dist/lib/utils/phone-format.d.ts.map +1 -0
  1133. package/dist/lib/utils/phone-format.js +17 -0
  1134. package/dist/lib/utils/product-catalog.d.ts +11 -0
  1135. package/dist/lib/utils/product-catalog.d.ts.map +1 -0
  1136. package/dist/lib/utils/product-catalog.js +40 -0
  1137. package/dist/lib/utils/product-images.d.ts +20 -0
  1138. package/dist/lib/utils/product-images.d.ts.map +1 -0
  1139. package/dist/lib/utils/product-images.js +31 -0
  1140. package/dist/lib/utils/product-share.d.ts +17 -0
  1141. package/dist/lib/utils/product-share.d.ts.map +1 -0
  1142. package/dist/lib/utils/product-share.js +48 -0
  1143. package/dist/lib/utils/scroll-to-top.util.d.ts +9 -0
  1144. package/dist/lib/utils/scroll-to-top.util.d.ts.map +1 -0
  1145. package/dist/lib/utils/scroll-to-top.util.js +18 -0
  1146. package/dist/lib/utils/url-helpers.d.ts +30 -0
  1147. package/dist/lib/utils/url-helpers.d.ts.map +1 -0
  1148. package/dist/lib/utils/url-helpers.js +61 -0
  1149. package/dist/lib/utils/video-helpers.d.ts +32 -0
  1150. package/dist/lib/utils/video-helpers.d.ts.map +1 -0
  1151. package/dist/lib/utils/video-helpers.js +210 -0
  1152. package/dist/preview/LayoutPreview.d.ts +14 -0
  1153. package/dist/preview/LayoutPreview.d.ts.map +1 -0
  1154. package/dist/preview/LayoutPreview.js +122 -0
  1155. package/dist/preview/PreviewRouter.d.ts +9 -0
  1156. package/dist/preview/PreviewRouter.d.ts.map +1 -0
  1157. package/dist/preview/PreviewRouter.js +332 -0
  1158. package/dist/preview/ShadowDOMWrapper.d.ts +18 -0
  1159. package/dist/preview/ShadowDOMWrapper.d.ts.map +1 -0
  1160. package/dist/preview/ShadowDOMWrapper.js +80 -0
  1161. package/dist/preview/canvas/PreviewBlockToolbar.d.ts +23 -0
  1162. package/dist/preview/canvas/PreviewBlockToolbar.d.ts.map +1 -0
  1163. package/dist/preview/canvas/PreviewBlockToolbar.js +113 -0
  1164. package/dist/preview/canvas/PreviewCanvasEnhancer.d.ts +17 -0
  1165. package/dist/preview/canvas/PreviewCanvasEnhancer.d.ts.map +1 -0
  1166. package/dist/preview/canvas/PreviewCanvasEnhancer.js +741 -0
  1167. package/dist/preview/canvas/PreviewCanvasStyles.d.ts +4 -0
  1168. package/dist/preview/canvas/PreviewCanvasStyles.d.ts.map +1 -0
  1169. package/dist/preview/canvas/PreviewCanvasStyles.js +51 -0
  1170. package/dist/preview/canvas/extract-editable-plain-text.d.ts +11 -0
  1171. package/dist/preview/canvas/extract-editable-plain-text.d.ts.map +1 -0
  1172. package/dist/preview/canvas/extract-editable-plain-text.js +65 -0
  1173. package/dist/preview/canvas/field-key.d.ts +34 -0
  1174. package/dist/preview/canvas/field-key.d.ts.map +1 -0
  1175. package/dist/preview/canvas/field-key.js +62 -0
  1176. package/dist/preview/canvas/preview-editable-commit.util.d.ts +3 -0
  1177. package/dist/preview/canvas/preview-editable-commit.util.d.ts.map +1 -0
  1178. package/dist/preview/canvas/preview-editable-commit.util.js +11 -0
  1179. package/dist/preview/canvas/preview-flush-await.d.ts +6 -0
  1180. package/dist/preview/canvas/preview-flush-await.d.ts.map +1 -0
  1181. package/dist/preview/canvas/preview-flush-await.js +23 -0
  1182. package/dist/preview/canvas/preview-flush-handle.d.ts +13 -0
  1183. package/dist/preview/canvas/preview-flush-handle.d.ts.map +1 -0
  1184. package/dist/preview/canvas/preview-flush-handle.js +3 -0
  1185. package/dist/preview/canvas/preview-isolation.d.ts +9 -0
  1186. package/dist/preview/canvas/preview-isolation.d.ts.map +1 -0
  1187. package/dist/preview/canvas/preview-isolation.js +10 -0
  1188. package/dist/preview/canvas/preview-messages.d.ts +65 -0
  1189. package/dist/preview/canvas/preview-messages.d.ts.map +1 -0
  1190. package/dist/preview/canvas/preview-messages.js +17 -0
  1191. package/dist/preview/canvas/preview-route.d.ts +4 -0
  1192. package/dist/preview/canvas/preview-route.d.ts.map +1 -0
  1193. package/dist/preview/canvas/preview-route.js +76 -0
  1194. package/dist/preview/index.d.ts +13 -0
  1195. package/dist/preview/index.d.ts.map +1 -0
  1196. package/dist/preview/index.js +12 -0
  1197. package/dist/preview/route-audit.d.ts +17 -0
  1198. package/dist/preview/route-audit.d.ts.map +1 -0
  1199. package/dist/preview/route-audit.js +54 -0
  1200. package/dist/styles/index.css +10598 -0
  1201. package/dist/utils/date.d.ts +20 -0
  1202. package/dist/utils/date.d.ts.map +1 -0
  1203. package/dist/utils/date.js +47 -0
  1204. package/package.json +192 -0
@@ -0,0 +1,1226 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useMemo, useEffect, useLayoutEffect, useRef, useCallback } from 'react';
3
+ import { previewRouteToPageId } from '../../preview/canvas/preview-route.js';
4
+ import { EditorHeader } from '../shared/EditorHeader.js';
5
+ import { useEditorChromeMetrics } from '../shared/useEditorChromeMetrics.js';
6
+ import { EditorNavigator } from '../shared/EditorNavigator.js';
7
+ import { ResizableSidebar } from '../shared/ResizableSidebar.js';
8
+ import { moveSectionKeyInPageOrder, normalizeEditorLayoutId, resolveSectionKeyOrderForPage, storeConfigToEnvelope, } from '../document/index.js';
9
+ import { applyEditorCatalogOverlay } from '../../lib/utils/editor-preview.js';
10
+ import { payazaSectionStyleKey, getPayazaSectionStyleEntries } from '../../lib/payaza-section-styles.js';
11
+ import { getPageSchema } from './engine.js';
12
+ import { loadLayoutJSON } from './layout-loader.js';
13
+ import { transformToStoreConfig, updateOverlayData, addArrayItem, removeArrayItem, updateArrayItem, readOverlayFieldValue } from './data-transformer.js';
14
+ import { generateArrayItem } from './engine.js';
15
+ import { initializeWidgetRegistry, clearWidgets } from './widget-registry.js';
16
+ import { mergeRequirementAllPagesWithActualData, mergeAllPagesWithActualData, } from './data-merger.js';
17
+ import { Settings2, Box, Palette, Layers, Monitor, PanelLeft, ChevronLeft } from 'lucide-react';
18
+ import { useDebounce } from '../../hooks/use-debounce.js';
19
+ import { AIGenerateModal } from '../shared/AIGenerateModal.js';
20
+ import { useAlertModal } from '../../components/ui/alert-modal.js';
21
+ import { AssetSelectionProvider } from './AssetSelectionContext.js';
22
+ import { IframePreviewMessageBridge } from './IframePreviewMessageBridge.js';
23
+ import { EditorCanvasPreview } from './EditorCanvasPreview.js';
24
+ import { awaitPreviewFlushAck } from '../../preview/canvas/preview-flush-await.js';
25
+ import { BlockStylesInspector } from './components/BlockStylesInspector.js';
26
+ import { CanvasGranularInspector } from './components/CanvasGranularInspector.js';
27
+ import { SectionSchemaInspector } from './components/SectionSchemaInspector.js';
28
+ import { isLayoutPageEditable } from '../alignment-schemas/metadata.js';
29
+ import { resolveCanvasInspectorLeaf } from '../alignment-schemas/resolve-canvas-inspector-leaf.js';
30
+ import { isInlineCanvasTextElementKind } from '../../lib/utils/mobile-editor.js';
31
+ import { granularPathForArrayItem, granularPathForBlockFirstAttr, outlineTreeForSectionPayload, } from '../blocks/nav-outline-utils.js';
32
+ import { ActiveArrayFocusProvider, } from './ActiveArrayFocusContext.js';
33
+ import { EditorLayoutProvider } from './EditorLayoutContext.js';
34
+ import { isMobileEditorViewport, shouldUseInlineEditorPreview } from '../../lib/utils/mobile-editor.js';
35
+ /** Lightweight fingerprint for undo history on mobile — avoids JSON.stringify on large configs. */
36
+ function lightweightConfigFingerprint(config) {
37
+ try {
38
+ const layoutConfig = config.layoutConfig;
39
+ const pages = layoutConfig?.pages;
40
+ if (Array.isArray(pages)) {
41
+ return pages
42
+ .map((page) => {
43
+ const p = page;
44
+ const sections = p.sections;
45
+ if (!Array.isArray(sections))
46
+ return '';
47
+ return sections
48
+ .map((s) => {
49
+ const sec = s;
50
+ return String(sec.key ?? sec.id ?? '');
51
+ })
52
+ .join(',');
53
+ })
54
+ .join('|');
55
+ }
56
+ return String(config.layout ?? '');
57
+ }
58
+ catch {
59
+ return '';
60
+ }
61
+ }
62
+ function MobilePanelBackHeader({ title, onBack, }) {
63
+ return (_jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-[#dcdcde] bg-white px-2 py-2", children: [_jsxs("button", { type: "button", onClick: onBack, className: "flex shrink-0 items-center gap-0.5 rounded-lg px-1.5 py-1.5 text-[#440066] hover:bg-[#f4f5f7]", "aria-label": "Back to canvas", children: [_jsx(ChevronLeft, { className: "h-4 w-4", strokeWidth: 2, "aria-hidden": true }), _jsx("span", { className: "text-[13px] font-medium", children: "Back to canvas" })] }), _jsx("span", { className: "min-w-0 flex-1 truncate text-right text-[13px] font-semibold text-[#1b0029]", children: title })] }));
64
+ }
65
+ export const PayazaFormEditor = ({ layoutId, initialData, inventory, onChange, onSave, onPublish, onBack, onBackToSettings, onOpenAssets, onBackToTheme, title, className = '', customWidgets, storeName, storeDescription, assets, publishButtonText, onEditorDocumentChange, initialDataIsPublished, onEditorHydrated, preloadedBaseRequirement, catalogOverlay, headerStatusNote, mobileStatusBanner, draftSaveStatus, }) => {
66
+ const editorHeaderRef = useRef(null);
67
+ const mobileBottomNavRef = useRef(null);
68
+ const mobileMainRegionRef = useRef(null);
69
+ const isMobileViewRef = useRef(false);
70
+ const [activePageId, setActivePageId] = useState('home');
71
+ const [data, setData] = useState(initialData);
72
+ const dataRef = useRef(initialData);
73
+ // Stable snapshot of initialData — captured once at mount, never updated.
74
+ // Prevents the loadLayout effect from re-running (and resetting editor state)
75
+ // every time the parent saves and passes a new initialData reference.
76
+ const mountInitialDataRef = useRef(initialData);
77
+ // Undo/Redo State
78
+ const [history, setHistory] = useState([initialData]);
79
+ const [historyIndex, setHistoryIndex] = useState(0);
80
+ const historyRef = useRef([initialData]);
81
+ const historyIndexRef = useRef(0);
82
+ historyRef.current = history;
83
+ historyIndexRef.current = historyIndex;
84
+ const isInternalChange = useRef(false);
85
+ const useInlinePreview = shouldUseInlineEditorPreview();
86
+ const MAX_HISTORY = useInlinePreview ? 8 : 50;
87
+ // Track last published data to disable publish button if no changes.
88
+ // When initialDataIsPublished is explicitly false (a draft was loaded), start with null
89
+ // so hasChangesSincePublish is true immediately — the draft IS an unpublished change.
90
+ const [lastPublishedData, setLastPublishedData] = useState(initialDataIsPublished === false ? null : initialData);
91
+ // Debounce the data for preview to prevent excessive iframe updates and RAM spikes
92
+ const debouncedData = useDebounce(data, useInlinePreview ? 700 : 400);
93
+ const [viewMode, setViewMode] = useState('desktop');
94
+ const [previewZoom, setPreviewZoom] = useState('fit');
95
+ const [isSaving, setIsSaving] = useState(false);
96
+ const [isPublishing, setIsPublishing] = useState(false);
97
+ const [isAIModalOpen, setIsAIModalOpen] = useState(false);
98
+ const [isGeneratingAI, setIsGeneratingAI] = useState(false);
99
+ const [layoutJson, setLayoutJson] = useState(null);
100
+ const layoutJsonRef = useRef(null);
101
+ const [baseRequirement, setBaseRequirement] = useState(null);
102
+ const baseRequirementRef = useRef(null);
103
+ const activePageIdRef = useRef(activePageId);
104
+ const [loading, setLoading] = useState(true);
105
+ const [selectedSection, setSelectedSection] = useState(null);
106
+ const [canvasElementFocus, setCanvasElementFocus] = useState(null);
107
+ const [outlinePanelOpen, setOutlinePanelOpen] = useState(true);
108
+ /** Block inspector: Settings (fields) vs Styles (placeholder — theme-driven) */
109
+ const [blockSubTab, setBlockSubTab] = useState('settings');
110
+ const [interactionMode, setInteractionMode] = useState('edit');
111
+ const [activeArrayFocus, setActiveArrayFocus] = useState(null);
112
+ const [flushRequestId, setFlushRequestId] = useState(0);
113
+ const previewFlushRef = useRef(null);
114
+ const iframePreviewFlushRef = useRef(null);
115
+ const [mobilePanelView, setMobilePanelView] = useState('canvas');
116
+ const [isMobileView, setIsMobileView] = useState(false);
117
+ const { showAlert } = useAlertModal();
118
+ useEditorChromeMetrics({
119
+ headerRef: editorHeaderRef,
120
+ bottomNavRef: mobileBottomNavRef,
121
+ remountKey: isMobileView,
122
+ });
123
+ // Detect mobile viewport before first paint — UA for real phones + matchMedia for narrow desktop windows
124
+ useLayoutEffect(() => {
125
+ if (typeof window === 'undefined')
126
+ return;
127
+ const syncMobileView = () => {
128
+ const mobile = isMobileEditorViewport();
129
+ setIsMobileView(mobile);
130
+ isMobileViewRef.current = mobile;
131
+ };
132
+ syncMobileView();
133
+ const mq = window.matchMedia('(max-width: 767px)');
134
+ const onMqChange = () => syncMobileView();
135
+ window.addEventListener('orientationchange', syncMobileView);
136
+ window.addEventListener('resize', syncMobileView);
137
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
138
+ const mqAny = mq;
139
+ if (typeof mqAny.addEventListener === 'function') {
140
+ mq.addEventListener('change', onMqChange);
141
+ }
142
+ else if (typeof mqAny.addListener === 'function') {
143
+ mqAny.addListener(onMqChange);
144
+ }
145
+ return () => {
146
+ window.removeEventListener('orientationchange', syncMobileView);
147
+ window.removeEventListener('resize', syncMobileView);
148
+ if (typeof mqAny.removeEventListener === 'function') {
149
+ mq.removeEventListener('change', onMqChange);
150
+ }
151
+ else if (typeof mqAny.removeListener === 'function') {
152
+ mqAny.removeListener(onMqChange);
153
+ }
154
+ };
155
+ }, []);
156
+ // Real phones always use fit-to-width desktop preview (lighter than 1440px inline canvas).
157
+ useEffect(() => {
158
+ if (!isMobileView)
159
+ return;
160
+ setViewMode('desktop');
161
+ setPreviewZoom('fit');
162
+ setInteractionMode('edit');
163
+ }, [isMobileView]);
164
+ // Mobile inspector exposes Settings only — reset if Styles was active (e.g. resize from desktop).
165
+ useEffect(() => {
166
+ if (isMobileView && blockSubTab === 'styles') {
167
+ setBlockSubTab('settings');
168
+ }
169
+ }, [isMobileView, blockSubTab]);
170
+ // Lock body scroll on mobile while editor is mounted — prevents dashboard page scroll bleed-through
171
+ useEffect(() => {
172
+ if (!isMobileView)
173
+ return;
174
+ isMobileViewRef.current = true;
175
+ const scrollY = window.scrollY;
176
+ document.body.style.overflow = 'hidden';
177
+ document.body.style.position = 'fixed';
178
+ document.body.style.top = `-${scrollY}px`;
179
+ document.body.style.width = '100%';
180
+ return () => {
181
+ isMobileViewRef.current = false;
182
+ document.body.style.overflow = '';
183
+ document.body.style.position = '';
184
+ document.body.style.top = '';
185
+ document.body.style.width = '';
186
+ window.scrollTo(0, scrollY);
187
+ };
188
+ }, [isMobileView]);
189
+ const openMobileInspector = useCallback(() => {
190
+ if (isMobileViewRef.current) {
191
+ setMobilePanelView('inspector');
192
+ }
193
+ }, []);
194
+ // Touch refs for swipe gestures between panels
195
+ const touchStartX = useRef(null);
196
+ const touchStartY = useRef(null);
197
+ const flushPreviewEdits = useCallback(() => {
198
+ previewFlushRef.current?.flushActiveEdits();
199
+ iframePreviewFlushRef.current?.flushEdits();
200
+ setFlushRequestId((n) => n + 1);
201
+ }, []);
202
+ const flushPreviewEditsAndWait = useCallback(async () => {
203
+ const ackPromise = awaitPreviewFlushAck();
204
+ flushPreviewEdits();
205
+ await ackPromise;
206
+ }, [flushPreviewEdits]);
207
+ const handleActiveArrayFocusChange = useCallback((next) => {
208
+ setActiveArrayFocus(next);
209
+ if (next) {
210
+ setCanvasElementFocus(null);
211
+ setBlockSubTab('settings');
212
+ }
213
+ }, []);
214
+ const handleToggleOutlinePanel = useCallback(() => {
215
+ if (isMobileView) {
216
+ setMobilePanelView(v => v === 'outline' ? 'canvas' : 'outline');
217
+ }
218
+ else {
219
+ setOutlinePanelOpen(v => !v);
220
+ }
221
+ }, [isMobileView]);
222
+ const slideIndexSync = useMemo(() => {
223
+ if (!activeArrayFocus || activeArrayFocus.fieldKey !== 'sliders')
224
+ return null;
225
+ return {
226
+ sectionKey: activeArrayFocus.sectionKey,
227
+ arrayField: 'sliders',
228
+ index: activeArrayFocus.index,
229
+ };
230
+ }, [activeArrayFocus]);
231
+ const normalizedLayoutType = useMemo(() => normalizeEditorLayoutId(String(layoutId)), [layoutId]);
232
+ useEffect(() => {
233
+ layoutJsonRef.current = layoutJson;
234
+ }, [layoutJson]);
235
+ useEffect(() => {
236
+ baseRequirementRef.current = baseRequirement;
237
+ }, [baseRequirement]);
238
+ useEffect(() => {
239
+ activePageIdRef.current = activePageId;
240
+ }, [activePageId]);
241
+ // Keep dataRef in sync with data state and append undo history on external edits.
242
+ // historyIndex must NOT be in deps — including it caused infinite setHistoryIndex loops (React #185).
243
+ useEffect(() => {
244
+ dataRef.current = data;
245
+ if (!isInternalChange.current) {
246
+ const prev = historyRef.current;
247
+ const idx = historyIndexRef.current;
248
+ const newHistory = prev.slice(0, idx + 1);
249
+ const lastEntry = newHistory[newHistory.length - 1];
250
+ const isDuplicate = useInlinePreview
251
+ ? lightweightConfigFingerprint(lastEntry) === lightweightConfigFingerprint(data)
252
+ : JSON.stringify(lastEntry) === JSON.stringify(data);
253
+ if (!isDuplicate) {
254
+ let updatedHistory = [...newHistory, data];
255
+ if (updatedHistory.length > MAX_HISTORY) {
256
+ updatedHistory = updatedHistory.slice(updatedHistory.length - MAX_HISTORY);
257
+ }
258
+ const newIdx = updatedHistory.length - 1;
259
+ historyRef.current = updatedHistory;
260
+ historyIndexRef.current = newIdx;
261
+ setHistory(updatedHistory);
262
+ setHistoryIndex(newIdx);
263
+ }
264
+ }
265
+ isInternalChange.current = false;
266
+ }, [data, MAX_HISTORY, useInlinePreview]);
267
+ // Fix the history index after history trim (use ref to avoid React #185 loops)
268
+ useEffect(() => {
269
+ const idx = historyIndexRef.current;
270
+ if (history.length > 0 && idx >= history.length) {
271
+ const newIdx = history.length - 1;
272
+ historyIndexRef.current = newIdx;
273
+ setHistoryIndex(newIdx);
274
+ }
275
+ }, [history]);
276
+ const handleUndo = () => {
277
+ if (historyIndex > 0) {
278
+ isInternalChange.current = true;
279
+ const prevData = history[historyIndex - 1];
280
+ setHistoryIndex(historyIndex - 1);
281
+ setData(prevData);
282
+ onChange?.(prevData);
283
+ }
284
+ };
285
+ const handleRedo = () => {
286
+ if (historyIndex < history.length - 1) {
287
+ isInternalChange.current = true;
288
+ const nextData = history[historyIndex + 1];
289
+ setHistoryIndex(historyIndex + 1);
290
+ setData(nextData);
291
+ onChange?.(nextData);
292
+ }
293
+ };
294
+ // Keyboard Shortcuts
295
+ useEffect(() => {
296
+ const handleKeyDown = (e) => {
297
+ // Undo: Ctrl+Z or Cmd+Z
298
+ if ((e.ctrlKey || e.metaKey) && e.key === 'z' && !e.shiftKey) {
299
+ e.preventDefault();
300
+ handleUndo();
301
+ }
302
+ // Redo: Ctrl+Y or Cmd+Shift+Z
303
+ if (((e.ctrlKey || e.metaKey) && e.key === 'y') || ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === 'z')) {
304
+ e.preventDefault();
305
+ handleRedo();
306
+ }
307
+ // Save: Ctrl+S or Cmd+S
308
+ if ((e.ctrlKey || e.metaKey) && e.key === 's') {
309
+ e.preventDefault();
310
+ handleSave();
311
+ }
312
+ };
313
+ window.addEventListener('keydown', handleKeyDown);
314
+ return () => window.removeEventListener('keydown', handleKeyDown);
315
+ }, [historyIndex, history, data]); // Dependencies ensure latest state is used
316
+ // Initialize custom widgets if provided
317
+ useEffect(() => {
318
+ if (customWidgets) {
319
+ initializeWidgetRegistry({ widgets: customWidgets });
320
+ }
321
+ // Cleanup registry on unmount to prevent memory leaks and registry bloat
322
+ return () => {
323
+ clearWidgets();
324
+ };
325
+ }, [customWidgets]);
326
+ // Log store config data when editor opens
327
+ useEffect(() => {
328
+ if (process.env.NODE_ENV === 'development') {
329
+ console.log('[PayazaFormEditor] Store Config Data:', {
330
+ layoutId,
331
+ storeId: initialData?.id,
332
+ storeSlug: initialData?.slug,
333
+ storeName: initialData?.name,
334
+ hasLayoutConfig: !!initialData?.layoutConfig,
335
+ });
336
+ }
337
+ }, [layoutId, initialData]);
338
+ // Stable ref to onEditorHydrated — prevents the hydration effect from re-running on re-renders.
339
+ const onEditorHydratedRef = useRef(onEditorHydrated);
340
+ useEffect(() => { onEditorHydratedRef.current = onEditorHydrated; }, [onEditorHydrated]);
341
+ // One-shot: notify the host the moment loading transitions false for the first time.
342
+ const hydratedFiredRef = useRef(false);
343
+ useEffect(() => {
344
+ if (!loading && !hydratedFiredRef.current) {
345
+ hydratedFiredRef.current = true;
346
+ onEditorHydratedRef.current?.();
347
+ }
348
+ }, [loading]);
349
+ // Load layout JSON and merge with actual data
350
+ useEffect(() => {
351
+ let isMounted = true;
352
+ const loadLayout = async () => {
353
+ setLoading(true);
354
+ try {
355
+ const rawId = String(layoutId || '').trim().toLowerCase();
356
+ const normalizedId = normalizeEditorLayoutId(rawId) ?? rawId;
357
+ // Use preloaded requirement from the host when available — avoids a redundant
358
+ // synchronous schema-bridge call and eliminates the async microtask delay.
359
+ const layoutRequirement = preloadedBaseRequirement
360
+ ? preloadedBaseRequirement
361
+ : await loadLayoutJSON(normalizedId, inventory);
362
+ if (!isMounted)
363
+ return;
364
+ if (layoutRequirement) {
365
+ setBaseRequirement(layoutRequirement);
366
+ // Merge all pages from persisted StoreConfig so cross-page content (e.g. home
367
+ // hero sliders) stays hydrated even when the merchant edits another page header.
368
+ const mergedLayout = mergeRequirementAllPagesWithActualData(layoutRequirement, mountInitialDataRef.current);
369
+ setLayoutJson(mergedLayout);
370
+ // Project every page into StoreConfig on first load — not only the active page.
371
+ let storeConfig = mountInitialDataRef.current;
372
+ for (const page of mergedLayout.pages) {
373
+ storeConfig = transformToStoreConfig(mergedLayout, page.id, storeConfig);
374
+ }
375
+ setData(storeConfig);
376
+ // Don't call onChange here to avoid loops on initial load
377
+ }
378
+ else {
379
+ console.error(`[PayazaFormEditor] Failed to load layout requirement for: ${layoutId} (normalized: ${normalizedId})`);
380
+ }
381
+ }
382
+ catch (error) {
383
+ console.error('[PayazaFormEditor] Error loading layout:', error);
384
+ }
385
+ finally {
386
+ if (isMounted) {
387
+ setLoading(false);
388
+ }
389
+ }
390
+ };
391
+ loadLayout();
392
+ return () => {
393
+ isMounted = false;
394
+ };
395
+ // eslint-disable-next-line react-hooks/exhaustive-deps
396
+ }, [layoutId, inventory]); // intentionally omit initialData/preloadedBaseRequirement — use mountInitialDataRef.current instead
397
+ // Merge host-injected catalog (products/categories/services) into preview data.
398
+ useEffect(() => {
399
+ if (!catalogOverlay)
400
+ return;
401
+ const hasCatalog = (catalogOverlay.products?.length ?? 0) > 0 ||
402
+ (catalogOverlay.categories?.length ?? 0) > 0 ||
403
+ (catalogOverlay.services?.length ?? 0) > 0;
404
+ if (!hasCatalog)
405
+ return;
406
+ setData((prev) => {
407
+ const next = applyEditorCatalogOverlay(prev, catalogOverlay, layoutId);
408
+ dataRef.current = next;
409
+ return next;
410
+ });
411
+ }, [catalogOverlay, layoutId]);
412
+ /**
413
+ * Build a full multi-page overlay for envelope compile, auto-save, and publish.
414
+ * Re-projects every page from StoreConfig so editing one page header cannot reset
415
+ * another page (e.g. home hero sliders while editing products header).
416
+ */
417
+ const resolveOverlayForPersist = useCallback(() => {
418
+ const base = baseRequirementRef.current;
419
+ const liveLayout = layoutJsonRef.current;
420
+ if (!base)
421
+ return liveLayout;
422
+ let overlay = mergeRequirementAllPagesWithActualData(base, dataRef.current);
423
+ const activeId = activePageIdRef.current;
424
+ // Preserve in-memory overlay edits for every hydrated page, not only the active one.
425
+ if (liveLayout) {
426
+ overlay = {
427
+ ...overlay,
428
+ pages: overlay.pages.map((p) => {
429
+ const live = liveLayout.pages.find((lp) => lp.id === p.id);
430
+ if (live?._hydrated === true && p.id !== activeId) {
431
+ return { ...live, _hydrated: true };
432
+ }
433
+ return p;
434
+ }),
435
+ };
436
+ }
437
+ const livePage = liveLayout?.pages.find((p) => p.id === activeId);
438
+ if (livePage && activeId) {
439
+ overlay = {
440
+ ...overlay,
441
+ pages: overlay.pages.map((p) => p.id === activeId ? { ...livePage, _hydrated: true } : p),
442
+ };
443
+ }
444
+ return overlay;
445
+ }, []);
446
+ useEffect(() => {
447
+ if (!normalizedLayoutType || !onEditorDocumentChange)
448
+ return;
449
+ const t = window.setTimeout(() => {
450
+ try {
451
+ const overlay = resolveOverlayForPersist();
452
+ const doc = storeConfigToEnvelope(dataRef.current, {
453
+ layoutType: normalizedLayoutType,
454
+ templateType: 'home',
455
+ templateId: `${activePageIdRef.current}-template`,
456
+ }, overlay);
457
+ onEditorDocumentChange(doc);
458
+ }
459
+ catch (e) {
460
+ if (process.env.NODE_ENV === 'development') {
461
+ console.warn('[PayazaFormEditor] onEditorDocumentChange failed', e);
462
+ }
463
+ }
464
+ }, 400);
465
+ return () => window.clearTimeout(t);
466
+ }, [data, normalizedLayoutType, activePageId, layoutJson, onEditorDocumentChange, resolveOverlayForPersist]);
467
+ // Re-merge data when page changes
468
+ useEffect(() => {
469
+ // Only proceed if we have the base requirement
470
+ // Don't block on loading or initialData - use current data state instead
471
+ if (!baseRequirement) {
472
+ return;
473
+ }
474
+ // Get current data from ref to avoid dependency loop
475
+ const currentData = dataRef.current;
476
+ // Re-merge every page from StoreConfig so non-active pages (e.g. home hero) are not
477
+ // reset to schema defaults when the merchant switches to products or other headers.
478
+ const mergedLayout = mergeRequirementAllPagesWithActualData(baseRequirement, currentData);
479
+ setLayoutJson(mergedLayout);
480
+ // Project every page back into StoreConfig so switching pages never drops home hero
481
+ // or other previously edited page headers from the live editor state.
482
+ let mergedStoreConfig = currentData;
483
+ for (const page of mergedLayout.pages) {
484
+ mergedStoreConfig = transformToStoreConfig(mergedLayout, page.id, mergedStoreConfig);
485
+ }
486
+ if (process.env.NODE_ENV === 'development') {
487
+ console.log('[PayazaFormEditor] Page changed, setting merged StoreConfig for preview:', {
488
+ pageId: activePageId,
489
+ hasLayoutConfig: !!mergedStoreConfig.layoutConfig,
490
+ });
491
+ }
492
+ setData(mergedStoreConfig);
493
+ // Removed layoutJson from dependencies to avoid redundant loops
494
+ }, [activePageId, baseRequirement]);
495
+ // Keep a full page list for labels even when some pages are hidden from the editor UI.
496
+ const allPages = useMemo(() => {
497
+ if (layoutJson) {
498
+ return layoutJson.pages.map(p => ({ id: p.id, name: p.label }));
499
+ }
500
+ return [{ id: 'home', name: 'Home Page' }];
501
+ }, [layoutJson]);
502
+ // Hide pages that exist in the runtime router but are not meant to be edited from List View.
503
+ const pages = useMemo(() => {
504
+ const editorLayoutId = normalizedLayoutType ?? String(layoutId);
505
+ return allPages.filter((page) => isLayoutPageEditable(editorLayoutId, page.id));
506
+ }, [allPages, normalizedLayoutType, layoutId]);
507
+ const currentPageLabel = useMemo(() => {
508
+ return allPages.find((p) => p.id === activePageId)?.name || activePageId;
509
+ }, [allPages, activePageId]);
510
+ // Get current page schema and data
511
+ const pageSchema = useMemo(() => {
512
+ if (!layoutJson)
513
+ return null;
514
+ return getPageSchema(activePageId, layoutJson);
515
+ }, [layoutJson, activePageId]);
516
+ /** Block tree / outline order (optional `sectionOrder` on page). */
517
+ const navigatorSections = useMemo(() => {
518
+ if (!pageSchema || !layoutJson)
519
+ return [];
520
+ const page = layoutJson.pages.find((p) => p.id === activePageId);
521
+ if (!page)
522
+ return [];
523
+ const schema = pageSchema.schema;
524
+ const keys = resolveSectionKeyOrderForPage(page);
525
+ return keys
526
+ .filter((k) => schema[k])
527
+ .map((key) => {
528
+ const sch = schema[key];
529
+ return {
530
+ id: key,
531
+ label: sch?.label ?? sch?._label ?? key,
532
+ };
533
+ });
534
+ }, [pageSchema, layoutJson, activePageId]);
535
+ /** Full template outline: every page → ordered sections (left navigator). Excludes _nonEditable sections. */
536
+ const outlinePages = useMemo(() => {
537
+ if (!layoutJson)
538
+ return [];
539
+ const editorLayoutId = normalizedLayoutType ?? String(layoutId);
540
+ return layoutJson.pages
541
+ .filter((page) => isLayoutPageEditable(editorLayoutId, page.id))
542
+ .map((page) => {
543
+ const ps = getPageSchema(page.id, layoutJson);
544
+ if (!ps)
545
+ return { pageId: page.id, pageLabel: page.label, sections: [] };
546
+ const keys = resolveSectionKeyOrderForPage(page).filter((k) => {
547
+ if (!ps.schema[k])
548
+ return false;
549
+ const sch = ps.schema[k];
550
+ return !sch._nonEditable;
551
+ });
552
+ const sections = keys.map((key) => {
553
+ const schemaNode = ps.schema[key];
554
+ const pdata = ps.data[key];
555
+ const nested = outlineTreeForSectionPayload(key, pdata);
556
+ return {
557
+ id: key,
558
+ label: schemaNode.label ?? schemaNode._label ?? key,
559
+ nested,
560
+ visible: pdata?.show !== false,
561
+ };
562
+ });
563
+ return { pageId: page.id, pageLabel: page.label, sections };
564
+ });
565
+ }, [layoutJson, normalizedLayoutType, layoutId]);
566
+ const applyOutlineBlockFocus = useCallback((targetPageId, sectionId, node) => {
567
+ if (!layoutJson)
568
+ return;
569
+ flushPreviewEdits();
570
+ if (targetPageId !== activePageId)
571
+ setActivePageId(targetPageId);
572
+ setSelectedSection(sectionId);
573
+ const ps = getPageSchema(targetPageId, layoutJson);
574
+ const payload = ps?.data[sectionId];
575
+ const path = node.blockPathInSection;
576
+ setBlockSubTab('settings');
577
+ if (path[0] === 'sliders' && path.length >= 2 && /^\d+$/.test(path[1] ?? '')) {
578
+ handleActiveArrayFocusChange({
579
+ sectionKey: sectionId,
580
+ fieldKey: 'sliders',
581
+ index: parseInt(path[1], 10),
582
+ });
583
+ }
584
+ else if (path[0] === 'sliders' && path.length === 1) {
585
+ handleActiveArrayFocusChange({ sectionKey: sectionId, fieldKey: 'sliders', index: 0 });
586
+ }
587
+ else {
588
+ const granular = granularPathForBlockFirstAttr(payload, path) ??
589
+ granularPathForArrayItem(payload, path);
590
+ if (granular) {
591
+ setCanvasElementFocus({
592
+ layoutId: normalizedLayoutType ?? String(layoutId),
593
+ pageId: targetPageId,
594
+ sectionKey: sectionId,
595
+ fieldPath: granular.path,
596
+ elementKind: granular.elementKind,
597
+ });
598
+ }
599
+ else {
600
+ setCanvasElementFocus(null);
601
+ }
602
+ }
603
+ requestAnimationFrame(() => {
604
+ document
605
+ .querySelector(`[data-section-key="${sectionId}"]`)
606
+ ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
607
+ document
608
+ .querySelector(`[data-array-field="sliders"]`)
609
+ ?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
610
+ });
611
+ }, [layoutJson, activePageId, normalizedLayoutType, layoutId, flushPreviewEdits, handleActiveArrayFocusChange]);
612
+ const navigatorOutlineGranularity = useMemo(() => {
613
+ if (!canvasElementFocus?.fieldPath?.length)
614
+ return null;
615
+ return {
616
+ pageId: canvasElementFocus.pageId ?? activePageId,
617
+ sectionKey: canvasElementFocus.sectionKey,
618
+ fieldPath: canvasElementFocus.fieldPath,
619
+ };
620
+ }, [canvasElementFocus, activePageId]);
621
+ const handleSelectSectionInPage = useCallback((pageId, sectionId) => {
622
+ flushPreviewEdits();
623
+ setCanvasElementFocus(null);
624
+ setActiveArrayFocus(null);
625
+ if (pageId !== activePageId) {
626
+ setActivePageId(pageId);
627
+ }
628
+ setSelectedSection(sectionId);
629
+ setBlockSubTab('settings');
630
+ openMobileInspector();
631
+ requestAnimationFrame(() => {
632
+ document
633
+ .querySelector(`[data-section-key="${sectionId}"]`)
634
+ ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
635
+ });
636
+ }, [activePageId, flushPreviewEdits, openMobileInspector]);
637
+ const activeSlideBreadcrumbLabel = useMemo(() => {
638
+ if (!activeArrayFocus ||
639
+ activeArrayFocus.sectionKey !== selectedSection ||
640
+ activeArrayFocus.fieldKey !== 'sliders') {
641
+ return null;
642
+ }
643
+ return `Slide ${activeArrayFocus.index + 1}`;
644
+ }, [activeArrayFocus, selectedSection]);
645
+ const centerTemplateLabel = useMemo(() => {
646
+ return currentPageLabel;
647
+ }, [currentPageLabel]);
648
+ const selectedSectionLabel = useMemo(() => {
649
+ if (!selectedSection)
650
+ return null;
651
+ return navigatorSections.find((s) => s.id === selectedSection)?.label ?? selectedSection;
652
+ }, [selectedSection, navigatorSections]);
653
+ const selectedSectionStyleSupports = useMemo(() => {
654
+ if (!pageSchema || !selectedSection)
655
+ return undefined;
656
+ const sch = pageSchema.schema[selectedSection];
657
+ if (!sch || typeof sch !== 'object')
658
+ return undefined;
659
+ return sch._styleSupports;
660
+ }, [pageSchema, selectedSection]);
661
+ const selectedBlockStyleEntries = useMemo(() => selectedSection
662
+ ? getPayazaSectionStyleEntries(data, activePageId, selectedSection)
663
+ : {}, [data, activePageId, selectedSection]);
664
+ const granularInspectorActive = useMemo(() => Boolean(canvasElementFocus?.fieldPath?.length &&
665
+ canvasElementFocus.elementKind !== 'group' &&
666
+ canvasElementFocus.sectionKey === selectedSection &&
667
+ pageSchema &&
668
+ layoutJson), [canvasElementFocus, selectedSection, pageSchema, layoutJson]);
669
+ const granularBreadcrumbLabel = useMemo(() => {
670
+ if (!canvasElementFocus?.fieldPath?.length || !pageSchema)
671
+ return null;
672
+ const sk = canvasElementFocus.sectionKey;
673
+ const meta = resolveCanvasInspectorLeaf(pageSchema.schema, sk, canvasElementFocus.fieldPath, pageSchema.data[sk], canvasElementFocus.elementKind);
674
+ return meta?.breadcrumbLabel ?? null;
675
+ }, [canvasElementFocus, pageSchema]);
676
+ const rawGroupStyle = useMemo(() => {
677
+ if (!canvasElementFocus || canvasElementFocus.elementKind !== 'group' || !layoutJson)
678
+ return {};
679
+ const raw = readOverlayFieldValue(layoutJson, activePageId, canvasElementFocus.sectionKey, [...canvasElementFocus.fieldPath, 'attributes', 'payazaStyle']);
680
+ if (!raw || typeof raw !== 'object')
681
+ return {};
682
+ const out = {};
683
+ for (const [k, v] of Object.entries(raw)) {
684
+ if (typeof v === 'string')
685
+ out[k] = v;
686
+ }
687
+ return out;
688
+ }, [canvasElementFocus, layoutJson, activePageId]);
689
+ const handleBlockStylesChange = useCallback((sectionKey, styles) => {
690
+ const id = payazaSectionStyleKey(activePageId, sectionKey);
691
+ setData((prev) => {
692
+ const prevMap = { ...(prev.layoutConfig?.payazaSectionStyles || {}) };
693
+ if (!styles || Object.keys(styles).length === 0)
694
+ delete prevMap[id];
695
+ else
696
+ prevMap[id] = styles;
697
+ const nextData = {
698
+ ...prev,
699
+ layoutConfig: {
700
+ ...prev.layoutConfig,
701
+ payazaSectionStyles: prevMap,
702
+ },
703
+ };
704
+ onChange?.(nextData);
705
+ return nextData;
706
+ });
707
+ }, [activePageId, onChange]);
708
+ const handleReorderSection = useCallback((sectionId, direction) => {
709
+ if (!layoutJson)
710
+ return;
711
+ const nextOverlay = moveSectionKeyInPageOrder(layoutJson, activePageId, sectionId, direction);
712
+ setLayoutJson(nextOverlay);
713
+ const storeConfig = transformToStoreConfig(nextOverlay, activePageId, data);
714
+ setData(storeConfig);
715
+ onChange?.(storeConfig);
716
+ }, [layoutJson, activePageId, data, onChange]);
717
+ const handleToggleSectionVisibility = useCallback((sectionKey) => {
718
+ if (!layoutJson)
719
+ return;
720
+ const page = layoutJson.pages.find((p) => p.id === activePageId);
721
+ const currentShow = page?.data?.[sectionKey]?.show !== false;
722
+ handleFieldChange(sectionKey, ['show'], !currentShow);
723
+ }, [layoutJson, activePageId]);
724
+ const handleToggleNodeVisibility = useCallback((pageId, sectionId, node) => {
725
+ handleFieldChange(sectionId, [...node.blockPathInSection, 'attributes', 'show'], !node.visible);
726
+ }, [layoutJson, activePageId]);
727
+ // Handle field change — always read overlay/page/data from refs so iframe canvas commits
728
+ // stay current after async layout hydration (stable preview callbacks must not capture stale state).
729
+ const handleFieldChange = (sectionKey, fieldPath, value) => {
730
+ const currentLayoutJson = layoutJsonRef.current;
731
+ if (!currentLayoutJson)
732
+ return;
733
+ const pageId = activePageIdRef.current;
734
+ const currentData = dataRef.current;
735
+ // Normalize path from FieldRenderer:
736
+ // root-level fields may send ['sectionKey', ...]; strip duplicated root key.
737
+ const candidatePath = fieldPath || [];
738
+ const actualFieldPath = candidatePath.length > 0 && candidatePath[0] === sectionKey
739
+ ? candidatePath.slice(1)
740
+ : candidatePath;
741
+ // Direct section replacement (e.g. root array sections)
742
+ if (actualFieldPath.length === 0) {
743
+ const updatedJson = { ...currentLayoutJson };
744
+ const pageIndex = updatedJson.pages.findIndex((p) => p.id === pageId);
745
+ if (pageIndex === -1)
746
+ return;
747
+ const page = { ...updatedJson.pages[pageIndex], data: { ...updatedJson.pages[pageIndex].data } };
748
+ page.data[sectionKey] = value;
749
+ updatedJson.pages[pageIndex] = { ...page, _hydrated: true };
750
+ layoutJsonRef.current = updatedJson;
751
+ setLayoutJson(updatedJson);
752
+ const storeConfig = transformToStoreConfig(updatedJson, pageId, currentData);
753
+ dataRef.current = storeConfig;
754
+ setData(storeConfig);
755
+ onChange?.(storeConfig);
756
+ return;
757
+ }
758
+ const updatedLayout = updateOverlayData(currentLayoutJson, pageId, sectionKey, actualFieldPath, value);
759
+ const pageIndex = updatedLayout.pages.findIndex((p) => p.id === pageId);
760
+ const withHydrated = pageIndex === -1
761
+ ? updatedLayout
762
+ : {
763
+ ...updatedLayout,
764
+ pages: updatedLayout.pages.map((p, i) => i === pageIndex ? { ...p, _hydrated: true } : p),
765
+ };
766
+ layoutJsonRef.current = withHydrated;
767
+ setLayoutJson(withHydrated);
768
+ // Merge with existing data to preserve all StoreConfig properties
769
+ const storeConfig = transformToStoreConfig(withHydrated, pageId, currentData);
770
+ dataRef.current = storeConfig;
771
+ setData(storeConfig);
772
+ onChange?.(storeConfig);
773
+ };
774
+ const handleFieldChangeRef = useRef(handleFieldChange);
775
+ handleFieldChangeRef.current = handleFieldChange;
776
+ // Handle array item change
777
+ const handleArrayItemChange = (sectionKey, arrayPath, index, itemValue) => {
778
+ if (!layoutJson)
779
+ return;
780
+ const updatedLayout = updateArrayItem(layoutJson, activePageId, sectionKey, arrayPath, index, itemValue);
781
+ setLayoutJson(updatedLayout);
782
+ layoutJsonRef.current = updatedLayout;
783
+ // Merge with existing data to preserve all StoreConfig properties
784
+ const storeConfig = transformToStoreConfig(updatedLayout, activePageId, data);
785
+ dataRef.current = storeConfig;
786
+ setData(storeConfig);
787
+ onChange?.(storeConfig);
788
+ };
789
+ // Handle array item add
790
+ const handleArrayItemAdd = (sectionKey, arrayPath, itemSchema) => {
791
+ if (!layoutJson)
792
+ return;
793
+ const newItem = generateArrayItem(itemSchema);
794
+ const updatedLayout = addArrayItem(layoutJson, activePageId, sectionKey, arrayPath, newItem);
795
+ setLayoutJson(updatedLayout);
796
+ layoutJsonRef.current = updatedLayout;
797
+ // Merge with existing data to preserve all StoreConfig properties
798
+ const storeConfig = transformToStoreConfig(updatedLayout, activePageId, data);
799
+ dataRef.current = storeConfig;
800
+ setData(storeConfig);
801
+ onChange?.(storeConfig);
802
+ };
803
+ // Handle array item remove
804
+ const handleArrayItemRemove = (sectionKey, arrayPath, index) => {
805
+ if (!layoutJson)
806
+ return;
807
+ const updatedLayout = removeArrayItem(layoutJson, activePageId, sectionKey, arrayPath, index);
808
+ setLayoutJson(updatedLayout);
809
+ layoutJsonRef.current = updatedLayout;
810
+ // Merge with existing data to preserve all StoreConfig properties
811
+ const storeConfig = transformToStoreConfig(updatedLayout, activePageId, data);
812
+ dataRef.current = storeConfig;
813
+ setData(storeConfig);
814
+ onChange?.(storeConfig);
815
+ };
816
+ const flushEditorEnvelope = useCallback(() => {
817
+ // Flush synchronously from refs so Save/Publish always sees the latest overlay edits,
818
+ // even when React state from the most recent field change has not re-rendered yet.
819
+ if (!onEditorDocumentChange || !normalizedLayoutType)
820
+ return null;
821
+ const overlay = resolveOverlayForPersist();
822
+ if (!overlay)
823
+ return null;
824
+ try {
825
+ const doc = storeConfigToEnvelope(dataRef.current, {
826
+ layoutType: normalizedLayoutType,
827
+ templateType: 'home',
828
+ templateId: `${activePageIdRef.current}-template`,
829
+ }, overlay);
830
+ onEditorDocumentChange(doc);
831
+ return doc;
832
+ }
833
+ catch {
834
+ return null;
835
+ }
836
+ }, [normalizedLayoutType, onEditorDocumentChange, resolveOverlayForPersist]);
837
+ const resolveConfigForPersist = useCallback(() => {
838
+ const overlay = resolveOverlayForPersist();
839
+ if (!overlay)
840
+ return dataRef.current;
841
+ let config = dataRef.current;
842
+ for (const page of overlay.pages) {
843
+ config = transformToStoreConfig(overlay, page.id, config);
844
+ }
845
+ return config;
846
+ }, [resolveOverlayForPersist]);
847
+ const awaitPendingFieldCommits = useCallback(async () => {
848
+ await flushPreviewEditsAndWait();
849
+ await new Promise((resolve) => setTimeout(resolve, 0));
850
+ await new Promise((resolve) => {
851
+ if (typeof window !== 'undefined' && typeof window.requestAnimationFrame === 'function') {
852
+ window.requestAnimationFrame(() => resolve());
853
+ }
854
+ else {
855
+ setTimeout(resolve, 0);
856
+ }
857
+ });
858
+ }, [flushPreviewEditsAndWait]);
859
+ const handleSave = async () => {
860
+ setIsSaving(true);
861
+ try {
862
+ await awaitPendingFieldCommits();
863
+ const flushedDoc = flushEditorEnvelope();
864
+ const freshConfig = resolveConfigForPersist();
865
+ await onSave?.(freshConfig, flushedDoc ?? undefined);
866
+ }
867
+ finally {
868
+ setIsSaving(false);
869
+ }
870
+ };
871
+ const handlePublish = async () => {
872
+ setIsPublishing(true);
873
+ try {
874
+ await awaitPendingFieldCommits();
875
+ const flushedDoc = flushEditorEnvelope();
876
+ const freshConfig = resolveConfigForPersist();
877
+ await onPublish?.(freshConfig, flushedDoc ?? undefined);
878
+ setLastPublishedData(freshConfig);
879
+ }
880
+ finally {
881
+ setIsPublishing(false);
882
+ }
883
+ };
884
+ const hasChangesSincePublish = useMemo(() => {
885
+ return lastPublishedData === null || JSON.stringify(data) !== JSON.stringify(lastPublishedData);
886
+ }, [data, lastPublishedData]);
887
+ const handleAIGenerate = async (context) => {
888
+ if (!layoutJson)
889
+ return;
890
+ setIsGeneratingAI(true);
891
+ // Use a local variable to track if this specific request should still update state
892
+ let shouldUpdate = true;
893
+ try {
894
+ let response;
895
+ try {
896
+ response = await fetch('/api/ai/generate', {
897
+ method: 'POST',
898
+ headers: { 'Content-Type': 'application/json' },
899
+ body: JSON.stringify({
900
+ ...context,
901
+ layoutId,
902
+ alignmentSchema: layoutJson,
903
+ existingData: data,
904
+ assets: assets || context.assets
905
+ })
906
+ });
907
+ }
908
+ catch (fetchError) {
909
+ // Handle network errors, CORS errors, etc.
910
+ throw new Error(fetchError.message || 'Network request failed. Please check your connection and try again.');
911
+ }
912
+ const contentType = response.headers.get('content-type');
913
+ if (!contentType || !contentType.includes('application/json')) {
914
+ const text = await response.text();
915
+ console.error('Non-JSON response received:', text);
916
+ throw new Error('The server returned an invalid response. Please ensure the AI endpoint is correctly configured.');
917
+ }
918
+ if (!response.ok) {
919
+ let errorMessage = 'Failed to generate content';
920
+ let errorDetails = '';
921
+ try {
922
+ const error = await response.json();
923
+ errorMessage = error.error || error.message || errorMessage;
924
+ errorDetails = error.details || '';
925
+ // Check if this is an API key configuration error
926
+ if (errorMessage.includes('AI API key not configured') || errorMessage.includes('GEMINI_API_KEY')) {
927
+ errorMessage = 'AI model configuration missing. The layout editor requires AI credentials to be configured in the host application (storefront-admin).';
928
+ errorDetails = 'Please add GEMINI_API_KEY and GEMINI_MODEL to storefront-admin/.env or storefront-admin/.env.local';
929
+ }
930
+ }
931
+ catch {
932
+ // If response is not JSON, use status text
933
+ errorMessage = response.statusText || `Server returned ${response.status} error`;
934
+ }
935
+ const fullErrorMessage = errorDetails
936
+ ? `${errorMessage}\n\n${errorDetails}`
937
+ : errorMessage;
938
+ throw new Error(fullErrorMessage);
939
+ }
940
+ const generatedData = await response.json();
941
+ if (!shouldUpdate)
942
+ return;
943
+ // Update layoutJson with generated data for each page
944
+ const updatedLayout = { ...layoutJson };
945
+ updatedLayout.pages = updatedLayout.pages.map(page => {
946
+ if (generatedData[page.id]) {
947
+ return {
948
+ ...page,
949
+ data: generatedData[page.id]
950
+ };
951
+ }
952
+ return page;
953
+ });
954
+ setLayoutJson(updatedLayout);
955
+ // CRITICAL: Merge ALL pages from the updated AI layout into the StoreConfig
956
+ // to ensure the StoreConfig is fully updated for all pages.
957
+ // We set actualDataPrecedence to false so AI data takes precedence.
958
+ const updatedStoreConfig = mergeAllPagesWithActualData(updatedLayout, data, { actualDataPrecedence: false });
959
+ setData(updatedStoreConfig);
960
+ onChange?.(updatedStoreConfig);
961
+ // Optional: Add a small delay and a "polishing" step for specific layouts like food
962
+ if (layoutId === 'food' || layoutId === 'food-modern') {
963
+ console.log('[PayazaFormEditor] Applying restaurant-specific content polishing...');
964
+ // In the future, we could add a second lighter AI pass here specifically for
965
+ // appetizing adjectives and culinary context.
966
+ }
967
+ setIsAIModalOpen(false);
968
+ if (process.env.NODE_ENV === 'development') {
969
+ console.log('[PayazaFormEditor] AI Generation Successful:', updatedStoreConfig);
970
+ }
971
+ }
972
+ catch (error) {
973
+ if (shouldUpdate) {
974
+ console.error('AI Generation Error:', error);
975
+ // Determine error type and message
976
+ let errorTitle = 'AI Generation Failed';
977
+ let errorMessage = 'We encountered an issue while generating content.';
978
+ let actionableMessage = 'Please try again. If the problem persists, you can continue editing manually.';
979
+ // Extract error message from various error types
980
+ let errorText = '';
981
+ if (error instanceof Error) {
982
+ errorText = error.message.toLowerCase();
983
+ }
984
+ else if (typeof error === 'string') {
985
+ errorText = error.toLowerCase();
986
+ }
987
+ else if (error && typeof error === 'object' && 'message' in error) {
988
+ errorText = String(error.message).toLowerCase();
989
+ }
990
+ // Handle specific error cases
991
+ if (errorText.includes('network') || errorText.includes('fetch') || errorText.includes('failed to fetch') ||
992
+ errorText.includes('ai generation fetch failed') || errorText.includes('network request failed')) {
993
+ errorTitle = 'Connection Problem';
994
+ errorMessage = 'Unable to connect to the AI service.';
995
+ actionableMessage = 'Please check your internet connection and try again.';
996
+ }
997
+ else if (errorText.includes('timeout') || errorText.includes('aborted')) {
998
+ errorTitle = 'Request Timed Out';
999
+ errorMessage = 'The AI service is taking longer than expected to respond.';
1000
+ actionableMessage = 'Please try again in a moment. The service may be experiencing high demand.';
1001
+ }
1002
+ else if (errorText.includes('500') || errorText.includes('server error') || errorText.includes('internal server')) {
1003
+ errorTitle = 'Service Temporarily Unavailable';
1004
+ errorMessage = 'The AI service is experiencing technical difficulties.';
1005
+ actionableMessage = 'Please try again in a few moments. If the issue continues, contact support.';
1006
+ }
1007
+ else if (errorText.includes('400') || errorText.includes('bad request')) {
1008
+ errorTitle = 'Invalid Request';
1009
+ errorMessage = 'There was an issue with the generation request.';
1010
+ actionableMessage = 'Please try again with different content or contact support if the issue persists.';
1011
+ }
1012
+ else if (errorText.includes('api key') || errorText.includes('ai api key not configured') || errorText.includes('gemini_api_key') ||
1013
+ errorText.includes('ai model configuration missing') || errorText.includes('unauthorized') || errorText.includes('403') || errorText.includes('401')) {
1014
+ errorTitle = 'AI Configuration Required';
1015
+ errorMessage = 'The AI service requires configuration in the host application.';
1016
+ actionableMessage = 'Please add GEMINI_API_KEY and GEMINI_MODEL to storefront-admin/.env or storefront-admin/.env.local. The layout editor uses the host application\'s environment variables for AI model configuration.';
1017
+ }
1018
+ else if (errorText.includes('quota') || errorText.includes('429') || errorText.includes('rate limit')) {
1019
+ errorTitle = 'Service Limit Reached';
1020
+ errorMessage = 'The AI service has reached its usage limit.';
1021
+ actionableMessage = 'Please try again later or contact support to increase your service limits.';
1022
+ }
1023
+ else if (error instanceof Error) {
1024
+ errorMessage = error.message || 'An unexpected error occurred.';
1025
+ }
1026
+ else if (typeof error === 'string') {
1027
+ errorMessage = error;
1028
+ }
1029
+ showAlert(`${errorMessage} ${actionableMessage}`, 'error', {
1030
+ title: errorTitle,
1031
+ confirmText: 'Try Again',
1032
+ cancelText: 'Continue Editing',
1033
+ showCancel: true,
1034
+ onConfirm: () => {
1035
+ setIsAIModalOpen(true);
1036
+ },
1037
+ onCancel: () => {
1038
+ setIsAIModalOpen(false);
1039
+ }
1040
+ });
1041
+ }
1042
+ }
1043
+ finally {
1044
+ if (shouldUpdate) {
1045
+ setIsGeneratingAI(false);
1046
+ }
1047
+ }
1048
+ // This is a bit of a hack since handleAIGenerate is not an effect,
1049
+ // but it helps prevent state updates if the user closes the modal or navigates away.
1050
+ // In a real scenario, we might want to use AbortController.
1051
+ };
1052
+ const previewEditorContext = useMemo(() => ({
1053
+ layoutId: normalizedLayoutType ?? String(layoutId),
1054
+ activePageId,
1055
+ }), [normalizedLayoutType, layoutId, activePageId]);
1056
+ const handlePreviewRouteChange = useCallback((route) => {
1057
+ const editorLayoutId = normalizedLayoutType ?? String(layoutId);
1058
+ const nextPageId = previewRouteToPageId(route, editorLayoutId);
1059
+ if (nextPageId &&
1060
+ nextPageId !== activePageId &&
1061
+ isLayoutPageEditable(editorLayoutId, nextPageId)) {
1062
+ setActivePageId(nextPageId);
1063
+ setSelectedSection(null);
1064
+ setCanvasElementFocus(null);
1065
+ setActiveArrayFocus(null);
1066
+ }
1067
+ }, [normalizedLayoutType, layoutId, activePageId]);
1068
+ const handlePreviewSectionSelected = useCallback((sectionKey) => {
1069
+ setSelectedSection(sectionKey);
1070
+ openMobileInspector();
1071
+ requestAnimationFrame(() => {
1072
+ document
1073
+ .querySelector(`[data-section-key="${sectionKey}"]`)
1074
+ ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
1075
+ });
1076
+ }, [openMobileInspector]);
1077
+ const handlePreviewFieldCommit = useCallback((payload) => {
1078
+ let value = payload.richText ?? payload.valueText;
1079
+ if (payload.elementKind === 'rating') {
1080
+ const parsed = Number(payload.valueText);
1081
+ value = Number.isFinite(parsed)
1082
+ ? Math.min(5, Math.max(1, Math.round(parsed)))
1083
+ : 5;
1084
+ }
1085
+ handleFieldChangeRef.current(payload.sectionKey, payload.fieldPath, value);
1086
+ }, []);
1087
+ const handlePreviewElementFocus = useCallback((p) => {
1088
+ const inlineTextEdit = isInlineCanvasTextElementKind(p.elementKind);
1089
+ setCanvasElementFocus(p);
1090
+ setSelectedSection(p.sectionKey);
1091
+ setBlockSubTab('settings');
1092
+ if (isMobileViewRef.current) {
1093
+ if (inlineTextEdit) {
1094
+ setMobilePanelView('canvas');
1095
+ }
1096
+ else {
1097
+ openMobileInspector();
1098
+ }
1099
+ }
1100
+ if (p.fieldPath[0] === 'items' && /^\d+$/.test(p.fieldPath[1] ?? '')) {
1101
+ setActiveArrayFocus({
1102
+ sectionKey: p.sectionKey,
1103
+ fieldKey: 'items',
1104
+ index: parseInt(p.fieldPath[1], 10),
1105
+ });
1106
+ }
1107
+ else if (p.fieldPath[0] === 'sliders' && /^\d+$/.test(p.fieldPath[1] ?? '')) {
1108
+ setActiveArrayFocus({
1109
+ sectionKey: p.sectionKey,
1110
+ fieldKey: 'sliders',
1111
+ index: parseInt(p.fieldPath[1], 10),
1112
+ });
1113
+ }
1114
+ if (!isMobileViewRef.current || !inlineTextEdit) {
1115
+ requestAnimationFrame(() => {
1116
+ document
1117
+ .querySelector(`[data-section-key="${p.sectionKey}"]`)
1118
+ ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
1119
+ });
1120
+ }
1121
+ }, [openMobileInspector]);
1122
+ const handlePreviewFocusSidebarSection = useCallback((sectionKey) => {
1123
+ setSelectedSection(sectionKey);
1124
+ setBlockSubTab('settings');
1125
+ openMobileInspector();
1126
+ requestAnimationFrame(() => {
1127
+ document
1128
+ .querySelector(`[data-section-key="${sectionKey}"]`)
1129
+ ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
1130
+ });
1131
+ }, [openMobileInspector]);
1132
+ if (loading) {
1133
+ return (_jsxs("div", { className: "flex h-full flex-col overflow-hidden bg-[#F7F5F0] font-sans", children: [_jsxs("div", { className: "flex min-h-[72px] shrink-0 items-center justify-between border-b border-[#e6e9ee] bg-white/95 px-4 py-2 md:px-5", children: [_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "h-10 w-10 animate-pulse rounded-xl bg-slate-100" }), _jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "h-3 w-28 animate-pulse rounded bg-slate-100" }), _jsx("div", { className: "h-2 w-20 animate-pulse rounded bg-slate-100" })] })] }), _jsxs("div", { className: "flex gap-3", children: [_jsx("div", { className: "h-10 w-24 animate-pulse rounded-xl bg-slate-100" }), _jsx("div", { className: "h-10 w-28 animate-pulse rounded-xl bg-slate-100" })] })] }), _jsxs("div", { className: "flex min-h-0 flex-1", children: [_jsx("div", { className: "flex flex-1 items-center justify-center bg-[#e2e4e7] p-8", children: _jsx("div", { className: "h-full min-h-[200px] w-full max-w-4xl animate-pulse rounded-lg bg-white/60 shadow-inner ring-1 ring-[#e8e8e8]" }) }), _jsxs("div", { className: "w-[380px] space-y-8 border-l border-[#dcdcde] bg-white p-6", children: [_jsxs("div", { className: "space-y-4", children: [_jsx("div", { className: "w-32 h-4 bg-slate-50 animate-pulse rounded" }), _jsx("div", { className: "w-full h-12 bg-slate-50 animate-pulse rounded-xl" })] }), _jsx("div", { className: "space-y-6", children: [1, 2, 3, 4].map(i => (_jsx("div", { className: "w-full h-20 bg-slate-50 animate-pulse rounded-2xl" }, i))) })] })] })] }));
1134
+ }
1135
+ if (!layoutJson || !pageSchema) {
1136
+ return (_jsx("div", { className: "flex items-center justify-center h-full", children: _jsx("div", { className: "text-slate-400", children: "Layout not found" }) }));
1137
+ }
1138
+ // Inspector inner content — shared between desktop ResizableSidebar and mobile overlay
1139
+ const inspectorContent = (_jsxs("div", { className: "relative flex h-full flex-col bg-[#fbfbfc]", id: "tour-editor-sidebar", children: [_jsxs("div", { "data-payaza-sidebar": "inspector", className: "sticky top-0 z-30 bg-[#fbfbfc]", children: [!isMobileView && (_jsxs("div", { className: "flex min-h-[48px] items-center gap-2 border-b border-[#dcdcde] px-3 py-2", children: [_jsx(Box, { className: `h-4 w-4 shrink-0 ${selectedSection ? 'text-[#440066]' : 'text-[#c3c4c7]'}`, strokeWidth: 2, "aria-hidden": true }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: `truncate text-[12px] font-semibold leading-tight ${selectedSection ? 'text-[#1b0029]' : 'text-[#787c82]'}`, children: selectedSection ? (selectedSectionLabel ?? selectedSection) : 'Block Inspector' }), selectedSection && (_jsx("p", { className: "truncate text-[11px] leading-tight text-[#787c82]", children: pages.find((p) => p.id === activePageId)?.name ?? activePageId }))] })] })), _jsxs("div", { "data-payaza-sidebar-tabs": true, className: "-mb-px flex border-b border-[#dcdcde]", role: "tablist", "aria-label": "Block inspector", children: [_jsxs("button", { type: "button", role: "tab", "aria-selected": blockSubTab === 'settings', title: "Settings", onClick: () => setBlockSubTab('settings'), className: `relative mb-[-1px] flex items-center justify-center gap-1.5 border-b-[3px] px-3 py-2.5 text-[12px] font-semibold transition-colors ${blockSubTab === 'settings'
1140
+ ? 'border-[#440066] font-bold text-[#1b0029]'
1141
+ : 'border-transparent font-medium text-[#646970] hover:bg-white/70 hover:text-[#1b0029]'}`, children: [_jsx(Settings2, { size: 17, strokeWidth: 2, "aria-hidden": true }), _jsx("span", { children: "Settings" })] }), !isMobileView && (_jsxs("button", { type: "button", role: "tab", "aria-selected": blockSubTab === 'styles', title: "Styles", onClick: () => setBlockSubTab('styles'), className: `relative mb-[-1px] flex items-center justify-center gap-1.5 border-b-[3px] px-3 py-2.5 text-[12px] font-semibold transition-colors ${blockSubTab === 'styles'
1142
+ ? 'border-[#440066] font-bold text-[#1b0029]'
1143
+ : 'border-transparent font-medium text-[#646970] hover:bg-white/70 hover:text-[#1b0029]'}`, children: [_jsx(Palette, { size: 17, strokeWidth: 2, "aria-hidden": true }), _jsx("span", { children: "Styles" })] }))] })] }), _jsx("div", { className: "payaza-form-editor custom-scrollbar isolate min-h-0 flex-1 overflow-y-auto scroll-pt-1 bg-white px-2 py-0", children: !selectedSection ? (_jsxs("div", { className: "flex flex-col items-center justify-center px-5 py-16 text-center", children: [_jsx(Box, { className: "mb-3 h-8 w-8 text-[#dcdcde]", strokeWidth: 1.5, "aria-hidden": true }), _jsx("p", { className: "text-[13px] font-semibold text-[#50575e]", children: "No block selected" }), _jsx("p", { className: "mt-1.5 max-w-[200px] text-[12px] leading-relaxed text-[#787c82]", children: "Click on any section in the canvas or select one from the List View." })] })) : blockSubTab === 'styles' && !isMobileView ? (canvasElementFocus?.elementKind === 'group' ? (_jsx(BlockStylesInspector, { supports: { spacing: true, colors: true, border: true, typography: true }, value: rawGroupStyle, onChange: (next) => {
1144
+ if (canvasElementFocus) {
1145
+ handleFieldChange(canvasElementFocus.sectionKey, [...canvasElementFocus.fieldPath, 'attributes', 'payazaStyle'], next);
1146
+ }
1147
+ } })) : (_jsxs(_Fragment, { children: [granularInspectorActive && (_jsx("div", { className: "border-b border-[#e8e9ec] bg-[#fafafa] px-4 py-2.5", children: _jsxs("p", { className: "text-[11px] text-[#787c82]", children: ["Styles apply to the ", _jsx("strong", { className: "font-medium text-[#1b0029]", children: selectedSectionLabel ?? 'section' }), " containing this element."] }) })), _jsx(BlockStylesInspector, { supports: selectedSectionStyleSupports, value: selectedBlockStyleEntries, onChange: (next) => selectedSection && handleBlockStylesChange(selectedSection, next) })] }))) : canvasElementFocus?.elementKind === 'group' ? (_jsxs("div", { className: "px-4 py-6", children: [_jsxs("div", { className: "mb-4 flex items-center gap-2", children: [_jsx(Layers, { className: "h-4 w-4 shrink-0 text-[#440066]", strokeWidth: 2, "aria-hidden": true }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "text-[13px] font-semibold text-[#1b0029]", children: "Group" }), _jsx("p", { className: "truncate text-[11px] text-[#787c82]", children: canvasElementFocus.fieldPath.join(' › ') })] })] }), _jsxs("p", { className: "text-[12px] text-[#646970]", children: ["Switch to the ", _jsx("strong", { className: "font-medium text-[#1b0029]", children: "Styles" }), " tab to edit group layout, spacing, and colors."] })] })) : granularInspectorActive && canvasElementFocus && layoutJson && pageSchema ? (_jsxs(_Fragment, { children: [granularBreadcrumbLabel ? (_jsxs("div", { className: "border-b border-[#e8e9ec] bg-[#fafafa] px-4 py-2.5", children: [_jsx("p", { className: "text-[10px] font-semibold uppercase tracking-wider text-[#1b0029]/40", children: "Editing" }), _jsx("p", { className: "mt-0.5 truncate text-[13px] font-semibold text-[#1b0029]", children: granularBreadcrumbLabel })] })) : null, _jsx(CanvasGranularInspector, { layoutJson: layoutJson, activePageId: activePageId, sectionKey: canvasElementFocus.sectionKey, fieldPath: canvasElementFocus.fieldPath, elementKind: canvasElementFocus.elementKind, pageSchemaRecord: pageSchema.schema, sectionData: pageSchema.data[canvasElementFocus.sectionKey], onChange: (sk, fp, val) => handleFieldChange(sk, fp, val) })] })) : selectedSection && pageSchema?.schema[selectedSection] ? (_jsx(SectionSchemaInspector, { sectionKey: selectedSection, sectionSchema: pageSchema.schema[selectedSection], sectionData: pageSchema.data[selectedSection], onFieldChange: (sk, fp, val) => handleFieldChange(sk, fp, val) })) : (_jsx("div", { className: "flex flex-col items-center justify-center px-5 py-12 text-center", children: _jsx("p", { className: "text-[13px] text-[#646970]", children: "Select a section in the List View or click the canvas to begin editing." }) })) })] }));
1148
+ return (_jsx(EditorLayoutProvider, { value: { layoutId: normalizedLayoutType ?? String(layoutId) }, children: _jsxs(AssetSelectionProvider, { onOpenAssets: onOpenAssets, assets: assets, children: [!useInlinePreview ? (_jsx(IframePreviewMessageBridge, { editorContext: previewEditorContext, onRouteChange: handlePreviewRouteChange, onSectionSelected: handlePreviewSectionSelected, onFieldCommit: handlePreviewFieldCommit, onSectionReorder: handleReorderSection, onPreviewElementFocus: handlePreviewElementFocus, onFocusSidebarSection: handlePreviewFocusSidebarSection })) : null, _jsx(ActiveArrayFocusProvider, { sectionKey: selectedSection, focus: activeArrayFocus, onFocusChange: handleActiveArrayFocusChange, onBeforeIndexChange: flushPreviewEdits, children: _jsxs("div", { className: `flex h-full min-h-0 flex-col bg-[#F7F5F0] ${className} font-sans antialiased text-[#1b0029]`, children: [_jsx(EditorHeader, { layoutName: layoutJson.layoutName || layoutId, storeName: storeName, storeLogo: initialData?.branding?.logo, activePage: activePageId, pages: pages, onPageSwitch: setActivePageId, showPageSwitcher: false, showPageContextCard: false, currentPageLabel: currentPageLabel, onSave: handleSave, onPublish: onPublish && hasChangesSincePublish ? handlePublish : undefined, onBack: onBack, onBackToSettings: onBackToSettings, onOpenAssets: onOpenAssets, onBackToTheme: onBackToTheme, onUndo: handleUndo, onRedo: handleRedo, canUndo: historyIndex > 0, canRedo: historyIndex < history.length - 1, viewMode: viewMode, onViewModeChange: setViewMode, previewZoom: previewZoom, onPreviewZoomChange: setPreviewZoom, editorType: "payaza-form", isSaving: isSaving, isPublishing: isPublishing, onGenerateAI: () => setIsAIModalOpen(true), isGeneratingAI: isGeneratingAI, publishButtonText: publishButtonText, centerTemplateLabel: centerTemplateLabel, outlinePanelOpen: isMobileView ? mobilePanelView === 'outline' : outlinePanelOpen, onToggleOutlinePanel: handleToggleOutlinePanel, interactionMode: interactionMode, onInteractionModeChange: setInteractionMode, isMobileChrome: isMobileView, headerRef: editorHeaderRef, headerStatusNote: headerStatusNote, mobileStatusBanner: mobileStatusBanner, draftSaveStatus: draftSaveStatus }), _jsx(AIGenerateModal, { isOpen: isAIModalOpen, onClose: () => setIsAIModalOpen(false), onGenerate: handleAIGenerate, initialContext: {
1149
+ storeName: storeName || data?.name || '',
1150
+ storeDescription: storeDescription || data?.description || '',
1151
+ assets: assets || [],
1152
+ }, isGenerating: isGeneratingAI }), _jsxs("div", { ref: mobileMainRegionRef, className: "relative flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs("div", { className: "flex min-h-0 flex-1 overflow-hidden", children: [!isMobileView && outlinePanelOpen && (_jsx(ResizableSidebar, { side: "left", initialWidth: 220, minWidth: 160, maxWidth: 400, children: _jsx(EditorNavigator, { className: "w-full min-w-0 border-r-0", outlinePages: outlinePages, activePageId: activePageId, onSelectPage: (pageId) => {
1153
+ setActivePageId(pageId);
1154
+ setSelectedSection(null);
1155
+ }, selectedSectionId: selectedSection, onSelectSectionInPage: handleSelectSectionInPage, onReorderSection: handleReorderSection, onToggleSectionVisibility: handleToggleSectionVisibility, outlineGranularity: navigatorOutlineGranularity, onOutlineTreeActivate: applyOutlineBlockFocus, onToggleNodeVisibility: handleToggleNodeVisibility }) })), _jsxs("div", { className: `flex min-w-0 flex-1 flex-col overflow-hidden bg-[#e2e4e7] ${isMobileView && mobilePanelView !== 'canvas' ? 'invisible' : ''}`, style: isMobileView ? { touchAction: 'pan-y' } : undefined, "aria-hidden": isMobileView && mobilePanelView !== 'canvas', onTouchStart: (e) => {
1156
+ if (e.touches.length === 0)
1157
+ return;
1158
+ touchStartX.current = e.touches[0].clientX;
1159
+ touchStartY.current = e.touches[0].clientY;
1160
+ }, onTouchEnd: (e) => {
1161
+ if (!isMobileView || touchStartX.current === null || touchStartY.current === null)
1162
+ return;
1163
+ if (e.changedTouches.length === 0)
1164
+ return;
1165
+ const dx = e.changedTouches[0].clientX - touchStartX.current;
1166
+ const dy = e.changedTouches[0].clientY - touchStartY.current;
1167
+ touchStartX.current = null;
1168
+ touchStartY.current = null;
1169
+ if (Math.abs(dx) <= Math.abs(dy) || Math.abs(dx) < 60)
1170
+ return;
1171
+ if (dx > 0)
1172
+ setMobilePanelView('outline');
1173
+ else if (selectedSection)
1174
+ setMobilePanelView('inspector');
1175
+ }, children: [_jsxs("div", { className: "relative min-h-0 flex-1 overflow-hidden", children: [_jsx(EditorCanvasPreview, { layoutId: layoutId, config: debouncedData, activePageId: activePageId, viewMode: viewMode, previewZoom: previewZoom, selectedSection: selectedSection, focusedField: canvasElementFocus, interactionMode: isMobileView ? 'edit' : interactionMode, slideIndexSync: slideIndexSync, flushRequestId: flushRequestId, editorContext: previewEditorContext, onRouteChange: handlePreviewRouteChange, onSectionSelected: handlePreviewSectionSelected, onFieldCommit: handlePreviewFieldCommit, onSectionReorder: handleReorderSection, onPreviewElementFocus: handlePreviewElementFocus, onFocusSidebarSection: handlePreviewFocusSidebarSection, previewFlushRef: previewFlushRef, iframePreviewFlushRef: iframePreviewFlushRef }), selectedSectionLabel && interactionMode === 'edit' && mobilePanelView === 'canvas' && (_jsx("div", { className: "pointer-events-none absolute left-1/2 z-30 max-w-[min(100%-2rem,360px)] -translate-x-1/2", style: { bottom: 'calc(8px + env(safe-area-inset-bottom, 0px))' }, children: _jsxs("div", { className: "pointer-events-auto flex items-center gap-2 rounded-sm border border-[#dcdcde] bg-white px-2.5 py-1.5 shadow-sm", children: [_jsx(Box, { className: "h-3.5 w-3.5 shrink-0 text-[#1b0029]/45", strokeWidth: 2, "aria-hidden": true }), _jsx("span", { className: "truncate text-[12px] text-[#1b0029]", children: selectedSectionLabel })] }) }))] }), !isMobileView && (_jsxs("div", { className: "flex shrink-0 flex-wrap items-center gap-x-1 gap-y-1 border-t border-[#dcdcde] bg-[#eef0f3] px-3 py-2.5 text-[12px]", style: { contain: 'layout style' }, "aria-label": "Editing context", children: [_jsx("span", { className: "rounded-full border border-[#dcdcde] bg-white px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.08em] text-[#646970]", children: "Editing" }), _jsx("span", { className: "truncate font-medium text-[#1b0029]", children: currentPageLabel }), selectedSectionLabel && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[#1b0029]/25", "aria-hidden": true, children: "/" }), _jsx("span", { className: "max-w-[min(60vw,280px)] truncate text-[#1b0029]/72", children: selectedSectionLabel })] })), activeSlideBreadcrumbLabel && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[#1b0029]/25", "aria-hidden": true, children: "/" }), _jsx("span", { className: "max-w-[min(40vw,160px)] truncate font-medium text-[#440066]", children: activeSlideBreadcrumbLabel })] })), canvasElementFocus?.fieldPath?.length ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[#1b0029]/25", "aria-hidden": true, children: "/" }), _jsx("span", { className: "max-w-[min(72vw,360px)] truncate font-medium text-[#440066]", title: granularBreadcrumbLabel ?? canvasElementFocus.fieldPath.join(' › '), children: granularBreadcrumbLabel ?? canvasElementFocus.fieldPath.join(' › ') })] })) : null, canvasElementFocus?.elementKind && canvasElementFocus.elementKind !== 'section' ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-[#1b0029]/25", "aria-hidden": true, children: "/" }), _jsx("span", { className: "truncate text-[11px] text-[#1b0029]/45", children: canvasElementFocus.elementKind === 'richHtml'
1176
+ ? 'Rich text'
1177
+ : canvasElementFocus.elementKind === 'image'
1178
+ ? 'Image'
1179
+ : canvasElementFocus.elementKind === 'icon'
1180
+ ? 'Icon'
1181
+ : canvasElementFocus.elementKind === 'rating'
1182
+ ? 'Star rating'
1183
+ : canvasElementFocus.elementKind === 'group'
1184
+ ? 'Group'
1185
+ : 'Plain text' })] })) : null] }))] }), !isMobileView && selectedSection && (_jsx(ResizableSidebar, { initialWidth: 280, minWidth: 220, maxWidth: 360, className: "border-l border-[#dcdcde] bg-[#fbfbfc]", children: inspectorContent }))] }), isMobileView && mobilePanelView === 'outline' && (_jsxs("div", { className: "absolute inset-0 z-[200] flex flex-col overflow-hidden bg-[#fffefb]", children: [_jsx(MobilePanelBackHeader, { title: "Layers", onBack: () => setMobilePanelView('canvas') }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: _jsx(EditorNavigator, { className: "w-full min-w-0 border-r-0", outlinePages: outlinePages, activePageId: activePageId, onSelectPage: (pageId) => {
1186
+ setActivePageId(pageId);
1187
+ setSelectedSection(null);
1188
+ setMobilePanelView('canvas');
1189
+ }, selectedSectionId: selectedSection, onSelectSectionInPage: (pageId, sectionId) => {
1190
+ handleSelectSectionInPage(pageId, sectionId);
1191
+ }, onReorderSection: handleReorderSection, onToggleSectionVisibility: handleToggleSectionVisibility, outlineGranularity: navigatorOutlineGranularity, onOutlineTreeActivate: (targetPageId, sectionId, node) => {
1192
+ applyOutlineBlockFocus(targetPageId, sectionId, node);
1193
+ setMobilePanelView('canvas');
1194
+ }, onToggleNodeVisibility: handleToggleNodeVisibility }) })] })), isMobileView && mobilePanelView === 'inspector' && (_jsxs("div", { className: "absolute inset-0 z-[200] flex flex-col overflow-hidden border-l border-[#dcdcde] bg-[#fbfbfc]", children: [_jsx(MobilePanelBackHeader, { title: selectedSectionLabel ?? 'Inspect', onBack: () => setMobilePanelView('canvas') }), selectedSection ? (_jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: inspectorContent })) : (_jsxs("div", { className: "flex flex-1 flex-col items-center justify-center px-6 py-12 text-center", children: [_jsx(Box, { className: "mb-3 h-8 w-8 text-[#dcdcde]", strokeWidth: 1.5, "aria-hidden": true }), _jsx("p", { className: "text-[13px] font-semibold text-[#50575e]", children: "No section selected" }), _jsx("p", { className: "mt-1.5 max-w-[240px] text-[12px] leading-relaxed text-[#787c82]", children: "Tap a section on the canvas to inspect and edit its settings." }), _jsx("button", { type: "button", onClick: () => setMobilePanelView('canvas'), className: "mt-4 rounded-lg border border-[#dcdcde] bg-white px-4 py-2 text-[13px] font-medium text-[#440066] hover:bg-[#f4f5f7]", children: "Back to canvas" })] }))] }))] }), isMobileView && (_jsx("div", { ref: mobileBottomNavRef, className: "z-[150] flex shrink-0 border-t border-[#dcdcde] bg-white", style: {
1195
+ minHeight: '52px',
1196
+ paddingBottom: 'env(safe-area-inset-bottom, 0px)',
1197
+ }, children: [
1198
+ { view: 'outline', Icon: PanelLeft, label: 'Layers' },
1199
+ { view: 'canvas', Icon: Monitor, label: 'Canvas' },
1200
+ { view: 'inspector', Icon: Settings2, label: 'Inspect' },
1201
+ ].map(({ view, Icon, label }) => (_jsxs("button", { type: "button", onClick: () => {
1202
+ if (view === 'outline') {
1203
+ setMobilePanelView(v => v === 'outline' ? 'canvas' : 'outline');
1204
+ }
1205
+ else {
1206
+ setMobilePanelView(view);
1207
+ }
1208
+ }, "aria-pressed": mobilePanelView === view, className: `relative flex flex-1 flex-col items-center justify-center gap-0.5 transition-colors ${mobilePanelView === view ? 'text-[#440066]' : 'text-[#787c82]'}`, children: [_jsx(Icon, { className: "h-5 w-5", strokeWidth: 2 }), _jsx("span", { className: "text-[10px] font-medium", children: label }), view === 'inspector' && selectedSection && mobilePanelView !== 'inspector' && (_jsx("span", { className: "absolute right-[calc(50%-20px)] top-2.5 h-1.5 w-1.5 rounded-full bg-[#440066]", "aria-hidden": true }))] }, view))) })), _jsx("style", { dangerouslySetInnerHTML: {
1209
+ __html: `
1210
+ /* Custom Scrollbar */
1211
+ .custom-scrollbar::-webkit-scrollbar {
1212
+ width: 4px;
1213
+ }
1214
+ .custom-scrollbar::-webkit-scrollbar-track {
1215
+ background: transparent;
1216
+ }
1217
+ .custom-scrollbar::-webkit-scrollbar-thumb {
1218
+ background: #c3c4c7;
1219
+ border-radius: 4px;
1220
+ }
1221
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
1222
+ background: #a7aaad;
1223
+ }
1224
+ `
1225
+ } })] }) })] }) }));
1226
+ };