UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

1 lines 21.4 kB
{"version":3,"sources":["../src/components/RichEditor/components/utils.ts","../src/components/RichEditor/components/FormulaDialog.tsx"],"sourcesContent":["// Re-exported so RichEditor consumers keep a single import surface.\nexport { normalizeLineBreaksInHtml } from '../../../utils/htmlLineBreaks';\n\n/**\n * Processa HTML convertendo padrões $...$ para spans de math-inline\n * que o TipTap pode reconhecer\n */\nexport function processLatexInHtml(html: string): string {\n if (!html) return html;\n\n // Regex para encontrar $...$ (não-greedy, permite múltiplas linhas)\n // Captura conteúdo entre $ que não seja vazio\n const latexPattern = /\\$([^$]+?)\\$/g;\n\n return html.replaceAll(latexPattern, (_match: string, latex: string) => {\n // Escapa aspas duplas no atributo\n const escapedLatex = latex.replaceAll('\"', '&quot;');\n return `<span data-type=\"math-inline\" data-latex=\"${escapedLatex}\"></span>`;\n });\n}\n\n/**\n * Converte spans math-inline de volta para formato $...$\n * Útil para exportar o conteúdo em formato mais simples\n */\nexport function unprocessLatexInHtml(html: string): string {\n if (!html) return html;\n\n const mathSpanPattern =\n /<span[^>]*data-type=\"math-inline\"[^>]*data-latex=\"([^\"]*)\"[^>]*><\\/span>/g;\n\n return html.replaceAll(mathSpanPattern, (_match: string, latex: string) => {\n // Desescapa aspas\n const unescapedLatex = latex.replaceAll('&quot;', '\"');\n return `$${unescapedLatex}$`;\n });\n}\n","import { useState, useEffect, ChangeEvent } from 'react';\nimport Button from '../../Button/Button';\nimport Input from '../../Input/Input';\nimport Menu, { MenuContent, MenuItem } from '../../Menu/Menu';\nimport Modal from '../../Modal/Modal';\nimport Text from '../../Text/Text';\nimport TextArea from '../../TextArea/TextArea';\nimport { SparkleIcon } from '@phosphor-icons/react/dist/csr/Sparkle';\nimport { useMobile } from '../../../hooks/useMobile';\nimport katex from 'katex';\nimport 'katex/dist/katex.min.css';\n\ninterface FormulaDialogProps {\n readonly open: boolean;\n readonly onClose: () => void;\n readonly onInsert: (latex: string) => void;\n /**\n * Optional callback to generate LaTeX using AI\n * If provided, the AI generation feature will be enabled\n * @param description - Natural language description of the formula\n * @returns Promise resolving to the LaTeX string\n */\n readonly onGenerateWithAI?: (description: string) => Promise<string>;\n}\n\ntype FormulaCategory = 'matematica' | 'fisica' | 'quimica' | 'simbolos';\n\ninterface FormulaItem {\n label: string;\n latex: string;\n preview: string;\n}\n\nconst formulas: Record<FormulaCategory, FormulaItem[]> = {\n matematica: [\n {\n label: 'Teorema de Pitágoras',\n latex: 'a^2 + b^2 = c^2',\n preview: 'a² + b² = c²',\n },\n {\n label: 'Equação de 2º grau',\n latex: String.raw`x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}`,\n preview: 'x = (-b ± √(b² - 4ac)) / 2a',\n },\n {\n label: 'Área do círculo',\n latex: String.raw`A = \\pi r^2`,\n preview: 'A = πr²',\n },\n {\n label: 'Área do triângulo',\n latex: String.raw`A = \\frac{b \\cdot h}{2}`,\n preview: 'A = (b · h) / 2',\n },\n {\n label: 'Volume do cilindro',\n latex: String.raw`V = \\pi r^2 h`,\n preview: 'V = πr²h',\n },\n {\n label: 'Volume da esfera',\n latex: String.raw`V = \\frac{4}{3} \\pi r^3`,\n preview: 'V = (4/3)πr³',\n },\n ],\n fisica: [\n {\n label: 'Velocidade média',\n latex: String.raw`v = \\frac{\\Delta s}{\\Delta t}`,\n preview: 'v = Δs / Δt',\n },\n {\n label: 'Aceleração',\n latex: String.raw`a = \\frac{\\Delta v}{\\Delta t}`,\n preview: 'a = Δv / Δt',\n },\n {\n label: 'Força (2ª Lei de Newton)',\n latex: String.raw`F = m \\cdot a`,\n preview: 'F = m · a',\n },\n {\n label: 'Energia cinética',\n latex: String.raw`E_c = \\frac{1}{2} m v^2`,\n preview: 'Ec = ½mv²',\n },\n {\n label: 'Energia potencial',\n latex: String.raw`E_p = m \\cdot g \\cdot h`,\n preview: 'Ep = m · g · h',\n },\n {\n label: 'Lei da Gravitação',\n latex: String.raw`F = G \\frac{m_1 m_2}{r^2}`,\n preview: 'F = G(m₁m₂)/r²',\n },\n ],\n quimica: [\n {\n label: 'Concentração molar',\n latex: String.raw`C = \\frac{n}{V}`,\n preview: 'C = n / V',\n },\n {\n label: 'Densidade',\n latex: String.raw`\\rho = \\frac{m}{V}`,\n preview: 'ρ = m / V',\n },\n {\n label: 'pH',\n latex: String.raw`pH = -\\log[H^+]`,\n preview: 'pH = -log[H⁺]',\n },\n { label: 'Lei dos gases ideais', latex: 'PV = nRT', preview: 'PV = nRT' },\n {\n label: 'Equação de Arrhenius',\n latex: String.raw`k = A e^{-\\frac{E_a}{RT}}`,\n preview: 'k = Ae^(-Ea/RT)',\n },\n {\n label: 'Número de mols',\n latex: String.raw`n = \\frac{m}{M}`,\n preview: 'n = m / M',\n },\n ],\n simbolos: [\n { label: 'Alfa', latex: String.raw`\\alpha`, preview: 'α' },\n { label: 'Beta', latex: String.raw`\\beta`, preview: 'β' },\n { label: 'Gama', latex: String.raw`\\gamma`, preview: 'γ' },\n { label: 'Delta', latex: String.raw`\\Delta`, preview: 'Δ' },\n { label: 'Pi', latex: String.raw`\\pi`, preview: 'π' },\n { label: 'Sigma', latex: String.raw`\\sigma`, preview: 'σ' },\n { label: 'Omega', latex: String.raw`\\omega`, preview: 'ω' },\n { label: 'Infinito', latex: String.raw`\\infty`, preview: '∞' },\n { label: 'Somatório', latex: String.raw`\\sum`, preview: 'Σ' },\n { label: 'Integral', latex: String.raw`\\int`, preview: '∫' },\n { label: 'Raiz quadrada', latex: String.raw`\\sqrt{}`, preview: '√' },\n { label: 'Fração', latex: String.raw`\\frac{}{}`, preview: 'a/b' },\n ],\n};\n\nconst categoryLabels: Record<FormulaCategory, string> = {\n matematica: 'Matemática',\n fisica: 'Física',\n quimica: 'Química',\n simbolos: 'Símbolos',\n};\n\nexport function FormulaDialog({\n open,\n onClose,\n onInsert,\n onGenerateWithAI,\n}: FormulaDialogProps) {\n const { isTablet } = useMobile();\n const [category, setCategory] = useState<FormulaCategory>('matematica');\n const [latex, setLatex] = useState('');\n const [preview, setPreview] = useState('');\n const [error, setError] = useState('');\n const [aiDescription, setAiDescription] = useState('');\n const [isGeneratingAI, setIsGeneratingAI] = useState(false);\n const [aiError, setAiError] = useState('');\n\n useEffect(() => {\n if (!latex.trim()) {\n setPreview('');\n setError('');\n return;\n }\n try {\n const rendered = katex.renderToString(latex, {\n throwOnError: true,\n displayMode: false,\n });\n setPreview(rendered);\n setError('');\n } catch {\n setError('Fórmula inválida');\n setPreview('');\n }\n }, [latex]);\n\n const handleInsert = () => {\n if (!latex.trim() || error) return;\n onInsert(latex);\n resetState();\n };\n\n const handleClose = () => {\n resetState();\n onClose();\n };\n\n const resetState = () => {\n setLatex('');\n setError('');\n setPreview('');\n setAiDescription('');\n setAiError('');\n setCategory('matematica');\n };\n\n const handleGenerateWithAI = async () => {\n if (!onGenerateWithAI || !aiDescription.trim()) return;\n\n setIsGeneratingAI(true);\n setAiError('');\n\n try {\n const generatedLatex = await onGenerateWithAI(aiDescription.trim());\n setLatex(generatedLatex);\n } catch (err) {\n setAiError(\n err instanceof Error ? err.message : 'Erro ao gerar fórmula com IA'\n );\n } finally {\n setIsGeneratingAI(false);\n }\n };\n\n const selectFormula = (formula: FormulaItem) => {\n setLatex(formula.latex);\n };\n\n const renderPreview = () => {\n if (error) {\n return <p className=\"text-sm text-error-600\">{error}</p>;\n }\n if (preview) {\n return (\n <span\n dangerouslySetInnerHTML={{ __html: preview }}\n className=\"text-lg\"\n />\n );\n }\n return (\n <p className=\"text-sm text-text-300 text-center\">\n Selecione uma fórmula ou símbolo, insira o código LaTeX, ou crie sua\n fórmula com a IA e ela aparecerá aqui.\n </p>\n );\n };\n\n return (\n <Modal\n isOpen={open}\n onClose={handleClose}\n title=\"Inserir fórmula\"\n size=\"xl\"\n className={isTablet ? 'max-w-[90vw] max-h-[90vh] overflow-y-auto' : ''}\n footer={\n <>\n <Button\n variant=\"outline\"\n size={isTablet ? 'extra-small' : 'medium'}\n onClick={handleClose}\n >\n Cancelar\n </Button>\n <Button\n variant=\"solid\"\n action=\"primary\"\n size={isTablet ? 'extra-small' : 'medium'}\n onClick={handleInsert}\n disabled={!latex.trim() || !!error}\n >\n Inserir fórmula\n </Button>\n </>\n }\n >\n <div className={isTablet ? 'flex flex-col gap-6' : 'flex gap-6'}>\n {/* Left side - Predefined formulas */}\n <div className=\"flex-1\">\n <Text size=\"sm\" weight=\"bold\" className=\"text-text-900 mb-4\">\n Fórmulas e símbolos mais usados\n </Text>\n\n {/* Category menu */}\n <Menu\n defaultValue=\"matematica\"\n value={category}\n onValueChange={(value: string) =>\n setCategory(value as FormulaCategory)\n }\n variant=\"menu2\"\n className=\"mb-4\"\n >\n <MenuContent variant=\"menu2\">\n {Object.entries(categoryLabels).map(([key, label]) => (\n <MenuItem key={key} value={key} variant=\"menu2\">\n {label}\n </MenuItem>\n ))}\n </MenuContent>\n </Menu>\n\n {/* Formula cards grid */}\n <div\n className={`grid ${isTablet ? 'grid-cols-1' : 'grid-cols-2 max-h-[300px] overflow-y-auto pr-2'} gap-3`}\n >\n {formulas[category].map((formula) => (\n <Button\n key={formula.label}\n type=\"button\"\n onClick={() => selectFormula(formula)}\n className={`bg-transparent flex flex-col items-start p-3 text-left border rounded-lg hover:border-primary-400 hover:bg-primary-50 transition-colors ${\n latex === formula.latex\n ? 'border-primary-500'\n : 'border-border-200'\n }`}\n >\n <Text weight=\"medium\" className=\"text-sm text-text-900 mb-1\">\n {formula.label}\n </Text>\n <Text size=\"xs\" className=\"text-text-500 font-mono\">\n {formula.preview}\n </Text>\n </Button>\n ))}\n </div>\n </div>\n\n {/* Right side - Create formula */}\n <div className=\"flex-1\">\n <Text size=\"sm\" weight=\"bold\" className=\"text-text-900 mb-4\">\n Crie sua fórmula\n </Text>\n\n {/* Preview */}\n <div className=\"mb-4\">\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2\">\n Fórmula gerada\n </Text>\n <div className=\"min-h-[80px] border border-border-200 rounded-lg px-4 py-3 bg-background-50 flex items-center justify-center\">\n {renderPreview()}\n </div>\n </div>\n\n {/* LaTeX input */}\n <div className=\"mb-4\">\n <Text weight=\"medium\" className=\"text-xs text-text-600 mb-2 block\">\n Digite o código LaTeX\n </Text>\n <Input\n type=\"text\"\n value={latex}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setLatex(e.target.value)\n }\n placeholder={String.raw`Ex: \\sqrt{x^2 + y^2} ou \\frac{a}{b}`}\n />\n <Text className=\"text-xs text-text-400 mt-1\">\n Use sintaxe LaTeX:{' '}\n {String.raw`\\sqrt{}, \\frac{}{}, ^{}, _{}, \\pi, \\alpha`}, etc.\n </Text>\n </div>\n\n {/* Divider */}\n <div className=\"flex items-center gap-3 my-4\">\n <div className=\"flex-1 h-px bg-border-200\" />\n <span className=\"text-xs text-text-400\">Ou</span>\n <div className=\"flex-1 h-px bg-border-200\" />\n </div>\n\n {/* AI description */}\n <div className=\"mb-4\">\n <div className=\"flex items-center gap-1 mb-2\">\n <SparkleIcon size={14} className=\"text-primary-600\" />\n <Text className=\"text-xs font-medium text-text-600\">\n Descreva o que deseja criar com IA\n </Text>\n </div>\n <TextArea\n value={aiDescription}\n onChange={(e: ChangeEvent<HTMLTextAreaElement>) =>\n setAiDescription(e.target.value)\n }\n placeholder=\"Ex: área do círculo, bhaskara, velocidade média...\"\n rows={2}\n disabled={isGeneratingAI}\n />\n <Text size=\"xs\" className=\"text-text-400 mt-1\">\n {onGenerateWithAI\n ? 'Descreva em linguagem natural e a IA gerará o LaTeX correspondente.'\n : 'Funcionalidade de IA não disponível.'}\n </Text>\n {aiError && (\n <Text size=\"xs\" className=\"text-error-600 mt-1\">\n {aiError}\n </Text>\n )}\n <Button\n variant=\"outline\"\n size=\"small\"\n disabled={\n !onGenerateWithAI || !aiDescription.trim() || isGeneratingAI\n }\n onClick={handleGenerateWithAI}\n className=\"mt-2 ml-auto flex items-center gap-1\"\n >\n <SparkleIcon size={14} />\n {isGeneratingAI ? 'Gerando...' : 'Gerar fórmula'}\n </Button>\n </div>\n </div>\n </div>\n </Modal>\n );\n}\n"],"mappings":"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","names":[]}