storefront-layouts 1.0.16 → 1.0.17

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 (213) hide show
  1. package/dist/components/auth/LoginForm.js +1 -1
  2. package/dist/components/auth/LoginSheet.js +1 -1
  3. package/dist/components/auth/login-form-core.js +2 -2
  4. package/dist/components/auth/login-sheet-registry.js +2 -2
  5. package/dist/components/auth/login-sheet-themes/booking-agenda.theme.js +1 -1
  6. package/dist/components/auth/login-sheet-themes/booking.theme.js +1 -1
  7. package/dist/components/auth/login-sheet-themes/clothing-minimal.theme.js +1 -1
  8. package/dist/components/auth/login-sheet-themes/clothing.theme.js +1 -1
  9. package/dist/components/auth/login-sheet-themes/electronics-grid.theme.js +1 -1
  10. package/dist/components/auth/login-sheet-themes/electronics.theme.js +1 -1
  11. package/dist/components/auth/login-sheet-themes/food-modern.theme.js +1 -1
  12. package/dist/components/auth/login-sheet-themes/food.theme.js +1 -1
  13. package/dist/components/auth/login-sheet-themes/index.js +9 -9
  14. package/dist/components/auth/login-sheet-themes/motivational-speaker.theme.js +1 -1
  15. package/dist/components/auth/login-sheets/StoreLoginSheetShell.js +3 -3
  16. package/dist/components/categories/category-masonry-grid.js +3 -3
  17. package/dist/components/learning/CertificateViewer.js +1 -1
  18. package/dist/components/rich-text/CategoryDescription.js +2 -2
  19. package/dist/components/rich-text/ProductDescription.js +2 -2
  20. package/dist/components/rich-text/RichTextExcerpt.js +1 -1
  21. package/dist/components/rich-text/SafeRichHtml.js +1 -1
  22. package/dist/components/shipping/ProductDeliveryInfoSection.js +2 -2
  23. package/dist/components/ui/alert-modal.js +1 -1
  24. package/dist/components/ui/guest-checkout-modal.js +2 -2
  25. package/dist/components/ui/image-skeleton.js +1 -1
  26. package/dist/components/ui/image-with-fallback.js +1 -1
  27. package/dist/components/ui/loading-skeleton-wrapper.js +1 -1
  28. package/dist/components/ui/modal.js +1 -1
  29. package/dist/components/ui/page-content-loader.js +1 -1
  30. package/dist/components/ui/product-card.d.ts.map +1 -1
  31. package/dist/components/ui/product-card.js +3 -2
  32. package/dist/components/ui/route-skeleton-loader.js +5 -5
  33. package/dist/components/ui/sheet.js +1 -1
  34. package/dist/components/ui/skeletons/index.js +5 -5
  35. package/dist/components/ui/skeletons/product-grid-skeleton.js +1 -1
  36. package/dist/editor/alignment-schemas/booking.js +1 -1
  37. package/dist/editor/alignment-schemas/clothing-minimal.js +1 -1
  38. package/dist/editor/alignment-schemas/index.js +20 -20
  39. package/dist/editor/alignment-schemas/lazy-loader.js +1 -1
  40. package/dist/editor/alignment-schemas/metadata.js +1 -1
  41. package/dist/editor/alignment-schemas/resolve-canvas-inspector-leaf.js +3 -3
  42. package/dist/editor/blocks/index.js +3 -3
  43. package/dist/editor/blocks/migrate-clothing-minimal.js +3 -3
  44. package/dist/editor/blocks/nav-outline-utils.js +2 -2
  45. package/dist/editor/blocks/registry.js +1 -1
  46. package/dist/editor/document/adapter.js +4 -4
  47. package/dist/editor/document/block-tree.js +1 -1
  48. package/dist/editor/document/index.js +6 -6
  49. package/dist/editor/document/validate.js +1 -1
  50. package/dist/editor/index.js +12 -12
  51. package/dist/editor/layout-content-loader.js +3 -3
  52. package/dist/editor/payaza-form/ArrayItemManager.js +2 -2
  53. package/dist/editor/payaza-form/EditorCanvasPreview.js +4 -4
  54. package/dist/editor/payaza-form/FieldRenderer.js +17 -17
  55. package/dist/editor/payaza-form/IframePreviewMessageBridge.js +3 -3
  56. package/dist/editor/payaza-form/PayazaFormEditor.js +29 -29
  57. package/dist/editor/payaza-form/PayazaFormEditorFullPage.js +2 -2
  58. package/dist/editor/payaza-form/SliderArrayEditor.js +2 -2
  59. package/dist/editor/payaza-form/components/ArrayField.js +1 -1
  60. package/dist/editor/payaza-form/components/BlockStylesInspector.js +1 -1
  61. package/dist/editor/payaza-form/components/BlocksField.js +8 -8
  62. package/dist/editor/payaza-form/components/ButtonField.js +3 -3
  63. package/dist/editor/payaza-form/components/CanvasGranularInspector.js +11 -11
  64. package/dist/editor/payaza-form/components/IconField.js +2 -2
  65. package/dist/editor/payaza-form/components/ImageField.js +1 -1
  66. package/dist/editor/payaza-form/components/NumberField.js +1 -1
  67. package/dist/editor/payaza-form/components/RichTextField.js +2 -2
  68. package/dist/editor/payaza-form/components/SectionSchemaInspector.js +3 -3
  69. package/dist/editor/payaza-form/components/StarRatingField.js +1 -1
  70. package/dist/editor/payaza-form/components/TextField.js +1 -1
  71. package/dist/editor/payaza-form/data-merger.js +6 -6
  72. package/dist/editor/payaza-form/data-transformer.js +3 -3
  73. package/dist/editor/payaza-form/engine.js +1 -1
  74. package/dist/editor/payaza-form/examples/custom-widgets.example.js +1 -1
  75. package/dist/editor/payaza-form/index.js +8 -8
  76. package/dist/editor/payaza-form/layout-loader.js +2 -2
  77. package/dist/editor/payaza-form/preview-message-handler.js +3 -3
  78. package/dist/editor/payaza-form/schema-bridge.js +3 -3
  79. package/dist/editor/payaza-form/widget-registry.js +1 -1
  80. package/dist/editor/shared/BlockOutlineTree.js +1 -1
  81. package/dist/editor/shared/EditorHeader.js +1 -1
  82. package/dist/editor/shared/EditorNavigator.js +1 -1
  83. package/dist/editor/shared/IframePreview.js +6 -6
  84. package/dist/editor/shared/InlineCanvasPreview.js +7 -7
  85. package/dist/editor/shared/LayoutRenderer.js +1 -1
  86. package/dist/editor/shared/ResizableSidebar.js +1 -1
  87. package/dist/editor/shared/index.js +7 -7
  88. package/dist/hooks/use-product-reviews.js +1 -1
  89. package/dist/hooks/usePreviewSlideSync.js +1 -1
  90. package/dist/index.js +143 -143
  91. package/dist/layouts/booking/components/BookingHomePage.js +1 -1
  92. package/dist/layouts/booking/components/BookingMultilineHeading.js +1 -1
  93. package/dist/layouts/booking/components/BookingTestimonialCard.js +1 -1
  94. package/dist/layouts/booking/components/booking-footer-defaults.js +2 -2
  95. package/dist/layouts/booking/index.js +8 -8
  96. package/dist/layouts/booking/pages/BookPage.js +1 -1
  97. package/dist/layouts/booking/pages/CategoriesPage.js +2 -2
  98. package/dist/layouts/booking/pages/ProductDetailPage.js +3 -3
  99. package/dist/layouts/booking-agenda/components/BookingHomePageAgenda.js +3 -3
  100. package/dist/layouts/booking-agenda/index.js +8 -8
  101. package/dist/layouts/booking-agenda/pages/CategoriesPage.js +1 -1
  102. package/dist/layouts/booking-agenda/pages/ProductDetailPage.js +3 -3
  103. package/dist/layouts/clothing/components/ClothingHomePage.d.ts.map +1 -1
  104. package/dist/layouts/clothing/components/ClothingHomePage.js +13 -12
  105. package/dist/layouts/clothing/index.js +7 -7
  106. package/dist/layouts/clothing/pages/AboutPage.js +4 -4
  107. package/dist/layouts/clothing/pages/CategoriesPage.js +9 -9
  108. package/dist/layouts/clothing/pages/CategoryPage.js +7 -7
  109. package/dist/layouts/clothing/pages/ContactPage.js +3 -3
  110. package/dist/layouts/clothing/pages/ProductDetailPage.js +24 -24
  111. package/dist/layouts/clothing/pages/ProductsPage.js +17 -17
  112. package/dist/layouts/clothing/payaza-bindings.js +2 -2
  113. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.d.ts.map +1 -1
  114. package/dist/layouts/clothing-minimal/components/ClothingHomePageMinimal.js +11 -10
  115. package/dist/layouts/clothing-minimal/components/clothing-minimal-block-render.js +7 -7
  116. package/dist/layouts/clothing-minimal/index.js +7 -7
  117. package/dist/layouts/clothing-minimal/pages/AboutPage.js +3 -3
  118. package/dist/layouts/clothing-minimal/pages/CategoriesPage.js +8 -8
  119. package/dist/layouts/clothing-minimal/pages/CategoryPage.js +7 -7
  120. package/dist/layouts/clothing-minimal/pages/ContactPage.js +3 -3
  121. package/dist/layouts/clothing-minimal/pages/ProductDetailPage.js +24 -24
  122. package/dist/layouts/clothing-minimal/pages/ProductsPage.js +18 -18
  123. package/dist/layouts/electronics/components/ElectronicsCategoriesPage.js +3 -3
  124. package/dist/layouts/electronics/components/ElectronicsGridProductCard.d.ts.map +1 -1
  125. package/dist/layouts/electronics/components/ElectronicsGridProductCard.js +4 -3
  126. package/dist/layouts/electronics/components/ElectronicsHomePage.d.ts.map +1 -1
  127. package/dist/layouts/electronics/components/ElectronicsHomePage.js +5 -4
  128. package/dist/layouts/electronics/components/ElectronicsPageWrapper.js +2 -2
  129. package/dist/layouts/electronics/components/ElectronicsProductsPage.js +4 -4
  130. package/dist/layouts/electronics/components/ElectronicsStoreHeader.js +1 -1
  131. package/dist/layouts/electronics/index.js +18 -18
  132. package/dist/layouts/electronics/pages/CategoriesPage.js +1 -1
  133. package/dist/layouts/electronics/pages/ProductDetailPage.js +3 -3
  134. package/dist/layouts/electronics/pages/ProductsPage.js +2 -2
  135. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.d.ts.map +1 -1
  136. package/dist/layouts/electronics-grid/components/ElectronicsGridProductCard.js +4 -3
  137. package/dist/layouts/electronics-grid/components/ElectronicsHomePageGrid.js +2 -2
  138. package/dist/layouts/electronics-grid/index.js +14 -14
  139. package/dist/layouts/electronics-grid/pages/CategoriesPage.js +1 -1
  140. package/dist/layouts/electronics-grid/pages/ProductDetailPage.js +3 -3
  141. package/dist/layouts/electronics-grid/pages/ProductsPage.js +2 -2
  142. package/dist/layouts/food/components/FoodHomePage.js +1 -1
  143. package/dist/layouts/food/index.js +8 -8
  144. package/dist/layouts/food/pages/CategoriesPage.js +2 -2
  145. package/dist/layouts/food/pages/CategoryPage.js +2 -2
  146. package/dist/layouts/food/pages/ProductDetailPage.js +4 -4
  147. package/dist/layouts/food/pages/ProductsPage.js +2 -2
  148. package/dist/layouts/food-modern/components/FoodHomePageModern.js +3 -3
  149. package/dist/layouts/food-modern/index.js +8 -8
  150. package/dist/layouts/food-modern/pages/CategoriesPage.js +1 -1
  151. package/dist/layouts/food-modern/pages/CategoryPage.js +2 -2
  152. package/dist/layouts/food-modern/pages/ProductDetailPage.js +3 -3
  153. package/dist/layouts/food-modern/pages/ProductsPage.js +2 -2
  154. package/dist/layouts/motivational-speaker/components/MotivationalSpeakerPageWrapper.js +1 -1
  155. package/dist/layouts/motivational-speaker/index.js +9 -9
  156. package/dist/layouts/motivational-speaker/pages/ProductsPage.js +2 -2
  157. package/dist/layouts/shared/components/BaseStoreLayout.js +9 -9
  158. package/dist/layouts/shared/components/GenericPageWrapper.js +3 -3
  159. package/dist/layouts/shared/components/PdpVariationSelectors.js +2 -2
  160. package/dist/layouts/shared/components/PromoBanner.js +4 -4
  161. package/dist/layouts/shared/components/StoreCartSheet.js +9 -9
  162. package/dist/layouts/shared/components/StoreFooter.js +9 -9
  163. package/dist/layouts/shared/components/StoreHeader.js +8 -8
  164. package/dist/layouts/shared/components/headers/BookingAgendaSidebar.js +2 -2
  165. package/dist/layouts/shared/components/headers/ClothingMinimalHeader.js +9 -9
  166. package/dist/layouts/shared/components/headers/FoodModernHeader.js +7 -7
  167. package/dist/layouts/shared/index.js +22 -22
  168. package/dist/layouts/shared/pages/StoreMaintenanceScreen.js +2 -2
  169. package/dist/layouts/shared/wrappers/BookingAgendaLayout.js +16 -16
  170. package/dist/layouts/shared/wrappers/ClothingLayout.js +8 -8
  171. package/dist/layouts/shared/wrappers/ClothingMinimalLayout.js +7 -7
  172. package/dist/layouts/shared/wrappers/ElectronicsLayout.js +5 -5
  173. package/dist/layouts/shared/wrappers/FoodModernLayout.js +6 -6
  174. package/dist/layouts/shared/wrappers/MotivationalLayout.js +9 -9
  175. package/dist/layouts/shared/wrappers/StandardLayout.js +8 -8
  176. package/dist/lib/auth-context.js +2 -2
  177. package/dist/lib/layout-config-hydration.js +2 -2
  178. package/dist/lib/product-variation-utils.js +1 -1
  179. package/dist/lib/services/analytics.service.js +1 -1
  180. package/dist/lib/services/auth.service.js +1 -1
  181. package/dist/lib/services/booking.service.js +1 -1
  182. package/dist/lib/services/category.service.js +1 -1
  183. package/dist/lib/services/checkout.service.js +1 -1
  184. package/dist/lib/services/contact.service.js +1 -1
  185. package/dist/lib/services/customer.service.js +1 -1
  186. package/dist/lib/services/fees.service.js +1 -1
  187. package/dist/lib/services/index.js +13 -13
  188. package/dist/lib/services/location.service.js +1 -1
  189. package/dist/lib/services/order.service.js +1 -1
  190. package/dist/lib/services/payment.service.js +1 -1
  191. package/dist/lib/services/product.service.js +1 -1
  192. package/dist/lib/services/promo.service.js +1 -1
  193. package/dist/lib/services/review.service.js +1 -1
  194. package/dist/lib/services/service.service.js +1 -1
  195. package/dist/lib/services/shipping.service.js +1 -1
  196. package/dist/lib/services/store.service.js +1 -1
  197. package/dist/lib/store-config-utils.js +7 -7
  198. package/dist/lib/store-config.js +1 -1
  199. package/dist/lib/store-context.js +12 -12
  200. package/dist/lib/utils/asset-helpers.js +2 -2
  201. package/dist/lib/utils/editor-preview.js +3 -3
  202. package/dist/lib/utils/index.js +3 -3
  203. package/dist/lib/utils/product-images.js +1 -1
  204. package/dist/lib/utils/product-share.js +1 -1
  205. package/dist/lib/utils/url-helpers.js +1 -1
  206. package/dist/preview/LayoutPreview.js +5 -5
  207. package/dist/preview/PreviewRouter.js +2 -2
  208. package/dist/preview/canvas/PreviewCanvasEnhancer.js +8 -8
  209. package/dist/preview/canvas/preview-flush-await.js +1 -1
  210. package/dist/preview/canvas/preview-isolation.js +1 -1
  211. package/dist/preview/canvas/preview-route.js +2 -2
  212. package/dist/preview/index.js +4 -4
  213. package/package.json +30 -31
@@ -1,19 +1,19 @@
1
- export * from './types';
2
- export * from './document';
3
- export * from './shared';
4
- export * from './feature-flags';
1
+ export * from './types.js';
2
+ export * from './document/index.js';
3
+ export * from './shared/index.js';
4
+ export * from './feature-flags.js';
5
5
  // Export PayazaForm editor (namespace for consumers that destructure PayazaForm)
6
- export * as PayazaForm from './payaza-form';
6
+ export * as PayazaForm from './payaza-form/index.js';
7
7
  // Top-level named exports so consumers can also import directly:
8
8
  // import { PayazaFormEditorFullPage, getFullInventory } from 'payaza-storefront-layouts/editor'
9
- export { PayazaFormEditorFullPage, PayazaFormEditor } from './payaza-form';
9
+ export { PayazaFormEditorFullPage, PayazaFormEditor } from './payaza-form/index.js';
10
10
  // Also export asset selection handler directly for easier access
11
- export { getGlobalAssetSelectionHandler } from './payaza-form/AssetSelectionContext';
12
- export { loadLayoutContentForEditor, hasRenderableLayoutContent, } from './layout-content-loader';
13
- export { extractPublishedLayoutConfig } from '../lib/layout-config-hydration';
14
- export { normalizeLayoutConfigFieldShapes, prepareLayoutPayloadForPublish, denormalizeClothingMinimalBlocksToSectionFields, } from '../lib/layout-field-normalize';
15
- export { mergeAllPagesWithActualData } from './payaza-form/data-merger';
16
- export { loadLayoutJSONSync } from './payaza-form/layout-loader';
11
+ export { getGlobalAssetSelectionHandler } from './payaza-form/AssetSelectionContext.js';
12
+ export { loadLayoutContentForEditor, hasRenderableLayoutContent, } from './layout-content-loader.js';
13
+ export { extractPublishedLayoutConfig } from '../lib/layout-config-hydration.js';
14
+ export { normalizeLayoutConfigFieldShapes, prepareLayoutPayloadForPublish, denormalizeClothingMinimalBlocksToSectionFields, } from '../lib/layout-field-normalize.js';
15
+ export { mergeAllPagesWithActualData } from './payaza-form/data-merger.js';
16
+ export { loadLayoutJSONSync } from './payaza-form/layout-loader.js';
17
17
  /**
18
18
  * Helper to get the full inventory of all layouts
19
19
  * Now uses alignment-schemas instead of requirements JSON
@@ -1,6 +1,6 @@
1
- import { envelopeToStoreConfig } from './document/adapter';
2
- import { validateEditorEnvelope } from './document/validate';
3
- import { extractPublishedLayoutConfig, hydratePublishedLayoutPayload, hasRenderableLayoutContent as hasRenderableLayoutContentFromHydration, } from '../lib/layout-config-hydration';
1
+ import { envelopeToStoreConfig } from './document/adapter.js';
2
+ import { validateEditorEnvelope } from './document/validate.js';
3
+ import { extractPublishedLayoutConfig, hydratePublishedLayoutPayload, hasRenderableLayoutContent as hasRenderableLayoutContentFromHydration, } from '../lib/layout-config-hydration.js';
4
4
  export { extractPublishedLayoutConfig, hydratePublishedLayoutPayload };
5
5
  function isUnsplashDefaultUrl(url) {
6
6
  return /images\.unsplash\.com|unsplash\.com/i.test(url);
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState, memo } from 'react';
3
3
  import { GripVertical, Plus, Copy, Trash2, ChevronUp, ChevronDown } from 'lucide-react';
4
- import { getFieldRenderer } from './field-renderer-ref';
5
- import { SliderArrayEditor } from './SliderArrayEditor';
4
+ import { getFieldRenderer } from './field-renderer-ref.js';
5
+ import { SliderArrayEditor } from './SliderArrayEditor.js';
6
6
  function isSliderMode(itemEditor, arrayFieldKey) {
7
7
  if (itemEditor === 'slider')
8
8
  return true;
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useCallback, useRef } from 'react';
4
- import { IframePreview } from '../shared/IframePreview';
5
- import { InlineCanvasPreview } from '../shared/InlineCanvasPreview';
4
+ import { IframePreview } from '../shared/IframePreview.js';
5
+ import { InlineCanvasPreview } from '../shared/InlineCanvasPreview.js';
6
6
  import { shouldUseInlineEditorPreview } from '../../lib/utils/mobile-editor.js';
7
- import { useAssetSelection } from './AssetSelectionContext';
8
- import { processPreviewMessage } from './preview-message-handler';
7
+ import { useAssetSelection } from './AssetSelectionContext.js';
8
+ import { processPreviewMessage } from './preview-message-handler.js';
9
9
  export function EditorCanvasPreview({ layoutId, config, activePageId, viewMode, selectedSection, focusedField, interactionMode, slideIndexSync, flushRequestId, previewZoom, editorContext, onSectionSelected, onFieldCommit, onSectionReorder, onFocusSidebarSection, onPreviewElementFocus, onRouteChange, previewFlushRef, iframePreviewFlushRef, }) {
10
10
  const useInline = shouldUseInlineEditorPreview();
11
11
  const { onOpenAssetSelect } = useAssetSelection();
@@ -1,22 +1,22 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { memo } from 'react';
3
- import { generateArrayItem } from './engine';
4
- import { TextField } from './components/TextField';
5
- import { TextareaField } from './components/TextareaField';
6
- import { RichTextField } from './components/RichTextField';
7
- import { ToggleField } from './components/ToggleField';
8
- import { ImageField } from './components/ImageField';
9
- import { NumberField } from './components/NumberField';
10
- import { StarRatingField } from './components/StarRatingField';
11
- import { IconField } from './components/IconField';
12
- import { ButtonField } from './components/ButtonField';
13
- import { ArrayField } from './components/ArrayField';
14
- import { ObjectField } from './components/ObjectField';
15
- import { SectionField } from './components/SectionField';
16
- import { BlocksField } from './components/BlocksField';
17
- import { getWidget } from './widget-registry';
18
- import { PAYAZA_BLOCK_IDS } from '../blocks/types';
19
- import { registerFieldRenderer } from './field-renderer-ref';
3
+ import { generateArrayItem } from './engine.js';
4
+ import { TextField } from './components/TextField.js';
5
+ import { TextareaField } from './components/TextareaField.js';
6
+ import { RichTextField } from './components/RichTextField.js';
7
+ import { ToggleField } from './components/ToggleField.js';
8
+ import { ImageField } from './components/ImageField.js';
9
+ import { NumberField } from './components/NumberField.js';
10
+ import { StarRatingField } from './components/StarRatingField.js';
11
+ import { IconField } from './components/IconField.js';
12
+ import { ButtonField } from './components/ButtonField.js';
13
+ import { ArrayField } from './components/ArrayField.js';
14
+ import { ObjectField } from './components/ObjectField.js';
15
+ import { SectionField } from './components/SectionField.js';
16
+ import { BlocksField } from './components/BlocksField.js';
17
+ import { getWidget } from './widget-registry.js';
18
+ import { PAYAZA_BLOCK_IDS } from '../blocks/types.js';
19
+ import { registerFieldRenderer } from './field-renderer-ref.js';
20
20
  export const FieldRenderer = memo(({ schemaField, value, path, sectionKey, onChange, onArrayItemChange, onArrayItemAdd, onArrayItemRemove, onArrayItemReorder, }) => {
21
21
  const rawEditor = schemaField.type ?? schemaField._editor;
22
22
  // Normalize so persisted / hand-authored schemas ("Toggle") still resolve
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { useEffect, useCallback } from 'react';
3
- import { useAssetSelection } from './AssetSelectionContext';
4
- import { processPreviewMessage } from './preview-message-handler';
5
- import { normalizeEditorLayoutId } from '../document/layout-id';
3
+ import { useAssetSelection } from './AssetSelectionContext.js';
4
+ import { processPreviewMessage } from './preview-message-handler.js';
5
+ import { normalizeEditorLayoutId } from '../document/layout-id.js';
6
6
  /**
7
7
  * Handles postMessage from the layout preview iframe (field commit, image replace, reorder).
8
8
  * Must render under AssetSelectionProvider for image replacement.
@@ -1,36 +1,36 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState, useMemo, useEffect, useLayoutEffect, useRef, useCallback } from 'react';
3
- import { previewRouteToPageId } from '../../preview/canvas/preview-route';
4
- import { EditorHeader } from '../shared/EditorHeader';
5
- import { useEditorChromeMetrics } from '../shared/useEditorChromeMetrics';
6
- import { EditorNavigator } from '../shared/EditorNavigator';
7
- import { ResizableSidebar } from '../shared/ResizableSidebar';
8
- import { moveSectionKeyInPageOrder, normalizeEditorLayoutId, resolveSectionKeyOrderForPage, storeConfigToEnvelope, } from '../document';
9
- import { applyEditorCatalogOverlay } from '../../lib/utils/editor-preview';
10
- import { payazaSectionStyleKey, getPayazaSectionStyleEntries } from '../../lib/payaza-section-styles';
11
- import { getPageSchema } from './engine';
12
- import { loadLayoutJSON } from './layout-loader';
13
- import { transformToStoreConfig, updateOverlayData, addArrayItem, removeArrayItem, updateArrayItem, readOverlayFieldValue } from './data-transformer';
14
- import { generateArrayItem } from './engine';
15
- import { initializeWidgetRegistry, clearWidgets } from './widget-registry';
16
- import { mergeRequirementAllPagesWithActualData, mergeAllPagesWithActualData, } from './data-merger';
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
17
  import { Settings2, Box, Palette, Layers, Monitor, PanelLeft, ChevronLeft } from 'lucide-react';
18
- import { useDebounce } from '../../hooks/use-debounce';
19
- import { AIGenerateModal } from '../shared/AIGenerateModal';
20
- import { useAlertModal } from '../../components/ui/alert-modal';
21
- import { AssetSelectionProvider } from './AssetSelectionContext';
22
- import { IframePreviewMessageBridge } from './IframePreviewMessageBridge';
23
- import { EditorCanvasPreview } from './EditorCanvasPreview';
24
- import { awaitPreviewFlushAck } from '../../preview/canvas/preview-flush-await';
25
- import { BlockStylesInspector } from './components/BlockStylesInspector';
26
- import { CanvasGranularInspector } from './components/CanvasGranularInspector';
27
- import { SectionSchemaInspector } from './components/SectionSchemaInspector';
28
- import { isLayoutPageEditable } from '../alignment-schemas/metadata';
29
- import { resolveCanvasInspectorLeaf } from '../alignment-schemas/resolve-canvas-inspector-leaf';
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
30
  import { isInlineCanvasTextElementKind } from '../../lib/utils/mobile-editor.js';
31
- import { granularPathForArrayItem, granularPathForBlockFirstAttr, outlineTreeForSectionPayload, } from '../blocks/nav-outline-utils';
32
- import { ActiveArrayFocusProvider, } from './ActiveArrayFocusContext';
33
- import { EditorLayoutProvider } from './EditorLayoutContext';
31
+ import { granularPathForArrayItem, granularPathForBlockFirstAttr, outlineTreeForSectionPayload, } from '../blocks/nav-outline-utils.js';
32
+ import { ActiveArrayFocusProvider, } from './ActiveArrayFocusContext.js';
33
+ import { EditorLayoutProvider } from './EditorLayoutContext.js';
34
34
  import { isMobileEditorViewport, shouldUseInlineEditorPreview } from '../../lib/utils/mobile-editor.js';
35
35
  /** Lightweight fingerprint for undo history on mobile — avoids JSON.stringify on large configs. */
36
36
  function lightweightConfigFingerprint(config) {
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { PayazaFormEditor } from './PayazaFormEditor';
3
- import { AlertModalProvider } from '../../components/ui/alert-modal';
2
+ import { PayazaFormEditor } from './PayazaFormEditor.js';
3
+ import { AlertModalProvider } from '../../components/ui/alert-modal.js';
4
4
  export const PayazaFormEditorFullPage = (props) => {
5
5
  return (_jsx(AlertModalProvider, { children: _jsx("div", { className: "fixed inset-0 z-50 flex h-[100dvh] max-h-[100dvh] flex-col overflow-hidden bg-[#F7F5F0]", children: _jsx("main", { className: "relative flex min-h-0 flex-1 flex-col overflow-hidden", children: _jsx(PayazaFormEditor, { ...props }) }) }) }));
6
6
  };
@@ -3,8 +3,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { memo, useCallback, useEffect, useRef } from 'react';
4
4
  import { ChevronLeft, ChevronRight, Copy, Image as ImageIcon, Plus, Trash2, } from 'lucide-react';
5
5
  import { cn } from '../../lib/utils/index.js';
6
- import { getFieldRenderer } from './field-renderer-ref';
7
- import { useActiveArrayFocus } from './ActiveArrayFocusContext';
6
+ import { getFieldRenderer } from './field-renderer-ref.js';
7
+ import { useActiveArrayFocus } from './ActiveArrayFocusContext.js';
8
8
  function slideLabel(item, index) {
9
9
  if (!item)
10
10
  return `Slide ${index + 1}`;
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { memo } from 'react';
3
3
  import { List } from 'lucide-react';
4
- import { ArrayItemManager } from '../ArrayItemManager';
4
+ import { ArrayItemManager } from '../ArrayItemManager.js';
5
5
  export const ArrayField = memo(({ label, value, onChange, itemSchema, itemEditor, sectionKey, arrayFieldKey, minSlides, maxSlides, onItemChange, onItemAdd, onItemRemove, onItemReorder, onItemDuplicate, }) => {
6
6
  const handleItemDuplicate = (index) => {
7
7
  if (onItemDuplicate) {
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useMemo } from 'react';
3
- import { resolveStyleSupports, sanitizePayazaStyleMap } from '../payaza-style-sanitize';
3
+ import { resolveStyleSupports, sanitizePayazaStyleMap } from '../payaza-style-sanitize.js';
4
4
  const inputCls = 'w-full rounded-[2px] border border-[#dcdcde] bg-white px-2 py-1.5 text-[13px] text-[#1b0029] outline-none focus-visible:ring-2 focus-visible:ring-[#440066]/35';
5
5
  const labelCls = 'mb-1 block text-[11px] font-medium text-[#646970]';
6
6
  const sectionTitle = 'text-[11px] font-semibold uppercase tracking-[0.08em] text-[#787c82]';
@@ -3,14 +3,14 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React, { memo, useCallback } from 'react';
4
4
  import { ChevronDown, ChevronRight, Plus, Trash2 } from 'lucide-react';
5
5
  import { cn } from '../../../lib/utils/index.js';
6
- import { createPayazaEmptyBlock, getPayazaBlockDefinition } from '../../blocks/registry';
7
- import { deepClone } from '../../../lib/utils';
8
- import { RichTextField } from './RichTextField';
9
- import { TextField } from './TextField';
10
- import { ImageField } from './ImageField';
11
- import { NumberField } from './NumberField';
12
- import { IconField } from './IconField';
13
- import { FieldDensityProvider } from './FieldDensityContext';
6
+ import { createPayazaEmptyBlock, getPayazaBlockDefinition } from '../../blocks/registry.js';
7
+ import { deepClone } from '../../../lib/utils/index.js';
8
+ import { RichTextField } from './RichTextField.js';
9
+ import { TextField } from './TextField.js';
10
+ import { ImageField } from './ImageField.js';
11
+ import { NumberField } from './NumberField.js';
12
+ import { IconField } from './IconField.js';
13
+ import { FieldDensityProvider } from './FieldDensityContext.js';
14
14
  function normalizeBlocks(v) {
15
15
  if (!Array.isArray(v))
16
16
  return [];
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Link2 } from 'lucide-react';
4
- import { TextField } from './TextField';
5
- import { useEditorLayout } from '../EditorLayoutContext';
6
- import { getTemplatePages } from '../../../lib/template-pages';
4
+ import { TextField } from './TextField.js';
5
+ import { useEditorLayout } from '../EditorLayoutContext.js';
6
+ import { getTemplatePages } from '../../../lib/template-pages.js';
7
7
  export const ButtonField = ({ label, value, onChange }) => {
8
8
  const { layoutId } = useEditorLayout();
9
9
  const pages = getTemplatePages(layoutId);
@@ -1,17 +1,17 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { memo, useMemo } from 'react';
4
- import { readOverlayFieldValue } from '../data-transformer';
5
- import { resolveCanvasInspectorLeaf, } from '../../alignment-schemas/resolve-canvas-inspector-leaf';
6
- import { coerceRichSidebarEditorString } from '../../../lib/rich-html';
7
- import { TextField } from './TextField';
8
- import { TextareaField } from './TextareaField';
9
- import { RichTextField } from './RichTextField';
10
- import { ImageField } from './ImageField';
11
- import { IconField } from './IconField';
12
- import { NumberField } from './NumberField';
13
- import { StarRatingField } from './StarRatingField';
14
- import { ToggleField } from './ToggleField';
4
+ import { readOverlayFieldValue } from '../data-transformer.js';
5
+ import { resolveCanvasInspectorLeaf, } from '../../alignment-schemas/resolve-canvas-inspector-leaf.js';
6
+ import { coerceRichSidebarEditorString } from '../../../lib/rich-html.js';
7
+ import { TextField } from './TextField.js';
8
+ import { TextareaField } from './TextareaField.js';
9
+ import { RichTextField } from './RichTextField.js';
10
+ import { ImageField } from './ImageField.js';
11
+ import { IconField } from './IconField.js';
12
+ import { NumberField } from './NumberField.js';
13
+ import { StarRatingField } from './StarRatingField.js';
14
+ import { ToggleField } from './ToggleField.js';
15
15
  export const CanvasGranularInspector = memo(({ layoutJson, activePageId, sectionKey, fieldPath, elementKind, pageSchemaRecord, sectionData, onChange, }) => {
16
16
  const meta = useMemo(() => resolveCanvasInspectorLeaf(pageSchemaRecord, sectionKey, fieldPath, sectionData, elementKind), [pageSchemaRecord, sectionKey, fieldPath, sectionData, elementKind]);
17
17
  const rawValue = useMemo(() => readOverlayFieldValue(layoutJson, activePageId, sectionKey, fieldPath), [layoutJson, activePageId, sectionKey, fieldPath]);
@@ -1,8 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { ChevronDown, Search, HelpCircle } from 'lucide-react';
4
- import { ICON_MAP, COMMON_ICON_NAMES } from '../../../components/ui/dynamic-icon';
5
- import { resolveFieldDensity } from './FieldDensityContext';
4
+ import { ICON_MAP, COMMON_ICON_NAMES } from '../../../components/ui/dynamic-icon.js';
5
+ import { resolveFieldDensity } from './FieldDensityContext.js';
6
6
  /** Match persisted / hand-typed icon ids to Lucide map keys (case-insensitive). */
7
7
  function resolveIconMapKey(raw) {
8
8
  if (!raw?.trim())
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React from 'react';
3
3
  import { Link2, X, Upload } from 'lucide-react';
4
- import { useAssetSelection } from '../AssetSelectionContext';
4
+ import { useAssetSelection } from '../AssetSelectionContext.js';
5
5
  export const ImageField = ({ label, value, onChange, placeholder, }) => {
6
6
  const hasImage = value && value.startsWith('http');
7
7
  const [isHovered, setIsHovered] = React.useState(false);
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Plus, Minus } from 'lucide-react';
3
- import { resolveFieldDensity } from './FieldDensityContext';
3
+ import { resolveFieldDensity } from './FieldDensityContext.js';
4
4
  export const NumberField = ({ label, value, onChange, placeholder, min, max, density: densityProp, }) => {
5
5
  const density = resolveFieldDensity(densityProp);
6
6
  const compact = density === 'compact';
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { memo, useRef, useCallback, useLayoutEffect, useState } from 'react';
3
- import { buildPayazaRichCommitFromEditorHtml, coercePayazaRichLinkHref, normalizeStoredRichValue, coerceRichSidebarEditorString, PAYAZA_RICH_HTML_POLICY_VERSION, sanitizePayazaRichHtml, wrapPlainTextAsParagraph, } from '../../../lib/rich-html';
4
- import { resolveFieldDensity } from './FieldDensityContext';
3
+ import { buildPayazaRichCommitFromEditorHtml, coercePayazaRichLinkHref, normalizeStoredRichValue, coerceRichSidebarEditorString, PAYAZA_RICH_HTML_POLICY_VERSION, sanitizePayazaRichHtml, wrapPlainTextAsParagraph, } from '../../../lib/rich-html.js';
4
+ import { resolveFieldDensity } from './FieldDensityContext.js';
5
5
  function runCmd(cmd, val) {
6
6
  document.execCommand(cmd, false, val);
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { FieldRenderer } from '../FieldRenderer';
3
- import { BlocksField } from './BlocksField';
4
- import { PAYAZA_BLOCK_IDS } from '../../blocks/types';
2
+ import { FieldRenderer } from '../FieldRenderer.js';
3
+ import { BlocksField } from './BlocksField.js';
4
+ import { PAYAZA_BLOCK_IDS } from '../../blocks/types.js';
5
5
  function fieldTypeOf(field) {
6
6
  const raw = field.type ?? field._editor;
7
7
  if (raw === undefined || raw === null)
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Star } from 'lucide-react';
3
3
  import { cn } from '../../../lib/utils/index.js';
4
- import { resolveFieldDensity } from './FieldDensityContext';
4
+ import { resolveFieldDensity } from './FieldDensityContext.js';
5
5
  function clampRating(value, min, max) {
6
6
  if (!Number.isFinite(value))
7
7
  return max;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { memo } from 'react';
3
- import { resolveFieldDensity } from './FieldDensityContext';
3
+ import { resolveFieldDensity } from './FieldDensityContext.js';
4
4
  export const TextField = memo(({ label, value, onChange, placeholder, type = 'text', density: densityProp, }) => {
5
5
  const density = resolveFieldDensity(densityProp);
6
6
  const compact = density === 'compact';
@@ -1,9 +1,9 @@
1
- import { deepClone } from '../../lib/utils';
2
- import { transformToStoreConfig } from './data-transformer';
3
- import { ensureClothingMinimalHomeBlocksInPageData } from '../blocks/migrate-clothing-minimal';
4
- import { BOOKING_DEFAULT_TESTIMONIALS, normalizeBookingTestimonialItems, } from '../../layouts/booking/components/booking-testimonial-defaults';
5
- import { BOOKING_DEFAULT_ABOUT_STATS, BOOKING_DEFAULT_ABOUT_VALUES, mergeBookingAboutItemsSection, } from '../../layouts/booking/components/booking-about-defaults';
6
- import { mergeBookingFooterSection } from '../../layouts/booking/components/booking-footer-defaults';
1
+ import { deepClone } from '../../lib/utils/index.js';
2
+ import { transformToStoreConfig } from './data-transformer.js';
3
+ import { ensureClothingMinimalHomeBlocksInPageData } from '../blocks/migrate-clothing-minimal.js';
4
+ import { BOOKING_DEFAULT_TESTIMONIALS, normalizeBookingTestimonialItems, } from '../../layouts/booking/components/booking-testimonial-defaults.js';
5
+ import { BOOKING_DEFAULT_ABOUT_STATS, BOOKING_DEFAULT_ABOUT_VALUES, mergeBookingAboutItemsSection, } from '../../layouts/booking/components/booking-about-defaults.js';
6
+ import { mergeBookingFooterSection } from '../../layouts/booking/components/booking-footer-defaults.js';
7
7
  function sliderHasUsableContent(slider) {
8
8
  if (!slider)
9
9
  return false;
@@ -1,6 +1,6 @@
1
- import { deepClone } from '../../lib/utils';
2
- import { normalizeLayoutConfigFieldShapes } from '../../lib/layout-field-normalize';
3
- import { sanitizeBookingTestimonialItemsForSave } from '../../layouts/booking/components/booking-testimonial-defaults';
1
+ import { deepClone } from '../../lib/utils/index.js';
2
+ import { normalizeLayoutConfigFieldShapes } from '../../lib/layout-field-normalize.js';
3
+ import { sanitizeBookingTestimonialItemsForSave } from '../../layouts/booking/components/booking-testimonial-defaults.js';
4
4
  /**
5
5
  * Helper to set value at deep path in object
6
6
  */
@@ -1,4 +1,4 @@
1
- import { deepClone } from '../../lib/utils';
1
+ import { deepClone } from '../../lib/utils/index.js';
2
2
  /**
3
3
  * Parse overlay pattern JSON structure
4
4
  */
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { registerWidget, registerWidgets, PayazaFormEditorFullPage } from '../index';
2
+ import { registerWidget, registerWidgets, PayazaFormEditorFullPage } from '../index.js';
3
3
  // Example 1: Custom Text Field Widget
4
4
  const CustomTextField = ({ label, value, onChange }) => {
5
5
  return (_jsxs("div", { className: "custom-text-field", children: [_jsx("label", { className: "text-sm font-semibold text-gray-700 mb-1 block", children: label }), _jsx("input", { type: "text", value: value || '', onChange: (e) => onChange(e.target.value), className: "w-full px-4 py-2 border-2 border-blue-300 rounded-lg focus:border-blue-500 focus:outline-none", placeholder: `Enter ${label.toLowerCase()}...` })] }));
@@ -1,8 +1,8 @@
1
- export { PayazaFormEditor } from './PayazaFormEditor';
2
- export { PayazaFormEditorFullPage } from './PayazaFormEditorFullPage';
3
- export { getGlobalAssetSelectionHandler, setGlobalAssetSelectionHandler } from './AssetSelectionContext';
4
- export * from './engine';
5
- export * from './data-transformer';
6
- export * from './layout-loader';
7
- export * from './widget-registry';
8
- export * from '../document';
1
+ export { PayazaFormEditor } from './PayazaFormEditor.js';
2
+ export { PayazaFormEditorFullPage } from './PayazaFormEditorFullPage.js';
3
+ export { getGlobalAssetSelectionHandler, setGlobalAssetSelectionHandler } from './AssetSelectionContext.js';
4
+ export * from './engine.js';
5
+ export * from './data-transformer.js';
6
+ export * from './layout-loader.js';
7
+ export * from './widget-registry.js';
8
+ export * from '../document/index.js';
@@ -1,5 +1,5 @@
1
- import { parseLayoutJSON } from './engine';
2
- import { bridgeRequirementToOverlayJSONAsync, getBridgedPayazaFormRequirement } from './schema-bridge';
1
+ import { parseLayoutJSON } from './engine.js';
2
+ import { bridgeRequirementToOverlayJSONAsync, getBridgedPayazaFormRequirement } from './schema-bridge.js';
3
3
  /**
4
4
  * Async layout loader — primary path.
5
5
  * Lazily loads only the alignment schema for the active layout.
@@ -1,6 +1,6 @@
1
- import { PREVIEW_MSG, } from '../../preview/canvas/preview-messages';
2
- import { previewCommitsMatchEditorContext } from '../../preview/canvas/preview-isolation';
3
- import { resolvePreviewFlushAck } from '../../preview/canvas/preview-flush-await';
1
+ import { PREVIEW_MSG, } from '../../preview/canvas/preview-messages.js';
2
+ import { previewCommitsMatchEditorContext } from '../../preview/canvas/preview-isolation.js';
3
+ import { resolvePreviewFlushAck } from '../../preview/canvas/preview-flush-await.js';
4
4
  /** Shared handler for iframe postMessage and inline preview events. */
5
5
  export function processPreviewMessage(d, ctx) {
6
6
  if (d.type === PREVIEW_MSG.FLUSH_EDITS_ACK) {
@@ -1,6 +1,6 @@
1
- import { loadAlignmentSchemaAsync, getLoadedAlignmentSchema, } from '../alignment-schemas/lazy-loader';
2
- import { getLayoutMetadata } from '../alignment-schemas/metadata';
3
- import { normalizeEditorLayoutId } from '../document/layout-id';
1
+ import { loadAlignmentSchemaAsync, getLoadedAlignmentSchema, } from '../alignment-schemas/lazy-loader.js';
2
+ import { getLayoutMetadata } from '../alignment-schemas/metadata.js';
3
+ import { normalizeEditorLayoutId } from '../document/layout-id.js';
4
4
  const _overlayCache = {};
5
5
  function buildOverlayJSON(metadata, alignmentSchema) {
6
6
  return {
@@ -15,7 +15,7 @@ const widgetRegistry = new Map();
15
15
  *
16
16
  * @example
17
17
  * ```tsx
18
- * import { registerWidget } from './widget-registry';
18
+ * import { registerWidget } from './widget-registry.js';
19
19
  *
20
20
  * const MyCustomTextField = ({ label, value, onChange }) => (
21
21
  * <div>
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import React from 'react';
4
4
  import { AlignLeft, ChevronDown, ChevronRight, Eye, EyeOff, Image as ImageIcon, Layers, MapPin, Minus, MousePointer2, Square, Star, Tag, Type, } from 'lucide-react';
5
5
  import { cn } from '../../lib/utils/index.js';
6
- import { isGranularPathUnderBlock } from '../blocks/nav-outline-utils';
6
+ import { isGranularPathUnderBlock } from '../blocks/nav-outline-utils.js';
7
7
  const BLOCK_ICON_MAP = {
8
8
  'payaza/heading': Type,
9
9
  'payaza/paragraph': AlignLeft,
@@ -4,7 +4,7 @@ import { createPortal } from 'react-dom';
4
4
  import { motion, AnimatePresence } from 'framer-motion';
5
5
  import { cn } from '../../lib/utils/index.js';
6
6
  import { ArrowLeft, Layout, Save, Smartphone, Monitor, Tablet, Eye, Pencil, PanelLeft, ChevronDown, Home, ShoppingBag, ShoppingCart, FileText, Settings, Undo2, Redo2, Send, Sparkles, Image as ImageIcon, Palette, Check, ZoomIn, } from 'lucide-react';
7
- import { PREVIEW_ZOOM_OPTIONS } from './preview-viewport';
7
+ import { PREVIEW_ZOOM_OPTIONS } from './preview-viewport.js';
8
8
  const Tooltip = ({ text, children }) => {
9
9
  const [isVisible, setIsVisible] = useState(false);
10
10
  const [coords, setCoords] = useState({ top: 0, left: 0 });
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { cn } from '../../lib/utils/index.js';
4
4
  import { ChevronDown, ChevronRight, Eye, EyeOff, Layers, List } from 'lucide-react';
5
- import { BlockOutlineTree } from './BlockOutlineTree';
5
+ import { BlockOutlineTree } from './BlockOutlineTree.js';
6
6
  /**
7
7
  * Full-template outline (pages → blocks). Reorder controls apply to the active page only.
8
8
  */
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useEffect, useImperativeHandle, useMemo, useRef, useState, forwardRef } from 'react';
3
- import { isDeepEqual } from '../../lib/utils';
4
- import { normalizeEditorLayoutId } from '../document/layout-id';
5
- import { previewPageIdToRoute } from '../../preview/canvas/preview-route';
6
- import { PREVIEW_MSG } from '../../preview/canvas/preview-messages';
7
- import { DESKTOP_PREVIEW_WIDTH, resolvePreviewScale, } from './preview-viewport';
8
- export { DESKTOP_PREVIEW_WIDTH } from './preview-viewport';
3
+ import { isDeepEqual } from '../../lib/utils/index.js';
4
+ import { normalizeEditorLayoutId } from '../document/layout-id.js';
5
+ import { previewPageIdToRoute } from '../../preview/canvas/preview-route.js';
6
+ import { PREVIEW_MSG } from '../../preview/canvas/preview-messages.js';
7
+ import { DESKTOP_PREVIEW_WIDTH, resolvePreviewScale, } from './preview-viewport.js';
8
+ export { DESKTOP_PREVIEW_WIDTH } from './preview-viewport.js';
9
9
  export const IframePreview = forwardRef(function IframePreview({ layoutId, config, activePageId, viewMode, selectedSection, focusedField = null, interactionMode = 'edit', slideIndexSync = null, flushRequestId = 0, previewZoom = 'fit', desktopCanvasWidth = DESKTOP_PREVIEW_WIDTH, className = '', }, ref) {
10
10
  const iframeRef = useRef(null);
11
11
  const viewportContainerRef = useRef(null);
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useEffect, useMemo, useRef, useState } from 'react';
4
- import { LayoutPreview } from '../../preview/LayoutPreview';
5
- import { PreviewCanvasEnhancer } from '../../preview/canvas/PreviewCanvasEnhancer';
6
- import { PreviewCanvasStyles } from '../../preview/canvas/PreviewCanvasStyles';
7
- import { previewPageIdToRoute } from '../../preview/canvas/preview-route';
8
- import { PREVIEW_MSG } from '../../preview/canvas/preview-messages';
9
- import { normalizeEditorLayoutId } from '../document/layout-id';
10
- import { DESKTOP_PREVIEW_WIDTH, resolvePreviewScale, } from './preview-viewport';
4
+ import { LayoutPreview } from '../../preview/LayoutPreview.js';
5
+ import { PreviewCanvasEnhancer } from '../../preview/canvas/PreviewCanvasEnhancer.js';
6
+ import { PreviewCanvasStyles } from '../../preview/canvas/PreviewCanvasStyles.js';
7
+ import { previewPageIdToRoute } from '../../preview/canvas/preview-route.js';
8
+ import { PREVIEW_MSG } from '../../preview/canvas/preview-messages.js';
9
+ import { normalizeEditorLayoutId } from '../document/layout-id.js';
10
+ import { DESKTOP_PREVIEW_WIDTH, resolvePreviewScale, } from './preview-viewport.js';
11
11
  import { MOBILE_INLINE_DESKTOP_MAX_WIDTH, shouldUseInlineEditorPreview, } from '../../lib/utils/mobile-editor.js';
12
12
  const MOBILE_INLINE_MIN_LAYOUT_HEIGHT = 480;
13
13
  /**
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { LayoutPreview } from '../../preview/LayoutPreview';
2
+ import { LayoutPreview } from '../../preview/LayoutPreview.js';
3
3
  export const LayoutRenderer = ({ layoutId, config, activePageId, className = '', }) => {
4
4
  // Map the pageId to a route for LayoutPreview
5
5
  const route = activePageId === 'home' ? '/' : `/${activePageId}`;
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState, useCallback, useEffect, useRef } from 'react';
3
- import { cn } from '../../lib/utils';
3
+ import { cn } from '../../lib/utils/index.js';
4
4
  import { GripVertical } from 'lucide-react';
5
5
  export const ResizableSidebar = ({ children, initialWidth = 400, minWidth = 300, maxWidth = 600, className = '', side = 'right', onWidthChange, }) => {
6
6
  const [width, setWidth] = useState(initialWidth);
@@ -1,7 +1,7 @@
1
- export * from './EditorHeader';
2
- export * from './EditorNavigator';
3
- export * from './IframePreview';
4
- export * from './InlineCanvasPreview';
5
- export * from './LayoutRenderer';
6
- export * from './PageTabs';
7
- export * from './ResizableSidebar';
1
+ export * from './EditorHeader.js';
2
+ export * from './EditorNavigator.js';
3
+ export * from './IframePreview.js';
4
+ export * from './InlineCanvasPreview.js';
5
+ export * from './LayoutRenderer.js';
6
+ export * from './PageTabs.js';
7
+ export * from './ResizableSidebar.js';