payaza-storefront-layouts 1.0.48 → 1.0.49

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.
@@ -2,6 +2,7 @@ import { LayoutInventory } from './types';
2
2
  export * from './types';
3
3
  export * from './shared';
4
4
  export * as PayazaForm from './payaza-form';
5
+ export { getGlobalAssetSelectionHandler } from './payaza-form/AssetSelectionContext';
5
6
  /**
6
7
  * Helper to get the full inventory of all layouts
7
8
  * Now uses alignment-schemas instead of requirements JSON
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAGzB,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAO,eAOnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AAGzB,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AAErF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAO,eAOnC,CAAC"}
@@ -3,6 +3,8 @@ export * from './types';
3
3
  export * from './shared';
4
4
  // Export PayazaForm editor
5
5
  export * as PayazaForm from './payaza-form';
6
+ // Also export asset selection handler directly for easier access
7
+ export { getGlobalAssetSelectionHandler } from './payaza-form/AssetSelectionContext';
6
8
  /**
7
9
  * Helper to get the full inventory of all layouts
8
10
  * Now uses alignment-schemas instead of requirements JSON
@@ -1 +1 @@
1
- {"version":3,"file":"AssetSelectionContext.d.ts","sourceRoot":"","sources":["../../../src/editor/payaza-form/AssetSelectionContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAoD,SAAS,EAAqB,MAAM,OAAO,CAAC;AAE9G,UAAU,0BAA0B;IAClC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAID,UAAU,2BAA2B;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAKD,eAAO,MAAM,8BAA8B,GAAI,SAAS,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,SAErF,CAAC;AAEF,eAAO,MAAM,8BAA8B,QAAO,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAE3E,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAkDxE,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,0BAYpC,CAAC"}
1
+ {"version":3,"file":"AssetSelectionContext.d.ts","sourceRoot":"","sources":["../../../src/editor/payaza-form/AssetSelectionContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAoD,SAAS,EAAqB,MAAM,OAAO,CAAC;AAE9G,UAAU,0BAA0B;IAClC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;IAC7D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAID,UAAU,2BAA2B;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAKD,eAAO,MAAM,8BAA8B,GAAI,SAAS,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,SAErF,CAAC;AAEF,eAAO,MAAM,8BAA8B,QAAO,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAE3E,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAsExE,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,0BAYpC,CAAC"}
@@ -15,26 +15,48 @@ export const AssetSelectionProvider = ({ children, onOpenAssets, assets, }) => {
15
15
  // Update ref when callback changes
16
16
  useEffect(() => {
17
17
  callbackRef.current = pendingCallback;
18
+ console.log('[AssetSelectionContext] Callback ref updated:', {
19
+ hasCallback: !!pendingCallback,
20
+ hasRef: !!callbackRef.current,
21
+ });
18
22
  }, [pendingCallback]);
19
23
  // Set up global handler that host app can call
24
+ // The handler always reads from callbackRef.current to get the latest callback
20
25
  useEffect(() => {
21
26
  const handler = (url) => {
27
+ console.log('[AssetSelectionContext] Global handler called with URL:', url, {
28
+ hasCallbackRef: !!callbackRef.current,
29
+ });
22
30
  if (callbackRef.current) {
31
+ console.log('[AssetSelectionContext] Invoking callback with URL:', url);
23
32
  callbackRef.current(url);
24
33
  setPendingCallback(null); // Clear callback after use
34
+ callbackRef.current = null; // Also clear ref
35
+ }
36
+ else {
37
+ console.warn('[AssetSelectionContext] No callback available when handler was called');
25
38
  }
26
39
  };
27
40
  setGlobalAssetSelectionHandler(handler);
41
+ console.log('[AssetSelectionContext] Global handler registered');
28
42
  return () => {
29
43
  setGlobalAssetSelectionHandler(null);
44
+ console.log('[AssetSelectionContext] Global handler cleared');
30
45
  };
31
46
  }, []);
32
47
  const onOpenAssetSelect = useCallback((callback) => {
33
48
  if (onOpenAssets) {
49
+ console.log('[AssetSelectionContext] onOpenAssetSelect called, storing callback');
34
50
  // Store the callback so the host app can call it when an asset is selected
35
51
  setPendingCallback(() => callback);
52
+ // Also update ref immediately for synchronous access
53
+ callbackRef.current = callback;
36
54
  // Open the asset library
37
55
  onOpenAssets();
56
+ console.log('[AssetSelectionContext] Asset library opened, callback stored');
57
+ }
58
+ else {
59
+ console.warn('[AssetSelectionContext] onOpenAssets not available');
38
60
  }
39
61
  }, [onOpenAssets]);
40
62
  const value = {
@@ -1 +1 @@
1
- {"version":3,"file":"PayazaFormEditor.d.ts","sourceRoot":"","sources":["../../../src/editor/payaza-form/PayazaFormEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAU/C,OAAO,EAA4B,eAAe,EAAgB,MAAM,mBAAmB,CAAC;AAQ5F,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAgyB5D,CAAC"}
1
+ {"version":3,"file":"PayazaFormEditor.d.ts","sourceRoot":"","sources":["../../../src/editor/payaza-form/PayazaFormEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAU/C,OAAO,EAA4B,eAAe,EAAgB,MAAM,mBAAmB,CAAC;AAQ5F,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAkyB5D,CAAC"}
@@ -15,7 +15,7 @@ import { useDebounce } from '../../hooks/use-debounce';
15
15
  import { AIGenerateModal } from '../shared/AIGenerateModal';
16
16
  import { useAlertModal } from '../../components/ui/alert-modal';
17
17
  import { AssetSelectionProvider } from './AssetSelectionContext';
18
- export const PayazaFormEditor = ({ layoutId, initialData, inventory, onChange, onSave, onPublish, onBack, onBackToSettings, onOpenAssets, onBackToTheme, title, className = '', customWidgets, storeName, storeDescription, assets, }) => {
18
+ export const PayazaFormEditor = ({ layoutId, initialData, inventory, onChange, onSave, onPublish, onBack, onBackToSettings, onOpenAssets, onBackToTheme, title, className = '', customWidgets, storeName, storeDescription, assets, publishButtonText, }) => {
19
19
  const [activePageId, setActivePageId] = useState('home');
20
20
  const [data, setData] = useState(initialData);
21
21
  const dataRef = useRef(initialData);
@@ -479,7 +479,7 @@ export const PayazaFormEditor = ({ layoutId, initialData, inventory, onChange, o
479
479
  if (!layoutJson || !pageSchema) {
480
480
  return (_jsx("div", { className: "flex items-center justify-center h-full", children: _jsx("div", { className: "text-slate-400", children: "Layout not found" }) }));
481
481
  }
482
- return (_jsx(AssetSelectionProvider, { onOpenAssets: onOpenAssets, assets: assets, children: _jsxs("div", { className: `flex flex-col h-full bg-white ${className} font-sans antialiased text-slate-900`, children: [_jsx(EditorHeader, { layoutName: layoutJson.layoutName || layoutId, storeName: storeName, activePage: activePageId, pages: pages, onPageSwitch: setActivePageId, 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, editorType: "payaza-form", isSaving: isSaving, isPublishing: isPublishing, onGenerateAI: () => setIsAIModalOpen(true), isGeneratingAI: isGeneratingAI }), _jsx(AIGenerateModal, { isOpen: isAIModalOpen, onClose: () => setIsAIModalOpen(false), onGenerate: handleAIGenerate, initialContext: {
482
+ return (_jsx(AssetSelectionProvider, { onOpenAssets: onOpenAssets, assets: assets, children: _jsxs("div", { className: `flex flex-col h-full bg-white ${className} font-sans antialiased text-slate-900`, children: [_jsx(EditorHeader, { layoutName: layoutJson.layoutName || layoutId, storeName: storeName, activePage: activePageId, pages: pages, onPageSwitch: setActivePageId, 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, editorType: "payaza-form", isSaving: isSaving, isPublishing: isPublishing, onGenerateAI: () => setIsAIModalOpen(true), isGeneratingAI: isGeneratingAI, publishButtonText: publishButtonText }), _jsx(AIGenerateModal, { isOpen: isAIModalOpen, onClose: () => setIsAIModalOpen(false), onGenerate: handleAIGenerate, initialContext: {
483
483
  storeName: storeName || data?.name || '',
484
484
  storeDescription: storeDescription || data?.description || '',
485
485
  assets: assets || [],
@@ -1 +1 @@
1
- {"version":3,"file":"ImageField.d.ts","sourceRoot":"","sources":["../../../../src/editor/payaza-form/components/ImageField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsGhD,CAAC"}
1
+ {"version":3,"file":"ImageField.d.ts","sourceRoot":"","sources":["../../../../src/editor/payaza-form/components/ImageField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0GhD,CAAC"}
@@ -8,12 +8,16 @@ export const ImageField = ({ label, value, onChange, placeholder, }) => {
8
8
  const { onOpenAssetSelect, isAssetLibraryAvailable } = useAssetSelection();
9
9
  const handleReplace = React.useCallback(() => {
10
10
  if (isAssetLibraryAvailable) {
11
+ console.log('[ImageField] REPLACE clicked, opening asset library');
11
12
  // Open asset library with callback to replace image
12
13
  onOpenAssetSelect((selectedUrl) => {
14
+ console.log('[ImageField] Callback invoked with URL:', selectedUrl);
13
15
  onChange(selectedUrl);
16
+ console.log('[ImageField] Image field updated with URL:', selectedUrl);
14
17
  });
15
18
  }
16
19
  else {
20
+ console.warn('[ImageField] Asset library not available, clearing image');
17
21
  // Fallback: just clear the image if asset library is not available
18
22
  onChange('');
19
23
  }
@@ -2,7 +2,7 @@ export { PayazaFormEditor } from './PayazaFormEditor';
2
2
  export type { PayazaFormEditorProps } from './PayazaFormEditor';
3
3
  export { PayazaFormEditorFullPage } from './PayazaFormEditorFullPage';
4
4
  export type { PayazaFormEditorFullPageProps } from './PayazaFormEditorFullPage';
5
- export { getGlobalAssetSelectionHandler } from './AssetSelectionContext';
5
+ export { getGlobalAssetSelectionHandler, setGlobalAssetSelectionHandler } from './AssetSelectionContext';
6
6
  export * from './engine';
7
7
  export * from './data-transformer';
8
8
  export * from './layout-loader';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor/payaza-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor/payaza-form/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzG,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { PayazaFormEditor } from './PayazaFormEditor';
2
2
  export { PayazaFormEditorFullPage } from './PayazaFormEditorFullPage';
3
- export { getGlobalAssetSelectionHandler } from './AssetSelectionContext';
3
+ export { getGlobalAssetSelectionHandler, setGlobalAssetSelectionHandler } from './AssetSelectionContext';
4
4
  export * from './engine';
5
5
  export * from './data-transformer';
6
6
  export * from './layout-loader';
@@ -25,6 +25,7 @@ interface EditorHeaderProps {
25
25
  viewMode?: 'desktop' | 'tablet' | 'mobile';
26
26
  onViewModeChange?: (mode: 'desktop' | 'tablet' | 'mobile') => void;
27
27
  editorType?: 'payaza-form';
28
+ publishButtonText?: string;
28
29
  }
29
30
  export declare const EditorHeader: React.FC<EditorHeaderProps>;
30
31
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"EditorHeader.d.ts","sourceRoot":"","sources":["../../../src/editor/shared/EditorHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AA+ExE,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;IACnE,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAWD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAwWpD,CAAC"}
1
+ {"version":3,"file":"EditorHeader.d.ts","sourceRoot":"","sources":["../../../src/editor/shared/EditorHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AA+ExE,UAAU,iBAAiB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;IACnE,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAWD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyWpD,CAAC"}
@@ -31,7 +31,7 @@ const getPageIcon = (pageId) => {
31
31
  default: return _jsx(FileText, { className: "w-3.5 h-3.5" });
32
32
  }
33
33
  };
34
- export const EditorHeader = ({ layoutName, storeName, activePage, isSaving, isPublishing, onSave, onPublish, onBack, onBackToSettings, onOpenAssets, onBackToTheme, onUndo, onRedo, canUndo, canRedo, onGenerateAI, isGeneratingAI, pages, onPageSwitch, viewMode = 'desktop', onViewModeChange, editorType }) => {
34
+ export const EditorHeader = ({ layoutName, storeName, activePage, isSaving, isPublishing, onSave, onPublish, onBack, onBackToSettings, onOpenAssets, onBackToTheme, onUndo, onRedo, canUndo, canRedo, onGenerateAI, isGeneratingAI, pages, onPageSwitch, viewMode = 'desktop', onViewModeChange, editorType, publishButtonText = 'Publish' }) => {
35
35
  const [isPageSwitcherOpen, setIsPageSwitcherOpen] = useState(false);
36
36
  const scrollContainerRef = useRef(null);
37
37
  const [canScrollLeft, setCanScrollLeft] = useState(false);
@@ -106,7 +106,7 @@ export const EditorHeader = ({ layoutName, storeName, activePage, isSaving, isPu
106
106
  setIsPageSwitcherOpen(false);
107
107
  }, className: `w-full flex items-center justify-between px-3 py-2.5 rounded-xl transition-all ${activePage === page.id
108
108
  ? 'bg-slate-900 text-white shadow-lg shadow-slate-200'
109
- : 'text-slate-600 hover:bg-slate-50'}`, children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: activePage === page.id ? 'text-white' : 'text-slate-400', children: getPageIcon(page.id) }), _jsx("span", { className: `text-[10px] font-black uppercase tracking-widest`, children: page.name })] }), activePage === page.id && _jsx(Check, { className: "w-3.5 h-3.5", strokeWidth: 3 })] }, page.id))) })] })) })] }) }), _jsxs("div", { className: "flex items-center gap-2 flex-shrink-0", children: [_jsxs("div", { className: "flex items-center mr-2", children: [_jsx(Tooltip, { text: "Desktop View", children: _jsx("button", { onClick: () => onViewModeChange?.('desktop'), className: `p-2 rounded-xl transition-all ${viewMode === 'desktop' ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:text-slate-600 hover:bg-slate-50'}`, children: _jsx(Monitor, { size: 18, strokeWidth: 2.5 }) }) }), _jsx(Tooltip, { text: "Tablet View", children: _jsx("button", { onClick: () => onViewModeChange?.('tablet'), className: `p-2 rounded-xl transition-all ${viewMode === 'tablet' ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:text-slate-600 hover:bg-slate-50'}`, children: _jsx(Tablet, { size: 18, strokeWidth: 2.5 }) }) }), _jsx(Tooltip, { text: "Mobile View", children: _jsx("button", { onClick: () => onViewModeChange?.('mobile'), className: `p-2 rounded-xl transition-all ${viewMode === 'mobile' ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:text-slate-600 hover:bg-slate-50'}`, children: _jsx(Smartphone, { size: 18, strokeWidth: 2.5 }) }) })] }), _jsx("div", { className: "h-8 w-px bg-slate-100 mx-1" }), _jsxs("div", { className: "flex items-center mr-2", children: [_jsx(Tooltip, { text: "Undo (Ctrl+Z)", children: _jsx("button", { onClick: onUndo, disabled: !canUndo, className: `p-2 rounded-xl transition-all ${canUndo ? 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' : 'text-slate-200 cursor-not-allowed'}`, children: _jsx(Undo2, { size: 18, strokeWidth: 2.5 }) }) }), _jsx(Tooltip, { text: "Redo (Ctrl+Y)", children: _jsx("button", { onClick: onRedo, disabled: !canRedo, className: `p-2 rounded-xl transition-all ${canRedo ? 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' : 'text-slate-200 cursor-not-allowed'}`, children: _jsx(Redo2, { size: 18, strokeWidth: 2.5 }) }) })] }), _jsx("div", { className: "h-8 w-px bg-slate-100 mx-1" }), _jsxs("div", { className: "flex items-center mr-2", children: [onBackToSettings && (_jsx(Tooltip, { text: "Store Settings", children: _jsx("button", { onClick: onBackToSettings, className: "p-2 rounded-xl text-slate-600 hover:text-slate-900 hover:bg-slate-50 transition-all", children: _jsx(Settings, { size: 18, strokeWidth: 2.5 }) }) })), onOpenAssets && (_jsx(Tooltip, { text: "Assets Library", children: _jsx("button", { onClick: onOpenAssets, className: "p-2 rounded-xl text-slate-600 hover:text-slate-900 hover:bg-slate-50 transition-all", children: _jsx(ImageIcon, { size: 18, strokeWidth: 2.5 }) }) })), onBackToTheme && (_jsx(Tooltip, { text: "Theme Selector", children: _jsx("button", { onClick: onBackToTheme, className: "p-2 rounded-xl text-slate-600 hover:text-slate-900 hover:bg-slate-50 transition-all", children: _jsx(Palette, { size: 18, strokeWidth: 2.5 }) }) }))] }), _jsx("div", { className: "h-8 w-px bg-slate-100 mx-1" }), onGenerateAI && (_jsx(Tooltip, { text: "AI Magic Generator", children: _jsx("button", { onClick: onGenerateAI, disabled: isGeneratingAI, className: "h-9 w-9 bg-gradient-to-r from-indigo-600 to-violet-600 text-white rounded-xl font-black flex items-center justify-center hover:from-indigo-700 hover:to-violet-700 transition-all shadow-md shadow-indigo-100 active:scale-[0.98] disabled:opacity-50", children: isGeneratingAI ? (_jsx("span", { className: "w-3.5 h-3.5 border-2 border-white/30 border-t-white rounded-full animate-spin" })) : (_jsx(Sparkles, { className: "w-3.5 h-3.5" })) }) })), _jsx(Tooltip, { text: "Save Changes", children: _jsxs("button", { onClick: onSave, disabled: isSaving, className: "h-9 px-4 bg-white text-slate-900 border border-slate-200 rounded-xl font-black text-[9px] uppercase tracking-[0.1em] flex items-center gap-2 hover:bg-slate-50 hover:shadow-md hover:shadow-slate-100 transition-all active:scale-[0.98] disabled:opacity-50", children: [isSaving ? (_jsx("span", { className: "w-3.5 h-3.5 border-2 border-slate-200 border-t-slate-800 rounded-full animate-spin" })) : (_jsx(Save, { className: "w-3.5 h-3.5", strokeWidth: 2.5 })), "Save Draft"] }) }), _jsx(Tooltip, { text: !onPublish ? "No changes to publish" : "Publish to Store", children: _jsxs("button", { onClick: onPublish, disabled: isPublishing || !onPublish, className: "h-9 px-5 bg-slate-900 text-white rounded-xl font-black text-[9px] uppercase tracking-[0.12em] flex items-center gap-2 hover:bg-black transition-all shadow-lg shadow-slate-200 active:scale-[0.98] disabled:opacity-50 disabled:bg-slate-200 disabled:text-slate-400 disabled:shadow-none", children: [isPublishing ? (_jsx("span", { className: "w-3.5 h-3.5 border-2 border-white/30 border-t-white rounded-full animate-spin" })) : (_jsx(Send, { className: "w-3.5 h-3.5", strokeWidth: 2.5 })), "Publish"] }) })] })] }), _jsx("style", { dangerouslySetInnerHTML: { __html: `
109
+ : 'text-slate-600 hover:bg-slate-50'}`, children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: activePage === page.id ? 'text-white' : 'text-slate-400', children: getPageIcon(page.id) }), _jsx("span", { className: `text-[10px] font-black uppercase tracking-widest`, children: page.name })] }), activePage === page.id && _jsx(Check, { className: "w-3.5 h-3.5", strokeWidth: 3 })] }, page.id))) })] })) })] }) }), _jsxs("div", { className: "flex items-center gap-2 flex-shrink-0", children: [_jsxs("div", { className: "flex items-center mr-2", children: [_jsx(Tooltip, { text: "Desktop View", children: _jsx("button", { onClick: () => onViewModeChange?.('desktop'), className: `p-2 rounded-xl transition-all ${viewMode === 'desktop' ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:text-slate-600 hover:bg-slate-50'}`, children: _jsx(Monitor, { size: 18, strokeWidth: 2.5 }) }) }), _jsx(Tooltip, { text: "Tablet View", children: _jsx("button", { onClick: () => onViewModeChange?.('tablet'), className: `p-2 rounded-xl transition-all ${viewMode === 'tablet' ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:text-slate-600 hover:bg-slate-50'}`, children: _jsx(Tablet, { size: 18, strokeWidth: 2.5 }) }) }), _jsx(Tooltip, { text: "Mobile View", children: _jsx("button", { onClick: () => onViewModeChange?.('mobile'), className: `p-2 rounded-xl transition-all ${viewMode === 'mobile' ? 'bg-slate-100 text-slate-900' : 'text-slate-400 hover:text-slate-600 hover:bg-slate-50'}`, children: _jsx(Smartphone, { size: 18, strokeWidth: 2.5 }) }) })] }), _jsx("div", { className: "h-8 w-px bg-slate-100 mx-1" }), _jsxs("div", { className: "flex items-center mr-2", children: [_jsx(Tooltip, { text: "Undo (Ctrl+Z)", children: _jsx("button", { onClick: onUndo, disabled: !canUndo, className: `p-2 rounded-xl transition-all ${canUndo ? 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' : 'text-slate-200 cursor-not-allowed'}`, children: _jsx(Undo2, { size: 18, strokeWidth: 2.5 }) }) }), _jsx(Tooltip, { text: "Redo (Ctrl+Y)", children: _jsx("button", { onClick: onRedo, disabled: !canRedo, className: `p-2 rounded-xl transition-all ${canRedo ? 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' : 'text-slate-200 cursor-not-allowed'}`, children: _jsx(Redo2, { size: 18, strokeWidth: 2.5 }) }) })] }), _jsx("div", { className: "h-8 w-px bg-slate-100 mx-1" }), _jsxs("div", { className: "flex items-center mr-2", children: [onBackToSettings && (_jsx(Tooltip, { text: "Store Settings", children: _jsx("button", { onClick: onBackToSettings, className: "p-2 rounded-xl text-slate-600 hover:text-slate-900 hover:bg-slate-50 transition-all", children: _jsx(Settings, { size: 18, strokeWidth: 2.5 }) }) })), onOpenAssets && (_jsx(Tooltip, { text: "Assets Library", children: _jsx("button", { onClick: onOpenAssets, className: "p-2 rounded-xl text-slate-600 hover:text-slate-900 hover:bg-slate-50 transition-all", children: _jsx(ImageIcon, { size: 18, strokeWidth: 2.5 }) }) })), onBackToTheme && (_jsx(Tooltip, { text: "Theme Selector", children: _jsx("button", { onClick: onBackToTheme, className: "p-2 rounded-xl text-slate-600 hover:text-slate-900 hover:bg-slate-50 transition-all", children: _jsx(Palette, { size: 18, strokeWidth: 2.5 }) }) }))] }), _jsx("div", { className: "h-8 w-px bg-slate-100 mx-1" }), onGenerateAI && (_jsx(Tooltip, { text: "AI Magic Generator", children: _jsx("button", { onClick: onGenerateAI, disabled: isGeneratingAI, className: "h-9 w-9 bg-gradient-to-r from-indigo-600 to-violet-600 text-white rounded-xl font-black flex items-center justify-center hover:from-indigo-700 hover:to-violet-700 transition-all shadow-md shadow-indigo-100 active:scale-[0.98] disabled:opacity-50", children: isGeneratingAI ? (_jsx("span", { className: "w-3.5 h-3.5 border-2 border-white/30 border-t-white rounded-full animate-spin" })) : (_jsx(Sparkles, { className: "w-3.5 h-3.5" })) }) })), _jsx(Tooltip, { text: "Save Changes", children: _jsxs("button", { onClick: onSave, disabled: isSaving, className: "h-9 px-4 bg-white text-slate-900 border border-slate-200 rounded-xl font-black text-[9px] uppercase tracking-[0.1em] flex items-center gap-2 hover:bg-slate-50 hover:shadow-md hover:shadow-slate-100 transition-all active:scale-[0.98] disabled:opacity-50", children: [isSaving ? (_jsx("span", { className: "w-3.5 h-3.5 border-2 border-slate-200 border-t-slate-800 rounded-full animate-spin" })) : (_jsx(Save, { className: "w-3.5 h-3.5", strokeWidth: 2.5 })), "Save Draft"] }) }), _jsx(Tooltip, { text: !onPublish ? "No changes to publish" : publishButtonText === "Update" ? "Update Store" : "Publish to Store", children: _jsxs("button", { onClick: onPublish, disabled: isPublishing || !onPublish, className: "h-9 px-5 bg-slate-900 text-white rounded-xl font-black text-[9px] uppercase tracking-[0.12em] flex items-center gap-2 hover:bg-black transition-all shadow-lg shadow-slate-200 active:scale-[0.98] disabled:opacity-50 disabled:bg-slate-200 disabled:text-slate-400 disabled:shadow-none", children: [isPublishing ? (_jsx("span", { className: "w-3.5 h-3.5 border-2 border-white/30 border-t-white rounded-full animate-spin" })) : (_jsx(Send, { className: "w-3.5 h-3.5", strokeWidth: 2.5 })), publishButtonText] }) })] })] }), _jsx("style", { dangerouslySetInnerHTML: { __html: `
110
110
  .overflow-x-auto::-webkit-scrollbar {
111
111
  display: none;
112
112
  }
@@ -94,6 +94,10 @@ export interface FullPageEditorProps extends BaseEditorProps {
94
94
  * Optional array of existing asset URLs passed from host app
95
95
  */
96
96
  assets?: string[];
97
+ /**
98
+ * Optional custom text for the publish button (e.g., "Update" for published stores)
99
+ */
100
+ publishButtonText?: string;
97
101
  }
98
102
  /**
99
103
  * Interface representing a page within a layout
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/editor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/editor/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payaza-storefront-layouts",
3
- "version": "1.0.48",
3
+ "version": "1.0.49",
4
4
  "type": "module",
5
5
  "description": "Shared layout components for StoreFront applications",
6
6
  "main": "dist/index.js",