react-email-studio 2.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ReactEmailEditor.tsx","../src/constants.tsx","../src/defaultBlockProps.ts","../src/lib/factories.ts","../src/lib/columnPath.ts","../src/socialIcons.tsx","../src/lib/htmlUtils.ts","../src/lib/blockBackground.ts","../src/lib/emailHtml.ts","../src/schema/emailDocument.ts","../src/lib/emailDesignJson.ts","../src/editor/canvas/DesignCanvas.tsx","../src/editor/properties/PropertyEditors.tsx","../src/editor/properties/TextRichEditor.tsx","../src/editor/properties/LetterSpacing.ts","../src/editor/properties/ColorSwatchGrid.tsx","../src/editor/preview/EmailPreviewModal.tsx","../src/editor/overlays/ContextMenu.tsx","../src/editor/overlays/ConfirmDialog.tsx","../src/editor/chrome/TBtn.tsx"],"sourcesContent":["import {\n useState, useRef, useEffect, useCallback, useMemo,\n forwardRef,\n useImperativeHandle,\n Fragment,\n type CSSProperties,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from \"react\";\nimport {\n THEMES,\n tr,\n LAYOUT_PRESETS,\n CONTENT_BLOCK_TYPES,\n BLOCK_PALETTE_GROUPS,\n type BlockPaletteGroupKey,\n} from \"./constants\";\nimport { makeLayoutRow, makeContentBlock, makeNestedRowBlock, uid } from \"./lib/factories\";\nimport { getColumnBlocks, updateColumnAt, toColumnLoc, sameColumnLoc, countBlocksInDesign, isSplitLayoutBlock } from \"./lib/columnPath\";\nimport { designToEmailDocument, normalizeEmailDesignInput } from \"./lib/emailDesignJson\";\nimport { CanvasRow } from \"./editor/canvas/DesignCanvas\";\nimport { Image as ImageIcon, Repeat as RepeatIcon, Move as MoveIcon, Scaling, Crosshair, Blend as GradientIcon, Droplets as ColorIcon } from \"lucide-react\";\nimport { ContentBlockEditor, LayoutRowEditor, PR, NumRangePx, ColorField, ImageUrlUploadField, DynamicGradientField, BgModeButtons } from \"./editor/properties/PropertyEditors\";\nimport { PreviewModal } from \"./editor/preview/EmailPreviewModal\";\nimport { designToHtml, type EmailHtmlOptions } from \"./lib/emailHtml\";\nimport { ContextMenu } from \"./editor/overlays/ContextMenu\";\nimport { ConfirmDialog } from \"./editor/overlays/ConfirmDialog\";\nimport { TBtn } from \"./editor/chrome/TBtn\";\n\nconst RIGHT_RAIL_DEFAULT_W = 328;\nconst RIGHT_RAIL_MIN_W = 260;\nconst RIGHT_RAIL_MAX_W = 720;\n\n/** Theme color tokens (subset used by the editor chrome). */\ntype ThemeColors = (typeof THEMES)[\"light\"];\n\n/** Known `options` keys for {@link ReactEmailEditor} — callers may pass extra keys; these are what the editor reads. */\nexport type ReactEmailEditorOptions = EmailHtmlOptions & {\n appearance?: {\n theme?: string;\n /** Shallow merge over the active theme (e.g. accent border). */\n colors?: Partial<ThemeColors>;\n /** Extra named palettes; keys appear in Settings → Color scheme. */\n customThemes?: Record<string, ThemeColors>;\n };\n locale?: string;\n mergeTags?: { name: string; value: string }[];\n features?: { autoSave?: { enabled?: boolean; interval?: number } };\n tools?: Record<string, { enabled?: boolean }>;\n /** Optional labels for block-library sections (row layouts + content blocks). */\n blockLibrary?: {\n groupHeadings?: { blocks?: string };\n /** Override default palette group titles (keys: text, structure, media, actions, widgets). */\n paletteGroupLabels?: Partial<Record<BlockPaletteGroupKey, string>>;\n };\n};\n\nexport interface ReactEmailEditorRef {\n loadJson(input: string | Record<string, unknown>): void;\n /** Calls `cb` with the design as a JSON string (new `email_document` schema). */\n exportJson(cb: (json: string) => void, pretty?: boolean): void;\n}\n\nexport type ReactEmailEditorProps = {\n minHeight?: string;\n editorId?: string;\n options?: ReactEmailEditorOptions;\n style?: CSSProperties;\n onLoad?: (api: ReactEmailEditorRef) => void;\n onReady?: (api: ReactEmailEditorRef) => void;\n onUpload?: (file: File) => Promise<string>;\n templates?: { name: string; design: unknown; thumbnail?: string }[];\n hideTemplates?: boolean;\n children?: ReactNode;\n};\n\nconst ReactEmailEditor = forwardRef<ReactEmailEditorRef, ReactEmailEditorProps>(\n function ReactEmailEditor(\n {\n minHeight = \"100vh\",\n editorId = \"email-editor\",\n onLoad,\n onReady,\n onUpload,\n options = {},\n templates = [],\n hideTemplates = false,\n style = {},\n },\n ref,\n ) {\n const opt = options;\n const mergedThemes = useMemo(\n () => ({ ...THEMES, ...(opt.appearance?.customThemes || {}) }),\n [opt.appearance?.customThemes],\n );\n const initialTheme =\n typeof opt.appearance?.theme === \"string\" && mergedThemes[opt.appearance.theme]\n ? opt.appearance.theme\n : \"light\";\n const [colorSchema, setColorSchema] = useState<string>(initialTheme);\n\n const [rows, setRows] = useState<any[]>(() => [makeLayoutRow(LAYOUT_PRESETS[0])]);\n const [selectedRowId,setSelectedRowId] = useState<string | null>(null);\n const [selContentId, setSelContentId] = useState<string | null>(null);\n const [selContentMeta,setSelMeta] = useState<any>(null);\n const [dragOver, setDragOver] = useState<number | null>(null);\n const [draggingRowId,setDraggingRowId] = useState<string | null>(null);\n const [history, setHistory] = useState<string[]>([]);\n const [future, setFuture] = useState<string[]>([]);\n const [showPreviewModal,setShowPreview]= useState<boolean>(false);\n const [previewDevice,setPreviewDevice] = useState<string>(\"desktop\");\n const [activeTab, setActiveTab] = useState<\"blocks\" | \"settings\">(\"blocks\");\n const [templatesOpen,setTemplatesOpen] = useState<boolean>(false);\n const [autoSaveMsg, setAutoSaveMsg] = useState<string>(\"\");\n const [locale, setLocale] = useState<string>(\n typeof opt.locale === \"string\" ? opt.locale : \"en\",\n );\n const [mergeTags, setMergeTagsState]= useState(() => opt.mergeTags ?? []);\n const [zoom, setZoom] = useState(100);\n const [rightRailWidth, setRightRailWidth] = useState(RIGHT_RAIL_DEFAULT_W);\n const [ctxMenu, setCtxMenu] = useState<any>(null); // {x,y,items}\n const [confirm, setConfirm] = useState<any>(null); // {msg,onConfirm}\n const [settings, setSettings] = useState({\n bgColor: \"#f1f5f9\",\n bgImage: \"\",\n bgSize: \"cover\",\n bgRepeat: \"no-repeat\",\n bgPosition: \"center\",\n bgGradient: null as any,\n contentBg: \"#ffffff\",\n contentBgImage: \"\",\n contentBgSize: \"cover\",\n contentBgRepeat: \"no-repeat\",\n contentBgPosition: \"center\",\n contentBgGradient: null as any,\n contentWidth: 600,\n padding: 24,\n borderRadius: 8,\n });\n /** Background UI: show type first; detail controls only after a choice (or after `loadJson`). */\n const [pageBgUiStep, setPageBgUiStep] = useState<null | \"solid\" | \"image\" | \"gradient\">(null);\n const [contentBgUiStep, setContentBgUiStep] = useState<null | \"solid\" | \"image\" | \"gradient\">(null);\n\n const applyPageBgMode = (mode: \"solid\" | \"image\" | \"gradient\") => {\n setPageBgUiStep(mode);\n if (mode === \"solid\") {\n setSettings((s) => ({ ...s, bgGradient: null, bgImage: \"\" }));\n return;\n }\n if (mode === \"image\") {\n setSettings((s) => ({ ...s, bgGradient: null }));\n return;\n }\n setSettings((s) => ({\n ...s,\n bgImage: \"\",\n bgGradient:\n (s as any).bgGradient || { angle: 135, colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"], stops: [0, 50, 100] },\n }));\n };\n\n const applyContentBgMode = (mode: \"solid\" | \"image\" | \"gradient\") => {\n setContentBgUiStep(mode);\n if (mode === \"solid\") {\n setSettings((s) => ({ ...s, contentBgGradient: null, contentBgImage: \"\" }));\n return;\n }\n if (mode === \"image\") {\n setSettings((s) => ({ ...s, contentBgGradient: null }));\n return;\n }\n setSettings((s) => ({\n ...s,\n contentBgImage: \"\",\n contentBgGradient:\n (s as any).contentBgGradient || { angle: 135, colors: [\"#ffffff\", \"#ffffff\", \"#ffffff\"], stops: [0, 50, 100] },\n }));\n };\n\n const autoSaveTimer = useRef<any>(null);\n /** Latest document for `exportJson`. */\n const rowsRef = useRef(rows);\n const settingsRef = useRef(settings);\n rowsRef.current = rows;\n settingsRef.current = settings;\n\n useEffect(() => {\n if (rows.length === 0) {\n setRows([makeLayoutRow(LAYOUT_PRESETS[0])]);\n }\n }, [rows.length]);\n\n useEffect(() => {\n const t = opt.appearance?.theme;\n if (typeof t === \"string\" && mergedThemes[t]) setColorSchema(t);\n }, [opt.appearance?.theme, mergedThemes]);\n\n const baseTheme = mergedThemes[colorSchema] || mergedThemes.light;\n const C: ThemeColors = { ...baseTheme, ...(opt.appearance?.colors || {}) };\n\n const L = (key) => tr(locale, key);\n\n // ── History ─────────────────────────────────────────────────────────────────\n const snap = useCallback(prev=>{\n setHistory(h=>[...h.slice(-50),JSON.stringify(prev)]);\n setFuture([]);\n },[]);\n const mutate = useCallback(fn=>{\n setRows(prev=>{\n snap(prev);\n const next=fn(prev);\n if (opt.features?.autoSave?.enabled) {\n clearTimeout(autoSaveTimer.current ?? undefined);\n autoSaveTimer.current = setTimeout(\n () => {\n setAutoSaveMsg(L(\"autoSaved\"));\n setTimeout(() => setAutoSaveMsg(\"\"), 2500);\n },\n opt.features?.autoSave?.interval ?? 3000,\n );\n }\n return next;\n });\n }, [snap, opt, locale]);\n\n const undo=()=>{\n if(!history.length) return;\n setFuture(f=>[JSON.stringify(rows),...f]);\n setRows(JSON.parse(history[history.length-1]));\n setHistory(h=>h.slice(0,-1));\n };\n const redo=()=>{\n if(!future.length) return;\n setHistory(h=>[...h,JSON.stringify(rows)]);\n setRows(JSON.parse(future[0]));\n setFuture(f=>f.slice(1));\n };\n\n // ── Keyboard shortcuts ──────────────────────────────────────────────────────\n useEffect(()=>{\n const handler=(e)=>{\n const tag=document.activeElement?.tagName;\n if(tag===\"INPUT\"||tag===\"TEXTAREA\"||tag===\"SELECT\") return;\n const ae=document.activeElement;\n /** TipTap / ProseMirror — let Backspace, Ctrl+Z, etc. stay inside the rich text field (not delete the block). */\n if(ae instanceof HTMLElement&&ae.closest(\".ProseMirror\")) return;\n if((e.ctrlKey||e.metaKey)&&e.key===\"z\"){e.preventDefault();undo();}\n else if((e.ctrlKey||e.metaKey)&&(e.key===\"y\"||(e.shiftKey&&e.key===\"z\"))){e.preventDefault();redo();}\n else if((e.ctrlKey||e.metaKey)&&e.key===\"d\"){e.preventDefault();if(selContentMeta)duplicateSelected();}\n else if(e.key===\"Escape\"){setSelContentId(null);setSelMeta(null);setSelectedRowId(null);setCtxMenu(null);}\n else if(e.key===\"Delete\"||e.key===\"Backspace\"){if(selContentMeta){e.preventDefault();deleteSelected();}}\n };\n window.addEventListener(\"keydown\",handler);\n return()=>window.removeEventListener(\"keydown\",handler);\n },[rows,history,future,selContentMeta]);\n\n // ── API ─────────────────────────────────────────────────────────────────────\n const buildApi=useCallback(()=>({\n loadJson(input){\n let parsed=input;\n if(typeof input===\"string\"){\n try{parsed=JSON.parse(input);}catch{return;}\n }\n const norm=normalizeEmailDesignInput(parsed);\n if(!norm)return;\n setRows(norm.rows);\n const ns = norm.settings as any;\n setSettings((s) => ({ ...s, ...ns }));\n const inferPage = (): \"solid\" | \"image\" | \"gradient\" => {\n if (ns?.bgGradient) return \"gradient\";\n if (String(ns?.bgImage ?? \"\").trim()) return \"image\";\n return \"solid\";\n };\n const inferContent = (): \"solid\" | \"image\" | \"gradient\" => {\n if (ns?.contentBgGradient) return \"gradient\";\n if (String(ns?.contentBgImage ?? \"\").trim()) return \"image\";\n return \"solid\";\n };\n setPageBgUiStep(inferPage());\n setContentBgUiStep(inferContent());\n },\n exportJson(cb, pretty) {\n const design = designToEmailDocument(rowsRef.current, settingsRef.current);\n const json = pretty ? JSON.stringify(design, null, 2) : JSON.stringify(design);\n cb(json);\n },\n }),[]);\n\n useImperativeHandle(ref,()=>buildApi(),[buildApi]);\n useEffect(()=>{const api=buildApi();onLoad?.(api);onReady?.(api);},[]);// eslint-disable-line\n\n // ── Row ops ─────────────────────────────────────────────────────────────────\n const handleRowDrop=(targetIdx,e)=>{\n if(e){\n // Check if this is a layout-from-sidebar drop\n try {\n const data=JSON.parse(e.dataTransfer.getData(\"application/json\")||\"{}\");\n if(data.layoutPresetKey){\n const preset=LAYOUT_PRESETS.find(p=>p.key===data.layoutPresetKey);\n if(preset){\n mutate(prev=>{const newRow=makeLayoutRow(preset);const next=[...prev];next.splice(targetIdx,0,newRow);return next;});\n setDragOver(null);return;\n }\n }\n } catch {}\n }\n if(draggingRowId){mutate(prev=>{const fi=prev.findIndex(r=>r.id===draggingRowId);if(fi===-1)return prev;const next=[...prev];const[m]=next.splice(fi,1);next.splice(targetIdx>fi?targetIdx-1:targetIdx,0,m);return next;});}\n setDragOver(null);setDraggingRowId(null);\n };\n const addRow =(preset)=>mutate(prev=>[...prev,makeLayoutRow(preset)]);\n const deleteRow =(id)=>{mutate(prev=>prev.filter(r=>r.id!==id));if(selectedRowId===id)setSelectedRowId(null);};\n const reassignNestedBlockIds=(b)=>{const nb={...b,id:uid()};if(isSplitLayoutBlock(nb)&&nb.props?.cells){nb.props={...nb.props,cells:nb.props.cells.map((col)=>col.map(reassignNestedBlockIds))};}return nb;};\n const dupRow =(id)=>mutate(prev=>{const i=prev.findIndex(r=>r.id===id);const copy=JSON.parse(JSON.stringify(prev[i]));copy.id=uid();copy.cells=copy.cells.map((c)=>c.map(reassignNestedBlockIds));const next=[...prev];next.splice(i+1,0,copy);return next;});\n const moveRow =(id,dir)=>mutate(prev=>{const i=prev.findIndex(r=>r.id===id);if((dir<0&&i===0)||(dir>0&&i===prev.length-1))return prev;const next=[...prev];const[r]=next.splice(i,1);next.splice(i+dir,0,r);return next;});\n const updateRow =(upd)=>mutate(prev=>prev.map(r=>r.id===upd.id?upd:r));\n\n // ── Content ops ─────────────────────────────────────────────────────────────\n const splice=(arr,item,idx)=>{const n=[...arr];n.splice(idx===null?n.length:Math.max(0,Math.min(idx,n.length)),0,item);return n;};\n\n const resolveSelectedBlock=useCallback((meta)=>{\n if(!meta)return null;\n const r=rows.find(x=>x.id===meta.rowId);\n if(!r)return null;\n const col=r.cells[meta.cellIdx];\n if(!col)return null;\n const parent=col[meta.contentIdx];\n if(!meta.inner)return parent??null;\n if(!parent||!isSplitLayoutBlock(parent))return null;\n const innerCol=parent.props.cells[meta.inner.cellIdx];\n return innerCol?.[meta.inner.contentIdx]??null;\n },[rows]);\n\n const dropContent=(rowId:any,cellIdx:any,action:any)=>{\n const {insertAt:ia=null}=action;\n const nested=action.nested;\n const toLoc=toColumnLoc(rowId,cellIdx,nested);\n if(action.kind===\"new\"){\n let nb;\n if(\n action.preset &&\n (action.contentType === \"layout\" || action.contentType === \"nestedRow\")\n ){\n nb=makeNestedRowBlock(action.preset);\n }else{\n nb=makeContentBlock(action.contentType);\n }\n const col=getColumnBlocks(rows,toLoc);\n const prevLen=col.length;\n const insertIndex=ia==null||ia===undefined?prevLen:Math.max(0,Math.min(ia,prevLen));\n mutate(prev=>updateColumnAt(prev,toLoc,c=>splice(c,nb,insertIndex)));\n setSelectedRowId(null);\n setSelContentId(nb.id);\n if(nested){\n setSelMeta({rowId,cellIdx,contentIdx:nested.parentBlockIdx,inner:{cellIdx:nested.innerCellIdx,contentIdx:insertIndex}});\n }else{\n setSelMeta({rowId,cellIdx,contentIdx:insertIndex});\n }\n } else if(action.kind===\"move\"){\n const{fromRow,fromCell,fromIdx,fromNested}=action;\n const fromLoc=toColumnLoc(fromRow,fromCell,fromNested);\n const moved=getColumnBlocks(rows,fromLoc)[fromIdx];\n if(!moved)return;\n mutate(prev=>{\n let movedBlock=null;\n let next=updateColumnAt(prev,fromLoc,c=>{movedBlock=c[fromIdx];return c.filter((_,i)=>i!==fromIdx);});\n if(!movedBlock)return prev;\n let adj=ia;\n if(sameColumnLoc(fromLoc,toLoc)&&(ia!==null&&ia!==undefined))adj=fromIdx<ia?ia-1:ia;\n const lenAfter=getColumnBlocks(next,toLoc).length;\n const insertIndex=(ia===null||ia===undefined)?lenAfter:Math.max(0,Math.min(adj,lenAfter));\n return updateColumnAt(next,toLoc,c=>splice(c,movedBlock,insertIndex));\n });\n if(moved){\n const fromLoc2=toColumnLoc(fromRow,fromCell,fromNested);\n const toLoc2=toColumnLoc(rowId,cellIdx,nested);\n const targetLenBefore=getColumnBlocks(rows,toLoc2).length;\n const sameCol=sameColumnLoc(fromLoc2,toLoc2);\n let adj=ia;\n if(sameCol&&(ia!==null&&ia!==undefined))adj=fromIdx<ia?ia-1:ia;\n const lenAfterRemove=sameCol?Math.max(0,targetLenBefore-1):targetLenBefore;\n const insertIndex=(ia===null||ia===undefined)?lenAfterRemove:Math.max(0,Math.min(adj,lenAfterRemove));\n setSelectedRowId(null);\n setSelContentId(moved.id);\n if(nested){\n setSelMeta({rowId,cellIdx,contentIdx:nested.parentBlockIdx,inner:{cellIdx:nested.innerCellIdx,contentIdx:insertIndex}});\n }else{\n setSelMeta({rowId,cellIdx,contentIdx:insertIndex});\n }\n }\n } else if(action.kind===\"duplicate\"){\n const{fromIdx,fromNested}=action;\n const loc=toColumnLoc(rowId,cellIdx,fromNested);\n const col=getColumnBlocks(rows,loc);\n const source=col[fromIdx];\n if(!source)return;\n const copy=reassignNestedBlockIds(JSON.parse(JSON.stringify(source)));\n mutate(prev=>updateColumnAt(prev,loc,c=>{\n const n=[...c];\n n.splice(fromIdx+1,0,copy);\n return n;\n }));\n setSelectedRowId(null);\n setSelContentId(copy.id);\n if(fromNested){\n setSelMeta({rowId,cellIdx,contentIdx:fromNested.parentBlockIdx,inner:{cellIdx:fromNested.innerCellIdx,contentIdx:fromIdx+1}});\n }else{\n setSelMeta({rowId,cellIdx,contentIdx:fromIdx+1});\n }\n }\n };\n\n /** @param inner null | { parentBlockIdx, cellIdx, contentIdx } — when set, ci is ignored; inner.contentIdx is index in inner column */\n const deleteContent=(rowId:any,cellIdx:any,ci:any,inner:any=null)=>{\n if(!inner){\n mutate(prev=>prev.map(r=>{if(r.id!==rowId)return r;const cells=r.cells.map((c,i)=>i===cellIdx?c.filter((_,j)=>j!==ci):c);return{...r,cells};}));\n }else{\n const loc={type:\"nested\",rowId,outerCellIdx:cellIdx,blockIdx:inner.parentBlockIdx,innerCellIdx:inner.cellIdx};\n mutate(prev=>updateColumnAt(prev,loc,c=>c.filter((_,j)=>j!==inner.contentIdx)));\n }\n setSelContentId(null);setSelMeta(null);\n };\n const moveContent=(rowId:any,cellIdx:any,ci:any,dir:any,inner:any=null)=>{\n if(inner){\n const loc={type:\"nested\",rowId,outerCellIdx:cellIdx,blockIdx:inner.parentBlockIdx,innerCellIdx:inner.cellIdx};\n mutate(prev=>updateColumnAt(prev,loc,c=>{\n const ibc=inner.contentIdx;\n const ni=ibc+dir;\n if(ni<0||ni>=c.length)return c;\n const n=[...c];\n [n[ibc],n[ni]]=[n[ni],n[ibc]];\n return n;\n }));\n return;\n }\n mutate(prev=>prev.map(r=>{if(r.id!==rowId)return r;const cells=r.cells.map((c,i)=>{if(i!==cellIdx)return c;const ni=ci+dir;if(ni<0||ni>=c.length)return c;const n=[...c];[n[ci],n[ni]]=[n[ni],n[ci]];return n;});return{...r,cells};}));\n };\n const updateContent=(rowId:any,cellIdx:any,ci:any,upd:any,inner:any=null)=>{\n if(!inner){\n mutate(prev=>prev.map(r=>{if(r.id!==rowId)return r;const cells=r.cells.map((c,i)=>i===cellIdx?c.map((b,j)=>j===ci?upd:b):c);return{...r,cells};}));\n return;\n }\n const loc={type:\"nested\",rowId,outerCellIdx:cellIdx,blockIdx:inner.parentBlockIdx,innerCellIdx:inner.cellIdx};\n mutate(prev=>updateColumnAt(prev,loc,c=>c.map((b,j)=>j===inner.contentIdx?upd:b)));\n };\n const selectContent=(contentId:any,rowId:any,cellIdx:any,parentBlockIdx:any,inner:any=null)=>{\n setSelContentId(contentId);\n setSelMeta(inner?{rowId,cellIdx,contentIdx:parentBlockIdx,inner}:{rowId,cellIdx,contentIdx:parentBlockIdx});\n /** Empty-column affordance uses `contentIdx: -1` and `contentId: null`; column handler also sets row — do not clear row. */\n const emptyColumnAffordance =\n inner == null && contentId == null && parentBlockIdx === -1;\n if (!emptyColumnAffordance) setSelectedRowId(null);\n };\n\n const deleteSelected=()=>{if(selContentMeta){const{rowId,cellIdx,contentIdx,inner}=selContentMeta;if(inner)deleteContent(rowId,cellIdx,0,{parentBlockIdx:contentIdx,cellIdx:inner.cellIdx,contentIdx:inner.contentIdx});else deleteContent(rowId,cellIdx,contentIdx);}};\n const duplicateSelected=()=>{if(selContentMeta){const{rowId,cellIdx,contentIdx,inner}=selContentMeta;if(inner)dropContent(rowId,cellIdx,{kind:\"duplicate\",fromIdx:inner.contentIdx,fromNested:{parentBlockIdx:contentIdx,innerCellIdx:inner.cellIdx}});else dropContent(rowId,cellIdx,{kind:\"duplicate\",fromIdx:contentIdx});}};\n\n // ── Context menu ────────────────────────────────────────────────────────────\n /** inner: { parentBlockIdx, cellIdx, contentIdx } for block inside nested row */\n const handleContextMenu=(e:any,rowId:any,cellIdx:any,ci:any,inner:any=null)=>{\n setCtxMenu({x:e.clientX,y:e.clientY,items:[\n {icon:\"↑\",label:\"Move Up\", action:()=>moveContent(rowId,cellIdx,ci,-1,inner)},\n {icon:\"↓\",label:\"Move Down\",action:()=>moveContent(rowId,cellIdx,ci, 1,inner)},\n {sep:true},\n {icon:\"⧉\",label:\"Duplicate\",action:()=>dropContent(rowId,cellIdx,inner?{kind:\"duplicate\",fromIdx:inner.contentIdx,fromNested:{parentBlockIdx:inner.parentBlockIdx,innerCellIdx:inner.cellIdx}}:{kind:\"duplicate\",fromIdx:ci})},\n {sep:true},\n {icon:\"✕\",label:\"Delete\",action:()=>inner?deleteContent(rowId,cellIdx,0,inner):deleteContent(rowId,cellIdx,ci),danger:true},\n ]});\n };\n\n const handleLayoutContextMenu=(e,rowId)=>{\n e.preventDefault();\n e.stopPropagation();\n const ri=rows.findIndex(r=>r.id===rowId);\n setSelectedRowId(rowId);\n setSelContentId(null);\n setSelMeta(null);\n setCtxMenu({x:e.clientX,y:e.clientY,items:[\n {icon:\"↑\",label:\"Move row up\",disabled:ri<=0,action:()=>{if(ri>0)moveRow(rowId,-1);}},\n {icon:\"↓\",label:\"Move row down\",disabled:ri<0||ri>=rows.length-1,action:()=>{if(ri>=0&&ri<rows.length-1)moveRow(rowId,1);}},\n {sep:true},\n {icon:\"⧉\",label:\"Duplicate row\",action:()=>dupRow(rowId)},\n {sep:true},\n {icon:\"✕\",label:\"Delete row\",action:()=>deleteRow(rowId),danger:true},\n ]});\n };\n\n const selectedRow=rows.find(r=>r.id===selectedRowId);\n const selectedCB=resolveSelectedBlock(selContentMeta);\n const totalBlocks=countBlocksInDesign(rows);\n\n const filteredBlockTypes = CONTENT_BLOCK_TYPES.filter((bt) => {\n if (opt.tools?.[bt.type]?.enabled === false) return false;\n return true;\n });\n\n const onRightRailResizePointerDown = useCallback((e: ReactPointerEvent<HTMLDivElement>) => {\n e.preventDefault();\n if (e.pointerType === \"mouse\" && e.button !== 0) return;\n const startX = e.clientX;\n const startW = rightRailWidth;\n const onMove = (ev: PointerEvent) => {\n const delta = startX - ev.clientX;\n setRightRailWidth(() =>\n Math.min(RIGHT_RAIL_MAX_W, Math.max(RIGHT_RAIL_MIN_W, startW + delta)),\n );\n };\n const onUp = () => {\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerup\", onUp);\n window.removeEventListener(\"pointercancel\", onUp);\n document.body.style.removeProperty(\"cursor\");\n document.body.style.removeProperty(\"user-select\");\n };\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n window.addEventListener(\"pointermove\", onMove);\n window.addEventListener(\"pointerup\", onUp);\n window.addEventListener(\"pointercancel\", onUp);\n }, [rightRailWidth]);\n\n const paletteGroupLabelOverrides = opt.blockLibrary?.paletteGroupLabels;\n const blockPaletteSections = BLOCK_PALETTE_GROUPS.map(({ key, labelKey }) => {\n const blocks = filteredBlockTypes\n .filter((bt) => bt.paletteGroup === key)\n .slice()\n .sort((a, b) => a.paletteOrder - b.paletteOrder);\n if (blocks.length === 0) return null;\n return {\n groupKey: key,\n title: paletteGroupLabelOverrides?.[key] ?? L(labelKey),\n blocks,\n };\n }).filter(Boolean) as { groupKey: BlockPaletteGroupKey; title: string; blocks: typeof filteredBlockTypes }[];\n\n const IS: CSSProperties = {\n width: \"100%\",\n padding: \"6px 8px\",\n border: `1px solid ${C.border}`,\n borderRadius: 5,\n background: C.inputBg,\n color: C.text,\n fontSize: 13,\n boxSizing: \"border-box\",\n outline: \"none\",\n };\n const CI: CSSProperties = {\n padding: \"2px 4px\",\n height: 28,\n cursor: \"pointer\",\n border: `1px solid ${C.border}`,\n borderRadius: 5,\n background: C.inputBg,\n };\n\n const LEFT_TEMPLATE_W = 292;\n const eid = (suffix?: string) => (suffix ? `${editorId}-${suffix}` : editorId);\n\n const sectionHeadingStyle: CSSProperties = {\n fontSize: 10,\n color: C.muted,\n fontWeight: 700,\n textTransform: \"uppercase\",\n letterSpacing: \".08em\",\n marginBottom: 8,\n };\n\n /** Right-rail cards: same look for Settings sections (and scroll padding). */\n const RAIL_BODY_PAD: CSSProperties = { padding: \"12px 12px 20px\" };\n const railSectionCard: CSSProperties = {\n marginBottom: 8,\n border: `1px solid ${C.border}`,\n borderRadius: 10,\n background: C.surface,\n overflow: \"hidden\",\n };\n const railSectionSummary: CSSProperties = {\n cursor: \"pointer\",\n listStyle: \"none\",\n fontSize: 10,\n fontWeight: 800,\n color: C.text,\n textTransform: \"uppercase\",\n letterSpacing: \".08em\",\n padding: \"9px 11px\",\n background: C.toolbarBg,\n borderBottom: `1px solid ${C.border}`,\n userSelect: \"none\",\n };\n const railSectionBody: CSSProperties = {\n padding: \"10px 11px 12px\",\n };\n\n return (\n <div id={eid()}\n style={{display:\"flex\",flexDirection:\"column\",height:minHeight,maxHeight:minHeight,background:C.bg,color:C.text,fontFamily:\"'Inter',system-ui,sans-serif\",overflow:\"hidden\",...style}}>\n <style>{`\n *{box-sizing:border-box;}\n input[type=range]{accent-color:${C.accent};}\n input[type=checkbox]{accent-color:${C.accent};}\n details.rail-section > summary::-webkit-details-marker{display:none;}\n details.rail-section > summary{list-style:none;}\n ::-webkit-scrollbar{width:5px;height:5px;}\n ::-webkit-scrollbar-track{background:transparent;}\n ::-webkit-scrollbar-thumb{background:${C.border};border-radius:3px;}\n ::-webkit-scrollbar-thumb:hover{background:${C.muted};}\n `}</style>\n\n <div id={eid(\"workspace\")} style={{\n display:\"flex\",flex:1,overflow:\"hidden\",minHeight:0,position:\"relative\",\n alignItems:\"stretch\",gap:0,\n padding:12,\n maxHeight: \"calc(100% - 24px)\",\n width: \"100%\",\n }}>\n\n {/* ── LEFT: templates drawer ─────────────────────────────────────────── */}\n {!hideTemplates && templatesOpen && (\n <aside\n id={eid(\"templates-panel\")}\n style={{\n flexShrink: 0,\n width: LEFT_TEMPLATE_W,\n alignSelf: \"stretch\",\n background: C.sidebar,\n borderRight: `1px solid ${C.border}`,\n borderRadius: 12,\n display: \"flex\",\n flexDirection: \"column\",\n zIndex: 60, \n maxHeight: \"calc(100% - 24px)\",\n overflow: \"auto\",\n boxShadow: \"4px 0 24px rgba(0,0,0,0.06)\",\n }}>\n <div\n id={eid(\"templates-panel-header\")}\n style={{\n padding: \"10px 12px\",\n borderBottom: `1px solid ${C.border}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexShrink: 0,\n background: C.sidebar,\n }}>\n <span style={{ fontSize: 11, fontWeight: 700, color: C.text }}>{L(\"templates\")}</span>\n <button\n type=\"button\"\n id={eid(\"templates-panel-close\")}\n title={L(\"closePanel\")}\n onClick={() => setTemplatesOpen(false)}\n style={{\n background: C.surface,\n border: `1px solid ${C.border}`,\n borderRadius: 6,\n color: C.text,\n cursor: \"pointer\",\n fontSize: 16,\n lineHeight: 1,\n padding: \"2px 8px\",\n }}>\n ×\n </button>\n </div>\n <div id={eid(\"templates-panel-body\")} style={{ flex: 1, overflowY: \"auto\", padding: 10 }}>\n {templates.map((tpl, idx) => (\n <div\n key={idx}\n id={eid(`template-${idx}`)}\n onClick={() => {\n if (rows.length > 0) {\n setConfirm({\n msg: \"Loading a template will replace your current design. Continue?\",\n onConfirm: () => {\n buildApi().loadJson(tpl.design);\n setTemplatesOpen(false);\n },\n });\n } else {\n buildApi().loadJson(tpl.design);\n setTemplatesOpen(false);\n }\n }}\n style={{\n background: C.surface,\n border: `1px solid ${C.border}`,\n borderRadius: 10,\n padding: 10,\n cursor: \"pointer\",\n transition: \"all .2s\",\n marginBottom: 10,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = C.accent;\n e.currentTarget.style.transform = \"translateY(-1px)\";\n e.currentTarget.style.boxShadow = \"0 6px 16px rgba(0,0,0,0.08)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = C.border;\n e.currentTarget.style.transform = \"none\";\n e.currentTarget.style.boxShadow = \"none\";\n }}>\n {tpl.thumbnail ? (\n <img\n src={tpl.thumbnail}\n alt={tpl.name}\n style={{\n width: \"100%\",\n height: 100,\n objectFit: \"cover\",\n borderRadius: 6,\n background: C.canvas,\n marginBottom: 8,\n border: `1px solid ${C.border}`,\n }}\n />\n ) : (\n <div\n style={{\n width: \"100%\",\n height: 64,\n background: C.canvas,\n borderRadius: 6,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 28,\n marginBottom: 8,\n border: `1px solid ${C.border}`,\n }}>\n 📄\n </div>\n )}\n <div style={{ fontSize: 11, fontWeight: 700, color: C.text }}>{tpl.name}</div>\n </div>\n ))}\n {templates.length === 0 && (\n <div style={{ color: C.muted, fontSize: 11, padding: 20, textAlign: \"center\" }}>No templates available.</div>\n )}\n </div>\n </aside>\n )}\n\n {/* ── CENTER: content toolbar + canvas ───────────────────────────────── */}\n <div\n id={eid(\"content-column\")}\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: 0,\n padding: 12,\n paddingBottom: 0,\n paddingTop: 0,\n gap: 10,\n maxHeight: \"calc(100% - 24px)\",\n overflow: \"auto\",\n }}>\n <div\n id={eid(\"content-toolbar\")}\n style={{\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n gap: 0,\n padding: \"7px 12px\",\n background: C.toolbarBg,\n border: `1px solid ${C.border}`,\n borderRadius: 12,\n boxShadow: \"0 1px 3px rgba(0,0,0,0.06)\",\n }}>\n {/* Left: templates + canvas zoom */}\n <div\n id={eid(\"toolbar-left\")}\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n gap: 8,\n minWidth: 0,\n }}\n >\n {!hideTemplates && (\n <TBtn\n onClick={() => setTemplatesOpen((o) => !o)}\n title={L(\"templates\")}\n accent={C.accent}\n muted={C.muted}\n border={C.border}\n text={C.text}\n style={{\n padding: \"5px 12px\",\n fontWeight: 700,\n ...(templatesOpen\n ? { outline: `2px solid ${C.accent}`, outlineOffset: 2, borderRadius: 8 }\n : {}),\n }}\n >\n {L(\"templates\")}\n </TBtn>\n )}\n <div id={eid(\"toolbar-zoom\")} style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <TBtn\n onClick={() => setZoom((z) => Math.max(50, z - 10))}\n title={L(\"zoomOut\")}\n accent={C.accent}\n muted={C.muted}\n border={C.border}\n text={C.text}\n style={{ padding: \"4px 8px\" }}\n >\n −\n </TBtn>\n <span\n style={{\n fontSize: 11,\n color: C.muted,\n minWidth: 34,\n textAlign: \"center\",\n userSelect: \"none\",\n }}\n >\n {zoom}%\n </span>\n <TBtn\n onClick={() => setZoom((z) => Math.min(150, z + 10))}\n title={L(\"zoomIn\")}\n accent={C.accent}\n muted={C.muted}\n border={C.border}\n text={C.text}\n style={{ padding: \"4px 8px\" }}\n >\n +\n </TBtn>\n </div>\n </div>\n\n {/* Center: preview (true visual center) */}\n <div\n id={eid(\"toolbar-center\")}\n style={{\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <TBtn\n onClick={() => {\n setPreviewDevice(\"desktop\");\n setShowPreview(true);\n }}\n title=\"Preview\"\n accent={C.accent}\n muted={C.muted}\n border={C.border}\n text={C.text}\n style={{ padding: \"5px 14px\", fontWeight: 700, display: \"flex\", alignItems: \"center\", gap: 6 }}\n >\n <svg width=\"14\" height=\"10\" viewBox=\"0 0 14 10\" fill=\"none\" style={{ flexShrink: 0 }}>\n <rect x=\".5\" y=\".5\" width=\"13\" height=\"9\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M4 10h6M7 9v1\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n </TBtn>\n </div>\n\n {/* Right: autosave + history */}\n <div\n id={eid(\"toolbar-right\")}\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: 8,\n minWidth: 0,\n }}\n >\n {autoSaveMsg ? (\n <>\n <span style={{ fontSize: 10, color: C.success, fontWeight: 700, whiteSpace: \"nowrap\" }}>\n ✓ {autoSaveMsg}\n </span>\n <span style={{ width: 1, height: 22, background: C.border, flexShrink: 0 }} />\n </>\n ) : null}\n <div id={eid(\"toolbar-history\")} style={{ display: \"flex\", alignItems: \"center\", gap: 4, flexShrink: 0 }}>\n <TBtn\n onClick={undo}\n title={`${L(\"undo\")} (Ctrl+Z)`}\n disabled={!history.length}\n accent={C.accent}\n muted={C.muted}\n border={C.border}\n text={C.text}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 7v6h6\" />\n <path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\" />\n </svg>\n </TBtn>\n <TBtn\n onClick={redo}\n title={`${L(\"redo\")} (Ctrl+Y)`}\n disabled={!future.length}\n accent={C.accent}\n muted={C.muted}\n border={C.border}\n text={C.text}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 7v6h-6\" />\n <path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\" />\n </svg>\n </TBtn>\n </div>\n </div>\n </div>\n\n <div\n id={eid(\"canvas\")}\n style={{\n flex: 1,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n background: C.canvas,\n padding: 12,\n minHeight: 0,\n borderRadius: 12,\n border: `1px solid ${C.border}`,\n }}\n onClick={() => {\n setSelectedRowId(null);\n setSelContentId(null);\n setSelMeta(null);\n setCtxMenu(null);\n }}\n onDragOver={(e) => {\n e.preventDefault();\n }}\n onDrop={(e) => {\n e.preventDefault();\n try {\n const data = JSON.parse(e.dataTransfer.getData(\"application/json\") || \"{}\");\n if (data.layoutPresetKey) {\n const preset = LAYOUT_PRESETS.find((p) => p.key === data.layoutPresetKey);\n if (preset) mutate((prev) => [...prev, makeLayoutRow(preset)]);\n }\n } catch {\n /* ignore */\n }\n }}>\n <div\n id={eid(\"canvas-scale\")}\n style={{\n transform: `scale(${zoom / 100})`,\n transformOrigin: \"top center\",\n transition: \"transform .2s\",\n paddingBottom: zoom < 100 ? `${(1 - zoom / 100) * 200}px` : 0,\n }}>\n <div\n id={eid(\"canvas-document\")}\n style={(() => {\n const img =\n typeof (settings as { contentBgImage?: string }).contentBgImage === \"string\"\n ? (settings as { contentBgImage?: string }).contentBgImage!.trim()\n : \"\";\n const base: CSSProperties = {\n maxWidth: settings.contentWidth,\n margin: \"0 auto\",\n borderRadius: settings.borderRadius,\n padding: settings.padding,\n minHeight: 420,\n border: `1px solid ${C.border}`,\n };\n if (img) {\n const st = settings as {\n contentBgSize?: string;\n contentBgRepeat?: string;\n };\n base.backgroundColor = settings.contentBg;\n base.backgroundImage = `url(${JSON.stringify(img)})`;\n base.backgroundSize = (st.contentBgSize || \"cover\").trim() || \"cover\";\n base.backgroundPosition = \"center\";\n base.backgroundRepeat = (st.contentBgRepeat || \"no-repeat\").trim() || \"no-repeat\";\n } else {\n base.background = settings.contentBg;\n }\n return base;\n })()}>\n {rows.length === 0 && (\n <div id={eid(\"canvas-empty\")} style={{ padding: \"56px 20px\", textAlign: \"center\", color: C.muted, border: `2px dashed ${C.border}`, borderRadius: 7 }}>\n <div style={{ fontSize: 30, marginBottom: 10 }}>✉</div>\n <div style={{ fontWeight: 700, marginBottom: 6, color: C.text }}>{L(\"addRow\")}</div>\n <div style={{ fontSize: 12 }}>{L(\"canvasEmptyHint\")}</div>\n </div>\n )}\n\n {rows.map((row, ri) => (\n <Fragment key={row.id}>\n <CanvasRow\n editorId={editorId}\n row={row}\n ri={ri}\n selectedRowId={selectedRowId}\n selContentMeta={selContentMeta}\n dragOver={dragOver}\n C={C}\n setDragOver={setDragOver}\n handleRowDrop={handleRowDrop}\n setDraggingRowId={setDraggingRowId}\n setSelectedRowId={setSelectedRowId}\n setSelContentId={setSelContentId}\n setSelMeta={setSelMeta}\n selectContent={selectContent}\n dropContent={dropContent}\n deleteContent={deleteContent}\n handleContextMenu={handleContextMenu}\n handleLayoutContextMenu={handleLayoutContextMenu}\n selContentId={selContentId}\n />\n </Fragment>\n ))}\n\n {/* Bottom drop zone */}\n <div id={eid(\"canvas-row-drop-end\")} onDragOver={e=>{e.preventDefault();setDragOver(rows.length);}} onDragLeave={()=>setDragOver(null)}\n onDrop={e=>{e.preventDefault();handleRowDrop(rows.length,e);}}\n style={{height:dragOver===rows.length?24:3,background:dragOver===rows.length?`${C.accent}25`:\"transparent\",border:dragOver===rows.length?`2px dashed ${C.accent}`:\"2px solid transparent\",borderRadius:4,transition:\"all .12s\",margin:\"2px 0\"}}/>\n </div>\n </div>\n </div>\n </div>\n\n {/* ── Right rail resize + sidebar ── */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n flexShrink: 0,\n alignItems: \"stretch\",\n alignSelf: \"stretch\",\n maxHeight: \"calc(100% - 24px)\",\n minHeight: 0,\n }}\n >\n <div\n id={eid(\"sidebar-resize-handle\")}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={L(\"resizeSidebar\")}\n title={L(\"resizeSidebar\")}\n onPointerDown={onRightRailResizePointerDown}\n style={{\n width: 6,\n flexShrink: 0,\n cursor: \"col-resize\",\n touchAction: \"none\",\n alignSelf: \"stretch\",\n borderRadius: \"6px 0 0 6px\",\n background: `${C.border}33`,\n borderLeft: `1px solid ${C.border}`,\n borderTop: `1px solid ${C.border}`,\n borderBottom: `1px solid ${C.border}`,\n marginRight: -1,\n zIndex: 56,\n }}\n onPointerEnter={(ev) => {\n ev.currentTarget.style.background = `${C.accent}40`;\n }}\n onPointerLeave={(ev) => {\n ev.currentTarget.style.background = `${C.border}33`;\n }}\n />\n\n {/* ── UNIFIED SIDEBAR (Right Rail) ── */}\n <div id={eid(\"sidebar\")} style={{\n position:\"relative\",flexShrink:0,width:rightRailWidth,alignSelf:\"stretch\",\n minHeight:0,minWidth:RIGHT_RAIL_MIN_W,\n background:C.sidebar,border:`1px solid ${C.border}`,\n borderRadius: 12,maxHeight: \"calc(100% - 24px)\",overflow: \"auto\",\n display:\"flex\",flexDirection:\"column\",zIndex:55,\n }}>\n {selectedCB || selectedRow ? (\n /* Properties / Inspector View */\n <div id={eid(\"sidebar-properties\")} style={{display:\"flex\",flexDirection:\"column\",flex:1,minHeight:0,overflow:\"hidden\"}}>\n {/* Inspector Header */}\n <div id={eid(\"sidebar-inspector-header\")} style={{padding:\"9px 11px\",borderBottom:`1px solid ${C.border}`,flexShrink:0,background:C.toolbarBg,zIndex:5,display:\"flex\",alignItems:\"center\",gap:8}}>\n <button\n type=\"button\"\n onClick={()=>{setSelContentId(null);setSelMeta(null);setSelectedRowId(null);}}\n style={{background:C.surface,border:`1px solid ${C.border}`,borderRadius:8,color:C.text,cursor:\"pointer\",fontSize:10,padding:\"6px 10px\",fontWeight:700,display:\"flex\",alignItems:\"center\",gap:4,textTransform:\"uppercase\",letterSpacing:\".05em\"}}>\n <span>← Library</span>\n </button>\n <div style={{flex:1,textAlign:\"right\",fontSize:10,fontWeight:800,color:C.text,textTransform:\"uppercase\",letterSpacing:\".08em\",lineHeight:1.3}}>\n {selectedCB\n ? (selectedCB.type === \"layout\" && isSplitLayoutBlock(selectedCB)\n ? \"Layout · Customize\"\n : \"Block inspector\")\n : \"Row inspector\"}\n </div>\n </div>\n\n <div id={eid(\"sidebar-properties-content\")} style={{flex:1,minHeight:0,overflowY:\"auto\",overflowX:\"hidden\",...RAIL_BODY_PAD}}>\n {selectedCB && selContentMeta ? (\n <ContentBlockEditor\n block={selectedCB}\n onChange={upd=>updateContent(selContentMeta.rowId,selContentMeta.cellIdx,selContentMeta.contentIdx,upd,selContentMeta.inner||null)}\n onClose={()=>{setSelContentId(null);setSelMeta(null);setSelectedRowId(null);}}\n mergeTags={mergeTags}\n onUpload={onUpload}\n C={C}/>\n ) : (\n <LayoutRowEditor \n row={selectedRow} \n onChange={updateRow} \n onClose={()=>setSelectedRowId(null)} \n onUpload={onUpload} \n initialCol={selContentMeta?.rowId === selectedRowId ? selContentMeta.cellIdx : null}\n C={C}\n />\n )}\n </div>\n </div>\n ) : (\n /* Main Tabs View (Library) */\n <>\n <div id={eid(\"sidebar-tabs\")} style={{display:\"flex\",gap:6,padding:\"8px 10px 0\",borderBottom:`1px solid ${C.border}`,flexShrink:0,position:\"sticky\",top:0,background:C.sidebar,zIndex:10}}>\n {([\"blocks\",\"settings\"] as const).map((tab) => (\n <button key={tab} id={eid(`tab-${tab}`)} type=\"button\" onClick={() => setActiveTab(tab)}\n style={{\n flex:1,\n padding:\"9px 8px 10px\",\n background:activeTab===tab?C.surface:\"transparent\",\n border:`1px solid ${activeTab===tab?C.border:\"transparent\"}`,\n borderBottom:activeTab===tab?`1px solid ${C.surface}`:`1px solid transparent`,\n marginBottom:-1,\n borderRadius:\"10px 10px 0 0\",\n color:activeTab===tab?C.accent:C.muted,\n cursor:\"pointer\",\n fontSize:10,\n fontWeight:800,\n textTransform:\"uppercase\",\n letterSpacing:\".06em\",\n }}>\n {L(tab)}\n </button>\n ))}\n </div>\n\n <div id={eid(\"sidebar-body\")} style={{flex:1,minHeight:0,overflowY:\"auto\",overflowX:\"hidden\",...RAIL_BODY_PAD}}>\n {activeTab===\"blocks\"&&<>\n {opt.blockLibrary?.groupHeadings?.blocks ? (\n <div id={eid(\"blocks-section-heading\")} style={{...sectionHeadingStyle,marginTop:0}}>\n {opt.blockLibrary.groupHeadings.blocks}\n </div>\n ) : null}\n {blockPaletteSections.map(({ groupKey, title, blocks }, gi) => (\n <div key={groupKey} id={eid(`blocks-group-${groupKey}`)}>\n <div\n id={eid(`blocks-group-heading-${groupKey}`)}\n style={{\n ...sectionHeadingStyle,\n marginTop: gi === 0 ? (opt.blockLibrary?.groupHeadings?.blocks ? 10 : 0) : 14,\n marginBottom: 8,\n }}>\n {title}\n </div>\n <div id={eid(`blocks-list-${groupKey}`)} style={{ display: \"flex\", flexDirection: \"column\", gap: 6, marginBottom: 4 }}>\n {blocks.map((bt) => (\n <div\n key={bt.type}\n id={eid(`block-palette-${bt.type}`)}\n draggable\n onDragStart={(e) => {\n e.dataTransfer.setData(\"application/json\", JSON.stringify({ contentType: bt.type }));\n }}\n onClick={() => {\n const targetRow = selectedRowId ? rows.find((r) => r.id === selectedRowId) : rows[rows.length - 1];\n if (!targetRow) return;\n dropContent(targetRow.id, 0, { kind: \"new\", contentType: bt.type, insertAt: null });\n }}\n title={`Drag into a cell or click to add to ${selectedRowId ? \"selected row\" : \"last row\"}`}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n background: C.surface,\n border: `1px solid ${C.border}`,\n borderLeft: `3px solid ${C.text}`,\n borderRadius: 8,\n padding: \"8px 10px\",\n cursor: \"grab\",\n userSelect: \"none\",\n transition: \"background .15s, border-color .15s\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = C.canvas;\n e.currentTarget.style.borderColor = C.muted;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = C.surface;\n e.currentTarget.style.borderColor = C.border;\n }}>\n <div style={{ fontSize: 16, width: 28, textAlign: \"center\", flexShrink: 0, color: C.text }}>{bt.icon}</div>\n <div style={{ flex: 1, fontSize: 12, color: C.text, fontWeight: 600 }}>{bt.label}</div>\n </div>\n ))}\n </div>\n </div>\n ))}\n {filteredBlockTypes.length === 0 && (\n <div style={{ color: C.muted, fontSize: 12, padding: 12, textAlign: \"center\" }}>No blocks available</div>\n )}\n </>}\n\n {/* Settings */}\n {activeTab===\"settings\"&&<>\n <div\n id={eid(\"settings-heading\")}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n marginBottom: 10,\n padding: \"9px 11px\",\n background: C.toolbarBg,\n border: `1px solid ${C.border}`,\n borderRadius: 10,\n }}\n >\n <span style={{ fontSize: 10, fontWeight: 800, color: C.text, textTransform: \"uppercase\", letterSpacing: \".08em\" }}>{L(\"emailContentSettings\")}</span>\n <button\n type=\"button\"\n onClick={() => {\n setPageBgUiStep(null);\n setContentBgUiStep(null);\n setSettings({\n bgColor: \"#f1f5f9\",\n bgImage: \"\",\n bgSize: \"cover\",\n bgRepeat: \"no-repeat\",\n bgPosition: \"center\",\n bgGradient: null,\n contentBg: \"#ffffff\",\n contentBgImage: \"\",\n contentBgSize: \"cover\",\n contentBgRepeat: \"no-repeat\",\n contentBgPosition: \"center\",\n contentBgGradient: null,\n contentWidth: 600,\n padding: 24,\n borderRadius: 8,\n fontFamily: \"Arial, sans-serif\",\n } as any);\n }}\n style={{\n background: C.surface,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n padding: \"5px 10px\",\n cursor: \"pointer\",\n fontSize: 10,\n fontWeight: 700,\n color: C.muted,\n textTransform: \"uppercase\",\n letterSpacing: \".05em\",\n }}\n >\n Reset\n </button>\n </div>\n\n <details open className=\"rail-section\" style={railSectionCard}>\n <summary style={railSectionSummary}>Typography</summary>\n <div style={railSectionBody}>\n <PR label=\"Default Font Family\" C={C}>\n <select\n style={IS}\n value={(settings as any).fontFamily || \"Arial, sans-serif\"}\n onChange={(e) => setSettings((s) => ({ ...s, fontFamily: e.target.value }))}\n >\n {[\"Arial, sans-serif\", \"Georgia, serif\", \"Verdana, sans-serif\", \"'Inter', sans-serif\", \"'Courier New', monospace\"].map((f) => (\n <option key={f} value={f}>\n {f.replace(/'/g, \"\").split(\",\")[0]}\n </option>\n ))}\n </select>\n </PR>\n </div>\n </details>\n\n <details open className=\"rail-section\" style={railSectionCard}>\n <summary style={railSectionSummary}>Layout</summary>\n <div style={railSectionBody}>\n <NumRangePx label={L(\"width\")} value={(settings as any).contentWidth ?? 600} onChange={(n)=>setSettings((s)=>({...s,contentWidth:n}))} min={320} max={1200} step={10} C={C}/>\n <NumRangePx label={L(\"padding\")} value={(settings as any).padding ?? 24} onChange={(n)=>setSettings((s)=>({...s,padding:n}))} min={0} max={120} step={1} C={C}/>\n <NumRangePx label={L(\"radius\")} value={(settings as any).borderRadius ?? 8} onChange={(n)=>setSettings((s)=>({...s,borderRadius:n}))} min={0} max={80} step={1} C={C}/>\n </div>\n </details>\n\n <details open className=\"rail-section\" style={railSectionCard}>\n <summary style={railSectionSummary}>Background</summary>\n <div style={railSectionBody}>\n <div style={{fontSize:10,color:C.muted,fontWeight:800,textTransform:\"uppercase\",letterSpacing:\".06em\",marginBottom:6}}>Page background</div>\n <BgModeButtons value={pageBgUiStep} onChange={applyPageBgMode} C={C} />\n {pageBgUiStep === null ? (\n <div style={{ fontSize: 11, color: C.muted, marginBottom: 12, lineHeight: 1.45 }}>\n Choose Color, Gradient, or Image — then the matching settings appear below.\n </div>\n ) : null}\n\n {pageBgUiStep === \"solid\" ? (\n <ColorField\n label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><ColorIcon size={13} strokeWidth={2.25} aria-hidden />bg color</span>}\n value={(settings as any).bgColor}\n onChange={(v)=>setSettings((s)=>({...s,bgColor:v}))}\n placeholder=\"#f1f5f9\"\n C={C}\n />\n ) : null}\n {pageBgUiStep === \"image\" ? (\n <>\n <ImageUrlUploadField\n label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><ImageIcon size={13} strokeWidth={2.25} aria-hidden />bg image</span>}\n value={String((settings as any).bgImage || \"\")}\n onChange={(v)=>setSettings((s)=>({...s,bgImage:v}))}\n onUpload={onUpload}\n accept=\"image/*\"\n buttonLabel=\"upload\"\n inputId={eid(\"settings-page-bg-image-file\")}\n C={C}\n />\n <div style={{ display: \"flex\", gap: 8, marginBottom: 12 }}>\n <div style={{ flex: 1 }}>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><Scaling size={13} strokeWidth={2.25} aria-hidden />{L(\"objectFit\")}</span>} C={C}>\n <select style={IS} value={(settings as any).bgSize || \"cover\"} onChange={(e) => setSettings((s) => ({ ...s, bgSize: e.target.value }))}>\n <option value=\"auto\">Auto</option>\n <option value=\"cover\">Cover</option>\n <option value=\"contain\">Contain</option>\n </select>\n </PR>\n </div>\n <div style={{ flex: 1 }}>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><RepeatIcon size={13} strokeWidth={2.25} aria-hidden />repeat</span>} C={C}>\n <select style={IS} value={(settings as any).bgRepeat || \"no-repeat\"} onChange={(e) => setSettings((s) => ({ ...s, bgRepeat: e.target.value }))}>\n <option value=\"no-repeat\">No repeat</option>\n <option value=\"repeat\">Repeat</option>\n <option value=\"repeat-x\">Repeat X</option>\n <option value=\"repeat-y\">Repeat Y</option>\n </select>\n </PR>\n </div>\n <div style={{ flex: 1 }}>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><Crosshair size={13} strokeWidth={2.25} aria-hidden />{L(\"objectPosition\")}</span>} C={C}>\n <select style={IS} value={(settings as any).bgPosition || \"center\"} onChange={(e) => setSettings((s) => ({ ...s, bgPosition: e.target.value }))}>\n {[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top left\",\"top right\",\"bottom left\",\"bottom right\"].map((p)=>(\n <option key={p} value={p}>{p}</option>\n ))}\n </select>\n </PR>\n </div>\n </div>\n </>\n ) : null}\n\n {pageBgUiStep === \"gradient\" ? (\n <DynamicGradientField\n label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><GradientIcon size={13} strokeWidth={2.25} aria-hidden />gradient</span>}\n value={(settings as any).bgGradient}\n onChange={(g)=>setSettings((s)=>({...s,bgGradient:g}))}\n defaults={{ colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"] }}\n C={C}\n />\n ) : null}\n\n <div style={{height:1,background:C.border,margin:\"12px 0\"}} />\n <div style={{fontSize:10,color:C.muted,fontWeight:800,textTransform:\"uppercase\",letterSpacing:\".06em\",marginBottom:6}}>Content background</div>\n <BgModeButtons value={contentBgUiStep} onChange={applyContentBgMode} C={C} />\n {contentBgUiStep === null ? (\n <div style={{ fontSize: 11, color: C.muted, marginBottom: 12, lineHeight: 1.45 }}>\n Choose Color, Gradient, or Image — then the matching settings appear below.\n </div>\n ) : null}\n\n {contentBgUiStep === \"solid\" ? (\n <ColorField\n label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><ColorIcon size={13} strokeWidth={2.25} aria-hidden />content bg</span>}\n value={(settings as any).contentBg}\n onChange={(v)=>setSettings((s)=>({...s,contentBg:v}))}\n placeholder=\"#ffffff\"\n C={C}\n />\n ) : null}\n\n {contentBgUiStep === \"image\" ? (\n <>\n <ImageUrlUploadField\n label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><ImageIcon size={13} strokeWidth={2.25} aria-hidden />content image</span>}\n value={String((settings as any).contentBgImage || \"\")}\n onChange={(v)=>setSettings((s)=>({...s,contentBgImage:v}))}\n onUpload={onUpload}\n accept=\"image/*\"\n buttonLabel=\"upload\"\n inputId={eid(\"settings-content-bg-image-file\")}\n C={C}\n />\n <div style={{ display: \"flex\", gap: 8, marginBottom: 4 }}>\n <div style={{ flex: 1 }}>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><Scaling size={13} strokeWidth={2.25} aria-hidden />{L(\"contentBgSize\")}</span>} C={C}>\n <select\n style={IS}\n value={(settings as { contentBgSize?: string }).contentBgSize || \"cover\"}\n onChange={(e) => setSettings((s) => ({ ...s, contentBgSize: e.target.value }))}\n >\n <option value=\"auto\">Auto</option>\n <option value=\"cover\">Cover</option>\n <option value=\"contain\">Contain</option>\n </select>\n </PR>\n </div>\n <div style={{ flex: 1 }}>\n <PR label={L(\"contentBgRepeat\")} C={C}>\n <select\n style={IS}\n value={(settings as { contentBgRepeat?: string }).contentBgRepeat || \"no-repeat\"}\n onChange={(e) => setSettings((s) => ({ ...s, contentBgRepeat: e.target.value }))}\n >\n <option value=\"no-repeat\">No repeat</option>\n <option value=\"repeat\">Repeat</option>\n <option value=\"repeat-x\">Repeat X</option>\n <option value=\"repeat-y\">Repeat Y</option>\n </select>\n </PR>\n </div>\n <div style={{ flex: 1 }}>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><Crosshair size={13} strokeWidth={2.25} aria-hidden />{L(\"objectPosition\")}</span>} C={C}>\n <select\n style={IS}\n value={(settings as any).contentBgPosition || \"center\"}\n onChange={(e) => setSettings((s) => ({ ...s, contentBgPosition: e.target.value }))}\n >\n {[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top left\",\"top right\",\"bottom left\",\"bottom right\"].map((p)=>(\n <option key={p} value={p}>{p}</option>\n ))}\n </select>\n </PR>\n </div>\n </div>\n </>\n ) : null}\n\n {contentBgUiStep === \"gradient\" ? (\n <DynamicGradientField\n label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><GradientIcon size={13} strokeWidth={2.25} aria-hidden />gradient</span>}\n value={(settings as any).contentBgGradient}\n onChange={(g)=>setSettings((s)=>({...s,contentBgGradient:g}))}\n defaults={{ colors: [\"#ffffff\", \"#ffffff\", \"#ffffff\"] }}\n C={C}\n />\n ) : null}\n </div>\n </details>\n </>}\n </div>\n </>\n )}\n </div>\n </div>\n </div>\n\n {/* ── STATUS BAR ──────────────────────────────────────────────────────── */}\n <div id={eid(\"status-bar\")} style={{display:\"flex\",alignItems:\"center\",gap:12,padding:\"3px 14px\",background:C.toolbarBg,borderTop:`1px solid ${C.border}`,fontSize:10,color:C.muted,flexShrink:0,position:\"sticky\",bottom:0,zIndex:100}}>\n <span>{rows.length} row{rows.length!==1?\"s\":\"\"}</span>\n <span style={{color:C.border}}>·</span>\n <span>{totalBlocks} block{totalBlocks!==1?\"s\":\"\"}</span>\n <span style={{color:C.border}}>·</span>\n <span>{settings.contentWidth}px</span>\n <span style={{color:C.border}}>·</span>\n <span>{zoom}%</span>\n <span style={{color:C.border}}>·</span>\n <span>{locale.toUpperCase()}</span>\n {selectedCB&&<><span style={{color:C.border}}>·</span><span style={{color:C.accent2}}>{selectedCB.type}</span></>}\n </div>\n\n {/* ── MODALS & OVERLAYS ───────────────────────────────────────────────── */}\n {showPreviewModal&&<PreviewModal html={designToHtml(rows, settings, options)} contentWidth={settings.contentWidth} rowCount={rows.length} blockCount={countBlocksInDesign(rows)} editorZoom={zoom} locale={locale} initialDevice={previewDevice} onClose={()=>setShowPreview(false)} C={C}/>}\n {ctxMenu &&<ContextMenu x={ctxMenu.x} y={ctxMenu.y} items={ctxMenu.items} onClose={()=>setCtxMenu(null)} C={C}/>}\n {confirm &&<ConfirmDialog message={confirm.msg} onConfirm={()=>{confirm.onConfirm();setConfirm(null);}} onCancel={()=>setConfirm(null)} C={C}/>}\n </div>\n );\n});\n\nexport { ReactEmailEditor };\n","import React from \"react\";\nimport { DEFAULT_BLOCK_PROPS } from \"./defaultBlockProps\";\n\n// ─── THEMES (monochrome — black / white / gray only) ─────────────────────────\nexport const THEMES = {\n /** White chrome, dark type */\n light: {\n bg: \"#f5f5f5\",\n sidebar: \"#ffffff\",\n canvas: \"#ebebeb\",\n surface: \"#fafafa\",\n border: \"#d4d4d4\",\n accent: \"#0a0a0a\",\n accent2: \"#262626\",\n text: \"#0a0a0a\",\n muted: \"#525252\",\n danger: \"#171717\",\n success: \"#404040\",\n warn: \"#525252\",\n inputBg: \"#ffffff\",\n toolbarBg: \"#ffffff\",\n },\n /** Dark chrome, light type */\n dark: {\n bg: \"#0a0a0a\",\n sidebar: \"#141414\",\n canvas: \"#0a0a0a\",\n surface: \"#1a1a1a\",\n border: \"#404040\",\n accent: \"#fafafa\",\n accent2: \"#e5e5e5\",\n text: \"#fafafa\",\n muted: \"#a3a3a3\",\n danger: \"#f5f5f5\",\n success: \"#d4d4d4\",\n warn: \"#a3a3a3\",\n inputBg: \"#171717\",\n toolbarBg: \"#141414\",\n },\n /** @deprecated aliases — same palette family */\n modern_light: {\n bg: \"#f5f5f5\",\n sidebar: \"#ffffff\",\n canvas: \"#ebebeb\",\n surface: \"#fafafa\",\n border: \"#d4d4d4\",\n accent: \"#0a0a0a\",\n accent2: \"#262626\",\n text: \"#0a0a0a\",\n muted: \"#525252\",\n danger: \"#171717\",\n success: \"#404040\",\n warn: \"#525252\",\n inputBg: \"#ffffff\",\n toolbarBg: \"#ffffff\",\n },\n modern_dark: {\n bg: \"#0a0a0a\",\n sidebar: \"#141414\",\n canvas: \"#0a0a0a\",\n surface: \"#1a1a1a\",\n border: \"#404040\",\n accent: \"#fafafa\",\n accent2: \"#e5e5e5\",\n text: \"#fafafa\",\n muted: \"#a3a3a3\",\n danger: \"#f5f5f5\",\n success: \"#d4d4d4\",\n warn: \"#a3a3a3\",\n inputBg: \"#171717\",\n toolbarBg: \"#141414\",\n },\n};\n\n// ─── I18N ─────────────────────────────────────────────────────────────────────\nexport const I18N = {\n en: { layouts:\"Layouts\",blocks:\"Blocks\",settings:\"Settings\",addRow:\"Click layout to add row\",\n dragIntoCell:\"Drag into a cell\",dropHere:\"Drop here\",releaseHere:\"Release to drop\",\n nothingSelected:\"Nothing selected\",clickBlock:\"Click a row or block to edit.\",\n preview:\"Preview\",exportHtml:\"HTML\",save:\"Save\",load:\"Load\",newDesign:\"New\",\n undo:\"Undo\",redo:\"Redo\",desktop:\"Desktop\",tablet:\"Tablet\",mobile:\"Mobile\",\n copied:\"Copied!\",copyHtml:\"Copy HTML\",emailSettings:\"Email Settings\",\n background:\"Background\",contentBg:\"Content Bg\",contentBgImage:\"Content bg image URL\",contentBgSize:\"Content bg image size\",contentBgRepeat:\"Content bg image repeat\",\n objectFit:\"Object fit\",objectPosition:\"Object position\",width:\"Width\",\n padding:\"Padding\",radius:\"Radius\",row:\"Row\",duplicate:\"Duplicate\",\n delete:\"Delete\",moveUp:\"Move Up\",moveDown:\"Move Down\",mergeTags:\"Merge Tags\",\n autoSaved:\"Auto-saved\",search:\"Search blocks…\",\n zoomIn:\"Zoom In\",zoomOut:\"Zoom Out\",zoom:\"Zoom\",templates:\"Templates\",\n resizeSidebar:\"Resize sidebar\",\n colorScheme:\"Color scheme\",\n blockGroupLayouts:\"Row layouts\",\n blockGroupBlocks:\"Content blocks\",\n blockPaletteGroupText:\"Text & content\",\n blockPaletteGroupStructure:\"Layout & structure\",\n blockPaletteGroupMedia:\"Media\",\n blockPaletteGroupActions:\"Buttons & links\",\n blockPaletteGroupWidgets:\"Widgets\",\n closePanel:\"Close\",\n canvasEmptyHint:\"Drag blocks from the library into the column, or add a Layout block for multi-column sections.\",\n emailContentSettings:\"Email content\" },\n fr: { layouts:\"Mises en page\",blocks:\"Blocs\",settings:\"Paramètres\",addRow:\"Cliquer pour ajouter\",\n dragIntoCell:\"Glisser dans une cellule\",dropHere:\"Déposer ici\",releaseHere:\"Relâcher ici\",\n nothingSelected:\"Rien de sélectionné\",clickBlock:\"Cliquez sur une ligne ou un bloc.\",\n preview:\"Aperçu\",exportHtml:\"HTML\",save:\"Enregistrer\",load:\"Charger\",newDesign:\"Nouveau\",\n undo:\"Annuler\",redo:\"Refaire\",desktop:\"Bureau\",tablet:\"Tablette\",mobile:\"Mobile\",\n copied:\"Copié!\",copyHtml:\"Copier HTML\",emailSettings:\"Paramètres email\",\n background:\"Arrière-plan\",contentBg:\"Fond contenu\",contentBgImage:\"Image de fond du contenu (URL)\",contentBgSize:\"Taille de l’image de fond\",contentBgRepeat:\"Répétition de l’image\",\n objectFit:\"Remplissage\",objectPosition:\"Position\",width:\"Largeur\",\n padding:\"Rembourrage\",radius:\"Rayon\",row:\"Ligne\",duplicate:\"Dupliquer\",\n delete:\"Supprimer\",moveUp:\"Monter\",moveDown:\"Descendre\",mergeTags:\"Balises fusion\",\n autoSaved:\"Auto-sauvegardé\",search:\"Rechercher…\",\n colorScheme:\"Schéma de couleurs\",\n blockGroupLayouts:\"Mises en page\",\n blockGroupBlocks:\"Blocs de contenu\",\n blockPaletteGroupText:\"Texte et contenu\",\n blockPaletteGroupStructure:\"Mise en page\",\n blockPaletteGroupMedia:\"Médias\",\n blockPaletteGroupActions:\"Boutons et liens\",\n blockPaletteGroupWidgets:\"Widgets\",\n closePanel:\"Fermer\",\n canvasEmptyHint:\"Glissez des blocs dans la colonne, ou ajoutez un bloc Mise en page pour plusieurs colonnes.\",\n emailContentSettings:\"Contenu de l’e-mail\",\n zoomIn:\"Zoom +\",zoomOut:\"Zoom -\",zoom:\"Zoom\",\n resizeSidebar:\"Redimensionner le panneau\",\n copy:\"Copier\",paste:\"Coller\" },\n de: { layouts:\"Layouts\",blocks:\"Blöcke\",settings:\"Einstellungen\",addRow:\"Layout hinzufügen\",\n dragIntoCell:\"In Zelle ziehen\",dropHere:\"Hier ablegen\",releaseHere:\"Loslassen\",\n nothingSelected:\"Nichts ausgewählt\",clickBlock:\"Zeile oder Block anklicken.\",\n preview:\"Vorschau\",exportHtml:\"HTML\",save:\"Speichern\",load:\"Laden\",newDesign:\"Neu\",\n undo:\"Rückgängig\",redo:\"Wiederholen\",desktop:\"Desktop\",tablet:\"Tablet\",mobile:\"Mobil\",\n copied:\"Kopiert!\",copyHtml:\"HTML kopieren\",emailSettings:\"E-Mail-Einstellungen\",\n background:\"Hintergrund\",contentBg:\"Inhalts-Hintergrund\",contentBgImage:\"Hintergrundbild Inhalt (URL)\",contentBgSize:\"Größe Hintergrundbild\",contentBgRepeat:\"Wiederholung Hintergrundbild\",\n objectFit:\"Einpassen\",objectPosition:\"Position\",width:\"Breite\",\n padding:\"Innenabstand\",radius:\"Radius\",row:\"Zeile\",duplicate:\"Duplizieren\",\n delete:\"Löschen\",moveUp:\"Nach oben\",moveDown:\"Nach unten\",mergeTags:\"Merge-Tags\",\n autoSaved:\"Auto-gespeichert\",search:\"Blöcke suchen…\",\n colorScheme:\"Farbschema\",\n blockGroupLayouts:\"Zeilenlayouts\",\n blockGroupBlocks:\"Inhaltsblöcke\",\n blockPaletteGroupText:\"Text & Inhalt\",\n blockPaletteGroupStructure:\"Layout & Struktur\",\n blockPaletteGroupMedia:\"Medien\",\n blockPaletteGroupActions:\"Buttons & Links\",\n blockPaletteGroupWidgets:\"Widgets\",\n closePanel:\"Schließen\",\n canvasEmptyHint:\"Blöcke in die Spalte ziehen oder Layout-Block für mehrspaltige Bereiche hinzufügen.\",\n emailContentSettings:\"E-Mail-Inhalt\",\n zoomIn:\"Zoom +\",zoomOut:\"Zoom -\",zoom:\"Zoom\",\n resizeSidebar:\"Seitenleiste skalieren\" },\n es: { layouts:\"Diseños\",blocks:\"Bloques\",settings:\"Ajustes\",addRow:\"Haga clic para agregar\",\n dragIntoCell:\"Arrastrar a celda\",dropHere:\"Soltar aquí\",releaseHere:\"Soltar aquí\",\n nothingSelected:\"Nada seleccionado\",clickBlock:\"Haga clic en una fila o bloque.\",\n preview:\"Vista previa\",exportHtml:\"HTML\",save:\"Guardar\",load:\"Cargar\",newDesign:\"Nuevo\",\n undo:\"Deshacer\",redo:\"Rehacer\",desktop:\"Escritorio\",tablet:\"Tableta\",mobile:\"Móvil\",\n copied:\"¡Copiado!\",copyHtml:\"Copiar HTML\",emailSettings:\"Ajustes de email\",\n background:\"Fondo\",contentBg:\"Fondo contenido\",contentBgImage:\"Imagen de fondo del contenido (URL)\",contentBgSize:\"Tamaño imagen de fondo\",contentBgRepeat:\"Repetición imagen de fondo\",\n objectFit:\"Ajuste\",objectPosition:\"Posición\",width:\"Ancho\",\n padding:\"Relleno\",radius:\"Radio\",row:\"Fila\",duplicate:\"Duplicar\",\n delete:\"Eliminar\",moveUp:\"Subir\",moveDown:\"Bajar\",mergeTags:\"Etiquetas de fusión\",\n autoSaved:\"Auto-guardado\",search:\"Buscar bloques…\",\n zoomIn:\"Zoom +\",zoomOut:\"Zoom -\",zoom:\"Zoom\",\n colorScheme:\"Esquema de color\",\n blockGroupLayouts:\"Diseños de fila\",\n blockGroupBlocks:\"Bloques de contenido\",\n blockPaletteGroupText:\"Texto y contenido\",\n blockPaletteGroupStructure:\"Diseño y estructura\",\n blockPaletteGroupMedia:\"Medios\",\n blockPaletteGroupActions:\"Botones y enlaces\",\n blockPaletteGroupWidgets:\"Widgets\",\n closePanel:\"Cerrar\",\n canvasEmptyHint:\"Arrastra bloques a la columna o añade un bloque Diseño para varias columnas.\",\n emailContentSettings:\"Contenido del correo\",\n resizeSidebar:\"Redimensionar panel\" },\n};\nexport const tr = (locale, key) => (I18N[locale] || I18N.en)[key] || key;\n\n// ─── LAYOUT PRESETS ───────────────────────────────────────────────────────────\nexport const LAYOUT_PRESETS = [\n { key:\"layout1\", label:\"Full Width\", cols:1, ratios:[1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"48\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout2\", label:\"2 Columns\", cols:2, ratios:[1,1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"22\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"28\" y=\"2\" width=\"22\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout3\", label:\"3 Columns\", cols:3, ratios:[1,1,1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"14\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"19\" y=\"2\" width=\"14\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"36\" y=\"2\" width=\"14\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout4\", label:\"4 Columns\", cols:4, ratios:[1,1,1,1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"15\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"28\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"41\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout13\", label:\"1:3 Split\", cols:2, ratios:[1,3], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"16\" y=\"2\" width=\"34\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout31\", label:\"3:1 Split\", cols:2, ratios:[3,1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"34\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"40\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout121\", label:\"1:2:1\", cols:3, ratios:[1,2,1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"16\" y=\"2\" width=\"20\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"40\" y=\"2\" width=\"10\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout212\", label:\"2:1:2\", cols:3, ratios:[2,1,2], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"2\" y=\"2\" width=\"18\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"24\" y=\"2\" width=\"8\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/><rect x=\"36\" y=\"2\" width=\"14\" height=\"24\" rx=\"2\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout_5\", label:\"5 Columns\", cols:5, ratios:[1,1,1,1,1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"1\" y=\"2\" width=\"8\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"11\" y=\"2\" width=\"8\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"21\" y=\"2\" width=\"8\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"31\" y=\"2\" width=\"8\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"41\" y=\"2\" width=\"9\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/></svg> },\n { key:\"layout_6\", label:\"6 Columns\", cols:6, ratios:[1,1,1,1,1,1], svg:<svg viewBox=\"0 0 52 28\" width=\"52\" height=\"28\"><rect x=\"1\" y=\"2\" width=\"6\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"9\" y=\"2\" width=\"6\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"17\" y=\"2\" width=\"6\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"25\" y=\"2\" width=\"6\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"33\" y=\"2\" width=\"6\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/><rect x=\"41\" y=\"2\" width=\"9\" height=\"24\" rx=\"1\" fill=\"#171717\" opacity=\".9\"/></svg> },\n];\n\n// ─── CONTENT BLOCK TYPES ─────────────────────────────────────────────────────\n/** Sidebar palette groups: order = top to bottom. Each block uses `paletteGroup` + `paletteOrder` (ascending within group). */\nexport const BLOCK_PALETTE_GROUPS = [\n { key: \"text\", labelKey: \"blockPaletteGroupText\" as const },\n { key: \"structure\", labelKey: \"blockPaletteGroupStructure\" as const },\n { key: \"media\", labelKey: \"blockPaletteGroupMedia\" as const },\n { key: \"actions\", labelKey: \"blockPaletteGroupActions\" as const },\n { key: \"widgets\", labelKey: \"blockPaletteGroupWidgets\" as const },\n] as const;\n\nexport type BlockPaletteGroupKey = (typeof BLOCK_PALETTE_GROUPS)[number][\"key\"];\n\ntype PaletteMeta = {\n label: string;\n icon: string;\n color: string;\n paletteGroup: BlockPaletteGroupKey;\n paletteOrder: number;\n};\n\n/** Sidebar palette: one entry per `DEFAULT_BLOCK_PROPS` key (labels / groups for the block library). */\nconst PALETTE_META = {\n heading: { label: \"Heading\", icon: \"H\", color: \"#262626\", paletteGroup: \"text\", paletteOrder: 1 },\n text: { label: \"Text\", icon: \"T\", color: \"#262626\", paletteGroup: \"text\", paletteOrder: 2 },\n html: { label: \"Rich editor\", icon: \"Aa\", color: \"#262626\", paletteGroup: \"text\", paletteOrder: 3 },\n layout: { label: \"Layout\", icon: \"⊞\", color: \"#262626\", paletteGroup: \"structure\", paletteOrder: 1 },\n divider: { label: \"Divider\", icon: \"—\", color: \"#262626\", paletteGroup: \"structure\", paletteOrder: 2 },\n spacer: { label: \"Spacer\", icon: \"↕\", color: \"#262626\", paletteGroup: \"structure\", paletteOrder: 3 },\n table: { label: \"Table\", icon: \"▦\", color: \"#262626\", paletteGroup: \"structure\", paletteOrder: 4 },\n image: { label: \"Image\", icon: \"🖼\", color: \"#262626\", paletteGroup: \"media\", paletteOrder: 1 },\n video: { label: \"Video\", icon: \"▶\", color: \"#262626\", paletteGroup: \"media\", paletteOrder: 2 },\n button: { label: \"Button\", icon: \"⬜\", color: \"#262626\", paletteGroup: \"actions\", paletteOrder: 1 },\n link: { label: \"Link\", icon: \"🔗\", color: \"#262626\", paletteGroup: \"actions\", paletteOrder: 2 },\n menu: { label: \"Menu\", icon: \"☰\", color: \"#262626\", paletteGroup: \"actions\", paletteOrder: 3 },\n social: { label: \"Social\", icon: \"◎\", color: \"#262626\", paletteGroup: \"widgets\", paletteOrder: 1 },\n timer: { label: \"Countdown\", icon: \"⏱\", color: \"#262626\", paletteGroup: \"widgets\", paletteOrder: 2 },\n} satisfies Record<keyof typeof DEFAULT_BLOCK_PROPS, PaletteMeta>;\n\nexport const CONTENT_BLOCK_TYPES = (\n Object.keys(PALETTE_META) as (keyof typeof PALETTE_META)[]\n).map((type) => ({\n type,\n ...PALETTE_META[type],\n}));\n\nexport const SC = { twitter:\"#000000\",facebook:\"#1877F2\",instagram:\"#E1306C\",linkedin:\"#0A66C2\",youtube:\"#FF0000\",pinterest:\"#E60023\",tiktok:\"#000000\",snapchat:\"#FFFC00\",github:\"#24292e\",discord:\"#5865F2\" };\nexport const ALL_NETWORKS = Object.keys(SC);\n\nexport function pickPresetByColCount(n) {\n const exact = LAYOUT_PRESETS.find((p) => p.cols === n);\n if (exact) return exact;\n if (n <= 1) return LAYOUT_PRESETS[0];\n return LAYOUT_PRESETS.find((p) => p.cols === Math.min(n, 6)) || LAYOUT_PRESETS[0];\n}\n","/** Shared defaults for a multi-column block inside a cell (`type: \"layout\"` with `props.cells`). */\nconst LAYOUT_IN_CELL_DEFAULTS = {\n cols: 2,\n ratios: [1, 1],\n gap: 12,\n padding: 8,\n bgColor: \"\",\n bgImage: \"\",\n bgSize: \"cover\",\n bgRepeat: \"no-repeat\",\n bgPosition: \"center\",\n bgGradient: null as { angle: number; colors: string[]; stops: number[] } | null,\n cells: [[], []],\n} as const;\n\nconst BOX0 = { top: 0, right: 0, bottom: 0, left: 0 } as const;\nconst boxAll = (n: number) => ({ top: n, right: n, bottom: n, left: n });\n\nconst BLOCK_BG = {\n bgColor: \"\",\n bgImage: \"\",\n bgGradient: null as { angle: number; colors: string[]; stops: number[] } | null,\n bgSize: \"cover\",\n bgRepeat: \"no-repeat\",\n bgPosition: \"center\",\n} as const;\n\nconst BACKDROP_BG = {\n backdropColor: \"\",\n backdropImage: \"\",\n backdropGradient: null as { angle: number; colors: string[]; stops: number[] } | null,\n backdropSize: \"cover\",\n backdropRepeat: \"no-repeat\",\n backdropPosition: \"center\",\n} as const;\n\n/** Plain defaults for `makeContentBlock` — `text.content` is HTML (TipTap / rich text). */\nexport const DEFAULT_BLOCK_PROPS = {\n heading: {\n ...BLOCK_BG,\n content: \"Your Headline Here\",\n level: \"h2\",\n fontSize: 28,\n color: \"#1e293b\",\n align: \"center\",\n fontWeight: \"700\",\n padding: boxAll(16),\n letterSpacing: 0,\n lineHeight: 1.2,\n fontFamily: \"Georgia,serif\",\n margin: { ...BOX0 },\n },\n text: {\n ...BLOCK_BG,\n content: \"Simple text block for plain messaging.\",\n fontSize: 15,\n color: \"#1e293b\",\n align: \"left\",\n fontWeight: \"400\",\n italic: false,\n underline: false,\n padding: boxAll(12),\n lineHeight: 1.65,\n letterSpacing: 0,\n fontFamily: \"Georgia,serif\",\n margin: { ...BOX0 },\n },\n html: {\n ...BLOCK_BG,\n content: \"<p>Rich HTML content. Edit with the rich editor.</p>\",\n fontSize: 15,\n color: \"#1e293b\",\n align: \"left\",\n padding: boxAll(12),\n lineHeight: 1.65,\n letterSpacing: 0,\n fontFamily: \"Georgia,serif\",\n margin: { ...BOX0 },\n },\n image: {\n ...BLOCK_BG,\n src: \"https://placehold.co/600x160/e2e8f0/94a3b8?text=Image\",\n alt: \"Image\",\n width: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\",\n align: \"center\",\n padding: boxAll(8),\n link: \"\",\n linkTarget: \"_blank\",\n borderRadius: { tl: 0, tr: 0, br: 0, bl: 0 },\n margin: { top: 0, right: 0, bottom: 0, left: 0 },\n },\n button: {\n ...BACKDROP_BG,\n label: \"Click Here\",\n href: \"#\",\n bgColor: \"#6366f1\",\n textColor: \"#ffffff\",\n align: \"center\",\n borderRadius: { tl: 6, tr: 6, br: 6, bl: 6 },\n paddingV: 11,\n paddingH: 24,\n fontSize: 14,\n fontWeight: 600,\n fullWidth: false,\n borderColor: \"transparent\",\n borderWidth: 0,\n linkTarget: \"_blank\",\n /** Space around the button block (outside the CTA). */\n padding: { ...BOX0 },\n margin: { ...BOX0 },\n },\n link: {\n ...BLOCK_BG,\n label: \"Link text\",\n href: \"#\",\n linkTarget: \"_blank\",\n color: \"#2563eb\",\n fontSize: 15,\n align: \"left\",\n fontWeight: \"700\",\n padding: boxAll(8),\n underline: true,\n fontFamily: \"Arial, Helvetica, sans-serif\",\n margin: { ...BOX0 },\n },\n divider: {\n ...BLOCK_BG,\n color: \"#e2e8f0\",\n thickness: 1,\n padding: boxAll(12),\n style: \"solid\",\n margin: { ...BOX0 },\n },\n spacer: { ...BLOCK_BG, height: 24, padding: { ...BOX0 }, margin: { ...BOX0 } },\n social: {\n ...BLOCK_BG,\n networks: [\"twitter\", \"facebook\", \"instagram\", \"linkedin\"],\n socialUrls: {},\n iconSize: 30,\n align: \"center\",\n padding: boxAll(12),\n shape: \"circle\",\n gap: 6,\n margin: { ...BOX0 },\n },\n video: {\n ...BLOCK_BG,\n src: \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n height: 280,\n padding: boxAll(8),\n margin: { ...BOX0 },\n },\n menu: {\n ...BLOCK_BG,\n items: [\n { label: \"Home\", href: \"#\" },\n { label: \"About\", href: \"#\" },\n { label: \"Contact\", href: \"#\" },\n ],\n align: \"center\",\n fontSize: 14,\n color: \"#6366f1\",\n padding: boxAll(12),\n gap: 20,\n margin: { ...BOX0 },\n },\n timer: {\n ...BACKDROP_BG,\n endDate: new Date(Date.now() + 7 * 864e5).toISOString(),\n align: \"center\",\n bgColor: \"#6366f1\",\n textColor: \"#ffffff\",\n padding: boxAll(12),\n borderRadius: { tl: 6, tr: 6, br: 6, bl: 6 },\n label: \"Offer ends in:\",\n showLabels: true,\n margin: { ...BOX0 },\n },\n layout: {\n ...LAYOUT_IN_CELL_DEFAULTS,\n preset: \"custom\",\n },\n table: {\n ...BLOCK_BG,\n header: false,\n tableRole: \"data\",\n rows: 3,\n cols: 3,\n /** Padding around the whole table (outside cells). */\n padding: boxAll(10),\n /** Padding inside each table cell (same shape as block padding). */\n cellPadding: boxAll(10),\n headerBg: \"#1a5fbe\",\n headerColor: \"#ffffff\",\n cellBg: \"#ffffff\",\n cellBorder: \"#d0dff0\",\n stripedBg: \"#f4f8ff\",\n striped: true,\n data: [\n [\"Col A\", \"Col B\", \"Col C\"],\n [\"Row 2 A\", \"Row 2 B\", \"Row 2 C\"],\n [\"Row 3 A\", \"Row 3 B\", \"Row 3 C\"],\n ],\n fontSize: 13,\n fontFamily: \"sans-serif\",\n margin: { ...BOX0 },\n },\n} as const;\n\nexport type BlockPropKey = keyof typeof DEFAULT_BLOCK_PROPS;\n\n/** Content blocks allowed in design JSON / editor (same keys as {@link DEFAULT_BLOCK_PROPS}). */\nexport function isKnownBlockType(type: unknown): type is BlockPropKey {\n return typeof type === \"string\" && type in DEFAULT_BLOCK_PROPS;\n}\n","import { DEFAULT_BLOCK_PROPS } from \"../defaultBlockProps\";\n\nexport function uid() { return Math.random().toString(36).slice(2,10); }\nexport function makeLayoutRow(preset) {\n return {\n id: uid(),\n type: \"layout\",\n preset: preset.key,\n cols: preset.cols,\n ratios: [...preset.ratios],\n gap: 12,\n padding: 8,\n bgColor: \"\",\n bgImage: \"\",\n bgSize: \"cover\",\n bgRepeat: \"no-repeat\",\n bgPosition: \"center\",\n bgGradient: null,\n cells: preset.ratios.map(() => []),\n };\n}\n\n/** Content block: columns inside a column (`layout` with cells; preset from row layout). */\nexport function makeNestedRowBlock(preset) {\n const row = makeLayoutRow(preset);\n return {\n id: uid(),\n type: \"layout\",\n props: {\n preset: row.preset,\n cols: row.cols,\n ratios: [...row.ratios],\n gap: row.gap,\n padding: row.padding,\n bgColor: row.bgColor,\n bgImage: row.bgImage,\n bgSize: row.bgSize ?? \"cover\",\n bgRepeat: row.bgRepeat ?? \"no-repeat\",\n bgPosition: (row as any).bgPosition ?? \"center\",\n bgGradient: (row as any).bgGradient ?? null,\n columnStyles: (row as any).columnStyles,\n cells: row.cells,\n },\n };\n}\n\nexport function makeContentBlock(type) {\n return { id:uid(), type, props:{ ...DEFAULT_BLOCK_PROPS[type] } };\n}\n","/** Content blocks that contain multiple columns (`cells` / `ratios`). */\nexport function isSplitLayoutBlock(b) {\n return b && b.type === \"layout\" && b.props && Array.isArray(b.props.cells);\n}\n\n/**\n * Address a column of blocks: top-level row column, or a column inside a nested `layout` block.\n * @typedef {{ type: 'top', rowId: string, cellIdx: number }} TopColumnLoc\n * @typedef {{ type: 'nested', rowId: string, outerCellIdx: number, blockIdx: number, innerCellIdx: number }} NestedColumnLoc\n * @typedef {TopColumnLoc | NestedColumnLoc} ColumnLoc\n */\n\n/** @param {ColumnLoc} loc */\nexport function getColumnBlocks(rows, loc) {\n const r = rows.find((x) => x.id === loc.rowId);\n if (!r) return [];\n if (loc.type === \"top\") return r.cells[loc.cellIdx] || [];\n const col = r.cells[loc.outerCellIdx];\n if (!col) return [];\n const b = col[loc.blockIdx];\n if (!isSplitLayoutBlock(b)) return [];\n return b.props.cells[loc.innerCellIdx] || [];\n}\n\n/** @param {ColumnLoc} loc @param {(col: object[]) => object[]} updater */\nexport function updateColumnAt(rows, loc, updater) {\n return rows.map((r) => {\n if (r.id !== loc.rowId) return r;\n if (loc.type === \"top\") {\n return {\n ...r,\n cells: r.cells.map((c, ci) => (ci === loc.cellIdx ? updater(c) : c)),\n };\n }\n return {\n ...r,\n cells: r.cells.map((col, oci) => {\n if (oci !== loc.outerCellIdx) return col;\n return col.map((b, bi) => {\n if (bi !== loc.blockIdx || !isSplitLayoutBlock(b)) return b;\n const nextInner = b.props.cells.map((ic, ici) =>\n ici === loc.innerCellIdx ? updater(ic) : ic,\n );\n return { ...b, props: { ...b.props, cells: nextInner } };\n });\n }),\n };\n });\n}\n\n/**\n * @param {object[]} rows\n * @param {string} rowId\n * @param {number} cellIdx outer column\n * @param {{ parentBlockIdx: number, innerCellIdx: number }|null|undefined} nested\n * @returns {ColumnLoc}\n */\nexport function toColumnLoc(rowId, cellIdx, nested) {\n if (nested && nested.parentBlockIdx != null && nested.innerCellIdx != null) {\n return {\n type: \"nested\",\n rowId,\n outerCellIdx: cellIdx,\n blockIdx: nested.parentBlockIdx,\n innerCellIdx: nested.innerCellIdx,\n };\n }\n return { type: \"top\", rowId, cellIdx };\n}\n\n/** True when both locs refer to the same block column (for move index math). */\nexport function sameColumnLoc(a, b) {\n if (!a || !b || a.rowId !== b.rowId) return false;\n if (a.type === \"top\" && b.type === \"top\") return a.cellIdx === b.cellIdx;\n if (a.type === \"nested\" && b.type === \"nested\") {\n return (\n a.outerCellIdx === b.outerCellIdx &&\n a.blockIdx === b.blockIdx &&\n a.innerCellIdx === b.innerCellIdx\n );\n }\n return false;\n}\n\nexport function countBlocksInDesign(rows) {\n const colBlocks = (blocks) =>\n blocks.reduce((n, b) => {\n if (isSplitLayoutBlock(b)) {\n const inner = (b.props.cells || []).reduce((m, c) => m + c.length, 0);\n return n + 1 + inner;\n }\n return n + 1;\n }, 0);\n return rows.reduce((sum, r) => sum + r.cells.reduce((s, c) => s + colBlocks(c), 0), 0);\n}\n","import React from \"react\";\n\n/** viewBox 0 0 24 24 — paths adapted from Simple Icons (MIT) */\nconst GLYPHS = {\n facebook:\n \"M24 12.073C24 5.446 18.627 0 12 0S0 5.446 0 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\",\n /** X (formerly Twitter) — Simple Icons “X” */\n twitter:\n \"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z\",\n instagram:\n \"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.98-6.98.072-1.28.07-1.689.07-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 100 12.324 6.162 6.162 0 000-12.324zM12 16a4 4 0 110-8 4 4 0 010 8zm6.406-11.845a1.44 1.44 0 100 2.881 1.44 1.44 0 000-2.881z\",\n linkedin:\n \"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\",\n youtube:\n \"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\",\n pinterest:\n \"M12.017 0C5.396 0 .029 5.367.029 11.987c0 5.079 3.158 9.417 7.618 11.174-.105-.949-.199-2.403.041-3.439.219-.937 1.406-5.957 1.406-5.957s-.359-.72-.359-1.781c0-1.663.966-2.901 2.165-2.901 1.021 0 1.512.765 1.512 1.682 0 1.025-.653 2.555-.99 3.978-.281 1.189.597 2.159 1.775 2.159 2.128 0 3.768-2.245 3.768-5.487 0-2.861-2.063-4.869-5.008-4.869-3.41 0-5.409 2.562-5.409 5.199 0 1.033.394 2.143.889 2.741.099.12.112.225.085.345-.09.375-.293 1.199-.334 1.363-.053.225-.172.271-.402.165-1.495-.698-2.433-2.878-2.433-4.646 0-3.776 2.748-7.252 7.92-7.252 4.158 0 7.392 2.967 7.392 6.923 0 4.135-2.607 7.462-6.233 7.462-1.214 0-2.354-.629-2.758-1.379l-.749 2.848c-.269 1.045-1.004 2.352-1.498 3.146 1.123.345 2.306.535 3.55.535 6.607 0 11.985-5.365 11.985-11.987C23.97 5.39 18.592.026 11.985.026z\",\n tiktok:\n \"M19.59 6.69a4.83 4.83 0 01-3.77-4.245V2h-3.45v13.672a2.896 2.896 0 01-5.201 1.743 2.895 2.895 0 012.31-4.629 2.89 2.89 0 01.878.14V9.4a6.84 6.84 0 00-1-.05A6.33 6.33 0 005 20.1a6.34 6.34 0 0010.86-4.43v-7.36a8.16 8.16 0 004.77 1.52v-3.4a4.85 4.85 0 01-1-.1z\",\n snapchat:\n \"M12 0C5.373 0 0 5.372 0 12c0 4.991 3.657 9.128 8.438 9.879-.118-.949-.227-2.422.045-3.461.222-.95 1.444-6.037 1.444-6.037s-.367-.744-.367-1.844c0-1.726.999-3.012 2.243-3.012 1.058 0 1.569.795 1.569 1.748 0 1.065-.679 2.653-1.029 4.13-.292 1.237.618 2.246 1.835 2.246 2.203 0 3.895-2.323 3.895-5.67 0-2.965-2.129-5.038-5.167-5.038-3.52 0-5.585 2.643-5.585 5.589 0 1.106.425 2.295.956 2.943a.77.77 0 01.194.569c-.21.997-.679 3.135-.769 3.568-.121.588-.402.712-.929.431-3.485-1.624-5.667-6.731-5.667-10.839C2.5 6.506 6.847 2.344 12.001 2.344c4.391 0 7.809 2.776 7.809 6.586 0 4.308-2.694 7.635-6.369 7.635-1.271 0-2.464-.677-2.871-1.475 0 0-.669 2.562-.828 3.193-.301 1.301-1.12 2.929-1.668 3.922.125.047.256.07.395.07 1 0 1.826-.827 2.13-1.856.169-.617.982-3.857.982-3.857z\",\n github:\n \"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\",\n discord:\n \"M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z\",\n};\n\nfunction iconFillForNetwork(network) {\n return network === \"snapchat\" ? \"#000000\" : \"#ffffff\";\n}\n\nfunction glyphPath(network) {\n return GLYPHS[network] || null;\n}\n\n/** Inline SVG string for exported email HTML (Gmail-friendly) */\nexport function socialIconSvgString(network, pixelSize) {\n const d = glyphPath(network);\n const fill = iconFillForNetwork(network);\n const s = Math.max(8, Math.round(pixelSize));\n if (!d) {\n const letter = (network && network[0] ? network[0] : \"?\").toUpperCase();\n return `<span style=\"font-size:${Math.floor(s * 0.44)}px;font-weight:800;line-height:1;\">${letter}</span>`;\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"${s}\" height=\"${s}\" style=\"display:block;flex-shrink:0;\" aria-hidden=\"true\"><path fill=\"${fill}\" d=\"${d}\"/></svg>`;\n}\n\nexport function SocialGlyph({ network, size }) {\n const d = glyphPath(network);\n const s = Math.max(8, Math.round(size));\n if (!d) {\n return (\n <span style={{ fontSize: Math.floor(s * 0.44), fontWeight: 800, lineHeight: 1 }}>\n {(network && network[0] ? network[0] : \"?\").toUpperCase()}\n </span>\n );\n }\n return (\n <svg\n width={s}\n height={s}\n viewBox=\"0 0 24 24\"\n style={{ display: \"block\", flexShrink: 0 }}\n aria-hidden\n >\n <path fill=\"currentColor\" d={d} />\n </svg>\n );\n}\n","// --- HTML text safety ---\nexport function escHtmlAttr(s: unknown) {\n return String(s ?? \"\")\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\nexport function escHtml(s: unknown) {\n return String(s ?? \"\")\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n}\n\n// --- Base64 (UTF-8) for embedded design blobs / tooling ---\nexport function utf8ToBase64(raw: string): string {\n const bytes = new TextEncoder().encode(raw);\n let bin = \"\";\n for (let i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]!);\n return btoa(bin);\n}\n\nexport function base64ToUtf8(b64: string): string {\n try {\n const bin = atob(b64.trim());\n const bytes = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n return new TextDecoder().decode(bytes);\n } catch {\n return \"\";\n }\n}\n\n// --- Video URLs (YouTube / Vimeo) ---\nexport function videoSrcForEditorDisplay(src: unknown) {\n if (!src || typeof src !== \"string\") return \"\";\n const ytEmb = src.match(/youtube\\.com\\/embed\\/([A-Za-z0-9_-]{11})/);\n if (ytEmb) return `https://www.youtube.com/watch?v=${ytEmb[1]}`;\n const viEmb = src.match(/player\\.vimeo\\.com\\/video\\/(\\d+)/);\n if (viEmb) return `https://vimeo.com/${viEmb[1]}`;\n return src;\n}\n\nexport function videoUrlToEmbedSrc(url: unknown) {\n if (!url || typeof url !== \"string\") return \"\";\n const yt = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([A-Za-z0-9_-]{11})/);\n if (yt) return `https://www.youtube.com/embed/${yt[1]}`;\n const sh = url.match(/youtube\\.com\\/shorts\\/([A-Za-z0-9_-]{11})/);\n if (sh) return `https://www.youtube.com/embed/${sh[1]}`;\n const vi = url.match(/vimeo\\.com\\/(\\d+)/);\n if (vi) return `https://player.vimeo.com/video/${vi[1]}`;\n return url;\n}\n\n// --- Rich HTML (TipTap / canvas storage) ---\nconst EMPTY_RICH_HTML = \"<p></p>\";\n\nfunction unwrapAllDivElements(container: HTMLElement) {\n let el: HTMLDivElement | null;\n while ((el = container.querySelector(\"div\"))) {\n const parent = el.parentNode;\n if (!parent) break;\n while (el.firstChild) parent.insertBefore(el.firstChild, el);\n parent.removeChild(el);\n }\n}\n\n/** Collapse empty rich HTML to a canonical body; strip layout `<div>` wrappers in the browser. */\nexport function normalizeRichHtmlForStorage(html: string | undefined | null): string {\n const raw = String(html ?? \"\").trim();\n if (!raw) return EMPTY_RICH_HTML;\n if (typeof document === \"undefined\") {\n if (/^<p[^>]*>\\s*(<br\\s*\\/?\\s*>)?\\s*<\\/p>$/i.test(raw)) return EMPTY_RICH_HTML;\n return raw;\n }\n const tmp = document.createElement(\"div\");\n tmp.innerHTML = raw;\n unwrapAllDivElements(tmp);\n const text = (tmp.textContent || \"\").replace(/\\u00a0/g, \" \").trim();\n if (!text && !tmp.querySelector(\"img,video,iframe,svg\")) return EMPTY_RICH_HTML;\n return tmp.innerHTML.trim();\n}\n\nexport function isEffectivelyEmptyRichHtml(html: string | undefined | null): boolean {\n return normalizeRichHtmlForStorage(html) === EMPTY_RICH_HTML;\n}\n","import type { CSSProperties } from \"react\";\n\n/** Parsed gradient object from editor JSON */\nexport type GradientSpec = {\n angle?: number;\n colors?: unknown[];\n stops?: unknown[];\n};\n\nexport function linearGradientCssInner(g: unknown): string {\n if (!g || typeof g !== \"object\" || Array.isArray(g)) return \"\";\n const o = g as GradientSpec;\n if (!Array.isArray(o.colors) || !Array.isArray(o.stops)) return \"\";\n if (o.colors.length < 2 || o.stops.length !== o.colors.length) return \"\";\n const angle = typeof o.angle === \"number\" ? o.angle : 135;\n const pairs = o.colors\n .map((c, i) => [String(c ?? \"\").trim(), Number(o.stops![i])] as const)\n .filter(([c, s]) => c && Number.isFinite(s))\n .map(([c, s]) => `${c} ${Math.max(0, Math.min(100, s))}%`);\n if (pairs.length < 2) return \"\";\n return `linear-gradient(${angle}deg, ${pairs.join(\", \")})`;\n}\n\nexport type SurfaceBgProps = {\n bgColor?: string;\n bgImage?: string;\n bgSize?: string;\n bgRepeat?: string;\n bgPosition?: string;\n bgGradient?: unknown;\n};\n\nexport function backgroundLayerStyle(p: SurfaceBgProps): CSSProperties {\n const pos =\n typeof p.bgPosition === \"string\" && p.bgPosition.trim()\n ? p.bgPosition.trim()\n : \"center\";\n const gradInner = linearGradientCssInner(p.bgGradient);\n if (gradInner) {\n return {\n backgroundColor:\n p.bgColor && String(p.bgColor).trim() ? p.bgColor : \"transparent\",\n backgroundImage: gradInner,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: pos,\n backgroundSize: \"cover\",\n };\n }\n const img = String(p.bgImage ?? \"\").trim();\n if (img) {\n return {\n backgroundColor:\n p.bgColor && String(p.bgColor).trim() ? p.bgColor : \"transparent\",\n backgroundImage: `url(${img})`,\n backgroundSize: p.bgSize || \"cover\",\n backgroundRepeat: p.bgRepeat || \"no-repeat\",\n backgroundPosition: pos,\n };\n }\n if (p.bgColor && String(p.bgColor).trim()) {\n return { backgroundColor: p.bgColor };\n }\n return {};\n}\n\n/** Inline CSS fragment for email HTML `style=\"\"` (no leading/trailing semicolons required). */\nexport function emailSurfaceBgCss(p: SurfaceBgProps): string {\n const pos =\n typeof p.bgPosition === \"string\" && p.bgPosition.trim()\n ? p.bgPosition.trim()\n : \"center\";\n const gradInner = linearGradientCssInner(p.bgGradient);\n if (gradInner) {\n const bc =\n p.bgColor && String(p.bgColor).trim()\n ? `background-color:${p.bgColor};`\n : \"\";\n return `${bc}background-image:${gradInner};background-repeat:no-repeat;background-position:${pos};background-size:cover;`;\n }\n const img = String(p.bgImage ?? \"\").trim();\n if (img) {\n const bc =\n p.bgColor && String(p.bgColor).trim()\n ? `background-color:${p.bgColor};`\n : \"\";\n return `${bc}background-image:url(${img});background-size:${p.bgSize || \"cover\"};background-repeat:${p.bgRepeat || \"no-repeat\"};background-position:${pos};`;\n }\n if (p.bgColor && String(p.bgColor).trim())\n return `background-color:${p.bgColor};`;\n return \"\";\n}\n\nexport type BackdropBgProps = {\n backdropColor?: string;\n backdropImage?: string;\n backdropSize?: string;\n backdropRepeat?: string;\n backdropPosition?: string;\n backdropGradient?: unknown;\n};\n\nexport function backdropLayerStyle(p: BackdropBgProps): CSSProperties {\n return backgroundLayerStyle({\n bgColor: p.backdropColor,\n bgImage: p.backdropImage,\n bgSize: p.backdropSize,\n bgRepeat: p.backdropRepeat,\n bgPosition: p.backdropPosition,\n bgGradient: p.backdropGradient,\n });\n}\n\nexport function emailBackdropBgCss(p: BackdropBgProps): string {\n return emailSurfaceBgCss({\n bgColor: p.backdropColor,\n bgImage: p.backdropImage,\n bgSize: p.backdropSize,\n bgRepeat: p.backdropRepeat,\n bgPosition: p.backdropPosition,\n bgGradient: p.backdropGradient,\n });\n}\n","import { socialIconSvgString } from \"../socialIcons\";\nimport { SC } from \"../constants\";\nimport { escHtmlAttr, escHtml, utf8ToBase64, videoUrlToEmbedSrc } from \"./htmlUtils\";\nimport { emailBackdropBgCss, emailSurfaceBgCss } from \"./blockBackground\";\n\nfunction blockToHtml(cb) {\n const p = cb.props;\n const numOr = (n: unknown, fallback: number) => (typeof n === \"number\" && Number.isFinite(n) ? n : fallback);\n const boxPx = (m: any) => {\n const top = numOr(m?.top, 0);\n const right = numOr(m?.right, top);\n const bottom = numOr(m?.bottom, top);\n const left = numOr(m?.left, right);\n return `${top}px ${right}px ${bottom}px ${left}px`;\n };\n /** Padding is always px (UI forces px; keep backward compatibility with number). */\n const pd = (v: unknown) =>\n v && typeof v === \"object\" && !Array.isArray(v) ? `padding:${boxPx(v)}` : `padding:${numOr(v, 0)}px`;\n const lenPx = (v: unknown) => `${numOr(v, 0)}px`;\n const lh = (v: unknown, u?: unknown) => {\n // Always unitless in export (email clients expect unitless line-height for text).\n return String(numOr(v, 1.65));\n };\n const box = (m: any, u?: unknown) => {\n const top = numOr(m?.top, 0);\n const right = numOr(m?.right, top);\n const bottom = numOr(m?.bottom, top);\n const left = numOr(m?.left, right);\n return `${top}px ${right}px ${bottom}px ${left}px`;\n };\n const marginCss = () => `margin:${box(p.margin)};`;\n const radiusPx = (r: any) => {\n if (typeof r === \"number\") return `${numOr(r, 0)}px`;\n if (r && typeof r === \"object\" && !Array.isArray(r)) {\n const tl = numOr(r.tl, 0);\n const tr = numOr(r.tr, tl);\n const br = numOr(r.br, tl);\n const bl = numOr(r.bl, tr);\n return `${tl}px ${tr}px ${br}px ${bl}px`;\n }\n return \"0px\";\n };\n switch(cb.type) {\n case \"heading\": {\n const shell = emailSurfaceBgCss(p);\n const tag = p.level || \"h2\";\n const typo = `font-size:${lenPx(p.fontSize)};color:${p.color};text-align:${p.align};font-weight:${p.fontWeight ?? (p.bold ? 700 : 400)};letter-spacing:${lenPx(p.letterSpacing)};line-height:${lh(p.lineHeight)};font-family:${p.fontFamily || \"Georgia,serif\"}`;\n if (shell) {\n return `<div style=\"${pd(p.padding)};${marginCss()}${shell}\"><${tag} style=\"margin:0;${typo}\">${p.content}</${tag}></div>`;\n }\n return `<${tag} style=\"${pd(p.padding)};${typo};${marginCss()}\">${p.content}</${tag}>`;\n }\n case \"text\": {\n const shell = emailSurfaceBgCss(p);\n const inner = `font-size:${lenPx(p.fontSize)};color:${p.color};text-align:${p.align};font-weight:${p.fontWeight || 400};font-style:${p.italic ? \"italic\" : \"normal\"};text-decoration:${p.underline ? \"underline\" : \"none\"};line-height:${lh(p.lineHeight)};letter-spacing:${lenPx(p.letterSpacing)};font-family:${p.fontFamily || \"Georgia,serif\"}`;\n return `<div style=\"${pd(p.padding)};${marginCss()}${shell}\"><div style=\"${inner}\">${p.content}</div></div>`;\n }\n case \"html\": {\n const shell = emailSurfaceBgCss(p);\n const inner = `font-size:${lenPx(p.fontSize)};color:${p.color};text-align:${p.align};line-height:${lh(p.lineHeight)};letter-spacing:${lenPx(p.letterSpacing)};font-family:${p.fontFamily || \"Georgia,serif\"}`;\n return `<div style=\"${pd(p.padding)};${marginCss()}${shell}\"><div style=\"${inner}\">${p.content || \"<p></p>\"}</div></div>`;\n }\n case \"image\": {\n const of = typeof p.objectFit === \"string\" && p.objectFit.trim() ? p.objectFit.trim() : \"cover\";\n const op = typeof p.objectPosition === \"string\" && p.objectPosition.trim() ? p.objectPosition.trim() : \"center\";\n const img=`<img src=\"${p.src}\" alt=\"${p.alt||\"\"}\" style=\"max-width:${p.width};width:${p.width||\"100%\"};display:inline-block;border-radius:${radiusPx(p.borderRadius)};object-fit:${of};object-position:${op};\"/>`;\n const shell = emailSurfaceBgCss(p);\n return `<div style=\"${pd(p.padding)};text-align:${p.align};${marginCss()}${shell}\">${p.link ? `<a href=\"${p.link}\" target=\"${p.linkTarget || \"_blank\"}\">${img}</a>` : img}</div>`;\n }\n case \"button\": {\n const bd = emailBackdropBgCss(p);\n return `<div class=\"email-btn-wrap\" style=\"${pd(p.padding)};text-align:${p.fullWidth ? \"center\" : p.align};${marginCss()}${bd}\"><a class=\"email-btn-cta\" href=\"${escHtmlAttr(p.href)}\" target=\"${escHtmlAttr(p.linkTarget || \"_blank\")}\" style=\"display:${p.fullWidth ? \"block\" : \"inline-block\"};background:${p.bgColor};color:${p.textColor};border-radius:${radiusPx(p.borderRadius)};padding:${p.paddingV || 11}px ${p.paddingH || 24}px;text-decoration:none;font-size:${lenPx(p.fontSize)};font-weight:${p.fontWeight || 600};font-family:sans-serif;border:${p.borderWidth || 0}px solid ${p.borderColor || \"transparent\"};${p.fullWidth ? \"width:100%;text-align:center;box-sizing:border-box;\" : \"\"}\">${escHtml(p.label)}</a></div>`;\n }\n case \"link\": {\n const dec = p.underline ? \"underline\" : \"none\";\n const fw = p.fontWeight ?? (p.bold ? 700 : 400);\n const shell = emailSurfaceBgCss(p);\n return `<div style=\"${pd(p.padding)};text-align:${p.align};${marginCss()}${shell}\"><a href=\"${escHtmlAttr(p.href)}\" target=\"${escHtmlAttr(p.linkTarget || \"_blank\")}\" rel=\"noopener noreferrer\" style=\"color:${p.color};font-size:${lenPx(p.fontSize)};font-weight:${fw};text-decoration:${dec};font-family:${p.fontFamily || \"Arial, Helvetica, sans-serif\"};\">${escHtml(p.label)}</a></div>`;\n }\n case \"divider\": {\n const shell = emailSurfaceBgCss(p);\n return `<div style=\"${pd(p.padding)};${marginCss()}${shell}\"><hr style=\"border:none;border-top:${p.thickness}px ${p.style || \"solid\"} ${p.color};margin:0;\"/></div>`;\n }\n case \"spacer\": {\n const shell = emailSurfaceBgCss(p);\n return `<div style=\"height:${p.height}px;line-height:${p.height}px;${pd(p.padding)};${marginCss()}${shell}\">&nbsp;</div>`;\n }\n case \"social\": {\n const urls = p.socialUrls || {};\n const shell = emailSurfaceBgCss(p);\n return `<div class=\"email-social-row\" style=\"${pd(p.padding)};text-align:${p.align};${marginCss()}${shell}\">${(p.networks||[]).map(n=>{\n const raw = urls[n] && String(urls[n]).trim();\n const href = escHtmlAttr(raw || \"#\");\n const glyphPx = Math.round((p.iconSize || 24) * 0.56);\n const svg = socialIconSvgString(n, glyphPx);\n const tag = `<span style=\"display:inline-flex;align-items:center;justify-content:center;width:${p.iconSize}px;height:${p.iconSize}px;border-radius:${p.shape===\"square\"?\"4px\":\"50%\"};background:${SC[n]||\"#64748b\"};color:${n===\"snapchat\"?\"#000\":\"#fff\"};margin:0 ${p.gap||4}px;text-decoration:none;\">${svg}</span>`;\n return raw ? `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display:inline-flex;text-decoration:none;\">${tag}</a>` : tag;\n }).join(\"\")}</div>`;\n }\n case \"video\": {\n const embedSrc = videoUrlToEmbedSrc(p.src);\n const shell = emailSurfaceBgCss(p);\n return `<div style=\"${pd(p.padding)};text-align:center;${marginCss()}${shell}\"><iframe src=\"${embedSrc}\" width=\"100%\" height=\"${p.height}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen style=\"max-width:100%;border-radius:5px;display:block;\"></iframe></div>`;\n }\n case \"menu\": {\n const shell = emailSurfaceBgCss(p);\n return `<nav class=\"email-nav-menu\" style=\"${pd(p.padding)};text-align:${p.align};${marginCss()}${shell}\">${(p.items||[]).map(item=>`<a href=\"${item.href}\" style=\"font-size:${lenPx(p.fontSize)};color:${p.color};margin:0 ${p.gap||10}px;text-decoration:none;font-family:sans-serif;font-weight:600;\">${item.label}</a>`).join(\"\")}</nav>`;\n }\n case \"timer\": {\n const end=new Date(p.endDate).getTime(),now=Date.now(),diff=Math.max(0,end-now);\n const d=Math.floor(diff/86400000),h=Math.floor((diff%86400000)/3600000),m=Math.floor((diff%3600000)/60000),s=Math.floor((diff%60000)/1000);\n const cell=(val,lbl)=>`<td align=\"center\" style=\"background:${p.bgColor};color:${p.textColor};border-radius:${radiusPx(p.borderRadius)};padding:8px 14px;font-family:monospace;font-weight:700;font-size:20px;min-width:52px;text-align:center;\"><div>${String(val).padStart(2,\"0\")}</div>${p.showLabels?`<div style=\"font-size:9px;opacity:.75;letter-spacing:.08em;margin-top:3px;\">${lbl}</div>`:\"\"}</td>`;\n const bd = emailBackdropBgCss(p);\n return `<div class=\"email-timer-wrap\" style=\"${pd(p.padding)};text-align:${p.align};${marginCss()}${bd}\">${p.label?`<div style=\"font-size:12px;color:#64748b;margin-bottom:6px;font-family:sans-serif;\">${p.label}</div>`:\"\"}<table cellpadding=\"0\" cellspacing=\"6\" style=\"display:inline-table;max-width:100%;\"><tr>${cell(d,\"DAYS\")}${cell(h,\"HRS\")}${cell(m,\"MIN\")}${cell(s,\"SEC\")}</tr></table></div>`;\n }\n case \"table\": {\n const rows2 = p.data || [];\n const role = p.tableRole === \"presentation\" ? \"presentation\" : \"table\";\n const cellPaddingCss = (() => {\n const cp = p.cellPadding;\n if (cp && typeof cp === \"object\" && !Array.isArray(cp)) {\n return `padding:${boxPx(cp)}`;\n }\n const cellPadPx =\n typeof cp === \"number\" && Number.isFinite(cp)\n ? cp\n : typeof p.padding === \"number\" && Number.isFinite(p.padding)\n ? p.padding\n : numOr((p.padding as { top?: number })?.top, 8);\n return `padding:${cellPadPx}px`;\n })();\n const rowsHtml = rows2.map((row, ri) => {\n const isHeaderRow = !!p.header && ri === 0;\n const isStriped =\n p.striped &&\n (p.header ? ri > 1 && ri % 2 === 0 : ri > 0 && ri % 2 === 1);\n const cells = row\n .map((cell) => {\n const tag = isHeaderRow ? \"th\" : \"td\";\n const scope = isHeaderRow ? \" scope=\\\"col\\\"\" : \"\";\n const bg = isHeaderRow\n ? p.headerBg || \"#1a5fbe\"\n : isStriped\n ? p.stripedBg || \"#f4f8ff\"\n : p.cellBg || \"#ffffff\";\n const color = isHeaderRow ? p.headerColor || \"#ffffff\" : \"inherit\";\n const fw = isHeaderRow ? 700 : 400;\n return `<${tag}${scope} style=\"${cellPaddingCss};border:1px solid ${p.cellBorder || \"#d0dff0\"};background:${bg};color:${color};font-weight:${fw};font-size:${p.fontSize || 13}px;font-family:${p.fontFamily || \"sans-serif\"};text-align:left;word-break:break-word;\">${cell}</${tag}>`;\n })\n .join(\"\");\n return `<tr>${cells}</tr>`;\n }).join(\"\");\n const shell = emailSurfaceBgCss(p);\n return `<div style=\"${pd(p.padding)};overflow:auto;${marginCss()}${shell}\"><table role=\"${escHtmlAttr(role)}\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse:collapse;\">${rowsHtml}</table></div>`;\n }\n case \"layout\": {\n const pseudo = {\n id: \"\",\n type: \"layout\",\n cols: p.cols,\n ratios: p.ratios || [1],\n gap: p.gap ?? 12,\n padding: p.padding ?? 8,\n bgColor: p.bgColor || \"\",\n bgImage: p.bgImage || \"\",\n bgSize: p.bgSize || \"cover\",\n bgRepeat: p.bgRepeat || \"no-repeat\",\n bgPosition: typeof p.bgPosition === \"string\" ? p.bgPosition : \"center\",\n bgGradient: p.bgGradient ?? null,\n columnStyles: p.columnStyles,\n cells: p.cells || [],\n };\n return rowToHtml(pseudo);\n }\n default: return \"\";\n }\n}\nfunction rowToHtml(row) {\n const numOr = (v: unknown, fb: number) => (typeof v === \"number\" && Number.isFinite(v) ? v : fb);\n const shellBg = emailSurfaceBgCss(row);\n /** Multi-column layout row = horizontal flex (matches editor canvas). */\n const inner =\n row.cells.length === 1\n ? row.cells[0].map(blockToHtml).join(\"\")\n : `<div class=\"email-row-flex\" style=\"display:flex;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;gap:${row.gap ?? 12}px;width:100%;max-width:100%;box-sizing:border-box;\">${row.cells\n .map((cell, i) => {\n const r = row.ratios[i] ?? 1;\n const cs = row.columnStyles && row.columnStyles[i] ? row.columnStyles[i] : {};\n const colShell = emailSurfaceBgCss(cs);\n const pad =\n cs.padding && typeof cs.padding === \"object\" && !Array.isArray(cs.padding)\n ? `padding:${(() => {\n const o = cs.padding as Record<string, number>;\n const t = numOr(o.top, 0);\n const rgt = numOr(o.right, t);\n const b = numOr(o.bottom, t);\n const l = numOr(o.left, rgt);\n return `${t}px ${rgt}px ${b}px ${l}px`;\n })()};`\n : typeof cs.padding === \"number\" && Number.isFinite(cs.padding)\n ? `padding:${cs.padding}px;`\n : \"\";\n const rad =\n cs.borderRadius && typeof cs.borderRadius === \"object\" && !Array.isArray(cs.borderRadius)\n ? (() => {\n const x = cs.borderRadius as Record<string, number>;\n const tl = numOr(x.tl, 0);\n const tr = numOr(x.tr, tl);\n const br = numOr(x.br, tl);\n const bl = numOr(x.bl, tr);\n return `border-radius:${tl}px ${tr}px ${br}px ${bl}px;`;\n })()\n : typeof cs.borderRadius === \"number\" && Number.isFinite(cs.borderRadius)\n ? `border-radius:${cs.borderRadius}px;`\n : \"\";\n return `<div style=\"flex:${r} 1 0;min-width:0;box-sizing:border-box;${pad}${rad}${colShell}\">${cell.map(blockToHtml).join(\"\")}</div>`;\n })\n .join(\"\")}</div>`;\n const innerTrim = inner.replace(/>\\s+</g, \"><\").trim();\n /** Keep the row shell in HTML even when all columns/blocks are empty (email clients may still show padding/bg). */\n const body = innerTrim || \"&nbsp;\";\n return `<div class=\"email-row-shell\" style=\"padding:${row.padding}px;width:100%;max-width:100%;box-sizing:border-box;${shellBg}\">${body}</div>`;\n}\n\n/** Options passed to {@link designToHtml} and {@link jsonToHtml} (from `emailDesignJson`). */\nexport type EmailHtmlOptions = {\n /** Injected as a `<style>` block in the document `<head>`. */\n customCSS?: string;\n};\n\n/**\n * Full email HTML document: outer shell uses tables for width/centering; each layout row uses flex for columns.\n * {@code opts.customCSS} injects a {@code <style>} block in the head.\n */\n/** Injected so narrow viewports stack columns, shrink tables, and avoid horizontal scroll. */\nconst RESPONSIVE_EMAIL_CSS = `<style>\nhtml{-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}\nbody{margin:0!important;padding:0;overflow-x:hidden;word-break:break-word;overflow-wrap:anywhere;-webkit-font-smoothing:antialiased;}\nimg,video,iframe{max-width:100%!important;height:auto!important;}\ntable{max-width:100%!important;}\ntable[role=\"presentation\"]{width:100%!important;}\ntable.email-shell-table{table-layout:fixed!important;}\ntable[role=\"presentation\"] td{min-width:0!important;word-break:break-word;}\n.email-row-shell{width:100%!important;max-width:100%!important;box-sizing:border-box!important;}\n@media screen and (max-width:600px){\n .email-row-flex{flex-wrap:wrap!important;align-items:stretch!important;}\n .email-row-flex>div{flex:1 1 100%!important;max-width:100%!important;min-width:0!important;width:100%!important;}\n .email-content-td{padding-left:max(12px,env(safe-area-inset-left))!important;padding-right:max(12px,env(safe-area-inset-right))!important;}\n .email-btn-cta{max-width:100%!important;box-sizing:border-box!important;}\n .email-nav-menu{display:flex!important;flex-direction:column!important;align-items:stretch!important;gap:10px!important;}\n .email-nav-menu a{display:block!important;margin:0!important;padding:6px 0!important;}\n .email-social-row a,.email-social-row span{margin:6px!important;}\n .email-timer-wrap table{display:block!important;width:100%!important;max-width:100%!important;}\n .email-timer-wrap tr{display:flex!important;flex-wrap:wrap!important;justify-content:center!important;gap:6px!important;}\n .email-timer-wrap td{display:inline-block!important;flex:0 0 auto!important;min-width:0!important;}\n}\n@media screen and (max-width:480px){\n .email-content-td{padding-left:max(10px,env(safe-area-inset-left))!important;padding-right:max(10px,env(safe-area-inset-right))!important;}\n}\n</style>`;\n\n/**\n * Adjust email HTML for a preview iframe with a known CSS width so layout viewport\n * matches the iframe (fixes mobile/tablet where `width=device-width` stays too wide).\n */\nexport function previewEmailSrcDoc(html: string, viewportWidthPx: number): string {\n const viewportTag = `<meta name=\"viewport\" content=\"width=${viewportWidthPx},initial-scale=1\"/>`;\n let out = /<meta[^>]*\\bname\\s*=\\s*[\"']viewport[\"'][^>]*>/i.test(html)\n ? html.replace(/<meta[^>]*\\bname\\s*=\\s*[\"']viewport[\"'][^>]*>/i, viewportTag)\n : html.replace(/<head[^>]*>/i, (open) => `${open}${viewportTag}`);\n\n const previewFix = `<style data-email-preview-iframe=\"1\">\nhtml,body{overflow-x:hidden!important;max-width:100%!important;}\nhtml{height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;}\nbody{min-height:100%;overflow-y:auto!important;-webkit-overflow-scrolling:touch;}\ntable.email-shell-table{overflow:visible!important;}\n</style>`;\n if (/<\\/head>/i.test(out)) {\n out = out.replace(/<\\/head>/i, `${previewFix}</head>`);\n }\n return out;\n}\n\nexport function designToHtml(rows: any, settings: any, opts: EmailHtmlOptions = {}) {\n const css = opts.customCSS ? `<style>${opts.customCSS}</style>` : \"\";\n const cw = settings.contentWidth || 600;\n const contentBg = settings.contentBg || \"#fff\";\n const bgImgRaw =\n typeof settings.contentBgImage === \"string\" ? String(settings.contentBgImage).trim() : \"\";\n const contentShellStyle = [\n \"width:100%\",\n `max-width:${cw}px`,\n `background-color:${contentBg}`,\n `border-radius:${settings.borderRadius || 8}px`,\n \"overflow:hidden\",\n \"box-sizing:border-box\",\n ];\n if (bgImgRaw) {\n const u = bgImgRaw.replace(/'/g, \"%27\");\n const sz = typeof settings.contentBgSize === \"string\" && settings.contentBgSize.trim() ? settings.contentBgSize.trim() : \"cover\";\n const rep =\n typeof settings.contentBgRepeat === \"string\" && settings.contentBgRepeat.trim()\n ? settings.contentBgRepeat.trim()\n : \"no-repeat\";\n contentShellStyle.push(`background-image:url('${u}')`);\n contentShellStyle.push(`background-size:${sz}`);\n contentShellStyle.push(`background-position:${typeof settings.contentBgPosition === \"string\" && settings.contentBgPosition.trim() ? settings.contentBgPosition.trim() : \"center\"}`);\n contentShellStyle.push(`background-repeat:${rep}`);\n }\n\n const pagePos = typeof settings.bgPosition === \"string\" && settings.bgPosition.trim() ? settings.bgPosition.trim() : \"center\";\n const pageGrad = settings.bgGradient && typeof settings.bgGradient === \"object\" ? settings.bgGradient : null;\n const pageGradCss = (() => {\n if (!pageGrad || typeof pageGrad !== \"object\") return \"\";\n if (!Array.isArray((pageGrad as any).colors) || !Array.isArray((pageGrad as any).stops)) return \"\";\n const colors = (pageGrad as any).colors as any[];\n const stops = (pageGrad as any).stops as any[];\n if (colors.length < 2 || stops.length !== colors.length) return \"\";\n const angle = typeof (pageGrad as any).angle === \"number\" ? (pageGrad as any).angle : 135;\n const pairs = colors\n .map((c, i) => [String(c || \"\").trim(), Number(stops[i])] as const)\n .filter(([c, s]) => c && Number.isFinite(s))\n .map(([c, s]) => `${c} ${Math.max(0, Math.min(100, s))}%`);\n if (pairs.length < 2) return \"\";\n return `background-image:linear-gradient(${angle}deg, ${pairs.join(\", \")});background-repeat:no-repeat;background-position:${pagePos};background-size:cover;`;\n })();\n const pageBgImgRaw = typeof settings.bgImage === \"string\" ? String(settings.bgImage).trim() : \"\";\n const pageBgImgCss =\n !pageGradCss && pageBgImgRaw\n ? `background-image:url('${pageBgImgRaw.replace(/'/g, \"%27\")}');background-size:${settings.bgSize||\"cover\"};background-repeat:${settings.bgRepeat||\"no-repeat\"};background-position:${pagePos};`\n : \"\";\n const contentPos =\n typeof settings.contentBgPosition === \"string\" && settings.contentBgPosition.trim()\n ? settings.contentBgPosition.trim()\n : \"center\";\n const contentGrad = settings.contentBgGradient && typeof settings.contentBgGradient === \"object\" ? settings.contentBgGradient : null;\n const contentGradCss = (() => {\n if (!contentGrad || typeof contentGrad !== \"object\") return \"\";\n if (!Array.isArray((contentGrad as any).colors) || !Array.isArray((contentGrad as any).stops)) return \"\";\n const colors = (contentGrad as any).colors as any[];\n const stops = (contentGrad as any).stops as any[];\n if (colors.length < 2 || stops.length !== colors.length) return \"\";\n const angle = typeof (contentGrad as any).angle === \"number\" ? (contentGrad as any).angle : 135;\n const pairs = colors\n .map((c, i) => [String(c || \"\").trim(), Number(stops[i])] as const)\n .filter(([c, s]) => c && Number.isFinite(s))\n .map(([c, s]) => `${c} ${Math.max(0, Math.min(100, s))}%`);\n if (pairs.length < 2) return \"\";\n return `background-image:linear-gradient(${angle}deg, ${pairs.join(\", \")});background-repeat:no-repeat;background-position:${contentPos};background-size:cover;`;\n })();\n\n if (contentGradCss) {\n contentShellStyle.push(contentGradCss);\n }\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head><meta charset=\"UTF-8\"/><meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\"/>\n<title>Email</title>${RESPONSIVE_EMAIL_CSS}${css}\n</head>\n<body style=\"margin:0;padding:0;background:${settings.bgColor || \"#f1f5f9\"};${pageGradCss||pageBgImgCss}\">\n<table role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"width:100%;max-width:100%;background-color:${settings.bgColor || \"#f1f5f9\"};${pageGradCss||pageBgImgCss}\">\n<tr><td align=\"center\" style=\"padding:0;max-width:100%;\">\n<table class=\"email-shell-table\" role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"\n style=\"${contentShellStyle.join(\";\")}\">\n<tr><td class=\"email-content-td\" style=\"${[\n `padding:${settings.padding || 24}px`,\n settings.pageFontFamily && `font-family:${settings.pageFontFamily}`,\n settings.pageTextColor && `color:${settings.pageTextColor}`,\n settings.pageFontSize && `font-size:${settings.pageFontSize}`,\n settings.pageFontWeight && `font-weight:${settings.pageFontWeight}`,\n settings.pageLineHeight && `line-height:${settings.pageLineHeight}`,\n ]\n .filter(Boolean)\n .join(\";\")}\">${rows.map(rowToHtml).filter(Boolean).join(\"\\n\")}</td></tr>\n</table></td></tr></table>\n</body></html>`;\n}\n","import { uid } from \"../lib/factories\";\n\nexport type Padding = {\n top?: number;\n right?: number;\n bottom?: number;\n left?: number;\n};\n\nexport type EmailDocumentSettings = {\n width?: number;\n backgroundColor?: string;\n backgroundImage?: string;\n backgroundRepeat?: string;\n backgroundSize?: string;\n backgroundPosition?: string;\n /** 3-stop linear gradient (editor-specific extension). */\n backgroundGradient?: {\n angle?: number;\n colors?: [string, string, string];\n stops?: [number, number, number];\n };\n contentBackgroundColor?: string;\n contentBackgroundImage?: string;\n contentBackgroundRepeat?: string;\n contentBackgroundSize?: string;\n contentBackgroundPosition?: string;\n /** 3-stop linear gradient (editor-specific extension). */\n contentBackgroundGradient?: {\n angle?: number;\n colors?: [string, string, string];\n stops?: [number, number, number];\n };\n fontFamily?: string;\n lineHeightBase?: number;\n color?: string;\n responsive?: boolean;\n rtl?: boolean;\n};\n\nexport type RowLayout = {\n columns?: number;\n gap?: number;\n stackOnMobile?: boolean;\n align?: \"left\" | \"center\" | \"right\";\n};\n\nexport type RowStyles = {\n backgroundColor?: string;\n backgroundImage?: string;\n backgroundRepeat?: string;\n backgroundSize?: string;\n backgroundPosition?: string;\n /** 3-stop linear gradient (editor-specific extension). */\n backgroundGradient?: {\n angle?: number;\n colors?: [string, string, string];\n stops?: [number, number, number];\n };\n padding?: Padding;\n borderRadius?: number;\n borderWidth?: number;\n borderColor?: string;\n textAlign?: \"left\" | \"center\" | \"right\" | \"justify\";\n};\n\nexport type ColumnLayout = {\n width?: string;\n verticalAlign?: \"top\" | \"middle\" | \"bottom\";\n mobileWidth?: string;\n};\n\nexport type ColumnBorderRadius =\n | number\n | {\n tl?: number;\n tr?: number;\n br?: number;\n bl?: number;\n };\n\nexport type ColumnStyles = {\n padding?: Padding;\n backgroundColor?: string;\n backgroundImage?: string;\n backgroundRepeat?: string;\n backgroundSize?: string;\n backgroundPosition?: string;\n /** 3-stop linear gradient (editor-specific extension). */\n backgroundGradient?: {\n angle?: number;\n colors?: [string, string, string];\n stops?: [number, number, number];\n };\n /** Uniform px or per-corner (matches block border radius in the editor). */\n borderRadius?: ColumnBorderRadius;\n};\n\nexport type BlockBase = {\n id?: string;\n type: string;\n content?: Record<string, unknown>;\n styles?: Record<string, unknown>;\n behavior?: Record<string, unknown>;\n responsive?: Record<string, unknown>;\n};\n\nexport type EmailDocumentColumn = {\n id?: string;\n layout?: ColumnLayout;\n styles?: ColumnStyles;\n blocks?: BlockBase[];\n};\n\nexport type EmailDocumentRow = {\n id?: string;\n type?: \"row\";\n layout?: RowLayout;\n styles?: RowStyles;\n columns?: EmailDocumentColumn[];\n};\n\nexport type EmailDocument = {\n type: \"email_document\";\n settings?: EmailDocumentSettings;\n rows?: EmailDocumentRow[];\n globalStyles?: Record<string, unknown>;\n responsive?: Record<string, unknown>;\n};\n\nexport function normalizePadding(p?: unknown): Required<Padding> | undefined {\n if (!p || typeof p !== \"object\" || Array.isArray(p)) return undefined;\n const o = p as Padding;\n const top = typeof o.top === \"number\" ? o.top : 0;\n const right = typeof o.right === \"number\" ? o.right : top;\n const bottom = typeof o.bottom === \"number\" ? o.bottom : top;\n const left = typeof o.left === \"number\" ? o.left : right;\n return { top, right, bottom, left };\n}\n\nexport function paddingToUniform(p?: Padding, fallback = 0): number {\n const n = normalizePadding(p);\n if (!n) return fallback;\n return Math.round((n.top + n.right + n.bottom + n.left) / 4);\n}\n\nexport function ensureId(id: unknown, prefix: string): string {\n return typeof id === \"string\" && id.trim() ? id : `${prefix}_${uid()}`;\n}\n\nexport function normalizeEmailDocument(input: unknown): EmailDocument | null {\n if (input == null || typeof input !== \"object\" || Array.isArray(input)) return null;\n const doc = input as Partial<EmailDocument>;\n if (doc.type !== \"email_document\") return null;\n\n const rows = Array.isArray(doc.rows) ? doc.rows : [];\n return {\n type: \"email_document\",\n settings: (doc.settings && typeof doc.settings === \"object\" && !Array.isArray(doc.settings)) ? doc.settings : {},\n rows: rows.map((r, ri) => {\n const columns = Array.isArray(r.columns) ? r.columns : [];\n const colCount =\n typeof r.layout?.columns === \"number\" && r.layout.columns > 0\n ? Math.floor(r.layout.columns)\n : Math.max(1, columns.length || 1);\n const colsNormalized: EmailDocumentColumn[] =\n columns.length > 0\n ? columns\n : Array.from({ length: colCount }).map(() => ({}));\n\n return {\n id: ensureId(r.id, `row${ri + 1}`),\n type: \"row\",\n layout: {\n columns: colCount,\n gap: typeof r.layout?.gap === \"number\" ? r.layout.gap : 0,\n stackOnMobile: r.layout?.stackOnMobile !== false,\n align: (r.layout?.align as any) || \"center\",\n },\n styles: (r.styles && typeof r.styles === \"object\" && !Array.isArray(r.styles)) ? r.styles : {},\n columns: colsNormalized.map((c, ci) => ({\n id: ensureId(c.id, `col${ri + 1}_${ci + 1}`),\n layout: (c.layout && typeof c.layout === \"object\" && !Array.isArray(c.layout)) ? c.layout : {},\n styles: (c.styles && typeof c.styles === \"object\" && !Array.isArray(c.styles)) ? c.styles : {},\n blocks: Array.isArray(c.blocks) ? c.blocks.map((b, bi) => ({\n ...b,\n id: ensureId(b?.id, `b${ri + 1}_${ci + 1}_${bi + 1}`),\n content: (b?.content && typeof b.content === \"object\" && !Array.isArray(b.content)) ? b.content : {},\n styles: (b?.styles && typeof b.styles === \"object\" && !Array.isArray(b.styles)) ? b.styles : {},\n behavior: (b?.behavior && typeof b.behavior === \"object\" && !Array.isArray(b.behavior)) ? b.behavior : {},\n responsive: (b?.responsive && typeof b.responsive === \"object\" && !Array.isArray(b.responsive)) ? b.responsive : {},\n })) : [],\n })),\n };\n }),\n globalStyles: (doc.globalStyles && typeof doc.globalStyles === \"object\" && !Array.isArray(doc.globalStyles)) ? doc.globalStyles : undefined,\n responsive: (doc.responsive && typeof doc.responsive === \"object\" && !Array.isArray(doc.responsive)) ? doc.responsive : undefined,\n };\n}\n\n","import { uid, makeLayoutRow, makeContentBlock } from \"./factories\";\nimport { designToHtml, type EmailHtmlOptions } from \"./emailHtml\";\nimport { LAYOUT_PRESETS, pickPresetByColCount } from \"../constants\";\nimport { DEFAULT_BLOCK_PROPS, isKnownBlockType, type BlockPropKey } from \"../defaultBlockProps\";\nimport { normalizeRichHtmlForStorage } from \"./htmlUtils\";\nimport {\n normalizeEmailDocument,\n normalizePadding,\n paddingToUniform,\n type EmailDocument,\n type EmailDocumentRow,\n type EmailDocumentColumn,\n type BlockBase,\n} from \"../schema/emailDocument\";\n\n/** Column padding for exported JSON (same shape as block padding). */\nfunction layoutColumnPaddingForDoc(p: unknown): { top: number; right: number; bottom: number; left: number } {\n if (typeof p === \"number\" && Number.isFinite(p)) {\n const n = Math.max(0, p);\n return { top: n, right: n, bottom: n, left: n };\n }\n return normalizePadding(p as any) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n}\n\n/** Column border radius for exported JSON (scalar or per-corner). */\nfunction layoutColumnBorderRadiusForDoc(r: unknown): number | { tl: number; tr: number; br: number; bl: number } {\n if (typeof r === \"number\" && Number.isFinite(r)) return Math.max(0, r);\n if (r && typeof r === \"object\" && !Array.isArray(r)) {\n const o = r as Record<string, number>;\n const tl = typeof o.tl === \"number\" && Number.isFinite(o.tl) ? Math.max(0, o.tl) : 0;\n const tr = typeof o.tr === \"number\" && Number.isFinite(o.tr) ? Math.max(0, o.tr) : tl;\n const br = typeof o.br === \"number\" && Number.isFinite(o.br) ? Math.max(0, o.br) : tl;\n const bl = typeof o.bl === \"number\" && Number.isFinite(o.bl) ? Math.max(0, o.bl) : tr;\n return { tl, tr, br, bl };\n }\n return 0;\n}\n\nfunction columnPaddingNonZero(pad: { top: number; right: number; bottom: number; left: number }) {\n return pad.top !== 0 || pad.right !== 0 || pad.bottom !== 0 || pad.left !== 0;\n}\n\nfunction columnRadiusNonZero(r: unknown) {\n if (typeof r === \"number\") return r !== 0;\n if (r && typeof r === \"object\" && !Array.isArray(r)) {\n const o = r as Record<string, number>;\n return !!(o.tl || o.tr || o.br || o.bl);\n }\n return false;\n}\n\nfunction asNum(v: unknown): number | undefined {\n return typeof v === \"number\" && Number.isFinite(v) ? v : undefined;\n}\n\nfunction asStr(v: unknown): string | undefined {\n return typeof v === \"string\" ? v : undefined;\n}\n\nfunction numOr(v: unknown, fb: number) {\n return typeof v === \"number\" && Number.isFinite(v) ? v : fb;\n}\n\n/** Uniform fallback from default padding (number or box). */\nfunction uniformPadDefault(defPad: unknown): number {\n if (typeof defPad === \"number\" && Number.isFinite(defPad)) return Math.max(0, defPad);\n if (defPad && typeof defPad === \"object\" && !Array.isArray(defPad)) {\n return Math.max(0, numOr((defPad as { top?: number }).top, 0));\n }\n return 0;\n}\n\nfunction boxPad(v: unknown, uniformFallback: number) {\n if (typeof v === \"number\" && Number.isFinite(v)) {\n const n = Math.max(0, v);\n return { top: n, right: n, bottom: n, left: n };\n }\n if (v && typeof v === \"object\" && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const t = numOr(o.top, uniformFallback);\n const r = numOr(o.right, t);\n const b = numOr(o.bottom, t);\n const l = numOr(o.left, r);\n return { top: t, right: r, bottom: b, left: l };\n }\n return { top: uniformFallback, right: uniformFallback, bottom: uniformFallback, left: uniformFallback };\n}\n\nfunction boxMargin(v: unknown) {\n if (v && typeof v === \"object\" && !Array.isArray(v)) {\n const o = v as Record<string, unknown>;\n const t = numOr(o.top, 0);\n const r = numOr(o.right, t);\n const b = numOr(o.bottom, t);\n const l = numOr(o.left, r);\n return { top: t, right: r, bottom: b, left: l };\n }\n return { top: 0, right: 0, bottom: 0, left: 0 };\n}\n\n/** Coerce legacy numeric padding + ensure margin object for all content blocks (not nested `layout`). */\nfunction normalizeBoxStyles(props: any, t: BlockPropKey) {\n if (t === \"layout\") return;\n const def = DEFAULT_BLOCK_PROPS[t] as any;\n props.margin = boxMargin(props.margin ?? def?.margin);\n\n if (t === \"table\") {\n const defPad = uniformPadDefault(def?.padding);\n const defCellRaw = (def as { cellPadding?: unknown })?.cellPadding;\n const defCellUniform =\n typeof defCellRaw === \"number\" && Number.isFinite(defCellRaw)\n ? defCellRaw\n : uniformPadDefault(defCellRaw ?? 10);\n props.cellPadding = boxPad(props.cellPadding, defCellUniform);\n props.padding = boxPad(props.padding, defPad);\n return;\n }\n\n props.padding = boxPad(props.padding, uniformPadDefault(def?.padding));\n}\n\nfunction mapBlockToInternal(b: BlockBase) {\n const t = b.type;\n if (!isKnownBlockType(t)) return null;\n const block = makeContentBlock(t);\n block.id = typeof b.id === \"string\" ? b.id : uid();\n\n const c = (b.content || {}) as any;\n const s = (b.styles || {}) as any;\n const beh = (b.behavior || {}) as any;\n\n switch (t) {\n case \"heading\":\n block.props.content = asStr(c.text) ?? block.props.content;\n block.props.level = asStr(c.tag) ?? block.props.level;\n if (asNum(s.fontSize) != null) block.props.fontSize = s.fontSize;\n if (asNum(s.fontWeight) != null) block.props.bold = s.fontWeight >= 600;\n if (asStr(s.color)) block.props.color = s.color;\n if (asNum(s.lineHeight) != null) block.props.lineHeight = s.lineHeight;\n if (asStr(s.textAlign)) block.props.align = s.textAlign;\n if (asNum(s.letterSpacing) != null) block.props.letterSpacing = s.letterSpacing;\n if (asNum(s.marginBottom) != null) block.props.padding = Math.max(0, Math.round(s.marginBottom));\n break;\n case \"text\":\n block.props.content = asStr(c.html) ?? asStr(c.text) ?? block.props.content;\n if (asNum(s.fontSize) != null) block.props.fontSize = s.fontSize;\n if (asStr(s.color)) block.props.color = s.color;\n if (asNum(s.lineHeight) != null) block.props.lineHeight = s.lineHeight;\n if (asStr(s.textAlign)) block.props.align = s.textAlign;\n if (s.padding && typeof s.padding === \"object\") {\n block.props.padding = paddingToUniform(s.padding as any, block.props.padding);\n }\n break;\n case \"html\":\n block.props.content = asStr(c.html) ?? block.props.content;\n block.props.content = normalizeRichHtmlForStorage(block.props.content);\n if (s.padding && typeof s.padding === \"object\") {\n block.props.padding = paddingToUniform(s.padding as any, block.props.padding);\n }\n break;\n case \"image\":\n block.props.src = asStr(c.src) ?? block.props.src;\n if (asStr(c.alt)) block.props.alt = c.alt;\n if (asStr(c.link)) block.props.link = c.link;\n if (beh.openInNewTab === true) block.props.linkTarget = \"_blank\";\n if (asStr(s.width)) block.props.width = s.width;\n if (asStr(s.align)) block.props.align = s.align;\n if (asNum(s.borderRadius) != null) block.props.borderRadius = s.borderRadius;\n break;\n case \"button\":\n block.props.label = asStr(c.text) ?? block.props.label;\n block.props.href = asStr(c.href) ?? block.props.href;\n if (beh.openInNewTab === true) block.props.linkTarget = \"_blank\";\n if (asStr(s.backgroundColor)) block.props.bgColor = s.backgroundColor;\n if (asStr(s.color)) block.props.textColor = s.color;\n if (asNum(s.fontSize) != null) block.props.fontSize = s.fontSize;\n if (asNum(s.fontWeight) != null) block.props.fontWeight = s.fontWeight;\n if (asNum(s.borderRadius) != null) block.props.borderRadius = s.borderRadius;\n if (s.padding && typeof s.padding === \"object\") {\n const pad = s.padding as any;\n block.props.paddingV = asNum(pad.top) ?? block.props.paddingV;\n block.props.paddingH = asNum(pad.right) ?? block.props.paddingH;\n }\n if (asStr(s.textAlign)) block.props.align = s.textAlign;\n break;\n case \"divider\":\n if (asStr(s.color)) block.props.color = s.color;\n if (asNum(s.thickness) != null) block.props.thickness = s.thickness;\n if (asNum(s.paddingY) != null) block.props.padding = s.paddingY;\n break;\n case \"spacer\":\n if (asNum(s.height) != null) block.props.height = s.height;\n break;\n case \"social\": {\n const networksObj = c.networks && typeof c.networks === \"object\" ? c.networks : {};\n const keys = Object.keys(networksObj || {});\n if (keys.length) {\n block.props.networks = keys;\n block.props.socialUrls = networksObj;\n }\n if (asNum(s.iconSize) != null) block.props.iconSize = s.iconSize;\n if (asNum(s.gap) != null) block.props.gap = s.gap;\n if (asStr(s.shape)) block.props.shape = s.shape;\n if (asStr(s.align)) block.props.align = s.align;\n break;\n }\n case \"table\":\n if (Array.isArray(c.data)) block.props.data = c.data;\n if (asStr(s.borderColor)) block.props.cellBorder = s.borderColor;\n if (s.cellPadding != null) {\n if (typeof s.cellPadding === \"number\" && Number.isFinite(s.cellPadding)) {\n block.props.cellPadding = s.cellPadding;\n } else if (s.cellPadding && typeof s.cellPadding === \"object\" && !Array.isArray(s.cellPadding)) {\n block.props.cellPadding = s.cellPadding as typeof block.props.cellPadding;\n }\n }\n if (asStr(s.headerBg)) block.props.headerBg = s.headerBg;\n if (s.striped === true || s.striped === false) block.props.striped = !!s.striped;\n break;\n case \"video\":\n block.props.src = asStr(c.url) ?? block.props.src;\n if (asNum(s.height) != null) block.props.height = s.height;\n break;\n case \"timer\":\n block.props.endDate = asStr(c.endDate) ?? block.props.endDate;\n if (asStr(s.backgroundColor)) block.props.bgColor = s.backgroundColor;\n if (asStr(s.color)) block.props.textColor = s.color;\n if (asNum(s.padding) != null) block.props.padding = s.padding;\n if (asNum(s.borderRadius) != null) block.props.borderRadius = s.borderRadius;\n if (asStr(s.textAlign)) block.props.align = s.textAlign;\n break;\n case \"menu\":\n if (Array.isArray(c.items)) block.props.items = c.items;\n if (asNum(s.fontSize) != null) block.props.fontSize = s.fontSize;\n if (asStr(s.color)) block.props.color = s.color;\n break;\n case \"link\":\n block.props.label = asStr(c.text) ?? block.props.label;\n block.props.href = asStr(c.href) ?? block.props.href;\n if (beh.openInNewTab === true) block.props.linkTarget = \"_blank\";\n if (asStr(s.color)) block.props.color = s.color;\n if (asNum(s.fontSize) != null) block.props.fontSize = s.fontSize;\n if (asStr(s.textAlign)) block.props.align = s.textAlign;\n break;\n case \"layout\":\n // Nested layout blocks are supported via internal `layout` block props.cells.\n // The new schema can represent this later; for now we keep defaults/hydration.\n break;\n default:\n break;\n }\n\n return block;\n}\n\nfunction rowToInternal(r: EmailDocumentRow) {\n const cols = Math.max(1, r.layout?.columns || r.columns?.length || 1);\n const preset = pickPresetByColCount(cols) || LAYOUT_PRESETS[0];\n const row: any = makeLayoutRow(preset);\n row.id = typeof r.id === \"string\" ? r.id : uid();\n row.cols = cols;\n row.gap = typeof r.layout?.gap === \"number\" ? r.layout.gap : row.gap;\n row.padding = paddingToUniform(r.styles?.padding, row.padding);\n row.bgColor = (r.styles?.backgroundColor || \"\").trim();\n row.bgImage = (r.styles?.backgroundImage || \"\").trim();\n row.bgRepeat = (r.styles?.backgroundRepeat || row.bgRepeat) as any;\n row.bgSize = (r.styles?.backgroundSize || row.bgSize) as any;\n row.bgPosition = (r.styles as any)?.backgroundPosition || row.bgPosition || \"center\";\n row.bgGradient = (r.styles as any)?.backgroundGradient || row.bgGradient || null;\n\n const columns: EmailDocumentColumn[] = Array.isArray(r.columns) ? r.columns : [];\n const colList: EmailDocumentColumn[] = columns.length\n ? columns\n : Array.from({ length: cols }).map(() => ({} as EmailDocumentColumn));\n\n row.cells = colList.slice(0, cols).map((c) => {\n const blocks = Array.isArray(c.blocks) ? c.blocks : [];\n return blocks.map(mapBlockToInternal).filter((x) => x != null);\n });\n\n const columnStyles: any = {};\n colList.slice(0, cols).forEach((c, i) => {\n const bgColor = typeof c.styles?.backgroundColor === \"string\" ? c.styles.backgroundColor : \"\";\n const padding = layoutColumnPaddingForDoc(c.styles?.padding);\n const borderRadius = layoutColumnBorderRadiusForDoc(c.styles?.borderRadius);\n const bgImage = typeof (c.styles as any)?.backgroundImage === \"string\" ? String((c.styles as any).backgroundImage).trim() : \"\";\n const bgRepeat = typeof (c.styles as any)?.backgroundRepeat === \"string\" ? (c.styles as any).backgroundRepeat : undefined;\n const bgSize = typeof (c.styles as any)?.backgroundSize === \"string\" ? (c.styles as any).backgroundSize : undefined;\n const bgPosition = typeof (c.styles as any)?.backgroundPosition === \"string\" ? (c.styles as any).backgroundPosition : undefined;\n const bgGradient = (c.styles as any)?.backgroundGradient || null;\n const hasPad = columnPaddingNonZero(padding);\n const hasBr = columnRadiusNonZero(borderRadius);\n if (bgColor || hasPad || hasBr || bgImage || bgRepeat || bgSize || bgPosition || bgGradient) {\n columnStyles[i] = { bgColor, padding, borderRadius, bgImage, bgRepeat, bgSize, bgPosition, bgGradient };\n }\n });\n if (Object.keys(columnStyles).length) row.columnStyles = columnStyles;\n\n return row;\n}\n\nexport function normalizeEmailDesignInput(input: unknown) {\n const doc = normalizeEmailDocument(input);\n if (!doc) return null;\n const s = doc.settings || {};\n const settings: Record<string, unknown> = {\n bgColor: s.backgroundColor || \"#f1f5f9\",\n bgImage: (s as any).backgroundImage || \"\",\n bgRepeat: (s as any).backgroundRepeat || \"no-repeat\",\n bgSize: (s as any).backgroundSize || \"cover\",\n bgPosition: (s as any).backgroundPosition || \"center\",\n bgGradient: (s as any).backgroundGradient || null,\n contentBg: s.contentBackgroundColor || \"#ffffff\",\n contentBgImage: (s as any).contentBackgroundImage || \"\",\n contentBgRepeat: (s as any).contentBackgroundRepeat || \"no-repeat\",\n contentBgSize: (s as any).contentBackgroundSize || \"cover\",\n contentBgPosition: (s as any).contentBackgroundPosition || \"center\",\n contentBgGradient: (s as any).contentBackgroundGradient || null,\n contentWidth: typeof s.width === \"number\" ? s.width : 600,\n padding: 24,\n borderRadius: 8,\n pageFontFamily: s.fontFamily,\n pageTextColor: s.color,\n pageLineHeight: s.lineHeightBase != null ? String(s.lineHeightBase) : undefined,\n pageResponsive: s.responsive,\n pageRtl: s.rtl,\n fontFamily: s.fontFamily,\n };\n const rows = (doc.rows || []).map(rowToInternal);\n return withHydratedRows({ rows, settings, __emailDocument: doc } as any);\n}\n\nexport function designToEmailDocument(rows: any[], settings: any): EmailDocument {\n const doc: EmailDocument = {\n type: \"email_document\",\n settings: {\n width: settings.contentWidth || 600,\n backgroundColor: settings.bgColor || \"#f1f5f9\",\n backgroundImage: settings.bgImage || \"\",\n backgroundRepeat: settings.bgRepeat || \"no-repeat\",\n backgroundSize: settings.bgSize || \"cover\",\n backgroundPosition: settings.bgPosition || \"center\",\n backgroundGradient: settings.bgGradient || null,\n contentBackgroundColor: settings.contentBg || \"#ffffff\",\n contentBackgroundImage: settings.contentBgImage || \"\",\n contentBackgroundRepeat: settings.contentBgRepeat || \"no-repeat\",\n contentBackgroundSize: settings.contentBgSize || \"cover\",\n contentBackgroundPosition: settings.contentBgPosition || \"center\",\n contentBackgroundGradient: settings.contentBgGradient || null,\n fontFamily: settings.fontFamily || settings.pageFontFamily || \"Arial, Helvetica, sans-serif\",\n lineHeightBase: settings.pageLineHeight ? Number(settings.pageLineHeight) : 1.6,\n color: settings.pageTextColor || \"#111827\",\n responsive: true,\n rtl: false,\n },\n rows: rows.map((r, ri) => {\n const cols = Math.max(1, r.cols || r.cells?.length || 1);\n return {\n id: r.id || `row_${ri + 1}`,\n type: \"row\",\n layout: {\n columns: cols,\n gap: r.gap ?? 0,\n stackOnMobile: true,\n align: \"center\",\n },\n styles: {\n backgroundColor: r.bgColor || \"\",\n backgroundImage: r.bgImage || \"\",\n backgroundRepeat: r.bgRepeat || \"no-repeat\",\n backgroundSize: r.bgSize || \"cover\",\n backgroundPosition: (r as any).bgPosition || \"center\",\n backgroundGradient: (r as any).bgGradient || null,\n padding: { top: r.padding ?? 0, right: r.padding ?? 0, bottom: r.padding ?? 0, left: r.padding ?? 0 },\n borderRadius: 0,\n borderWidth: 0,\n borderColor: \"#e5e7eb\",\n textAlign: \"left\",\n },\n columns: (r.cells || []).slice(0, cols).map((cellBlocks: any[], ci: number) => {\n const cs = (r.columnStyles && r.columnStyles[ci]) || {};\n return {\n id: `col_${ri + 1}_${ci + 1}`,\n layout: { width: \"100%\", verticalAlign: \"top\", mobileWidth: \"100%\" },\n styles: {\n padding: layoutColumnPaddingForDoc(cs.padding),\n backgroundColor: cs.bgColor || \"\",\n backgroundImage: cs.bgImage || \"\",\n backgroundRepeat: cs.bgRepeat || \"no-repeat\",\n backgroundSize: cs.bgSize || \"cover\",\n backgroundPosition: cs.bgPosition || \"center\",\n backgroundGradient: cs.bgGradient || null,\n borderRadius: layoutColumnBorderRadiusForDoc(cs.borderRadius) as any,\n },\n blocks: (cellBlocks || []).map((b: any) => ({\n id: b.id,\n type: b.type,\n content: b.props,\n styles: {},\n })),\n };\n }),\n } as any;\n }),\n };\n return doc;\n}\n\n/**\n * Deep-merge block props with defaults and ensure ids. Unknown `type` values are dropped (not shown).\n */\nfunction hydrateBlock(b) {\n if (!b || typeof b !== \"object\") return null;\n const t = b.type === \"nestedRow\" ? \"layout\" : b.type;\n if (!isKnownBlockType(t)) return null;\n\n if (t === \"layout\" && b.props && Array.isArray(b.props.cells)) {\n const defaults = DEFAULT_BLOCK_PROPS.layout;\n const cells = b.props.cells.map((col) =>\n Array.isArray(col) ? col.map(hydrateBlock).filter((x) => x != null) : [],\n );\n return {\n ...b,\n type: \"layout\",\n id: typeof b.id === \"string\" && b.id ? b.id : uid(),\n props: {\n ...defaults,\n ...b.props,\n bgSize: b.props.bgSize ?? defaults.bgSize,\n bgRepeat: b.props.bgRepeat ?? defaults.bgRepeat,\n cells,\n },\n };\n }\n\n const defaults = DEFAULT_BLOCK_PROPS[t];\n if (typeof defaults !== \"object\" || defaults == null || Array.isArray(defaults)) return null;\n\n const merged =\n t === \"html\"\n ? {\n ...defaults,\n ...(b.props && typeof b.props === \"object\" ? b.props : {}),\n content: normalizeRichHtmlForStorage(\n b.props && typeof b.props === \"object\" ? b.props.content : undefined,\n ),\n }\n : { ...defaults, ...(b.props && typeof b.props === \"object\" ? b.props : {}) };\n\n normalizeBoxStyles(merged, t);\n\n return {\n ...b,\n id: typeof b.id === \"string\" && b.id ? b.id : uid(),\n props: merged,\n };\n}\n\nfunction hydrateLayoutRow(row) {\n if (!row || typeof row !== \"object\") return row;\n const cells = (row.cells || []).map((col) =>\n Array.isArray(col) ? col.map(hydrateBlock).filter((x) => x != null) : col,\n );\n return {\n ...row,\n id: typeof row.id === \"string\" && row.id ? row.id : uid(),\n gap: row.gap ?? 12,\n padding: row.padding !== undefined && row.padding !== null ? row.padding : 8,\n bgSize: row.bgSize ?? \"cover\",\n bgRepeat: row.bgRepeat ?? \"no-repeat\",\n cells,\n };\n}\n\nfunction hydrateDesignRows(rows) {\n if (!Array.isArray(rows)) return rows;\n return rows.map(hydrateLayoutRow);\n}\n\nfunction withHydratedRows(result) {\n if (!result || !Array.isArray(result.rows)) return result;\n return {\n ...result,\n rows: hydrateDesignRows(result.rows),\n };\n}\n\n// Note: `normalizeEmailDesignInput` is defined above for the new `email_document` schema.\n\n/** Re-export for consumers typing `jsonToHtml` options. */\nexport type JsonToHtmlOptions = EmailHtmlOptions;\n\n/**\n * Design object or JSON string → full HTML email document (preview / send).\n * Strings are parsed with `JSON.parse` then normalized; invalid JSON returns `\"\"`.\n */\nexport function jsonToHtml(designInput: unknown, opts: JsonToHtmlOptions = {}): string {\n let raw = designInput;\n if (typeof raw === \"string\") {\n const t = raw.trim();\n if (!t) return \"\";\n try {\n raw = JSON.parse(t);\n } catch {\n return \"\";\n }\n }\n const d = normalizeEmailDesignInput(raw);\n if (!d?.rows?.length) return \"\";\n return designToHtml(d.rows, d.settings, opts);\n}\n","import { useState, useRef, useCallback, useEffect, Fragment, type CSSProperties, type FC } from \"react\";\nimport { SocialGlyph } from \"../../socialIcons\";\nimport { SC } from \"../../constants\";\nimport { videoUrlToEmbedSrc } from \"../../lib/htmlUtils\";\nimport { isSplitLayoutBlock } from \"../../lib/columnPath\";\nimport { isEffectivelyEmptyRichHtml } from \"../../lib/htmlUtils\";\nimport { backdropLayerStyle, backgroundLayerStyle } from \"../../lib/blockBackground\";\n\nfunction useLiveCountdown(endDate: string) {\n const [diff, setDiff] = useState(0);\n useEffect(() => {\n const update = () => setDiff(Math.max(0, new Date(endDate).getTime() - Date.now()));\n update();\n const id = setInterval(update, 1000);\n return () => clearInterval(id);\n }, [endDate]);\n const d = Math.floor(diff / 86400000);\n const h = Math.floor((diff % 86400000) / 3600000);\n const m = Math.floor((diff % 3600000) / 60000);\n const s = Math.floor((diff % 60000) / 1000);\n return [d, h, m, s] as const;\n}\n\n/** Light dotted border so layout / columns / blocks read clearly in edit mode (not in preview). */\nfunction editChromeBorder(C: { border: string }, preview: boolean): CSSProperties {\n if (preview) return {};\n return { border: `1px dotted ${C.border}`, boxSizing: \"border-box\" };\n}\n\n/** Stop in-canvas navigation for `<a href>` in edit mode (rich text + button/link/image/menu/social). */\nfunction blockLinkCaptureHandler(preview, e) {\n if (preview) return;\n const t = e.target;\n if (!(t instanceof Element)) return;\n if (t.closest(\"a[href]\")) e.preventDefault();\n}\n\nconst numOrLayout = (v: unknown, fb: number) => (typeof v === \"number\" && Number.isFinite(v) ? v : fb);\nfunction boxPxLayout(v: any) {\n const top = numOrLayout(v?.top, 0);\n const right = numOrLayout(v?.right, top);\n const bottom = numOrLayout(v?.bottom, top);\n const left = numOrLayout(v?.left, right);\n return `${top}px ${right}px ${bottom}px ${left}px`;\n}\n/** Padding for layout columns (number or same box shape as block padding). */\nfunction paddingCssLayout(v: any) {\n if (typeof v === \"number\") return `${numOrLayout(v, 0)}px`;\n if (v && typeof v === \"object\" && !Array.isArray(v)) return boxPxLayout(v);\n return \"0px\";\n}\n/** Border radius for layout columns (number or per-corner like blocks). */\nfunction radiusCssLayout(v: any) {\n if (typeof v === \"number\") return `${numOrLayout(v, 0)}px`;\n if (v && typeof v === \"object\" && !Array.isArray(v)) {\n const tl = numOrLayout(v.tl, 0);\n const tr = numOrLayout(v.tr, tl);\n const br = numOrLayout(v.br, tl);\n const bl = numOrLayout(v.bl, tr);\n return `${tl}px ${tr}px ${br}px ${bl}px`;\n }\n return \"0px\";\n}\n\nfunction ContentBlock({ block, selected, onClick, preview, C }) {\n const { type, props:p } = block;\n\n const numOr = (v: unknown, fb: number) => (typeof v === \"number\" && Number.isFinite(v) ? v : fb);\n const boxPx = (v: any) => {\n const top = numOr(v?.top, 0);\n const right = numOr(v?.right, top);\n const bottom = numOr(v?.bottom, top);\n const left = numOr(v?.left, right);\n return `${top}px ${right}px ${bottom}px ${left}px`;\n };\n const paddingCss = (v: any) => {\n if (typeof v === \"number\") return `${numOr(v, 0)}px`;\n if (v && typeof v === \"object\" && !Array.isArray(v)) return boxPx(v);\n return \"0px\";\n };\n const marginCss = (v: any) => {\n if (!v || typeof v !== \"object\" || Array.isArray(v)) return \"0px\";\n return boxPx(v);\n };\n const radiusCss = (v: any) => {\n if (typeof v === \"number\") return `${numOr(v, 0)}px`;\n if (v && typeof v === \"object\" && !Array.isArray(v)) {\n const tl = numOr(v.tl, 0);\n const tr = numOr(v.tr, tl);\n const br = numOr(v.br, tl);\n const bl = numOr(v.bl, tr);\n return `${tl}px ${tr}px ${br}px ${bl}px`;\n }\n return \"0px\";\n };\n\n const shellBg =\n type === \"button\" || type === \"timer\"\n ? backdropLayerStyle(p)\n : backgroundLayerStyle({\n bgColor: p.bgColor,\n bgImage: p.bgImage,\n bgSize: p.bgSize,\n bgRepeat: p.bgRepeat,\n bgPosition: p.bgPosition,\n bgGradient: p.bgGradient,\n });\n\n const wrap = (children) => (\n <div\n onClick={preview ? undefined : (onClick || undefined)}\n onClickCapture={(e) => blockLinkCaptureHandler(preview, e)}\n onAuxClickCapture={(e) => blockLinkCaptureHandler(preview, e)}\n style={{\n cursor: preview ? \"default\" : onClick ? \"pointer\" : \"default\",\n outline: selected && !preview ? `2px solid ${C.accent}` : \"2px solid transparent\",\n outlineOffset: 1,\n borderRadius: 3,\n transition: \"outline .12s\",\n position: \"relative\",\n ...editChromeBorder(C, preview),\n ...shellBg,\n padding: paddingCss(p.padding),\n margin: marginCss(p.margin),\n }}\n >\n {children}\n </div>\n );\n\n if (type===\"heading\") return wrap(\n <div style={{fontSize:p.fontSize,color:p.color,textAlign:p.align,fontWeight:(p.fontWeight|| (p.bold?700:400)) as any,letterSpacing:`${p.letterSpacing||0}px`,lineHeight:p.lineHeight||1.2,fontFamily:p.fontFamily||\"Georgia,serif\"}}\n dangerouslySetInnerHTML={{__html:`<${p.level||\"h2\"} style=\"margin:0\">${p.content}</${p.level||\"h2\"}`}}/>\n );\n if (type===\"text\") return wrap(\n <div style={{fontSize:p.fontSize,color:p.color,textAlign:p.align,fontWeight:(p.fontWeight|| (p.bold?700:400)) as any,fontStyle:p.italic?\"italic\":\"normal\",textDecoration:p.underline?\"underline\":\"none\",lineHeight:p.lineHeight||1.65,letterSpacing:`${p.letterSpacing||0}px`,fontFamily:p.fontFamily||\"Georgia,serif\"}}\n dangerouslySetInnerHTML={{__html:p.content}}/>\n );\n if (type===\"html\") {\n const emptyRich = isEffectivelyEmptyRichHtml(p.content);\n return wrap(\n <div style={{ position: \"relative\", minHeight: emptyRich && !preview ? \"2.75em\" : undefined }}>\n <div\n className=\"email-editor-rich-canvas\"\n style={{\n fontSize: p.fontSize,\n color: p.color,\n textAlign: p.align,\n lineHeight: p.lineHeight || 1.65,\n letterSpacing: `${p.letterSpacing || 0}px`,\n fontFamily: p.fontFamily || \"Georgia,serif\",\n wordBreak: \"break-word\",\n minHeight: emptyRich && !preview ? \"2.75em\" : undefined,\n }}\n dangerouslySetInnerHTML={{ __html: p.content || \"<p></p>\" }}\n />\n {emptyRich && !preview ? (\n <span\n aria-hidden\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"flex-start\",\n fontSize: p.fontSize,\n lineHeight: p.lineHeight || 1.65,\n letterSpacing: `${p.letterSpacing || 0}px`,\n fontFamily: p.fontFamily || \"Georgia,serif\",\n textAlign: (p.align as CSSProperties[\"textAlign\"]) || \"left\",\n color: C.muted,\n fontStyle: \"italic\",\n pointerEvents: \"none\",\n paddingTop: 2,\n zIndex: 1,\n }}\n >\n Empty rich text — edit in the sidebar\n </span>\n ) : null}\n </div>\n );\n }\n if (type===\"image\") {\n const img = (\n <img\n src={p.src}\n alt={p.alt||\"\"}\n style={{\n maxWidth: p.width || \"100%\",\n width: p.width && p.width !== \"100%\" ? p.width : undefined,\n height: \"auto\",\n display: \"block\",\n marginLeft: p.align === \"center\" ? \"auto\" : undefined,\n marginRight: p.align === \"center\" ? \"auto\" : undefined,\n borderRadius: radiusCss(p.borderRadius),\n objectFit: p.objectFit || \"cover\",\n objectPosition: p.objectPosition || \"center\",\n }}\n />\n );\n return wrap(<div style={{textAlign:p.align}}>{p.link?<a href={p.link} target={p.linkTarget||\"_blank\"} rel=\"noopener\">{img}</a>:img}</div>);\n }\n if (type===\"button\") return wrap(\n <div style={{textAlign:p.fullWidth?\"center\":p.align}}>\n <a href={p.href} target={p.linkTarget||\"_blank\"} rel=\"noopener\"\n style={{display:p.fullWidth?\"block\":\"inline-block\",backgroundColor:p.bgColor,color:p.textColor,borderRadius:radiusCss(p.borderRadius),padding:`${p.paddingV||11}px ${p.paddingH||24}px`,textDecoration:\"none\",fontSize:p.fontSize,fontWeight:p.fontWeight||600,fontFamily:\"sans-serif\",border:`${p.borderWidth||0}px solid ${p.borderColor||\"transparent\"}`,width:p.fullWidth?\"100%\":undefined,textAlign:\"center\",boxSizing:\"border-box\"}}>\n {p.label}\n </a>\n </div>\n );\n if (type===\"link\") return wrap(\n <div style={{textAlign:p.align}}>\n <a href={p.href} target={p.linkTarget||\"_blank\"} rel=\"noopener noreferrer\"\n style={{color:p.color,fontSize:p.fontSize,fontWeight:(p.fontWeight|| (p.bold?700:400)) as any,textDecoration:p.underline?\"underline\":\"none\",fontFamily:p.fontFamily||\"Arial, Helvetica, sans-serif\"}}>\n {p.label}\n </a>\n </div>\n );\n if (type===\"divider\") return wrap(<hr style={{border:\"none\",borderTop:`${p.thickness}px ${p.style||\"solid\"} ${p.color}`,margin:0}}/>);\n if (type===\"spacer\") return wrap(<div style={{height:p.height,background:selected&&!preview?\"rgba(99,102,241,.05)\":\"transparent\"}}/>);\n if (type===\"social\") {\n const urls = p.socialUrls || {};\n return wrap(\n <div style={{textAlign:p.align}}>\n {(p.networks||[]).map(n=>{\n const href = (urls[n] && String(urls[n]).trim()) || \"#\";\n const glyphPx = Math.round((p.iconSize || 24) * 0.56);\n const inner = (\n <span style={{display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",width:p.iconSize,height:p.iconSize,borderRadius:p.shape===\"square\"?\"4px\":\"50%\",background:SC[n]||\"#64748b\",color:n===\"snapchat\"?\"#000\":\"#fff\"}}>\n <SocialGlyph network={n} size={glyphPx} />\n </span>\n );\n return href === \"#\" ? (\n <span key={n} title={n} style={{display:\"inline-flex\",margin:`0 ${p.gap||4}px`,cursor:\"default\"}}>{inner}</span>\n ) : (\n <a key={n} href={href} title={n} target=\"_blank\" rel=\"noopener noreferrer\" style={{display:\"inline-flex\",margin:`0 ${p.gap||4}px`,textDecoration:\"none\"}}>\n {inner}\n </a>\n );\n })}\n </div>\n );\n }\n if (type===\"video\") {\n const embedSrc = videoUrlToEmbedSrc(p.src);\n return wrap(\n <div style={{textAlign:\"center\"}}>\n {embedSrc ? (\n <iframe src={embedSrc} width=\"100%\" height={p.height} frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen style={{maxWidth:\"100%\",borderRadius:5,display:\"block\"}} title=\"video\"/>\n ) : (\n <div style={{width:\"100%\",height:p.height,background:\"#f4f8ff\",borderRadius:5,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexDirection:\"column\",gap:8,border:\"2px dashed #d0dff0\"}}>\n <span style={{fontSize:32}}>▶</span>\n <span style={{fontSize:12,color:\"#5a7a9a\"}}>Paste a YouTube or Vimeo URL</span>\n </div>\n )}\n </div>\n );\n }\n if (type===\"menu\") return wrap(\n <nav style={{textAlign:p.align}}>\n {(p.items||[]).map((item,i)=>(\n <a key={i} href={item.href} style={{fontSize:p.fontSize,color:p.color,margin:`0 ${p.gap||10}px`,textDecoration:\"none\",fontFamily:\"sans-serif\",fontWeight:600}}>{item.label}</a>\n ))}\n </nav>\n );\n if (type===\"timer\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [d,h,m,s] = useLiveCountdown(p.endDate);\n return wrap(\n <div style={{textAlign:p.align}}>\n {p.label&&<div style={{fontSize:12,color:\"#64748b\",marginBottom:6,fontFamily:\"sans-serif\"}}>{p.label}</div>}\n <div style={{display:\"inline-flex\",gap:6}}>\n {[[d,\"Days\"],[h,\"Hrs\"],[m,\"Min\"],[s,\"Sec\"]].map(([val,lbl])=>(\n <div key={lbl} style={{background:p.bgColor,color:p.textColor,borderRadius:p.borderRadius,padding:\"8px 14px\",fontFamily:\"monospace\",fontWeight:700,fontSize:20,minWidth:52,textAlign:\"center\",lineHeight:1}}>\n <div>{String(val).padStart(2,\"0\")}</div>\n {p.showLabels&&<div style={{fontSize:9,opacity:.75,letterSpacing:\".08em\",marginTop:3}}>{String(lbl).toUpperCase()}</div>}\n </div>\n ))}\n </div>\n </div>\n );\n }\n if (type===\"table\") {\n const data = p.data || [];\n const role = p.tableRole === \"presentation\" ? \"presentation\" : \"table\";\n const cellPaddingStyle = (() => {\n const cp = p.cellPadding;\n if (cp && typeof cp === \"object\" && !Array.isArray(cp)) {\n return boxPx(cp);\n }\n const cellPadPx =\n typeof cp === \"number\" && Number.isFinite(cp)\n ? cp\n : typeof p.padding === \"number\" && Number.isFinite(p.padding)\n ? p.padding\n : numOr((p.padding as { top?: number })?.top, 8);\n return cellPadPx;\n })();\n return wrap(\n <div style={{overflowX:\"auto\"}}>\n <table\n role={role}\n style={{width:\"100%\",borderCollapse:\"collapse\",fontSize:p.fontSize||13,fontFamily:p.fontFamily||\"sans-serif\",tableLayout:\"fixed\"}}\n >\n <tbody>\n {data.map((row, ri) => {\n const isHeaderRow = !!p.header && ri === 0;\n const isStriped =\n p.striped &&\n (p.header ? ri > 1 && ri % 2 === 0 : ri > 0 && ri % 2 === 1);\n return (\n <tr key={ri}>\n {row.map((cell, ci) => {\n const CellTag = isHeaderRow ? \"th\" : \"td\";\n return (\n <CellTag\n key={ci}\n scope={isHeaderRow ? \"col\" : undefined}\n style={{\n padding: typeof cellPaddingStyle === \"string\" ? cellPaddingStyle : `${cellPaddingStyle}px`,\n background: isHeaderRow ? (p.headerBg||\"#1a5fbe\") : isStriped ? (p.stripedBg||\"#f4f8ff\") : (p.cellBg||\"#ffffff\"),\n color: isHeaderRow ? (p.headerColor||\"#ffffff\") : \"inherit\",\n border:`1px solid ${p.cellBorder||\"#d0dff0\"}`,\n fontWeight: isHeaderRow ? 700 : 400,\n textAlign:\"left\",\n wordBreak:\"break-word\",\n }}\n >\n {cell}\n </CellTag>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n }\n return null;\n}\n\n// ─── NESTED LAYOUT (columns inside a column) ─────────────────────────────────\nfunction NestedRowBlock({\n block,\n rowId,\n cellIdx,\n parentBlockIdx,\n editorId,\n selectedKey,\n selContentMeta,\n onSelectContent,\n onDropContent,\n onDeleteContent,\n onContextMenu,\n preview,\n C,\n}) {\n const p = block.props;\n const rowSelected =\n !preview &&\n selContentMeta &&\n selContentMeta.rowId === rowId &&\n selContentMeta.cellIdx === cellIdx &&\n selContentMeta.contentIdx === parentBlockIdx &&\n !selContentMeta.inner &&\n selectedKey === block.id;\n const rowStyle: CSSProperties = {\n padding: p.padding ?? 8,\n position: \"relative\",\n borderRadius: 4,\n outline: rowSelected ? `2px solid ${C.accent}` : \"2px solid transparent\",\n outlineOffset: 1,\n transition: \"outline .12s\",\n ...editChromeBorder(C, preview),\n ...backgroundLayerStyle({\n bgColor: p.bgColor,\n bgImage: p.bgImage,\n bgSize: p.bgSize,\n bgRepeat: p.bgRepeat,\n bgPosition: p.bgPosition,\n bgGradient: p.bgGradient,\n }),\n };\n return (\n <div\n style={rowStyle}\n onClick={\n preview\n ? undefined\n : (e) => {\n e.stopPropagation();\n onSelectContent(block.id, rowId, cellIdx, parentBlockIdx, null);\n }\n }\n >\n <div style={{ display: \"flex\", gap: p.gap ?? 12 }}>\n {(p.cells || []).map((innerBlocks, ici) => {\n const cS = (p.columnStyles && p.columnStyles[ici]) || {};\n return (\n <div\n key={ici}\n style={{\n flex: p.ratios?.[ici] ?? 1,\n minWidth: 0,\n ...editChromeBorder(C, preview),\n ...backgroundLayerStyle(cS),\n padding: paddingCssLayout(cS.padding),\n borderRadius: radiusCssLayout(cS.borderRadius),\n position: \"relative\",\n }}\n >\n <Cell\n editorId={editorId}\n rowId={rowId}\n cellIdx={cellIdx}\n nest={{ parentBlockIdx }}\n innerCellIdx={ici}\n blocks={innerBlocks}\n selectedKey={selectedKey}\n selContentMeta={selContentMeta}\n onSelectContent={onSelectContent}\n onDropContent={onDropContent}\n onDeleteContent={onDeleteContent}\n onContextMenu={onContextMenu}\n preview={preview}\n C={C}\n />\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ─── BLOCK ITEM — pointer-down selects; drag block surface to reorder / move ──\nfunction BlockItem({\n editorId,\n cb,\n ci,\n rowId,\n cellIdx,\n nest,\n innerCellIdx = 0,\n selectedKey,\n selContentMeta,\n onSelectContent,\n onDropContent,\n onDeleteContent,\n onContextMenu,\n preview,\n C,\n Line,\n}) {\n const wrapperRef = useRef(null);\n const bid = editorId ? `${editorId}-block-${cb.id}` : undefined;\n\n const selectThisBlock = (e) => {\n if (!onSelectContent) return;\n e.stopPropagation();\n if (isSplitLayoutBlock(cb)) {\n onSelectContent(cb.id, rowId, cellIdx, nest ? nest.parentBlockIdx : ci, null);\n } else {\n onSelectContent(\n cb.id,\n rowId,\n cellIdx,\n nest ? nest.parentBlockIdx : ci,\n nest ? { cellIdx: innerCellIdx, contentIdx: ci } : null,\n );\n }\n };\n\n return (\n <div\n id={bid}\n ref={wrapperRef}\n style={{ position:\"relative\" }}\n onContextMenu={e => {\n e.preventDefault();\n e.stopPropagation();\n onContextMenu && onContextMenu(\n e,\n rowId,\n cellIdx,\n ci,\n nest ? { parentBlockIdx: nest.parentBlockIdx, cellIdx: innerCellIdx, contentIdx: ci } : null,\n );\n }}\n >\n <div\n data-bidx={ci}\n draggable={!preview}\n title={preview ? undefined : \"Click to select · drag to reorder or move\"}\n onPointerDown={(e) => {\n if (preview || e.button !== 0) return;\n selectThisBlock(e);\n }}\n onDragStart={(e) => {\n if (preview) return;\n e.stopPropagation();\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\n \"application/json\",\n JSON.stringify({\n moveContent: {\n fromRow: rowId,\n fromCell: cellIdx,\n fromIdx: ci,\n fromNested: nest ? { parentBlockIdx: nest.parentBlockIdx, innerCellIdx } : undefined,\n },\n }),\n );\n }}\n onClick={(e) => e.stopPropagation()}\n style={{\n position: \"relative\",\n width: \"100%\",\n minWidth: 0,\n cursor: preview ? \"default\" : \"grab\",\n paddingLeft: 0,\n boxSizing: \"border-box\",\n }}\n >\n {isSplitLayoutBlock(cb) ? (\n <NestedRowBlock\n block={cb}\n rowId={rowId}\n cellIdx={cellIdx}\n parentBlockIdx={nest ? nest.parentBlockIdx : ci}\n editorId={editorId}\n selectedKey={selectedKey}\n selContentMeta={selContentMeta}\n onSelectContent={onSelectContent}\n onDropContent={onDropContent}\n onDeleteContent={onDeleteContent}\n onContextMenu={onContextMenu}\n preview={preview}\n C={C}\n />\n ) : (\n <ContentBlock\n block={cb}\n selected={selectedKey === cb.id}\n onClick={undefined}\n preview={preview}\n C={C}\n />\n )}\n </div>\n\n <Line idx={ci + 1} />\n </div>\n );\n}\n\n// ─── CELL (positional drag-and-drop) ─────────────────────────────────────────\nfunction Cell({\n editorId,\n rowId,\n cellIdx,\n nest = undefined,\n innerCellIdx = 0,\n blocks,\n selectedKey,\n selContentMeta,\n onSelectContent,\n onDropContent,\n onDeleteContent,\n onContextMenu,\n preview,\n C,\n}) {\n const [insertAt, setInsertAt] = useState(null);\n const cellRef = useRef(null);\n\n const calcIdx = useCallback((clientY) => {\n if (!cellRef.current) return blocks.length;\n const els = cellRef.current.querySelectorAll(\"[data-bidx]\");\n if (!els.length) return 0;\n for (let i=0; i<els.length; i++) {\n const r = els[i].getBoundingClientRect();\n if (clientY < r.top + r.height/2) return i;\n }\n return els.length;\n },[blocks.length]);\n\n const handleDragOver = (e) => { e.preventDefault(); e.stopPropagation(); setInsertAt(calcIdx(e.clientY)); };\n const handleDragLeave = (e) => { if (!cellRef.current?.contains(e.relatedTarget)) setInsertAt(null); };\n const nestedPayload = nest ? { parentBlockIdx: nest.parentBlockIdx, innerCellIdx } : undefined;\n\n const handleDrop = (e) => {\n e.preventDefault(); e.stopPropagation();\n const idx = calcIdx(e.clientY); setInsertAt(null);\n try {\n const data = JSON.parse(e.dataTransfer.getData(\"application/json\")||\"{}\");\n if (data.contentType) {\n onDropContent(rowId, cellIdx, { kind: \"new\", contentType: data.contentType, insertAt: idx, nested: nestedPayload });\n } else if (data.moveContent) {\n onDropContent(rowId, cellIdx, { kind: \"move\", ...data.moveContent, insertAt: idx, nested: nestedPayload });\n }\n } catch {}\n };\n\n const Line = ({idx}) => insertAt===idx ? (\n <div style={{position:\"relative\",height:3,margin:\"2px 0\",background:C.accent,borderRadius:2,zIndex:50,pointerEvents:\"none\"}}>\n <div style={{position:\"absolute\",left:-4,top:\"50%\",transform:\"translateY(-50%)\",width:8,height:8,borderRadius:\"50%\",background:C.accent}}/>\n <div style={{position:\"absolute\",right:-4,top:\"50%\",transform:\"translateY(-50%)\",width:8,height:8,borderRadius:\"50%\",background:C.accent}}/>\n </div>\n ) : null;\n\n return (\n <div\n id={editorId ? `${editorId}-cell-${rowId}-${cellIdx}` : undefined}\n ref={cellRef} onDragOver={handleDragOver} onDragLeave={handleDragLeave} onDrop={handleDrop}\n style={{\n flex: 1,\n minHeight: preview ? undefined : 44,\n borderRadius: 4,\n ...(preview\n ? {}\n : insertAt !== null\n ? { border: `1px dotted ${C.accent}`, background: `${C.accent}0a` }\n : editChromeBorder(C, false)),\n background: insertAt !== null ? `${C.accent}0a` : \"transparent\",\n transition: \"border-color .15s,background .15s\",\n padding: preview ? 0 : 0,\n position: \"relative\",\n }}\n >\n {!preview&&blocks.length===0&&(\n <div style={{padding:\"10px 4px\",textAlign:\"center\",color:insertAt!==null?C.accent2:C.muted,fontSize:10,userSelect:\"none\",fontWeight:insertAt!==null?700:400,transition:\"color .15s\"}}>\n {insertAt!==null?\"Release to drop\":\"Drop here\"}\n </div>\n )}\n <Line idx={0}/>\n {blocks.map((cb, ci) => (\n <Fragment key={cb.id}>\n <BlockItem\n editorId={editorId}\n cb={cb}\n ci={ci}\n rowId={rowId}\n cellIdx={cellIdx}\n nest={nest}\n innerCellIdx={innerCellIdx}\n selectedKey={selectedKey}\n selContentMeta={selContentMeta}\n onSelectContent={onSelectContent}\n onDropContent={onDropContent}\n onDeleteContent={onDeleteContent}\n onContextMenu={onContextMenu}\n preview={preview}\n C={C}\n Line={Line}\n />\n </Fragment>\n ))}\n\n </div>\n );\n}\n\n// ─── LAYOUT ROW ──────────────────────────────────────────────────────────────\nfunction LayoutRow({\n editorId,\n row,\n selected,\n onClick,\n selectedContentKey,\n selContentMeta,\n onSelectContent,\n onDropContent,\n onDeleteContent,\n onContextMenu,\n onLayoutContextMenu,\n setSelectedRowId,\n preview = false,\n rowDrag,\n C,\n}) {\n const rowStyle: CSSProperties = {\n outline: selected&&!preview ? `2px solid ${C.accent}` : \"2px solid transparent\",\n outlineOffset:2, borderRadius:5, transition:\"outline .12s\",\n padding:row.padding, position:\"relative\",\n ...editChromeBorder(C, preview),\n ...backgroundLayerStyle({\n bgColor: row.bgColor,\n bgImage: row.bgImage,\n bgSize: row.bgSize,\n bgRepeat: row.bgRepeat,\n bgPosition: row.bgPosition,\n bgGradient: row.bgGradient,\n }),\n };\n return (\n <div\n id={editorId ? `${editorId}-layout-${row.id}` : undefined}\n onClick={preview ? undefined : onClick}\n onPointerDown={\n preview || !onClick\n ? undefined\n : (e) => {\n if (e.button !== 0) return;\n /** Row shell only — columns/cells stop propagation. Draggable rows often omit `click`; pointerdown still fires. */\n if (e.target !== e.currentTarget) return;\n onClick();\n }\n }\n onContextMenu={\n preview || !onLayoutContextMenu\n ? undefined\n : (e) => {\n onLayoutContextMenu(e, row.id);\n }\n }\n draggable={rowDrag?.draggable === true}\n onDragStart={rowDrag?.onDragStart}\n onDragEnd={rowDrag?.onDragEnd}\n title={rowDrag?.draggable ? \"Click row · drag to reorder\" : undefined}\n style={{\n ...rowStyle,\n ...(rowDrag?.draggable ? { cursor: \"grab\" as const } : {}),\n }}\n >\n <div style={{display:\"flex\",gap:row.gap}}>\n {row.cells.map((cellBlocks,ci)=>{\n const cS = (row.columnStyles && row.columnStyles[ci]) || {};\n return (\n <div key={ci} id={editorId ? `${editorId}-col-${row.id}-${ci}` : undefined} \n style={{\n flex:row.ratios[ci]??1,\n minHeight:50,\n ...editChromeBorder(C, preview),\n ...backgroundLayerStyle(cS),\n padding: paddingCssLayout(cS.padding),\n borderRadius: radiusCssLayout(cS.borderRadius),\n transition: \"all 0.2s\",\n position: \"relative\",\n }}\n onClick={(e) => {\n if(preview) return;\n e.stopPropagation();\n // Select row AND column simultaneously\n setSelectedRowId(row.id);\n onSelectContent(null, row.id, ci, -1, null);\n }}\n >\n <Cell editorId={editorId} rowId={row.id} cellIdx={ci} blocks={cellBlocks} selectedKey={selectedContentKey}\n selContentMeta={selContentMeta}\n onSelectContent={onSelectContent} onDropContent={onDropContent}\n onDeleteContent={onDeleteContent}\n onContextMenu={onContextMenu} preview={preview} C={C}/>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ─── CANVAS ROW ───────────────────────────────────────────────────────────────\nexport type CanvasRowProps = {\n editorId: string;\n row: any;\n ri: number;\n selectedRowId: any;\n selContentMeta: any;\n dragOver: any;\n C: any;\n setDragOver: (v: any) => void;\n handleRowDrop: (ri: number, e: any) => void;\n setDraggingRowId: (v: any) => void;\n setSelectedRowId: (v: any) => void;\n setSelContentId: (v: any) => void;\n setSelMeta: (v: any) => void;\n selectContent: (...args: any[]) => void;\n dropContent: (...args: any[]) => void;\n deleteContent: (...args: any[]) => void;\n handleContextMenu: (...args: any[]) => void;\n handleLayoutContextMenu: (...args: any[]) => void;\n selContentId: any;\n};\n\nconst CanvasRow: FC<CanvasRowProps> = ({\n editorId,\n row,\n ri,\n selectedRowId,\n selContentMeta: rowSelContentMeta,\n dragOver,\n C,\n setDragOver,\n handleRowDrop,\n setDraggingRowId,\n setSelectedRowId,\n setSelContentId,\n setSelMeta,\n selectContent,\n dropContent,\n deleteContent,\n handleContextMenu,\n handleLayoutContextMenu,\n selContentId,\n}) => {\n const rowSelected = selectedRowId === row.id;\n const rid = (s) => (editorId ? `${editorId}-${s}` : undefined);\n\n return (\n <div id={rid(`canvas-row-${row.id}`)}>\n {/* Drop zone before row */}\n <div\n id={rid(`row-drop-before-${ri}`)}\n onDragOver={e=>{e.preventDefault();setDragOver(ri);}}\n onDragLeave={()=>setDragOver(null)}\n onDrop={e=>{e.preventDefault();handleRowDrop(ri,e);}}\n style={{height:dragOver===ri?24:3,background:dragOver===ri?`${C.accent}25`:\"transparent\",border:dragOver===ri?`2px dashed ${C.accent}`:\"2px solid transparent\",borderRadius:4,transition:\"all .12s\",margin:\"2px 0\"}}\n />\n\n <div id={rid(`row-body-${row.id}`)} style={{ position: \"relative\", width: \"100%\", minWidth: 0, paddingLeft: 0, boxSizing: \"border-box\" }}>\n <div id={rid(`row-layout-wrap-${row.id}`)} style={{ width: \"100%\", minWidth: 0 }}>\n <LayoutRow\n editorId={editorId}\n row={row}\n selected={rowSelected}\n setSelectedRowId={setSelectedRowId}\n onClick={() => {\n setSelectedRowId(row.id);\n setSelContentId(null);\n setSelMeta(null);\n }}\n selectedContentKey={selContentId}\n selContentMeta={rowSelContentMeta}\n onSelectContent={selectContent}\n onDropContent={dropContent}\n onDeleteContent={deleteContent}\n onContextMenu={handleContextMenu}\n onLayoutContextMenu={handleLayoutContextMenu}\n rowDrag={{\n draggable: true,\n onDragStart: (e) => {\n e.stopPropagation();\n setDraggingRowId(row.id);\n },\n onDragEnd: () => setDraggingRowId(null),\n }}\n C={C}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport { CanvasRow };\n","import { useRef, useState, useEffect, Fragment, type FC, type ReactNode } from \"react\";\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Image as ImageIcon,\n Upload as UploadIcon,\n Droplets as SolidIcon,\n Blend as GradientIcon,\n Scaling,\n Crosshair,\n} from \"lucide-react\";\nimport { ALL_NETWORKS } from \"../../constants\";\nimport { videoSrcForEditorDisplay } from \"../../lib/htmlUtils\";\nimport { TextRichEditor } from \"./TextRichEditor\";\nimport { normalizeRichHtmlForStorage } from \"../../lib/htmlUtils\";\nimport { ColorSwatchGrid } from \"./ColorSwatchGrid\";\n\n/** UI label (internal key stays `twitter` for saved designs). */\nfunction socialNetworkLabel(network) {\n return network === \"twitter\" ? \"X\" : network;\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, \"0\");\n\n/** Timer `endDate`: ISO string or legacy `YYYY-MM-DD` (local midnight). */\nfunction parseTimerEndDate(value: string | undefined): Date {\n const s = (value || \"\").trim();\n if (!s) return new Date(Date.now() + 7 * 864e5);\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(s)) {\n const [y, m, d] = s.split(\"-\").map(Number);\n return new Date(y, m - 1, d, 0, 0, 0, 0);\n }\n const t = Date.parse(s);\n if (!Number.isNaN(t)) return new Date(t);\n return new Date(Date.now() + 7 * 864e5);\n}\n\nfunction formatDateInputLocal(d: Date): string {\n return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n}\n\nfunction formatTimeInputLocal(d: Date): string {\n return `${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\n}\n\n/** Persist as UTC ISO so countdown / export stay consistent. */\nfunction combineLocalDateTime(dateStr: string, timeStr: string): string {\n const [y, m, d] = dateStr.split(\"-\").map(Number);\n const parts = (timeStr || \"00:00\").split(\":\");\n const hh = Number(parts[0]) || 0;\n const mm = Number(parts[1]) || 0;\n const dt = new Date(y, (m || 1) - 1, d || 1, hh, mm, 0, 0);\n return dt.toISOString();\n}\n\nconst PR: FC<{ label: ReactNode; children: ReactNode; C: Record<string, string> }> = ({ label, children, C }) => (\n <div style={{ marginBottom: 11 }}>\n <label\n style={{\n display: \"block\",\n fontSize: 10,\n fontWeight: 700,\n color: C.muted,\n textTransform: \"uppercase\",\n letterSpacing: \".07em\",\n marginBottom: 3,\n }}\n >\n {label}\n </label>\n {children}\n </div>\n);\nfunction useIS(C) {\n return {\n IS:{width:\"100%\",padding:\"6px 8px\",border:`1px solid ${C.border}`,borderRadius:5,background:C.inputBg,color:C.text,fontSize:13,boxSizing:\"border-box\" as const,outline:\"none\"},\n CI:{padding:\"2px 4px\",height:28,cursor:\"pointer\",border:`1px solid ${C.border}`,borderRadius:5,background:C.inputBg},\n };\n}\n\nfunction ColorField({\n label,\n value,\n onChange,\n placeholder,\n emptyAsTransparent = false,\n C,\n}: {\n label: ReactNode;\n value: string | undefined;\n onChange: (next: string) => void;\n placeholder?: string;\n emptyAsTransparent?: boolean;\n C: any;\n}) {\n const { IS, CI } = useIS(C);\n const v = (value || \"\").trim();\n const normColorForInput = v || \"#000000\";\n return (\n <PR label={label} C={C}>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n <ColorSwatchGrid\n value={v}\n C={C}\n compact\n onPick={(hex) => onChange(emptyAsTransparent && hex.toLowerCase() === \"#ffffff\" ? \"\" : hex)}\n />\n <div style={{ display: \"flex\", gap: 5, flex: \"0 0 auto\", alignItems: \"center\" }}>\n <input\n type=\"color\"\n style={CI}\n value={normColorForInput}\n onChange={(e) => onChange(emptyAsTransparent && e.target.value.toLowerCase() === \"#ffffff\" ? \"\" : e.target.value)}\n />\n <input\n type=\"text\"\n style={{ ...IS, width: 140 }}\n placeholder={placeholder}\n value={v}\n onChange={(e) => onChange(e.target.value)}\n />\n </div>\n </div>\n </PR>\n );\n}\n\nfunction ImageUrlUploadField({\n label,\n value,\n onChange,\n onUpload,\n accept = \"image/*\",\n buttonLabel = \"Upload\",\n inputId,\n C,\n}: {\n label: ReactNode;\n value: string;\n onChange: (next: string) => void;\n onUpload?: (file: File) => Promise<string>;\n accept?: string;\n buttonLabel?: ReactNode;\n inputId: string;\n C: any;\n}) {\n const { IS } = useIS(C);\n return (\n <PR label={label} C={C}>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 6 }}>\n <input\n type=\"text\"\n style={IS}\n placeholder=\"https://…\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n />\n {onUpload ? (\n <>\n <input\n id={inputId}\n type=\"file\"\n accept={accept}\n style={{ display: \"none\" }}\n onChange={async (e) => {\n const file = e.target.files?.[0];\n if (!file) return;\n try {\n const url = await onUpload(file);\n onChange(url);\n } catch (err) {\n console.error(\"Upload failed\", err);\n alert(\"Upload failed\");\n }\n e.target.value = \"\";\n }}\n />\n <button\n type=\"button\"\n onClick={() => document.getElementById(inputId)?.click()}\n style={{\n background: C.surface,\n border: `1px solid ${C.border}`,\n color: C.accent,\n borderRadius: 5,\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"4px 10px\",\n width: \"100%\",\n fontWeight: 600,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n }}\n >\n <UploadIcon size={14} strokeWidth={2.25} aria-hidden />\n <span>{buttonLabel}</span>\n </button>\n </>\n ) : null}\n </div>\n </PR>\n );\n}\n\nfunction DynamicGradientField({\n label,\n value,\n onChange,\n defaults,\n C,\n}: {\n label: ReactNode;\n value: any;\n onChange: (next: any) => void;\n defaults: { colors: string[] };\n C: any;\n}) {\n const { IS, CI } = useIS(C);\n\n const normalize = (g: any) => {\n const angle = typeof g?.angle === \"number\" ? g.angle : 135;\n const colorsRaw = Array.isArray(g?.colors) ? g.colors.map((x: any) => String(x || \"\").trim()).filter(Boolean) : [];\n const stopsRaw = Array.isArray(g?.stops) ? g.stops.map((x: any) => Number(x)) : [];\n let colors = colorsRaw.length >= 2 ? colorsRaw : defaults.colors.slice(0, Math.max(2, defaults.colors.length));\n colors = colors.slice(0, 8);\n let stops =\n stopsRaw.length === colors.length\n ? stopsRaw\n : colors.map((_, i) => Math.round((i / Math.max(1, colors.length - 1)) * 100));\n stops = stops.map((n) => (Number.isFinite(n) ? Math.max(0, Math.min(100, n)) : 0));\n\n // Sort by stop\n const pairs = colors.map((c, i) => ({ c, s: stops[i] })).sort((a, b) => a.s - b.s);\n return { angle, colors: pairs.map((p) => p.c), stops: pairs.map((p) => p.s) };\n };\n\n const g = normalize(value || {});\n const canRemove = g.colors.length > 2;\n const canAdd = g.colors.length < 8;\n\n const setStop = (idx: number, nextStop: number) => {\n const stops = [...g.stops];\n stops[idx] = Math.max(0, Math.min(100, Math.round(nextStop)));\n onChange(normalize({ ...g, stops }));\n };\n const setColor = (idx: number, next: string) => {\n const colors = [...g.colors];\n colors[idx] = next;\n onChange(normalize({ ...g, colors }));\n };\n const removeStop = (idx: number) => {\n if (!canRemove) return;\n const colors = g.colors.filter((_, i) => i !== idx);\n const stops = g.stops.filter((_, i) => i !== idx);\n onChange(normalize({ ...g, colors, stops }));\n };\n const addStop = () => {\n if (!canAdd) return;\n const colors = [...g.colors, g.colors[g.colors.length - 1] || \"#ffffff\"];\n const stops = [...g.stops, 100];\n onChange(normalize({ ...g, colors, stops }));\n };\n\n const preview = `linear-gradient(${g.angle}deg, ${g.colors.map((c, i) => `${c} ${g.stops[i]}%`).join(\", \")})`;\n\n return (\n <PR label={label} C={C}>\n <div style={{ height: 28, borderRadius: 8, border: `1px solid ${C.border}`, background: preview, marginBottom: 10 }} />\n\n <PR label=\"Angle\" C={C}>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input\n type=\"range\"\n min={0}\n max={360}\n step={1}\n value={g.angle}\n onChange={(e) => onChange({ ...g, angle: +e.target.value })}\n style={{ width: \"100%\" }}\n />\n <input type=\"number\" style={IS} min={0} max={360} step={1} value={g.angle} onChange={(e) => onChange({ ...g, angle: +e.target.value })} />\n <div style={{ fontSize: 11, fontWeight: 800, color: C.muted, textAlign: \"center\" }}>°</div>\n </div>\n </PR>\n\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 6 }}>\n <div style={{ fontSize: 10, fontWeight: 800, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".06em\" }}>Stops</div>\n <button\n type=\"button\"\n onClick={addStop}\n disabled={!canAdd}\n style={{\n background: C.surface,\n border: `1px solid ${C.border}`,\n color: canAdd ? C.accent : C.muted,\n borderRadius: 6,\n cursor: canAdd ? \"pointer\" : \"not-allowed\",\n fontSize: 11,\n padding: \"6px 10px\",\n fontWeight: 700,\n opacity: canAdd ? 1 : 0.6,\n }}\n >\n + Add stop\n </button>\n </div>\n\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 10 }}>\n {g.colors.map((c, i) => (\n <div key={i} style={{ border: `1px solid ${C.border}`, borderRadius: 10, background: C.surface, padding: 10 }}>\n <div style={{ display: \"grid\", gridTemplateColumns: \"28px 1fr 78px 28px 28px\", gap: 6, alignItems: \"center\" }}>\n <input type=\"color\" style={CI} value={c} onChange={(e) => setColor(i, e.target.value)} />\n <input type=\"text\" style={IS} value={c} onChange={(e) => setColor(i, e.target.value)} />\n <input type=\"number\" style={IS} min={0} max={100} step={1} value={g.stops[i]} onChange={(e) => setStop(i, +e.target.value)} />\n <div style={{ fontSize: 11, fontWeight: 800, color: C.muted, textAlign: \"center\" }}>%</div>\n <button\n type=\"button\"\n onClick={() => removeStop(i)}\n disabled={!canRemove}\n title=\"Remove stop\"\n aria-label=\"Remove stop\"\n style={{\n width: 28,\n height: 28,\n borderRadius: 8,\n border: `1px solid ${canRemove ? C.border : \"transparent\"}`,\n background: canRemove ? \"transparent\" : \"transparent\",\n color: canRemove ? C.danger : C.muted,\n cursor: canRemove ? \"pointer\" : \"not-allowed\",\n fontWeight: 900,\n }}\n >\n ×\n </button>\n </div>\n <div style={{ marginTop: 8 }}>\n <input type=\"range\" min={0} max={100} step={1} value={g.stops[i]} onChange={(e) => setStop(i, +e.target.value)} style={{ width: \"100%\" }} />\n </div>\n </div>\n ))}\n </div>\n\n <div style={{ display: \"flex\", gap: 6, marginTop: 10 }}>\n <button\n type=\"button\"\n onClick={() => onChange(null)}\n style={{\n background: C.surface,\n border: `1px solid ${C.border}`,\n color: C.muted,\n borderRadius: 6,\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"6px 10px\",\n width: \"100%\",\n }}\n >\n Disable gradient\n </button>\n </div>\n </PR>\n );\n}\n\nconst ALIGN_ICON_SIZE = 15;\nfunction AlignButtons({\n value,\n onChange,\n options,\n C,\n}: {\n value: string | undefined;\n onChange: (next: string) => void;\n options: Array<\"left\" | \"center\" | \"right\" | \"justify\">;\n C: any;\n}) {\n const current = (value || \"left\") as string;\n const btnStyle = (active: boolean) => ({\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 32,\n height: 30,\n borderRadius: 6,\n border: `1px solid ${active ? C.accent : C.border}`,\n background: active ? `${C.accent}18` : C.surface,\n color: active ? C.accent : C.text,\n cursor: \"pointer\",\n padding: 0,\n });\n const items: Array<[ \"left\" | \"center\" | \"right\" | \"justify\", any, string ]> = [\n [\"left\", AlignLeft, \"Align left\"],\n [\"center\", AlignCenter, \"Align center\"],\n [\"right\", AlignRight, \"Align right\"],\n [\"justify\", AlignJustify, \"Justify\"],\n ];\n return (\n <PR label=\"Alignment\" C={C}>\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {items\n .filter(([k]) => options.includes(k))\n .map(([k, Icon, title]) => (\n <button\n key={k}\n type=\"button\"\n title={title}\n aria-label={title}\n onClick={() => onChange(k)}\n style={btnStyle(current === k)}\n >\n <Icon size={ALIGN_ICON_SIZE} strokeWidth={2.25} aria-hidden />\n </button>\n ))}\n </div>\n </PR>\n );\n}\n\nfunction clampNum(n: number, mn?: number, mx?: number) {\n if (Number.isNaN(n) || !Number.isFinite(n)) return mn ?? 0;\n if (typeof mn === \"number\" && n < mn) return mn;\n if (typeof mx === \"number\" && n > mx) return mx;\n return n;\n}\n\nfunction NumRangePx({\n label,\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n C,\n}: {\n label: string;\n value: number;\n onChange: (nextValue: number) => void;\n min?: number;\n max?: number;\n step?: number;\n C: any;\n}) {\n const { IS } = useIS(C);\n const v = clampNum(typeof value === \"number\" ? value : 0, min, max);\n return (\n <PR label={label} C={C}>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={v}\n onChange={(e) => onChange(clampNum(+e.target.value, min, max))}\n style={{ width: \"100%\" }}\n />\n <input\n type=\"number\"\n style={{ ...IS, padding: \"6px 8px\" }}\n min={min}\n max={max}\n step={step}\n value={v}\n onChange={(e) => onChange(clampNum(+e.target.value, min, max))}\n />\n </div>\n </PR>\n );\n}\n\nfunction DividerStyleButtons({\n value,\n onChange,\n C,\n}: {\n value: \"solid\" | \"dashed\" | \"dotted\" | string | undefined;\n onChange: (next: \"solid\" | \"dashed\" | \"dotted\") => void;\n C: any;\n}) {\n const cur = value === \"dashed\" || value === \"dotted\" || value === \"solid\" ? value : \"solid\";\n const btn = (active: boolean) => ({\n flex: 1,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 32,\n borderRadius: 8,\n border: `1px solid ${active ? C.accent : C.border}`,\n background: active ? `${C.accent}18` : C.surface,\n cursor: \"pointer\",\n padding: 0,\n });\n const line = (style: \"solid\" | \"dashed\" | \"dotted\", active: boolean) => ({\n width: 28,\n height: 0,\n borderTop: `3px ${style} ${active ? C.accent : C.muted}`,\n });\n return (\n <PR label=\"Border style\" C={C}>\n <div style={{ display: \"flex\", gap: 6 }}>\n {([\"solid\", \"dashed\", \"dotted\"] as const).map((s) => (\n <button key={s} type=\"button\" onClick={() => onChange(s)} title={s} aria-label={s} style={btn(cur === s)}>\n <span style={line(s, cur === s)} />\n </button>\n ))}\n </div>\n </PR>\n );\n}\n\nfunction MarginEditor({\n value,\n onChange,\n C,\n}: {\n value: { top: number; right: number; bottom: number; left: number } | undefined;\n onChange: (next: { top: number; right: number; bottom: number; left: number }) => void;\n C: any;\n}) {\n const v = value || { top: 0, right: 0, bottom: 0, left: 0 };\n const [linked, setLinked] = useState(true);\n const setAll = (n: number) => onChange({ top: n, right: n, bottom: n, left: n });\n const setSide = (k: \"top\" | \"right\" | \"bottom\" | \"left\", n: number) => {\n if (linked) setAll(n);\n else onChange({ ...v, [k]: n });\n };\n const allSame = v.top === v.right && v.top === v.bottom && v.top === v.left;\n return (\n <PR label=\"Margin\" C={C}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 6 }}>\n <span style={{ color: C.muted, fontSize: 12 }}>{linked ? \"All sides together\" : \"Edit sides individually\"}</span>\n <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 7, cursor: \"pointer\" }} title=\"Toggle all/individual\">\n <span style={{ fontSize: 10, fontWeight: 800, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".06em\" }}>\n {linked ? \"All\" : \"Sides\"}\n </span>\n <input type=\"checkbox\" checked={linked} onChange={(e) => setLinked(e.target.checked)} style={{ width: 15, height: 15, accentColor: C.accent }} />\n </label>\n </div>\n\n {linked ? (\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input\n type=\"range\"\n min={0}\n max={160}\n step={1}\n value={allSame ? v.top : 0}\n onChange={(e) => setAll(+e.target.value)}\n style={{ width: \"100%\" }}\n />\n <input\n type=\"number\"\n style={useIS(C).IS}\n min={0}\n max={400}\n step={1}\n value={allSame ? v.top : 0}\n onChange={(e) => setAll(+e.target.value)}\n />\n </div>\n ) : (\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 8 }}>\n {(\n [\n [\"top\", \"Top\"],\n [\"right\", \"Right\"],\n [\"bottom\", \"Bottom\"],\n [\"left\", \"Left\"],\n ] as const\n ).map(([k, lbl]) => (\n <div key={k} style={{ border: `1px solid ${C.border}`, borderRadius: 8, padding: 8, background: C.surface }}>\n <div style={{ fontSize: 10, fontWeight: 700, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".07em\", marginBottom: 6 }}>\n {lbl}\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input type=\"range\" min={0} max={160} step={1} value={v[k]} onChange={(e) => setSide(k, +e.target.value)} style={{ width: \"100%\" }} />\n <input type=\"number\" style={useIS(C).IS} min={0} max={400} step={1} value={v[k]} onChange={(e) => setSide(k, +e.target.value)} />\n </div>\n </div>\n ))}\n </div>\n )}\n </PR>\n );\n}\n\nfunction PaddingEditor({\n label = \"Padding\",\n value,\n onChange,\n C,\n}: {\n label?: ReactNode;\n value: number | { top: number; right: number; bottom: number; left: number } | undefined;\n onChange: (next: { top: number; right: number; bottom: number; left: number } | number) => void;\n C: any;\n}) {\n const { IS } = useIS(C);\n const vObj =\n typeof value === \"number\"\n ? { top: value, right: value, bottom: value, left: value }\n : value || { top: 0, right: 0, bottom: 0, left: 0 };\n const [linked, setLinked] = useState(true);\n const setAll = (n: number) => onChange({ top: n, right: n, bottom: n, left: n });\n const setSide = (k: \"top\" | \"right\" | \"bottom\" | \"left\", n: number) => {\n if (linked) setAll(n);\n else onChange({ ...vObj, [k]: n });\n };\n const allSame = vObj.top === vObj.right && vObj.top === vObj.bottom && vObj.top === vObj.left;\n return (\n <PR label={label} C={C}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 6 }}>\n <span style={{ color: C.muted, fontSize: 12 }}>{linked ? \"All sides together\" : \"Edit sides individually\"}</span>\n <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 7, cursor: \"pointer\" }} title=\"Toggle all/individual\">\n <span style={{ fontSize: 10, fontWeight: 800, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".06em\" }}>\n {linked ? \"All\" : \"Sides\"}\n </span>\n <input type=\"checkbox\" checked={linked} onChange={(e) => setLinked(e.target.checked)} style={{ width: 15, height: 15, accentColor: C.accent }} />\n </label>\n </div>\n\n {linked ? (\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input type=\"range\" min={0} max={160} step={1} value={allSame ? vObj.top : 0} onChange={(e) => setAll(+e.target.value)} style={{ width: \"100%\" }} />\n <input type=\"number\" style={IS} min={0} max={400} step={1} value={allSame ? vObj.top : 0} onChange={(e) => setAll(+e.target.value)} />\n </div>\n ) : (\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 8 }}>\n {(\n [\n [\"top\", \"Top\"],\n [\"right\", \"Right\"],\n [\"bottom\", \"Bottom\"],\n [\"left\", \"Left\"],\n ] as const\n ).map(([k, lbl]) => (\n <div key={k} style={{ border: `1px solid ${C.border}`, borderRadius: 8, padding: 8, background: C.surface }}>\n <div style={{ fontSize: 10, fontWeight: 700, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".07em\", marginBottom: 6 }}>\n {lbl}\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input type=\"range\" min={0} max={160} step={1} value={vObj[k]} onChange={(e) => setSide(k, +e.target.value)} style={{ width: \"100%\" }} />\n <input type=\"number\" style={IS} min={0} max={400} step={1} value={vObj[k]} onChange={(e) => setSide(k, +e.target.value)} />\n </div>\n </div>\n ))}\n </div>\n )}\n </PR>\n );\n}\n\nfunction BorderRadiusEditor({\n label = \"Border Radius\",\n value,\n onChange,\n C,\n}: {\n label?: ReactNode;\n value: number | { tl: number; tr: number; br: number; bl: number } | undefined;\n onChange: (next: { tl: number; tr: number; br: number; bl: number } | number) => void;\n C: any;\n}) {\n const { IS } = useIS(C);\n const vObj =\n typeof value === \"number\"\n ? { tl: value, tr: value, br: value, bl: value }\n : value || { tl: 0, tr: 0, br: 0, bl: 0 };\n const [linked, setLinked] = useState(true);\n const setAll = (n: number) => onChange({ tl: n, tr: n, br: n, bl: n });\n const setCorner = (k: \"tl\" | \"tr\" | \"br\" | \"bl\", n: number) => {\n if (linked) setAll(n);\n else onChange({ ...vObj, [k]: n });\n };\n const allSame = vObj.tl === vObj.tr && vObj.tl === vObj.br && vObj.tl === vObj.bl;\n const rangeMax = 80;\n return (\n <PR label={label} C={C}>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 6 }}>\n <span style={{ color: C.muted, fontSize: 12 }}>{linked ? \"All corners together\" : \"Edit corners individually\"}</span>\n <label style={{ display: \"inline-flex\", alignItems: \"center\", gap: 7, cursor: \"pointer\" }} title=\"Toggle all/individual\">\n <span style={{ fontSize: 10, fontWeight: 800, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".06em\" }}>\n {linked ? \"All\" : \"Corners\"}\n </span>\n <input type=\"checkbox\" checked={linked} onChange={(e) => setLinked(e.target.checked)} style={{ width: 15, height: 15, accentColor: C.accent }} />\n </label>\n </div>\n\n {linked ? (\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input type=\"range\" min={0} max={rangeMax} step={1} value={allSame ? vObj.tl : 0} onChange={(e) => setAll(+e.target.value)} style={{ width: \"100%\" }} />\n <input type=\"number\" style={IS} min={0} max={400} step={1} value={allSame ? vObj.tl : 0} onChange={(e) => setAll(+e.target.value)} />\n </div>\n ) : (\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr\", gap: 8 }}>\n {(\n [\n [\"tl\", \"Top left\"],\n [\"tr\", \"Top right\"],\n [\"br\", \"Bottom right\"],\n [\"bl\", \"Bottom left\"],\n ] as const\n ).map(([k, lbl]) => (\n <div key={k} style={{ border: `1px solid ${C.border}`, borderRadius: 8, padding: 8, background: C.surface }}>\n <div style={{ fontSize: 10, fontWeight: 700, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".07em\", marginBottom: 6 }}>\n {lbl}\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 78px\", gap: 6, alignItems: \"center\" }}>\n <input type=\"range\" min={0} max={rangeMax} step={1} value={vObj[k]} onChange={(e) => setCorner(k, +e.target.value)} style={{ width: \"100%\" }} />\n <input type=\"number\" style={IS} min={0} max={400} step={1} value={vObj[k]} onChange={(e) => setCorner(k, +e.target.value)} />\n </div>\n </div>\n ))}\n </div>\n )}\n </PR>\n );\n}\n\nfunction BgModeButtons({\n value,\n onChange,\n C,\n}: {\n /** `null` = no type chosen yet — no option appears selected. */\n value: \"solid\" | \"image\" | \"gradient\" | null;\n onChange: (next: \"solid\" | \"image\" | \"gradient\") => void;\n C: any;\n}) {\n const btn = (active: boolean) => ({\n flex: 1,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 34,\n borderRadius: 10,\n border: `1px solid ${active ? C.accent : C.border}`,\n background: active ? `${C.accent}18` : C.surface,\n color: active ? C.accent : C.muted,\n cursor: \"pointer\",\n gap: 8,\n fontSize: 12,\n fontWeight: 700,\n });\n const item = (k: \"solid\" | \"image\" | \"gradient\", Icon: any, label: string) => (\n <button key={k} type=\"button\" onClick={() => onChange(k)} style={btn(value != null && value === k)} title={label} aria-label={label}>\n <Icon size={16} strokeWidth={2.25} aria-hidden />\n <span>{label}</span>\n </button>\n );\n return (\n <PR label=\"Background type\" C={C}>\n <div style={{ display: \"flex\", gap: 8 }}>\n {item(\"solid\", SolidIcon, \"Color\")}\n {item(\"gradient\", GradientIcon, \"Gradient\")}\n {item(\"image\", ImageIcon, \"Image\")}\n </div>\n </PR>\n );\n}\n\nfunction blockBgKeys(variant: \"surface\" | \"backdrop\") {\n if (variant === \"surface\") {\n return {\n color: \"bgColor\",\n image: \"bgImage\",\n gradient: \"bgGradient\",\n size: \"bgSize\",\n repeat: \"bgRepeat\",\n position: \"bgPosition\",\n } as const;\n }\n return {\n color: \"backdropColor\",\n image: \"backdropImage\",\n gradient: \"backdropGradient\",\n size: \"backdropSize\",\n repeat: \"backdropRepeat\",\n position: \"backdropPosition\",\n } as const;\n}\n\n/** Solid / gradient / image behind block content (or backdrop behind button/timer). */\nfunction BlockSurfaceBgInspector({\n variant,\n p,\n set,\n C,\n onUpload,\n syncKey,\n}: {\n variant: \"surface\" | \"backdrop\";\n p: Record<string, unknown>;\n set: (k: string, v: unknown) => void;\n C: Record<string, string>;\n onUpload?: (file: File) => Promise<string>;\n syncKey: string;\n}) {\n const K = blockBgKeys(variant);\n const { IS, CI } = useIS(C);\n const POS_OPTS = [\"center\", \"top\", \"bottom\", \"left\", \"right\", \"top left\", \"top right\", \"bottom left\", \"bottom right\"];\n const [uiStep, setUiStep] = useState<null | \"solid\" | \"image\" | \"gradient\">(null);\n\n useEffect(() => {\n const g = p[K.gradient];\n if (g && typeof g === \"object\") {\n setUiStep(\"gradient\");\n return;\n }\n if (String(p[K.image] ?? \"\").trim()) {\n setUiStep(\"image\");\n return;\n }\n if (String(p[K.color] ?? \"\").trim()) {\n setUiStep(\"solid\");\n return;\n }\n setUiStep(null);\n }, [syncKey]);\n\n const setMode = (mode: \"solid\" | \"image\" | \"gradient\") => {\n setUiStep(mode);\n if (mode === \"solid\") {\n set(K.gradient, null);\n set(K.image, \"\");\n return;\n }\n if (mode === \"image\") {\n set(K.gradient, null);\n return;\n }\n set(K.image, \"\");\n const g = p[K.gradient];\n if (!g || typeof g !== \"object\") {\n set(K.gradient, { angle: 135, colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"], stops: [0, 50, 100] });\n }\n };\n\n const title = variant === \"backdrop\" ? \"Section backdrop\" : \"Block background\";\n const uploadId = `blk-surf-${variant}-${syncKey}`;\n\n return (\n <div style={{ marginBottom: 14, paddingBottom: 12, borderBottom: `1px solid ${C.border}` }}>\n <div\n style={{\n fontSize: 10,\n fontWeight: 700,\n color: C.muted,\n textTransform: \"uppercase\",\n letterSpacing: \".07em\",\n marginBottom: 8,\n }}\n >\n {title}\n </div>\n <BgModeButtons value={uiStep} onChange={setMode} C={C} />\n {uiStep === null ? (\n <div style={{ fontSize: 11, color: C.muted, marginTop: 8, lineHeight: 1.45 }}>\n Optional — color, gradient, or image fills behind this block.\n </div>\n ) : null}\n {uiStep === \"solid\" ? (\n <PR label=\"Background color\" C={C}>\n <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>\n <ColorSwatchGrid\n value={p[K.color] as string}\n C={C}\n compact\n onPick={(hex) => set(K.color, hex === \"#ffffff\" ? \"\" : hex)}\n />\n <div style={{ display: \"flex\", gap: 5, alignItems: \"center\" }}>\n <input\n type=\"color\"\n style={CI}\n value={(p[K.color] as string) || \"#ffffff\"}\n onChange={(e) => set(K.color, e.target.value === \"#ffffff\" ? \"\" : e.target.value)}\n />\n <input\n type=\"text\"\n style={{ ...IS, width: 120 }}\n placeholder=\"transparent\"\n value={(p[K.color] as string) || \"\"}\n onChange={(e) => set(K.color, e.target.value)}\n />\n </div>\n </div>\n </PR>\n ) : null}\n {uiStep === \"image\" ? (\n <>\n <PR\n label={\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 6 }}>\n <ImageIcon size={13} strokeWidth={2.25} aria-hidden />\n Background image\n </span>\n }\n C={C}\n >\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}>\n <input\n type=\"text\"\n style={IS}\n placeholder=\"https://…\"\n value={(p[K.image] as string) || \"\"}\n onChange={(e) => set(K.image, e.target.value)}\n />\n {onUpload ? (\n <div style={{ marginTop: 0 }}>\n <input\n id={uploadId}\n type=\"file\"\n style={{ display: \"none\" }}\n accept=\"image/*\"\n onChange={async (e) => {\n const file = e.target.files?.[0];\n if (!file) return;\n try {\n const url = await onUpload(file);\n set(K.image, url);\n } catch (err) {\n console.error(\"Upload failed\", err);\n alert(\"Background upload failed\");\n }\n }}\n />\n <button\n type=\"button\"\n onClick={() => document.getElementById(uploadId)?.click()}\n style={{\n background: C.surface,\n border: `1px solid ${C.border}`,\n color: C.accent,\n borderRadius: 5,\n cursor: \"pointer\",\n fontSize: 11,\n padding: \"4px 10px\",\n width: \"100%\",\n fontWeight: 600,\n }}\n >\n <span style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 8 }}>\n <UploadIcon size={14} strokeWidth={2.25} aria-hidden />\n <span>Upload</span>\n </span>\n </button>\n </div>\n ) : null}\n </div>\n </PR>\n <div style={{ display: \"flex\", gap: 8, marginBottom: 12 }}>\n <div style={{ flex: 1 }}>\n <PR label=\"Fit\" C={C}>\n <select style={IS} value={(p[K.size] as string) || \"cover\"} onChange={(e) => set(K.size, e.target.value)}>\n <option value=\"auto\">Auto</option>\n <option value=\"cover\">Cover</option>\n <option value=\"contain\">Contain</option>\n </select>\n </PR>\n </div>\n <div style={{ flex: 1 }}>\n <PR label=\"Repeat\" C={C}>\n <select style={IS} value={(p[K.repeat] as string) || \"no-repeat\"} onChange={(e) => set(K.repeat, e.target.value)}>\n <option value=\"no-repeat\">No repeat</option>\n <option value=\"repeat\">Repeat</option>\n <option value=\"repeat-x\">Repeat X</option>\n <option value=\"repeat-y\">Repeat Y</option>\n </select>\n </PR>\n </div>\n <div style={{ flex: 1 }}>\n <PR label=\"Position\" C={C}>\n <select style={IS} value={(p[K.position] as string) || \"center\"} onChange={(e) => set(K.position, e.target.value)}>\n {POS_OPTS.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </PR>\n </div>\n </div>\n </>\n ) : null}\n {uiStep === \"gradient\" ? (\n <details open style={{ marginBottom: 4 }}>\n <summary style={{ cursor: \"pointer\", fontSize: 11, fontWeight: 800, color: C.text }}>Gradient</summary>\n <div style={{ marginTop: 10 }}>\n <DynamicGradientField\n label=\"Gradient\"\n value={p[K.gradient] as any}\n onChange={(g) => set(K.gradient, g)}\n defaults={{ colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"] }}\n C={C}\n />\n </div>\n </details>\n ) : null}\n </div>\n );\n}\n\n// ─── CONTENT BLOCK EDITOR ────────────────────────────────────────────────────\nfunction ContentBlockEditor({ block, onChange, mergeTags, onClose, onUpload, C }) {\n const {IS,CI}=useIS(C);\n const imageFileRef = useRef(null);\n const p=block.props;\n const set=(k,v)=>onChange({...block,props:{...p,[k]:v}});\n const Num=(k,lbl,mn=0,mx=300)=><PR label={lbl} C={C}><input type=\"number\" style={IS} value={p[k]??0} min={mn} max={mx} onChange={e=>set(k,+e.target.value)}/></PR>;\n const Txt=(k,lbl,multi=false)=><PR label={lbl} C={C}>{multi?<textarea style={{...IS,minHeight:68,resize:\"vertical\"}} value={p[k]||\"\"} onChange={e=>set(k,e.target.value)}/>:<input type=\"text\" style={IS} value={p[k]||\"\"} onChange={e=>set(k,e.target.value)}/>}</PR>;\n const Col=(k,lbl)=><PR label={lbl} C={C}>\n <div style={{display:\"flex\",gap:8,alignItems:\"center\"}}>\n <ColorSwatchGrid value={p[k]} onPick={(hex)=>set(k,hex)} C={C} compact />\n <div style={{display:\"flex\",gap:5,flex:\"0 0 auto\",alignItems:\"center\"}}>\n <input type=\"color\" style={CI} value={p[k]||\"#000000\"} onChange={e=>set(k,e.target.value)}/>\n <input type=\"text\" style={{...IS,width:120}} value={p[k]||\"\"} onChange={e=>set(k,e.target.value)}/>\n </div>\n </div>\n </PR>;\n const Sel=(k,lbl,opts)=><PR label={lbl} C={C}><select style={IS} value={p[k]||opts[0]} onChange={e=>set(k,e.target.value)}>{opts.map(o=><option key={o} value={o}>{o}</option>)}</select></PR>;\n const Tog=(k,lbl)=><PR label={lbl} C={C}><label style={{display:\"flex\",alignItems:\"center\",gap:7,cursor:\"pointer\"}}><input type=\"checkbox\" checked={!!p[k]} onChange={e=>set(k,e.target.checked)} style={{width:15,height:15,accentColor:C.accent}}/><span style={{color:C.muted,fontSize:12}}>{p[k]?\"On\":\"Off\"}</span></label></PR>;\n // Merge-tag picker intentionally removed from inspector UI.\n const TagPicker = (_field) => null;\n\n const FONTS=[\"Georgia,serif\",\"Arial,sans-serif\",\"Verdana,sans-serif\",\"'Courier New',monospace\",\"Trebuchet MS,sans-serif\",\"Impact,sans-serif\"];\n\n const ImgUpload = (key) => {\n if (!onUpload) return null;\n return (\n <div style={{marginTop:4}}>\n <input id={`upload-${key}`} type=\"file\" style={{display:\"none\"}} accept=\"image/*\"\n onChange={async e=>{\n const file=e.target.files?.[0];\n if(!file)return;\n try{\n const url=await onUpload(file);\n set(key,url);\n }catch(err){\n console.error(\"Upload failed\",err);\n alert(\"Image upload failed\");\n }\n }}/>\n <button type=\"button\" onClick={()=>document.getElementById(`upload-${key}`)?.click()}\n style={{background:C.surface,border:`1px solid ${C.border}`,color:C.accent,borderRadius:5,cursor:\"pointer\",fontSize:11,padding:\"4px 10px\",width:\"100%\",fontWeight:600}}>\n ↑ Upload Image\n </button>\n </div>\n );\n };\n\n switch(block.type) {\n case \"heading\": return <>\n {Txt(\"content\",\"Heading Text\")}\n {Sel(\"level\",\"Level\",[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"])}\n <NumRangePx label=\"Font size\" value={p.fontSize ?? 28} onChange={(n)=>set(\"fontSize\",n)} min={8} max={96} step={1} C={C}/>\n {Col(\"color\",\"Color\")}\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\",\"justify\"]} C={C}/>\n {Sel(\"fontWeight\",\"Weight\",[\"300\",\"400\",\"500\",\"600\",\"700\",\"800\"])}\n {Sel(\"fontFamily\",\"Font\",FONTS)}\n <NumRangePx label=\"Letter spacing\" value={p.letterSpacing ?? 0} onChange={(n)=>set(\"letterSpacing\",n)} min={0} max={30} step={0.5} C={C}/>\n <PR label=\"Line height\" C={C}>\n <input type=\"number\" style={useIS(C).IS} min={0.8} max={4} step={0.05} value={p.lineHeight ?? 1.2} onChange={(e)=>set(\"lineHeight\",+e.target.value)} />\n </PR>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"text\": return (\n <>\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 10 }}>\n <Fragment key={block.id}>\n <TextRichEditor\n value={normalizeRichHtmlForStorage(p.content)}\n onChange={(html) => set(\"content\", html)}\n typography={{\n fontSize: p.fontSize,\n color: p.color,\n align: p.align,\n fontFamily: p.fontFamily,\n lineHeight: p.lineHeight,\n letterSpacing: p.letterSpacing,\n padding: p.padding as any,\n }}\n mergeTags={mergeTags}\n onMergeTagInsert={(tag) => set(\"content\", (p.content || \"\") + \" \" + tag)}\n placeholder=\"Write your message…\"\n headerTitle=\"Rich text\"\n C={C}\n />\n </Fragment>\n </div>\n <NumRangePx label=\"Font size\" value={p.fontSize ?? 15} onChange={(n)=>set(\"fontSize\",n)} min={8} max={96} step={1} C={C}/>\n {Col(\"color\",\"Color\")}\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\",\"justify\"]} C={C}/>\n {Sel(\"fontWeight\",\"Weight\",[\"400\",\"500\",\"600\",\"700\",\"800\"])}\n {Sel(\"fontFamily\",\"Font\",FONTS)}\n <PR label=\"Line height\" C={C}>\n <input type=\"number\" style={useIS(C).IS} min={1} max={4} step={0.05} value={p.lineHeight ?? 1.65} onChange={(e)=>set(\"lineHeight\",+e.target.value)} />\n </PR>\n <NumRangePx label=\"Letter spacing\" value={p.letterSpacing ?? 0} onChange={(n)=>set(\"letterSpacing\",n)} min={0} max={30} step={0.5} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>\n );\n case \"html\": return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 10 }}>\n <Fragment key={block.id}>\n <TextRichEditor\n value={normalizeRichHtmlForStorage(p.content)}\n onChange={(html) => set(\"content\", html)}\n typography={{\n fontSize: p.fontSize,\n color: p.color,\n align: p.align,\n fontFamily: p.fontFamily,\n lineHeight: p.lineHeight,\n letterSpacing: p.letterSpacing,\n padding: p.padding as any,\n }}\n mergeTags={mergeTags}\n onMergeTagInsert={(tag) => set(\"content\", (p.content || \"\") + \" \" + tag)}\n placeholder=\"Write your rich content…\"\n headerTitle=\"Rich editor\"\n C={C}\n />\n </Fragment>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </div>\n );\n case \"image\": return <>\n <PR label=\"Image URL\" C={C}>\n <div style={{display:\"flex\",flexDirection:\"column\",gap:4}}>\n <input type=\"text\" style={IS} value={p.src||\"\"} placeholder=\"https://…\" onChange={e=>set(\"src\",e.target.value)}/>\n {ImgUpload(\"src\")}\n </div>\n </PR>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><Scaling size={13} strokeWidth={2.25} aria-hidden />Object fit</span>} C={C}>\n <select style={IS} value={p.objectFit || \"cover\"} onChange={e=>set(\"objectFit\",e.target.value)}>\n {[\"cover\",\"contain\",\"fill\",\"none\",\"scale-down\"].map(v=><option key={v} value={v}>{v}</option>)}\n </select>\n </PR>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><Crosshair size={13} strokeWidth={2.25} aria-hidden />Object position</span>} C={C}>\n <select style={IS} value={p.objectPosition || \"center\"} onChange={e=>set(\"objectPosition\",e.target.value)}>\n {[\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top left\",\"top right\",\"bottom left\",\"bottom right\"].map(v=><option key={v} value={v}>{v}</option>)}\n </select>\n </PR>\n {Txt(\"alt\",\"Alt Text\")}{Txt(\"link\",\"Link URL\")}{Sel(\"linkTarget\",\"Open In\",[\"_blank\",\"_self\"])}\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\"]} C={C}/>\n <BorderRadiusEditor value={p.borderRadius} onChange={(br)=>set(\"borderRadius\",br)} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"button\": return <>\n {Txt(\"label\",\"Label\")}\n {Txt(\"href\",\"Link URL\")}\n {Sel(\"linkTarget\",\"Open In\",[\"_blank\",\"_self\"])}\n {Col(\"bgColor\",\"Background\")}\n {Col(\"textColor\",\"Text Color\")}\n {Col(\"borderColor\",\"Border Color\")}\n {Num(\"borderWidth\",\"Border Width\",0,10)}\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\"]} C={C}/>\n <BorderRadiusEditor value={p.borderRadius} onChange={(br)=>set(\"borderRadius\",br)} C={C}/>\n {Num(\"paddingV\",\"Padding V\")}\n {Num(\"paddingH\",\"Padding H\")}\n <NumRangePx label=\"Font size\" value={p.fontSize ?? 14} onChange={(n)=>set(\"fontSize\",n)} min={8} max={48} step={1} C={C}/>\n {Sel(\"fontWeight\",\"Weight\",[\"400\",\"500\",\"600\",\"700\",\"800\"])}\n {Tog(\"fullWidth\",\"Full Width\")}\n <BlockSurfaceBgInspector variant=\"backdrop\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"link\": return <>\n {Txt(\"label\",\"Label\")}{Txt(\"href\",\"Link URL\")}{Sel(\"linkTarget\",\"Open In\",[\"_blank\",\"_self\"])}{Col(\"color\",\"Text Color\")}\n <NumRangePx label=\"Font size\" value={p.fontSize ?? 15} onChange={(n)=>set(\"fontSize\",n)} min={8} max={72} step={1} C={C}/>\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\",\"justify\"]} C={C}/>\n {Sel(\"fontWeight\",\"Weight\",[\"300\",\"400\",\"500\",\"600\",\"700\",\"800\"])}\n {Sel(\"fontFamily\",\"Font\",FONTS)}{Tog(\"underline\",\"Underline\")}\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"divider\": return <>\n {Col(\"color\",\"Color\")}\n <NumRangePx label=\"Thickness\" value={p.thickness ?? 1} onChange={(n)=>set(\"thickness\",n)} min={1} max={20} step={1} C={C}/>\n <DividerStyleButtons value={p.style} onChange={(s)=>set(\"style\",s)} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"spacer\": return <>\n <NumRangePx label=\"Height\" value={p.height ?? 24} onChange={(n)=>set(\"height\",n)} min={4} max={300} step={1} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"social\": return <>\n <PR label=\"Networks\" C={C}>\n <div style={{display:\"flex\",flexWrap:\"wrap\",gap:4,marginBottom:6}}>\n {ALL_NETWORKS.map(n=>{\n const active=(p.networks||[]).includes(n);\n return <button key={n} onClick={()=>{\n const nextNets = active ? (p.networks||[]).filter(x=>x!==n) : [...(p.networks||[]),n];\n const nextUrls = { ...(p.socialUrls||{}) };\n if (active) delete nextUrls[n];\n onChange({ ...block, props: { ...p, networks: nextNets, socialUrls: nextUrls } });\n }}\n style={{padding:\"3px 8px\",borderRadius:4,border:`1px solid ${active?C.accent:C.border}`,background:active?`${C.accent}22`:\"transparent\",color:active?C.accent:C.muted,fontSize:11,cursor:\"pointer\",fontWeight:active?700:400}}>\n {socialNetworkLabel(n)}\n </button>;\n })}\n </div>\n </PR>\n {(p.networks||[]).length>0&&(\n <PR label=\"Profile / page URLs\" C={C}>\n <div style={{fontSize:10,color:C.muted,marginBottom:8,lineHeight:1.45}}>Optional. Leave empty for icons without links. Use full URLs (https://…).</div>\n {(p.networks||[]).map(n=>(\n <div key={n} style={{marginBottom:8}}>\n <div style={{fontSize:10,fontWeight:700,color:C.accent2,marginBottom:3,textTransform:n===\"twitter\"?\"none\":\"capitalize\"}}>{socialNetworkLabel(n)}</div>\n <input type=\"text\" style={IS} placeholder={n===\"twitter\"?\"https://x.com/your-handle\":`https://${n}.com/your-profile`}\n value={(p.socialUrls&&p.socialUrls[n])||\"\"}\n onChange={e=>{\n const socialUrls = { ...(p.socialUrls||{}) };\n const v = e.target.value.trim();\n if (v) socialUrls[n] = v;\n else delete socialUrls[n];\n set(\"socialUrls\", socialUrls);\n }}/>\n </div>\n ))}\n </PR>\n )}\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\"]} C={C}/>\n <NumRangePx label=\"Icon size\" value={p.iconSize ?? 30} onChange={(n)=>set(\"iconSize\",n)} min={16} max={72} step={1} C={C}/>\n {Sel(\"shape\",\"Shape\",[\"circle\",\"square\"])}\n <NumRangePx label=\"Gap\" value={p.gap ?? 6} onChange={(n)=>set(\"gap\",n)} min={0} max={40} step={1} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"video\": return <>\n <PR label=\"Video URL\" C={C}>\n <div style={{display:\"flex\",flexDirection:\"column\",gap:4}}>\n <input type=\"text\" style={IS} value={videoSrcForEditorDisplay(p.src)||\"\"} placeholder=\"https://www.youtube.com/watch?v=… or Vimeo / embed URL\"\n onChange={e=>set(\"src\",e.target.value)}/>\n {onUpload && (\n <div style={{marginTop:0}}>\n <input\n id={`upload-video-${block.id}`}\n type=\"file\"\n style={{display:\"none\"}}\n accept=\"video/*\"\n onChange={async e=>{\n const file=e.target.files?.[0];\n if(!file)return;\n try{\n const url=await onUpload(file);\n set(\"src\",url);\n }catch(err){\n console.error(\"Upload failed\",err);\n alert(\"Video upload failed\");\n }\n }}\n />\n <button\n type=\"button\"\n onClick={()=>document.getElementById(`upload-video-${block.id}`)?.click()}\n style={{background:C.surface,border:`1px solid ${C.border}`,color:C.accent,borderRadius:5,cursor:\"pointer\",fontSize:11,padding:\"4px 10px\",width:\"100%\",fontWeight:600}}\n >\n ↑ Upload Video\n </button>\n </div>\n )}\n </div>\n <div style={{fontSize:10,color:C.muted,marginTop:4,lineHeight:1.5}}>\n Supports YouTube watch, Shorts, youtu.be, Vimeo page links, or direct embed URLs (\n <code style={{background:C.surface,padding:\"1px 4px\",borderRadius:3}}>youtube.com/embed/…</code>\n {\" \"}/\n <code style={{background:C.surface,padding:\"1px 4px\",borderRadius:3}}>player.vimeo.com/…</code>\n ).\n </div>\n </PR>\n <NumRangePx label=\"Height\" value={p.height ?? 280} onChange={(n)=>set(\"height\",n)} min={80} max={720} step={1} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"menu\": return <>\n <PR label=\"Menu Items\" C={C}>\n {(p.items||[]).map((item,i)=>(\n <div key={i} style={{display:\"flex\",gap:4,marginBottom:5}}>\n <input type=\"text\" style={{...IS,flex:2}} placeholder=\"Label\" value={item.label} onChange={e=>{const items=[...p.items];items[i]={...items[i],label:e.target.value};set(\"items\",items);}}/>\n <input type=\"text\" style={{...IS,flex:3}} placeholder=\"URL\" value={item.href} onChange={e=>{const items=[...p.items];items[i]={...items[i],href:e.target.value};set(\"items\",items);}}/>\n <button onClick={()=>set(\"items\",p.items.filter((_,j)=>j!==i))} style={{background:\"none\",border:`1px solid ${C.danger}`,color:C.danger,borderRadius:4,cursor:\"pointer\",fontSize:12,padding:\"0 6px\"}}>✕</button>\n </div>\n ))}\n <button onClick={()=>set(\"items\",[...(p.items||[]),{label:\"New\",href:\"#\"}])} style={{background:C.surface,border:`1px solid ${C.border}`,color:C.text,borderRadius:5,cursor:\"pointer\",fontSize:11,padding:\"4px 10px\",width:\"100%\"}}>+ Add Item</button>\n </PR>\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\"]} C={C}/>\n {Col(\"color\",\"Link Color\")}\n <NumRangePx label=\"Font size\" value={p.fontSize ?? 14} onChange={(n)=>set(\"fontSize\",n)} min={8} max={48} step={1} C={C}/>\n <NumRangePx label=\"Item gap\" value={p.gap ?? 20} onChange={(n)=>set(\"gap\",n)} min={0} max={80} step={1} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n case \"timer\": {\n const endAt = parseTimerEndDate(p.endDate);\n const dateVal = formatDateInputLocal(endAt);\n const timeVal = formatTimeInputLocal(endAt);\n return <>\n <PR label=\"End date & time\" C={C}>\n <div style={{ display: \"flex\", gap: 8, flexWrap: \"wrap\", alignItems: \"stretch\" }}>\n <input\n type=\"date\"\n style={{ ...IS, flex: \"1 1 140px\", minWidth: 0 }}\n value={dateVal}\n onChange={(e) => {\n const next = e.target.value;\n if (!next) return;\n set(\"endDate\", combineLocalDateTime(next, timeVal));\n }}\n />\n <input\n type=\"time\"\n step={60}\n style={{ ...IS, flex: \"0 1 128px\" }}\n value={timeVal}\n onChange={(e) => set(\"endDate\", combineLocalDateTime(dateVal, e.target.value || \"00:00\"))}\n />\n </div>\n </PR>\n {Txt(\"label\",\"Label Text\")}\n {Col(\"bgColor\",\"Box Background\")}\n {Col(\"textColor\",\"Text Color\")}\n <BorderRadiusEditor value={p.borderRadius} onChange={(br)=>set(\"borderRadius\",br)} C={C}/>\n <AlignButtons value={p.align} onChange={(v)=>set(\"align\",v)} options={[\"left\",\"center\",\"right\"]} C={C}/>\n {Tog(\"showLabels\",\"Show Labels\")}\n <BlockSurfaceBgInspector variant=\"backdrop\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>;\n }\n case \"table\": return (\n <>\n {Tog(\"header\",\"First row is header\")}\n <PR label=\"Table role\" C={C}>\n <div style={{fontSize:10,color:C.muted,marginBottom:6,lineHeight:1.45}}>\n <strong>Data</strong> → <code style={{background:C.surface,padding:\"1px 4px\",borderRadius:3}}>role=&quot;table&quot;</code> for real tables.\n {\" \"}<strong>Layout</strong> → <code style={{background:C.surface,padding:\"1px 4px\",borderRadius:3}}>role=&quot;presentation&quot;</code> for non-data grids.\n </div>\n <select\n style={IS}\n value={p.tableRole === \"presentation\" ? \"presentation\" : \"data\"}\n onChange={e=>set(\"tableRole\", e.target.value)}\n >\n <option value=\"data\">Data table (role=&quot;table&quot;)</option>\n <option value=\"presentation\">Layout (role=&quot;presentation&quot;)</option>\n </select>\n </PR>\n <PR label=\"Table Data\" C={C}>\n <div style={{fontSize:10,color:C.muted,marginBottom:6,lineHeight:1.5}}>When header is on, row 1 is the header row. Click a cell to edit.</div>\n <div style={{overflowX:\"auto\"}}>\n <table style={{borderCollapse:\"collapse\",width:\"100%\",fontSize:11}}>\n <tbody>\n {(p.data||[]).map((row,ri)=>(\n <tr key={ri}>\n {row.map((cell,ci)=>(\n <td key={ci} style={{padding:2}}>\n <input type=\"text\" style={{...IS,padding:\"4px 6px\",fontSize:11,minWidth:60,background:!!p.header&&ri===0?C.accent+\"22\":C.inputBg,fontWeight:!!p.header&&ri===0?700:400,boxSizing:\"border-box\" as const}} value={cell}\n onChange={e=>{const d=p.data.map(r=>[...r]);d[ri][ci]=e.target.value;set(\"data\",d);}}/>\n </td>\n ))}\n <td style={{padding:2}}>\n <button type=\"button\" onClick={()=>set(\"data\",p.data.filter((_,j)=>j!==ri))} title=\"Remove row\"\n style={{background:\"none\",border:`1px solid ${C.danger}`,color:C.danger,borderRadius:3,cursor:\"pointer\",fontSize:10,padding:\"3px 5px\",whiteSpace:\"nowrap\"}}>✕</button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <div style={{display:\"flex\",gap:5,marginTop:6}}>\n <button type=\"button\" onClick={()=>set(\"data\",[...(p.data||[]),[...Array((p.data||[[]])[0]?.length||3).fill(\"\")]])}\n style={{flex:1,background:C.surface,border:`1px solid ${C.border}`,color:C.text,borderRadius:4,cursor:\"pointer\",fontSize:11,padding:\"4px\"}}>+ Row</button>\n <button type=\"button\" onClick={()=>set(\"data\",(p.data||[]).map(r=>[...r,\"\"]))}\n style={{flex:1,background:C.surface,border:`1px solid ${C.border}`,color:C.text,borderRadius:4,cursor:\"pointer\",fontSize:11,padding:\"4px\"}}>+ Col</button>\n <button type=\"button\" onClick={()=>set(\"data\",(p.data||[]).map(r=>r.slice(0,-1)).filter(r=>r.length>0))}\n style={{flex:1,background:C.surface,border:`1px solid ${C.border}`,color:C.muted,borderRadius:4,cursor:\"pointer\",fontSize:11,padding:\"4px\"}}>− Col</button>\n </div>\n </PR>\n {Col(\"headerBg\",\"Header row background\")}{Col(\"headerColor\",\"Header row text\")}{Col(\"cellBg\",\"Cell background\")}{Col(\"cellBorder\",\"Cell border\")}{Col(\"stripedBg\",\"Stripe color\")}\n {Tog(\"striped\",\"Striped rows\")}\n <NumRangePx label=\"Font size\" value={p.fontSize ?? 13} onChange={(n)=>set(\"fontSize\",n)} min={10} max={24} step={1} C={C}/>\n <BlockSurfaceBgInspector variant=\"surface\" p={p} set={set} C={C} onUpload={onUpload} syncKey={block.id} />\n <PaddingEditor value={p.padding} onChange={(pad)=>set(\"padding\",pad)} C={C}/>\n <PaddingEditor label=\"Cell padding\" value={p.cellPadding} onChange={(pad)=>set(\"cellPadding\",pad)} C={C}/>\n <MarginEditor value={p.margin} onChange={(m)=>set(\"margin\",m)} C={C}/>\n </>\n );\n case \"layout\":\n return (\n <LayoutRowEditor\n row={{\n id: block.id,\n type: \"layout\",\n preset: p.preset,\n cols: p.cols ?? (p.ratios?.length || 1),\n ratios: [...(p.ratios?.length ? p.ratios : [1])],\n gap: p.gap,\n padding: p.padding,\n bgColor: p.bgColor || \"\",\n bgImage: p.bgImage || \"\",\n bgSize: p.bgSize,\n bgRepeat: p.bgRepeat,\n bgPosition: p.bgPosition ?? \"center\",\n bgGradient: p.bgGradient ?? null,\n cells: p.cells || [],\n columnStyles: p.columnStyles,\n }}\n onChange={(row) =>\n onChange({\n ...block,\n props: {\n ...p,\n preset: row.preset,\n cols: row.ratios?.length ?? row.cols ?? 1,\n gap: row.gap,\n padding: row.padding,\n bgColor: row.bgColor,\n bgImage: row.bgImage,\n bgSize: row.bgSize,\n bgRepeat: row.bgRepeat,\n bgPosition: row.bgPosition,\n bgGradient: row.bgGradient,\n ratios: [...(row.ratios || [1])],\n cells: row.cells || [],\n columnStyles: row.columnStyles,\n },\n })\n }\n onClose={onClose}\n onUpload={onUpload}\n C={C}\n customizationHint=\"Choose how many columns to use, set ratio weights (flex), gap and padding, row background, then scroll down for per-column colors and padding.\"\n />\n );\n default: return null;\n }\n}\n\n// ─── LAYOUT ROW EDITOR ───────────────────────────────────────────────────────\nfunction LayoutRowEditor({\n row,\n onChange,\n onClose,\n onUpload,\n initialCol = null,\n C,\n /** Shown under the inspector header when editing a Layout block */\n customizationHint,\n}: {\n row: any;\n onChange: (row: any) => void;\n onClose?: () => void;\n onUpload?: (file: File) => Promise<string>;\n initialCol?: number | null;\n C: any;\n customizationHint?: string;\n}) {\n const {IS,CI}=useIS(C);\n const [selCol, setSelCol] = useState<number|null>(initialCol);\n /** Step 1: pick type; step 2: show only that type’s controls. */\n const [rowBgUiStep, setRowBgUiStep] = useState<null | \"solid\" | \"image\" | \"gradient\">(null);\n const [colBgUiStep, setColBgUiStep] = useState<null | \"solid\" | \"image\" | \"gradient\">(null);\n\n // Sync with prop if changed\n useEffect(() => {\n if (initialCol !== null && initialCol !== undefined) {\n setSelCol(initialCol);\n }\n }, [initialCol]);\n\n useEffect(() => {\n if (row.bgGradient) {\n setRowBgUiStep(\"gradient\");\n return;\n }\n if (String(row.bgImage || \"\").trim()) {\n setRowBgUiStep(\"image\");\n return;\n }\n if (String(row.bgColor || \"\").trim()) {\n setRowBgUiStep(\"solid\");\n return;\n }\n setRowBgUiStep(null);\n }, [row.id]);\n\n useEffect(() => {\n if (selCol === null) {\n setColBgUiStep(null);\n return;\n }\n const cs = (row.columnStyles || {})[selCol] || {};\n if (cs.bgGradient) {\n setColBgUiStep(\"gradient\");\n return;\n }\n if (String(cs.bgImage || \"\").trim()) {\n setColBgUiStep(\"image\");\n return;\n }\n if (String(cs.bgColor || \"\").trim()) {\n setColBgUiStep(\"solid\");\n return;\n }\n setColBgUiStep(null);\n }, [selCol, row.id]);\n\n const set=(k,v)=>onChange({...row,[k]:v});\n const applyColumnCount=(n)=>{\n const prevCells=[...(row.cells||[])];\n const prevRatios=[...(row.ratios||[])];\n const cells=[];\n const ratios=[];\n for(let i=0;i<n;i++){\n cells.push(i<prevCells.length&&Array.isArray(prevCells[i])?[...prevCells[i]]:[]);\n ratios.push(i<prevRatios.length&&prevRatios[i]!=null?prevRatios[i]:1);\n }\n if(prevCells.length>n){\n cells[n-1]=[...cells[n-1],...prevCells.slice(n).flat()];\n }\n onChange({...row,cols:n,preset:\"custom\",cells,ratios});\n };\n const colCount=Math.max(1,row.ratios?.length||row.cells?.length||1);\n const ratioList=row.ratios?.length?row.ratios:[1];\n const updCol=(i,upd)=>{\n const styles = {...(row.columnStyles||{})};\n styles[i] = {...(styles[i]||{}), ...upd};\n set(\"columnStyles\", styles);\n };\n const setColBgMode = (mode: \"solid\" | \"image\" | \"gradient\") => {\n if (selCol === null) return;\n setColBgUiStep(mode);\n const cs = ((row.columnStyles || {})[selCol] || {}) as any;\n if (mode === \"solid\") {\n updCol(selCol, { bgGradient: null, bgImage: \"\" });\n return;\n }\n if (mode === \"image\") {\n updCol(selCol, { bgGradient: null });\n return;\n }\n updCol(selCol, {\n bgImage: \"\",\n bgGradient: cs.bgGradient || { angle: 135, colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"], stops: [0, 50, 100] },\n });\n };\n const total=ratioList.reduce((a,b)=>a+b,0)||1;\n const POS_OPTS = [\"center\",\"top\",\"bottom\",\"left\",\"right\",\"top left\",\"top right\",\"bottom left\",\"bottom right\"];\n const setRowBgMode = (mode: \"solid\" | \"image\" | \"gradient\") => {\n setRowBgUiStep(mode);\n if (mode === \"solid\") {\n set(\"bgGradient\", null);\n set(\"bgImage\", \"\");\n return;\n }\n if (mode === \"image\") {\n set(\"bgGradient\", null);\n return;\n }\n // gradient\n set(\"bgImage\", \"\");\n if (!row.bgGradient) {\n set(\"bgGradient\", { angle: 135, colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"], stops: [0, 50, 100] });\n }\n };\n return (\n <>\n {customizationHint ? (\n <div\n style={{\n fontSize: 11,\n color: C.muted,\n lineHeight: 1.45,\n marginBottom: 12,\n padding: \"8px 10px\",\n background: C.surface,\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n }}>\n {customizationHint}\n </div>\n ) : null}\n <PR label=\"Columns\" C={C}>\n <select style={IS} value={colCount} onChange={e=>applyColumnCount(+e.target.value)}>\n {[1,2,3,4,5,6].map(n=><option key={n} value={n}>{n} {n===1?\"column\":\"columns\"}</option>)}\n </select>\n </PR>\n <NumRangePx label=\"Column gap\" value={row.gap ?? 12} onChange={(n)=>set(\"gap\",n)} min={0} max={80} step={1} C={C}/>\n <NumRangePx label=\"Row padding\" value={row.padding ?? 8} onChange={(n)=>set(\"padding\",n)} min={0} max={120} step={1} C={C}/>\n <BgModeButtons value={rowBgUiStep} onChange={setRowBgMode} C={C}/>\n {rowBgUiStep === null ? (\n <div style={{ fontSize: 11, color: C.muted, marginBottom: 10, lineHeight: 1.45 }}>\n Choose Color, Gradient, or Image — the matching settings appear below.\n </div>\n ) : null}\n {rowBgUiStep === \"solid\" ? (\n <PR label=\"bg color\" C={C}>\n <div style={{display:\"flex\",gap:8,alignItems:\"center\"}}>\n <ColorSwatchGrid\n value={row.bgColor}\n C={C}\n compact\n onPick={(hex)=>set(\"bgColor\",hex===\"#ffffff\"?\"\":hex)}\n />\n <div style={{display:\"flex\",gap:5,alignItems:\"center\"}}>\n <input type=\"color\" style={CI} value={row.bgColor||\"#ffffff\"} onChange={e=>set(\"bgColor\",e.target.value===\"#ffffff\"?\"\":e.target.value)}/>\n <input type=\"text\" style={{...IS,width:120}} placeholder=\"transparent\" value={row.bgColor||\"\"} onChange={e=>set(\"bgColor\",e.target.value)}/>\n </div>\n </div>\n </PR>\n ) : null}\n {rowBgUiStep === \"image\" ? (\n <>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><ImageIcon size={13} strokeWidth={2.25} aria-hidden />bg image</span>} C={C}>\n <div style={{display:\"flex\",flexDirection:\"column\",gap:4}}>\n <input type=\"text\" style={IS} placeholder=\"https://…\" value={row.bgImage||\"\"} onChange={e=>set(\"bgImage\",e.target.value)}/>\n {onUpload && (\n <div style={{marginTop:0}}>\n <input id=\"row-bg-upload\" type=\"file\" style={{display:\"none\"}} accept=\"image/*\"\n onChange={async e=>{\n const file=e.target.files?.[0];\n if(!file)return;\n try{\n const url=await onUpload(file);\n set(\"bgImage\",url);\n }catch(err){\n console.error(\"Upload failed\",err);\n alert(\"Background upload failed\");\n }\n }}/>\n <button type=\"button\" onClick={()=>document.getElementById(\"row-bg-upload\")?.click()}\n style={{background:C.surface,border:`1px solid ${C.border}`,color:C.accent,borderRadius:5,cursor:\"pointer\",fontSize:11,padding:\"4px 10px\",width:\"100%\",fontWeight:600}}>\n <span style={{display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",gap:8}}>\n <UploadIcon size={14} strokeWidth={2.25} aria-hidden />\n <span>Upload</span>\n </span>\n </button>\n </div>\n )}\n </div>\n </PR>\n <div style={{display:\"flex\",gap:8,marginBottom:12}}>\n <div style={{flex:1}}>\n <PR label=\"fit\" C={C}>\n <select style={IS} value={row.bgSize||\"cover\"} onChange={e=>set(\"bgSize\",e.target.value)}>\n <option value=\"auto\">Auto</option>\n <option value=\"cover\">Cover</option>\n <option value=\"contain\">Contain</option>\n </select>\n </PR>\n </div>\n <div style={{flex:1}}>\n <PR label=\"repeat\" C={C}>\n <select style={IS} value={row.bgRepeat||\"no-repeat\"} onChange={e=>set(\"bgRepeat\",e.target.value)}>\n <option value=\"no-repeat\">No-Repeat</option>\n <option value=\"repeat\">Repeat</option>\n <option value=\"repeat-x\">Repeat X</option>\n <option value=\"repeat-y\">Repeat Y</option>\n </select>\n </PR>\n </div>\n <div style={{flex:1}}>\n <PR label=\"align\" C={C}>\n <select style={IS} value={row.bgPosition||\"center\"} onChange={e=>set(\"bgPosition\",e.target.value)}>\n {POS_OPTS.map(p=><option key={p} value={p}>{p}</option>)}\n </select>\n </PR>\n </div>\n </div>\n </>\n ) : null}\n\n {rowBgUiStep === \"gradient\" ? (\n <details open style={{ marginBottom: 12 }}>\n <summary style={{ cursor: \"pointer\", fontSize: 11, fontWeight: 800, color: C.text }}>gradient</summary>\n <div style={{ marginTop: 10 }}>\n <DynamicGradientField\n label=\"gradient\"\n value={row.bgGradient}\n onChange={(g)=>set(\"bgGradient\",g)}\n defaults={{ colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"] }}\n C={C}\n />\n </div>\n </details>\n ) : null}\n <PR label=\"Column Ratios\" C={C}>\n <div style={{display:\"flex\",gap:5}}>\n {ratioList.map((r,i)=>(\n <input key={i} type=\"number\" style={{...IS,flex:1}} value={r} min={1} max={12}\n onChange={e=>{const nr=[...ratioList];nr[i]=+e.target.value||1;set(\"ratios\",nr);}}/>\n ))}\n </div>\n <div style={{fontSize:10,color:C.muted,marginTop:4}}>\n {ratioList.map((r,i)=>`C${i+1}:${Math.round((r/total)*100)}%`).join(\" · \")}\n </div>\n </PR>\n\n <div style={{marginTop:20,borderTop:`1px solid ${C.border}`,paddingTop:15}}>\n <div style={{fontSize:11,fontWeight:700,color:C.text,textTransform:\"uppercase\",letterSpacing:\".05em\",marginBottom:10}}>Column Styling</div>\n <div style={{display:\"flex\",gap:4,marginBottom:12}}>\n {ratioList.map((_,i)=>(\n <button key={i} onClick={()=>setSelCol(i)}\n style={{flex:1,padding:6,fontSize:10,borderRadius:4,border:selCol===i?`1px solid ${C.accent}`:`1px solid ${C.border}`,background:selCol===i?`${C.accent}22`:\"transparent\",color:selCol===i?C.accent:C.muted,cursor:\"pointer\"}}>\n Col {i+1}\n </button>\n ))}\n </div>\n {selCol !== null && (\n <div style={{background:C.surface,padding:10,borderRadius:8,border:`1px solid ${C.border}`}}>\n <BgModeButtons value={colBgUiStep} onChange={setColBgMode} C={C} />\n {colBgUiStep === null ? (\n <div style={{ fontSize: 11, color: C.muted, marginBottom: 10, lineHeight: 1.45 }}>\n Choose Color, Gradient, or Image — then edit column background details.\n </div>\n ) : null}\n {colBgUiStep === \"solid\" ? (\n <PR label={`col ${selCol+1} bg`} C={C}>\n <div style={{display:\"flex\",gap:8,alignItems:\"center\"}}>\n <ColorSwatchGrid\n value={((row.columnStyles||{})[selCol]?.bgColor)||\"\"}\n C={C}\n compact\n onPick={(hex)=>updCol(selCol,{bgColor:hex===\"#ffffff\"?\"\":hex})}\n />\n <div style={{display:\"flex\",gap:5,alignItems:\"center\"}}>\n <input type=\"color\" style={CI} value={((row.columnStyles||{})[selCol]?.bgColor)||\"#ffffff\"} onChange={e=>updCol(selCol,{bgColor:e.target.value===\"#ffffff\"?\"\":e.target.value})}/>\n <input type=\"text\" style={{...IS,width:120}} placeholder=\"transparent\" value={((row.columnStyles||{})[selCol]?.bgColor)||\"\"} onChange={e=>updCol(selCol,{bgColor:e.target.value})}/>\n </div>\n </div>\n </PR>\n ) : null}\n {colBgUiStep === \"image\" ? (\n <>\n <PR label={<span style={{display:\"inline-flex\",alignItems:\"center\",gap:6}}><ImageIcon size={13} strokeWidth={2.25} aria-hidden />bg image</span>} C={C}>\n <div style={{display:\"flex\",flexDirection:\"column\",gap:4}}>\n <input type=\"text\" style={IS} placeholder=\"https://…\" value={((row.columnStyles||{})[selCol]?.bgImage)||\"\"} onChange={e=>updCol(selCol,{bgImage:e.target.value})}/>\n {onUpload && (\n <div style={{marginTop:0}}>\n <input id={`col-bg-upload-${selCol}`} type=\"file\" style={{display:\"none\"}} accept=\"image/*\"\n onChange={async e=>{\n const file=e.target.files?.[0];\n if(!file)return;\n try{\n const url=await onUpload(file);\n updCol(selCol,{bgImage:url});\n }catch(err){\n console.error(\"Upload failed\",err);\n alert(\"Column background upload failed\");\n }\n e.target.value=\"\";\n }}/>\n <button type=\"button\" onClick={()=>document.getElementById(`col-bg-upload-${selCol}`)?.click()}\n style={{background:C.surface,border:`1px solid ${C.border}`,color:C.accent,borderRadius:5,cursor:\"pointer\",fontSize:11,padding:\"4px 10px\",width:\"100%\",fontWeight:600}}>\n <span style={{display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",gap:8}}>\n <UploadIcon size={14} strokeWidth={2.25} aria-hidden />\n <span>Upload</span>\n </span>\n </button>\n </div>\n )}\n </div>\n </PR>\n <div style={{display:\"flex\",gap:8,marginBottom:12}}>\n <div style={{flex:1}}>\n <PR label=\"fit\" C={C}>\n <select style={IS} value={((row.columnStyles||{})[selCol]?.bgSize)||\"cover\"} onChange={e=>updCol(selCol,{bgSize:e.target.value})}>\n <option value=\"auto\">Auto</option>\n <option value=\"cover\">Cover</option>\n <option value=\"contain\">Contain</option>\n </select>\n </PR>\n </div>\n <div style={{flex:1}}>\n <PR label=\"repeat\" C={C}>\n <select style={IS} value={((row.columnStyles||{})[selCol]?.bgRepeat)||\"no-repeat\"} onChange={e=>updCol(selCol,{bgRepeat:e.target.value})}>\n <option value=\"no-repeat\">No repeat</option>\n <option value=\"repeat\">Repeat</option>\n <option value=\"repeat-x\">Repeat X</option>\n <option value=\"repeat-y\">Repeat Y</option>\n </select>\n </PR>\n </div>\n <div style={{flex:1}}>\n <PR label=\"align\" C={C}>\n <select style={IS} value={((row.columnStyles||{})[selCol]?.bgPosition)||\"center\"} onChange={e=>updCol(selCol,{bgPosition:e.target.value})}>\n {POS_OPTS.map(p=><option key={p} value={p}>{p}</option>)}\n </select>\n </PR>\n </div>\n </div>\n </>\n ) : null}\n\n {colBgUiStep === \"gradient\" ? (\n <details open style={{ marginBottom: 12 }}>\n <summary style={{ cursor: \"pointer\", fontSize: 11, fontWeight: 800, color: C.text }}>gradient</summary>\n <div style={{ marginTop: 10 }}>\n <DynamicGradientField\n label=\"gradient\"\n value={((row.columnStyles||{})[selCol]?.bgGradient)}\n onChange={(g)=>updCol(selCol,{bgGradient:g})}\n defaults={{ colors: [\"#0ea5e9\", \"#6366f1\", \"#ec4899\"] }}\n C={C}\n />\n </div>\n </details>\n ) : null}\n <PaddingEditor label=\"Column padding\" value={(row.columnStyles||{})[selCol]?.padding} onChange={(pad)=>updCol(selCol,{padding:pad})} C={C}/>\n <BorderRadiusEditor label=\"Column radius\" value={(row.columnStyles||{})[selCol]?.borderRadius} onChange={(br)=>updCol(selCol,{borderRadius:br})} C={C}/>\n </div>\n )}\n </div>\n </>\n );\n}\n\nexport { ContentBlockEditor, LayoutRowEditor, PR, NumRangePx, ColorField, ImageUrlUploadField, DynamicGradientField, BgModeButtons };\n","import { useEffect, useId, useState, type CSSProperties } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { Editor } from \"@tiptap/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport {\n TextStyle,\n Color,\n FontFamily,\n FontSize,\n LineHeight,\n} from \"@tiptap/extension-text-style\";\nimport { LetterSpacing } from \"./LetterSpacing\";\nimport { normalizeRichHtmlForStorage } from \"../../lib/htmlUtils\";\nimport {\n AlignCenter,\n AlignJustify,\n AlignLeft,\n AlignRight,\n Bold,\n Code,\n Heading2,\n Heading3,\n Heading4,\n Italic,\n Link2,\n List,\n ListOrdered,\n Maximize2,\n Minus,\n Quote,\n Redo2,\n Strikethrough,\n Type,\n Underline,\n Undo2,\n Unlink2,\n X,\n} from \"lucide-react\";\n\ntype ThemeColors = {\n border: string;\n surface: string;\n inputBg: string;\n text: string;\n muted: string;\n accent: string;\n};\n\nexport type TextTypography = {\n fontSize?: number;\n color?: string;\n align?: string;\n fontFamily?: string;\n lineHeight?: number;\n letterSpacing?: number;\n /** Number (px) or four-side box `{ top, right, bottom, left }` like block props. */\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n};\n\nconst FONTS = [\n \"Georgia,serif\",\n \"Arial,sans-serif\",\n \"Verdana,sans-serif\",\n \"'Courier New',monospace\",\n \"Trebuchet MS,sans-serif\",\n \"Impact,sans-serif\",\n];\n\nfunction paddingToCss(pad: TextTypography[\"padding\"], fallback: number): string {\n if (typeof pad === \"number\" && Number.isFinite(pad)) return `${Math.max(0, pad)}px`;\n if (pad && typeof pad === \"object\" && !Array.isArray(pad)) {\n const t = typeof pad.top === \"number\" && Number.isFinite(pad.top) ? pad.top : fallback;\n const r = typeof pad.right === \"number\" && Number.isFinite(pad.right) ? pad.right : t;\n const b = typeof pad.bottom === \"number\" && Number.isFinite(pad.bottom) ? pad.bottom : t;\n const l = typeof pad.left === \"number\" && Number.isFinite(pad.left) ? pad.left : r;\n return `${t}px ${r}px ${b}px ${l}px`;\n }\n return `${fallback}px`;\n}\n\nconst FONT_SIZE_PX = [10, 11, 12, 13, 14, 15, 16, 18, 20, 24, 28, 32, 36, 42, 48, 56, 64, 72];\nconst LINE_HEIGHT_OPTS = [\"1\", \"1.15\", \"1.25\", \"1.5\", \"1.65\", \"1.75\", \"2\", \"2.5\"];\nconst LETTER_SPACING_OPTS = [\"-0.5px\", \"0px\", \"0.5px\", \"1px\", \"1.5px\", \"2px\", \"3px\", \"4px\"];\n\nfunction hexForColorInput(color: string | undefined | null): string {\n if (!color || typeof color !== \"string\") return \"#000000\";\n const c = color.trim();\n if (/^#[0-9a-fA-F]{3,8}$/.test(c)) {\n if (c.length === 4) {\n const r = c[1];\n const g = c[2];\n const b = c[3];\n return `#${r}${r}${g}${g}${b}${b}`;\n }\n return c.slice(0, 7);\n }\n return \"#000000\";\n}\n\nfunction parsePxSize(raw: string | undefined | null): string {\n if (!raw) return \"\";\n const s = String(raw).trim();\n const m = s.match(/^([\\d.]+)\\s*px$/i);\n if (m) return m[1];\n if (/^\\d+(\\.\\d+)?$/.test(s)) return s;\n return \"\";\n}\n\nfunction normalizeLineHeightAttr(raw: string | undefined | null): string {\n if (!raw) return \"\";\n const s = String(raw).trim();\n return s;\n}\n\nfunction normalizeLetterSpacingAttr(raw: string | undefined | null): string {\n if (!raw) return \"\";\n return String(raw).trim();\n}\n\nfunction currentBlockTextAlign(editor: Editor): \"left\" | \"center\" | \"right\" | \"justify\" {\n const p = editor.getAttributes(\"paragraph\") as { textAlign?: string | null };\n const h = editor.getAttributes(\"heading\") as { textAlign?: string | null };\n const a = (p.textAlign || h.textAlign || \"left\") as string;\n if (a === \"center\" || a === \"right\" || a === \"justify\") return a;\n return \"left\";\n}\n\nfunction toolbarSelect(C: ThemeColors): CSSProperties {\n return {\n maxWidth: 120,\n padding: \"3px 5px\",\n borderRadius: 4,\n border: `1px solid ${C.border}`,\n background: C.surface,\n color: C.text,\n fontSize: 11,\n cursor: \"pointer\",\n height: 26,\n boxSizing: \"border-box\",\n };\n}\n\nconst TOOLBAR_ICON = 15;\n\nfunction toolbarBtn(C: ThemeColors, active: boolean): CSSProperties {\n return {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"4px 7px\",\n borderRadius: 4,\n border: `1px solid ${active ? C.accent : C.border}`,\n background: active ? `${C.accent}18` : C.surface,\n color: active ? C.accent : C.text,\n cursor: \"pointer\",\n fontSize: 11,\n fontWeight: 600,\n lineHeight: 1,\n };\n}\n\nfunction toolbarIconBtn(C: ThemeColors, active: boolean): CSSProperties {\n return {\n ...toolbarBtn(C, active),\n padding: 5,\n minWidth: 28,\n minHeight: 28,\n boxSizing: \"border-box\",\n };\n}\n\nfunction ToolbarTypographyControls({ editor, C }: { editor: Editor; C: ThemeColors }) {\n const sel = toolbarSelect(C);\n const ts = editor.getAttributes(\"textStyle\") as {\n color?: string | null;\n fontFamily?: string | null;\n fontSize?: string | null;\n lineHeight?: string | null;\n letterSpacing?: string | null;\n };\n const fontFamily = ts.fontFamily || \"\";\n const sizeVal = parsePxSize(ts.fontSize);\n const lhVal = normalizeLineHeightAttr(ts.lineHeight);\n const lsVal = normalizeLetterSpacingAttr(ts.letterSpacing);\n const lsSelectValue = LETTER_SPACING_OPTS.includes(lsVal) ? lsVal : lsVal || \"\";\n const align = currentBlockTextAlign(editor);\n\n return (\n <>\n <select\n title=\"Font family\"\n style={{ ...sel, maxWidth: 104 }}\n value={fontFamily}\n onChange={(e) => {\n const v = e.target.value;\n const ch = editor.chain().focus();\n if (!v) void ch.unsetFontFamily().run();\n else void ch.setFontFamily(v).run();\n }}\n >\n <option value=\"\">Font…</option>\n {FONTS.map((f) => (\n <option key={f} value={f}>\n {f.split(\",\")[0].replace(/'/g, \"\")}\n </option>\n ))}\n </select>\n <select\n title=\"Font size\"\n style={{ ...sel, maxWidth: 68 }}\n value={sizeVal}\n onChange={(e) => {\n const v = e.target.value;\n const ch = editor.chain().focus();\n if (!v) void ch.unsetFontSize().run();\n else void ch.setFontSize(`${v}px`).run();\n }}\n >\n <option value=\"\">Size</option>\n {FONT_SIZE_PX.map((n) => (\n <option key={n} value={String(n)}>\n {n}px\n </option>\n ))}\n </select>\n <select\n title=\"Line height\"\n style={{ ...sel, maxWidth: 76 }}\n value={LINE_HEIGHT_OPTS.includes(lhVal) ? lhVal : \"\"}\n onChange={(e) => {\n const v = e.target.value;\n const ch = editor.chain().focus();\n if (!v) void ch.unsetLineHeight().run();\n else void ch.setLineHeight(v).run();\n }}\n >\n <option value=\"\">Leading</option>\n {LINE_HEIGHT_OPTS.map((v) => (\n <option key={v} value={v}>\n {v}\n </option>\n ))}\n </select>\n <select\n title=\"Letter spacing\"\n style={{ ...sel, maxWidth: 80 }}\n value={lsSelectValue}\n onChange={(e) => {\n const v = e.target.value;\n const ch = editor.chain().focus();\n if (!v) void ch.unsetLetterSpacing().run();\n else void ch.setLetterSpacing(v).run();\n }}\n >\n <option value=\"\">Tracking</option>\n {LETTER_SPACING_OPTS.map((v) => (\n <option key={v} value={v}>\n {v === \"0px\" ? \"0\" : v}\n </option>\n ))}\n {lsVal && !LETTER_SPACING_OPTS.includes(lsVal) ? (\n <option value={lsVal}>{lsVal}</option>\n ) : null}\n </select>\n <input\n type=\"color\"\n title=\"Text color\"\n value={hexForColorInput(ts.color)}\n onChange={(e) => {\n void editor.chain().focus().setColor(e.target.value).run();\n }}\n style={{\n width: 28,\n height: 26,\n padding: 0,\n border: `1px solid ${C.border}`,\n borderRadius: 4,\n cursor: \"pointer\",\n background: C.surface,\n flexShrink: 0,\n }}\n />\n {(\n [\n [\"left\", AlignLeft, \"Align left\"],\n [\"center\", AlignCenter, \"Align center\"],\n [\"right\", AlignRight, \"Align right\"],\n [\"justify\", AlignJustify, \"Align justify\"],\n ] as const\n ).map(([al, Icon, title]) => (\n <button\n key={al}\n type=\"button\"\n title={title}\n aria-label={title}\n onClick={() => void editor.chain().focus().setTextAlign(al).run()}\n style={toolbarIconBtn(C, align === al)}\n >\n <Icon size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n ))}\n </>\n );\n}\n\nfunction FormattingToolbar({\n editor,\n C,\n mergeTags,\n onMergeTagInsert,\n}: {\n editor: Editor;\n C: ThemeColors;\n mergeTags?: { name: string; value: string }[];\n onMergeTagInsert?: (tagValue: string) => void;\n}) {\n const [mergeSel, setMergeSel] = useState(\"\");\n const [linkPanelOpen, setLinkPanelOpen] = useState(false);\n const [linkUrlValue, setLinkUrlValue] = useState(\"\");\n const ibtn = (active: boolean) => toolbarIconBtn(C, active);\n\n const openLinkPanel = () => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().extendMarkRange(\"link\").run();\n } else {\n editor.chain().focus().run();\n }\n const href = editor.getAttributes(\"link\").href as string | undefined;\n setLinkUrlValue(typeof href === \"string\" ? href : \"\");\n setLinkPanelOpen(true);\n };\n\n const applyLinkUrl = () => {\n const u = linkUrlValue.trim();\n if (!u) {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n }\n setLinkPanelOpen(false);\n return;\n }\n const { empty } = editor.state.selection;\n if (empty && !editor.isActive(\"link\")) {\n return;\n }\n let chain = editor.chain().focus();\n if (editor.isActive(\"link\")) {\n chain = chain.extendMarkRange(\"link\");\n }\n chain.setLink({ href: u }).run();\n setLinkPanelOpen(false);\n };\n\n const removeLinkMark = () => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n }\n setLinkPanelOpen(false);\n };\n\n const hBtn = (level: 2 | 3 | 4, Icon: typeof Heading2) => (\n <button\n type=\"button\"\n key={`h${level}`}\n onClick={() => editor.chain().focus().toggleHeading({ level }).run()}\n style={ibtn(editor.isActive(\"heading\", { level }))}\n title={`Heading ${level}`}\n aria-label={`Heading ${level}`}\n >\n <Icon size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n );\n\n const inputStyle: CSSProperties = {\n flex: 1,\n minWidth: 160,\n padding: \"6px 8px\",\n borderRadius: 4,\n border: `1px solid ${C.border}`,\n background: C.inputBg,\n color: C.text,\n fontSize: 12,\n boxSizing: \"border-box\",\n outline: \"none\",\n };\n\n const panelBtn = (primary?: boolean): CSSProperties => ({\n padding: \"6px 10px\",\n borderRadius: 4,\n border: `1px solid ${primary ? C.accent : C.border}`,\n background: primary ? `${C.accent}18` : C.surface,\n color: C.text,\n fontSize: 11,\n fontWeight: 600,\n cursor: \"pointer\",\n });\n\n return (\n <div style={{ position: \"relative\", display: \"flex\", flexDirection: \"column\" }}>\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: 4,\n padding: 6,\n borderBottom: linkPanelOpen ? \"none\" : `1px solid ${C.border}`,\n background: C.surface,\n alignItems: \"center\",\n }}\n >\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n style={{ ...ibtn(false), opacity: editor.can().undo() ? 1 : 0.4 }}\n title=\"Undo\"\n aria-label=\"Undo\"\n >\n <Undo2 size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n style={{ ...ibtn(false), opacity: editor.can().redo() ? 1 : 0.4 }}\n title=\"Redo\"\n aria-label=\"Redo\"\n >\n <Redo2 size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <span style={{ width: 1, alignSelf: \"stretch\", background: C.border, margin: \"0 2px\" }} />\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleBold().run()}\n style={ibtn(editor.isActive(\"bold\"))}\n title=\"Bold\"\n aria-label=\"Bold\"\n >\n <Bold size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleItalic().run()}\n style={ibtn(editor.isActive(\"italic\"))}\n title=\"Italic\"\n aria-label=\"Italic\"\n >\n <Italic size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n style={ibtn(editor.isActive(\"underline\"))}\n title=\"Underline\"\n aria-label=\"Underline\"\n >\n <Underline size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleStrike().run()}\n style={ibtn(editor.isActive(\"strike\"))}\n title=\"Strikethrough\"\n aria-label=\"Strikethrough\"\n >\n <Strikethrough size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleCode().run()}\n style={ibtn(editor.isActive(\"code\"))}\n title=\"Inline code\"\n aria-label=\"Inline code\"\n >\n <Code size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <span style={{ width: 1, alignSelf: \"stretch\", background: C.border, margin: \"0 2px\" }} />\n {hBtn(2, Heading2)}\n {hBtn(3, Heading3)}\n {hBtn(4, Heading4)}\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().setParagraph().run()}\n style={ibtn(editor.isActive(\"paragraph\"))}\n title=\"Paragraph\"\n aria-label=\"Paragraph\"\n >\n <Type size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <span style={{ width: 1, alignSelf: \"stretch\", background: C.border, margin: \"0 2px\" }} />\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n style={ibtn(editor.isActive(\"bulletList\"))}\n title=\"Bullet list\"\n aria-label=\"Bullet list\"\n >\n <List size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n style={ibtn(editor.isActive(\"orderedList\"))}\n title=\"Numbered list\"\n aria-label=\"Numbered list\"\n >\n <ListOrdered size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n style={ibtn(editor.isActive(\"blockquote\"))}\n title=\"Quote\"\n aria-label=\"Quote\"\n >\n <Quote size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button\n type=\"button\"\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n style={ibtn(false)}\n title=\"Horizontal rule\"\n aria-label=\"Horizontal rule\"\n >\n <Minus size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <span style={{ width: 1, alignSelf: \"stretch\", background: C.border, margin: \"0 2px\" }} />\n <ToolbarTypographyControls editor={editor} C={C} />\n <span style={{ width: 1, alignSelf: \"stretch\", background: C.border, margin: \"0 2px\" }} />\n <button\n type=\"button\"\n onClick={openLinkPanel}\n style={ibtn(editor.isActive(\"link\") || linkPanelOpen)}\n title=\"Add or edit link\"\n aria-label=\"Add or edit link\"\n aria-expanded={linkPanelOpen}\n >\n <Link2 size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n {/* Merge-tag dropdown intentionally removed from toolbar UI. */}\n <span style={{ flex: 1, minWidth: 8 }} />\n </div>\n {linkPanelOpen ? (\n <div\n role=\"dialog\"\n aria-label=\"Link URL\"\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n padding: \"8px 10px 10px\",\n borderBottom: `1px solid ${C.border}`,\n background: C.inputBg,\n }}\n >\n <label style={{ fontSize: 10, fontWeight: 700, color: C.muted, textTransform: \"uppercase\", letterSpacing: \".06em\" }}>\n Link URL\n </label>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: 6, alignItems: \"center\" }}>\n <input\n type=\"url\"\n value={linkUrlValue}\n onChange={(e) => setLinkUrlValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n applyLinkUrl();\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n setLinkPanelOpen(false);\n }\n }}\n placeholder=\"https://example.com\"\n autoFocus\n style={inputStyle}\n />\n <button type=\"button\" onClick={applyLinkUrl} style={panelBtn(true)}>\n Apply\n </button>\n <button\n type=\"button\"\n onClick={removeLinkMark}\n disabled={!editor.isActive(\"link\")}\n title=\"Remove link\"\n aria-label=\"Remove link\"\n style={{\n ...toolbarIconBtn(C, false),\n opacity: editor.isActive(\"link\") ? 1 : 0.35,\n cursor: editor.isActive(\"link\") ? \"pointer\" : \"not-allowed\",\n }}\n >\n <Unlink2 size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n <button type=\"button\" onClick={() => setLinkPanelOpen(false)} style={panelBtn()}>\n Close\n </button>\n </div>\n {editor.state.selection.empty && !editor.isActive(\"link\") ? (\n <span style={{ fontSize: 10, color: C.muted, lineHeight: 1.4 }}>\n Select text in the editor, then enter a URL and click Apply.\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\nconst chromeTitleStyle = (C: ThemeColors): CSSProperties => ({\n fontSize: 11,\n fontWeight: 700,\n color: C.text,\n textTransform: \"uppercase\",\n letterSpacing: \".05em\",\n});\n\nexport function TextRichEditor({\n value,\n onChange,\n typography,\n mergeTags,\n onMergeTagInsert,\n placeholder = \"Write your message…\",\n headerTitle = \"Rich editor\",\n C,\n}: {\n value: string;\n onChange: (html: string) => void;\n typography: TextTypography;\n mergeTags?: { name: string; value: string }[];\n onMergeTagInsert?: (tagValue: string) => void;\n placeholder?: string;\n /** Shown on the compact chrome row (with expand) and as the expanded modal title. */\n headerTitle?: string;\n C: ThemeColors;\n}) {\n const [expanded, setExpanded] = useState(false);\n const expandedTitleId = useId();\n\n const editor = useEditor({\n extensions: [\n /** StarterKit v3 includes Link + Underline — configure them here instead of registering twice. */\n StarterKit.configure({\n heading: { levels: [2, 3, 4] },\n link: {\n openOnClick: false,\n HTMLAttributes: { style: \"color: inherit;\" },\n },\n }),\n TextStyle,\n Color,\n FontFamily,\n FontSize,\n LineHeight,\n LetterSpacing,\n TextAlign.configure({\n types: [\"heading\", \"paragraph\", \"blockquote\"],\n }),\n Placeholder.configure({ placeholder }),\n ],\n content: normalizeRichHtmlForStorage(value),\n onUpdate: ({ editor: ed }) => {\n onChange(normalizeRichHtmlForStorage(ed.getHTML()));\n },\n editorProps: {\n attributes: {\n style: \"min-height:inherit;outline:none;padding:10px 12px;\",\n },\n /** `openOnClick: false` does not call preventDefault — browser would still follow href. */\n handleDOMEvents: {\n click: (view, event) => {\n const t = event.target as HTMLElement | null;\n if (!t) return false;\n const anchor = t.closest(\"a[href]\");\n if (!anchor || !view.dom.contains(anchor)) return false;\n event.preventDefault();\n return true;\n },\n },\n },\n });\n\n useEffect(() => {\n if (!editor) return;\n const cur = normalizeRichHtmlForStorage(editor.getHTML());\n const next = normalizeRichHtmlForStorage(value);\n if (next !== cur) {\n editor.commands.setContent(next, { emitUpdate: false });\n }\n }, [value, editor]);\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n if (expanded) setExpanded(false);\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [expanded]);\n\n const editorWrapStyle = (forModal: boolean): CSSProperties => ({\n fontSize: typography.fontSize ?? 15,\n color: typography.color ?? C.text,\n fontFamily: typography.fontFamily ?? \"Georgia,serif\",\n textAlign: (typography.align as CSSProperties[\"textAlign\"]) || \"left\",\n lineHeight: typography.lineHeight ?? 1.65,\n letterSpacing: typography.letterSpacing ?? 0,\n padding: paddingToCss(typography.padding, 12),\n minHeight: forModal ? \"min(52vh, 480px)\" : 160,\n flex: 1,\n minWidth: 0,\n });\n\n const proseStyle = `\n .email-text-rich-editor .ProseMirror { min-height: inherit; outline: none; }\n .email-text-rich-editor .ProseMirror a { cursor: text; }\n /* TipTap Placeholder extension: empty nodes get .is-empty + data-placeholder (no default CSS in package). */\n .email-text-rich-editor .ProseMirror p.is-empty::before,\n .email-text-rich-editor .ProseMirror h2.is-empty::before,\n .email-text-rich-editor .ProseMirror h3.is-empty::before,\n .email-text-rich-editor .ProseMirror h4.is-empty::before,\n .email-text-rich-editor .ProseMirror blockquote.is-empty::before {\n content: attr(data-placeholder);\n float: left;\n height: 0;\n color: ${C.muted};\n pointer-events: none;\n font-style: italic;\n font-weight: 400;\n }\n .email-text-rich-editor .ProseMirror ul,\n .email-text-rich-editor .ProseMirror ol { padding-left: 1.25rem; margin: 0.35em 0; }\n .email-text-rich-editor .ProseMirror p { margin: 0.35em 0; }\n .email-text-rich-editor .ProseMirror h2,\n .email-text-rich-editor .ProseMirror h3,\n .email-text-rich-editor .ProseMirror h4 { margin: 0.5em 0 0.25em; line-height: 1.25; }\n .email-text-rich-editor .ProseMirror blockquote { margin: 0.35em 0; padding-left: 0.75rem; border-left: 3px solid ${C.border}; }\n `;\n\n /** Formatting toolbar + editor (block wrapper styles still from `typography`). */\n const compactLayout = editor ? (\n <div\n style={{\n border: `1px solid ${C.border}`,\n borderRadius: 6,\n background: C.inputBg,\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"calc(100vh - 180px)\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 8,\n padding: \"8px 10px\",\n borderBottom: `1px solid ${C.border}`,\n background: C.surface,\n flexShrink: 0,\n }}\n >\n <span style={chromeTitleStyle(C)}>{headerTitle}</span>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n style={toolbarIconBtn(C, false)}\n title=\"Expand editor\"\n aria-label=\"Expand editor\"\n >\n <Maximize2 size={TOOLBAR_ICON} strokeWidth={2.25} aria-hidden />\n </button>\n </div>\n <FormattingToolbar\n editor={editor}\n C={C}\n mergeTags={mergeTags}\n onMergeTagInsert={onMergeTagInsert}\n />\n <style>{proseStyle}</style>\n <div\n style={{\n position: \"relative\",\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n <div\n className=\"email-text-rich-editor\"\n style={{ ...editorWrapStyle(false), overflowY: \"auto\" }}\n >\n <EditorContent editor={editor} />\n </div>\n </div>\n </div>\n ) : (\n <div\n style={{\n border: `1px solid ${C.border}`,\n borderRadius: 6,\n background: C.inputBg,\n minHeight: 200,\n }}\n />\n );\n\n /** Modal: same floating layout panel on the right inside the editor area. */\n const modalBody = editor ? (\n <div\n style={{\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n border: `1px solid ${C.border}`,\n borderRadius: 8,\n overflow: \"hidden\",\n background: C.inputBg,\n }}\n >\n <FormattingToolbar\n editor={editor}\n C={C}\n mergeTags={mergeTags}\n onMergeTagInsert={onMergeTagInsert}\n />\n <style>{proseStyle}</style>\n <div\n style={{\n position: \"relative\",\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n <div\n className=\"email-text-rich-editor\"\n style={{ ...editorWrapStyle(true), overflowY: \"auto\" }}\n >\n <EditorContent editor={editor} />\n </div>\n </div>\n </div>\n ) : null;\n\n if (!editor) {\n return compactLayout;\n }\n\n return (\n <>\n {!expanded && compactLayout}\n {expanded &&\n createPortal(\n <div\n role=\"dialog\"\n aria-modal\n aria-labelledby={expandedTitleId}\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 100000,\n background: \"rgba(15,23,42,0.55)\",\n backdropFilter: \"blur(6px)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 16,\n }}\n onClick={(e) => {\n if (e.target === e.currentTarget) setExpanded(false);\n }}\n >\n <div\n style={{\n width: \"min(1100px, 100%)\",\n height: \"min(92vh, 920px)\",\n maxHeight: \"min(92vh, 920px)\",\n background: C.surface,\n border: `1px solid ${C.border}`,\n borderRadius: 12,\n boxShadow: \"0 24px 80px rgba(0,0,0,0.35)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n flexShrink: 0,\n padding: \"12px 14px\",\n borderBottom: `1px solid ${C.border}`,\n background: C.surface,\n }}\n >\n <span id={expandedTitleId} style={{ ...chromeTitleStyle(C), fontSize: 12, letterSpacing: \".06em\" }}>\n {headerTitle}\n </span>\n <button\n type=\"button\"\n onClick={() => setExpanded(false)}\n style={toolbarIconBtn(C, false)}\n title=\"Close\"\n aria-label=\"Close expanded editor\"\n >\n <X size={TOOLBAR_ICON + 1} strokeWidth={2.25} aria-hidden />\n </button>\n </div>\n <div\n style={{\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n padding: \"12px 14px 14px\",\n overflow: \"hidden\",\n }}\n >\n {modalBody}\n </div>\n </div>\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { Extension } from \"@tiptap/core\";\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n letterSpacing: {\n setLetterSpacing: (letterSpacing: string) => ReturnType;\n unsetLetterSpacing: () => ReturnType;\n };\n }\n}\n\ndeclare module \"@tiptap/extension-text-style\" {\n interface TextStyleAttributes {\n letterSpacing?: string | null;\n }\n}\n\n/** Inline letter-spacing on the `textStyle` mark (same pattern as FontSize / LineHeight). */\nexport const LetterSpacing = Extension.create({\n name: \"letterSpacing\",\n addOptions() {\n return { types: [\"textStyle\"] as string[] };\n },\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n letterSpacing: {\n default: null,\n parseHTML: (element) => {\n const v = element.style.letterSpacing;\n return v?.replace(/['\"]+/g, \"\").trim() || null;\n },\n renderHTML: (attributes) => {\n if (!attributes.letterSpacing) {\n return {};\n }\n return { style: `letter-spacing: ${attributes.letterSpacing}` };\n },\n },\n },\n },\n ];\n },\n addCommands() {\n return {\n setLetterSpacing:\n (letterSpacing: string) =>\n ({ chain }) =>\n chain().setMark(\"textStyle\", { letterSpacing }).run(),\n unsetLetterSpacing:\n () =>\n ({ chain }) =>\n chain().setMark(\"textStyle\", { letterSpacing: null }).removeEmptyTextStyle().run(),\n };\n },\n});\n","/** Preset swatches shown in two rows (8 columns × 2 rows). */\nconst COLOR_SWATCHES = [\n \"#000000\", \"#ffffff\", \"#64748b\", \"#94a3b8\",\n \"#ef4444\", \"#f97316\", \"#eab308\", \"#22c55e\",\n \"#14b8a6\", \"#0ea5e9\", \"#3b82f6\", \"#6366f1\",\n \"#8b5cf6\", \"#a855f7\", \"#ec4899\", \"#78716c\",\n];\n\nexport function ColorSwatchGrid({\n value,\n onPick,\n C,\n compact = false,\n}: {\n value: string | undefined;\n onPick: (hex: string) => void;\n C: { border: string; accent: string };\n /** Toolbar-friendly smaller swatches in one dense row (wraps). */\n compact?: boolean;\n}) {\n const norm = (v: string | undefined) => (v || \"\").trim().toLowerCase();\n const current = norm(value);\n const cell = compact ? 16 : undefined;\n return (\n <div\n style={\n compact\n ? {\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: 3,\n alignItems: \"center\",\n flex: \"1 1 120px\",\n minWidth: 0,\n }\n : {\n display: \"grid\",\n gridTemplateColumns: \"repeat(8, minmax(0, 1fr))\",\n gap: 4,\n marginBottom: 2,\n }\n }\n >\n {COLOR_SWATCHES.map((hex) => {\n const active = current === hex.toLowerCase();\n return (\n <button\n key={hex}\n type=\"button\"\n title={hex}\n onClick={() => onPick(hex)}\n style={{\n boxSizing: \"border-box\",\n margin: 0,\n padding: 0,\n width: cell ?? \"100%\",\n height: cell,\n aspectRatio: compact ? undefined : \"1\",\n minHeight: 0,\n minWidth: compact ? cell : 0,\n borderRadius: compact ? 3 : 4,\n border: active ? `2px solid ${C.accent}` : `1px solid ${C.border}`,\n background: hex,\n cursor: \"pointer\",\n flexShrink: 0,\n boxShadow: hex.toLowerCase() === \"#ffffff\" ? `inset 0 0 0 1px ${C.border}` : undefined,\n }}\n />\n );\n })}\n </div>\n );\n}\n","import {\n useState,\n useEffect,\n useMemo,\n useRef,\n useLayoutEffect,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { Monitor, Smartphone, Tablet, Columns2 } from \"lucide-react\";\nimport { previewEmailSrcDoc } from \"../../lib/emailHtml\";\n\nexport type MobilePreviewVariant = \"iphone\" | \"android\";\n\nexport type EmailPreviewModalProps = {\n html: string;\n contentWidth?: number;\n rowCount?: number;\n blockCount?: number;\n editorZoom?: number;\n locale?: string;\n initialDevice?: string;\n /** Phone shell in mobile / split view: iPhone vs Android frame + viewport width. */\n initialMobileVariant?: MobilePreviewVariant;\n onClose: () => void;\n C: Record<string, string>;\n /** Shown as the header line (e.g. email subject). */\n title?: string;\n secondaryActionLabel?: string;\n onSecondaryAction?: () => void;\n};\n\n// ─── PREVIEW MODAL ───────────────────────────────────────────────────────────\nconst DEVICES = [\n {\n key:\"desktop\", label:\"Desktop\", maxW:1024,\n screenW:null, screenH:null,\n frame: null,\n },\n {\n key:\"tablet\", label:\"Tablet\", maxW:820,\n screenW:820, screenH:1180,\n chrome: {\n body: { width:860, borderRadius:18, background:\"linear-gradient(145deg,#2a2a3a,#1a1a28)\", padding:\"14px 14px 20px\", boxShadow:\"0 0 0 1px #444,0 30px 80px rgba(0,0,0,.7),inset 0 1px 0 rgba(255,255,255,.08)\" },\n topBar: { height:20, display:\"flex\", alignItems:\"center\", justifyContent:\"center\", marginBottom:10 },\n topBarInner: { width:60, height:6, borderRadius:3, background:\"#333\" },\n bottomBar: { height:16, display:\"flex\", alignItems:\"center\", justifyContent:\"center\", marginTop:10 },\n homeIndicator: { width:100, height:4, borderRadius:2, background:\"#444\" },\n screen: { borderRadius:10, overflow:\"hidden\", border:\"2px solid #111\" },\n },\n },\n {\n key:\"mobile\", label:\"Mobile\", maxW:390,\n screenW:390, screenH:844,\n chrome: {\n body: { width:430, borderRadius:52, background:\"linear-gradient(145deg,#2a2a3a,#1a1a28)\", padding:\"16px 16px 24px\", boxShadow:\"0 0 0 1px #555,0 40px 100px rgba(0,0,0,.8),inset 0 1px 0 rgba(255,255,255,.1)\" },\n notch: true,\n sideButtons: true,\n topBar: { height:30, display:\"flex\", alignItems:\"flex-start\", justifyContent:\"center\", paddingTop:8, marginBottom:4 },\n topBarInner: null,\n bottomBar: { height:24, display:\"flex\", alignItems:\"center\", justifyContent:\"center\", marginTop:6 },\n homeIndicator: { width:120, height:5, borderRadius:3, background:\"#555\" },\n screen: { borderRadius:42, overflow:\"hidden\", border:\"2px solid #111\" },\n },\n },\n];\n\n/** Logical points (viewport) — drives `previewEmailSrcDoc` and device aspect ratio. */\nconst MOBILE_IPHONE = { logicalW: 390, logicalH: 844, label: \"iPhone\", outerRadius: 46, innerRadius: 38 };\nconst MOBILE_ANDROID = { logicalW: 412, logicalH: 915, label: \"Android\", outerRadius: 32, innerRadius: 20 };\n\nfunction previewIframeWidthPx(deviceKey: \"mobile\" | \"tablet\", mobileVariant: MobilePreviewVariant = \"iphone\"): number {\n if (deviceKey === \"tablet\") {\n const d = DEVICES.find((x) => x.key === \"tablet\");\n return d?.maxW ?? 820;\n }\n return mobileVariant === \"android\" ? MOBILE_ANDROID.logicalW : MOBILE_IPHONE.logicalW;\n}\n\nfunction PreviewDeviceIcon({ devKey, color }) {\n const p = { size: 15, strokeWidth: 1.75, color: color || \"currentColor\", style: { display: \"block\", flexShrink: 0 } };\n if (devKey === \"desktop\") return <Monitor {...p} />;\n if (devKey === \"tablet\") return <Tablet {...p} />;\n return <Smartphone {...p} />;\n}\n\nfunction BrowserBar({ url, C }) {\n const icon = C.muted;\n return (\n <div style={{ background: C.toolbarBg, padding: \"8px 12px\", display: \"flex\", alignItems: \"center\", gap: 8, borderBottom: `1px solid ${C.border}`, flexShrink: 0 }}>\n <div style={{ display: \"flex\", gap: 5 }}>\n {[\"#ef4444\", \"#f59e0b\", \"#22c55e\"].map((col) => (\n <div key={col} style={{ width: 10, height: 10, borderRadius: \"50%\", background: col }} />\n ))}\n </div>\n <div style={{ flex: 1, background: C.surface, borderRadius: 6, padding: \"4px 10px\", display: \"flex\", alignItems: \"center\", gap: 6, border: `1px solid ${C.border}` }}>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\"><path d=\"M5 1a4 4 0 100 8A4 4 0 005 1z\" stroke={icon} strokeWidth=\"1.2\"/><path d=\"M5 1v8M1 5h8M2.3 2.3l5.4 5.4M7.7 2.3L2.3 7.7\" stroke={icon} strokeWidth=\".8\"/></svg>\n <span style={{ fontSize: 11, color: C.muted, fontFamily: \"monospace\", letterSpacing: \".02em\" }}>{url || \"email-preview\"}</span>\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill={icon} style={{ marginLeft: \"auto\" }}><path d=\"M1 4a3 3 0 106 0A3 3 0 001 4z\"/></svg>\n </div>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle cx=\"7\" cy=\"7\" r=\"5.5\" stroke={icon} strokeWidth=\"1.2\"/>\n <path d=\"M7 4.5v3l2 1.5\" stroke={icon} strokeWidth=\"1.2\" strokeLinecap=\"round\"/>\n </svg>\n </div>\n );\n}\n\nfunction StatusBar({ time, C, variant = \"light\" }) {\n const dark = variant === \"dark\";\n const ink = dark ? \"#f5f5f7\" : C.text;\n const barBg = dark ? \"#000000\" : C.toolbarBg;\n const hair = dark ? \"#2c2c2e\" : C.border;\n return (\n <div style={{ background: barBg, height: 44, display: \"flex\", alignItems: \"flex-end\", justifyContent: \"space-between\", padding: \"0 24px 8px\", flexShrink: 0, borderBottom: `1px solid ${hair}` }}>\n <span style={{ fontSize: 12, fontWeight: 700, color: ink, letterSpacing: \".04em\" }}>{time}</span>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <svg width=\"14\" height=\"10\" viewBox=\"0 0 14 10\" fill={ink} opacity=\".75\"><rect x=\"0\" y=\"4\" width=\"2\" height=\"6\" rx=\"1\"/><rect x=\"3\" y=\"3\" width=\"2\" height=\"7\" rx=\"1\"/><rect x=\"6\" y=\"1\" width=\"2\" height=\"9\" rx=\"1\"/><rect x=\"9\" y=\"0\" width=\"2\" height=\"10\" rx=\"1\"/></svg>\n <svg width=\"14\" height=\"10\" viewBox=\"0 0 16 12\" fill={ink} opacity=\".75\"><path d=\"M8 2.4C5.6 2.4 3.4 3.4 1.8 5L0 3.2C2.2 1.2 5 0 8 0s5.8 1.2 8 3.2L14.2 5C12.6 3.4 10.4 2.4 8 2.4z\"/><path d=\"M8 6c-1.6 0-3 .7-4 1.7L2.4 6.2C3.8 4.8 5.8 4 8 4s4.2.8 5.6 2.2L12 7.7C11 6.7 9.6 6 8 6z\"/><circle cx=\"8\" cy=\"11\" r=\"1.5\"/></svg>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <div style={{ width: 18, height: 9, border: `1.5px solid ${ink}`, borderRadius: 2, display: \"flex\", alignItems: \"center\", padding: \"1px\", opacity: 0.75 }}>\n <div style={{ width: \"70%\", height: \"100%\", background: ink, borderRadius: 1 }} />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction AndroidStatusBar({ time }: { time: string }) {\n const ink = \"#e8eaed\";\n return (\n <div\n style={{\n background: \"#1a1a1c\",\n height: 48,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"0 18px 0 20px\",\n flexShrink: 0,\n borderBottom: \"1px solid #2d2d30\",\n }}\n >\n <span style={{ fontSize: 14, fontWeight: 600, color: ink, letterSpacing: \".02em\" }}>{time}</span>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n <svg width=\"16\" height=\"10\" viewBox=\"0 0 16 10\" fill=\"none\" stroke={ink} strokeWidth={1.2} opacity={0.9}>\n <path d=\"M8 9a5 5 0 000-8M3 5a3 3 0 105 0M5.5 5a1.5 1.5 0 103 0\" strokeLinecap=\"round\" />\n </svg>\n <svg width=\"14\" height=\"10\" viewBox=\"0 0 14 10\" fill={ink} opacity={0.9}>\n <rect x=\"1\" y=\"7\" width=\"2\" height=\"2\" rx=\"0.5\" />\n <rect x=\"4.5\" y=\"5\" width=\"2\" height=\"4\" rx=\"0.5\" />\n <rect x=\"8\" y=\"3\" width=\"2\" height=\"6\" rx=\"0.5\" />\n <rect x=\"11\" y=\"1\" width=\"2\" height=\"8\" rx=\"0.5\" />\n </svg>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 2, border: `1.5px solid ${ink}`, borderRadius: 3, padding: \"2px 5px\", opacity: 0.95 }}>\n <div style={{ width: 14, height: 7, borderRadius: 1, background: ink, opacity: 0.35 }} />\n <div style={{ width: 1, height: 5, background: ink, borderRadius: 1 }} />\n </div>\n </div>\n </div>\n );\n}\n\n/** Aspect-ratio–locked shell; iframe fills remaining height below system chrome. */\nfunction MobileDeviceChrome({\n variant,\n children,\n C,\n}: {\n variant: MobilePreviewVariant;\n children: ReactNode;\n C: Record<string, string>;\n}) {\n const spec = variant === \"android\" ? MOBILE_ANDROID : MOBILE_IPHONE;\n const now = new Date();\n const time = `${now.getHours().toString().padStart(2, \"0\")}:${now.getMinutes().toString().padStart(2, \"0\")}`;\n const frameShell =\n variant === \"android\"\n ? \"linear-gradient(160deg, #3a3a3e 0%, #252528 40%, #1a1a1d 100%)\"\n : \"linear-gradient(165deg, #1c1c1e 0%, #000000 48%, #0d0d0f 100%)\";\n const sideBtn = \"#2c2c2e\";\n const screenBorder = variant === \"android\" ? \"#0d0d0f\" : \"#0a0a0a\";\n\n /** Fixed CSS width so iframe viewport + aspect ratio stay correct; parent scales to fit viewport. */\n const frameOuterW = spec.logicalW + (variant === \"android\" ? 20 : 18);\n\n return (\n <div\n style={{\n width: frameOuterW,\n aspectRatio: `${spec.logicalW} / ${spec.logicalH}`,\n boxSizing: \"border-box\",\n borderRadius: spec.outerRadius,\n background: frameShell,\n padding: variant === \"android\" ? \"5px 5px 6px\" : \"0 3px 3px\",\n boxShadow: \"0 0 0 1px #000, 0 32px 72px rgba(0,0,0,.55)\",\n position: \"relative\",\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n {variant === \"iphone\" ? (\n <>\n <div style={{ position: \"absolute\", left: -3, top: \"18%\", width: 3, height: 32, background: sideBtn, borderRadius: \"2px 0 0 2px\", zIndex: 2 }} />\n <div style={{ position: \"absolute\", left: -3, top: \"26%\", width: 3, height: 60, background: sideBtn, borderRadius: \"2px 0 0 2px\", zIndex: 2 }} />\n <div style={{ position: \"absolute\", left: -3, top: \"34%\", width: 3, height: 60, background: sideBtn, borderRadius: \"2px 0 0 2px\", zIndex: 2 }} />\n <div style={{ position: \"absolute\", right: -3, top: \"28%\", width: 3, height: 80, background: sideBtn, borderRadius: \"0 2px 2px 0\", zIndex: 2 }} />\n </>\n ) : null}\n\n <div\n style={{\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n borderRadius: spec.innerRadius,\n overflow: \"hidden\",\n border: `2px solid ${screenBorder}`,\n background: \"#000\",\n }}\n >\n {variant === \"iphone\" ? (\n <>\n <StatusBar time={time} C={C} variant=\"dark\" />\n <div style={{ position: \"relative\", background: \"#000\", marginTop: -1, minHeight: 28, flexShrink: 0 }}>\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 110,\n height: 28,\n background: \"#000\",\n borderRadius: \"0 0 18px 18px\",\n zIndex: 10,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n }}\n >\n <div style={{ width: 10, height: 10, borderRadius: \"50%\", background: \"#1c1c1e\", border: \"2px solid #3a3a3c\" }} />\n <div style={{ width: 54, height: 5, borderRadius: 3, background: \"#3a3a3c\" }} />\n </div>\n </div>\n </>\n ) : (\n <div style={{ position: \"relative\", flexShrink: 0 }}>\n <AndroidStatusBar time={time} />\n <div\n style={{\n position: \"absolute\",\n top: 10,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 12,\n height: 12,\n borderRadius: \"50%\",\n background: \"#0a0a0c\",\n border: \"2px solid #2a2a2e\",\n zIndex: 5,\n pointerEvents: \"none\",\n }}\n />\n </div>\n )}\n\n <div\n style={{\n flex: 1,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n background: \"#fff\",\n padding: 10,\n boxSizing: \"border-box\",\n }}\n >\n <div style={{ flex: 1, minHeight: 0, width: \"100%\", position: \"relative\" }}>{children}</div>\n </div>\n\n {variant === \"iphone\" ? (\n <div style={{ background: \"#fff\", height: 22, flexShrink: 0, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>\n <div style={{ width: 120, height: 5, borderRadius: 3, background: \"#d1d5db\" }} />\n </div>\n ) : (\n <div style={{ background: \"#0f0f10\", height: 26, flexShrink: 0, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>\n <div style={{ width: 112, height: 4, borderRadius: 4, background: \"#4a4a52\" }} />\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/** Scales the phone shell to fit the preview pane (short viewports, split view) without changing iframe logical width. */\nfunction MobilePhoneScaleSlot({ variantKey, children }: { variantKey: MobilePreviewVariant; children: ReactNode }) {\n const containerRef = useRef<HTMLDivElement>(null);\n const phoneRef = useRef<HTMLDivElement>(null);\n const [fit, setFit] = useState({ s: 1, w: 0, h: 0 });\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n const phone = phoneRef.current;\n if (!container || !phone) return;\n\n const run = () => {\n const cw = container.clientWidth;\n const ch = container.clientHeight;\n const pw = phone.offsetWidth;\n const ph = phone.offsetHeight;\n if (cw < 12 || ch < 12 || pw < 12 || ph < 12) return;\n const pad = 20;\n const raw = Math.min(1, (cw - pad) / pw, (ch - pad) / ph);\n const s = Number.isFinite(raw) ? Math.max(0.2, raw) : 1;\n setFit({ s, w: pw * s, h: ph * s });\n };\n\n const ro = new ResizeObserver(run);\n ro.observe(container);\n ro.observe(phone);\n run();\n const t = window.setTimeout(run, 0);\n const raf = window.requestAnimationFrame(run);\n return () => {\n ro.disconnect();\n window.clearTimeout(t);\n window.cancelAnimationFrame(raf);\n };\n }, [variantKey]);\n\n return (\n <div\n ref={containerRef}\n style={{\n flex: 1,\n minHeight: 0,\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n width: fit.w > 0 ? fit.w : undefined,\n height: fit.h > 0 ? fit.h : undefined,\n minWidth: 0,\n minHeight: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <div\n style={{\n transform: `scale(${fit.s})`,\n transformOrigin: \"center center\",\n willChange: \"transform\",\n }}\n >\n <div ref={phoneRef} style={{ width: \"max-content\" }}>\n {children}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction TabletChrome({ children, C }) {\n const shell = `linear-gradient(145deg, ${C.canvas} 0%, ${C.surface} 50%, ${C.border} 100%)`;\n return (\n <div style={{ width: \"max-content\", maxWidth: \"100%\", boxSizing: \"border-box\", borderRadius: 18, background: shell, padding: \"14px 14px 20px\", boxShadow: `0 0 0 1px ${C.border}, 0 24px 56px rgba(15,23,42,.1), inset 0 1px 0 #fff`, flexShrink: 0 }}>\n <div style={{ height: 16, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", marginBottom: 10 }}>\n <div style={{ width: 60, height: 5, borderRadius: 3, background: C.muted, opacity: 0.5 }} />\n </div>\n <div style={{ borderRadius: 10, overflow: \"hidden\", border: `2px solid ${C.border}`, background: \"#fff\" }}>\n <BrowserBar url=\"email-preview\" C={C} />\n <div style={{ overflow: \"hidden\", background: \"#fff\", minHeight: 0, padding: 12 }}>{children}</div>\n </div>\n <div style={{ height: 18, display: \"flex\", alignItems: \"center\", justifyContent: \"center\", marginTop: 10 }}>\n <div style={{ width: 100, height: 4, borderRadius: 2, background: C.muted, opacity: 0.45 }} />\n </div>\n </div>\n );\n}\n\nfunction DesktopChrome({ children, C, maxW }) {\n return (\n <div style={{ width: \"100%\", maxWidth: maxW, borderRadius: 10, overflow: \"hidden\", boxShadow: `0 16px 48px rgba(15,23,42,.1), 0 0 0 1px ${C.border}`, border: `1px solid ${C.border}`, background: C.sidebar }}>\n <BrowserBar url=\"email-preview\" C={C} />\n <div style={{ background: \"#fff\", overflow: \"hidden\", minHeight: 0, padding: 12 }}>{children}</div>\n </div>\n );\n}\n\nfunction PreviewModal({\n html,\n contentWidth,\n rowCount = 0,\n blockCount = 0,\n editorZoom = 100,\n locale = \"en\",\n initialDevice,\n initialMobileVariant = \"iphone\",\n onClose,\n C,\n title,\n secondaryActionLabel,\n onSecondaryAction,\n}: EmailPreviewModalProps) {\n const [dev, setDev] = useState(initialDevice || \"desktop\");\n const [zoom, setZoom] = useState(100);\n const [split, setSplit] = useState(false);\n const [mobileVariant, setMobileVariant] = useState<MobilePreviewVariant>(initialMobileVariant);\n\n useEffect(() => {\n const h = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [onClose]);\n\n // Reset zoom when device changes\n useEffect(() => setZoom(100), [dev]);\n\n /** Desktop: fill chrome. Mobile/tablet: fixed CSS width on the iframe so `srcDoc` layout viewport matches device (responsive CSS applies). */\n const iframeHDesktop = \"min(720px, calc(100vh - 200px))\";\n const mobileIframeW = previewIframeWidthPx(\"mobile\", mobileVariant);\n const tabletIframeW = previewIframeWidthPx(\"tablet\");\n const srcDocMobile = useMemo(() => previewEmailSrcDoc(html, mobileIframeW), [html, mobileIframeW]);\n const srcDocTablet = useMemo(() => previewEmailSrcDoc(html, tabletIframeW), [html, tabletIframeW]);\n\n const IframeContent = ({\n srcDoc,\n title: iframeTitle,\n iframeWidth,\n fill,\n style: s = {},\n }: {\n srcDoc: string;\n title: string;\n iframeWidth?: number;\n /** Fill parent (e.g. phone shell); use with a `position: relative` flex child. */\n fill?: boolean;\n style?: CSSProperties;\n }) => (\n <iframe\n srcDoc={srcDoc}\n title={iframeTitle}\n width={iframeWidth}\n scrolling=\"yes\"\n style={{\n border: \"none\",\n display: \"block\",\n boxSizing: \"border-box\",\n ...(fill\n ? {\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n maxWidth: \"100%\",\n overflow: \"auto\",\n }\n : iframeWidth != null\n ? {\n width: iframeWidth,\n maxWidth: \"min(100%, calc(100vw - 80px))\",\n }\n : {\n width: \"100%\",\n maxWidth: \"100%\",\n }),\n ...(!fill ? { height: iframeHDesktop, minHeight: iframeWidth != null ? 220 : 280 } : { minHeight: 0 }),\n ...s,\n }}\n sandbox=\"allow-same-origin allow-scripts\"\n />\n );\n\n const deviceBg = C.canvas;\n const hairline = C.border;\n const tabInactiveBg = \"transparent\";\n const tabInactiveFg = C.muted;\n const tabActiveBg = C.accent;\n const tabActiveFg = \"#fff\";\n\n const previewBodyStretchMobile = dev === \"mobile\" || split;\n const previewBodyPadding = previewBodyStretchMobile ? \"12px 16px\" : \"28px 32px\";\n\n return (\n <div style={{ position: \"fixed\", inset: 0, zIndex: 9000, background: \"rgba(15, 23, 42, 0.45)\", backdropFilter: \"blur(12px)\", display: \"flex\", flexDirection: \"column\", overflow: \"hidden\" }}>\n <style>{`\n @keyframes pmSlideIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}\n @keyframes devicePop{from{opacity:0;transform:scale(.94) translateY(16px)}to{opacity:1;transform:scale(1) translateY(0)}}\n .pm-device{animation:devicePop .22s cubic-bezier(.34,1.56,.64,1);}\n `}</style>\n\n {/* ── HEADER: subject left · device + zoom · actions right ── */}\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10, padding: \"8px 16px\", background: C.toolbarBg, borderBottom: `1px solid ${hairline}`, flexShrink: 0, animation: \"pmSlideIn .16s ease\" }}>\n\n <span\n style={{\n flex: 1,\n minWidth: 0,\n fontWeight: 700,\n fontSize: 14,\n color: C.text,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={title || undefined}\n >\n {title?.trim() ? title : \"\\u2014\"}\n </span>\n\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, flexShrink: 0 }}>\n <div style={{ display: \"flex\", gap: 2, background: C.surface, padding: 3, borderRadius: 8, border: `1px solid ${hairline}` }}>\n {DEVICES.map((d) => (\n <button\n key={d.key}\n type=\"button\"\n title={d.label}\n aria-label={d.label}\n onClick={() => {\n setDev(d.key);\n setSplit(false);\n }}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 34,\n height: 30,\n padding: 0,\n borderRadius: 6,\n border: \"none\",\n cursor: \"pointer\",\n transition: \"all .15s\",\n background: dev === d.key && !split ? tabActiveBg : tabInactiveBg,\n color: dev === d.key && !split ? tabActiveFg : tabInactiveFg,\n }}\n >\n <PreviewDeviceIcon devKey={d.key} color={dev === d.key && !split ? tabActiveFg : tabInactiveFg} />\n </button>\n ))}\n <button\n type=\"button\"\n title=\"Split view\"\n aria-label=\"Split view\"\n onClick={() => setSplit((s) => !s)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 34,\n height: 30,\n padding: 0,\n borderRadius: 6,\n border: \"none\",\n cursor: \"pointer\",\n transition: \"all .15s\",\n background: split ? tabActiveBg : tabInactiveBg,\n color: split ? tabActiveFg : tabInactiveFg,\n }}\n >\n <Columns2 size={15} strokeWidth={1.75} color={split ? tabActiveFg : tabInactiveFg} style={{ display: \"block\", flexShrink: 0 }} />\n </button>\n </div>\n\n {(dev === \"mobile\" || split) ? (\n <div\n role=\"group\"\n aria-label=\"Phone preview\"\n style={{\n display: \"flex\",\n gap: 2,\n background: C.surface,\n padding: 3,\n borderRadius: 8,\n border: `1px solid ${hairline}`,\n }}\n >\n {([\"iphone\", \"android\"] as const).map((v) => (\n <button\n key={v}\n type=\"button\"\n title={v === \"iphone\" ? MOBILE_IPHONE.label : MOBILE_ANDROID.label}\n aria-label={v === \"iphone\" ? MOBILE_IPHONE.label : MOBILE_ANDROID.label}\n aria-pressed={mobileVariant === v}\n onClick={() => setMobileVariant(v)}\n style={{\n padding: \"4px 10px\",\n borderRadius: 6,\n border: \"none\",\n cursor: \"pointer\",\n fontSize: 11,\n fontWeight: 700,\n transition: \"all .15s\",\n background: mobileVariant === v ? tabActiveBg : tabInactiveBg,\n color: mobileVariant === v ? tabActiveFg : tabInactiveFg,\n }}\n >\n {v === \"iphone\" ? \"iPhone\" : \"Android\"}\n </button>\n ))}\n </div>\n ) : null}\n\n {dev === \"desktop\" && !split ? (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 4 }}>\n <button type=\"button\" onClick={() => setZoom((z) => Math.max(50, z - 10))} style={{ background: C.surface, border: `1px solid ${hairline}`, color: C.text, width: 24, height: 24, borderRadius: 4, cursor: \"pointer\", fontSize: 13, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>−</button>\n <span style={{ fontSize: 11, color: C.muted, minWidth: 36, textAlign: \"center\" }}>{zoom}%</span>\n <button type=\"button\" onClick={() => setZoom((z) => Math.min(150, z + 10))} style={{ background: C.surface, border: `1px solid ${hairline}`, color: C.text, width: 24, height: 24, borderRadius: 4, cursor: \"pointer\", fontSize: 13, display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>+</button>\n <button type=\"button\" onClick={() => setZoom(100)} style={{ background: \"none\", border: `1px solid ${hairline}`, color: C.muted, padding: \"3px 7px\", borderRadius: 4, cursor: \"pointer\", fontSize: 10 }}>Reset</button>\n </div>\n ) : null}\n\n {typeof onSecondaryAction === \"function\" && secondaryActionLabel ? (\n <button\n type=\"button\"\n onClick={onSecondaryAction}\n style={{\n background: C.surface,\n border: `1px solid ${hairline}`,\n color: C.text,\n padding: \"6px 12px\",\n borderRadius: 6,\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 700,\n }}\n >\n {secondaryActionLabel}\n </button>\n ) : null}\n\n <button\n type=\"button\"\n onClick={onClose}\n style={{\n background: \"none\",\n border: `1px solid ${hairline}`,\n color: C.muted,\n width: 30,\n height: 30,\n borderRadius: 6,\n cursor: \"pointer\",\n fontSize: 17,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n ×\n </button>\n </div>\n </div>\n\n {/* ── BODY (no outer scroll; iframe handles scrolling) ── */}\n <div style={{ flex: 1, display: \"flex\", minHeight: 0, overflow: \"hidden\" }}>\n <div\n style={{\n flex: 1,\n minHeight: 0,\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: previewBodyStretchMobile ? \"stretch\" : dev === \"desktop\" ? \"flex-start\" : \"center\",\n justifyContent: \"center\",\n padding: previewBodyPadding,\n background: deviceBg,\n }}\n >\n {split ? (\n <div style={{ display: \"flex\", gap: 24, alignItems: \"stretch\", justifyContent: \"center\", width: \"100%\", minHeight: 0, overflow: \"hidden\" }}>\n <div\n className=\"pm-device\"\n style={{\n width: \"100%\",\n maxWidth: 440,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n overflow: \"hidden\",\n flexShrink: 0,\n }}\n >\n <MobilePhoneScaleSlot variantKey={mobileVariant}>\n <MobileDeviceChrome variant={mobileVariant} C={C}>\n <IframeContent srcDoc={srcDocMobile} title=\"mobile-split\" iframeWidth={mobileIframeW} fill />\n </MobileDeviceChrome>\n </MobilePhoneScaleSlot>\n </div>\n <div className=\"pm-device\" style={{ width: \"100%\", minWidth: 0, flex: 1, maxWidth: 900, overflow: \"hidden\" }}>\n <DesktopChrome C={C} maxW={900}>\n <IframeContent srcDoc={html} title=\"desktop-split\" />\n </DesktopChrome>\n </div>\n </div>\n ) : dev === \"mobile\" ? (\n <div className=\"pm-device\" style={{ width: \"380px\", maxWidth: 440, display: \"flex\", justifyContent: \"center\", alignItems: \"center\", overflow: \"hidden\", minHeight: 0 }}>\n <MobilePhoneScaleSlot variantKey={mobileVariant}>\n <MobileDeviceChrome variant={mobileVariant} C={C}>\n <IframeContent srcDoc={srcDocMobile} title=\"mobile\" iframeWidth={mobileIframeW} fill />\n </MobileDeviceChrome>\n </MobilePhoneScaleSlot>\n </div>\n ) : dev === \"tablet\" ? (\n <div className=\"pm-device\" style={{ width: \"100%\", display: \"flex\", justifyContent: \"center\", overflow: \"hidden\" }}>\n <TabletChrome C={C}>\n <IframeContent srcDoc={srcDocTablet} title=\"tablet\" iframeWidth={tabletIframeW} />\n </TabletChrome>\n </div>\n ) : (\n <div\n className=\"pm-device\"\n style={{\n width: \"100%\",\n maxWidth: 1024,\n transformOrigin: \"top center\",\n transform: `scale(${zoom / 100})`,\n marginBottom: zoom < 100 ? `-${(1 - zoom / 100) * 400}px` : 0,\n transition: \"transform .2s,margin .2s\",\n overflow: \"hidden\",\n }}\n >\n <DesktopChrome C={C} maxW={1024}>\n <IframeContent srcDoc={html} title=\"desktop\" />\n </DesktopChrome>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nexport { PreviewModal, DEVICES };\n","import { useEffect, useRef } from \"react\";\n\nfunction ContextMenu({x,y,items,onClose,C}) {\n const ref=useRef(null);\n useEffect(()=>{\n const h=()=>onClose();\n window.addEventListener(\"mousedown\",h);\n window.addEventListener(\"keydown\",h);\n return()=>{window.removeEventListener(\"mousedown\",h);window.removeEventListener(\"keydown\",h);};\n },[onClose]);\n return (\n <div ref={ref} onMouseDown={e=>e.stopPropagation()} style={{position:\"fixed\",left:x,top:y,zIndex:9999,background:C.sidebar,border:`1px solid ${C.border}`,borderRadius:7,padding:\"4px 0\",boxShadow:`0 8px 32px rgba(0,0,0,.4)`,minWidth:160}}>\n {items.map((item,i)=>item.sep?(\n <div key={i} style={{height:1,background:C.border,margin:\"3px 0\"}}/>\n ):(\n <button\n key={i}\n type=\"button\"\n disabled={!!item.disabled}\n onClick={()=>{if(item.disabled)return;item.action();onClose();}}\n style={{\n display:\"block\",width:\"100%\",background:\"none\",border:\"none\",padding:\"7px 14px\",textAlign:\"left\",\n cursor:item.disabled?\"not-allowed\":\"pointer\",fontSize:12,\n color:item.disabled?C.muted:item.danger?C.danger:C.text,\n fontWeight:item.bold?700:400,opacity:item.disabled?0.45:1,\n }}\n onMouseEnter={e=>{if(!item.disabled)e.currentTarget.style.background=C.surface;}}\n onMouseLeave={e=>{e.currentTarget.style.background=\"none\";}}\n >\n {item.icon&&<span style={{marginRight:8}}>{item.icon}</span>}{item.label}\n </button>\n ))}\n </div>\n );\n}\n\nexport { ContextMenu };\n","function ConfirmDialog({message,onConfirm,onCancel,C}) {\n return (\n <div style={{position:\"fixed\",inset:0,zIndex:9500,background:\"rgba(0,0,0,.7)\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"}}>\n <div style={{background:C.sidebar,border:`1px solid ${C.border}`,borderRadius:10,padding:24,maxWidth:320,textAlign:\"center\",boxShadow:\"0 20px 60px rgba(0,0,0,.5)\"}}>\n <div style={{fontSize:24,marginBottom:12}}>⚠️</div>\n <div style={{fontSize:14,color:C.text,marginBottom:20,lineHeight:1.5}}>{message}</div>\n <div style={{display:\"flex\",gap:10,justifyContent:\"center\"}}>\n <button onClick={onCancel} style={{background:\"none\",border:`1px solid ${C.border}`,color:C.text,padding:\"8px 20px\",borderRadius:6,cursor:\"pointer\",fontSize:13}}>Cancel</button>\n <button onClick={onConfirm} style={{background:C.danger,border:\"none\",color:\"#fff\",padding:\"8px 20px\",borderRadius:6,cursor:\"pointer\",fontSize:13,fontWeight:700}}>Confirm</button>\n </div>\n </div>\n </div>\n );\n}\n\nexport { ConfirmDialog };\n","import { useState, useRef } from \"react\";\n\nfunction TBtn({\n onClick,\n title,\n children,\n active = false,\n accent,\n muted,\n border,\n text,\n disabled = false,\n style: sx = {},\n}) {\n const [show,setShow]=useState(false);\n const ref=useRef(null);\n const [pos,setPos]=useState({left:0,top:0});\n return (\n <div style={{position:\"relative\",display:\"inline-flex\"}} ref={ref}\n onMouseEnter={()=>{setShow(true);if(ref.current){const r=ref.current.getBoundingClientRect();setPos({left:r.left+r.width/2,top:r.bottom+6});}}}\n onMouseLeave={()=>setShow(false)}>\n <button onClick={onClick} disabled={disabled}\n style={{background:active?`${accent}22`:\"none\",border:`1px solid ${active?accent:border}`,color:disabled?muted:active?accent:text,padding:\"5px 10px\",borderRadius:5,cursor:disabled?\"default\":\"pointer\",fontSize:12,fontWeight:600,...sx}}>\n {children}\n </button>\n {show&&<div style={{position:\"fixed\",left:pos.left,top:pos.top,transform:\"translateX(-50%)\",background:\"rgba(0,0,0,.85)\",color:\"#fff\",padding:\"3px 8px\",borderRadius:4,fontSize:11,pointerEvents:\"none\",whiteSpace:\"nowrap\",zIndex:9999}}>{title}</div>}\n </div>\n );\n}\n\nexport { TBtn };\n"],"mappings":"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","names":["useState","useRef","useEffect","useCallback","useMemo","Fragment","jsx","numOr","tr","tr","defaults","jsx","jsxs","tr","numOr","ImageIcon","Scaling","Crosshair","GradientIcon","useRef","useState","useEffect","Fragment","AlignCenter","AlignJustify","AlignLeft","AlignRight","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","jsx","Fragment","jsx","jsxs","g","AlignLeft","AlignCenter","AlignRight","AlignJustify","useState","useEffect","useRef","FONTS","useState","useEffect","useRef","Fragment","jsx","jsxs","useRef","useState","useEffect","useEffect","useRef","jsx","jsxs","jsx","jsxs","useState","useRef","jsx","jsxs","Fragment","jsx","jsxs","ReactEmailEditor","useMemo","useState","useRef","useEffect","useCallback","r","ImageIcon","Scaling","Crosshair","GradientIcon"]}