@brunoalz/smartgesti-site-editor 1.3.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/LandingPageEditor.d.ts.map +1 -1
- package/dist/editor/LandingPageEditor.js +183 -169
- 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/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.js +17 -17
- package/dist/engine/export/exporters/sections/AdminSectionExporters.js.map +1 -1
- 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/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.js +8 -8
- package/dist/engine/render/renderers/sections/AboutSectionRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.js +52 -52
- package/dist/engine/render/renderers/sections/ContactSectionRenderer.js.map +1 -1
- 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.js +17 -17
- package/dist/engine/render/renderers/sections/ProductShowcaseRenderer.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/shared/templates/index.d.ts +4 -0
- package/dist/shared/templates/index.d.ts.map +1 -1
- package/dist/shared/templates/index.js +14 -7
- package/dist/shared/templates/index.js.map +1 -1
- package/dist/shared/templates/smartgesti-admin.d.ts.map +1 -1
- package/dist/shared/templates/smartgesti-admin.js +1 -4
- package/dist/shared/templates/smartgesti-admin.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/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditorState.js","sources":["../../src/hooks/useEditorState.ts"],"sourcesContent":["/**\n * useEditorState Hook\n * Gerencia todo o estado do editor de landing pages\n */\n\nimport { useState, useMemo, useCallback } from \"react\";\nimport {\n SiteDocument,\n SitePage,\n Block,\n BlockType,\n HistoryManager,\n createHistoryManager,\n applyPatch,\n PatchBuilder,\n componentRegistry,\n pluginRegistry,\n} from \"../engine\";\nimport {\n findBlockInStructure,\n cleanDocumentStructure,\n} from \"../utils/blockUtils\";\nimport { logger } from \"../utils/logger\";\nimport {\n createDefaultPageStructure,\n generateUniqueSlug,\n} from \"../utils/pageTemplateFactory\";\nimport { useNavbarAutoSync } from \"./useNavbarAutoSync\";\n\ninterface UseEditorStateOptions {\n initialData?: SiteDocument | null;\n}\n\ninterface UseEditorStateReturn {\n // Estado\n document: SiteDocument | null;\n currentPageId: string;\n currentPage: ReturnType<typeof useMemo>;\n selectedBlockId: string | null;\n selectedBlock: Block | null;\n history: HistoryManager;\n\n // Ações\n setDocument: (doc: SiteDocument) => void;\n loadDocument: (doc: SiteDocument) => void;\n setCurrentPageId: (id: string) => void;\n addPage: (pageId: string, name: string, slug: string) => void;\n removePage: (pageId: string) => void;\n setSelectedBlockId: (id: string | null) => void;\n handleUndo: () => void;\n handleRedo: () => void;\n handleAddBlock: (\n blockType: BlockType,\n parentBlockId?: string,\n position?: number,\n ) => void;\n handleDeleteBlock: (blockId: string) => void;\n handleUpdateBlock: (updates: Record<string, any>) => void;\n applyChange: (patch: any[], description?: string) => void;\n resetToTemplate: () => void;\n\n // Estado derivado\n isPaletteSelected: boolean;\n isTemplateSelected: boolean;\n canRemovePage: (pageId: string) => boolean;\n\n // Plugins\n activePlugins: string[];\n activatePlugin: (pluginId: string) => void;\n deactivatePlugin: (pluginId: string) => void;\n}\n\n/**\n * Hook para gerenciar estado do editor\n */\nexport function useEditorState(\n options: UseEditorStateOptions = {},\n): UseEditorStateReturn {\n const { initialData } = options;\n\n // Sem initialData: documento null até o usuário escolher um template\n const initialDocument = useMemo(() => {\n if (initialData) {\n return initialData;\n }\n return null;\n }, [initialData]);\n\n // Estados\n const [document, setDocument] = useState<SiteDocument | null>(\n initialDocument,\n );\n const [currentPageId, setCurrentPageIdState] = useState<string>(\"home\");\n const [history] = useState<HistoryManager>(() => createHistoryManager(50));\n const [selectedBlockId, setSelectedBlockId] = useState<string | null>(null);\n\n // Aplicar mudanças via patches (precisa ser declarado antes de useNavbarAutoSync)\n const applyChange = useCallback(\n (patch: any[], description?: string) => {\n if (!document) return;\n if (!patch?.length) return;\n\n // IMPORTANTE: Capturar histórico ANTES de aplicar patch\n history.push(document, patch, description || \"User edit\");\n\n const result = applyPatch(document, patch);\n logger.debug(\"[applyChange] Patch result:\", result);\n\n if (result.success && result.document) {\n const cleanedDocument = cleanDocumentStructure(result.document);\n setDocument(cleanedDocument);\n } else {\n // Se falhar, reverter histórico\n if (history.canUndo()) {\n const undoResult = history.undo(document);\n if (!undoResult.success) {\n logger.error(\"[applyChange] Failed to undo after patch error\");\n }\n }\n }\n },\n [document, history],\n );\n\n // Hook de sincronização automática do navbar\n useNavbarAutoSync(document, applyChange);\n\n // Página atual (derivada de currentPageId; sem navegação, só edição)\n const currentPage = useMemo(() => {\n if (!document?.pages?.length) return null;\n const page =\n document.pages.find((p) => p?.id === currentPageId) ?? document.pages[0];\n if (page && !Array.isArray(page.structure)) {\n page.structure = [];\n }\n return page;\n }, [document, currentPageId]);\n\n // Bloco selecionado\n const selectedBlock = useMemo(() => {\n if (!selectedBlockId || !currentPage) return null;\n if (\n selectedBlockId === \"palette-selector\" ||\n selectedBlockId === \"template-selector\"\n ) {\n return null;\n }\n return findBlockInStructure(currentPage.structure, selectedBlockId);\n }, [selectedBlockId, currentPage]);\n\n // Estados derivados\n const isPaletteSelected = selectedBlockId === \"palette-selector\";\n const isTemplateSelected = selectedBlockId === \"template-selector\";\n\n // Undo/Redo\n const handleUndo = useCallback(() => {\n if (!document) return;\n const result = history.undo(document);\n if (result.success && result.document) {\n setDocument(result.document);\n }\n }, [document, history]);\n\n const handleRedo = useCallback(() => {\n if (!document) return;\n const result = history.redo(document);\n if (result.success && result.document) {\n setDocument(result.document);\n }\n }, [document, history]);\n\n // Criar bloco\n const createBlockFromType = useCallback(\n (blockType: BlockType): Block | null => {\n const definition = componentRegistry.get(blockType);\n if (!definition) {\n logger.error(\n `[createBlockFromType] Block type \"${blockType}\" not found in registry`,\n );\n return null;\n }\n\n const id = `${blockType}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n return {\n id,\n type: blockType,\n props: {\n ...definition.defaultProps,\n ...(definition.defaultChildren && {\n children: definition.defaultChildren,\n }),\n },\n } as Block;\n },\n [],\n );\n\n // Adicionar bloco (mantido para API; editor template-based não exibe paleta de blocos)\n const handleAddBlock = useCallback(\n (blockType: BlockType, parentBlockId?: string, position?: number) => {\n if (!document || !currentPage) return;\n\n try {\n const newBlock = createBlockFromType(blockType);\n if (!newBlock) {\n logger.error(\"[handleAddBlock] Failed to create block:\", blockType);\n return;\n }\n\n const patch = PatchBuilder.addBlock(\n document,\n currentPage.id,\n newBlock,\n parentBlockId,\n position,\n );\n\n applyChange(patch, `Add ${blockType} block`);\n setSelectedBlockId(newBlock.id);\n } catch (error) {\n logger.error(\"[handleAddBlock] Error adding block:\", error);\n }\n },\n [currentPage, document, createBlockFromType, applyChange],\n );\n\n // Deletar bloco\n const handleDeleteBlock = useCallback(\n (blockId: string) => {\n if (!document || !currentPage) return;\n\n try {\n if (selectedBlockId === blockId) {\n setSelectedBlockId(null);\n }\n const patch = PatchBuilder.removeBlock(\n document,\n currentPage.id,\n blockId,\n );\n applyChange(patch, \"Delete block\");\n } catch (error) {\n logger.error(\"Error deleting block:\", error);\n if (selectedBlockId === blockId) {\n setSelectedBlockId(null);\n }\n }\n },\n [document, currentPage, selectedBlockId, applyChange],\n );\n\n // Atualizar propriedades do bloco\n const handleUpdateBlock = useCallback(\n (updates: Record<string, any>) => {\n if (!document || !selectedBlockId || !currentPage) return;\n if (\n selectedBlockId === \"palette-selector\" ||\n selectedBlockId === \"template-selector\"\n )\n return;\n\n try {\n const patch = PatchBuilder.updateBlockProps(\n document,\n currentPage.id,\n selectedBlockId,\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, selectedBlockId, currentPage, applyChange],\n );\n\n // Voltar ao seletor de templates (document = null)\n const resetToTemplate = useCallback(() => {\n setDocument(null);\n setCurrentPageIdState(\"home\");\n history.clear();\n setSelectedBlockId(null);\n }, [history]);\n\n // Carregar um documento completo (ex: gerado por IA)\n const loadDocument = useCallback(\n (doc: SiteDocument) => {\n setDocument(doc);\n setCurrentPageIdState(doc.pages?.[0]?.id ?? \"home\");\n history.clear();\n setSelectedBlockId(null);\n if (doc.pages?.[0]?.structure?.length > 0) {\n setSelectedBlockId(doc.pages[0].structure[0].id);\n }\n },\n [history],\n );\n\n const setCurrentPageId = useCallback((id: string) => {\n setCurrentPageIdState(id);\n setSelectedBlockId(null);\n }, []);\n\n // Adicionar página (ex.: Avisos) com estrutura mínima\n const addPage = useCallback(\n (pageId: string, name: string, slug: string) => {\n if (!document) return;\n const existing = document.pages.find((p) => p.id === pageId);\n if (existing) return;\n\n // Gera slug único se necessário\n const uniqueSlug = generateUniqueSlug(slug, document.pages);\n\n // Cria página com estrutura padrão (navbar + conteúdo + footer)\n const newPage: SitePage = createDefaultPageStructure(\n pageId,\n name,\n uniqueSlug,\n [...document.pages, { id: pageId, name, slug: uniqueSlug, structure: [] }]\n );\n\n // Patch para adicionar página\n const addPagePatch = PatchBuilder.addPage(document, newPage);\n\n // Aplicar mudança - o hook useNavbarAutoSync irá detectar e sincronizar automaticamente\n applyChange(addPagePatch, `Adicionar página ${name}`);\n setCurrentPageIdState(pageId);\n setSelectedBlockId(null);\n },\n [document, applyChange],\n );\n\n // Remover página (não permite remover home; exige pelo menos uma página)\n const removePage = useCallback(\n (pageId: string) => {\n if (!document) return;\n if (pageId === \"home\") return;\n if (document.pages.length <= 1) return;\n\n const removePagePatch = PatchBuilder.removePage(document, pageId);\n\n // Aplicar mudança - o hook useNavbarAutoSync irá detectar e sincronizar automaticamente\n applyChange(removePagePatch, \"Remover página\");\n\n if (currentPageId === pageId) {\n const updatedPages = document.pages.filter(p => p.id !== pageId);\n setCurrentPageIdState(updatedPages[0]?.id ?? \"home\");\n }\n setSelectedBlockId(null);\n },\n [document, currentPageId, applyChange],\n );\n\n const canRemovePage = useCallback(\n (pageId: string) => {\n if (!document) return false;\n return pageId !== \"home\" && document.pages.length > 1;\n },\n [document],\n );\n\n // Plugins: estado derivado\n const activePlugins = useMemo(\n () => document?.plugins?.active ?? [],\n [document],\n );\n\n // Ativar plugin\n const activatePlugin = useCallback(\n (pluginId: string) => {\n if (!document) return;\n const updatedDocument = pluginRegistry.activate(document, pluginId);\n if (updatedDocument !== document) {\n setDocument(updatedDocument);\n }\n },\n [document],\n );\n\n // Desativar plugin\n const deactivatePlugin = useCallback(\n (pluginId: string) => {\n if (!document) return;\n const updatedDocument = pluginRegistry.deactivate(document, pluginId);\n if (updatedDocument !== document) {\n setDocument(updatedDocument);\n }\n },\n [document],\n );\n\n return {\n // Estado\n document,\n currentPageId,\n currentPage,\n selectedBlockId,\n selectedBlock,\n history,\n\n // Ações\n setDocument,\n loadDocument,\n setCurrentPageId,\n addPage,\n removePage,\n setSelectedBlockId,\n handleUndo,\n handleRedo,\n handleAddBlock,\n handleDeleteBlock,\n handleUpdateBlock,\n applyChange,\n resetToTemplate,\n\n // Estado derivado\n isPaletteSelected,\n isTemplateSelected,\n canRemovePage,\n\n // Plugins\n activePlugins,\n activatePlugin,\n deactivatePlugin,\n };\n}\n"],"names":["useEditorState","options","initialData","initialDocument","useMemo","document","setDocument","useState","currentPageId","setCurrentPageIdState","history","createHistoryManager","selectedBlockId","setSelectedBlockId","applyChange","useCallback","patch","description","result","applyPatch","logger","cleanedDocument","cleanDocumentStructure","useNavbarAutoSync","currentPage","page","p","selectedBlock","findBlockInStructure","isPaletteSelected","isTemplateSelected","handleUndo","handleRedo","createBlockFromType","blockType","definition","componentRegistry","handleAddBlock","parentBlockId","position","newBlock","PatchBuilder","error","handleDeleteBlock","blockId","handleUpdateBlock","updates","resetToTemplate","loadDocument","doc","setCurrentPageId","id","addPage","pageId","name","slug","uniqueSlug","generateUniqueSlug","newPage","createDefaultPageStructure","addPagePatch","removePage","removePagePatch","updatedPages","canRemovePage","activePlugins","activatePlugin","pluginId","updatedDocument","pluginRegistry","deactivatePlugin"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useEditorState.js","sources":["../../src/hooks/useEditorState.ts"],"sourcesContent":["/**\n * useEditorState Hook\n * Gerencia todo o estado do editor de landing pages\n */\n\nimport { useState, useMemo, useCallback } from \"react\";\nimport {\n SiteDocument,\n SitePage,\n Block,\n BlockType,\n HistoryManager,\n createHistoryManager,\n applyPatch,\n PatchBuilder,\n componentRegistry,\n pluginRegistry,\n} from \"../engine\";\nimport {\n findBlockInStructure,\n cleanDocumentStructure,\n} from \"../utils/blockUtils\";\nimport { logger } from \"../utils/logger\";\nimport {\n createDefaultPageStructure,\n generateUniqueSlug,\n} from \"../utils/pageTemplateFactory\";\nimport { useNavbarAutoSync } from \"./useNavbarAutoSync\";\n\ninterface UseEditorStateOptions {\n initialData?: SiteDocument | null;\n}\n\ninterface UseEditorStateReturn {\n // Estado\n document: SiteDocument | null;\n currentPageId: string;\n currentPage: ReturnType<typeof useMemo>;\n selectedBlockId: string | null;\n selectedBlock: Block | null;\n history: HistoryManager;\n\n // Ações\n setDocument: (doc: SiteDocument) => void;\n loadDocument: (doc: SiteDocument) => void;\n setCurrentPageId: (id: string) => void;\n addPage: (pageId: string, name: string, slug: string) => void;\n removePage: (pageId: string) => void;\n setSelectedBlockId: (id: string | null) => void;\n handleUndo: () => void;\n handleRedo: () => void;\n handleAddBlock: (\n blockType: BlockType,\n parentBlockId?: string,\n position?: number,\n ) => void;\n handleDeleteBlock: (blockId: string) => void;\n handleUpdateBlock: (updates: Record<string, any>) => void;\n applyChange: (patch: any[], description?: string) => void;\n resetToTemplate: () => void;\n\n // Estado derivado\n isPaletteSelected: boolean;\n isTemplateSelected: boolean;\n canRemovePage: (pageId: string) => boolean;\n\n // Paleta\n selectedPalette: string | null;\n setSelectedPalette: (name: string | null) => void;\n\n // Plugins\n activePlugins: string[];\n activatePlugin: (pluginId: string) => void;\n deactivatePlugin: (pluginId: string) => void;\n}\n\n/**\n * Hook para gerenciar estado do editor\n */\nexport function useEditorState(\n options: UseEditorStateOptions = {},\n): UseEditorStateReturn {\n const { initialData } = options;\n\n // Sem initialData: documento null até o usuário escolher um template\n const initialDocument = useMemo(() => {\n if (initialData) {\n return initialData;\n }\n return null;\n }, [initialData]);\n\n // Estados\n const [document, setDocument] = useState<SiteDocument | null>(\n initialDocument,\n );\n const [currentPageId, setCurrentPageIdState] = useState<string>(\"home\");\n const [history] = useState<HistoryManager>(() => createHistoryManager(50));\n const [selectedBlockId, setSelectedBlockId] = useState<string | null>(null);\n const [selectedPalette, setSelectedPaletteState] = useState<string | null>(null);\n\n // Aplicar mudanças via patches (precisa ser declarado antes de useNavbarAutoSync)\n const applyChange = useCallback(\n (patch: any[], description?: string) => {\n if (!document) return;\n if (!patch?.length) return;\n\n // IMPORTANTE: Capturar histórico ANTES de aplicar patch\n history.push(document, patch, description || \"User edit\");\n\n const result = applyPatch(document, patch);\n logger.debug(\"[applyChange] Patch result:\", result);\n\n if (result.success && result.document) {\n const cleanedDocument = cleanDocumentStructure(result.document);\n setDocument(cleanedDocument);\n } else {\n // Se falhar, reverter histórico\n if (history.canUndo()) {\n const undoResult = history.undo(document);\n if (!undoResult.success) {\n logger.error(\"[applyChange] Failed to undo after patch error\");\n }\n }\n }\n },\n [document, history],\n );\n\n // Hook de sincronização automática do navbar\n useNavbarAutoSync(document, applyChange);\n\n // Página atual (derivada de currentPageId; sem navegação, só edição)\n const currentPage = useMemo(() => {\n if (!document?.pages?.length) return null;\n const page =\n document.pages.find((p) => p?.id === currentPageId) ?? document.pages[0];\n if (page && !Array.isArray(page.structure)) {\n page.structure = [];\n }\n return page;\n }, [document, currentPageId]);\n\n // Bloco selecionado\n const selectedBlock = useMemo(() => {\n if (!selectedBlockId || !currentPage) return null;\n if (\n selectedBlockId === \"palette-selector\" ||\n selectedBlockId === \"template-selector\"\n ) {\n return null;\n }\n return findBlockInStructure(currentPage.structure, selectedBlockId);\n }, [selectedBlockId, currentPage]);\n\n // Estados derivados\n const isPaletteSelected = selectedBlockId === \"palette-selector\";\n const isTemplateSelected = selectedBlockId === \"template-selector\";\n\n // Undo/Redo\n const handleUndo = useCallback(() => {\n if (!document) return;\n const result = history.undo(document);\n if (result.success && result.document) {\n setDocument(result.document);\n }\n }, [document, history]);\n\n const handleRedo = useCallback(() => {\n if (!document) return;\n const result = history.redo(document);\n if (result.success && result.document) {\n setDocument(result.document);\n }\n }, [document, history]);\n\n // Criar bloco\n const createBlockFromType = useCallback(\n (blockType: BlockType): Block | null => {\n const definition = componentRegistry.get(blockType);\n if (!definition) {\n logger.error(\n `[createBlockFromType] Block type \"${blockType}\" not found in registry`,\n );\n return null;\n }\n\n const id = `${blockType}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n return {\n id,\n type: blockType,\n props: {\n ...definition.defaultProps,\n ...(definition.defaultChildren && {\n children: definition.defaultChildren,\n }),\n },\n } as Block;\n },\n [],\n );\n\n // Adicionar bloco (mantido para API; editor template-based não exibe paleta de blocos)\n const handleAddBlock = useCallback(\n (blockType: BlockType, parentBlockId?: string, position?: number) => {\n if (!document || !currentPage) return;\n\n try {\n const newBlock = createBlockFromType(blockType);\n if (!newBlock) {\n logger.error(\"[handleAddBlock] Failed to create block:\", blockType);\n return;\n }\n\n const patch = PatchBuilder.addBlock(\n document,\n currentPage.id,\n newBlock,\n parentBlockId,\n position,\n );\n\n applyChange(patch, `Add ${blockType} block`);\n setSelectedBlockId(newBlock.id);\n } catch (error) {\n logger.error(\"[handleAddBlock] Error adding block:\", error);\n }\n },\n [currentPage, document, createBlockFromType, applyChange],\n );\n\n // Deletar bloco\n const handleDeleteBlock = useCallback(\n (blockId: string) => {\n if (!document || !currentPage) return;\n\n try {\n if (selectedBlockId === blockId) {\n setSelectedBlockId(null);\n }\n const patch = PatchBuilder.removeBlock(\n document,\n currentPage.id,\n blockId,\n );\n applyChange(patch, \"Delete block\");\n } catch (error) {\n logger.error(\"Error deleting block:\", error);\n if (selectedBlockId === blockId) {\n setSelectedBlockId(null);\n }\n }\n },\n [document, currentPage, selectedBlockId, applyChange],\n );\n\n // Atualizar propriedades do bloco\n const handleUpdateBlock = useCallback(\n (updates: Record<string, any>) => {\n if (!document || !selectedBlockId || !currentPage) return;\n if (\n selectedBlockId === \"palette-selector\" ||\n selectedBlockId === \"template-selector\"\n )\n return;\n\n try {\n const patch = PatchBuilder.updateBlockProps(\n document,\n currentPage.id,\n selectedBlockId,\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, selectedBlockId, currentPage, applyChange],\n );\n\n const setSelectedPalette = useCallback((name: string | null) => {\n setSelectedPaletteState(name);\n }, []);\n\n // Voltar ao seletor de templates (document = null)\n const resetToTemplate = useCallback(() => {\n setDocument(null);\n setCurrentPageIdState(\"home\");\n history.clear();\n setSelectedBlockId(null);\n setSelectedPaletteState(null);\n }, [history]);\n\n // Carregar um documento completo (ex: gerado por IA)\n const loadDocument = useCallback(\n (doc: SiteDocument) => {\n setDocument(doc);\n setCurrentPageIdState(doc.pages?.[0]?.id ?? \"home\");\n history.clear();\n setSelectedBlockId(null);\n if (doc.pages?.[0]?.structure?.length > 0) {\n setSelectedBlockId(doc.pages[0].structure[0].id);\n }\n },\n [history],\n );\n\n const setCurrentPageId = useCallback((id: string) => {\n setCurrentPageIdState(id);\n setSelectedBlockId(null);\n }, []);\n\n // Adicionar página (ex.: Avisos) com estrutura mínima\n const addPage = useCallback(\n (pageId: string, name: string, slug: string) => {\n if (!document) return;\n const existing = document.pages.find((p) => p.id === pageId);\n if (existing) return;\n\n // Gera slug único se necessário\n const uniqueSlug = generateUniqueSlug(slug, document.pages);\n\n // Cria página com estrutura padrão (navbar + conteúdo + footer)\n const newPage: SitePage = createDefaultPageStructure(\n pageId,\n name,\n uniqueSlug,\n [...document.pages, { id: pageId, name, slug: uniqueSlug, structure: [] }]\n );\n\n // Patch para adicionar página\n const addPagePatch = PatchBuilder.addPage(document, newPage);\n\n // Aplicar mudança - o hook useNavbarAutoSync irá detectar e sincronizar automaticamente\n applyChange(addPagePatch, `Adicionar página ${name}`);\n setCurrentPageIdState(pageId);\n setSelectedBlockId(null);\n },\n [document, applyChange],\n );\n\n // Remover página (não permite remover home; exige pelo menos uma página)\n const removePage = useCallback(\n (pageId: string) => {\n if (!document) return;\n if (pageId === \"home\") return;\n if (document.pages.length <= 1) return;\n\n const removePagePatch = PatchBuilder.removePage(document, pageId);\n\n // Aplicar mudança - o hook useNavbarAutoSync irá detectar e sincronizar automaticamente\n applyChange(removePagePatch, \"Remover página\");\n\n if (currentPageId === pageId) {\n const updatedPages = document.pages.filter(p => p.id !== pageId);\n setCurrentPageIdState(updatedPages[0]?.id ?? \"home\");\n }\n setSelectedBlockId(null);\n },\n [document, currentPageId, applyChange],\n );\n\n const canRemovePage = useCallback(\n (pageId: string) => {\n if (!document) return false;\n return pageId !== \"home\" && document.pages.length > 1;\n },\n [document],\n );\n\n // Plugins: estado derivado\n const activePlugins = useMemo(\n () => document?.plugins?.active ?? [],\n [document],\n );\n\n // Ativar plugin\n const activatePlugin = useCallback(\n (pluginId: string) => {\n if (!document) return;\n const updatedDocument = pluginRegistry.activate(document, pluginId);\n if (updatedDocument !== document) {\n setDocument(updatedDocument);\n }\n },\n [document],\n );\n\n // Desativar plugin\n const deactivatePlugin = useCallback(\n (pluginId: string) => {\n if (!document) return;\n const updatedDocument = pluginRegistry.deactivate(document, pluginId);\n if (updatedDocument !== document) {\n setDocument(updatedDocument);\n }\n },\n [document],\n );\n\n return {\n // Estado\n document,\n currentPageId,\n currentPage,\n selectedBlockId,\n selectedBlock,\n history,\n\n // Ações\n setDocument,\n loadDocument,\n setCurrentPageId,\n addPage,\n removePage,\n setSelectedBlockId,\n handleUndo,\n handleRedo,\n handleAddBlock,\n handleDeleteBlock,\n handleUpdateBlock,\n applyChange,\n resetToTemplate,\n\n // Estado derivado\n isPaletteSelected,\n isTemplateSelected,\n canRemovePage,\n\n // Paleta\n selectedPalette,\n setSelectedPalette,\n\n // Plugins\n activePlugins,\n activatePlugin,\n deactivatePlugin,\n };\n}\n"],"names":["useEditorState","options","initialData","initialDocument","useMemo","document","setDocument","useState","currentPageId","setCurrentPageIdState","history","createHistoryManager","selectedBlockId","setSelectedBlockId","selectedPalette","setSelectedPaletteState","applyChange","useCallback","patch","description","result","applyPatch","logger","cleanedDocument","cleanDocumentStructure","useNavbarAutoSync","currentPage","page","p","selectedBlock","findBlockInStructure","isPaletteSelected","isTemplateSelected","handleUndo","handleRedo","createBlockFromType","blockType","definition","componentRegistry","handleAddBlock","parentBlockId","position","newBlock","PatchBuilder","error","handleDeleteBlock","blockId","handleUpdateBlock","updates","setSelectedPalette","name","resetToTemplate","loadDocument","doc","setCurrentPageId","id","addPage","pageId","slug","uniqueSlug","generateUniqueSlug","newPage","createDefaultPageStructure","addPagePatch","removePage","removePagePatch","updatedPages","canRemovePage","activePlugins","activatePlugin","pluginId","updatedDocument","pluginRegistry","deactivatePlugin"],"mappings":"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"}
|
|
@@ -34,6 +34,10 @@ export declare const templates: {
|
|
|
34
34
|
readonly "smartgesti-admin": import('..').SiteDocument;
|
|
35
35
|
};
|
|
36
36
|
export type TemplateId = keyof typeof templates;
|
|
37
|
+
/**
|
|
38
|
+
* Mapa de template → nome da paleta default correspondente
|
|
39
|
+
*/
|
|
40
|
+
export declare const templateDefaultPalette: Record<TemplateId, string>;
|
|
37
41
|
/**
|
|
38
42
|
* Retorna um template pelo ID
|
|
39
43
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/templates/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,YAAY,EAwFtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,SAAS,CAAC;AAEhD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,6BAEzC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAQ7D"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/templates/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,YAAY,EAwFtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,SAAS,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAM7D,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,6BAEzC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAEvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAQ7D"}
|
|
@@ -86,20 +86,26 @@ const t = [
|
|
|
86
86
|
],
|
|
87
87
|
preview: "https://placehold.co/400x300/6366f1/white?text=SmartGesti+Admin"
|
|
88
88
|
}
|
|
89
|
-
],
|
|
89
|
+
], m = {
|
|
90
90
|
"escola-premium": s,
|
|
91
91
|
"escola-edvi": l,
|
|
92
92
|
"escola-zilom": n,
|
|
93
93
|
"escola-blog": r,
|
|
94
94
|
"smartgesti-admin": c
|
|
95
|
+
}, h = {
|
|
96
|
+
"escola-premium": "Indigo & Cyan",
|
|
97
|
+
"escola-edvi": "Blue Academy",
|
|
98
|
+
"escola-zilom": "Blue Academy",
|
|
99
|
+
"escola-blog": "Indigo Amber",
|
|
100
|
+
"smartgesti-admin": "Indigo Pro"
|
|
95
101
|
};
|
|
96
|
-
function
|
|
97
|
-
return
|
|
102
|
+
function v(e) {
|
|
103
|
+
return m[e] || null;
|
|
98
104
|
}
|
|
99
105
|
function w(e) {
|
|
100
106
|
return t.filter((o) => o.category === e);
|
|
101
107
|
}
|
|
102
|
-
function
|
|
108
|
+
function y(e) {
|
|
103
109
|
return t.filter((o) => o.tags.includes(e.toLowerCase()));
|
|
104
110
|
}
|
|
105
111
|
function T(e) {
|
|
@@ -113,12 +119,13 @@ export {
|
|
|
113
119
|
l as escolaEdviTemplate,
|
|
114
120
|
s as escolaPremiumTemplate,
|
|
115
121
|
n as escolaZilomTemplate,
|
|
116
|
-
|
|
122
|
+
v as getTemplate,
|
|
117
123
|
w as getTemplatesByCategory,
|
|
118
|
-
|
|
124
|
+
y as getTemplatesByTag,
|
|
119
125
|
T as searchTemplates,
|
|
120
126
|
c as smartgestiAdminTemplate,
|
|
127
|
+
h as templateDefaultPalette,
|
|
121
128
|
t as templateList,
|
|
122
|
-
|
|
129
|
+
m as templates
|
|
123
130
|
};
|
|
124
131
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/shared/templates/index.ts"],"sourcesContent":["/**\r\n * Templates estáticos para Landing Pages de Escolas\r\n *\r\n * Cada template é um SiteDocument completo pronto para uso\r\n */\r\n\r\nimport { escolaPremiumTemplate } from \"./escola-premium\";\r\nimport { escolaEdviTemplate } from \"./escola-edvi\";\r\nimport { escolaZilomTemplate } from \"./escola-zilom\";\r\nimport { escolaBlogTemplate } from \"./escola-blog\";\r\nimport { smartgestiAdminTemplate } from \"./smartgesti-admin\";\r\n\r\n// Re-export templates\r\nexport { escolaPremiumTemplate } from \"./escola-premium\";\r\nexport { escolaEdviTemplate } from \"./escola-edvi\";\r\nexport { escolaZilomTemplate } from \"./escola-zilom\";\r\nexport { escolaBlogTemplate } from \"./escola-blog\";\r\nexport { smartgestiAdminTemplate } from \"./smartgesti-admin\";\r\n\r\n/**\r\n * Informações sobre templates disponíveis\r\n */\r\nexport interface TemplateInfo {\r\n id: string;\r\n name: string;\r\n description: string;\r\n category: string;\r\n tags: string[];\r\n preview?: string;\r\n}\r\n\r\n/**\r\n * Lista de templates disponíveis com metadados\r\n */\r\nexport const templateList: TemplateInfo[] = [\r\n {\r\n id: \"escola-premium\",\r\n name: \"Colégio Vanguarda\",\r\n description:\r\n \"Landing page moderna e profissional com hero fullscreen, vídeo institucional, FAQ, pricing, depoimentos e seções completas para escolas de excelência\",\r\n category: \"education\",\r\n tags: [\r\n \"escola\",\r\n \"colégio\",\r\n \"premium\",\r\n \"moderno\",\r\n \"profissional\",\r\n \"bilíngue\",\r\n \"steam\",\r\n \"educação\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/6366f1/white?text=Colégio+Vanguarda\",\r\n },\r\n {\r\n id: \"escola-edvi\",\r\n name: \"Edvi\",\r\n description:\r\n \"Template Edvi para escolas – hero com overlay azul, countdown de admissão, carousel, blog, equipe e formulário de contato\",\r\n category: \"education\",\r\n tags: [\r\n \"edvi\",\r\n \"escola\",\r\n \"educação\",\r\n \"countdown\",\r\n \"carousel\",\r\n \"blog\",\r\n \"equipe\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/2563eb/white?text=Edvi\",\r\n },\r\n {\r\n id: \"escola-zilom\",\r\n name: \"Template Chat\",\r\n description:\r\n \"Template Zilom para ensino online – hero split com gradiente, cursos populares, categorias, depoimentos, newsletter e formulário de registro\",\r\n category: \"education\",\r\n tags: [\r\n \"zilom\",\r\n \"cursos\",\r\n \"ensino online\",\r\n \"course card\",\r\n \"category card\",\r\n \"newsletter\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/6366f1/white?text=Zilom\",\r\n },\r\n {\r\n id: \"escola-blog\",\r\n name: \"Escola Blog\",\r\n description:\r\n \"Template simples com blog integrado — ideal para testar o sistema de plugins. Ative o plugin Blog no editor para páginas dinâmicas.\",\r\n category: \"education\",\r\n tags: [\r\n \"escola\",\r\n \"blog\",\r\n \"plugin\",\r\n \"simples\",\r\n \"notícias\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/4f46e5/white?text=Escola+Blog\",\r\n },\r\n {\r\n id: \"smartgesti-admin\",\r\n name: \"SmartGesti Admin\",\r\n description:\r\n \"Landing page profissional para sistema de gestão administrativa – módulos, benefícios, contato e depoimentos\",\r\n category: \"business\",\r\n tags: [\r\n \"gestão\",\r\n \"administrativo\",\r\n \"saas\",\r\n \"software\",\r\n \"profissional\",\r\n \"corporativo\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/6366f1/white?text=SmartGesti+Admin\",\r\n },\r\n];\r\n\r\n/**\r\n * Mapa de templates por ID para acesso rápido\r\n */\r\nexport const templates = {\r\n \"escola-premium\": escolaPremiumTemplate,\r\n \"escola-edvi\": escolaEdviTemplate,\r\n \"escola-zilom\": escolaZilomTemplate,\r\n \"escola-blog\": escolaBlogTemplate,\r\n \"smartgesti-admin\": smartgestiAdminTemplate,\r\n} as const;\r\n\r\nexport type TemplateId = keyof typeof templates;\r\n\r\n/**\r\n * Retorna um template pelo ID\r\n */\r\nexport function getTemplate(id: TemplateId) {\r\n return templates[id] || null;\r\n}\r\n\r\n/**\r\n * Retorna templates filtrados por categoria\r\n */\r\nexport function getTemplatesByCategory(category: string): TemplateInfo[] {\r\n return templateList.filter((t) => t.category === category);\r\n}\r\n\r\n/**\r\n * Retorna templates filtrados por tag\r\n */\r\nexport function getTemplatesByTag(tag: string): TemplateInfo[] {\r\n return templateList.filter((t) => t.tags.includes(tag.toLowerCase()));\r\n}\r\n\r\n/**\r\n * Busca templates por termo\r\n */\r\nexport function searchTemplates(query: string): TemplateInfo[] {\r\n const q = query.toLowerCase();\r\n return templateList.filter(\r\n (t) =>\r\n t.name.toLowerCase().includes(q) ||\r\n t.description.toLowerCase().includes(q) ||\r\n t.tags.some((tag) => tag.includes(q)),\r\n );\r\n}\r\n"],"names":["templateList","templates","escolaPremiumTemplate","escolaEdviTemplate","escolaZilomTemplate","escolaBlogTemplate","smartgestiAdminTemplate","getTemplate","id","getTemplatesByCategory","category","t","getTemplatesByTag","tag","searchTemplates","query","q"],"mappings":";;;;;AAkCO,MAAMA,IAA+B;AAAA,EAC1C;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAEb,GAKaC,IAAY;AAAA,EACvB,kBAAkBC;AAAA,EAClB,eAAeC;AAAA,EACf,gBAAgBC;AAAA,EAChB,eAAeC;AAAA,EACf,oBAAoBC;AACtB;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/shared/templates/index.ts"],"sourcesContent":["/**\r\n * Templates estáticos para Landing Pages de Escolas\r\n *\r\n * Cada template é um SiteDocument completo pronto para uso\r\n */\r\n\r\nimport { escolaPremiumTemplate } from \"./escola-premium\";\r\nimport { escolaEdviTemplate } from \"./escola-edvi\";\r\nimport { escolaZilomTemplate } from \"./escola-zilom\";\r\nimport { escolaBlogTemplate } from \"./escola-blog\";\r\nimport { smartgestiAdminTemplate } from \"./smartgesti-admin\";\r\n\r\n// Re-export templates\r\nexport { escolaPremiumTemplate } from \"./escola-premium\";\r\nexport { escolaEdviTemplate } from \"./escola-edvi\";\r\nexport { escolaZilomTemplate } from \"./escola-zilom\";\r\nexport { escolaBlogTemplate } from \"./escola-blog\";\r\nexport { smartgestiAdminTemplate } from \"./smartgesti-admin\";\r\n\r\n/**\r\n * Informações sobre templates disponíveis\r\n */\r\nexport interface TemplateInfo {\r\n id: string;\r\n name: string;\r\n description: string;\r\n category: string;\r\n tags: string[];\r\n preview?: string;\r\n}\r\n\r\n/**\r\n * Lista de templates disponíveis com metadados\r\n */\r\nexport const templateList: TemplateInfo[] = [\r\n {\r\n id: \"escola-premium\",\r\n name: \"Colégio Vanguarda\",\r\n description:\r\n \"Landing page moderna e profissional com hero fullscreen, vídeo institucional, FAQ, pricing, depoimentos e seções completas para escolas de excelência\",\r\n category: \"education\",\r\n tags: [\r\n \"escola\",\r\n \"colégio\",\r\n \"premium\",\r\n \"moderno\",\r\n \"profissional\",\r\n \"bilíngue\",\r\n \"steam\",\r\n \"educação\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/6366f1/white?text=Colégio+Vanguarda\",\r\n },\r\n {\r\n id: \"escola-edvi\",\r\n name: \"Edvi\",\r\n description:\r\n \"Template Edvi para escolas – hero com overlay azul, countdown de admissão, carousel, blog, equipe e formulário de contato\",\r\n category: \"education\",\r\n tags: [\r\n \"edvi\",\r\n \"escola\",\r\n \"educação\",\r\n \"countdown\",\r\n \"carousel\",\r\n \"blog\",\r\n \"equipe\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/2563eb/white?text=Edvi\",\r\n },\r\n {\r\n id: \"escola-zilom\",\r\n name: \"Template Chat\",\r\n description:\r\n \"Template Zilom para ensino online – hero split com gradiente, cursos populares, categorias, depoimentos, newsletter e formulário de registro\",\r\n category: \"education\",\r\n tags: [\r\n \"zilom\",\r\n \"cursos\",\r\n \"ensino online\",\r\n \"course card\",\r\n \"category card\",\r\n \"newsletter\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/6366f1/white?text=Zilom\",\r\n },\r\n {\r\n id: \"escola-blog\",\r\n name: \"Escola Blog\",\r\n description:\r\n \"Template simples com blog integrado — ideal para testar o sistema de plugins. Ative o plugin Blog no editor para páginas dinâmicas.\",\r\n category: \"education\",\r\n tags: [\r\n \"escola\",\r\n \"blog\",\r\n \"plugin\",\r\n \"simples\",\r\n \"notícias\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/4f46e5/white?text=Escola+Blog\",\r\n },\r\n {\r\n id: \"smartgesti-admin\",\r\n name: \"SmartGesti Admin\",\r\n description:\r\n \"Landing page profissional para sistema de gestão administrativa – módulos, benefícios, contato e depoimentos\",\r\n category: \"business\",\r\n tags: [\r\n \"gestão\",\r\n \"administrativo\",\r\n \"saas\",\r\n \"software\",\r\n \"profissional\",\r\n \"corporativo\",\r\n \"landing page\",\r\n ],\r\n preview: \"https://placehold.co/400x300/6366f1/white?text=SmartGesti+Admin\",\r\n },\r\n];\r\n\r\n/**\r\n * Mapa de templates por ID para acesso rápido\r\n */\r\nexport const templates = {\r\n \"escola-premium\": escolaPremiumTemplate,\r\n \"escola-edvi\": escolaEdviTemplate,\r\n \"escola-zilom\": escolaZilomTemplate,\r\n \"escola-blog\": escolaBlogTemplate,\r\n \"smartgesti-admin\": smartgestiAdminTemplate,\r\n} as const;\r\n\r\nexport type TemplateId = keyof typeof templates;\r\n\r\n/**\r\n * Mapa de template → nome da paleta default correspondente\r\n */\r\nexport const templateDefaultPalette: Record<TemplateId, string> = {\r\n \"escola-premium\": \"Indigo & Cyan\",\r\n \"escola-edvi\": \"Blue Academy\",\r\n \"escola-zilom\": \"Blue Academy\",\r\n \"escola-blog\": \"Indigo Amber\",\r\n \"smartgesti-admin\": \"Indigo Pro\",\r\n};\r\n\r\n/**\r\n * Retorna um template pelo ID\r\n */\r\nexport function getTemplate(id: TemplateId) {\r\n return templates[id] || null;\r\n}\r\n\r\n/**\r\n * Retorna templates filtrados por categoria\r\n */\r\nexport function getTemplatesByCategory(category: string): TemplateInfo[] {\r\n return templateList.filter((t) => t.category === category);\r\n}\r\n\r\n/**\r\n * Retorna templates filtrados por tag\r\n */\r\nexport function getTemplatesByTag(tag: string): TemplateInfo[] {\r\n return templateList.filter((t) => t.tags.includes(tag.toLowerCase()));\r\n}\r\n\r\n/**\r\n * Busca templates por termo\r\n */\r\nexport function searchTemplates(query: string): TemplateInfo[] {\r\n const q = query.toLowerCase();\r\n return templateList.filter(\r\n (t) =>\r\n t.name.toLowerCase().includes(q) ||\r\n t.description.toLowerCase().includes(q) ||\r\n t.tags.some((tag) => tag.includes(q)),\r\n );\r\n}\r\n"],"names":["templateList","templates","escolaPremiumTemplate","escolaEdviTemplate","escolaZilomTemplate","escolaBlogTemplate","smartgestiAdminTemplate","templateDefaultPalette","getTemplate","id","getTemplatesByCategory","category","t","getTemplatesByTag","tag","searchTemplates","query","q"],"mappings":";;;;;AAkCO,MAAMA,IAA+B;AAAA,EAC1C;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAAA,EAEX;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aACE;AAAA,IACF,UAAU;AAAA,IACV,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAEb,GAKaC,IAAY;AAAA,EACvB,kBAAkBC;AAAA,EAClB,eAAeC;AAAA,EACf,gBAAgBC;AAAA,EAChB,eAAeC;AAAA,EACf,oBAAoBC;AACtB,GAOaC,IAAqD;AAAA,EAChE,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,oBAAoB;AACtB;AAKO,SAASC,EAAYC,GAAgB;AAC1C,SAAOR,EAAUQ,CAAE,KAAK;AAC1B;AAKO,SAASC,EAAuBC,GAAkC;AACvE,SAAOX,EAAa,OAAO,CAACY,MAAMA,EAAE,aAAaD,CAAQ;AAC3D;AAKO,SAASE,EAAkBC,GAA6B;AAC7D,SAAOd,EAAa,OAAO,CAACY,MAAMA,EAAE,KAAK,SAASE,EAAI,YAAA,CAAa,CAAC;AACtE;AAKO,SAASC,EAAgBC,GAA+B;AAC7D,QAAMC,IAAID,EAAM,YAAA;AAChB,SAAOhB,EAAa;AAAA,IAClB,CAACY,MACCA,EAAE,KAAK,YAAA,EAAc,SAASK,CAAC,KAC/BL,EAAE,YAAY,YAAA,EAAc,SAASK,CAAC,KACtCL,EAAE,KAAK,KAAK,CAACE,MAAQA,EAAI,SAASG,CAAC,CAAC;AAAA,EAAA;AAE1C;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartgesti-admin.d.ts","sourceRoot":"","sources":["../../../src/shared/templates/smartgesti-admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG9C,eAAO,MAAM,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"smartgesti-admin.d.ts","sourceRoot":"","sources":["../../../src/shared/templates/smartgesti-admin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG9C,eAAO,MAAM,uBAAuB,EAAE,YAmcrC,CAAC"}
|
|
@@ -80,9 +80,6 @@ const a = {
|
|
|
80
80
|
align: "left",
|
|
81
81
|
minHeight: "85vh",
|
|
82
82
|
background: "linear-gradient(135deg, #1e1b4b 0%, #312e81 100%)",
|
|
83
|
-
titleColor: "#ffffff",
|
|
84
|
-
subtitleColor: "#e0e7ff",
|
|
85
|
-
descriptionColor: "#c7d2fe",
|
|
86
83
|
// Button hover effects
|
|
87
84
|
buttonHoverEffect: "glow",
|
|
88
85
|
buttonHoverIntensity: 60,
|
|
@@ -415,7 +412,7 @@ const a = {
|
|
|
415
412
|
// Link hover effects
|
|
416
413
|
linkHoverEffect: "underline-center",
|
|
417
414
|
linkHoverIntensity: 50,
|
|
418
|
-
linkHoverColor: "#
|
|
415
|
+
linkHoverColor: "#a5b4fc"
|
|
419
416
|
}
|
|
420
417
|
}
|
|
421
418
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartgesti-admin.js","sources":["../../../src/shared/templates/smartgesti-admin.ts"],"sourcesContent":["/**\n * Template: SmartGesti Administrativo\n * Landing page profissional para software de gestão administrativa\n *\n * Características:\n * - Navbar elegante com CTA\n * - Hero split com gradiente escuro\n * - Stats de impacto (clientes, uptime, etc.)\n * - Product Showcase alternado (módulos do sistema)\n * - About Section com achievements e stats flutuantes\n * - Feature Grid de benefícios\n * - Testimonials de clientes\n * - FAQ\n * - Contact Section com formulário\n * - CTA final\n * - Footer multi-colunas\n */\n\nimport type { SiteDocument } from \"../schema\";\nimport { NAVBAR_DEFAULT_PROPS } from \"../../engine/registry/blocks/sections/navbar\";\n\nexport const smartgestiAdminTemplate: SiteDocument = {\n meta: {\n title: \"SmartGesti Admin\",\n description:\n \"Landing page profissional para sistema de gestão administrativa – módulos, benefícios, contato e depoimentos\",\n language: \"pt-BR\",\n },\n theme: {\n colors: {\n primary: \"#6366f1\",\n secondary: \"#4f46e5\",\n accent: \"#8b5cf6\",\n background: \"#ffffff\",\n surface: \"#f8fafc\",\n text: \"#0f172a\",\n textMuted: \"#64748b\",\n border: \"#e2e8f0\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n },\n typography: {\n fontFamily: \"Inter, system-ui, sans-serif\",\n fontFamilyHeading: \"Inter, system-ui, sans-serif\",\n baseFontSize: \"16px\",\n lineHeight: 1.6,\n headingLineHeight: 1.2,\n },\n spacing: {\n unit: \"0.25rem\",\n scale: [0, 1, 2, 4, 6, 8, 12, 16, 24, 32, 48, 64],\n },\n effects: {\n borderRadius: \"0.75rem\",\n shadow:\n \"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)\",\n shadowLg: \"0 25px 50px -12px rgba(0,0,0,0.25)\",\n transition: \"all 0.3s ease\",\n },\n },\n structure: [\n // 1. NAVBAR\n {\n id: \"admin-navbar\",\n type: \"navbar\",\n props: {\n ...NAVBAR_DEFAULT_PROPS,\n links: [\n { text: \"Home\", href: \"/site/p/home\" },\n { text: \"Produtos\", href: \"#admin-products\" },\n { text: \"Sobre\", href: \"#admin-about\" },\n { text: \"Depoimentos\", href: \"#admin-testimonials\" },\n { text: \"FAQ\", href: \"#admin-faq\" },\n { text: \"Contato\", href: \"#admin-contact\" },\n ],\n ctaButton: { text: \"Solicitar Demo\", href: \"#admin-contact\" },\n bg: \"#ffffff\",\n // Link hover effects\n linkHoverEffect: \"underline\",\n linkHoverIntensity: 60,\n linkHoverColor: \"#6366f1\",\n // CTA button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 2. HERO\n {\n id: \"admin-hero\",\n type: \"hero\",\n props: {\n variation: \"hero-split\",\n variant: \"split\",\n badge: \"Gestão Inteligente\",\n title: \"Simplifique a gestão da sua instituição\",\n description:\n \"Plataforma completa para gestão administrativa, acadêmica e financeira. Automatize processos, reduza custos e tome decisões baseadas em dados.\",\n primaryButton: { text: \"Começar Agora\", href: \"#admin-contact\" },\n secondaryButton: { text: \"Ver Demonstração\", href: \"#admin-products\" },\n image: \"https://placehold.co/600x500/6366f1/ffffff?text=SmartGesti\",\n align: \"left\",\n minHeight: \"85vh\",\n background: \"linear-gradient(135deg, #1e1b4b 0%, #312e81 100%)\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#e0e7ff\",\n descriptionColor: \"#c7d2fe\",\n // Button hover effects\n buttonHoverEffect: \"glow\",\n buttonHoverIntensity: 60,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 3. STATS\n {\n id: \"admin-stats\",\n type: \"stats\",\n props: {\n title: \"Números que Falam\",\n subtitle: \"Resultados reais de quem usa o SmartGesti\",\n items: [\n { value: \"500+\", label: \"Instituições Atendidas\" },\n { value: \"99.9%\", label: \"Uptime Garantido\" },\n { value: \"50k+\", label: \"Usuários Ativos\" },\n { value: \"4.9\", label: \"Nota dos Clientes\", suffix: \"/5\" },\n ],\n },\n },\n\n // 4. PRODUCT SHOWCASE\n {\n id: \"admin-products\",\n type: \"productShowcase\",\n props: {\n title: \"Nossos Módulos\",\n subtitle: \"Soluções Completas\",\n variant: \"alternating\",\n products: [\n {\n name: \"Gestão Acadêmica\",\n description: \"Controle total do fluxo acadêmico.\",\n longDescription:\n \"Gerencie matrículas, turmas, notas, frequências e boletins em uma única plataforma. Acompanhe o desempenho dos alunos em tempo real.\",\n icon: \"📚\",\n badge: \"Mais Popular\",\n features: [\n \"Matrículas online\",\n \"Diário de classe digital\",\n \"Boletins automáticos\",\n \"Portal do aluno e responsável\",\n ],\n primaryButton: { text: \"Saiba Mais\", href: \"#admin-contact\" },\n },\n {\n name: \"Gestão Financeira\",\n description: \"Finanças sob controle total.\",\n longDescription:\n \"Controle mensalidades, gere boletos, acompanhe inadimplência e tenha relatórios financeiros completos para tomar decisões estratégicas.\",\n icon: \"💰\",\n features: [\n \"Emissão de boletos\",\n \"Controle de inadimplência\",\n \"Relatórios financeiros\",\n \"Integração bancária\",\n ],\n primaryButton: { text: \"Saiba Mais\", href: \"#admin-contact\" },\n secondaryButton: { text: \"Ver Preços\", href: \"#admin-faq\" },\n },\n {\n name: \"Comunicação Integrada\",\n description: \"Conecte escola, família e alunos.\",\n longDescription:\n \"Envie comunicados, agende reuniões, compartilhe documentos e mantenha todos informados através de notificações push, email e SMS.\",\n icon: \"💬\",\n features: [\n \"Comunicados instantâneos\",\n \"Agenda de eventos\",\n \"Chat escola-família\",\n \"Notificações push\",\n ],\n primaryButton: { text: \"Saiba Mais\", href: \"#admin-contact\" },\n },\n ],\n // Button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 5. ABOUT SECTION\n {\n id: \"admin-about\",\n type: \"aboutSection\",\n props: {\n title: \"Por que escolher o SmartGesti?\",\n subtitle: \"Sobre Nós\",\n description:\n \"Desde 2015, ajudamos instituições de ensino a modernizar seus processos. Nossa plataforma foi desenvolvida em parceria com gestores escolares para resolver problemas reais do dia a dia.\",\n secondaryDescription:\n \"Acreditamos que tecnologia de qualidade deve ser acessível a todas as instituições, independente do tamanho.\",\n variant: \"image-left\",\n image: \"https://placehold.co/600x400/e0e7ff/6366f1?text=Equipe+SmartGesti\",\n achievements: [\n { text: \"Equipe 100% brasileira\" },\n { text: \"Suporte humanizado em português\" },\n { text: \"Implantação em até 7 dias\" },\n { text: \"Sem taxa de adesão\" },\n ],\n primaryButton: { text: \"Conheça Nossa História\", href: \"#admin-contact\" },\n stats: [\n { value: \"500+\", label: \"Clientes\" },\n { value: \"8+\", label: \"Anos\" },\n ],\n // Button hover effects\n buttonHoverEffect: \"glow\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 6. FEATURE GRID\n {\n id: \"admin-features\",\n type: \"featureGrid\",\n props: {\n title: \"Benefícios da Plataforma\",\n subtitle: \"Tudo que sua instituição precisa em um só lugar\",\n columns: 3,\n variant: \"cards\",\n features: [\n {\n icon: \"shield\",\n title: \"Segurança Total\",\n description:\n \"Dados criptografados, backups automáticos e conformidade com LGPD.\",\n },\n {\n icon: \"zap\",\n title: \"Alta Performance\",\n description:\n \"Sistema rápido e estável, mesmo com milhares de acessos simultâneos.\",\n },\n {\n icon: \"smartphone\",\n title: \"100% Responsivo\",\n description:\n \"Acesse de qualquer dispositivo – desktop, tablet ou celular.\",\n },\n {\n icon: \"bar-chart\",\n title: \"Dashboards Inteligentes\",\n description:\n \"Visualize dados em tempo real com gráficos e relatórios personalizados.\",\n },\n {\n icon: \"users\",\n title: \"Multi-Unidade\",\n description:\n \"Gerencie múltiplas unidades a partir de uma única conta administrativa.\",\n },\n {\n icon: \"headphones\",\n title: \"Suporte Premium\",\n description:\n \"Atendimento via chat, email e telefone com tempo de resposta garantido.\",\n },\n ],\n },\n },\n\n // 7. TESTIMONIALS\n {\n id: \"admin-testimonials\",\n type: \"testimonialGrid\",\n props: {\n title: \"O que Nossos Clientes Dizem\",\n subtitle: \"Depoimentos reais de gestores que transformaram suas instituições\",\n columns: 3,\n testimonials: [\n {\n quote:\n \"O SmartGesti revolucionou nossa gestão. Reduzimos em 60% o tempo gasto com processos administrativos.\",\n authorName: \"Maria Silva\",\n authorRole: \"Diretora\",\n authorCompany: \"Colégio São Paulo\",\n rating: 5,\n },\n {\n quote:\n \"A integração financeira é impecável. Finalmente temos controle total da inadimplência.\",\n authorName: \"João Santos\",\n authorRole: \"Gestor Financeiro\",\n authorCompany: \"Escola Nova Era\",\n rating: 5,\n },\n {\n quote:\n \"O suporte é excepcional. Sempre que precisamos, a equipe está pronta para ajudar.\",\n authorName: \"Ana Oliveira\",\n authorRole: \"Coordenadora\",\n authorCompany: \"Instituto Futuro\",\n rating: 5,\n },\n ],\n },\n },\n\n // 8. FAQ\n {\n id: \"admin-faq\",\n type: \"faq\",\n props: {\n title: \"Perguntas Frequentes\",\n subtitle: \"Tire suas dúvidas sobre o SmartGesti\",\n items: [\n {\n question: \"Quanto tempo leva para implementar?\",\n answer:\n \"A implantação completa leva em média 7 dias úteis. Nossa equipe cuida de toda a migração de dados e treinamento da equipe.\",\n },\n {\n question: \"O sistema funciona offline?\",\n answer:\n \"O SmartGesti é 100% online (cloud), garantindo acesso de qualquer lugar. Em caso de queda de internet, os dados são sincronizados automaticamente ao reconectar.\",\n },\n {\n question: \"Existe taxa de adesão?\",\n answer:\n \"Não cobramos taxa de adesão, implementação ou treinamento. O valor mensal inclui tudo: sistema, suporte, atualizações e backups.\",\n },\n {\n question: \"Posso cancelar a qualquer momento?\",\n answer:\n \"Sim, não há fidelidade. Você pode cancelar a qualquer momento e exportar todos os seus dados.\",\n },\n {\n question: \"O sistema é seguro?\",\n answer:\n \"Absolutamente. Utilizamos criptografia de ponta, backups diários, servidores redundantes e somos 100% conformes com a LGPD.\",\n },\n ],\n },\n },\n\n // 9. CONTACT SECTION\n {\n id: \"admin-contact\",\n type: \"contactSection\",\n props: {\n title: \"Fale Conosco\",\n subtitle: \"Contato\",\n description: \"Solicite uma demonstração gratuita ou tire suas dúvidas com nossa equipe.\",\n variant: \"split\",\n contactInfo: [\n { icon: \"mail\", label: \"Email\", value: \"contato@smartgesti.com.br\" },\n { icon: \"phone\", label: \"Telefone\", value: \"(11) 3456-7890\" },\n {\n icon: \"map-pin\",\n label: \"Endereço\",\n value: \"Av. Paulista, 1000 - São Paulo, SP\",\n },\n { icon: \"clock\", label: \"Horário\", value: \"Seg a Sex, 8h às 18h\" },\n ],\n formTitle: \"Solicite uma demonstração\",\n formFields: [\n {\n name: \"name\",\n label: \"Nome Completo\",\n type: \"text\",\n placeholder: \"Seu nome\",\n required: true,\n },\n {\n name: \"email\",\n label: \"Email Institucional\",\n type: \"email\",\n placeholder: \"email@instituicao.com.br\",\n required: true,\n },\n {\n name: \"phone\",\n label: \"Telefone\",\n type: \"tel\",\n placeholder: \"(00) 00000-0000\",\n },\n {\n name: \"message\",\n label: \"Mensagem\",\n type: \"textarea\",\n placeholder: \"Conte-nos sobre sua instituição e suas necessidades...\",\n required: true,\n },\n ],\n submitText: \"Solicitar Demonstração\",\n // Button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 10. CTA\n {\n id: \"admin-cta\",\n type: \"cta\",\n props: {\n title: \"Pronto para transformar sua gestão?\",\n description:\n \"Junte-se a mais de 500 instituições que já simplificaram seus processos com o SmartGesti.\",\n primaryButton: { text: \"Começar Agora\", href: \"#admin-contact\" },\n secondaryButton: { text: \"Ver Planos\" },\n variant: \"gradient\",\n // Button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 11. FOOTER\n {\n id: \"admin-footer\",\n type: \"footer\",\n props: {\n logoText: \"SmartGesti\",\n description:\n \"Plataforma de gestão inteligente para instituições de ensino.\",\n variant: \"multi-column\",\n columns: [\n {\n title: \"Produto\",\n links: [\n { text: \"Gestão Acadêmica\", href: \"#admin-products\" },\n { text: \"Gestão Financeira\", href: \"#admin-products\" },\n { text: \"Comunicação\", href: \"#admin-products\" },\n { text: \"Relatórios\", href: \"#admin-products\" },\n ],\n },\n {\n title: \"Empresa\",\n links: [\n { text: \"Sobre Nós\", href: \"#admin-about\" },\n { text: \"Carreiras\", href: \"#\" },\n { text: \"Blog\", href: \"#\" },\n { text: \"Contato\", href: \"#admin-contact\" },\n ],\n },\n {\n title: \"Suporte\",\n links: [\n { text: \"Central de Ajuda\", href: \"#\" },\n { text: \"Documentação\", href: \"#\" },\n { text: \"Status\", href: \"#\" },\n { text: \"Termos de Uso\", href: \"#\" },\n ],\n },\n ],\n social: [\n { platform: \"instagram\", href: \"https://instagram.com/smartgesti\" },\n { platform: \"linkedin\", href: \"https://linkedin.com/company/smartgesti\" },\n { platform: \"youtube\", href: \"https://youtube.com/smartgesti\" },\n { platform: \"whatsapp\", href: \"https://wa.me/5511999999999\" },\n ],\n copyright: \"© 2025 SmartGesti. Todos os direitos reservados.\",\n // Link hover effects\n linkHoverEffect: \"underline-center\",\n linkHoverIntensity: 50,\n linkHoverColor: \"#818cf8\",\n },\n },\n ],\n};\n"],"names":["smartgestiAdminTemplate","NAVBAR_DEFAULT_PROPS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"smartgesti-admin.js","sources":["../../../src/shared/templates/smartgesti-admin.ts"],"sourcesContent":["/**\n * Template: SmartGesti Administrativo\n * Landing page profissional para software de gestão administrativa\n *\n * Características:\n * - Navbar elegante com CTA\n * - Hero split com gradiente escuro\n * - Stats de impacto (clientes, uptime, etc.)\n * - Product Showcase alternado (módulos do sistema)\n * - About Section com achievements e stats flutuantes\n * - Feature Grid de benefícios\n * - Testimonials de clientes\n * - FAQ\n * - Contact Section com formulário\n * - CTA final\n * - Footer multi-colunas\n */\n\nimport type { SiteDocument } from \"../schema\";\nimport { NAVBAR_DEFAULT_PROPS } from \"../../engine/registry/blocks/sections/navbar\";\n\nexport const smartgestiAdminTemplate: SiteDocument = {\n meta: {\n title: \"SmartGesti Admin\",\n description:\n \"Landing page profissional para sistema de gestão administrativa – módulos, benefícios, contato e depoimentos\",\n language: \"pt-BR\",\n },\n theme: {\n colors: {\n primary: \"#6366f1\",\n secondary: \"#4f46e5\",\n accent: \"#8b5cf6\",\n background: \"#ffffff\",\n surface: \"#f8fafc\",\n text: \"#0f172a\",\n textMuted: \"#64748b\",\n border: \"#e2e8f0\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n },\n typography: {\n fontFamily: \"Inter, system-ui, sans-serif\",\n fontFamilyHeading: \"Inter, system-ui, sans-serif\",\n baseFontSize: \"16px\",\n lineHeight: 1.6,\n headingLineHeight: 1.2,\n },\n spacing: {\n unit: \"0.25rem\",\n scale: [0, 1, 2, 4, 6, 8, 12, 16, 24, 32, 48, 64],\n },\n effects: {\n borderRadius: \"0.75rem\",\n shadow:\n \"0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)\",\n shadowLg: \"0 25px 50px -12px rgba(0,0,0,0.25)\",\n transition: \"all 0.3s ease\",\n },\n },\n structure: [\n // 1. NAVBAR\n {\n id: \"admin-navbar\",\n type: \"navbar\",\n props: {\n ...NAVBAR_DEFAULT_PROPS,\n links: [\n { text: \"Home\", href: \"/site/p/home\" },\n { text: \"Produtos\", href: \"#admin-products\" },\n { text: \"Sobre\", href: \"#admin-about\" },\n { text: \"Depoimentos\", href: \"#admin-testimonials\" },\n { text: \"FAQ\", href: \"#admin-faq\" },\n { text: \"Contato\", href: \"#admin-contact\" },\n ],\n ctaButton: { text: \"Solicitar Demo\", href: \"#admin-contact\" },\n bg: \"#ffffff\",\n // Link hover effects\n linkHoverEffect: \"underline\",\n linkHoverIntensity: 60,\n linkHoverColor: \"#6366f1\",\n // CTA button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 2. HERO\n {\n id: \"admin-hero\",\n type: \"hero\",\n props: {\n variation: \"hero-split\",\n variant: \"split\",\n badge: \"Gestão Inteligente\",\n title: \"Simplifique a gestão da sua instituição\",\n description:\n \"Plataforma completa para gestão administrativa, acadêmica e financeira. Automatize processos, reduza custos e tome decisões baseadas em dados.\",\n primaryButton: { text: \"Começar Agora\", href: \"#admin-contact\" },\n secondaryButton: { text: \"Ver Demonstração\", href: \"#admin-products\" },\n image: \"https://placehold.co/600x500/6366f1/ffffff?text=SmartGesti\",\n align: \"left\",\n minHeight: \"85vh\",\n background: \"linear-gradient(135deg, #1e1b4b 0%, #312e81 100%)\",\n // Button hover effects\n buttonHoverEffect: \"glow\",\n buttonHoverIntensity: 60,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 3. STATS\n {\n id: \"admin-stats\",\n type: \"stats\",\n props: {\n title: \"Números que Falam\",\n subtitle: \"Resultados reais de quem usa o SmartGesti\",\n items: [\n { value: \"500+\", label: \"Instituições Atendidas\" },\n { value: \"99.9%\", label: \"Uptime Garantido\" },\n { value: \"50k+\", label: \"Usuários Ativos\" },\n { value: \"4.9\", label: \"Nota dos Clientes\", suffix: \"/5\" },\n ],\n },\n },\n\n // 4. PRODUCT SHOWCASE\n {\n id: \"admin-products\",\n type: \"productShowcase\",\n props: {\n title: \"Nossos Módulos\",\n subtitle: \"Soluções Completas\",\n variant: \"alternating\",\n products: [\n {\n name: \"Gestão Acadêmica\",\n description: \"Controle total do fluxo acadêmico.\",\n longDescription:\n \"Gerencie matrículas, turmas, notas, frequências e boletins em uma única plataforma. Acompanhe o desempenho dos alunos em tempo real.\",\n icon: \"📚\",\n badge: \"Mais Popular\",\n features: [\n \"Matrículas online\",\n \"Diário de classe digital\",\n \"Boletins automáticos\",\n \"Portal do aluno e responsável\",\n ],\n primaryButton: { text: \"Saiba Mais\", href: \"#admin-contact\" },\n },\n {\n name: \"Gestão Financeira\",\n description: \"Finanças sob controle total.\",\n longDescription:\n \"Controle mensalidades, gere boletos, acompanhe inadimplência e tenha relatórios financeiros completos para tomar decisões estratégicas.\",\n icon: \"💰\",\n features: [\n \"Emissão de boletos\",\n \"Controle de inadimplência\",\n \"Relatórios financeiros\",\n \"Integração bancária\",\n ],\n primaryButton: { text: \"Saiba Mais\", href: \"#admin-contact\" },\n secondaryButton: { text: \"Ver Preços\", href: \"#admin-faq\" },\n },\n {\n name: \"Comunicação Integrada\",\n description: \"Conecte escola, família e alunos.\",\n longDescription:\n \"Envie comunicados, agende reuniões, compartilhe documentos e mantenha todos informados através de notificações push, email e SMS.\",\n icon: \"💬\",\n features: [\n \"Comunicados instantâneos\",\n \"Agenda de eventos\",\n \"Chat escola-família\",\n \"Notificações push\",\n ],\n primaryButton: { text: \"Saiba Mais\", href: \"#admin-contact\" },\n },\n ],\n // Button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 5. ABOUT SECTION\n {\n id: \"admin-about\",\n type: \"aboutSection\",\n props: {\n title: \"Por que escolher o SmartGesti?\",\n subtitle: \"Sobre Nós\",\n description:\n \"Desde 2015, ajudamos instituições de ensino a modernizar seus processos. Nossa plataforma foi desenvolvida em parceria com gestores escolares para resolver problemas reais do dia a dia.\",\n secondaryDescription:\n \"Acreditamos que tecnologia de qualidade deve ser acessível a todas as instituições, independente do tamanho.\",\n variant: \"image-left\",\n image: \"https://placehold.co/600x400/e0e7ff/6366f1?text=Equipe+SmartGesti\",\n achievements: [\n { text: \"Equipe 100% brasileira\" },\n { text: \"Suporte humanizado em português\" },\n { text: \"Implantação em até 7 dias\" },\n { text: \"Sem taxa de adesão\" },\n ],\n primaryButton: { text: \"Conheça Nossa História\", href: \"#admin-contact\" },\n stats: [\n { value: \"500+\", label: \"Clientes\" },\n { value: \"8+\", label: \"Anos\" },\n ],\n // Button hover effects\n buttonHoverEffect: \"glow\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 6. FEATURE GRID\n {\n id: \"admin-features\",\n type: \"featureGrid\",\n props: {\n title: \"Benefícios da Plataforma\",\n subtitle: \"Tudo que sua instituição precisa em um só lugar\",\n columns: 3,\n variant: \"cards\",\n features: [\n {\n icon: \"shield\",\n title: \"Segurança Total\",\n description:\n \"Dados criptografados, backups automáticos e conformidade com LGPD.\",\n },\n {\n icon: \"zap\",\n title: \"Alta Performance\",\n description:\n \"Sistema rápido e estável, mesmo com milhares de acessos simultâneos.\",\n },\n {\n icon: \"smartphone\",\n title: \"100% Responsivo\",\n description:\n \"Acesse de qualquer dispositivo – desktop, tablet ou celular.\",\n },\n {\n icon: \"bar-chart\",\n title: \"Dashboards Inteligentes\",\n description:\n \"Visualize dados em tempo real com gráficos e relatórios personalizados.\",\n },\n {\n icon: \"users\",\n title: \"Multi-Unidade\",\n description:\n \"Gerencie múltiplas unidades a partir de uma única conta administrativa.\",\n },\n {\n icon: \"headphones\",\n title: \"Suporte Premium\",\n description:\n \"Atendimento via chat, email e telefone com tempo de resposta garantido.\",\n },\n ],\n },\n },\n\n // 7. TESTIMONIALS\n {\n id: \"admin-testimonials\",\n type: \"testimonialGrid\",\n props: {\n title: \"O que Nossos Clientes Dizem\",\n subtitle: \"Depoimentos reais de gestores que transformaram suas instituições\",\n columns: 3,\n testimonials: [\n {\n quote:\n \"O SmartGesti revolucionou nossa gestão. Reduzimos em 60% o tempo gasto com processos administrativos.\",\n authorName: \"Maria Silva\",\n authorRole: \"Diretora\",\n authorCompany: \"Colégio São Paulo\",\n rating: 5,\n },\n {\n quote:\n \"A integração financeira é impecável. Finalmente temos controle total da inadimplência.\",\n authorName: \"João Santos\",\n authorRole: \"Gestor Financeiro\",\n authorCompany: \"Escola Nova Era\",\n rating: 5,\n },\n {\n quote:\n \"O suporte é excepcional. Sempre que precisamos, a equipe está pronta para ajudar.\",\n authorName: \"Ana Oliveira\",\n authorRole: \"Coordenadora\",\n authorCompany: \"Instituto Futuro\",\n rating: 5,\n },\n ],\n },\n },\n\n // 8. FAQ\n {\n id: \"admin-faq\",\n type: \"faq\",\n props: {\n title: \"Perguntas Frequentes\",\n subtitle: \"Tire suas dúvidas sobre o SmartGesti\",\n items: [\n {\n question: \"Quanto tempo leva para implementar?\",\n answer:\n \"A implantação completa leva em média 7 dias úteis. Nossa equipe cuida de toda a migração de dados e treinamento da equipe.\",\n },\n {\n question: \"O sistema funciona offline?\",\n answer:\n \"O SmartGesti é 100% online (cloud), garantindo acesso de qualquer lugar. Em caso de queda de internet, os dados são sincronizados automaticamente ao reconectar.\",\n },\n {\n question: \"Existe taxa de adesão?\",\n answer:\n \"Não cobramos taxa de adesão, implementação ou treinamento. O valor mensal inclui tudo: sistema, suporte, atualizações e backups.\",\n },\n {\n question: \"Posso cancelar a qualquer momento?\",\n answer:\n \"Sim, não há fidelidade. Você pode cancelar a qualquer momento e exportar todos os seus dados.\",\n },\n {\n question: \"O sistema é seguro?\",\n answer:\n \"Absolutamente. Utilizamos criptografia de ponta, backups diários, servidores redundantes e somos 100% conformes com a LGPD.\",\n },\n ],\n },\n },\n\n // 9. CONTACT SECTION\n {\n id: \"admin-contact\",\n type: \"contactSection\",\n props: {\n title: \"Fale Conosco\",\n subtitle: \"Contato\",\n description: \"Solicite uma demonstração gratuita ou tire suas dúvidas com nossa equipe.\",\n variant: \"split\",\n contactInfo: [\n { icon: \"mail\", label: \"Email\", value: \"contato@smartgesti.com.br\" },\n { icon: \"phone\", label: \"Telefone\", value: \"(11) 3456-7890\" },\n {\n icon: \"map-pin\",\n label: \"Endereço\",\n value: \"Av. Paulista, 1000 - São Paulo, SP\",\n },\n { icon: \"clock\", label: \"Horário\", value: \"Seg a Sex, 8h às 18h\" },\n ],\n formTitle: \"Solicite uma demonstração\",\n formFields: [\n {\n name: \"name\",\n label: \"Nome Completo\",\n type: \"text\",\n placeholder: \"Seu nome\",\n required: true,\n },\n {\n name: \"email\",\n label: \"Email Institucional\",\n type: \"email\",\n placeholder: \"email@instituicao.com.br\",\n required: true,\n },\n {\n name: \"phone\",\n label: \"Telefone\",\n type: \"tel\",\n placeholder: \"(00) 00000-0000\",\n },\n {\n name: \"message\",\n label: \"Mensagem\",\n type: \"textarea\",\n placeholder: \"Conte-nos sobre sua instituição e suas necessidades...\",\n required: true,\n },\n ],\n submitText: \"Solicitar Demonstração\",\n // Button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 10. CTA\n {\n id: \"admin-cta\",\n type: \"cta\",\n props: {\n title: \"Pronto para transformar sua gestão?\",\n description:\n \"Junte-se a mais de 500 instituições que já simplificaram seus processos com o SmartGesti.\",\n primaryButton: { text: \"Começar Agora\", href: \"#admin-contact\" },\n secondaryButton: { text: \"Ver Planos\" },\n variant: \"gradient\",\n // Button hover effects\n buttonHoverEffect: \"scale\",\n buttonHoverIntensity: 50,\n buttonHoverOverlay: \"shine\",\n },\n },\n\n // 11. FOOTER\n {\n id: \"admin-footer\",\n type: \"footer\",\n props: {\n logoText: \"SmartGesti\",\n description:\n \"Plataforma de gestão inteligente para instituições de ensino.\",\n variant: \"multi-column\",\n columns: [\n {\n title: \"Produto\",\n links: [\n { text: \"Gestão Acadêmica\", href: \"#admin-products\" },\n { text: \"Gestão Financeira\", href: \"#admin-products\" },\n { text: \"Comunicação\", href: \"#admin-products\" },\n { text: \"Relatórios\", href: \"#admin-products\" },\n ],\n },\n {\n title: \"Empresa\",\n links: [\n { text: \"Sobre Nós\", href: \"#admin-about\" },\n { text: \"Carreiras\", href: \"#\" },\n { text: \"Blog\", href: \"#\" },\n { text: \"Contato\", href: \"#admin-contact\" },\n ],\n },\n {\n title: \"Suporte\",\n links: [\n { text: \"Central de Ajuda\", href: \"#\" },\n { text: \"Documentação\", href: \"#\" },\n { text: \"Status\", href: \"#\" },\n { text: \"Termos de Uso\", href: \"#\" },\n ],\n },\n ],\n social: [\n { platform: \"instagram\", href: \"https://instagram.com/smartgesti\" },\n { platform: \"linkedin\", href: \"https://linkedin.com/company/smartgesti\" },\n { platform: \"youtube\", href: \"https://youtube.com/smartgesti\" },\n { platform: \"whatsapp\", href: \"https://wa.me/5511999999999\" },\n ],\n copyright: \"© 2025 SmartGesti. Todos os direitos reservados.\",\n // Link hover effects\n linkHoverEffect: \"underline-center\",\n linkHoverIntensity: 50,\n linkHoverColor: \"#a5b4fc\",\n },\n },\n ],\n};\n"],"names":["smartgestiAdminTemplate","NAVBAR_DEFAULT_PROPS"],"mappings":";AAqBO,MAAMA,IAAwC;AAAA,EACnD,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,aACE;AAAA,IACF,UAAU;AAAA,EAAA;AAAA,EAEZ,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,MAAM;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,YAAY;AAAA,MACV,YAAY;AAAA,MACZ,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,mBAAmB;AAAA,IAAA;AAAA,IAErB,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,IAAA;AAAA,IAElD,SAAS;AAAA,MACP,cAAc;AAAA,MACd,QACE;AAAA,MACF,UAAU;AAAA,MACV,YAAY;AAAA,IAAA;AAAA,EACd;AAAA,EAEF,WAAW;AAAA;AAAA,IAET;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,GAAGC;AAAA,QACH,OAAO;AAAA,UACL,EAAE,MAAM,QAAQ,MAAM,eAAA;AAAA,UACtB,EAAE,MAAM,YAAY,MAAM,kBAAA;AAAA,UAC1B,EAAE,MAAM,SAAS,MAAM,eAAA;AAAA,UACvB,EAAE,MAAM,eAAe,MAAM,sBAAA;AAAA,UAC7B,EAAE,MAAM,OAAO,MAAM,aAAA;AAAA,UACrB,EAAE,MAAM,WAAW,MAAM,iBAAA;AAAA,QAAiB;AAAA,QAE5C,WAAW,EAAE,MAAM,kBAAkB,MAAM,iBAAA;AAAA,QAC3C,IAAI;AAAA;AAAA,QAEJ,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,gBAAgB;AAAA;AAAA,QAEhB,mBAAmB;AAAA,QACnB,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,MAAA;AAAA,IACtB;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,WAAW;AAAA,QACX,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,QACP,aACE;AAAA,QACF,eAAe,EAAE,MAAM,iBAAiB,MAAM,iBAAA;AAAA,QAC9C,iBAAiB,EAAE,MAAM,oBAAoB,MAAM,kBAAA;AAAA,QACnD,OAAO;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,QACX,YAAY;AAAA;AAAA,QAEZ,mBAAmB;AAAA,QACnB,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,MAAA;AAAA,IACtB;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,UACL,EAAE,OAAO,QAAQ,OAAO,yBAAA;AAAA,UACxB,EAAE,OAAO,SAAS,OAAO,mBAAA;AAAA,UACzB,EAAE,OAAO,QAAQ,OAAO,kBAAA;AAAA,UACxB,EAAE,OAAO,OAAO,OAAO,qBAAqB,QAAQ,KAAA;AAAA,QAAK;AAAA,MAC3D;AAAA,IACF;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,iBACE;AAAA,YACF,MAAM;AAAA,YACN,OAAO;AAAA,YACP,UAAU;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,YAEF,eAAe,EAAE,MAAM,cAAc,MAAM,iBAAA;AAAA,UAAiB;AAAA,UAE9D;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,iBACE;AAAA,YACF,MAAM;AAAA,YACN,UAAU;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,YAEF,eAAe,EAAE,MAAM,cAAc,MAAM,iBAAA;AAAA,YAC3C,iBAAiB,EAAE,MAAM,cAAc,MAAM,aAAA;AAAA,UAAa;AAAA,UAE5D;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,iBACE;AAAA,YACF,MAAM;AAAA,YACN,UAAU;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,YAEF,eAAe,EAAE,MAAM,cAAc,MAAM,iBAAA;AAAA,UAAiB;AAAA,QAC9D;AAAA;AAAA,QAGF,mBAAmB;AAAA,QACnB,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,MAAA;AAAA,IACtB;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,aACE;AAAA,QACF,sBACE;AAAA,QACF,SAAS;AAAA,QACT,OAAO;AAAA,QACP,cAAc;AAAA,UACZ,EAAE,MAAM,yBAAA;AAAA,UACR,EAAE,MAAM,kCAAA;AAAA,UACR,EAAE,MAAM,4BAAA;AAAA,UACR,EAAE,MAAM,qBAAA;AAAA,QAAqB;AAAA,QAE/B,eAAe,EAAE,MAAM,0BAA0B,MAAM,iBAAA;AAAA,QACvD,OAAO;AAAA,UACL,EAAE,OAAO,QAAQ,OAAO,WAAA;AAAA,UACxB,EAAE,OAAO,MAAM,OAAO,OAAA;AAAA,QAAO;AAAA;AAAA,QAG/B,mBAAmB;AAAA,QACnB,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,MAAA;AAAA,IACtB;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,aACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,aACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,aACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,aACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,aACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS;AAAA,QACT,cAAc;AAAA,UACZ;AAAA,YACE,OACE;AAAA,YACF,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,QAAQ;AAAA,UAAA;AAAA,UAEV;AAAA,YACE,OACE;AAAA,YACF,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,QAAQ;AAAA,UAAA;AAAA,UAEV;AAAA,YACE,OACE;AAAA,YACF,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,eAAe;AAAA,YACf,QAAQ;AAAA,UAAA;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,UACL;AAAA,YACE,UAAU;AAAA,YACV,QACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,UAAU;AAAA,YACV,QACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,UAAU;AAAA,YACV,QACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,UAAU;AAAA,YACV,QACE;AAAA,UAAA;AAAA,UAEJ;AAAA,YACE,UAAU;AAAA,YACV,QACE;AAAA,UAAA;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,aAAa;AAAA,QACb,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,QAAQ,OAAO,SAAS,OAAO,4BAAA;AAAA,UACvC,EAAE,MAAM,SAAS,OAAO,YAAY,OAAO,iBAAA;AAAA,UAC3C;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,UAAA;AAAA,UAET,EAAE,MAAM,SAAS,OAAO,WAAW,OAAO,uBAAA;AAAA,QAAuB;AAAA,QAEnE,WAAW;AAAA,QACX,YAAY;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,YACN,aAAa;AAAA,YACb,UAAU;AAAA,UAAA;AAAA,UAEZ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,YACN,aAAa;AAAA,YACb,UAAU;AAAA,UAAA;AAAA,UAEZ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,YACN,aAAa;AAAA,UAAA;AAAA,UAEf;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM;AAAA,YACN,aAAa;AAAA,YACb,UAAU;AAAA,UAAA;AAAA,QACZ;AAAA,QAEF,YAAY;AAAA;AAAA,QAEZ,mBAAmB;AAAA,QACnB,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,MAAA;AAAA,IACtB;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aACE;AAAA,QACF,eAAe,EAAE,MAAM,iBAAiB,MAAM,iBAAA;AAAA,QAC9C,iBAAiB,EAAE,MAAM,aAAA;AAAA,QACzB,SAAS;AAAA;AAAA,QAET,mBAAmB;AAAA,QACnB,sBAAsB;AAAA,QACtB,oBAAoB;AAAA,MAAA;AAAA,IACtB;AAAA;AAAA,IAIF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,QACL,UAAU;AAAA,QACV,aACE;AAAA,QACF,SAAS;AAAA,QACT,SAAS;AAAA,UACP;AAAA,YACE,OAAO;AAAA,YACP,OAAO;AAAA,cACL,EAAE,MAAM,oBAAoB,MAAM,kBAAA;AAAA,cAClC,EAAE,MAAM,qBAAqB,MAAM,kBAAA;AAAA,cACnC,EAAE,MAAM,eAAe,MAAM,kBAAA;AAAA,cAC7B,EAAE,MAAM,cAAc,MAAM,kBAAA;AAAA,YAAkB;AAAA,UAChD;AAAA,UAEF;AAAA,YACE,OAAO;AAAA,YACP,OAAO;AAAA,cACL,EAAE,MAAM,aAAa,MAAM,eAAA;AAAA,cAC3B,EAAE,MAAM,aAAa,MAAM,IAAA;AAAA,cAC3B,EAAE,MAAM,QAAQ,MAAM,IAAA;AAAA,cACtB,EAAE,MAAM,WAAW,MAAM,iBAAA;AAAA,YAAiB;AAAA,UAC5C;AAAA,UAEF;AAAA,YACE,OAAO;AAAA,YACP,OAAO;AAAA,cACL,EAAE,MAAM,oBAAoB,MAAM,IAAA;AAAA,cAClC,EAAE,MAAM,gBAAgB,MAAM,IAAA;AAAA,cAC9B,EAAE,MAAM,UAAU,MAAM,IAAA;AAAA,cACxB,EAAE,MAAM,iBAAiB,MAAM,IAAA;AAAA,YAAI;AAAA,UACrC;AAAA,QACF;AAAA,QAEF,QAAQ;AAAA,UACN,EAAE,UAAU,aAAa,MAAM,mCAAA;AAAA,UAC/B,EAAE,UAAU,YAAY,MAAM,0CAAA;AAAA,UAC9B,EAAE,UAAU,WAAW,MAAM,iCAAA;AAAA,UAC7B,EAAE,UAAU,YAAY,MAAM,8BAAA;AAAA,QAA8B;AAAA,QAE9D,WAAW;AAAA;AAAA,QAEX,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF;AAEJ;"}
|
|
@@ -1,29 +1,86 @@
|
|
|
1
|
+
import { ColorPalette } from '../editor/PaletteSelector';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Utilitários para manipulação de cores
|
|
3
|
+
* Converte hex para RGB
|
|
4
4
|
*/
|
|
5
|
+
export declare function hexToRgb(hex: string): {
|
|
6
|
+
r: number;
|
|
7
|
+
g: number;
|
|
8
|
+
b: number;
|
|
9
|
+
} | null;
|
|
5
10
|
/**
|
|
6
|
-
*
|
|
7
|
-
|
|
11
|
+
* Converte hex para HSL
|
|
12
|
+
*/
|
|
13
|
+
export declare function hexToHSL(hex: string): {
|
|
14
|
+
h: number;
|
|
15
|
+
s: number;
|
|
16
|
+
l: number;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Converte HSL para hex
|
|
20
|
+
*/
|
|
21
|
+
export declare function hslToHex(h: number, s: number, l: number): string;
|
|
22
|
+
/**
|
|
23
|
+
* Calcula luminancia relativa (WCAG 2.1)
|
|
24
|
+
* Retorna valor entre 0 (preto) e 1 (branco)
|
|
25
|
+
*/
|
|
26
|
+
export declare function getLuminance(hex: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Detecta se uma cor e clara (luminancia > 0.5)
|
|
8
29
|
*/
|
|
9
30
|
export declare function isLightColor(hex: string): boolean;
|
|
10
31
|
/**
|
|
11
|
-
* Detecta se uma cor
|
|
12
|
-
* Retorna true se a cor for escura (luminância <= 0.5)
|
|
32
|
+
* Detecta se uma cor e escura (luminancia <= 0.5)
|
|
13
33
|
*/
|
|
14
34
|
export declare function isDarkColor(hex: string): boolean;
|
|
15
35
|
/**
|
|
16
|
-
*
|
|
36
|
+
* Calcula contrast ratio entre duas cores (WCAG 2.1)
|
|
37
|
+
* Retorna valor entre 1 (sem contraste) e 21 (maximo)
|
|
38
|
+
*/
|
|
39
|
+
export declare function contrastRatio(fg: string, bg: string): number;
|
|
40
|
+
/**
|
|
41
|
+
* Escurece uma cor por amount (0-100, reduz lightness)
|
|
42
|
+
*/
|
|
43
|
+
export declare function darken(hex: string, amount: number): string;
|
|
44
|
+
/**
|
|
45
|
+
* Clareia uma cor por amount (0-100, aumenta lightness)
|
|
46
|
+
*/
|
|
47
|
+
export declare function lighten(hex: string, amount: number): string;
|
|
48
|
+
/**
|
|
49
|
+
* Ajusta foreground (clareia ou escurece) ate atingir minRatio de contraste com bg
|
|
50
|
+
* Default minRatio = 4.5 (WCAG AA para texto normal)
|
|
17
51
|
*/
|
|
18
|
-
export declare function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
52
|
+
export declare function ensureContrast(fg: string, bg: string, minRatio?: number): string;
|
|
53
|
+
export interface DerivedPaletteColors {
|
|
54
|
+
/** Theme color tokens (patch em /theme/colors/*) */
|
|
55
|
+
themeColors: {
|
|
56
|
+
primary: string;
|
|
57
|
+
secondary: string;
|
|
58
|
+
accent: string;
|
|
59
|
+
bg: string;
|
|
60
|
+
surface: string;
|
|
61
|
+
text: string;
|
|
62
|
+
primaryHover: string;
|
|
63
|
+
primaryText: string;
|
|
64
|
+
secondaryHover: string;
|
|
65
|
+
mutedText: string;
|
|
66
|
+
border: string;
|
|
67
|
+
linkColor: string;
|
|
68
|
+
menuLinkColor: string;
|
|
69
|
+
ring: string;
|
|
70
|
+
};
|
|
71
|
+
/** Hero gradient colors */
|
|
72
|
+
heroGradientStart: string;
|
|
73
|
+
heroGradientEnd: string;
|
|
74
|
+
heroTitleColor: string;
|
|
75
|
+
heroSubtitleColor: string;
|
|
76
|
+
heroDescColor: string;
|
|
77
|
+
/** Navbar */
|
|
78
|
+
navbarBg: string;
|
|
79
|
+
/** Footer */
|
|
80
|
+
footerLinkHover: string;
|
|
81
|
+
}
|
|
25
82
|
/**
|
|
26
|
-
*
|
|
83
|
+
* Deriva todas as cores da paleta a partir dos seeds
|
|
27
84
|
*/
|
|
28
|
-
export declare function
|
|
85
|
+
export declare function derivePaletteColors(palette: ColorPalette): DerivedPaletteColors;
|
|
29
86
|
//# sourceMappingURL=colorUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colorUtils.d.ts","sourceRoot":"","sources":["../../src/utils/colorUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"colorUtils.d.ts","sourceRoot":"","sources":["../../src/utils/colorUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAM9D;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAShF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAuBzE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBhE;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAShD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAM5D;AAMD;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM,CA2BrF;AAMD,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAEF,2BAA2B;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa;IACb,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,oBAAoB,CAmD/E"}
|
package/dist/utils/colorUtils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function
|
|
1
|
+
function C(r) {
|
|
2
2
|
const n = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);
|
|
3
3
|
return n ? {
|
|
4
4
|
r: parseInt(n[1], 16),
|
|
@@ -6,16 +6,102 @@ function s(r) {
|
|
|
6
6
|
b: parseInt(n[3], 16)
|
|
7
7
|
} : null;
|
|
8
8
|
}
|
|
9
|
-
function
|
|
10
|
-
const n =
|
|
11
|
-
if (!n) return
|
|
12
|
-
const
|
|
13
|
-
|
|
9
|
+
function y(r) {
|
|
10
|
+
const n = C(r);
|
|
11
|
+
if (!n) return { h: 0, s: 0, l: 50 };
|
|
12
|
+
const o = n.r / 255, c = n.g / 255, i = n.b / 255, t = Math.max(o, c, i), f = Math.min(o, c, i), u = (t + f) / 2;
|
|
13
|
+
if (t === f) return { h: 0, s: 0, l: u * 100 };
|
|
14
|
+
const s = t - f, a = u > 0.5 ? s / (2 - t - f) : s / (t + f);
|
|
15
|
+
let e = 0;
|
|
16
|
+
return t === o ? e = ((c - i) / s + (c < i ? 6 : 0)) / 6 : t === c ? e = ((i - o) / s + 2) / 6 : e = ((o - c) / s + 4) / 6, { h: e * 360, s: a * 100, l: u * 100 };
|
|
14
17
|
}
|
|
15
|
-
function
|
|
16
|
-
|
|
18
|
+
function k(r, n, o) {
|
|
19
|
+
const c = n / 100, i = o / 100, t = (1 - Math.abs(2 * i - 1)) * c, f = t * (1 - Math.abs(r / 60 % 2 - 1)), u = i - t / 2;
|
|
20
|
+
let s = 0, a = 0, e = 0;
|
|
21
|
+
r < 60 ? (s = t, a = f, e = 0) : r < 120 ? (s = f, a = t, e = 0) : r < 180 ? (s = 0, a = t, e = f) : r < 240 ? (s = 0, a = f, e = t) : r < 300 ? (s = f, a = 0, e = t) : (s = t, a = 0, e = f);
|
|
22
|
+
const h = (M) => {
|
|
23
|
+
const g = Math.round((M + u) * 255).toString(16);
|
|
24
|
+
return g.length === 1 ? "0" + g : g;
|
|
25
|
+
};
|
|
26
|
+
return `#${h(s)}${h(a)}${h(e)}`;
|
|
27
|
+
}
|
|
28
|
+
function l(r) {
|
|
29
|
+
const n = C(r);
|
|
30
|
+
if (!n) return 0.5;
|
|
31
|
+
const [o, c, i] = [n.r / 255, n.g / 255, n.b / 255].map((t) => t <= 0.03928 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4));
|
|
32
|
+
return 0.2126 * o + 0.7152 * c + 0.0722 * i;
|
|
33
|
+
}
|
|
34
|
+
function L(r) {
|
|
35
|
+
return l(r) > 0.5;
|
|
36
|
+
}
|
|
37
|
+
function x(r, n) {
|
|
38
|
+
const o = l(r), c = l(n), i = Math.max(o, c), t = Math.min(o, c);
|
|
39
|
+
return (i + 0.05) / (t + 0.05);
|
|
40
|
+
}
|
|
41
|
+
function d(r, n) {
|
|
42
|
+
const o = y(r);
|
|
43
|
+
return k(o.h, o.s, Math.max(0, o.l - n));
|
|
44
|
+
}
|
|
45
|
+
function m(r, n) {
|
|
46
|
+
const o = y(r);
|
|
47
|
+
return k(o.h, o.s, Math.min(100, o.l + n));
|
|
48
|
+
}
|
|
49
|
+
function b(r, n, o = 4.5) {
|
|
50
|
+
if (x(r, n) >= o) return r;
|
|
51
|
+
const c = l(n), i = y(r), t = c < 0.5 ? 1 : -1;
|
|
52
|
+
let f = r, u = x(r, n);
|
|
53
|
+
for (let s = 5; s <= 100; s += 5) {
|
|
54
|
+
const a = Math.max(0, Math.min(100, i.l + t * s)), e = k(i.h, i.s, a), h = x(e, n);
|
|
55
|
+
if (h > u && (f = e, u = h), h >= o) return e;
|
|
56
|
+
}
|
|
57
|
+
return u < o ? c < 0.5 ? "#ffffff" : "#000000" : f;
|
|
58
|
+
}
|
|
59
|
+
function H(r) {
|
|
60
|
+
const n = L(r.background), o = b("#ffffff", r.primary), c = n ? "#6b7280" : "#9ca3af", i = n ? d(r.background, 12) : m(r.background, 15), t = r.menuLinkColor || r.primary, f = r.linkColor || r.primary, u = r.heroGradientStart || d(r.primary, 35), s = r.heroGradientEnd || d(r.secondary, 25), a = b("#ffffff", u, 7), e = b(
|
|
61
|
+
m(a, 10),
|
|
62
|
+
u,
|
|
63
|
+
4.5
|
|
64
|
+
), h = b(
|
|
65
|
+
m(a, 20),
|
|
66
|
+
u,
|
|
67
|
+
4.5
|
|
68
|
+
);
|
|
69
|
+
return {
|
|
70
|
+
themeColors: {
|
|
71
|
+
primary: r.primary,
|
|
72
|
+
secondary: r.secondary,
|
|
73
|
+
accent: r.accent,
|
|
74
|
+
bg: r.background,
|
|
75
|
+
surface: r.surface || (n ? "#f8fafc" : m(r.background, 5)),
|
|
76
|
+
text: r.text,
|
|
77
|
+
primaryHover: d(r.primary, 10),
|
|
78
|
+
primaryText: o,
|
|
79
|
+
secondaryHover: d(r.secondary, 10),
|
|
80
|
+
mutedText: c,
|
|
81
|
+
border: i,
|
|
82
|
+
linkColor: f,
|
|
83
|
+
menuLinkColor: t,
|
|
84
|
+
ring: r.primary
|
|
85
|
+
},
|
|
86
|
+
heroGradientStart: u,
|
|
87
|
+
heroGradientEnd: s,
|
|
88
|
+
heroTitleColor: a,
|
|
89
|
+
heroSubtitleColor: e,
|
|
90
|
+
heroDescColor: h,
|
|
91
|
+
navbarBg: r.background,
|
|
92
|
+
footerLinkHover: m(r.primary, 20)
|
|
93
|
+
};
|
|
17
94
|
}
|
|
18
95
|
export {
|
|
19
|
-
|
|
96
|
+
x as contrastRatio,
|
|
97
|
+
d as darken,
|
|
98
|
+
H as derivePaletteColors,
|
|
99
|
+
b as ensureContrast,
|
|
100
|
+
l as getLuminance,
|
|
101
|
+
y as hexToHSL,
|
|
102
|
+
C as hexToRgb,
|
|
103
|
+
k as hslToHex,
|
|
104
|
+
L as isLightColor,
|
|
105
|
+
m as lighten
|
|
20
106
|
};
|
|
21
107
|
//# sourceMappingURL=colorUtils.js.map
|