@brunoalz/smartgesti-site-editor 1.2.0 → 1.4.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.
- package/dist/editor/BlockSelector.js +5 -2
- package/dist/editor/BlockSelector.js.map +1 -1
- package/dist/editor/LandingPageEditor.d.ts.map +1 -1
- package/dist/editor/LandingPageEditor.js +199 -173
- package/dist/editor/LandingPageEditor.js.map +1 -1
- package/dist/editor/PaletteSelector.d.ts +3 -0
- package/dist/editor/PaletteSelector.d.ts.map +1 -1
- package/dist/editor/PaletteSelector.js +114 -25
- package/dist/editor/PaletteSelector.js.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js +86 -48
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
- package/dist/editor/components/RightPanel.d.ts +2 -0
- package/dist/editor/components/RightPanel.d.ts.map +1 -1
- package/dist/editor/components/RightPanel.js +23 -22
- package/dist/editor/components/RightPanel.js.map +1 -1
- package/dist/engine/export/exporters/content/AvatarExporter.js +2 -2
- package/dist/engine/export/exporters/content/AvatarExporter.js.map +1 -1
- package/dist/engine/export/exporters/content/BadgeExporter.js +11 -11
- package/dist/engine/export/exporters/content/BadgeExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/AdminSectionExporters.d.ts +6 -0
- package/dist/engine/export/exporters/sections/AdminSectionExporters.d.ts.map +1 -0
- package/dist/engine/export/exporters/sections/AdminSectionExporters.js +157 -0
- package/dist/engine/export/exporters/sections/AdminSectionExporters.js.map +1 -0
- package/dist/engine/export/exporters/sections/BlogPostExporters.js +34 -34
- package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/ContentGridExporters.js +16 -16
- package/dist/engine/export/exporters/sections/ContentGridExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/MarketingExporters.js +4 -4
- package/dist/engine/export/exporters/sections/MarketingExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/index.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/index.js +37 -33
- package/dist/engine/export/exporters/sections/index.js.map +1 -1
- package/dist/engine/index.js +98 -95
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/preview/Preview.d.ts.map +1 -1
- package/dist/engine/preview/Preview.js +165 -160
- package/dist/engine/preview/Preview.js.map +1 -1
- package/dist/engine/registry/blocks/sections/aboutSection.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/aboutSection.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/aboutSection.js +117 -0
- package/dist/engine/registry/blocks/sections/aboutSection.js.map +1 -0
- package/dist/engine/registry/blocks/sections/contactSection.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/contactSection.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/contactSection.js +118 -0
- package/dist/engine/registry/blocks/sections/contactSection.js.map +1 -0
- package/dist/engine/registry/blocks/sections/index.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/index.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/productShowcase.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/productShowcase.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/productShowcase.js +108 -0
- package/dist/engine/registry/blocks/sections/productShowcase.js.map +1 -0
- package/dist/engine/render/renderers/content/BadgeRenderer.js +12 -12
- package/dist/engine/render/renderers/content/BadgeRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/AboutSectionRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/AboutSectionRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/AboutSectionRenderer.js +246 -0
- package/dist/engine/render/renderers/sections/AboutSectionRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.js +287 -0
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js +5 -5
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureRenderer.js +9 -9
- package/dist/engine/render/renderers/sections/FeatureRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js +5 -5
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/ProductShowcaseRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/ProductShowcaseRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/ProductShowcaseRenderer.js +287 -0
- package/dist/engine/render/renderers/sections/ProductShowcaseRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/index.js +26 -20
- package/dist/engine/render/renderers/sections/index.js.map +1 -1
- package/dist/engine/schema/siteDocument.d.ts +96 -2
- package/dist/engine/schema/siteDocument.d.ts.map +1 -1
- package/dist/engine/schema/siteDocument.js.map +1 -1
- package/dist/hooks/useEditorState.d.ts +2 -0
- package/dist/hooks/useEditorState.d.ts.map +1 -1
- package/dist/hooks/useEditorState.js +82 -77
- package/dist/hooks/useEditorState.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +109 -106
- package/dist/index.js.map +1 -1
- package/dist/shared/schema.d.ts +1 -1
- package/dist/shared/schema.d.ts.map +1 -1
- package/dist/shared/schema.js +7 -4
- package/dist/shared/schema.js.map +1 -1
- package/dist/shared/templates/index.d.ts +6 -0
- package/dist/shared/templates/index.d.ts.map +1 -1
- package/dist/shared/templates/index.js +49 -23
- package/dist/shared/templates/index.js.map +1 -1
- package/dist/shared/templates/smartgesti-admin.d.ts +3 -0
- package/dist/shared/templates/smartgesti-admin.d.ts.map +1 -0
- package/dist/shared/templates/smartgesti-admin.js +423 -0
- package/dist/shared/templates/smartgesti-admin.js.map +1 -0
- package/dist/utils/blockIcons.d.ts.map +1 -1
- package/dist/utils/blockIcons.js +3 -0
- package/dist/utils/blockIcons.js.map +1 -1
- package/dist/utils/colorUtils.d.ts +73 -16
- package/dist/utils/colorUtils.d.ts.map +1 -1
- package/dist/utils/colorUtils.js +95 -9
- package/dist/utils/colorUtils.js.map +1 -1
- package/dist/viewer/LandingPageViewer.d.ts.map +1 -1
- package/dist/viewer/LandingPageViewer.js +66 -65
- package/dist/viewer/LandingPageViewer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingPageEditor.js","sources":["../../src/editor/LandingPageEditor.tsx"],"sourcesContent":["/**\n * Landing Page Editor\n * Editor de landing pages usando block engine\n */\n\nimport { useState, useCallback, useEffect, lazy, Suspense } from \"react\";\nimport { TemplatePicker } from \"./TemplatePicker\";\nimport { Toolbar, LeftPanel, CenterPanel, RightPanel } from \"./components\";\nimport { useEditorState } from \"../hooks/useEditorState\";\nimport { useKeyboardShortcuts } from \"../hooks/useKeyboardShortcuts\";\nimport { LoadingSpinner } from \"./components/LoadingSpinner\";\nimport { SiteDocument, PatchBuilder, Block } from \"../engine\";\nimport { getTemplate } from \"../shared/templates\";\nimport type { TemplateId } from \"../shared/templates\";\nimport { sharedTemplateToEngineDocument } from \"../utils/sharedTemplateToEngine\";\nimport { findBlockInStructure } from \"../utils/blockUtils\";\nimport { isLightColor } from \"../utils/colorUtils\";\nimport { logger } from \"../utils/logger\";\nimport { processBlockDataURLs } from \"../utils/dataURLUtils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UploadConfig {\n tenantId?: string;\n schoolId?: string;\n siteId?: string | null;\n authToken?: string;\n}\n\nexport interface LandingPageEditorProps {\n initialData?: SiteDocument;\n /** ID do template a carregar quando não houver initialData (ex.: \"escola-edvi\") */\n defaultTemplateId?: TemplateId;\n onSave?: (data: SiteDocument) => Promise<void>;\n onPublish?: (data: SiteDocument) => Promise<void>;\n /** Configuração para upload seguro de imagens/vídeos */\n uploadConfig?: UploadConfig;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function LandingPageEditor({\n initialData,\n defaultTemplateId,\n onSave,\n onPublish,\n uploadConfig,\n}: LandingPageEditorProps) {\n // Hook de estado do editor (edição por páginas; sem navegação)\n const {\n document,\n currentPageId,\n currentPage,\n selectedBlockId,\n selectedBlock,\n history,\n setCurrentPageId,\n addPage,\n removePage,\n canRemovePage,\n setSelectedBlockId,\n handleUndo,\n handleRedo,\n handleDeleteBlock,\n handleUpdateBlock,\n applyChange,\n resetToTemplate,\n isPaletteSelected,\n loadDocument,\n activePlugins,\n activatePlugin,\n deactivatePlugin,\n } = useEditorState({ initialData });\n\n // Estado local da UI\n const [isSaving, setIsSaving] = useState(false);\n const [currentTemplateId, setCurrentTemplateId] = useState<TemplateId | null>(\n null,\n );\n const [focusedGroup, setFocusedGroup] = useState<string | null>(null);\n const [showSelectionOverlay, setShowSelectionOverlay] = useState(false);\n\n // Carregar template escolhido (converter shared → engine e carregar no editor)\n const handleSelectTemplate = useCallback(\n (templateId: TemplateId) => {\n const sharedDoc = getTemplate(templateId);\n if (!sharedDoc) return;\n const engineDoc = sharedTemplateToEngineDocument(sharedDoc);\n loadDocument(engineDoc);\n setCurrentTemplateId(templateId);\n },\n [loadDocument],\n );\n\n // Ao montar sem documento: carregar defaultTemplateId se informado\n useEffect(() => {\n if (!document && defaultTemplateId) {\n handleSelectTemplate(defaultTemplateId);\n }\n }, [defaultTemplateId]); // eslint-disable-line react-hooks/exhaustive-deps -- carregar só uma vez quando defaultTemplateId existe\n\n // Handlers de save/publish\n const handleSave = async () => {\n if (!document || !onSave || !uploadConfig) return;\n setIsSaving(true);\n try {\n // Processar o documento para fazer upload de todos os Data URLs\n const processedPages = await Promise.all(\n (document.pages || []).map(async (page) => ({\n ...page,\n structure: await Promise.all(\n (page.structure || []).map((block) => processBlockDataURLs(block, uploadConfig))\n ),\n }))\n );\n\n const processedDocument = {\n ...document,\n pages: processedPages,\n };\n\n await onSave(processedDocument);\n } catch (error) {\n logger.error(\"Error saving:\", error);\n throw error;\n } finally {\n setIsSaving(false);\n }\n };\n\n const handlePublish = async () => {\n if (!document || !onPublish) return;\n setIsSaving(true);\n try {\n await onPublish(document);\n } catch (error) {\n logger.error(\"Error publishing:\", error);\n } finally {\n setIsSaving(false);\n }\n };\n\n // Handler para atualizar um bloco específico\n const handleUpdateBlockById = useCallback(\n (blockId: string, updates: Record<string, any>) => {\n if (!document || !currentPage) return;\n const pageId = (currentPage as any).id;\n if (!pageId) return;\n\n try {\n const patch = PatchBuilder.updateBlockProps(\n document,\n pageId,\n blockId,\n updates\n );\n if (patch?.length) {\n applyChange(patch, \"Update block properties\");\n }\n } catch (error) {\n logger.error(\"Error updating block:\", error);\n }\n },\n [document, currentPage, applyChange]\n );\n\n // Handler para atualizar paleta de cores (inclui mutedText, primaryText, linkColor e menuLinkColor)\n const handlePaletteChange = useCallback((palette: any) => {\n if (!document) return;\n const bgLight = isLightColor(palette.background ?? \"#ffffff\");\n const primaryLight = isLightColor(palette.primary ?? \"#3b82f6\");\n const mutedText = bgLight ? \"#6b7280\" : \"#9ca3af\";\n const primaryText = primaryLight ? \"#1f2937\" : \"#ffffff\";\n const patch = PatchBuilder.updateTheme(document, {\n colors: {\n ...document.theme.colors,\n primary: palette.primary,\n secondary: palette.secondary,\n accent: palette.accent,\n bg: palette.background,\n surface: palette.surface || document.theme.colors.surface,\n text: palette.text || document.theme.colors.text,\n mutedText,\n primaryText,\n linkColor: palette.linkColor || palette.primary, // Links gerais\n menuLinkColor: palette.menuLinkColor || palette.primary, // Links do menu navbar\n },\n });\n applyChange(patch, \"Update color palette\");\n }, [document, applyChange]);\n\n // Handler para clique no preview (com grupo opcional para scroll-to-group)\n const handleBlockClick = useCallback((blockId: string, group?: string) => {\n setSelectedBlockId(blockId);\n setFocusedGroup(group || null);\n }, [setSelectedBlockId]);\n\n // Limpar focusedGroup quando o bloco selecionado muda (via seleção no painel esquerdo, etc.)\n // Nota: handleBlockClick já define o focusedGroup corretamente quando vem do preview\n\n // No editor: cliques em links no preview não navegam; trocam a página em edição\n // Keyboard shortcuts\n useKeyboardShortcuts({\n onUndo: handleUndo,\n onRedo: handleRedo,\n onSave: handleSave,\n onDelete: () => {\n if (selectedBlockId) {\n handleDeleteBlock(selectedBlockId);\n }\n },\n onDeselect: () => setSelectedBlockId(null),\n });\n\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type !== \"editor-navigate\" || !event.data.href) return;\n const href = String(event.data.href);\n if (!document) return;\n // Links internos: /site/p/:slug ou /p/:slug\n const match = href.match(/^(?:\\/site)?\\/p\\/([^#?]+)/);\n if (match) {\n const slug = match[1];\n const page = document.pages.find((p) => p.slug === slug);\n if (page) setCurrentPageId(page.id);\n return;\n }\n // Âncora #id: selecionar bloco com esse id e trocar para a página que o contém\n if (href.startsWith(\"#\")) {\n const id = href.slice(1);\n for (const p of document.pages) {\n if (findBlockInStructure(p.structure || [], id)) {\n setCurrentPageId(p.id);\n setSelectedBlockId(id);\n break;\n }\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [document, setCurrentPageId, setSelectedBlockId]);\n\n // Sem documento: mostrar seletor de templates\n if (!document) {\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n <TemplatePicker onSelectTemplate={handleSelectTemplate} />\n </div>\n );\n }\n\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n {/* Toolbar */}\n <Toolbar\n history={history}\n isSaving={isSaving}\n onUndo={handleUndo}\n onRedo={handleRedo}\n onSave={handleSave}\n onPublish={onPublish ? handlePublish : undefined}\n onReset={\n currentTemplateId\n ? () => {\n // Recarregar o mesmo template\n const sharedDoc = getTemplate(currentTemplateId);\n if (sharedDoc)\n loadDocument(sharedTemplateToEngineDocument(sharedDoc));\n }\n : resetToTemplate\n }\n showSelectionOverlay={showSelectionOverlay}\n onToggleSelectionOverlay={() => setShowSelectionOverlay(prev => !prev)}\n />\n\n {/* Main Content - 3 Columns */}\n <div className=\"flex-1 flex overflow-hidden min-h-0 max-h-full\">\n {/* Left: Block Selector + Paletas */}\n <LeftPanel\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n isPaletteSelected={isPaletteSelected}\n onSelectBlock={(id) => { setSelectedBlockId(id); setFocusedGroup(null); }}\n onDeleteBlock={handleDeleteBlock}\n />\n\n {/* Center: Preview (apenas a página em edição) */}\n <CenterPanel\n document={document}\n currentPageId={currentPageId}\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n onBlockClick={handleBlockClick}\n onSelectPage={setCurrentPageId}\n onAddPage={() => {\n const name = prompt(\"Nome da página:\");\n if (!name) return;\n const slug = name.toLowerCase().replace(/\\s+/g, \"-\");\n const id = slug;\n addPage(id, name, slug);\n }}\n onRemovePage={removePage}\n canRemovePage={canRemovePage}\n onUpdateBlock={handleUpdateBlockById}\n activePlugins={activePlugins}\n onActivatePlugin={activatePlugin}\n onDeactivatePlugin={deactivatePlugin}\n showSelectionOverlay={showSelectionOverlay}\n focusedGroup={focusedGroup}\n />\n\n {/* Right: Editor Panel */}\n <RightPanel\n isPaletteSelected={isPaletteSelected}\n selectedBlock={selectedBlock}\n onPaletteChange={handlePaletteChange}\n onUpdateBlock={handleUpdateBlock}\n uploadConfig={uploadConfig}\n document={document}\n currentPageId={currentPageId}\n focusedGroup={focusedGroup}\n />\n </div>\n </div>\n );\n}\n"],"names":["LandingPageEditor","initialData","defaultTemplateId","onSave","onPublish","uploadConfig","document","currentPageId","currentPage","selectedBlockId","selectedBlock","history","setCurrentPageId","addPage","removePage","canRemovePage","setSelectedBlockId","handleUndo","handleRedo","handleDeleteBlock","handleUpdateBlock","applyChange","resetToTemplate","isPaletteSelected","loadDocument","activePlugins","activatePlugin","deactivatePlugin","useEditorState","isSaving","setIsSaving","useState","currentTemplateId","setCurrentTemplateId","focusedGroup","setFocusedGroup","showSelectionOverlay","setShowSelectionOverlay","handleSelectTemplate","useCallback","templateId","sharedDoc","getTemplate","engineDoc","sharedTemplateToEngineDocument","useEffect","handleSave","processedPages","page","block","processBlockDataURLs","processedDocument","error","logger","handlePublish","handleUpdateBlockById","blockId","updates","pageId","patch","PatchBuilder","handlePaletteChange","palette","bgLight","isLightColor","primaryLight","mutedText","primaryText","handleBlockClick","group","useKeyboardShortcuts","handleMessage","event","href","match","slug","p","id","findBlockInStructure","jsxs","jsx","Toolbar","prev","LeftPanel","CenterPanel","name","RightPanel","TemplatePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LandingPageEditor.js","sources":["../../src/editor/LandingPageEditor.tsx"],"sourcesContent":["/**\n * Landing Page Editor\n * Editor de landing pages usando block engine\n */\n\nimport { useState, useCallback, useEffect, lazy, Suspense } from \"react\";\nimport { TemplatePicker } from \"./TemplatePicker\";\nimport { Toolbar, LeftPanel, CenterPanel, RightPanel } from \"./components\";\nimport { useEditorState } from \"../hooks/useEditorState\";\nimport { useKeyboardShortcuts } from \"../hooks/useKeyboardShortcuts\";\nimport { LoadingSpinner } from \"./components/LoadingSpinner\";\nimport { SiteDocument, PatchBuilder, Block } from \"../engine\";\nimport { getTemplate, templateDefaultPalette } from \"../shared/templates\";\nimport type { TemplateId } from \"../shared/templates\";\nimport { findPaletteByName } from \"./PaletteSelector\";\nimport { sharedTemplateToEngineDocument } from \"../utils/sharedTemplateToEngine\";\nimport { findBlockInStructure } from \"../utils/blockUtils\";\nimport { derivePaletteColors } from \"../utils/colorUtils\";\nimport { logger } from \"../utils/logger\";\nimport { processBlockDataURLs } from \"../utils/dataURLUtils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UploadConfig {\n tenantId?: string;\n schoolId?: string;\n siteId?: string | null;\n authToken?: string;\n}\n\nexport interface LandingPageEditorProps {\n initialData?: SiteDocument;\n /** ID do template a carregar quando não houver initialData (ex.: \"escola-edvi\") */\n defaultTemplateId?: TemplateId;\n onSave?: (data: SiteDocument) => Promise<void>;\n onPublish?: (data: SiteDocument) => Promise<void>;\n /** Configuração para upload seguro de imagens/vídeos */\n uploadConfig?: UploadConfig;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function LandingPageEditor({\n initialData,\n defaultTemplateId,\n onSave,\n onPublish,\n uploadConfig,\n}: LandingPageEditorProps) {\n // Hook de estado do editor (edição por páginas; sem navegação)\n const {\n document,\n currentPageId,\n currentPage,\n selectedBlockId,\n selectedBlock,\n history,\n setCurrentPageId,\n addPage,\n removePage,\n canRemovePage,\n setSelectedBlockId,\n handleUndo,\n handleRedo,\n handleDeleteBlock,\n handleUpdateBlock,\n applyChange,\n resetToTemplate,\n isPaletteSelected,\n loadDocument,\n selectedPalette,\n setSelectedPalette,\n activePlugins,\n activatePlugin,\n deactivatePlugin,\n } = useEditorState({ initialData });\n\n // Estado local da UI\n const [isSaving, setIsSaving] = useState(false);\n const [currentTemplateId, setCurrentTemplateId] = useState<TemplateId | null>(\n null,\n );\n const [focusedGroup, setFocusedGroup] = useState<string | null>(null);\n const [showSelectionOverlay, setShowSelectionOverlay] = useState(false);\n\n // Carregar template escolhido (converter shared → engine e carregar no editor)\n const handleSelectTemplate = useCallback(\n (templateId: TemplateId) => {\n const sharedDoc = getTemplate(templateId);\n if (!sharedDoc) return;\n const engineDoc = sharedTemplateToEngineDocument(sharedDoc);\n loadDocument(engineDoc);\n setCurrentTemplateId(templateId);\n\n // Auto-selecionar paleta correspondente ao template\n const paletteName = templateDefaultPalette[templateId];\n if (paletteName) {\n setSelectedPalette(paletteName);\n }\n },\n [loadDocument, setSelectedPalette],\n );\n\n // Ao montar sem documento: carregar defaultTemplateId se informado\n useEffect(() => {\n if (!document && defaultTemplateId) {\n handleSelectTemplate(defaultTemplateId);\n }\n }, [defaultTemplateId]); // eslint-disable-line react-hooks/exhaustive-deps -- carregar só uma vez quando defaultTemplateId existe\n\n // Handlers de save/publish\n const handleSave = async () => {\n if (!document || !onSave || !uploadConfig) return;\n setIsSaving(true);\n try {\n // Processar o documento para fazer upload de todos os Data URLs\n const processedPages = await Promise.all(\n (document.pages || []).map(async (page) => ({\n ...page,\n structure: await Promise.all(\n (page.structure || []).map((block) => processBlockDataURLs(block, uploadConfig))\n ),\n }))\n );\n\n const processedDocument = {\n ...document,\n pages: processedPages,\n };\n\n await onSave(processedDocument);\n } catch (error) {\n logger.error(\"Error saving:\", error);\n throw error;\n } finally {\n setIsSaving(false);\n }\n };\n\n const handlePublish = async () => {\n if (!document || !onPublish) return;\n setIsSaving(true);\n try {\n await onPublish(document);\n } catch (error) {\n logger.error(\"Error publishing:\", error);\n } finally {\n setIsSaving(false);\n }\n };\n\n // Handler para atualizar um bloco específico\n const handleUpdateBlockById = useCallback(\n (blockId: string, updates: Record<string, any>) => {\n if (!document || !currentPage) return;\n const pageId = (currentPage as any).id;\n if (!pageId) return;\n\n try {\n const patch = PatchBuilder.updateBlockProps(\n document,\n pageId,\n blockId,\n updates\n );\n if (patch?.length) {\n applyChange(patch, \"Update block properties\");\n }\n } catch (error) {\n logger.error(\"Error updating block:\", error);\n }\n },\n [document, currentPage, applyChange]\n );\n\n // Handler para atualizar paleta de cores\n // Usa derivePaletteColors() para derivar todas as cores e patcha Hero/Navbar/Footer alem do theme\n const handlePaletteChange = useCallback((palette: any) => {\n if (!document) return;\n const derived = derivePaletteColors(palette);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const allPatches: Array<{ op: \"replace\"; path: string; value: any }> = [];\n\n // 1. Theme color updates\n for (const [key, value] of Object.entries(derived.themeColors)) {\n allPatches.push({ op: \"replace\", path: `/theme/colors/${key}`, value });\n }\n\n // 2. Block-level patches (todas as paginas)\n // Hero variations that use dark gradient backgrounds\n const darkGradientVariations = new Set([\n \"hero-gradient\", \"hero-parallax\", \"hero-overlay\", \"hero-carousel\",\n ]);\n\n for (let pageIdx = 0; pageIdx < document.pages.length; pageIdx++) {\n const page = document.pages[pageIdx];\n if (!page?.structure) continue;\n for (let blockIdx = 0; blockIdx < page.structure.length; blockIdx++) {\n const block = page.structure[blockIdx];\n const base = `/pages/${pageIdx}/structure/${blockIdx}/props`;\n\n if (block.type === \"hero\") {\n const variation = (block.props as any)?.variation || \"\";\n if (darkGradientVariations.has(variation)) {\n allPatches.push(\n { op: \"replace\", path: `${base}/background`, value: `linear-gradient(135deg, ${derived.heroGradientStart} 0%, ${derived.heroGradientEnd} 100%)` },\n { op: \"replace\", path: `${base}/titleColor`, value: derived.heroTitleColor },\n { op: \"replace\", path: `${base}/subtitleColor`, value: derived.heroSubtitleColor },\n { op: \"replace\", path: `${base}/descriptionColor`, value: derived.heroDescColor },\n );\n }\n } else if (block.type === \"navbar\") {\n allPatches.push(\n { op: \"replace\", path: `${base}/bg`, value: derived.navbarBg },\n { op: \"replace\", path: `${base}/linkColor`, value: derived.themeColors.menuLinkColor },\n { op: \"replace\", path: `${base}/linkHoverColor`, value: derived.themeColors.primary },\n { op: \"replace\", path: `${base}/buttonColor`, value: derived.themeColors.primary },\n { op: \"replace\", path: `${base}/buttonTextColor`, value: derived.themeColors.primaryText },\n );\n } else if (block.type === \"footer\") {\n allPatches.push(\n { op: \"replace\", path: `${base}/linkHoverColor`, value: derived.footerLinkHover },\n );\n }\n }\n }\n\n applyChange(allPatches, \"Update color palette\");\n setSelectedPalette(palette.name ?? null);\n }, [document, applyChange, setSelectedPalette]);\n\n // Handler para clique no preview (com grupo opcional para scroll-to-group)\n const handleBlockClick = useCallback((blockId: string, group?: string) => {\n setSelectedBlockId(blockId);\n setFocusedGroup(group || null);\n }, [setSelectedBlockId]);\n\n // Limpar focusedGroup quando o bloco selecionado muda (via seleção no painel esquerdo, etc.)\n // Nota: handleBlockClick já define o focusedGroup corretamente quando vem do preview\n\n // No editor: cliques em links no preview não navegam; trocam a página em edição\n // Keyboard shortcuts\n useKeyboardShortcuts({\n onUndo: handleUndo,\n onRedo: handleRedo,\n onSave: handleSave,\n onDelete: () => {\n if (selectedBlockId) {\n handleDeleteBlock(selectedBlockId);\n }\n },\n onDeselect: () => setSelectedBlockId(null),\n });\n\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type !== \"editor-navigate\" || !event.data.href) return;\n const href = String(event.data.href);\n if (!document) return;\n // Links internos: /site/p/:slug ou /p/:slug\n const match = href.match(/^(?:\\/site)?\\/p\\/([^#?]+)/);\n if (match) {\n const slug = match[1];\n const page = document.pages.find((p) => p.slug === slug);\n if (page) setCurrentPageId(page.id);\n return;\n }\n // Âncora #id: selecionar bloco com esse id e trocar para a página que o contém\n if (href.startsWith(\"#\")) {\n const id = href.slice(1);\n for (const p of document.pages) {\n if (findBlockInStructure(p.structure || [], id)) {\n setCurrentPageId(p.id);\n setSelectedBlockId(id);\n break;\n }\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [document, setCurrentPageId, setSelectedBlockId]);\n\n // Sem documento: mostrar seletor de templates\n if (!document) {\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n <TemplatePicker onSelectTemplate={handleSelectTemplate} />\n </div>\n );\n }\n\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n {/* Toolbar */}\n <Toolbar\n history={history}\n isSaving={isSaving}\n onUndo={handleUndo}\n onRedo={handleRedo}\n onSave={handleSave}\n onPublish={onPublish ? handlePublish : undefined}\n onReset={\n currentTemplateId\n ? () => {\n // Recarregar o mesmo template\n const sharedDoc = getTemplate(currentTemplateId);\n if (sharedDoc) {\n loadDocument(sharedTemplateToEngineDocument(sharedDoc));\n const paletteName = templateDefaultPalette[currentTemplateId];\n if (paletteName) {\n setSelectedPalette(paletteName);\n }\n }\n }\n : resetToTemplate\n }\n showSelectionOverlay={showSelectionOverlay}\n onToggleSelectionOverlay={() => setShowSelectionOverlay(prev => !prev)}\n />\n\n {/* Main Content - 3 Columns */}\n <div className=\"flex-1 flex overflow-hidden min-h-0 max-h-full\">\n {/* Left: Block Selector + Paletas */}\n <LeftPanel\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n isPaletteSelected={isPaletteSelected}\n onSelectBlock={(id) => { setSelectedBlockId(id); setFocusedGroup(null); }}\n onDeleteBlock={handleDeleteBlock}\n />\n\n {/* Center: Preview (apenas a página em edição) */}\n <CenterPanel\n document={document}\n currentPageId={currentPageId}\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n onBlockClick={handleBlockClick}\n onSelectPage={setCurrentPageId}\n onAddPage={() => {\n const name = prompt(\"Nome da página:\");\n if (!name) return;\n const slug = name.toLowerCase().replace(/\\s+/g, \"-\");\n const id = slug;\n addPage(id, name, slug);\n }}\n onRemovePage={removePage}\n canRemovePage={canRemovePage}\n onUpdateBlock={handleUpdateBlockById}\n activePlugins={activePlugins}\n onActivatePlugin={activatePlugin}\n onDeactivatePlugin={deactivatePlugin}\n showSelectionOverlay={showSelectionOverlay}\n focusedGroup={focusedGroup}\n />\n\n {/* Right: Editor Panel */}\n <RightPanel\n isPaletteSelected={isPaletteSelected}\n selectedBlock={selectedBlock}\n selectedPalette={selectedPalette ? findPaletteByName(selectedPalette) : undefined}\n onPaletteChange={handlePaletteChange}\n onUpdateBlock={handleUpdateBlock}\n uploadConfig={uploadConfig}\n document={document}\n currentPageId={currentPageId}\n focusedGroup={focusedGroup}\n />\n </div>\n </div>\n );\n}\n"],"names":["LandingPageEditor","initialData","defaultTemplateId","onSave","onPublish","uploadConfig","document","currentPageId","currentPage","selectedBlockId","selectedBlock","history","setCurrentPageId","addPage","removePage","canRemovePage","setSelectedBlockId","handleUndo","handleRedo","handleDeleteBlock","handleUpdateBlock","applyChange","resetToTemplate","isPaletteSelected","loadDocument","selectedPalette","setSelectedPalette","activePlugins","activatePlugin","deactivatePlugin","useEditorState","isSaving","setIsSaving","useState","currentTemplateId","setCurrentTemplateId","focusedGroup","setFocusedGroup","showSelectionOverlay","setShowSelectionOverlay","handleSelectTemplate","useCallback","templateId","sharedDoc","getTemplate","engineDoc","sharedTemplateToEngineDocument","paletteName","templateDefaultPalette","useEffect","handleSave","processedPages","page","block","processBlockDataURLs","processedDocument","error","logger","handlePublish","handleUpdateBlockById","blockId","updates","pageId","patch","PatchBuilder","handlePaletteChange","palette","derived","derivePaletteColors","allPatches","key","value","darkGradientVariations","pageIdx","blockIdx","base","variation","handleBlockClick","group","useKeyboardShortcuts","handleMessage","event","href","match","slug","p","id","findBlockInStructure","jsxs","jsx","Toolbar","prev","LeftPanel","CenterPanel","name","RightPanel","findPaletteByName","TemplatePicker"],"mappings":";;;;;;;;;;;;;;;;;AA8CO,SAASA,GAAkB;AAAA,EAChC,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAAC;AACF,GAA2B;AAEzB,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,SAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,YAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,aAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,IACEC,GAAe,EAAE,aAAA7B,GAAa,GAG5B,CAAC8B,IAAUC,CAAW,IAAIC,EAAS,EAAK,GACxC,CAACC,GAAmBC,EAAoB,IAAIF;AAAA,IAChD;AAAA,EAAA,GAEI,CAACG,GAAcC,CAAe,IAAIJ,EAAwB,IAAI,GAC9D,CAACK,GAAsBC,EAAuB,IAAIN,EAAS,EAAK,GAGhEO,IAAuBC;AAAA,IAC3B,CAACC,MAA2B;AAC1B,YAAMC,IAAYC,EAAYF,CAAU;AACxC,UAAI,CAACC,EAAW;AAChB,YAAME,IAAYC,EAA+BH,CAAS;AAC1D,MAAAnB,EAAaqB,CAAS,GACtBV,GAAqBO,CAAU;AAG/B,YAAMK,IAAcC,EAAuBN,CAAU;AACrD,MAAIK,KACFrB,EAAmBqB,CAAW;AAAA,IAElC;AAAA,IACA,CAACvB,GAAcE,CAAkB;AAAA,EAAA;AAInC,EAAAuB,EAAU,MAAM;AACd,IAAI,CAAC3C,KAAYJ,KACfsC,EAAqBtC,CAAiB;AAAA,EAE1C,GAAG,CAACA,CAAiB,CAAC;AAGtB,QAAMgD,IAAa,YAAY;AAC7B,QAAI,GAAC5C,KAAY,CAACH,KAAU,CAACE,IAC7B;AAAA,MAAA2B,EAAY,EAAI;AAChB,UAAI;AAEF,cAAMmB,IAAiB,MAAM,QAAQ;AAAA,WAClC7C,EAAS,SAAS,CAAA,GAAI,IAAI,OAAO8C,OAAU;AAAA,YAC1C,GAAGA;AAAA,YACH,WAAW,MAAM,QAAQ;AAAA,eACtBA,EAAK,aAAa,IAAI,IAAI,CAACC,MAAUC,GAAqBD,GAAOhD,CAAY,CAAC;AAAA,YAAA;AAAA,UACjF,EACA;AAAA,QAAA,GAGEkD,IAAoB;AAAA,UACxB,GAAGjD;AAAA,UACH,OAAO6C;AAAA,QAAA;AAGT,cAAMhD,EAAOoD,CAAiB;AAAA,MAChC,SAASC,GAAO;AACd,cAAAC,EAAO,MAAM,iBAAiBD,CAAK,GAC7BA;AAAA,MACR,UAAA;AACE,QAAAxB,EAAY,EAAK;AAAA,MACnB;AAAA;AAAA,EACF,GAEM0B,KAAgB,YAAY;AAChC,QAAI,GAACpD,KAAY,CAACF,IAClB;AAAA,MAAA4B,EAAY,EAAI;AAChB,UAAI;AACF,cAAM5B,EAAUE,CAAQ;AAAA,MAC1B,SAASkD,GAAO;AACd,QAAAC,EAAO,MAAM,qBAAqBD,CAAK;AAAA,MACzC,UAAA;AACE,QAAAxB,EAAY,EAAK;AAAA,MACnB;AAAA;AAAA,EACF,GAGM2B,KAAwBlB;AAAA,IAC5B,CAACmB,GAAiBC,MAAiC;AACjD,UAAI,CAACvD,KAAY,CAACE,EAAa;AAC/B,YAAMsD,IAAUtD,EAAoB;AACpC,UAAKsD;AAEL,YAAI;AACF,gBAAMC,IAAQC,GAAa;AAAA,YACzB1D;AAAA,YACAwD;AAAA,YACAF;AAAA,YACAC;AAAA,UAAA;AAEF,UAAIE,GAAO,UACT1C,EAAY0C,GAAO,yBAAyB;AAAA,QAEhD,SAASP,GAAO;AACd,UAAAC,EAAO,MAAM,yBAAyBD,CAAK;AAAA,QAC7C;AAAA,IACF;AAAA,IACA,CAAClD,GAAUE,GAAaa,CAAW;AAAA,EAAA,GAK/B4C,KAAsBxB,EAAY,CAACyB,MAAiB;AACxD,QAAI,CAAC5D,EAAU;AACf,UAAM6D,IAAUC,GAAoBF,CAAO,GAGrCG,IAAiE,CAAA;AAGvE,eAAW,CAACC,GAAKC,CAAK,KAAK,OAAO,QAAQJ,EAAQ,WAAW;AAC3D,MAAAE,EAAW,KAAK,EAAE,IAAI,WAAW,MAAM,iBAAiBC,CAAG,IAAI,OAAAC,GAAO;AAKxE,UAAMC,wBAA6B,IAAI;AAAA,MACrC;AAAA,MAAiB;AAAA,MAAiB;AAAA,MAAgB;AAAA,IAAA,CACnD;AAED,aAASC,IAAU,GAAGA,IAAUnE,EAAS,MAAM,QAAQmE,KAAW;AAChE,YAAMrB,IAAO9C,EAAS,MAAMmE,CAAO;AACnC,UAAKrB,GAAM;AACX,iBAASsB,IAAW,GAAGA,IAAWtB,EAAK,UAAU,QAAQsB,KAAY;AACnE,gBAAMrB,IAAQD,EAAK,UAAUsB,CAAQ,GAC/BC,IAAO,UAAUF,CAAO,cAAcC,CAAQ;AAEpD,cAAIrB,EAAM,SAAS,QAAQ;AACzB,kBAAMuB,KAAavB,EAAM,OAAe,aAAa;AACrD,YAAImB,EAAuB,IAAII,EAAS,KACtCP,EAAW;AAAA,cACT,EAAE,IAAI,WAAW,MAAM,GAAGM,CAAI,eAAe,OAAO,2BAA2BR,EAAQ,iBAAiB,QAAQA,EAAQ,eAAe,SAAA;AAAA,cACvI,EAAE,IAAI,WAAW,MAAM,GAAGQ,CAAI,eAAe,OAAOR,EAAQ,eAAA;AAAA,cAC5D,EAAE,IAAI,WAAW,MAAM,GAAGQ,CAAI,kBAAkB,OAAOR,EAAQ,kBAAA;AAAA,cAC/D,EAAE,IAAI,WAAW,MAAM,GAAGQ,CAAI,qBAAqB,OAAOR,EAAQ,cAAA;AAAA,YAAc;AAAA,UAGtF,MAAA,CAAWd,EAAM,SAAS,WACxBgB,EAAW;AAAA,YACT,EAAE,IAAI,WAAW,MAAM,GAAGM,CAAI,OAAO,OAAOR,EAAQ,SAAA;AAAA,YACpD,EAAE,IAAI,WAAW,MAAM,GAAGQ,CAAI,cAAc,OAAOR,EAAQ,YAAY,cAAA;AAAA,YACvE,EAAE,IAAI,WAAW,MAAM,GAAGQ,CAAI,mBAAmB,OAAOR,EAAQ,YAAY,QAAA;AAAA,YAC5E,EAAE,IAAI,WAAW,MAAM,GAAGQ,CAAI,gBAAgB,OAAOR,EAAQ,YAAY,QAAA;AAAA,YACzE,EAAE,IAAI,WAAW,MAAM,GAAGQ,CAAI,oBAAoB,OAAOR,EAAQ,YAAY,YAAA;AAAA,UAAY,IAElFd,EAAM,SAAS,YACxBgB,EAAW;AAAA,YACT,EAAE,IAAI,WAAW,MAAM,GAAGM,CAAI,mBAAmB,OAAOR,EAAQ,gBAAA;AAAA,UAAgB;AAAA,QAGtF;AAAA,IACF;AAEA,IAAA9C,EAAYgD,GAAY,sBAAsB,GAC9C3C,EAAmBwC,EAAQ,QAAQ,IAAI;AAAA,EACzC,GAAG,CAAC5D,GAAUe,GAAaK,CAAkB,CAAC,GAGxCmD,KAAmBpC,EAAY,CAACmB,GAAiBkB,MAAmB;AACxE,IAAA9D,EAAmB4C,CAAO,GAC1BvB,EAAgByC,KAAS,IAAI;AAAA,EAC/B,GAAG,CAAC9D,CAAkB,CAAC;AAiDvB,SA1CA+D,GAAqB;AAAA,IACnB,QAAQ9D;AAAA,IACR,QAAQC;AAAA,IACR,QAAQgC;AAAA,IACR,UAAU,MAAM;AACd,MAAIzC,KACFU,EAAkBV,CAAe;AAAA,IAErC;AAAA,IACA,YAAY,MAAMO,EAAmB,IAAI;AAAA,EAAA,CAC1C,GAEDiC,EAAU,MAAM;AACd,UAAM+B,IAAgB,CAACC,MAAwB;AAC7C,UAAIA,EAAM,MAAM,SAAS,qBAAqB,CAACA,EAAM,KAAK,KAAM;AAChE,YAAMC,IAAO,OAAOD,EAAM,KAAK,IAAI;AACnC,UAAI,CAAC3E,EAAU;AAEf,YAAM6E,IAAQD,EAAK,MAAM,2BAA2B;AACpD,UAAIC,GAAO;AACT,cAAMC,IAAOD,EAAM,CAAC,GACd/B,IAAO9C,EAAS,MAAM,KAAK,CAAC+E,MAAMA,EAAE,SAASD,CAAI;AACvD,QAAIhC,KAAMxC,EAAiBwC,EAAK,EAAE;AAClC;AAAA,MACF;AAEA,UAAI8B,EAAK,WAAW,GAAG,GAAG;AACxB,cAAMI,IAAKJ,EAAK,MAAM,CAAC;AACvB,mBAAWG,KAAK/E,EAAS;AACvB,cAAIiF,GAAqBF,EAAE,aAAa,CAAA,GAAIC,CAAE,GAAG;AAC/C,YAAA1E,EAAiByE,EAAE,EAAE,GACrBrE,EAAmBsE,CAAE;AACrB;AAAA,UACF;AAAA,MAEJ;AAAA,IACF;AACA,kBAAO,iBAAiB,WAAWN,CAAa,GACzC,MAAM,OAAO,oBAAoB,WAAWA,CAAa;AAAA,EAClE,GAAG,CAAC1E,GAAUM,GAAkBI,CAAkB,CAAC,GAG9CV,IASH,gBAAAkF,EAAC,OAAA,EAAI,WAAU,qEAEb,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAA/E;AAAA,QACA,UAAAoB;AAAA,QACA,QAAQd;AAAA,QACR,QAAQC;AAAA,QACR,QAAQgC;AAAA,QACR,WAAW9C,IAAYsD,KAAgB;AAAA,QACvC,SACExB,IACI,MAAM;AAEJ,gBAAMS,IAAYC,EAAYV,CAAiB;AAC/C,cAAIS,GAAW;AACb,YAAAnB,EAAasB,EAA+BH,CAAS,CAAC;AACtD,kBAAMI,IAAcC,EAAuBd,CAAiB;AAC5D,YAAIa,KACFrB,EAAmBqB,CAAW;AAAA,UAElC;AAAA,QACF,IACAzB;AAAA,QAEN,sBAAAgB;AAAA,QACA,0BAA0B,MAAMC,GAAwB,CAAAoD,MAAQ,CAACA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,IAIvE,gBAAAH,EAAC,OAAA,EAAI,WAAU,kDAEb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,aAAApF;AAAA,UACA,iBAAAC;AAAA,UACA,mBAAAc;AAAA,UACA,eAAe,CAAC+D,MAAO;AAAE,YAAAtE,EAAmBsE,CAAE,GAAGjD,EAAgB,IAAI;AAAA,UAAG;AAAA,UACxE,eAAelB;AAAA,QAAA;AAAA,MAAA;AAAA,MAIjB,gBAAAsE;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,UAAAvF;AAAA,UACA,eAAAC;AAAA,UACA,aAAAC;AAAA,UACA,iBAAAC;AAAA,UACA,cAAcoE;AAAA,UACd,cAAcjE;AAAA,UACd,WAAW,MAAM;AACf,kBAAMkF,IAAO,OAAO,iBAAiB;AACrC,gBAAI,CAACA,EAAM;AACX,kBAAMV,IAAOU,EAAK,YAAA,EAAc,QAAQ,QAAQ,GAAG;AAEnD,YAAAjF,EADWuE,GACCU,GAAMV,CAAI;AAAA,UACxB;AAAA,UACA,cAActE;AAAA,UACd,eAAAC;AAAA,UACA,eAAe4C;AAAA,UACf,eAAAhC;AAAA,UACA,kBAAkBC;AAAA,UAClB,oBAAoBC;AAAA,UACpB,sBAAAS;AAAA,UACA,cAAAF;AAAA,QAAA;AAAA,MAAA;AAAA,MAIF,gBAAAqD;AAAA,QAACM;AAAA,QAAA;AAAA,UACC,mBAAAxE;AAAA,UACA,eAAAb;AAAA,UACA,iBAAiBe,IAAkBuE,GAAkBvE,CAAe,IAAI;AAAA,UACxE,iBAAiBwC;AAAA,UACjB,eAAe7C;AAAA,UACf,cAAAf;AAAA,UACA,UAAAC;AAAA,UACA,eAAAC;AAAA,UACA,cAAA6B;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,EAAA,CACF;AAAA,EAAA,GACF,IApFE,gBAAAqD,EAAC,SAAI,WAAU,qEACb,4BAACQ,IAAA,EAAe,kBAAkBzD,GAAsB,EAAA,CAC1D;AAoFN;"}
|
|
@@ -13,8 +13,11 @@ export interface ColorPalette {
|
|
|
13
13
|
linkColor?: string;
|
|
14
14
|
menuLinkColor?: string;
|
|
15
15
|
gradient: string[];
|
|
16
|
+
heroGradientStart?: string;
|
|
17
|
+
heroGradientEnd?: string;
|
|
16
18
|
}
|
|
17
19
|
export declare const colorPalettes: ColorPalette[];
|
|
20
|
+
export declare function findPaletteByName(name: string): ColorPalette | undefined;
|
|
18
21
|
interface PaletteSelectorProps {
|
|
19
22
|
selectedPalette?: ColorPalette;
|
|
20
23
|
onPaletteChange: (palette: ColorPalette) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaletteSelector.d.ts","sourceRoot":"","sources":["../../src/editor/PaletteSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"PaletteSelector.d.ts","sourceRoot":"","sources":["../../src/editor/PaletteSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAGnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAMD,eAAO,MAAM,aAAa,EAAE,YAAY,EAwOvC,CAAC;AAMF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAExE;AAMD,UAAU,oBAAoB;IAC5B,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;CAClD;AAED,wBAAgB,eAAe,CAAC,EAC9B,eAAe,EACf,eAAe,GAChB,EAAE,oBAAoB,2CAyCtB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { jsx as a, jsxs as
|
|
2
|
-
import { cn as
|
|
3
|
-
const
|
|
1
|
+
import { jsx as a, jsxs as f } from "react/jsx-runtime";
|
|
2
|
+
import { cn as i } from "../utils/cn.js";
|
|
3
|
+
const d = [
|
|
4
4
|
// Azuis
|
|
5
5
|
{
|
|
6
6
|
name: "Blue Serenity",
|
|
@@ -14,7 +14,9 @@ const i = [
|
|
|
14
14
|
// Links gerais - azul escuro
|
|
15
15
|
menuLinkColor: "#2563eb",
|
|
16
16
|
// Links do menu - tom do primary mais escuro
|
|
17
|
-
gradient: ["#3b82f6", "#60a5fa", "#93c5fd"]
|
|
17
|
+
gradient: ["#3b82f6", "#60a5fa", "#93c5fd"],
|
|
18
|
+
heroGradientStart: "#1e3a5f",
|
|
19
|
+
heroGradientEnd: "#2d5a8e"
|
|
18
20
|
},
|
|
19
21
|
{
|
|
20
22
|
name: "Ocean Deep",
|
|
@@ -28,7 +30,9 @@ const i = [
|
|
|
28
30
|
// Links gerais - azul claro
|
|
29
31
|
menuLinkColor: "#38bdf8",
|
|
30
32
|
// Links do menu - tom do primary mais claro
|
|
31
|
-
gradient: ["#0284c7", "#0369a1", "#38bdf8"]
|
|
33
|
+
gradient: ["#0284c7", "#0369a1", "#38bdf8"],
|
|
34
|
+
heroGradientStart: "#0a1628",
|
|
35
|
+
heroGradientEnd: "#0c2d4d"
|
|
32
36
|
},
|
|
33
37
|
// Verdes
|
|
34
38
|
{
|
|
@@ -43,7 +47,9 @@ const i = [
|
|
|
43
47
|
// Links gerais - verde escuro
|
|
44
48
|
menuLinkColor: "#059669",
|
|
45
49
|
// Links do menu - tom do primary mais escuro
|
|
46
|
-
gradient: ["#10b981", "#059669", "#34d399"]
|
|
50
|
+
gradient: ["#10b981", "#059669", "#34d399"],
|
|
51
|
+
heroGradientStart: "#0d3320",
|
|
52
|
+
heroGradientEnd: "#1a5c3a"
|
|
47
53
|
},
|
|
48
54
|
{
|
|
49
55
|
name: "Forest",
|
|
@@ -57,7 +63,9 @@ const i = [
|
|
|
57
63
|
// Links gerais - verde claro
|
|
58
64
|
menuLinkColor: "#4ade80",
|
|
59
65
|
// Links do menu - tom do primary mais claro
|
|
60
|
-
gradient: ["#22c55e", "#16a34a", "#4ade80"]
|
|
66
|
+
gradient: ["#22c55e", "#16a34a", "#4ade80"],
|
|
67
|
+
heroGradientStart: "#0a1f12",
|
|
68
|
+
heroGradientEnd: "#153d25"
|
|
61
69
|
},
|
|
62
70
|
// Roxos
|
|
63
71
|
{
|
|
@@ -72,7 +80,9 @@ const i = [
|
|
|
72
80
|
// Links gerais - roxo escuro
|
|
73
81
|
menuLinkColor: "#7c3aed",
|
|
74
82
|
// Links do menu - tom do primary mais escuro
|
|
75
|
-
gradient: ["#8b5cf6", "#7c3aed", "#a78bfa"]
|
|
83
|
+
gradient: ["#8b5cf6", "#7c3aed", "#a78bfa"],
|
|
84
|
+
heroGradientStart: "#2d1b69",
|
|
85
|
+
heroGradientEnd: "#4c2889"
|
|
76
86
|
},
|
|
77
87
|
{
|
|
78
88
|
name: "Midnight",
|
|
@@ -86,7 +96,9 @@ const i = [
|
|
|
86
96
|
// Links gerais - roxo claro
|
|
87
97
|
menuLinkColor: "#c084fc",
|
|
88
98
|
// Links do menu - tom do primary mais claro
|
|
89
|
-
gradient: ["#a855f7", "#9333ea", "#c084fc"]
|
|
99
|
+
gradient: ["#a855f7", "#9333ea", "#c084fc"],
|
|
100
|
+
heroGradientStart: "#1e1b4b",
|
|
101
|
+
heroGradientEnd: "#312e81"
|
|
90
102
|
},
|
|
91
103
|
// Laranjas/Amarelos
|
|
92
104
|
{
|
|
@@ -101,7 +113,9 @@ const i = [
|
|
|
101
113
|
// Links gerais - laranja escuro
|
|
102
114
|
menuLinkColor: "#ea580c",
|
|
103
115
|
// Links do menu - tom do primary mais escuro
|
|
104
|
-
gradient: ["#f97316", "#ea580c", "#fb923c"]
|
|
116
|
+
gradient: ["#f97316", "#ea580c", "#fb923c"],
|
|
117
|
+
heroGradientStart: "#4a1d0a",
|
|
118
|
+
heroGradientEnd: "#7a3012"
|
|
105
119
|
},
|
|
106
120
|
{
|
|
107
121
|
name: "Golden",
|
|
@@ -115,7 +129,9 @@ const i = [
|
|
|
115
129
|
// Links gerais - amarelo claro
|
|
116
130
|
menuLinkColor: "#fde047",
|
|
117
131
|
// Links do menu - amarelo bem claro para contraste
|
|
118
|
-
gradient: ["#eab308", "#ca8a04", "#facc15"]
|
|
132
|
+
gradient: ["#eab308", "#ca8a04", "#facc15"],
|
|
133
|
+
heroGradientStart: "#1a1500",
|
|
134
|
+
heroGradientEnd: "#3d3005"
|
|
119
135
|
},
|
|
120
136
|
// Vermelhos/Rosas
|
|
121
137
|
{
|
|
@@ -130,7 +146,9 @@ const i = [
|
|
|
130
146
|
// Links gerais - rosa escuro
|
|
131
147
|
menuLinkColor: "#e11d48",
|
|
132
148
|
// Links do menu - tom do primary mais escuro
|
|
133
|
-
gradient: ["#f43f5e", "#e11d48", "#fb7185"]
|
|
149
|
+
gradient: ["#f43f5e", "#e11d48", "#fb7185"],
|
|
150
|
+
heroGradientStart: "#4a0a1a",
|
|
151
|
+
heroGradientEnd: "#7a1230"
|
|
134
152
|
},
|
|
135
153
|
{
|
|
136
154
|
name: "Berry",
|
|
@@ -144,7 +162,9 @@ const i = [
|
|
|
144
162
|
// Links gerais - amarelo para contraste
|
|
145
163
|
menuLinkColor: "#fda4d0",
|
|
146
164
|
// Links do menu - rosa bem claro para contraste
|
|
147
|
-
gradient: ["#ec4899", "#db2777", "#f472b6"]
|
|
165
|
+
gradient: ["#ec4899", "#db2777", "#f472b6"],
|
|
166
|
+
heroGradientStart: "#3d0724",
|
|
167
|
+
heroGradientEnd: "#6b1040"
|
|
148
168
|
},
|
|
149
169
|
// Neutros
|
|
150
170
|
{
|
|
@@ -159,7 +179,9 @@ const i = [
|
|
|
159
179
|
// Links gerais - cinza escuro
|
|
160
180
|
menuLinkColor: "#334155",
|
|
161
181
|
// Links do menu - tom do primary mais escuro
|
|
162
|
-
gradient: ["#475569", "#334155", "#64748b"]
|
|
182
|
+
gradient: ["#475569", "#334155", "#64748b"],
|
|
183
|
+
heroGradientStart: "#1a1a2e",
|
|
184
|
+
heroGradientEnd: "#2d2d4a"
|
|
163
185
|
},
|
|
164
186
|
{
|
|
165
187
|
name: "Dark Mode",
|
|
@@ -173,29 +195,95 @@ const i = [
|
|
|
173
195
|
// Links gerais - índigo claro
|
|
174
196
|
menuLinkColor: "#818cf8",
|
|
175
197
|
// Links do menu - tom do primary mais claro
|
|
176
|
-
gradient: ["#6366f1", "#4f46e5", "#818cf8"]
|
|
198
|
+
gradient: ["#6366f1", "#4f46e5", "#818cf8"],
|
|
199
|
+
heroGradientStart: "#0f0a2e",
|
|
200
|
+
heroGradientEnd: "#1a1552"
|
|
201
|
+
},
|
|
202
|
+
// Template-specific palettes
|
|
203
|
+
{
|
|
204
|
+
name: "Indigo & Cyan",
|
|
205
|
+
primary: "#6366f1",
|
|
206
|
+
secondary: "#0ea5e9",
|
|
207
|
+
accent: "#f97316",
|
|
208
|
+
background: "#ffffff",
|
|
209
|
+
surface: "#f8fafc",
|
|
210
|
+
text: "#0f172a",
|
|
211
|
+
linkColor: "#4338ca",
|
|
212
|
+
menuLinkColor: "#6366f1",
|
|
213
|
+
gradient: ["#6366f1", "#0ea5e9", "#f97316"],
|
|
214
|
+
heroGradientStart: "#3730a3",
|
|
215
|
+
heroGradientEnd: "#0369a1"
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: "Blue Academy",
|
|
219
|
+
primary: "#2563eb",
|
|
220
|
+
secondary: "#1d4ed8",
|
|
221
|
+
accent: "#3b82f6",
|
|
222
|
+
background: "#ffffff",
|
|
223
|
+
surface: "#f8fafc",
|
|
224
|
+
text: "#0f172a",
|
|
225
|
+
linkColor: "#1e40af",
|
|
226
|
+
menuLinkColor: "#2563eb",
|
|
227
|
+
gradient: ["#2563eb", "#1d4ed8", "#3b82f6"],
|
|
228
|
+
heroGradientStart: "#1e3a8a",
|
|
229
|
+
heroGradientEnd: "#1e40af"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: "Indigo Amber",
|
|
233
|
+
primary: "#4f46e5",
|
|
234
|
+
secondary: "#6366f1",
|
|
235
|
+
accent: "#f59e0b",
|
|
236
|
+
background: "#ffffff",
|
|
237
|
+
surface: "#f9fafb",
|
|
238
|
+
text: "#111827",
|
|
239
|
+
linkColor: "#4338ca",
|
|
240
|
+
menuLinkColor: "#4f46e5",
|
|
241
|
+
gradient: ["#4f46e5", "#6366f1", "#f59e0b"],
|
|
242
|
+
heroGradientStart: "#312e81",
|
|
243
|
+
heroGradientEnd: "#3730a3"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: "Indigo Pro",
|
|
247
|
+
primary: "#6366f1",
|
|
248
|
+
secondary: "#4f46e5",
|
|
249
|
+
accent: "#8b5cf6",
|
|
250
|
+
background: "#ffffff",
|
|
251
|
+
surface: "#f8fafc",
|
|
252
|
+
text: "#0f172a",
|
|
253
|
+
linkColor: "#4338ca",
|
|
254
|
+
menuLinkColor: "#6366f1",
|
|
255
|
+
gradient: ["#6366f1", "#4f46e5", "#8b5cf6"],
|
|
256
|
+
heroGradientStart: "#1e1b4b",
|
|
257
|
+
heroGradientEnd: "#312e81"
|
|
177
258
|
}
|
|
178
259
|
];
|
|
179
|
-
function m({
|
|
260
|
+
function m(r) {
|
|
261
|
+
return d.find((n) => n.name === r);
|
|
262
|
+
}
|
|
263
|
+
function s({
|
|
180
264
|
selectedPalette: r,
|
|
181
|
-
onPaletteChange:
|
|
265
|
+
onPaletteChange: n
|
|
182
266
|
}) {
|
|
183
|
-
const
|
|
184
|
-
return /* @__PURE__ */ a("div", { className: "grid grid-cols-2 gap-3", children:
|
|
267
|
+
const o = (e) => r?.name === e.name;
|
|
268
|
+
return /* @__PURE__ */ a("div", { className: "grid grid-cols-2 gap-3", children: d.map((e) => /* @__PURE__ */ f(
|
|
185
269
|
"button",
|
|
186
270
|
{
|
|
187
|
-
onClick: () =>
|
|
188
|
-
className:
|
|
271
|
+
onClick: () => n(e),
|
|
272
|
+
className: i(
|
|
189
273
|
"rounded-lg cursor-pointer transition-all p-2",
|
|
190
274
|
"flex flex-col items-center gap-1.5",
|
|
191
275
|
"border-2",
|
|
192
|
-
|
|
276
|
+
o(e) ? "border-blue-500 bg-blue-50 dark:bg-blue-950/30 shadow-sm" : "border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600",
|
|
193
277
|
"bg-white dark:bg-gray-800",
|
|
194
278
|
"hover:scale-[1.02] active:scale-[0.98]"
|
|
195
279
|
),
|
|
196
280
|
title: e.name,
|
|
197
281
|
children: [
|
|
198
|
-
/* @__PURE__ */
|
|
282
|
+
/* @__PURE__ */ f("div", { className: "w-full h-8 rounded-md flex overflow-hidden mb-1.5", children: [
|
|
283
|
+
e.gradient.map((c, t) => /* @__PURE__ */ a("span", { className: "flex-1", style: { background: c } }, t)),
|
|
284
|
+
e.heroGradientStart && /* @__PURE__ */ a("span", { className: "flex-1", style: { background: e.heroGradientStart } }),
|
|
285
|
+
e.heroGradientEnd && /* @__PURE__ */ a("span", { className: "flex-1", style: { background: e.heroGradientEnd } })
|
|
286
|
+
] }),
|
|
199
287
|
/* @__PURE__ */ a("span", { className: "text-xs font-medium text-gray-700 dark:text-gray-300 text-center leading-tight px-1", children: e.name })
|
|
200
288
|
]
|
|
201
289
|
},
|
|
@@ -203,7 +291,8 @@ function m({
|
|
|
203
291
|
)) });
|
|
204
292
|
}
|
|
205
293
|
export {
|
|
206
|
-
|
|
207
|
-
|
|
294
|
+
s as PaletteSelector,
|
|
295
|
+
d as colorPalettes,
|
|
296
|
+
m as findPaletteByName
|
|
208
297
|
};
|
|
209
298
|
//# sourceMappingURL=PaletteSelector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaletteSelector.js","sources":["../../src/editor/PaletteSelector.tsx"],"sourcesContent":["/**\r\n * Palette Selector\r\n * Seletor de paletas de cores para o editor\r\n */\r\n\r\nimport { cn } from \"../utils/cn\";\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface ColorPalette {\r\n name: string;\r\n primary: string;\r\n secondary: string;\r\n accent: string;\r\n background: string;\r\n surface?: string;\r\n text: string;\r\n linkColor?: string; // Cor específica para links em geral (dropdowns, etc)\r\n menuLinkColor?: string; // Cor específica para links do menu navbar (derivada do primary)\r\n gradient: string[];\r\n}\r\n\r\n// ============================================================================\r\n// Palettes (text e background devem ter contraste adequado; evitar text === background)\r\n// ============================================================================\r\n\r\nexport const colorPalettes: ColorPalette[] = [\r\n // Azuis\r\n {\r\n name: \"Blue Serenity\",\r\n primary: \"#3b82f6\",\r\n secondary: \"#60a5fa\",\r\n accent: \"#93c5fd\",\r\n background: \"#ffffff\",\r\n surface: \"#f8fafc\",\r\n text: \"#1e293b\",\r\n linkColor: \"#1e40af\", // Links gerais - azul escuro\r\n menuLinkColor: \"#2563eb\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#3b82f6\", \"#60a5fa\", \"#93c5fd\"],\r\n },\r\n {\r\n name: \"Ocean Deep\",\r\n primary: \"#0284c7\",\r\n secondary: \"#0369a1\",\r\n accent: \"#38bdf8\",\r\n background: \"#0f172a\",\r\n surface: \"#1e293b\",\r\n text: \"#f8fafc\",\r\n linkColor: \"#7dd3fc\", // Links gerais - azul claro\r\n menuLinkColor: \"#38bdf8\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#0284c7\", \"#0369a1\", \"#38bdf8\"],\r\n },\r\n // Verdes\r\n {\r\n name: \"Emerald\",\r\n primary: \"#10b981\",\r\n secondary: \"#059669\",\r\n accent: \"#34d399\",\r\n background: \"#ffffff\",\r\n surface: \"#f0fdf4\",\r\n text: \"#166534\",\r\n linkColor: \"#047857\", // Links gerais - verde escuro\r\n menuLinkColor: \"#059669\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#10b981\", \"#059669\", \"#34d399\"],\r\n },\r\n {\r\n name: \"Forest\",\r\n primary: \"#22c55e\",\r\n secondary: \"#16a34a\",\r\n accent: \"#4ade80\",\r\n background: \"#052e16\",\r\n surface: \"#14532d\",\r\n text: \"#f0fdf4\",\r\n linkColor: \"#86efac\", // Links gerais - verde claro\r\n menuLinkColor: \"#4ade80\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#22c55e\", \"#16a34a\", \"#4ade80\"],\r\n },\r\n // Roxos\r\n {\r\n name: \"Purple Dream\",\r\n primary: \"#8b5cf6\",\r\n secondary: \"#7c3aed\",\r\n accent: \"#a78bfa\",\r\n background: \"#ffffff\",\r\n surface: \"#faf5ff\",\r\n text: \"#4c1d95\",\r\n linkColor: \"#6d28d9\", // Links gerais - roxo escuro\r\n menuLinkColor: \"#7c3aed\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#8b5cf6\", \"#7c3aed\", \"#a78bfa\"],\r\n },\r\n {\r\n name: \"Midnight\",\r\n primary: \"#a855f7\",\r\n secondary: \"#9333ea\",\r\n accent: \"#c084fc\",\r\n background: \"#1e1b4b\",\r\n surface: \"#312e81\",\r\n text: \"#f5f3ff\",\r\n linkColor: \"#d8b4fe\", // Links gerais - roxo claro\r\n menuLinkColor: \"#c084fc\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#a855f7\", \"#9333ea\", \"#c084fc\"],\r\n },\r\n // Laranjas/Amarelos\r\n {\r\n name: \"Sunset\",\r\n primary: \"#f97316\",\r\n secondary: \"#ea580c\",\r\n accent: \"#fb923c\",\r\n background: \"#ffffff\",\r\n surface: \"#fff7ed\",\r\n text: \"#7c2d12\",\r\n linkColor: \"#c2410c\", // Links gerais - laranja escuro\r\n menuLinkColor: \"#ea580c\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#f97316\", \"#ea580c\", \"#fb923c\"],\r\n },\r\n {\r\n name: \"Golden\",\r\n primary: \"#eab308\",\r\n secondary: \"#ca8a04\",\r\n accent: \"#facc15\",\r\n background: \"#1a1a1a\",\r\n surface: \"#262626\",\r\n text: \"#fefce8\",\r\n linkColor: \"#fde047\", // Links gerais - amarelo claro\r\n menuLinkColor: \"#fde047\", // Links do menu - amarelo bem claro para contraste\r\n gradient: [\"#eab308\", \"#ca8a04\", \"#facc15\"],\r\n },\r\n // Vermelhos/Rosas\r\n {\r\n name: \"Rose\",\r\n primary: \"#f43f5e\",\r\n secondary: \"#e11d48\",\r\n accent: \"#fb7185\",\r\n background: \"#ffffff\",\r\n surface: \"#fff1f2\",\r\n text: \"#881337\",\r\n linkColor: \"#be123c\", // Links gerais - rosa escuro\r\n menuLinkColor: \"#e11d48\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#f43f5e\", \"#e11d48\", \"#fb7185\"],\r\n },\r\n {\r\n name: \"Berry\",\r\n primary: \"#ec4899\",\r\n secondary: \"#db2777\",\r\n accent: \"#f472b6\",\r\n background: \"#500724\",\r\n surface: \"#831843\",\r\n text: \"#fdf2f8\",\r\n linkColor: \"#fbbf24\", // Links gerais - amarelo para contraste\r\n menuLinkColor: \"#fda4d0\", // Links do menu - rosa bem claro para contraste\r\n gradient: [\"#ec4899\", \"#db2777\", \"#f472b6\"],\r\n },\r\n // Neutros\r\n {\r\n name: \"Slate Modern\",\r\n primary: \"#475569\",\r\n secondary: \"#334155\",\r\n accent: \"#64748b\",\r\n background: \"#ffffff\",\r\n surface: \"#f8fafc\",\r\n text: \"#0f172a\",\r\n linkColor: \"#1e293b\", // Links gerais - cinza escuro\r\n menuLinkColor: \"#334155\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#475569\", \"#334155\", \"#64748b\"],\r\n },\r\n {\r\n name: \"Dark Mode\",\r\n primary: \"#6366f1\",\r\n secondary: \"#4f46e5\",\r\n accent: \"#818cf8\",\r\n background: \"#0f0f0f\",\r\n surface: \"#1a1a1a\",\r\n text: \"#fafafa\",\r\n linkColor: \"#a5b4fc\", // Links gerais - índigo claro\r\n menuLinkColor: \"#818cf8\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#6366f1\", \"#4f46e5\", \"#818cf8\"],\r\n },\r\n];\r\n\r\n// ============================================================================\r\n// Component\r\n// ============================================================================\r\n\r\ninterface PaletteSelectorProps {\r\n selectedPalette?: ColorPalette;\r\n onPaletteChange: (palette: ColorPalette) => void;\r\n}\r\n\r\nexport function PaletteSelector({\r\n selectedPalette,\r\n onPaletteChange,\r\n}: PaletteSelectorProps) {\r\n const isSelected = (palette: ColorPalette) => {\r\n return selectedPalette?.name === palette.name;\r\n };\r\n\r\n return (\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n {colorPalettes.map((palette) => (\r\n <button\r\n key={palette.name}\r\n onClick={() => onPaletteChange(palette)}\r\n className={cn(\r\n \"rounded-lg cursor-pointer transition-all p-2\",\r\n \"flex flex-col items-center gap-1.5\",\r\n \"border-2\",\r\n isSelected(palette)\r\n ? \"border-blue-500 bg-blue-50 dark:bg-blue-950/30 shadow-sm\"\r\n : \"border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600\",\r\n \"bg-white dark:bg-gray-800\",\r\n \"hover:scale-[1.02] active:scale-[0.98]\",\r\n )}\r\n title={palette.name}\r\n >\r\n <div className=\"w-full h-8 rounded-md flex overflow-hidden mb-1.5\">\r\n {palette.gradient.map((color, i) => (\r\n <span key={i} className=\"flex-1\" style={{ background: color }} />\r\n ))}\r\n </div>\r\n <span className=\"text-xs font-medium text-gray-700 dark:text-gray-300 text-center leading-tight px-1\">\r\n {palette.name}\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":["colorPalettes","PaletteSelector","selectedPalette","onPaletteChange","isSelected","palette","jsxs","cn","jsx","color","i"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaletteSelector.js","sources":["../../src/editor/PaletteSelector.tsx"],"sourcesContent":["/**\r\n * Palette Selector\r\n * Seletor de paletas de cores para o editor\r\n */\r\n\r\nimport { cn } from \"../utils/cn\";\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface ColorPalette {\r\n name: string;\r\n primary: string;\r\n secondary: string;\r\n accent: string;\r\n background: string;\r\n surface?: string;\r\n text: string;\r\n linkColor?: string; // Cor específica para links em geral (dropdowns, etc)\r\n menuLinkColor?: string; // Cor específica para links do menu navbar (derivada do primary)\r\n gradient: string[];\r\n\r\n // Hero gradient overrides (derivados automaticamente se ausentes)\r\n heroGradientStart?: string;\r\n heroGradientEnd?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Palettes (text e background devem ter contraste adequado; evitar text === background)\r\n// ============================================================================\r\n\r\nexport const colorPalettes: ColorPalette[] = [\r\n // Azuis\r\n {\r\n name: \"Blue Serenity\",\r\n primary: \"#3b82f6\",\r\n secondary: \"#60a5fa\",\r\n accent: \"#93c5fd\",\r\n background: \"#ffffff\",\r\n surface: \"#f8fafc\",\r\n text: \"#1e293b\",\r\n linkColor: \"#1e40af\", // Links gerais - azul escuro\r\n menuLinkColor: \"#2563eb\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#3b82f6\", \"#60a5fa\", \"#93c5fd\"],\r\n heroGradientStart: \"#1e3a5f\",\r\n heroGradientEnd: \"#2d5a8e\",\r\n },\r\n {\r\n name: \"Ocean Deep\",\r\n primary: \"#0284c7\",\r\n secondary: \"#0369a1\",\r\n accent: \"#38bdf8\",\r\n background: \"#0f172a\",\r\n surface: \"#1e293b\",\r\n text: \"#f8fafc\",\r\n linkColor: \"#7dd3fc\", // Links gerais - azul claro\r\n menuLinkColor: \"#38bdf8\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#0284c7\", \"#0369a1\", \"#38bdf8\"],\r\n heroGradientStart: \"#0a1628\",\r\n heroGradientEnd: \"#0c2d4d\",\r\n },\r\n // Verdes\r\n {\r\n name: \"Emerald\",\r\n primary: \"#10b981\",\r\n secondary: \"#059669\",\r\n accent: \"#34d399\",\r\n background: \"#ffffff\",\r\n surface: \"#f0fdf4\",\r\n text: \"#166534\",\r\n linkColor: \"#047857\", // Links gerais - verde escuro\r\n menuLinkColor: \"#059669\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#10b981\", \"#059669\", \"#34d399\"],\r\n heroGradientStart: \"#0d3320\",\r\n heroGradientEnd: \"#1a5c3a\",\r\n },\r\n {\r\n name: \"Forest\",\r\n primary: \"#22c55e\",\r\n secondary: \"#16a34a\",\r\n accent: \"#4ade80\",\r\n background: \"#052e16\",\r\n surface: \"#14532d\",\r\n text: \"#f0fdf4\",\r\n linkColor: \"#86efac\", // Links gerais - verde claro\r\n menuLinkColor: \"#4ade80\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#22c55e\", \"#16a34a\", \"#4ade80\"],\r\n heroGradientStart: \"#0a1f12\",\r\n heroGradientEnd: \"#153d25\",\r\n },\r\n // Roxos\r\n {\r\n name: \"Purple Dream\",\r\n primary: \"#8b5cf6\",\r\n secondary: \"#7c3aed\",\r\n accent: \"#a78bfa\",\r\n background: \"#ffffff\",\r\n surface: \"#faf5ff\",\r\n text: \"#4c1d95\",\r\n linkColor: \"#6d28d9\", // Links gerais - roxo escuro\r\n menuLinkColor: \"#7c3aed\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#8b5cf6\", \"#7c3aed\", \"#a78bfa\"],\r\n heroGradientStart: \"#2d1b69\",\r\n heroGradientEnd: \"#4c2889\",\r\n },\r\n {\r\n name: \"Midnight\",\r\n primary: \"#a855f7\",\r\n secondary: \"#9333ea\",\r\n accent: \"#c084fc\",\r\n background: \"#1e1b4b\",\r\n surface: \"#312e81\",\r\n text: \"#f5f3ff\",\r\n linkColor: \"#d8b4fe\", // Links gerais - roxo claro\r\n menuLinkColor: \"#c084fc\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#a855f7\", \"#9333ea\", \"#c084fc\"],\r\n heroGradientStart: \"#1e1b4b\",\r\n heroGradientEnd: \"#312e81\",\r\n },\r\n // Laranjas/Amarelos\r\n {\r\n name: \"Sunset\",\r\n primary: \"#f97316\",\r\n secondary: \"#ea580c\",\r\n accent: \"#fb923c\",\r\n background: \"#ffffff\",\r\n surface: \"#fff7ed\",\r\n text: \"#7c2d12\",\r\n linkColor: \"#c2410c\", // Links gerais - laranja escuro\r\n menuLinkColor: \"#ea580c\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#f97316\", \"#ea580c\", \"#fb923c\"],\r\n heroGradientStart: \"#4a1d0a\",\r\n heroGradientEnd: \"#7a3012\",\r\n },\r\n {\r\n name: \"Golden\",\r\n primary: \"#eab308\",\r\n secondary: \"#ca8a04\",\r\n accent: \"#facc15\",\r\n background: \"#1a1a1a\",\r\n surface: \"#262626\",\r\n text: \"#fefce8\",\r\n linkColor: \"#fde047\", // Links gerais - amarelo claro\r\n menuLinkColor: \"#fde047\", // Links do menu - amarelo bem claro para contraste\r\n gradient: [\"#eab308\", \"#ca8a04\", \"#facc15\"],\r\n heroGradientStart: \"#1a1500\",\r\n heroGradientEnd: \"#3d3005\",\r\n },\r\n // Vermelhos/Rosas\r\n {\r\n name: \"Rose\",\r\n primary: \"#f43f5e\",\r\n secondary: \"#e11d48\",\r\n accent: \"#fb7185\",\r\n background: \"#ffffff\",\r\n surface: \"#fff1f2\",\r\n text: \"#881337\",\r\n linkColor: \"#be123c\", // Links gerais - rosa escuro\r\n menuLinkColor: \"#e11d48\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#f43f5e\", \"#e11d48\", \"#fb7185\"],\r\n heroGradientStart: \"#4a0a1a\",\r\n heroGradientEnd: \"#7a1230\",\r\n },\r\n {\r\n name: \"Berry\",\r\n primary: \"#ec4899\",\r\n secondary: \"#db2777\",\r\n accent: \"#f472b6\",\r\n background: \"#500724\",\r\n surface: \"#831843\",\r\n text: \"#fdf2f8\",\r\n linkColor: \"#fbbf24\", // Links gerais - amarelo para contraste\r\n menuLinkColor: \"#fda4d0\", // Links do menu - rosa bem claro para contraste\r\n gradient: [\"#ec4899\", \"#db2777\", \"#f472b6\"],\r\n heroGradientStart: \"#3d0724\",\r\n heroGradientEnd: \"#6b1040\",\r\n },\r\n // Neutros\r\n {\r\n name: \"Slate Modern\",\r\n primary: \"#475569\",\r\n secondary: \"#334155\",\r\n accent: \"#64748b\",\r\n background: \"#ffffff\",\r\n surface: \"#f8fafc\",\r\n text: \"#0f172a\",\r\n linkColor: \"#1e293b\", // Links gerais - cinza escuro\r\n menuLinkColor: \"#334155\", // Links do menu - tom do primary mais escuro\r\n gradient: [\"#475569\", \"#334155\", \"#64748b\"],\r\n heroGradientStart: \"#1a1a2e\",\r\n heroGradientEnd: \"#2d2d4a\",\r\n },\r\n {\r\n name: \"Dark Mode\",\r\n primary: \"#6366f1\",\r\n secondary: \"#4f46e5\",\r\n accent: \"#818cf8\",\r\n background: \"#0f0f0f\",\r\n surface: \"#1a1a1a\",\r\n text: \"#fafafa\",\r\n linkColor: \"#a5b4fc\", // Links gerais - índigo claro\r\n menuLinkColor: \"#818cf8\", // Links do menu - tom do primary mais claro\r\n gradient: [\"#6366f1\", \"#4f46e5\", \"#818cf8\"],\r\n heroGradientStart: \"#0f0a2e\",\r\n heroGradientEnd: \"#1a1552\",\r\n },\r\n // Template-specific palettes\r\n {\r\n name: \"Indigo & Cyan\",\r\n primary: \"#6366f1\",\r\n secondary: \"#0ea5e9\",\r\n accent: \"#f97316\",\r\n background: \"#ffffff\",\r\n surface: \"#f8fafc\",\r\n text: \"#0f172a\",\r\n linkColor: \"#4338ca\",\r\n menuLinkColor: \"#6366f1\",\r\n gradient: [\"#6366f1\", \"#0ea5e9\", \"#f97316\"],\r\n heroGradientStart: \"#3730a3\",\r\n heroGradientEnd: \"#0369a1\",\r\n },\r\n {\r\n name: \"Blue Academy\",\r\n primary: \"#2563eb\",\r\n secondary: \"#1d4ed8\",\r\n accent: \"#3b82f6\",\r\n background: \"#ffffff\",\r\n surface: \"#f8fafc\",\r\n text: \"#0f172a\",\r\n linkColor: \"#1e40af\",\r\n menuLinkColor: \"#2563eb\",\r\n gradient: [\"#2563eb\", \"#1d4ed8\", \"#3b82f6\"],\r\n heroGradientStart: \"#1e3a8a\",\r\n heroGradientEnd: \"#1e40af\",\r\n },\r\n {\r\n name: \"Indigo Amber\",\r\n primary: \"#4f46e5\",\r\n secondary: \"#6366f1\",\r\n accent: \"#f59e0b\",\r\n background: \"#ffffff\",\r\n surface: \"#f9fafb\",\r\n text: \"#111827\",\r\n linkColor: \"#4338ca\",\r\n menuLinkColor: \"#4f46e5\",\r\n gradient: [\"#4f46e5\", \"#6366f1\", \"#f59e0b\"],\r\n heroGradientStart: \"#312e81\",\r\n heroGradientEnd: \"#3730a3\",\r\n },\r\n {\r\n name: \"Indigo Pro\",\r\n primary: \"#6366f1\",\r\n secondary: \"#4f46e5\",\r\n accent: \"#8b5cf6\",\r\n background: \"#ffffff\",\r\n surface: \"#f8fafc\",\r\n text: \"#0f172a\",\r\n linkColor: \"#4338ca\",\r\n menuLinkColor: \"#6366f1\",\r\n gradient: [\"#6366f1\", \"#4f46e5\", \"#8b5cf6\"],\r\n heroGradientStart: \"#1e1b4b\",\r\n heroGradientEnd: \"#312e81\",\r\n },\r\n];\r\n\r\n// ============================================================================\r\n// Utilities\r\n// ============================================================================\r\n\r\nexport function findPaletteByName(name: string): ColorPalette | undefined {\r\n return colorPalettes.find(p => p.name === name);\r\n}\r\n\r\n// ============================================================================\r\n// Component\r\n// ============================================================================\r\n\r\ninterface PaletteSelectorProps {\r\n selectedPalette?: ColorPalette;\r\n onPaletteChange: (palette: ColorPalette) => void;\r\n}\r\n\r\nexport function PaletteSelector({\r\n selectedPalette,\r\n onPaletteChange,\r\n}: PaletteSelectorProps) {\r\n const isSelected = (palette: ColorPalette) => {\r\n return selectedPalette?.name === palette.name;\r\n };\r\n\r\n return (\r\n <div className=\"grid grid-cols-2 gap-3\">\r\n {colorPalettes.map((palette) => (\r\n <button\r\n key={palette.name}\r\n onClick={() => onPaletteChange(palette)}\r\n className={cn(\r\n \"rounded-lg cursor-pointer transition-all p-2\",\r\n \"flex flex-col items-center gap-1.5\",\r\n \"border-2\",\r\n isSelected(palette)\r\n ? \"border-blue-500 bg-blue-50 dark:bg-blue-950/30 shadow-sm\"\r\n : \"border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600\",\r\n \"bg-white dark:bg-gray-800\",\r\n \"hover:scale-[1.02] active:scale-[0.98]\",\r\n )}\r\n title={palette.name}\r\n >\r\n <div className=\"w-full h-8 rounded-md flex overflow-hidden mb-1.5\">\r\n {palette.gradient.map((color, i) => (\r\n <span key={i} className=\"flex-1\" style={{ background: color }} />\r\n ))}\r\n {palette.heroGradientStart && (\r\n <span className=\"flex-1\" style={{ background: palette.heroGradientStart }} />\r\n )}\r\n {palette.heroGradientEnd && (\r\n <span className=\"flex-1\" style={{ background: palette.heroGradientEnd }} />\r\n )}\r\n </div>\r\n <span className=\"text-xs font-medium text-gray-700 dark:text-gray-300 text-center leading-tight px-1\">\r\n {palette.name}\r\n </span>\r\n </button>\r\n ))}\r\n </div>\r\n );\r\n}\r\n"],"names":["colorPalettes","findPaletteByName","name","p","PaletteSelector","selectedPalette","onPaletteChange","isSelected","palette","jsxs","cn","color","i","jsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlockPropertyEditor.d.ts","sourceRoot":"","sources":["../../../src/editor/PropertyEditor/BlockPropertyEditor.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,YAAY,EAAsE,MAAM,cAAc,CAAC;AAKvH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockPropertyEditor.d.ts","sourceRoot":"","sources":["../../../src/editor/PropertyEditor/BlockPropertyEditor.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,YAAY,EAAsE,MAAM,cAAc,CAAC;AAKvH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAkDzD,UAAU,wBAAwB;IAChC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,gEAiJ9B,CAAC"}
|
|
@@ -1,76 +1,114 @@
|
|
|
1
|
-
import { jsx as p, jsxs as
|
|
2
|
-
import { memo as
|
|
3
|
-
import { VariationSelector as
|
|
4
|
-
import { BlockHeader as
|
|
5
|
-
import { CollapsiblePropertyGroup as
|
|
6
|
-
import { evaluateShowWhen as
|
|
1
|
+
import { jsx as p, jsxs as T } from "react/jsx-runtime";
|
|
2
|
+
import { memo as b, useMemo as d, useCallback as w } from "react";
|
|
3
|
+
import { VariationSelector as S } from "./VariationSelector.js";
|
|
4
|
+
import { BlockHeader as M } from "./BlockHeader.js";
|
|
5
|
+
import { CollapsiblePropertyGroup as O } from "./CollapsiblePropertyGroup.js";
|
|
6
|
+
import { evaluateShowWhen as j } from "../../engine/shared/showWhen.js";
|
|
7
7
|
import { componentRegistry as E } from "../../engine/registry/registry.js";
|
|
8
|
-
import { pluginRegistry as
|
|
9
|
-
const
|
|
8
|
+
import { pluginRegistry as k } from "../../engine/plugins/pluginRegistry.js";
|
|
9
|
+
const H = {
|
|
10
|
+
// Buttons (primary)
|
|
11
|
+
primaryButtonColor: "primary",
|
|
12
|
+
buttonColor: "primary",
|
|
13
|
+
primaryButtonTextColor: "primaryText",
|
|
14
|
+
buttonTextColor: "primaryText",
|
|
15
|
+
// Buttons (secondary)
|
|
16
|
+
secondaryButtonColor: "secondary",
|
|
17
|
+
secondaryButtonTextColor: "primaryText",
|
|
18
|
+
// Badge
|
|
19
|
+
badgeColor: "accent",
|
|
20
|
+
badgeTextColor: "primaryText",
|
|
21
|
+
// Links
|
|
22
|
+
linkColor: "linkColor",
|
|
23
|
+
linkHoverColor: "primary",
|
|
24
|
+
// Border
|
|
25
|
+
borderColor: "border",
|
|
26
|
+
// Generic text
|
|
27
|
+
color: "text",
|
|
28
|
+
// Title/description
|
|
29
|
+
titleColor: "text",
|
|
30
|
+
subtitleColor: "mutedText",
|
|
31
|
+
descriptionColor: "mutedText",
|
|
32
|
+
// Background (generic)
|
|
33
|
+
bg: "bg"
|
|
34
|
+
};
|
|
35
|
+
function R(f, e) {
|
|
36
|
+
const r = H[f];
|
|
37
|
+
if (!r) return;
|
|
38
|
+
const s = e[r];
|
|
39
|
+
return typeof s == "string" ? s : void 0;
|
|
40
|
+
}
|
|
41
|
+
const q = b(function({
|
|
10
42
|
block: e,
|
|
11
|
-
document:
|
|
12
|
-
currentPageId:
|
|
13
|
-
onUpdate:
|
|
14
|
-
uploadConfig:
|
|
15
|
-
focusedGroup:
|
|
43
|
+
document: r,
|
|
44
|
+
currentPageId: s,
|
|
45
|
+
onUpdate: l,
|
|
46
|
+
uploadConfig: v,
|
|
47
|
+
focusedGroup: B
|
|
16
48
|
}) {
|
|
17
|
-
const
|
|
18
|
-
() => ({ document:
|
|
19
|
-
[
|
|
20
|
-
), h =
|
|
21
|
-
if (!e || !
|
|
22
|
-
const t =
|
|
49
|
+
const i = d(() => e ? E.get(e.type) : null, [e]), x = d(
|
|
50
|
+
() => ({ document: r, currentPageId: s }),
|
|
51
|
+
[r, s]
|
|
52
|
+
), h = d(() => {
|
|
53
|
+
if (!e || !r) return /* @__PURE__ */ new Set();
|
|
54
|
+
const t = k.getEditorRestrictions(r, e.type);
|
|
23
55
|
return t?.lockedFields ? new Set(t.lockedFields) : /* @__PURE__ */ new Set();
|
|
24
|
-
}, [e,
|
|
25
|
-
if (!e || !
|
|
26
|
-
const t = e.props,
|
|
27
|
-
for (const [a,
|
|
28
|
-
|
|
56
|
+
}, [e, r]), C = d(() => {
|
|
57
|
+
if (!e || !i?.inspectorMeta) return {};
|
|
58
|
+
const t = e.props, o = i.defaultProps || {}, c = {};
|
|
59
|
+
for (const [a, n] of Object.entries(
|
|
60
|
+
i.inspectorMeta
|
|
29
61
|
)) {
|
|
30
|
-
if (
|
|
62
|
+
if (n.showWhen && !j(n.showWhen, t, o, x))
|
|
31
63
|
continue;
|
|
32
|
-
const
|
|
33
|
-
c[
|
|
34
|
-
const u = t[a],
|
|
35
|
-
|
|
64
|
+
const m = n.group || "Geral";
|
|
65
|
+
c[m] || (c[m] = []);
|
|
66
|
+
const u = t[a], g = n.inputType === "color" || n.inputType === "color-advanced";
|
|
67
|
+
let y = u === void 0 || g && u === "" ? o[a] : u;
|
|
68
|
+
y === void 0 && g && r?.theme?.colors && (y = R(
|
|
69
|
+
a,
|
|
70
|
+
r.theme.colors
|
|
71
|
+
));
|
|
72
|
+
const P = h.has(a) ? { ...n, readOnly: !0 } : n;
|
|
73
|
+
c[m].push({
|
|
36
74
|
propName: a,
|
|
37
|
-
meta:
|
|
38
|
-
value:
|
|
75
|
+
meta: P,
|
|
76
|
+
value: y
|
|
39
77
|
});
|
|
40
78
|
}
|
|
41
79
|
return c;
|
|
42
|
-
}, [e,
|
|
43
|
-
|
|
44
|
-
}, [
|
|
45
|
-
return e ?
|
|
80
|
+
}, [e, i, r, x, h]), F = w((t, o) => {
|
|
81
|
+
l(t === "logo" && (o === void 0 || o === "") ? { [t]: o, logoHeight: 70 } : { [t]: o });
|
|
82
|
+
}, [l]);
|
|
83
|
+
return e ? i ? /* @__PURE__ */ T("div", { className: "p-3 space-y-4", children: [
|
|
46
84
|
/* @__PURE__ */ p(
|
|
47
|
-
|
|
85
|
+
M,
|
|
48
86
|
{
|
|
49
87
|
type: e.type,
|
|
50
|
-
name:
|
|
51
|
-
description:
|
|
88
|
+
name: i.name,
|
|
89
|
+
description: i.description
|
|
52
90
|
}
|
|
53
91
|
),
|
|
54
|
-
|
|
55
|
-
Object.keys(
|
|
56
|
-
|
|
92
|
+
i.variations && /* @__PURE__ */ p(S, { block: e, onUpdate: l }),
|
|
93
|
+
Object.keys(C).length === 0 ? /* @__PURE__ */ p("div", { className: "text-center text-gray-500 dark:text-gray-400 text-xs py-4", children: "Nenhuma propriedade configurável" }) : Object.entries(C).map(([t, o]) => /* @__PURE__ */ p(
|
|
94
|
+
O,
|
|
57
95
|
{
|
|
58
96
|
groupName: t,
|
|
59
|
-
props:
|
|
60
|
-
onPropChange:
|
|
61
|
-
onMultiUpdate:
|
|
97
|
+
props: o,
|
|
98
|
+
onPropChange: F,
|
|
99
|
+
onMultiUpdate: l,
|
|
62
100
|
allProps: e?.props,
|
|
63
|
-
uploadConfig:
|
|
64
|
-
isFocused: t ===
|
|
101
|
+
uploadConfig: v,
|
|
102
|
+
isFocused: t === B
|
|
65
103
|
},
|
|
66
104
|
t
|
|
67
105
|
))
|
|
68
|
-
] }) : /* @__PURE__ */
|
|
106
|
+
] }) : /* @__PURE__ */ T("div", { className: "p-4 text-center text-red-500 text-sm", children: [
|
|
69
107
|
"Tipo de bloco desconhecido: ",
|
|
70
108
|
e.type
|
|
71
109
|
] }) : /* @__PURE__ */ p("div", { className: "p-4 text-center text-gray-500 dark:text-gray-400 text-sm", children: "Selecione um bloco para editar" });
|
|
72
110
|
});
|
|
73
111
|
export {
|
|
74
|
-
|
|
112
|
+
q as BlockPropertyEditor
|
|
75
113
|
};
|
|
76
114
|
//# sourceMappingURL=BlockPropertyEditor.js.map
|