@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":"colorUtils.js","sources":["../../src/utils/colorUtils.ts"],"sourcesContent":["/**\n * Color Utilities\n * Utilitários para manipulação de cores\n */\n\n/**\n * Converte hex para RGB\n */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null\n}\n\n/**\n * Calcula o brilho relativo de uma cor (0-255)\n * Usa a fórmula de luminância relativa\n */\nfunction getLuminance(hex: string): number {\n const rgb = hexToRgb(hex)\n if (!rgb) return 128 // Default para cinza médio\n\n // Normalizar valores RGB para 0-1\n const [r, g, b] = [rgb.r / 255, rgb.g / 255, rgb.b / 255]\n\n // Aplicar gamma correction\n const [rLinear, gLinear, bLinear] = [r, g, b].map((val) => {\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4)\n })\n\n // Calcular luminância relativa\n return 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear\n}\n\n/**\n * Detecta se uma cor é clara ou escura\n * Retorna true se a cor for clara (luminância > 0.5)\n */\nexport function isLightColor(hex: string): boolean {\n return getLuminance(hex) > 0.5\n}\n\n/**\n * Detecta se uma cor é escura\n * Retorna true se a cor for escura (luminância <= 0.5)\n */\nexport function isDarkColor(hex: string): boolean {\n return !isLightColor(hex)\n}\n\n/**\n * Aplica cores customizadas à landing page usando CSS variables\n */\nexport function applyLandingPageColors(colors: {\n primary?: string\n secondary?: string\n background?: string\n text?: string\n accent?: string\n}): void {\n const root = document.documentElement\n\n if (colors.primary) {\n root.style.setProperty('--lp-primary-color', colors.primary)\n }\n if (colors.secondary) {\n root.style.setProperty('--lp-secondary-color', colors.secondary)\n }\n if (colors.background) {\n root.style.setProperty('--lp-background-color', colors.background)\n }\n if (colors.text) {\n root.style.setProperty('--lp-text-color', colors.text)\n }\n if (colors.accent) {\n root.style.setProperty('--lp-accent-color', colors.accent)\n }\n}\n\n/**\n * Remove cores customizadas\n */\nexport function removeLandingPageColors(): void {\n const root = document.documentElement\n root.style.removeProperty('--lp-primary-color')\n root.style.removeProperty('--lp-secondary-color')\n root.style.removeProperty('--lp-background-color')\n root.style.removeProperty('--lp-text-color')\n root.style.removeProperty('--lp-accent-color')\n}\n"],"names":["hexToRgb","hex","result","getLuminance","rgb","r","g","b","rLinear","gLinear","bLinear","val","isLightColor"],"mappings":"AAQA,SAASA,EAASC,GAAyD;AACzE,QAAMC,IAAS,4CAA4C,KAAKD,CAAG;AACnE,SAAOC,IACH;AAAA,IACE,GAAG,SAASA,EAAO,CAAC,GAAG,EAAE;AAAA,IACzB,GAAG,SAASA,EAAO,CAAC,GAAG,EAAE;AAAA,IACzB,GAAG,SAASA,EAAO,CAAC,GAAG,EAAE;AAAA,EAAA,IAE3B;AACN;AAMA,SAASC,EAAaF,GAAqB;AACzC,QAAMG,IAAMJ,EAASC,CAAG;AACxB,MAAI,CAACG,EAAK,QAAO;AAGjB,QAAM,CAACC,GAAGC,GAAGC,CAAC,IAAI,CAACH,EAAI,IAAI,KAAKA,EAAI,IAAI,KAAKA,EAAI,IAAI,GAAG,GAGlD,CAACI,GAASC,GAASC,CAAO,IAAI,CAACL,GAAGC,GAAGC,CAAC,EAAE,IAAI,CAACI,MAC1CA,KAAO,UAAUA,IAAM,QAAQ,KAAK,KAAKA,IAAM,SAAS,OAAO,GAAG,CAC1E;AAGD,SAAO,SAASH,IAAU,SAASC,IAAU,SAASC;AACxD;AAMO,SAASE,EAAaX,GAAsB;AACjD,SAAOE,EAAaF,CAAG,IAAI;AAC7B;"}
|
|
1
|
+
{"version":3,"file":"colorUtils.js","sources":["../../src/utils/colorUtils.ts"],"sourcesContent":["/**\n * Color Utilities\n * Utilitarios para manipulacao de cores, contraste WCAG e derivacao de paleta\n */\n\nimport type { ColorPalette } from \"../editor/PaletteSelector\";\n\n// ============================================================================\n// Core Conversions\n// ============================================================================\n\n/**\n * Converte hex para RGB\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null\n}\n\n/**\n * Converte hex para HSL\n */\nexport function hexToHSL(hex: string): { h: number; s: number; l: number } {\n const rgb = hexToRgb(hex)\n if (!rgb) return { h: 0, s: 0, l: 50 }\n\n const r = rgb.r / 255\n const g = rgb.g / 255\n const b = rgb.b / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n\n if (max === min) return { h: 0, s: 0, l: l * 100 }\n\n const d = max - min\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n\n let h = 0\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6\n else if (max === g) h = ((b - r) / d + 2) / 6\n else h = ((r - g) / d + 4) / 6\n\n return { h: h * 360, s: s * 100, l: l * 100 }\n}\n\n/**\n * Converte HSL para hex\n */\nexport function hslToHex(h: number, s: number, l: number): string {\n const sNorm = s / 100\n const lNorm = l / 100\n\n const c = (1 - Math.abs(2 * lNorm - 1)) * sNorm\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = lNorm - c / 2\n\n let r = 0, g = 0, b = 0\n if (h < 60) { r = c; g = x; b = 0 }\n else if (h < 120) { r = x; g = c; b = 0 }\n else if (h < 180) { r = 0; g = c; b = x }\n else if (h < 240) { r = 0; g = x; b = c }\n else if (h < 300) { r = x; g = 0; b = c }\n else { r = c; g = 0; b = x }\n\n const toHex = (v: number) => {\n const hex = Math.round((v + m) * 255).toString(16)\n return hex.length === 1 ? \"0\" + hex : hex\n }\n\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`\n}\n\n// ============================================================================\n// Luminance & Contrast (WCAG 2.1)\n// ============================================================================\n\n/**\n * Calcula luminancia relativa (WCAG 2.1)\n * Retorna valor entre 0 (preto) e 1 (branco)\n */\nexport function getLuminance(hex: string): number {\n const rgb = hexToRgb(hex)\n if (!rgb) return 0.5\n\n const [r, g, b] = [rgb.r / 255, rgb.g / 255, rgb.b / 255].map((val) => {\n return val <= 0.03928 ? val / 12.92 : Math.pow((val + 0.055) / 1.055, 2.4)\n })\n\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\n/**\n * Detecta se uma cor e clara (luminancia > 0.5)\n */\nexport function isLightColor(hex: string): boolean {\n return getLuminance(hex) > 0.5\n}\n\n/**\n * Detecta se uma cor e escura (luminancia <= 0.5)\n */\nexport function isDarkColor(hex: string): boolean {\n return !isLightColor(hex)\n}\n\n/**\n * Calcula contrast ratio entre duas cores (WCAG 2.1)\n * Retorna valor entre 1 (sem contraste) e 21 (maximo)\n */\nexport function contrastRatio(fg: string, bg: string): number {\n const l1 = getLuminance(fg)\n const l2 = getLuminance(bg)\n const lighter = Math.max(l1, l2)\n const darker = Math.min(l1, l2)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\n// ============================================================================\n// Color Manipulation\n// ============================================================================\n\n/**\n * Escurece uma cor por amount (0-100, reduz lightness)\n */\nexport function darken(hex: string, amount: number): string {\n const hsl = hexToHSL(hex)\n return hslToHex(hsl.h, hsl.s, Math.max(0, hsl.l - amount))\n}\n\n/**\n * Clareia uma cor por amount (0-100, aumenta lightness)\n */\nexport function lighten(hex: string, amount: number): string {\n const hsl = hexToHSL(hex)\n return hslToHex(hsl.h, hsl.s, Math.min(100, hsl.l + amount))\n}\n\n/**\n * Ajusta foreground (clareia ou escurece) ate atingir minRatio de contraste com bg\n * Default minRatio = 4.5 (WCAG AA para texto normal)\n */\nexport function ensureContrast(fg: string, bg: string, minRatio: number = 4.5): string {\n if (contrastRatio(fg, bg) >= minRatio) return fg\n\n const bgLum = getLuminance(bg)\n const hsl = hexToHSL(fg)\n\n // Tentar clarear se bg e escuro, escurecer se bg e claro\n const direction = bgLum < 0.5 ? 1 : -1\n let bestColor = fg\n let bestRatio = contrastRatio(fg, bg)\n\n for (let step = 5; step <= 100; step += 5) {\n const newL = Math.max(0, Math.min(100, hsl.l + direction * step))\n const candidate = hslToHex(hsl.h, hsl.s, newL)\n const ratio = contrastRatio(candidate, bg)\n if (ratio > bestRatio) {\n bestColor = candidate\n bestRatio = ratio\n }\n if (ratio >= minRatio) return candidate\n }\n\n // Fallback: branco ou preto (maximo contraste)\n if (bestRatio < minRatio) {\n return bgLum < 0.5 ? \"#ffffff\" : \"#000000\"\n }\n return bestColor\n}\n\n// ============================================================================\n// Palette Derivation\n// ============================================================================\n\nexport interface DerivedPaletteColors {\n /** Theme color tokens (patch em /theme/colors/*) */\n themeColors: {\n primary: string;\n secondary: string;\n accent: string;\n bg: string;\n surface: string;\n text: string;\n primaryHover: string;\n primaryText: string;\n secondaryHover: string;\n mutedText: string;\n border: string;\n linkColor: string;\n menuLinkColor: string;\n ring: string;\n };\n\n /** Hero gradient colors */\n heroGradientStart: string;\n heroGradientEnd: string;\n heroTitleColor: string;\n heroSubtitleColor: string;\n heroDescColor: string;\n\n /** Navbar */\n navbarBg: string;\n\n /** Footer */\n footerLinkHover: string;\n}\n\n/**\n * Deriva todas as cores da paleta a partir dos seeds\n */\nexport function derivePaletteColors(palette: ColorPalette): DerivedPaletteColors {\n const bgLight = isLightColor(palette.background)\n const primaryText = ensureContrast(\"#ffffff\", palette.primary)\n\n const mutedText = bgLight ? \"#6b7280\" : \"#9ca3af\"\n const border = bgLight ? darken(palette.background, 12) : lighten(palette.background, 15)\n const menuLinkColor = palette.menuLinkColor || palette.primary\n const linkColor = palette.linkColor || palette.primary\n\n // Hero gradients: usar paleta se definido, senao derivar do primary/secondary\n const heroGradientStart = palette.heroGradientStart || darken(palette.primary, 35)\n const heroGradientEnd = palette.heroGradientEnd || darken(palette.secondary, 25)\n\n // Hero text colors: garantir contraste sobre o gradiente start (area mais escura)\n const heroTitleColor = ensureContrast(\"#ffffff\", heroGradientStart, 7)\n const heroSubtitleColor = ensureContrast(\n lighten(heroTitleColor, 10),\n heroGradientStart,\n 4.5\n )\n const heroDescColor = ensureContrast(\n lighten(heroTitleColor, 20),\n heroGradientStart,\n 4.5\n )\n\n return {\n themeColors: {\n primary: palette.primary,\n secondary: palette.secondary,\n accent: palette.accent,\n bg: palette.background,\n surface: palette.surface || (bgLight ? \"#f8fafc\" : lighten(palette.background, 5)),\n text: palette.text,\n primaryHover: darken(palette.primary, 10),\n primaryText,\n secondaryHover: darken(palette.secondary, 10),\n mutedText,\n border,\n linkColor,\n menuLinkColor,\n ring: palette.primary,\n },\n heroGradientStart,\n heroGradientEnd,\n heroTitleColor,\n heroSubtitleColor,\n heroDescColor,\n navbarBg: palette.background,\n footerLinkHover: lighten(palette.primary, 20),\n }\n}\n"],"names":["hexToRgb","hex","result","hexToHSL","rgb","r","g","b","max","min","l","d","s","h","hslToHex","sNorm","lNorm","c","x","m","toHex","v","getLuminance","val","isLightColor","contrastRatio","fg","bg","l1","l2","lighter","darker","darken","amount","hsl","lighten","ensureContrast","minRatio","bgLum","direction","bestColor","bestRatio","step","newL","candidate","ratio","derivePaletteColors","palette","bgLight","primaryText","mutedText","border","menuLinkColor","linkColor","heroGradientStart","heroGradientEnd","heroTitleColor","heroSubtitleColor","heroDescColor"],"mappings":"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"}
|