eatopia-ds 0.0.951 → 0.0.953

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index10.js","sources":["../src/components/OrderForm/index.tsx"],"sourcesContent":["import {\n AlertIcon,\n ArrowUpIcon,\n ChartIcon,\n DotIcon,\n ShoppingCartIcon,\n TruckIcon,\n} from \"../Icons\";\nimport React, { useState, useEffect, useMemo } from \"react\";\nimport { StockLeadTime, type TimelineData } from \"../StockLeadTime\";\n\nimport { UnitOption } from \"../UnitSelect\";\nimport {\n calculateConsumptionForecast,\n calculateTotalConsumptionForRange,\n type DailyConsumptionAverage,\n} from \"../../utils\";\n\nconst DAY_OPTIONS = [1, 2, 3, 7, 10, 15, 30, 60, 90] as const;\n\nconst toYYYYMMDD = (d: Date): string => {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n};\n\n/** Interpreta \"YYYY-MM-DD\" como data local (meia-noite). Evita o uso de UTC do new Date(\"YYYY-MM-DD\"). */\nconst parseDateLocal = (s: string): Date => {\n const parts = s.split(\"-\").map(Number);\n if (parts.length !== 3 || parts.some(Number.isNaN)) return new Date(NaN);\n return new Date(parts[0], parts[1] - 1, parts[2]);\n};\n\nconst getTomorrowYYYYMMDD = (): string => {\n const t = new Date();\n t.setDate(t.getDate() + 1);\n t.setHours(0, 0, 0, 0);\n return toYYYYMMDD(t);\n};\n\nconst getTomorrowDate = (): Date => {\n const t = new Date();\n t.setDate(t.getDate() + 1);\n t.setHours(0, 0, 0, 0);\n return t;\n};\n\nconst getClosestDays = (suggestion: number): number => {\n if (suggestion <= 0) return 7;\n return DAY_OPTIONS.reduce((a, b) =>\n Math.abs(b - suggestion) < Math.abs(a - suggestion) ? b : a,\n );\n};\n\nexport interface OrderFormData {\n nome: string; // Ex: \"Arroz Negro\"\n codigoSap: string; // Ex: \"SAP-I000251\"\n categoria: string; // Ex: \"Seco\"\n estoque_atual: number; // Quantidade em estoque\n dias_de_estoque: number; // Quantos dias o estoque dura\n consumo: {\n quantidadeDias: number; // Período de referência\n valor: number; // Consumo no período\n };\n sugestao_de_compra: number; // Quantidade sugerida\n qtdPedido: number; // Quantidade do pedido\n valorTotal: number; // Valor total do pedido (qtdPedido * valor unitário)\n ultima_compra: {\n data: string; // Data formatada (pt-BR)\n quantidade: number;\n /** Unidade da última compra (ex: \"kg\", \"un\", \"cx\"). Se não informada, usa unidade_medida. */\n unidade?: string;\n } | null;\n /** Unidade de medida do item (ex: \"kg\", \"un\", \"cx\"). Usada nos rótulos do modal. @default \"kg\" */\n unidade_medida?: string;\n fornecedores: [\n {\n previsao_de_entrega: string; // Data calculada baseada na grade\n nome: string; // Ex: \"Rio Acima\"\n marcas: {\n nome: string; // Ex: \"Greentable\"\n embalagens: {\n label: string; // Ex: \"PCT 1KG\"\n quantidade_fornecedor: number;\n valor_unitario: number; // Ex: \"R$ 27.00\"\n primario?: boolean; // Define se é a embalagem principal\n }[];\n }[];\n },\n ];\n}\n\nexport interface OrderFormProps {\n data: OrderFormData;\n onSubmit: (data: OrderFormData) => void;\n onCancel: () => void;\n timelineData?: TimelineData;\n fornecedoresOptions: UnitOption[];\n marcasOptions: UnitOption[];\n embalagensOptions: UnitOption[];\n /** Média de consumo por dia da semana para cálculo de previsão */\n dailyConsumptionAverages?: DailyConsumptionAverage;\n /** Exibe ou oculta a barra amarela (Sugestão de Compra) no StockLeadTime. @default true */\n showSuggestionBar?: boolean;\n /** Exibe ou oculta a legenda da timeline (StockLeadTime). @default false */\n showLegendTimeline?: boolean;\n /** Quando definido, usa este valor como quantidade de dias inicial no select \"Quantos dias?\" (em vez da sugestão da timeline). Usado pelo OrderModal com defaultQtdDays. */\n initialQtdDays?: number;\n}\n\n// ─── Primitivos de campo estilizado ──────────────────────────────────────────\n// O div wrapper controla altura e visual; o elemento nativo preenche o\n// container com posicionamento absoluto, eliminando variação entre browsers.\n\nconst FIELD_HEIGHT = 42;\n\nconst fieldWrapperStyle: React.CSSProperties = {\n position: \"relative\",\n height: `${FIELD_HEIGHT}px`,\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n backgroundColor: \"#f8fafc\",\n display: \"flex\",\n alignItems: \"center\",\n boxSizing: \"border-box\",\n};\n\nconst fieldInnerStyle: React.CSSProperties = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n background: \"transparent\",\n outline: \"none\",\n fontSize: \"14px\",\n fontWeight: \"500\",\n color: \"#0f172a\",\n fontFamily: \"Inter, sans-serif\",\n cursor: \"pointer\",\n boxSizing: \"border-box\",\n};\n\nconst StyledSelect: React.FC<React.SelectHTMLAttributes<HTMLSelectElement>> = ({\n children,\n ...props\n}) => (\n <div style={fieldWrapperStyle}>\n <select\n {...props}\n style={{\n ...fieldInnerStyle,\n padding: \"0 36px 0 14px\",\n appearance: \"none\",\n WebkitAppearance: \"none\",\n }}\n >\n {children}\n </select>\n <span\n aria-hidden\n style={{\n position: \"absolute\",\n right: \"12px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n pointerEvents: \"none\",\n color: \"#64748b\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </span>\n </div>\n);\n\nconst StyledDateInput: React.FC<\n React.InputHTMLAttributes<HTMLInputElement>\n> = (props) => (\n <div style={fieldWrapperStyle}>\n <input\n type=\"date\"\n {...props}\n style={{ ...fieldInnerStyle, padding: \"0 14px\" }}\n />\n </div>\n);\n\nexport function OrderForm({\n data,\n onSubmit,\n onCancel,\n timelineData,\n fornecedoresOptions,\n marcasOptions,\n embalagensOptions,\n dailyConsumptionAverages,\n showSuggestionBar = true,\n showLegendTimeline = false,\n initialQtdDays,\n}: OrderFormProps) {\n // Remove os spinners do input number\n React.useEffect(() => {\n const style = document.createElement(\"style\");\n style.textContent = `\n .order-form-quantity-input::-webkit-outer-spin-button,\n .order-form-quantity-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n .order-form-quantity-input {\n -moz-appearance: textfield;\n }\n `;\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }, []);\n\n // Detecta se é mobile (largura <= 768px)\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, []);\n\n // Calcula quantos dias a sugestão deve cobrir baseado no timelineData\n const getSuggestionDays = (): number => {\n if (!timelineData?.timeline) return 0;\n\n const { restockSuggestionStart, restockSuggestionEnd } =\n timelineData.timeline;\n if (!restockSuggestionStart || !restockSuggestionEnd) return 0;\n\n const startDate = new Date(restockSuggestionStart);\n const endDate = new Date(restockSuggestionEnd);\n const diffTime = endDate.getTime() - startDate.getTime();\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n return diffDays > 0 ? diffDays : 0;\n };\n\n const getInitialRangeStartDate = (): string => {\n const tomorrow = getTomorrowDate();\n const end = timelineData?.timeline?.stockEndDate;\n if (!end) return toYYYYMMDD(tomorrow);\n const endDate = parseDateLocal(end);\n if (isNaN(endDate.getTime())) return toYYYYMMDD(tomorrow);\n return endDate < tomorrow ? toYYYYMMDD(tomorrow) : toYYYYMMDD(endDate);\n };\n\n const getInitialRangeDays = (): number => getClosestDays(getSuggestionDays());\n\n // Quando initialQtdDays é passado (ex.: OrderModal com defaultQtdDays), usa esse valor; senão usa a sugestão da timeline como antes\n const getInitialRangeDaysResolved = (): number =>\n initialQtdDays != null && initialQtdDays > 0\n ? getClosestDays(initialQtdDays)\n : getInitialRangeDays();\n\n // Calcula a melhor combinação de embalagem e quantidade para cobrir os dias sugeridos\n const calculateOptimalSelection = (): {\n marca: string;\n embalagem: string;\n quantidade: number;\n valorUnitario: number;\n } | null => {\n const fornecedor = data?.fornecedores?.[0];\n if (!fornecedor) return null;\n\n const suggestionDays = getSuggestionDays();\n\n // Se não tem consumo médio ou dias de sugestão, retorna a primeira opção\n if (!dailyConsumptionAverages || suggestionDays <= 0) {\n const primeiraMarca = fornecedor.marcas?.[0];\n const primeiraEmbalagem = primeiraMarca?.embalagens?.[0];\n return primeiraMarca && primeiraEmbalagem\n ? {\n marca: primeiraMarca.nome,\n embalagem: primeiraEmbalagem.label,\n quantidade: data?.qtdPedido > 0 ? data.qtdPedido : 0,\n valorUnitario: primeiraEmbalagem.valor_unitario,\n }\n : null;\n }\n\n // Encontra a melhor combinação\n let bestOption: {\n marca: string;\n embalagem: string;\n quantidade: number;\n valorUnitario: number;\n totalKg: number;\n totalValue: number;\n days: number;\n daysDifference: number; // Diferença absoluta dos dias sugeridos\n } | null = null;\n\n for (const marca of fornecedor.marcas || []) {\n for (const embalagem of marca.embalagens || []) {\n const kgPorEmbalagem = embalagem.quantidade_fornecedor;\n if (kgPorEmbalagem <= 0) continue;\n\n // Testa todas as quantidades possíveis para encontrar a mais próxima\n for (let qty = 1; qty <= 100; qty++) {\n const totalKg = qty * kgPorEmbalagem;\n\n // Calcula quantos dias essa quantidade dura\n const forecast = calculateConsumptionForecast({\n dailyAverages: dailyConsumptionAverages,\n startDate: new Date(),\n totalQuantity: totalKg,\n });\n\n // Só considera opções que atendem ou superam os dias sugeridos\n if (forecast.totalDays >= suggestionDays) {\n const totalValue = qty * embalagem.valor_unitario * kgPorEmbalagem;\n const daysDifference = forecast.totalDays - suggestionDays;\n\n // Escolhe a opção mais próxima dos dias sugeridos\n // Prioridade: 1) Menor diferença de dias, 2) Menor custo total\n if (\n !bestOption ||\n daysDifference < bestOption.daysDifference ||\n (daysDifference === bestOption.daysDifference &&\n totalValue < bestOption.totalValue)\n ) {\n bestOption = {\n marca: marca.nome,\n embalagem: embalagem.label,\n quantidade: qty,\n valorUnitario: embalagem.valor_unitario,\n totalKg,\n totalValue,\n days: forecast.totalDays,\n daysDifference,\n };\n }\n }\n }\n }\n }\n\n // Retorna apenas os campos necessários\n if (!bestOption) return null;\n\n return {\n marca: bestOption.marca,\n embalagem: bestOption.embalagem,\n quantidade: bestOption.quantidade,\n valorUnitario: bestOption.valorUnitario,\n };\n };\n\n // Calcula a seleção ótima\n const optimalSelection = calculateOptimalSelection();\n\n // Função auxiliar para obter o valor unitário inicial\n const getInitialValorUnitario = (): number => {\n if (optimalSelection) {\n return optimalSelection.valorUnitario;\n }\n\n const fornecedor = data?.fornecedores?.[0];\n if (!fornecedor) return 0;\n\n const marca = fornecedor.marcas?.[0];\n if (!marca) return 0;\n\n const embalagem = marca.embalagens?.[0];\n return embalagem?.valor_unitario ?? 0;\n };\n\n const unidadeLabel = data.unidade_medida ?? \"kg\";\n const unidadeLabelUltimaCompra =\n data.ultima_compra?.unidade ?? data.unidade_medida ?? \"kg\";\n\n const [formData, setFormData] = useState<OrderFormData>({\n ...data,\n qtdPedido: optimalSelection?.quantidade ?? data?.qtdPedido ?? 0,\n valorTotal:\n data?.valorTotal ??\n (optimalSelection?.quantidade ?? data?.qtdPedido ?? 0) *\n getInitialValorUnitario(),\n });\n\n const [selectedFornecedor, setSelectedFornecedor] = useState(\n data?.fornecedores?.[0]?.nome ?? \"\",\n );\n const [selectedMarca, setSelectedMarca] = useState(\n optimalSelection?.marca ?? data?.fornecedores?.[0]?.marcas?.[0]?.nome ?? \"\",\n );\n const [selectedEmbalagem, setSelectedEmbalagem] = useState(\n optimalSelection?.embalagem ??\n data?.fornecedores?.[0]?.marcas?.[0]?.embalagens?.[0]?.label ??\n \"\",\n );\n\n const [rangeStartDate, setRangeStartDate] = useState(\n getInitialRangeStartDate,\n );\n const [rangeDays, setRangeDays] = useState(getInitialRangeDaysResolved);\n\n useEffect(() => {\n const tomorrow = getTomorrowDate();\n\n const end = timelineData?.timeline?.stockEndDate;\n let start: string;\n if (end) {\n const endDate = parseDateLocal(end);\n start =\n isNaN(endDate.getTime()) || endDate < tomorrow\n ? toYYYYMMDD(tomorrow)\n : toYYYYMMDD(endDate);\n } else {\n start = toYYYYMMDD(tomorrow);\n }\n\n let suggestionDays = 0;\n if (\n timelineData?.timeline?.restockSuggestionStart &&\n timelineData?.timeline?.restockSuggestionEnd\n ) {\n const s = parseDateLocal(timelineData.timeline.restockSuggestionStart);\n const e = parseDateLocal(timelineData.timeline.restockSuggestionEnd);\n if (!isNaN(s.getTime()) && !isNaN(e.getTime())) {\n suggestionDays =\n Math.ceil((e.getTime() - s.getTime()) / (1000 * 60 * 60 * 24)) || 0;\n }\n }\n const days =\n initialQtdDays != null && initialQtdDays > 0\n ? getClosestDays(initialQtdDays)\n : getClosestDays(suggestionDays);\n setRangeStartDate(start);\n setRangeDays(days);\n }, [timelineData, data, initialQtdDays]);\n\n // Sincroniza os valores selecionados quando os dados mudarem\n useEffect(() => {\n // Se já temos uma seleção ótima calculada, não sobrescreve\n if (optimalSelection) return;\n\n const fornecedor = data?.fornecedores?.[0];\n if (fornecedor) {\n setSelectedFornecedor(fornecedor.nome);\n\n const primeiraMarca = fornecedor.marcas?.[0];\n if (primeiraMarca) {\n setSelectedMarca(primeiraMarca.nome);\n\n const primeiraEmbalagem = primeiraMarca.embalagens?.[0];\n if (primeiraEmbalagem) {\n setSelectedEmbalagem(primeiraEmbalagem.label);\n }\n }\n }\n }, [data, optimalSelection]);\n\n // Calcula a quantidade em kg com base na embalagem selecionada\n const selectedQtyKg = useMemo(() => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return 0;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return 0;\n\n const embalagem = marca.embalagens?.find(\n (e) => e.label === selectedEmbalagem,\n );\n const quantidadeFornecedor = embalagem?.quantidade_fornecedor ?? 0;\n\n return formData.qtdPedido * quantidadeFornecedor;\n }, [\n formData.qtdPedido,\n formData.fornecedores,\n selectedMarca,\n selectedEmbalagem,\n ]);\n\n // Calcula quantos dias a quantidade selecionada vai durar\n const consumptionForecast = useMemo(() => {\n if (!dailyConsumptionAverages || selectedQtyKg <= 0) {\n return null;\n }\n\n return calculateConsumptionForecast({\n dailyAverages: dailyConsumptionAverages,\n startDate: new Date(),\n totalQuantity: selectedQtyKg,\n });\n }, [dailyConsumptionAverages, selectedQtyKg]);\n\n // Número de dias que a quantidade selecionada vai durar\n const selectedQtyDays = consumptionForecast?.totalDays ?? 0;\n\n // Consumo total no range (sempre de amanhã para frente) usando médias por dia da semana\n const rangeTotalConsumption = useMemo(() => {\n if (!dailyConsumptionAverages) return 0;\n const tomorrow = getTomorrowDate();\n const start = parseDateLocal(rangeStartDate);\n if (isNaN(start.getTime())) return 0;\n\n const effectiveStart = start < tomorrow ? tomorrow : start;\n return calculateTotalConsumptionForRange(\n dailyConsumptionAverages,\n effectiveStart,\n rangeDays,\n );\n }, [dailyConsumptionAverages, rangeStartDate, rangeDays]);\n\n // Combina o timelineData com o dailyConsumptionAverages\n const timelineDataWithConsumption = useMemo(() => {\n if (!timelineData) return undefined;\n\n return {\n ...timelineData,\n timeline: {\n ...timelineData.timeline,\n dailyConsumptionAverage: dailyConsumptionAverages,\n },\n };\n }, [timelineData, dailyConsumptionAverages]);\n\n if (!data) {\n return null;\n }\n\n // Função auxiliar para obter a embalagem selecionada\n const getEmbalagemSelecionada = () => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return null;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return null;\n\n return marca.embalagens?.find((e) => e.label === selectedEmbalagem) ?? null;\n };\n\n // Função auxiliar para obter o valor unitário da embalagem selecionada\n const getValorUnitario = (): number => {\n return getEmbalagemSelecionada()?.valor_unitario ?? 0;\n };\n\n // Função helper para formatar valores monetários em R$ (formato brasileiro)\n const formatCurrency = (value: number): string => {\n const formatted = Number(value).toFixed(2);\n // Separa parte inteira e decimal\n const [integerPart, decimalPart] = formatted.split(\".\");\n // Adiciona pontos para separar milhares\n const integerWithSeparator = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n \".\",\n );\n // Retorna no formato brasileiro: R$ 1.234,56\n return `R$ ${integerWithSeparator},${decimalPart}`;\n };\n\n // Função auxiliar para obter a quantidade_fornecedor da embalagem selecionada\n const getQuantidadeFornecedor = (): number => {\n return getEmbalagemSelecionada()?.quantidade_fornecedor ?? 0;\n };\n\n const consumoPeriodos: UnitOption[] = [\n { label: \"7 dias\", value: \"7dias\" },\n { label: \"15 dias\", value: \"15dias\" },\n { label: \"30 dias\", value: \"30dias\" },\n { label: \"60 dias\", value: \"60dias\" },\n ];\n\n const handleQtdPedidoChange = (valor: number) => {\n const valorUnitario = getValorUnitario();\n const novoValorTotal = valor * valorUnitario;\n setFormData((prev) => ({\n ...prev,\n qtdPedido: valor,\n valorTotal: novoValorTotal,\n }));\n };\n\n const handleEmbalagemChange = (embalagemLabel: string) => {\n setSelectedEmbalagem(embalagemLabel);\n // Atualiza o valor total quando a embalagem muda\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return;\n\n const embalagem = marca.embalagens?.find((e) => e.label === embalagemLabel);\n if (!embalagem) return;\n\n const novoValorTotal = formData.qtdPedido * (embalagem.valor_unitario ?? 0);\n setFormData((prev) => ({\n ...prev,\n valorTotal: novoValorTotal,\n }));\n };\n\n // Função para obter as marcas disponíveis do fornecedor selecionado\n const getMarcasDisponiveis = () => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return [];\n return fornecedor.marcas || [];\n };\n\n // Função para obter as embalagens disponíveis da marca selecionada\n const getEmbalagensDisponiveis = () => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return [];\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return [];\n\n return marca.embalagens || [];\n };\n\n const handleMarcaChange = (marcaNome: string) => {\n setSelectedMarca(marcaNome);\n // Atualiza a embalagem para a primeira da nova marca\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === marcaNome);\n if (!marca || !marca.embalagens || marca.embalagens.length === 0) return;\n\n const primeiraEmbalagem = marca.embalagens[0];\n handleEmbalagemChange(primeiraEmbalagem.label);\n };\n\n const handleFornecedorChange = (fornecedorNome: string) => {\n setSelectedFornecedor(fornecedorNome);\n // Atualiza a marca para a primeira do novo fornecedor\n const fornecedor = formData.fornecedores?.find(\n (f) => f.nome === fornecedorNome,\n );\n if (!fornecedor) return;\n\n const primeiraMarca = fornecedor.marcas?.[0];\n if (!primeiraMarca) {\n setSelectedMarca(\"\");\n setSelectedEmbalagem(\"\");\n return;\n }\n\n setSelectedMarca(primeiraMarca.nome);\n\n // Atualiza a embalagem para a primeira da primeira marca\n const primeiraEmbalagem = primeiraMarca.embalagens?.[0];\n if (primeiraEmbalagem) {\n handleEmbalagemChange(primeiraEmbalagem.label);\n } else {\n setSelectedEmbalagem(\"\");\n }\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit(formData);\n };\n\n const handleAdicionarSugestao = () => {\n handleQtdPedidoChange(formData?.sugestao_de_compra ?? 0);\n };\n\n const handleAddConsumoPrevisto = () => {\n const kgPerUnit = getQuantidadeFornecedor();\n if (kgPerUnit <= 0 || rangeTotalConsumption <= 0) return;\n const unitsFromConsumo = Math.ceil(rangeTotalConsumption / kgPerUnit);\n handleQtdPedidoChange(unitsFromConsumo);\n };\n\n // Estilos inline para substituir Tailwind\n const styles = {\n container: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"8px\",\n backgroundColor: \"white\",\n borderRadius: \"16px\",\n maxWidth: \"100%\",\n fontFamily: \"Inter, sans-serif\",\n },\n header: {\n display: \"flex\",\n gap: \"8px\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderBottom: \"1px solid #e5e7eb\",\n padding: \"16px\",\n },\n itemTitle: {\n fontSize: \"18px\",\n color: \"#111827\",\n margin: 0,\n fontWeight: \"600\",\n fontFamily: \"Inter, sans-serif\",\n },\n valorUnitario: {\n fontSize: \"14px\",\n fontWeight: \"500\",\n color: \"#000\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontFamily: \"Inter, sans-serif\",\n },\n infoRow: {\n display: \"flex\",\n height: \"32px\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"4px 6px\",\n backgroundColor: \"#F9FAFB\",\n borderRadius: \"4px\",\n border: \"1px solid #E5E7EB\",\n },\n infoRowAlert: {\n backgroundColor: \"#FEF3C7\",\n borderColor: \"#F59E0B\",\n },\n infoRowForecast: {\n backgroundColor: \"#FFF5F0\",\n border: \"none\",\n },\n infoIcon: {\n width: \"20px\",\n height: \"20px\",\n },\n infoText: {\n fontSize: \"14px\",\n color: \"#374151\",\n fontWeight: \"400\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontFamily: \"Inter, sans-serif\",\n },\n infoValue: {\n fontSize: \"14px\",\n color: \"#111827\",\n fontWeight: \"300\",\n fontFamily: \"Inter, sans-serif\",\n },\n formGrid: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gap: \"16px\",\n },\n formField: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"8px\",\n },\n label: {\n fontSize: \"14px\",\n fontWeight: \"700\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n select: {\n height: \"42px\",\n padding: \"0 14px\",\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n fontSize: \"14px\",\n fontWeight: \"500\" as const,\n backgroundColor: \"#f8fafc\",\n color: \"#0f172a\",\n cursor: \"pointer\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n boxSizing: \"border-box\" as const,\n lineHeight: \"1\",\n transition: \"border-color 0.15s, box-shadow 0.15s\",\n },\n dateInput: {\n height: \"42px\",\n padding: \"0 14px\",\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n fontSize: \"14px\",\n fontWeight: \"500\" as const,\n backgroundColor: \"#f8fafc\",\n color: \"#0f172a\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n boxSizing: \"border-box\" as const,\n lineHeight: \"1\",\n transition: \"border-color 0.15s, box-shadow 0.15s\",\n width: \"100%\",\n },\n rangeTotal: {\n fontSize: \"20px\",\n fontWeight: \"700\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n display: \"flex\",\n alignItems: \"center\",\n },\n addConsumoButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n minWidth: \"28px\",\n borderRadius: \"6px\",\n border: \"1px solid #9ca3af\",\n backgroundColor: \"#e5e7eb\",\n color: \"#374151\",\n fontSize: \"16px\",\n fontWeight: \"600\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n fontFamily: \"Inter, sans-serif\",\n },\n addConsumoButtonDisabled: {\n opacity: 0.5,\n cursor: \"not-allowed\",\n backgroundColor: \"#d1d5db\",\n borderColor: \"#9ca3af\",\n },\n stockRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"6px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #E5E7EB\",\n },\n stockInfo: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n width: \"100%\",\n justifyContent: \"space-between\",\n },\n stockDot: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n backgroundColor: \"#EF4444\",\n },\n stockValue: {\n fontSize: \"14px\",\n fontWeight: \"300\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n stockValueContainer: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n consumptionRow: {\n height: \"36px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"6px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #E5E7EB\",\n },\n consumptionInfo: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n consumptionArrow: {\n width: \"14px\",\n height: \"14px\",\n color: \"#10B981\",\n },\n suggestionRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 16px\",\n backgroundColor: \"#E6FDE8\",\n borderRadius: \"8px\",\n border: \"1px solid #BBF7D0\",\n },\n suggestionInfo: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n suggestionIcon: {\n width: \"16px\",\n height: \"16px\",\n color: \"#000000\",\n },\n suggestionText: {\n fontSize: \"14px\",\n fontWeight: \"300\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n suggestionButton: {\n backgroundColor: \"#5EED65\",\n color: \"black\",\n border: \"none\",\n letterSpacing: \"0.05em\",\n borderRadius: \"6px\",\n padding: \"6px 12px\",\n fontSize: \"12px\",\n fontWeight: \"700\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n fontFamily: \"Inter, sans-serif\",\n },\n suggestionButtonHover: {\n backgroundColor: \"#059669\",\n },\n // Estilos da seção de pedido (estilo calculadora)\n orderSectionContainer: {\n backgroundColor: \"#f5f5f5\",\n borderRadius: \"16px\",\n padding: \"20px\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"20px\",\n },\n quantityRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"16px\",\n },\n quantityButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"56px\",\n height: \"56px\",\n borderRadius: \"16px\",\n background: \"white\",\n color: \"#333\",\n border: \"1px solid rgb(240, 240, 240)\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n },\n quantityButtonHover: {\n background: \"#f8f8f8\",\n transform: \"scale(1.02)\",\n },\n quantityButtonActive: {\n background: \"#f0f0f0\",\n transform: \"scale(0.98)\",\n },\n quantityButtonDisabled: {\n opacity: 0.4,\n cursor: \"not-allowed\",\n },\n quantityInputContainer: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n flex: 1,\n maxWidth: \"140px\",\n },\n quantityInput: {\n width: \"100%\",\n height: \"40px\",\n textAlign: \"center\" as const,\n fontSize: \"32px\",\n fontWeight: \"bold\",\n borderRadius: \"12px\",\n color: \"#000\",\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n padding: \"0\",\n margin: \"0\",\n },\n quantityLabel: {\n fontSize: \"14px\",\n color: \"#666\",\n fontWeight: \"500\",\n marginTop: \"4px\",\n textAlign: \"center\" as const,\n fontFamily: \"Inter, sans-serif\",\n },\n totalsRow: {\n display: \"flex\",\n justifyContent: \"center\",\n gap: \"24px\",\n marginTop: \"4px\",\n flexWrap: \"wrap\" as const,\n },\n totalItem: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n },\n totalLabel: {\n fontSize: \"13px\",\n color: \"#888\",\n fontWeight: \"400\",\n fontFamily: \"Inter, sans-serif\",\n },\n totalValue: {\n fontSize: \"14px\",\n fontWeight: \"600\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n totalValueHighlight: {\n fontSize: \"14px\",\n fontWeight: \"700\",\n color: \"#FF4E00\",\n fontFamily: \"Inter, sans-serif\",\n },\n buttons: {\n display: \"flex\",\n gap: \"16px\",\n marginTop: \"24px\",\n },\n button: {\n flex: 1,\n padding: \"12px 24px\",\n borderRadius: \"8px\",\n fontSize: \"16px\",\n fontWeight: \"600\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n border: \"none\",\n },\n addButton: {\n backgroundColor: \"#FF4E00\",\n color: \"white\",\n },\n addButtonDisabled: {\n opacity: 0.5,\n cursor: \"not-allowed\",\n },\n addButtonHover: {\n backgroundColor: \"#E63900\",\n },\n cancelButton: {\n backgroundColor: \"#EF4444\",\n color: \"white\",\n },\n cancelButtonHover: {\n backgroundColor: \"#DC2626\",\n },\n };\n\n return (\n <form onSubmit={handleSubmit} style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n <h2 style={styles.itemTitle}>{formData.nome}</h2>\n <div style={styles.valorUnitario}>\n <div\n style={{\n color: \"#FFFF\",\n border: \"1px solid #FF4E00\",\n borderRadius: \"4px\",\n padding: \"4px 8px\",\n backgroundColor: \"#FF4E00\",\n fontWeight: \"600\",\n }}\n >\n {formatCurrency(getValorUnitario())}\n </div>\n </div>\n </div>\n\n <div\n style={{\n padding: \"8px 20px\",\n gap: \"12px\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n }}\n >\n {/* Informações do produto */}\n <div style={styles.infoRow}>\n <div style={styles.infoText}>\n <AlertIcon width={20} height={20} />\n Última compra {formData.ultima_compra?.data}\n </div>\n <div style={styles.infoValue}>\n {Number(formData.ultima_compra?.quantidade ?? 0).toFixed(2)} {unidadeLabelUltimaCompra.toUpperCase()}\n </div>\n </div>\n\n {/* Seletores */}\n <div style={styles.formGrid}>\n <div style={styles.formField}>\n <label style={styles.label}>Fornecedores:</label>\n <StyledSelect\n value={selectedFornecedor}\n onChange={(e) => handleFornecedorChange(e.target.value)}\n >\n {formData.fornecedores?.map((fornecedor) => (\n <option key={fornecedor.nome} value={fornecedor.nome}>\n {fornecedor.nome}\n </option>\n ))}\n </StyledSelect>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Marcas:</label>\n <StyledSelect\n value={selectedMarca}\n onChange={(e) => handleMarcaChange(e.target.value)}\n >\n {getMarcasDisponiveis().map((marca) => (\n <option key={marca.nome} value={marca.nome}>\n {marca.nome}\n </option>\n ))}\n </StyledSelect>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Embalagem:</label>\n <StyledSelect\n value={selectedEmbalagem}\n onChange={(e) => handleEmbalagemChange(e.target.value)}\n >\n {getEmbalagensDisponiveis().map((embalagem) => (\n <option key={embalagem.label} value={embalagem.label}>\n {embalagem.label}\n </option>\n ))}\n </StyledSelect>\n </div>\n </div>\n\n {/* Timeline de estoque (substitui Estoque Atual / Dias de estoque / Consumo / Sugestão de compra) */}\n {timelineDataWithConsumption && (\n <div style={{ marginTop: \"8px\", marginBottom: \"8px\" }}>\n <StockLeadTime\n data={timelineDataWithConsumption}\n controls={true}\n showLegend={showLegendTimeline}\n size=\"sm\"\n showSuggestionBar={showSuggestionBar}\n unitLabel={unidadeLabel}\n onAddSuggestedWeight={(weightKg) =>\n handleQtdPedidoChange(weightKg)\n }\n selectedQty={selectedQtyKg}\n selectedQtyDays={selectedQtyDays}\n />\n </div>\n )}\n\n {/* Data, dias e consumo total no período */}\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: isMobile ? \"1fr 1fr\" : \"1fr 1fr 1fr\",\n gap: \"16px\",\n marginTop: \"8px\",\n alignItems: \"flex-start\",\n }}\n >\n <div style={styles.formField}>\n <label style={styles.label}>Data inicial</label>\n <StyledDateInput\n value={rangeStartDate}\n min={getTomorrowYYYYMMDD()}\n onChange={(e) => setRangeStartDate(e.target.value)}\n aria-label=\"Data inicial\"\n />\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Quantos dias?</label>\n <StyledSelect\n value={rangeDays}\n onChange={(e) => setRangeDays(Number(e.target.value))}\n aria-label=\"Quantos dias?\"\n >\n {DAY_OPTIONS.map((d) => (\n <option key={d} value={d}>\n {d}\n </option>\n ))}\n </StyledSelect>\n </div>\n <div\n style={{\n ...styles.formField,\n ...(isMobile ? { gridColumn: \"1 / -1\" } : {}),\n }}\n >\n <label style={styles.label}>Consumo previsto</label>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 14px\",\n backgroundColor: \"#f8fafc\",\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n height: \"42px\",\n }}\n >\n <span\n style={{\n fontSize: \"18px\",\n fontWeight: \"700\",\n color: \"#0f172a\",\n fontFamily: \"Inter, sans-serif\",\n letterSpacing: \"-0.3px\",\n }}\n >\n {rangeTotalConsumption.toFixed(2)}{\" \"}\n <span\n style={{\n fontSize: \"13px\",\n fontWeight: \"500\",\n color: \"#64748b\",\n }}\n >\n {unidadeLabel}\n </span>\n </span>\n <button\n type=\"button\"\n onClick={handleAddConsumoPrevisto}\n disabled={\n rangeTotalConsumption <= 0 || getQuantidadeFornecedor() <= 0\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"30px\",\n height: \"30px\",\n minWidth: \"30px\",\n borderRadius: \"8px\",\n border: \"none\",\n backgroundColor:\n rangeTotalConsumption > 0 && getQuantidadeFornecedor() > 0\n ? \"#FF4E00\"\n : \"#e5e7eb\",\n color:\n rangeTotalConsumption > 0 && getQuantidadeFornecedor() > 0\n ? \"white\"\n : \"#9ca3af\",\n fontSize: \"16px\",\n cursor:\n rangeTotalConsumption > 0 && getQuantidadeFornecedor() > 0\n ? \"pointer\"\n : \"not-allowed\",\n opacity:\n rangeTotalConsumption <= 0 || getQuantidadeFornecedor() <= 0\n ? 0.5\n : 1,\n transition: \"all 0.2s\",\n fontFamily: \"Inter, sans-serif\",\n }}\n onMouseEnter={(e) => {\n if (\n rangeTotalConsumption > 0 &&\n getQuantidadeFornecedor() > 0\n ) {\n e.currentTarget.style.backgroundColor = \"#e04400\";\n }\n }}\n onMouseLeave={(e) => {\n if (\n rangeTotalConsumption > 0 &&\n getQuantidadeFornecedor() > 0\n ) {\n e.currentTarget.style.backgroundColor = \"#FF4E00\";\n }\n }}\n aria-label=\"Definir quantidade pelo consumo previsto\"\n >\n ↻\n </button>\n </div>\n </div>\n </div>\n\n {/* Seção de pedido */}\n <div style={styles.orderSectionContainer}>\n {/* Linha da quantidade com botões */}\n <div style={styles.quantityRow}>\n {/* Botão Diminuir */}\n <button\n type=\"button\"\n style={{\n ...styles.quantityButton,\n ...(formData.qtdPedido <= 0\n ? styles.quantityButtonDisabled\n : {}),\n }}\n onClick={() =>\n handleQtdPedidoChange(Math.max(0, formData.qtdPedido - 1))\n }\n onMouseEnter={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background =\n styles.quantityButton.background!;\n e.currentTarget.style.transform = \"\";\n }}\n onMouseDown={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.background =\n styles.quantityButtonActive.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonActive.transform!;\n }\n }}\n onMouseUp={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }\n }}\n disabled={formData.qtdPedido <= 0}\n aria-label=\"Diminuir quantidade\"\n >\n <svg\n style={{ width: \"24px\", height: \"24px\" }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"#000\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2.5}\n d=\"M20 12H4\"\n />\n </svg>\n </button>\n\n {/* Input da Quantidade */}\n <div style={styles.quantityInputContainer}>\n <input\n type=\"number\"\n value={formData.qtdPedido}\n onChange={(e) =>\n handleQtdPedidoChange(\n Math.max(0, parseInt(e.target.value) || 0),\n )\n }\n style={styles.quantityInput}\n className=\"order-form-quantity-input\"\n min=\"0\"\n aria-label=\"Quantidade\"\n />\n <span style={styles.quantityLabel}>\n {selectedEmbalagem || \"unidades\"}\n </span>\n </div>\n\n {/* Botão Aumentar */}\n <button\n type=\"button\"\n style={styles.quantityButton}\n onClick={() => handleQtdPedidoChange(formData.qtdPedido + 1)}\n onMouseEnter={(e) => {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background =\n styles.quantityButton.background!;\n e.currentTarget.style.transform = \"\";\n }}\n onMouseDown={(e) => {\n e.currentTarget.style.background =\n styles.quantityButtonActive.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonActive.transform!;\n }}\n onMouseUp={(e) => {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }}\n aria-label=\"Aumentar quantidade\"\n >\n <svg\n style={{ width: \"24px\", height: \"24px\" }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"#FF4E00\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2.5}\n d=\"M12 4v16m8-8H4\"\n />\n </svg>\n </button>\n </div>\n\n {/* Linha dos totais */}\n {/* Totais discretos */}\n <div\n style={{\n ...styles.totalsRow,\n ...(isMobile\n ? {\n flexDirection: \"column\",\n gap: \"12px\",\n alignItems: \"stretch\",\n }\n : {}),\n }}\n >\n <div\n style={{\n ...styles.totalItem,\n ...(isMobile\n ? { justifyContent: \"space-between\", width: \"100%\" }\n : {}),\n }}\n >\n <span style={styles.totalLabel}>Total:</span>\n <span style={styles.totalValue}>\n {(formData.qtdPedido * getQuantidadeFornecedor()).toFixed(2)} {unidadeLabel}\n </span>\n </div>\n <div\n style={{\n ...styles.totalItem,\n ...(isMobile\n ? { justifyContent: \"space-between\", width: \"100%\" }\n : {}),\n }}\n >\n <span style={styles.totalLabel}>Valor:</span>\n <span style={styles.totalValueHighlight}>\n {formatCurrency(formData.qtdPedido * getValorUnitario())}\n </span>\n </div>\n {selectedQtyDays > 0 && (\n <div\n style={{\n ...styles.totalItem,\n ...(isMobile\n ? { justifyContent: \"space-between\", width: \"100%\" }\n : {}),\n }}\n >\n <span style={styles.totalLabel}>Duração:</span>\n <span style={styles.totalValue}>\n {selectedQtyDays % 1 === 0\n ? selectedQtyDays.toString()\n : selectedQtyDays.toFixed(1)}{\" \"}\n {selectedQtyDays === 1 ? \"dia\" : \"dias\"}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Botões */}\n <div style={styles.buttons}>\n <button\n type=\"submit\"\n disabled={formData.qtdPedido <= 0}\n style={{\n ...styles.button,\n ...styles.addButton,\n ...(formData.qtdPedido <= 0 ? styles.addButtonDisabled : {}),\n }}\n onMouseEnter={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.backgroundColor =\n styles.addButtonHover.backgroundColor!;\n }\n }}\n onMouseLeave={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.backgroundColor =\n styles.addButton.backgroundColor!;\n }\n }}\n >\n Adicionar\n </button>\n <button\n type=\"button\"\n style={{ ...styles.button, ...styles.cancelButton }}\n onClick={onCancel}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n styles.cancelButtonHover.backgroundColor!;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor =\n styles.cancelButton.backgroundColor!;\n }}\n >\n Cancelar\n </button>\n </div>\n </div>\n </form>\n );\n}\n"],"names":["DAY_OPTIONS","toYYYYMMDD","d","y","m","day","parseDateLocal","s","parts","getTomorrowYYYYMMDD","t","getTomorrowDate","getClosestDays","suggestion","a","b","FIELD_HEIGHT","fieldWrapperStyle","fieldInnerStyle","StyledSelect","children","props","jsxs","jsx","StyledDateInput","OrderForm","data","onSubmit","onCancel","timelineData","fornecedoresOptions","marcasOptions","embalagensOptions","dailyConsumptionAverages","showSuggestionBar","showLegendTimeline","initialQtdDays","React","style","isMobile","setIsMobile","useState","useEffect","checkMobile","getSuggestionDays","restockSuggestionStart","restockSuggestionEnd","startDate","diffTime","diffDays","getInitialRangeStartDate","tomorrow","end","_a","endDate","getInitialRangeDays","getInitialRangeDaysResolved","optimalSelection","fornecedor","suggestionDays","primeiraMarca","_b","primeiraEmbalagem","_c","bestOption","marca","embalagem","kgPorEmbalagem","qty","totalKg","forecast","calculateConsumptionForecast","totalValue","daysDifference","getInitialValorUnitario","unidadeLabel","unidadeLabelUltimaCompra","formData","setFormData","selectedFornecedor","setSelectedFornecedor","selectedMarca","setSelectedMarca","_g","_f","_e","_d","selectedEmbalagem","setSelectedEmbalagem","_m","_l","_k","_j","_i","_h","rangeStartDate","setRangeStartDate","rangeDays","setRangeDays","start","e","days","selectedQtyKg","useMemo","quantidadeFornecedor","consumptionForecast","selectedQtyDays","rangeTotalConsumption","effectiveStart","calculateTotalConsumptionForRange","timelineDataWithConsumption","getEmbalagemSelecionada","getValorUnitario","formatCurrency","value","formatted","integerPart","decimalPart","getQuantidadeFornecedor","handleQtdPedidoChange","valor","valorUnitario","novoValorTotal","prev","handleEmbalagemChange","embalagemLabel","getMarcasDisponiveis","getEmbalagensDisponiveis","handleMarcaChange","marcaNome","handleFornecedorChange","fornecedorNome","handleSubmit","handleAddConsumoPrevisto","kgPerUnit","unitsFromConsumo","styles","AlertIcon","_n","_o","_p","StockLeadTime","weightKg"],"mappings":"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"}
1
+ {"version":3,"file":"index10.js","sources":["../src/components/OrderForm/index.tsx"],"sourcesContent":["import {\n AlertIcon,\n ArrowUpIcon,\n ChartIcon,\n DotIcon,\n ShoppingCartIcon,\n TruckIcon,\n} from \"../Icons\";\nimport React, { useState, useEffect, useMemo } from \"react\";\nimport { StockLeadTime, type TimelineData } from \"../StockLeadTime\";\n\nimport { UnitOption } from \"../UnitSelect\";\nimport {\n calculateConsumptionForecast,\n calculateTotalConsumptionForRange,\n type DailyConsumptionAverage,\n} from \"../../utils\";\n\nconst DAY_OPTIONS = [1, 2, 3, 7, 10, 15, 30, 60, 90] as const;\nconst MIN_INITIAL_DAYS = 60;\n\nconst toYYYYMMDD = (d: Date): string => {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n};\n\n/** Interpreta \"YYYY-MM-DD\" como data local (meia-noite). Evita o uso de UTC do new Date(\"YYYY-MM-DD\"). */\nconst parseDateLocal = (s: string): Date => {\n const parts = s.split(\"-\").map(Number);\n if (parts.length !== 3 || parts.some(Number.isNaN)) return new Date(NaN);\n return new Date(parts[0], parts[1] - 1, parts[2]);\n};\n\nconst getTomorrowYYYYMMDD = (): string => {\n const t = new Date();\n t.setDate(t.getDate() + 1);\n t.setHours(0, 0, 0, 0);\n return toYYYYMMDD(t);\n};\n\nconst getTomorrowDate = (): Date => {\n const t = new Date();\n t.setDate(t.getDate() + 1);\n t.setHours(0, 0, 0, 0);\n return t;\n};\n\nconst getClosestDays = (suggestion: number): number => {\n if (suggestion <= 0) return 7;\n return DAY_OPTIONS.reduce((a, b) =>\n Math.abs(b - suggestion) < Math.abs(a - suggestion) ? b : a,\n );\n};\n\nconst getInitialDaysWithMinimum = (days: number): number => {\n const closestDay = getClosestDays(days);\n return Math.max(closestDay, MIN_INITIAL_DAYS);\n};\n\nexport interface OrderFormData {\n nome: string; // Ex: \"Arroz Negro\"\n codigoSap: string; // Ex: \"SAP-I000251\"\n categoria: string; // Ex: \"Seco\"\n estoque_atual: number; // Quantidade em estoque\n dias_de_estoque: number; // Quantos dias o estoque dura\n consumo: {\n quantidadeDias: number; // Período de referência\n valor: number; // Consumo no período\n };\n sugestao_de_compra: number; // Quantidade sugerida\n qtdPedido: number; // Quantidade do pedido\n valorTotal: number; // Valor total do pedido (qtdPedido * valor unitário)\n ultima_compra: {\n data: string; // Data formatada (pt-BR)\n quantidade: number;\n /** Unidade da última compra (ex: \"kg\", \"un\", \"cx\"). Se não informada, usa unidade_medida. */\n unidade?: string;\n } | null;\n /** Unidade de medida do item (ex: \"kg\", \"un\", \"cx\"). Usada nos rótulos do modal. @default \"kg\" */\n unidade_medida?: string;\n fornecedores: [\n {\n previsao_de_entrega: string; // Data calculada baseada na grade\n nome: string; // Ex: \"Rio Acima\"\n marcas: {\n nome: string; // Ex: \"Greentable\"\n embalagens: {\n label: string; // Ex: \"PCT 1KG\"\n quantidade_fornecedor: number;\n valor_unitario: number; // Ex: \"R$ 27.00\"\n primario?: boolean; // Define se é a embalagem principal\n }[];\n }[];\n },\n ];\n}\n\nexport interface OrderFormProps {\n data: OrderFormData;\n onSubmit: (data: OrderFormData) => void;\n onCancel: () => void;\n timelineData?: TimelineData;\n fornecedoresOptions: UnitOption[];\n marcasOptions: UnitOption[];\n embalagensOptions: UnitOption[];\n /** Média de consumo por dia da semana para cálculo de previsão */\n dailyConsumptionAverages?: DailyConsumptionAverage;\n /** Exibe ou oculta a barra amarela (Sugestão de Compra) no StockLeadTime. @default true */\n showSuggestionBar?: boolean;\n /** Exibe ou oculta a legenda da timeline (StockLeadTime). @default false */\n showLegendTimeline?: boolean;\n /** Quando definido, usa este valor como quantidade de dias inicial no select \"Quantos dias?\" (em vez da sugestão da timeline). Usado pelo OrderModal com defaultQtdDays. */\n initialQtdDays?: number;\n /** No StockLeadTime, exibe apenas os controles de zoom (+/-), ocultando os botões de sugestão (S) e linha de consumo (C). Usado pelo OrderModal. */\n stockLeadTimeZoomOnly?: boolean;\n}\n\n// ─── Primitivos de campo estilizado ──────────────────────────────────────────\n// O div wrapper controla altura e visual; o elemento nativo preenche o\n// container com posicionamento absoluto, eliminando variação entre browsers.\n\nconst FIELD_HEIGHT = 42;\n\nconst fieldWrapperStyle: React.CSSProperties = {\n position: \"relative\",\n height: `${FIELD_HEIGHT}px`,\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n backgroundColor: \"#f8fafc\",\n display: \"flex\",\n alignItems: \"center\",\n boxSizing: \"border-box\",\n};\n\nconst fieldInnerStyle: React.CSSProperties = {\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n background: \"transparent\",\n outline: \"none\",\n fontSize: \"14px\",\n fontWeight: \"500\",\n color: \"#0f172a\",\n fontFamily: \"Inter, sans-serif\",\n cursor: \"pointer\",\n boxSizing: \"border-box\",\n};\n\nconst StyledSelect: React.FC<React.SelectHTMLAttributes<HTMLSelectElement>> = ({\n children,\n ...props\n}) => (\n <div style={fieldWrapperStyle}>\n <select\n {...props}\n style={{\n ...fieldInnerStyle,\n padding: \"0 36px 0 14px\",\n appearance: \"none\",\n WebkitAppearance: \"none\",\n }}\n >\n {children}\n </select>\n <span\n aria-hidden\n style={{\n position: \"absolute\",\n right: \"12px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n pointerEvents: \"none\",\n color: \"#64748b\",\n display: \"flex\",\n alignItems: \"center\",\n }}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </span>\n </div>\n);\n\nconst StyledDateInput: React.FC<\n React.InputHTMLAttributes<HTMLInputElement>\n> = (props) => (\n <div style={fieldWrapperStyle}>\n <input\n type=\"date\"\n {...props}\n style={{ ...fieldInnerStyle, padding: \"0 14px\" }}\n />\n </div>\n);\n\nexport function OrderForm({\n data,\n onSubmit,\n onCancel,\n timelineData,\n fornecedoresOptions,\n marcasOptions,\n embalagensOptions,\n dailyConsumptionAverages,\n showSuggestionBar = true,\n showLegendTimeline = false,\n initialQtdDays,\n stockLeadTimeZoomOnly = false,\n}: OrderFormProps) {\n // Remove os spinners do input number\n React.useEffect(() => {\n const style = document.createElement(\"style\");\n style.textContent = `\n .order-form-quantity-input::-webkit-outer-spin-button,\n .order-form-quantity-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n .order-form-quantity-input {\n -moz-appearance: textfield;\n }\n `;\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }, []);\n\n // Detecta se é mobile (largura <= 768px)\n const [isMobile, setIsMobile] = useState(false);\n\n useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, []);\n\n // Calcula quantos dias a sugestão deve cobrir baseado no timelineData\n const getSuggestionDays = (): number => {\n if (!timelineData?.timeline) return 0;\n\n const { restockSuggestionStart, restockSuggestionEnd } =\n timelineData.timeline;\n if (!restockSuggestionStart || !restockSuggestionEnd) return 0;\n\n const startDate = new Date(restockSuggestionStart);\n const endDate = new Date(restockSuggestionEnd);\n const diffTime = endDate.getTime() - startDate.getTime();\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n\n return diffDays > 0 ? diffDays : 0;\n };\n\n const getInitialRangeStartDate = (): string => {\n const tomorrow = getTomorrowDate();\n const end = timelineData?.timeline?.stockEndDate;\n if (!end) return toYYYYMMDD(tomorrow);\n const endDate = parseDateLocal(end);\n if (isNaN(endDate.getTime())) return toYYYYMMDD(tomorrow);\n return endDate < tomorrow ? toYYYYMMDD(tomorrow) : toYYYYMMDD(endDate);\n };\n\n const getInitialRangeDays = (): number => getClosestDays(getSuggestionDays());\n\n // Quando initialQtdDays é passado (ex.: OrderModal com defaultQtdDays), usa esse valor; senão usa a sugestão da timeline como antes\n const getInitialRangeDaysResolved = (): number =>\n initialQtdDays != null && initialQtdDays > 0\n ? getInitialDaysWithMinimum(initialQtdDays)\n : getInitialDaysWithMinimum(getInitialRangeDays());\n\n // Calcula a melhor combinação de embalagem e quantidade para cobrir os dias sugeridos\n const calculateOptimalSelection = (): {\n marca: string;\n embalagem: string;\n quantidade: number;\n valorUnitario: number;\n } | null => {\n const fornecedor = data?.fornecedores?.[0];\n if (!fornecedor) return null;\n\n const suggestionDays = getSuggestionDays();\n\n // Se não tem consumo médio ou dias de sugestão, retorna a primeira opção\n if (!dailyConsumptionAverages || suggestionDays <= 0) {\n const primeiraMarca = fornecedor.marcas?.[0];\n const primeiraEmbalagem = primeiraMarca?.embalagens?.[0];\n return primeiraMarca && primeiraEmbalagem\n ? {\n marca: primeiraMarca.nome,\n embalagem: primeiraEmbalagem.label,\n quantidade: data?.qtdPedido > 0 ? data.qtdPedido : 0,\n valorUnitario: primeiraEmbalagem.valor_unitario,\n }\n : null;\n }\n\n // Encontra a melhor combinação\n let bestOption: {\n marca: string;\n embalagem: string;\n quantidade: number;\n valorUnitario: number;\n totalKg: number;\n totalValue: number;\n days: number;\n daysDifference: number; // Diferença absoluta dos dias sugeridos\n } | null = null;\n\n for (const marca of fornecedor.marcas || []) {\n for (const embalagem of marca.embalagens || []) {\n const kgPorEmbalagem = embalagem.quantidade_fornecedor;\n if (kgPorEmbalagem <= 0) continue;\n\n // Testa todas as quantidades possíveis para encontrar a mais próxima\n for (let qty = 1; qty <= 100; qty++) {\n const totalKg = qty * kgPorEmbalagem;\n\n // Calcula quantos dias essa quantidade dura\n const forecast = calculateConsumptionForecast({\n dailyAverages: dailyConsumptionAverages,\n startDate: new Date(),\n totalQuantity: totalKg,\n });\n\n // Só considera opções que atendem ou superam os dias sugeridos\n if (forecast.totalDays >= suggestionDays) {\n const totalValue = qty * embalagem.valor_unitario * kgPorEmbalagem;\n const daysDifference = forecast.totalDays - suggestionDays;\n\n // Escolhe a opção mais próxima dos dias sugeridos\n // Prioridade: 1) Menor diferença de dias, 2) Menor custo total\n if (\n !bestOption ||\n daysDifference < bestOption.daysDifference ||\n (daysDifference === bestOption.daysDifference &&\n totalValue < bestOption.totalValue)\n ) {\n bestOption = {\n marca: marca.nome,\n embalagem: embalagem.label,\n quantidade: qty,\n valorUnitario: embalagem.valor_unitario,\n totalKg,\n totalValue,\n days: forecast.totalDays,\n daysDifference,\n };\n }\n }\n }\n }\n }\n\n // Retorna apenas os campos necessários\n if (!bestOption) return null;\n\n return {\n marca: bestOption.marca,\n embalagem: bestOption.embalagem,\n quantidade: bestOption.quantidade,\n valorUnitario: bestOption.valorUnitario,\n };\n };\n\n // Calcula a seleção ótima\n const optimalSelection = calculateOptimalSelection();\n\n // Função auxiliar para obter o valor unitário inicial\n const getInitialValorUnitario = (): number => {\n if (optimalSelection) {\n return optimalSelection.valorUnitario;\n }\n\n const fornecedor = data?.fornecedores?.[0];\n if (!fornecedor) return 0;\n\n const marca = fornecedor.marcas?.[0];\n if (!marca) return 0;\n\n const embalagem = marca.embalagens?.[0];\n return embalagem?.valor_unitario ?? 0;\n };\n\n const unidadeLabel = data.unidade_medida ?? \"kg\";\n const unidadeLabelUltimaCompra =\n data.ultima_compra?.unidade ?? data.unidade_medida ?? \"kg\";\n\n const [formData, setFormData] = useState<OrderFormData>({\n ...data,\n qtdPedido: optimalSelection?.quantidade ?? data?.qtdPedido ?? 0,\n valorTotal:\n data?.valorTotal ??\n (optimalSelection?.quantidade ?? data?.qtdPedido ?? 0) *\n getInitialValorUnitario(),\n });\n\n const [selectedFornecedor, setSelectedFornecedor] = useState(\n data?.fornecedores?.[0]?.nome ?? \"\",\n );\n const [selectedMarca, setSelectedMarca] = useState(\n optimalSelection?.marca ?? data?.fornecedores?.[0]?.marcas?.[0]?.nome ?? \"\",\n );\n const [selectedEmbalagem, setSelectedEmbalagem] = useState(\n optimalSelection?.embalagem ??\n data?.fornecedores?.[0]?.marcas?.[0]?.embalagens?.[0]?.label ??\n \"\",\n );\n\n const [rangeStartDate, setRangeStartDate] = useState(\n getInitialRangeStartDate,\n );\n const [rangeDays, setRangeDays] = useState(getInitialRangeDaysResolved);\n\n useEffect(() => {\n const tomorrow = getTomorrowDate();\n\n const end = timelineData?.timeline?.stockEndDate;\n let start: string;\n if (end) {\n const endDate = parseDateLocal(end);\n start =\n isNaN(endDate.getTime()) || endDate < tomorrow\n ? toYYYYMMDD(tomorrow)\n : toYYYYMMDD(endDate);\n } else {\n start = toYYYYMMDD(tomorrow);\n }\n\n let suggestionDays = 0;\n if (\n timelineData?.timeline?.restockSuggestionStart &&\n timelineData?.timeline?.restockSuggestionEnd\n ) {\n const s = parseDateLocal(timelineData.timeline.restockSuggestionStart);\n const e = parseDateLocal(timelineData.timeline.restockSuggestionEnd);\n if (!isNaN(s.getTime()) && !isNaN(e.getTime())) {\n suggestionDays =\n Math.ceil((e.getTime() - s.getTime()) / (1000 * 60 * 60 * 24)) || 0;\n }\n }\n const days =\n initialQtdDays != null && initialQtdDays > 0\n ? getInitialDaysWithMinimum(initialQtdDays)\n : getInitialDaysWithMinimum(suggestionDays);\n setRangeStartDate(start);\n setRangeDays(days);\n }, [timelineData, data, initialQtdDays]);\n\n // Sincroniza os valores selecionados quando os dados mudarem\n useEffect(() => {\n // Se já temos uma seleção ótima calculada, não sobrescreve\n if (optimalSelection) return;\n\n const fornecedor = data?.fornecedores?.[0];\n if (fornecedor) {\n setSelectedFornecedor(fornecedor.nome);\n\n const primeiraMarca = fornecedor.marcas?.[0];\n if (primeiraMarca) {\n setSelectedMarca(primeiraMarca.nome);\n\n const primeiraEmbalagem = primeiraMarca.embalagens?.[0];\n if (primeiraEmbalagem) {\n setSelectedEmbalagem(primeiraEmbalagem.label);\n }\n }\n }\n }, [data, optimalSelection]);\n\n // Calcula a quantidade em kg com base na embalagem selecionada\n const selectedQtyKg = useMemo(() => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return 0;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return 0;\n\n const embalagem = marca.embalagens?.find(\n (e) => e.label === selectedEmbalagem,\n );\n const quantidadeFornecedor = embalagem?.quantidade_fornecedor ?? 0;\n\n return formData.qtdPedido * quantidadeFornecedor;\n }, [\n formData.qtdPedido,\n formData.fornecedores,\n selectedMarca,\n selectedEmbalagem,\n ]);\n\n // Calcula quantos dias a quantidade selecionada vai durar\n const consumptionForecast = useMemo(() => {\n if (!dailyConsumptionAverages || selectedQtyKg <= 0) {\n return null;\n }\n\n return calculateConsumptionForecast({\n dailyAverages: dailyConsumptionAverages,\n startDate: new Date(),\n totalQuantity: selectedQtyKg,\n });\n }, [dailyConsumptionAverages, selectedQtyKg]);\n\n // Número de dias que a quantidade selecionada vai durar\n const selectedQtyDays = consumptionForecast?.totalDays ?? 0;\n\n // Consumo total no range (sempre de amanhã para frente) usando médias por dia da semana\n const rangeTotalConsumption = useMemo(() => {\n if (!dailyConsumptionAverages) return 0;\n const tomorrow = getTomorrowDate();\n const start = parseDateLocal(rangeStartDate);\n if (isNaN(start.getTime())) return 0;\n\n const effectiveStart = start < tomorrow ? tomorrow : start;\n return calculateTotalConsumptionForRange(\n dailyConsumptionAverages,\n effectiveStart,\n rangeDays,\n );\n }, [dailyConsumptionAverages, rangeStartDate, rangeDays]);\n\n // Combina o timelineData com o dailyConsumptionAverages\n const timelineDataWithConsumption = useMemo(() => {\n if (!timelineData) return undefined;\n\n return {\n ...timelineData,\n timeline: {\n ...timelineData.timeline,\n dailyConsumptionAverage: dailyConsumptionAverages,\n },\n };\n }, [timelineData, dailyConsumptionAverages]);\n\n if (!data) {\n return null;\n }\n\n // Função auxiliar para obter a embalagem selecionada\n const getEmbalagemSelecionada = () => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return null;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return null;\n\n return marca.embalagens?.find((e) => e.label === selectedEmbalagem) ?? null;\n };\n\n // Função auxiliar para obter o valor unitário da embalagem selecionada\n const getValorUnitario = (): number => {\n return getEmbalagemSelecionada()?.valor_unitario ?? 0;\n };\n\n // Função helper para formatar valores monetários em R$ (formato brasileiro)\n const formatCurrency = (value: number): string => {\n const formatted = Number(value).toFixed(2);\n // Separa parte inteira e decimal\n const [integerPart, decimalPart] = formatted.split(\".\");\n // Adiciona pontos para separar milhares\n const integerWithSeparator = integerPart.replace(\n /\\B(?=(\\d{3})+(?!\\d))/g,\n \".\",\n );\n // Retorna no formato brasileiro: R$ 1.234,56\n return `R$ ${integerWithSeparator},${decimalPart}`;\n };\n\n // Função auxiliar para obter a quantidade_fornecedor da embalagem selecionada\n const getQuantidadeFornecedor = (): number => {\n return getEmbalagemSelecionada()?.quantidade_fornecedor ?? 0;\n };\n\n const consumoPeriodos: UnitOption[] = [\n { label: \"7 dias\", value: \"7dias\" },\n { label: \"15 dias\", value: \"15dias\" },\n { label: \"30 dias\", value: \"30dias\" },\n { label: \"60 dias\", value: \"60dias\" },\n ];\n\n const handleQtdPedidoChange = (valor: number) => {\n const valorUnitario = getValorUnitario();\n const novoValorTotal = valor * valorUnitario;\n setFormData((prev) => ({\n ...prev,\n qtdPedido: valor,\n valorTotal: novoValorTotal,\n }));\n };\n\n const handleEmbalagemChange = (embalagemLabel: string) => {\n setSelectedEmbalagem(embalagemLabel);\n // Atualiza o valor total quando a embalagem muda\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return;\n\n const embalagem = marca.embalagens?.find((e) => e.label === embalagemLabel);\n if (!embalagem) return;\n\n const novoValorTotal = formData.qtdPedido * (embalagem.valor_unitario ?? 0);\n setFormData((prev) => ({\n ...prev,\n valorTotal: novoValorTotal,\n }));\n };\n\n // Função para obter as marcas disponíveis do fornecedor selecionado\n const getMarcasDisponiveis = () => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return [];\n return fornecedor.marcas || [];\n };\n\n // Função para obter as embalagens disponíveis da marca selecionada\n const getEmbalagensDisponiveis = () => {\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return [];\n\n const marca = fornecedor.marcas?.find((m) => m.nome === selectedMarca);\n if (!marca) return [];\n\n return marca.embalagens || [];\n };\n\n const handleMarcaChange = (marcaNome: string) => {\n setSelectedMarca(marcaNome);\n // Atualiza a embalagem para a primeira da nova marca\n const fornecedor = formData.fornecedores?.[0];\n if (!fornecedor) return;\n\n const marca = fornecedor.marcas?.find((m) => m.nome === marcaNome);\n if (!marca || !marca.embalagens || marca.embalagens.length === 0) return;\n\n const primeiraEmbalagem = marca.embalagens[0];\n handleEmbalagemChange(primeiraEmbalagem.label);\n };\n\n const handleFornecedorChange = (fornecedorNome: string) => {\n setSelectedFornecedor(fornecedorNome);\n // Atualiza a marca para a primeira do novo fornecedor\n const fornecedor = formData.fornecedores?.find(\n (f) => f.nome === fornecedorNome,\n );\n if (!fornecedor) return;\n\n const primeiraMarca = fornecedor.marcas?.[0];\n if (!primeiraMarca) {\n setSelectedMarca(\"\");\n setSelectedEmbalagem(\"\");\n return;\n }\n\n setSelectedMarca(primeiraMarca.nome);\n\n // Atualiza a embalagem para a primeira da primeira marca\n const primeiraEmbalagem = primeiraMarca.embalagens?.[0];\n if (primeiraEmbalagem) {\n handleEmbalagemChange(primeiraEmbalagem.label);\n } else {\n setSelectedEmbalagem(\"\");\n }\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n onSubmit(formData);\n };\n\n const handleAdicionarSugestao = () => {\n handleQtdPedidoChange(formData?.sugestao_de_compra ?? 0);\n };\n\n const handleAddConsumoPrevisto = () => {\n const kgPerUnit = getQuantidadeFornecedor();\n if (kgPerUnit <= 0 || rangeTotalConsumption <= 0) return;\n const unitsFromConsumo = Math.ceil(rangeTotalConsumption / kgPerUnit);\n handleQtdPedidoChange(unitsFromConsumo);\n };\n\n // Estilos inline para substituir Tailwind\n const styles = {\n container: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"8px\",\n backgroundColor: \"white\",\n borderRadius: \"16px\",\n maxWidth: \"100%\",\n fontFamily: \"Inter, sans-serif\",\n },\n header: {\n display: \"flex\",\n gap: \"8px\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderBottom: \"1px solid #e5e7eb\",\n padding: \"16px\",\n },\n itemTitle: {\n fontSize: \"18px\",\n color: \"#111827\",\n margin: 0,\n fontWeight: \"600\",\n fontFamily: \"Inter, sans-serif\",\n },\n valorUnitario: {\n fontSize: \"14px\",\n fontWeight: \"500\",\n color: \"#000\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontFamily: \"Inter, sans-serif\",\n },\n infoRow: {\n display: \"flex\",\n height: \"32px\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"4px 6px\",\n backgroundColor: \"#F9FAFB\",\n borderRadius: \"4px\",\n border: \"1px solid #E5E7EB\",\n },\n infoRowAlert: {\n backgroundColor: \"#FEF3C7\",\n borderColor: \"#F59E0B\",\n },\n infoRowForecast: {\n backgroundColor: \"#FFF5F0\",\n border: \"none\",\n },\n infoIcon: {\n width: \"20px\",\n height: \"20px\",\n },\n infoText: {\n fontSize: \"14px\",\n color: \"#374151\",\n fontWeight: \"400\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n fontFamily: \"Inter, sans-serif\",\n },\n infoValue: {\n fontSize: \"14px\",\n color: \"#111827\",\n fontWeight: \"300\",\n fontFamily: \"Inter, sans-serif\",\n },\n formGrid: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 1fr 1fr\",\n gap: \"16px\",\n },\n formField: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"8px\",\n },\n label: {\n fontSize: \"14px\",\n fontWeight: \"700\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n select: {\n height: \"42px\",\n padding: \"0 14px\",\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n fontSize: \"14px\",\n fontWeight: \"500\" as const,\n backgroundColor: \"#f8fafc\",\n color: \"#0f172a\",\n cursor: \"pointer\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n boxSizing: \"border-box\" as const,\n lineHeight: \"1\",\n transition: \"border-color 0.15s, box-shadow 0.15s\",\n },\n dateInput: {\n height: \"42px\",\n padding: \"0 14px\",\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n fontSize: \"14px\",\n fontWeight: \"500\" as const,\n backgroundColor: \"#f8fafc\",\n color: \"#0f172a\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n boxSizing: \"border-box\" as const,\n lineHeight: \"1\",\n transition: \"border-color 0.15s, box-shadow 0.15s\",\n width: \"100%\",\n },\n rangeTotal: {\n fontSize: \"20px\",\n fontWeight: \"700\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n display: \"flex\",\n alignItems: \"center\",\n },\n addConsumoButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"28px\",\n height: \"28px\",\n minWidth: \"28px\",\n borderRadius: \"6px\",\n border: \"1px solid #9ca3af\",\n backgroundColor: \"#e5e7eb\",\n color: \"#374151\",\n fontSize: \"16px\",\n fontWeight: \"600\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n fontFamily: \"Inter, sans-serif\",\n },\n addConsumoButtonDisabled: {\n opacity: 0.5,\n cursor: \"not-allowed\",\n backgroundColor: \"#d1d5db\",\n borderColor: \"#9ca3af\",\n },\n stockRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"6px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #E5E7EB\",\n },\n stockInfo: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n width: \"100%\",\n justifyContent: \"space-between\",\n },\n stockDot: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n backgroundColor: \"#EF4444\",\n },\n stockValue: {\n fontSize: \"14px\",\n fontWeight: \"300\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n stockValueContainer: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n consumptionRow: {\n height: \"36px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"6px 12px\",\n borderRadius: \"4px\",\n border: \"1px solid #E5E7EB\",\n },\n consumptionInfo: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n consumptionArrow: {\n width: \"14px\",\n height: \"14px\",\n color: \"#10B981\",\n },\n suggestionRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"12px 16px\",\n backgroundColor: \"#E6FDE8\",\n borderRadius: \"8px\",\n border: \"1px solid #BBF7D0\",\n },\n suggestionInfo: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n suggestionIcon: {\n width: \"16px\",\n height: \"16px\",\n color: \"#000000\",\n },\n suggestionText: {\n fontSize: \"14px\",\n fontWeight: \"300\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n suggestionButton: {\n backgroundColor: \"#5EED65\",\n color: \"black\",\n border: \"none\",\n letterSpacing: \"0.05em\",\n borderRadius: \"6px\",\n padding: \"6px 12px\",\n fontSize: \"12px\",\n fontWeight: \"700\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n fontFamily: \"Inter, sans-serif\",\n },\n suggestionButtonHover: {\n backgroundColor: \"#059669\",\n },\n // Estilos da seção de pedido (estilo calculadora)\n orderSectionContainer: {\n backgroundColor: \"#f5f5f5\",\n borderRadius: \"16px\",\n padding: \"20px\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n gap: \"20px\",\n },\n quantityRow: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"16px\",\n },\n quantityButton: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"56px\",\n height: \"56px\",\n borderRadius: \"16px\",\n background: \"white\",\n color: \"#333\",\n border: \"1px solid rgb(240, 240, 240)\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n },\n quantityButtonHover: {\n background: \"#f8f8f8\",\n transform: \"scale(1.02)\",\n },\n quantityButtonActive: {\n background: \"#f0f0f0\",\n transform: \"scale(0.98)\",\n },\n quantityButtonDisabled: {\n opacity: 0.4,\n cursor: \"not-allowed\",\n },\n quantityInputContainer: {\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n flex: 1,\n maxWidth: \"140px\",\n },\n quantityInput: {\n width: \"100%\",\n height: \"40px\",\n textAlign: \"center\" as const,\n fontSize: \"32px\",\n fontWeight: \"bold\",\n borderRadius: \"12px\",\n color: \"#000\",\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n padding: \"0\",\n margin: \"0\",\n },\n quantityLabel: {\n fontSize: \"14px\",\n color: \"#666\",\n fontWeight: \"500\",\n marginTop: \"4px\",\n textAlign: \"center\" as const,\n fontFamily: \"Inter, sans-serif\",\n },\n totalsRow: {\n display: \"flex\",\n justifyContent: \"center\",\n gap: \"24px\",\n marginTop: \"4px\",\n flexWrap: \"wrap\" as const,\n },\n totalItem: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n },\n totalLabel: {\n fontSize: \"13px\",\n color: \"#888\",\n fontWeight: \"400\",\n fontFamily: \"Inter, sans-serif\",\n },\n totalValue: {\n fontSize: \"14px\",\n fontWeight: \"600\",\n color: \"#111827\",\n fontFamily: \"Inter, sans-serif\",\n },\n totalValueHighlight: {\n fontSize: \"14px\",\n fontWeight: \"700\",\n color: \"#FF4E00\",\n fontFamily: \"Inter, sans-serif\",\n },\n buttons: {\n display: \"flex\",\n gap: \"16px\",\n marginTop: \"24px\",\n },\n button: {\n flex: 1,\n padding: \"12px 24px\",\n borderRadius: \"8px\",\n fontSize: \"16px\",\n fontWeight: \"600\",\n cursor: \"pointer\",\n transition: \"all 0.2s\",\n border: \"none\",\n },\n addButton: {\n backgroundColor: \"#FF4E00\",\n color: \"white\",\n },\n addButtonDisabled: {\n opacity: 0.5,\n cursor: \"not-allowed\",\n },\n addButtonHover: {\n backgroundColor: \"#E63900\",\n },\n cancelButton: {\n backgroundColor: \"#EF4444\",\n color: \"white\",\n },\n cancelButtonHover: {\n backgroundColor: \"#DC2626\",\n },\n };\n\n return (\n <form onSubmit={handleSubmit} style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n <h2 style={styles.itemTitle}>{formData.nome}</h2>\n <div style={styles.valorUnitario}>\n <div\n style={{\n color: \"#FFFF\",\n border: \"1px solid #FF4E00\",\n borderRadius: \"4px\",\n padding: \"4px 8px\",\n backgroundColor: \"#FF4E00\",\n fontWeight: \"600\",\n }}\n >\n {formatCurrency(getValorUnitario())}\n </div>\n </div>\n </div>\n\n <div\n style={{\n padding: \"8px 20px\",\n gap: \"12px\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n }}\n >\n {/* Informações do produto */}\n <div style={styles.infoRow}>\n <div style={styles.infoText}>\n <AlertIcon width={20} height={20} />\n Última compra {formData.ultima_compra?.data}\n </div>\n <div style={styles.infoValue}>\n {Number(formData.ultima_compra?.quantidade ?? 0).toFixed(2)} {unidadeLabelUltimaCompra.toUpperCase()}\n </div>\n </div>\n\n {/* Seletores */}\n <div style={styles.formGrid}>\n <div style={styles.formField}>\n <label style={styles.label}>Fornecedores:</label>\n <StyledSelect\n value={selectedFornecedor}\n onChange={(e) => handleFornecedorChange(e.target.value)}\n >\n {formData.fornecedores?.map((fornecedor) => (\n <option key={fornecedor.nome} value={fornecedor.nome}>\n {fornecedor.nome}\n </option>\n ))}\n </StyledSelect>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Marcas:</label>\n <StyledSelect\n value={selectedMarca}\n onChange={(e) => handleMarcaChange(e.target.value)}\n >\n {getMarcasDisponiveis().map((marca) => (\n <option key={marca.nome} value={marca.nome}>\n {marca.nome}\n </option>\n ))}\n </StyledSelect>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Embalagem:</label>\n <StyledSelect\n value={selectedEmbalagem}\n onChange={(e) => handleEmbalagemChange(e.target.value)}\n >\n {getEmbalagensDisponiveis().map((embalagem) => (\n <option key={embalagem.label} value={embalagem.label}>\n {embalagem.label}\n </option>\n ))}\n </StyledSelect>\n </div>\n </div>\n\n {/* Timeline de estoque (substitui Estoque Atual / Dias de estoque / Consumo / Sugestão de compra) */}\n {timelineDataWithConsumption && (\n <div style={{ marginTop: \"8px\", marginBottom: \"8px\" }}>\n <StockLeadTime\n data={timelineDataWithConsumption}\n controls={true}\n controlsZoomOnly={stockLeadTimeZoomOnly}\n showLegend={showLegendTimeline}\n size=\"sm\"\n showSuggestionBar={showSuggestionBar}\n unitLabel={unidadeLabel}\n onAddSuggestedWeight={(weightKg) =>\n handleQtdPedidoChange(weightKg)\n }\n selectedQty={selectedQtyKg}\n selectedQtyDays={selectedQtyDays}\n />\n </div>\n )}\n\n {/* Data, dias e consumo total no período */}\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: isMobile ? \"1fr 1fr\" : \"1fr 1fr 1fr\",\n gap: \"16px\",\n marginTop: \"8px\",\n alignItems: \"flex-start\",\n }}\n >\n <div style={styles.formField}>\n <label style={styles.label}>Data inicial</label>\n <StyledDateInput\n value={rangeStartDate}\n min={getTomorrowYYYYMMDD()}\n onChange={(e) => setRangeStartDate(e.target.value)}\n aria-label=\"Data inicial\"\n />\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Quantos dias?</label>\n <StyledSelect\n value={rangeDays}\n onChange={(e) => setRangeDays(Number(e.target.value))}\n aria-label=\"Quantos dias?\"\n >\n {DAY_OPTIONS.map((d) => (\n <option key={d} value={d}>\n {d}\n </option>\n ))}\n </StyledSelect>\n </div>\n <div\n style={{\n ...styles.formField,\n ...(isMobile ? { gridColumn: \"1 / -1\" } : {}),\n }}\n >\n <label style={styles.label}>Consumo previsto</label>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 14px\",\n backgroundColor: \"#f8fafc\",\n border: \"1.5px solid #e2e8f0\",\n borderRadius: \"10px\",\n height: \"42px\",\n }}\n >\n <span\n style={{\n fontSize: \"18px\",\n fontWeight: \"700\",\n color: \"#0f172a\",\n fontFamily: \"Inter, sans-serif\",\n letterSpacing: \"-0.3px\",\n }}\n >\n {rangeTotalConsumption.toFixed(2)}{\" \"}\n <span\n style={{\n fontSize: \"13px\",\n fontWeight: \"500\",\n color: \"#64748b\",\n }}\n >\n {unidadeLabel}\n </span>\n </span>\n <button\n type=\"button\"\n onClick={handleAddConsumoPrevisto}\n disabled={\n rangeTotalConsumption <= 0 || getQuantidadeFornecedor() <= 0\n }\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"30px\",\n height: \"30px\",\n minWidth: \"30px\",\n borderRadius: \"8px\",\n border: \"none\",\n backgroundColor:\n rangeTotalConsumption > 0 && getQuantidadeFornecedor() > 0\n ? \"#FF4E00\"\n : \"#e5e7eb\",\n color:\n rangeTotalConsumption > 0 && getQuantidadeFornecedor() > 0\n ? \"white\"\n : \"#9ca3af\",\n fontSize: \"16px\",\n cursor:\n rangeTotalConsumption > 0 && getQuantidadeFornecedor() > 0\n ? \"pointer\"\n : \"not-allowed\",\n opacity:\n rangeTotalConsumption <= 0 || getQuantidadeFornecedor() <= 0\n ? 0.5\n : 1,\n transition: \"all 0.2s\",\n fontFamily: \"Inter, sans-serif\",\n }}\n onMouseEnter={(e) => {\n if (\n rangeTotalConsumption > 0 &&\n getQuantidadeFornecedor() > 0\n ) {\n e.currentTarget.style.backgroundColor = \"#e04400\";\n }\n }}\n onMouseLeave={(e) => {\n if (\n rangeTotalConsumption > 0 &&\n getQuantidadeFornecedor() > 0\n ) {\n e.currentTarget.style.backgroundColor = \"#FF4E00\";\n }\n }}\n aria-label=\"Definir quantidade pelo consumo previsto\"\n >\n ↻\n </button>\n </div>\n </div>\n </div>\n\n {/* Seção de pedido */}\n <div style={styles.orderSectionContainer}>\n {/* Linha da quantidade com botões */}\n <div style={styles.quantityRow}>\n {/* Botão Diminuir */}\n <button\n type=\"button\"\n style={{\n ...styles.quantityButton,\n ...(formData.qtdPedido <= 0\n ? styles.quantityButtonDisabled\n : {}),\n }}\n onClick={() =>\n handleQtdPedidoChange(Math.max(0, formData.qtdPedido - 1))\n }\n onMouseEnter={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background =\n styles.quantityButton.background!;\n e.currentTarget.style.transform = \"\";\n }}\n onMouseDown={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.background =\n styles.quantityButtonActive.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonActive.transform!;\n }\n }}\n onMouseUp={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }\n }}\n disabled={formData.qtdPedido <= 0}\n aria-label=\"Diminuir quantidade\"\n >\n <svg\n style={{ width: \"24px\", height: \"24px\" }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"#000\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2.5}\n d=\"M20 12H4\"\n />\n </svg>\n </button>\n\n {/* Input da Quantidade */}\n <div style={styles.quantityInputContainer}>\n <input\n type=\"number\"\n value={formData.qtdPedido}\n onChange={(e) =>\n handleQtdPedidoChange(\n Math.max(0, parseInt(e.target.value) || 0),\n )\n }\n style={styles.quantityInput}\n className=\"order-form-quantity-input\"\n min=\"0\"\n aria-label=\"Quantidade\"\n />\n <span style={styles.quantityLabel}>\n {selectedEmbalagem || \"unidades\"}\n </span>\n </div>\n\n {/* Botão Aumentar */}\n <button\n type=\"button\"\n style={styles.quantityButton}\n onClick={() => handleQtdPedidoChange(formData.qtdPedido + 1)}\n onMouseEnter={(e) => {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background =\n styles.quantityButton.background!;\n e.currentTarget.style.transform = \"\";\n }}\n onMouseDown={(e) => {\n e.currentTarget.style.background =\n styles.quantityButtonActive.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonActive.transform!;\n }}\n onMouseUp={(e) => {\n e.currentTarget.style.background =\n styles.quantityButtonHover.background!;\n e.currentTarget.style.transform =\n styles.quantityButtonHover.transform!;\n }}\n aria-label=\"Aumentar quantidade\"\n >\n <svg\n style={{ width: \"24px\", height: \"24px\" }}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"#FF4E00\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2.5}\n d=\"M12 4v16m8-8H4\"\n />\n </svg>\n </button>\n </div>\n\n {/* Linha dos totais */}\n {/* Totais discretos */}\n <div\n style={{\n ...styles.totalsRow,\n ...(isMobile\n ? {\n flexDirection: \"column\",\n gap: \"12px\",\n alignItems: \"stretch\",\n }\n : {}),\n }}\n >\n <div\n style={{\n ...styles.totalItem,\n ...(isMobile\n ? { justifyContent: \"space-between\", width: \"100%\" }\n : {}),\n }}\n >\n <span style={styles.totalLabel}>Total:</span>\n <span style={styles.totalValue}>\n {(formData.qtdPedido * getQuantidadeFornecedor()).toFixed(2)} {unidadeLabel}\n </span>\n </div>\n <div\n style={{\n ...styles.totalItem,\n ...(isMobile\n ? { justifyContent: \"space-between\", width: \"100%\" }\n : {}),\n }}\n >\n <span style={styles.totalLabel}>Valor:</span>\n <span style={styles.totalValueHighlight}>\n {formatCurrency(formData.qtdPedido * getValorUnitario())}\n </span>\n </div>\n {selectedQtyDays > 0 && (\n <div\n style={{\n ...styles.totalItem,\n ...(isMobile\n ? { justifyContent: \"space-between\", width: \"100%\" }\n : {}),\n }}\n >\n <span style={styles.totalLabel}>Duração:</span>\n <span style={styles.totalValue}>\n {selectedQtyDays % 1 === 0\n ? selectedQtyDays.toString()\n : selectedQtyDays.toFixed(1)}{\" \"}\n {selectedQtyDays === 1 ? \"dia\" : \"dias\"}\n </span>\n </div>\n )}\n </div>\n </div>\n\n {/* Botões */}\n <div style={styles.buttons}>\n <button\n type=\"submit\"\n disabled={formData.qtdPedido <= 0}\n style={{\n ...styles.button,\n ...styles.addButton,\n ...(formData.qtdPedido <= 0 ? styles.addButtonDisabled : {}),\n }}\n onMouseEnter={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.backgroundColor =\n styles.addButtonHover.backgroundColor!;\n }\n }}\n onMouseLeave={(e) => {\n if (formData.qtdPedido > 0) {\n e.currentTarget.style.backgroundColor =\n styles.addButton.backgroundColor!;\n }\n }}\n >\n Adicionar\n </button>\n <button\n type=\"button\"\n style={{ ...styles.button, ...styles.cancelButton }}\n onClick={onCancel}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n styles.cancelButtonHover.backgroundColor!;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor =\n styles.cancelButton.backgroundColor!;\n }}\n >\n Cancelar\n </button>\n </div>\n </div>\n </form>\n );\n}\n"],"names":["DAY_OPTIONS","MIN_INITIAL_DAYS","toYYYYMMDD","d","y","m","day","parseDateLocal","s","parts","getTomorrowYYYYMMDD","t","getTomorrowDate","getClosestDays","suggestion","a","b","getInitialDaysWithMinimum","days","closestDay","FIELD_HEIGHT","fieldWrapperStyle","fieldInnerStyle","StyledSelect","children","props","jsxs","jsx","StyledDateInput","OrderForm","data","onSubmit","onCancel","timelineData","fornecedoresOptions","marcasOptions","embalagensOptions","dailyConsumptionAverages","showSuggestionBar","showLegendTimeline","initialQtdDays","stockLeadTimeZoomOnly","React","style","isMobile","setIsMobile","useState","useEffect","checkMobile","getSuggestionDays","restockSuggestionStart","restockSuggestionEnd","startDate","diffTime","diffDays","getInitialRangeStartDate","tomorrow","end","_a","endDate","getInitialRangeDays","getInitialRangeDaysResolved","optimalSelection","fornecedor","suggestionDays","primeiraMarca","_b","primeiraEmbalagem","_c","bestOption","marca","embalagem","kgPorEmbalagem","qty","totalKg","forecast","calculateConsumptionForecast","totalValue","daysDifference","getInitialValorUnitario","unidadeLabel","unidadeLabelUltimaCompra","formData","setFormData","selectedFornecedor","setSelectedFornecedor","selectedMarca","setSelectedMarca","_g","_f","_e","_d","selectedEmbalagem","setSelectedEmbalagem","_m","_l","_k","_j","_i","_h","rangeStartDate","setRangeStartDate","rangeDays","setRangeDays","start","e","selectedQtyKg","useMemo","quantidadeFornecedor","consumptionForecast","selectedQtyDays","rangeTotalConsumption","effectiveStart","calculateTotalConsumptionForRange","timelineDataWithConsumption","getEmbalagemSelecionada","getValorUnitario","formatCurrency","value","formatted","integerPart","decimalPart","getQuantidadeFornecedor","handleQtdPedidoChange","valor","valorUnitario","novoValorTotal","prev","handleEmbalagemChange","embalagemLabel","getMarcasDisponiveis","getEmbalagensDisponiveis","handleMarcaChange","marcaNome","handleFornecedorChange","fornecedorNome","handleSubmit","handleAddConsumoPrevisto","kgPerUnit","unitsFromConsumo","styles","AlertIcon","_n","_o","_p","StockLeadTime","weightKg"],"mappings":"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"}
package/build/index11.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { j as n } from "./index24.js";
2
- import r from "react";
2
+ import o from "react";
3
3
  import { OrderForm as j } from "./index10.js";
4
- import E from "./index17.js";
5
- function g({
6
- isOpen: o,
4
+ import y from "./index17.js";
5
+ function O({
6
+ isOpen: r,
7
7
  onClose: t,
8
8
  data: i,
9
9
  onSubmit: s,
@@ -20,16 +20,16 @@ function g({
20
20
  s(e), t();
21
21
  }, x = () => {
22
22
  t();
23
- }, [b, M] = r.useState(!1);
24
- return r.useEffect(() => {
23
+ }, [b, M] = o.useState(!1);
24
+ return o.useEffect(() => {
25
25
  const e = () => {
26
26
  M(window.innerWidth <= 768);
27
27
  };
28
28
  return e(), window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
29
29
  }, []), /* @__PURE__ */ n.jsx(
30
- E,
30
+ y,
31
31
  {
32
- isOpen: o,
32
+ isOpen: r,
33
33
  onClose: t,
34
34
  width: b ? "100%" : "800px",
35
35
  minHeight: "auto",
@@ -48,13 +48,14 @@ function g({
48
48
  embalagensOptions: m,
49
49
  dailyConsumptionAverages: c,
50
50
  showSuggestionBar: u,
51
- showLegendTimeline: f
51
+ showLegendTimeline: f,
52
+ stockLeadTimeZoomOnly: !0
52
53
  }
53
54
  ) : null
54
55
  }
55
56
  );
56
57
  }
57
58
  export {
58
- g as OrderModal
59
+ O as OrderModal
59
60
  };
60
61
  //# sourceMappingURL=index11.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index11.js","sources":["../src/components/OrderModal/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { OrderForm, OrderFormData } from \"../OrderForm\";\nimport { type TimelineData } from \"../StockLeadTime\";\nimport Modal from \"../Modal\";\nimport { UnitOption } from \"../UnitSelect\";\nimport { type DailyConsumptionAverage } from \"../../utils\";\n\nexport interface OrderModalProps {\n isOpen: boolean;\n onClose: () => void;\n data: OrderFormData;\n onSubmit: (data: OrderFormData) => void;\n timelineData?: TimelineData;\n fornecedoresOptions: UnitOption[];\n marcasOptions: UnitOption[];\n embalagensOptions: UnitOption[];\n /** Média de consumo por dia da semana para cálculo de previsão */\n dailyConsumptionAverages?: DailyConsumptionAverage;\n /** Exibe ou oculta a barra amarela (Sugestão de Compra) no StockLeadTime. @default true */\n showSuggestionBar?: boolean;\n /** Exibe ou oculta a legenda da timeline (StockLeadTime) dentro do modal. @default false */\n showLegendTimeline?: boolean;\n /** Quantidade de dias padrão para o select \"Quantos dias?\" (cálculo de estoque). Se definido, o modal abre já com esse valor selecionado. */\n defaultQtdDays?: number;\n}\n\nexport function OrderModal({\n isOpen,\n onClose,\n data,\n onSubmit,\n timelineData,\n fornecedoresOptions,\n marcasOptions,\n embalagensOptions,\n dailyConsumptionAverages,\n showSuggestionBar = true,\n showLegendTimeline = false,\n defaultQtdDays,\n}: OrderModalProps) {\n // Alias para compatibilidade (dias iniciais vão via initialQtdDays no OrderForm)\n const dataWithDefaultDays = data;\n const handleSubmit = (formData: OrderFormData) => {\n onSubmit(formData);\n onClose();\n };\n\n const handleCancel = () => {\n onClose();\n };\n\n // Detecta se é mobile (largura <= 768px)\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, []);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n width={isMobile ? \"100%\" : \"800px\"}\n minHeight=\"auto\"\n title=\"\"\n styles={{ padding: \"0px\" }}\n >\n {data ? (\n <OrderForm\n data={dataWithDefaultDays}\n initialQtdDays={defaultQtdDays}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n timelineData={timelineData}\n fornecedoresOptions={fornecedoresOptions}\n marcasOptions={marcasOptions}\n embalagensOptions={embalagensOptions}\n dailyConsumptionAverages={dailyConsumptionAverages}\n showSuggestionBar={showSuggestionBar}\n showLegendTimeline={showLegendTimeline}\n />\n ) : null}\n </Modal>\n );\n}\n"],"names":["OrderModal","isOpen","onClose","data","onSubmit","timelineData","fornecedoresOptions","marcasOptions","embalagensOptions","dailyConsumptionAverages","showSuggestionBar","showLegendTimeline","defaultQtdDays","dataWithDefaultDays","handleSubmit","formData","handleCancel","isMobile","setIsMobile","React","checkMobile","jsx","Modal","OrderForm"],"mappings":";;;;AA2BO,SAASA,EAAW;AAAA,EACzB,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,0BAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,oBAAAC,IAAqB;AAAA,EACrB,gBAAAC;AACF,GAAoB;AAElB,QAAMC,IAAsBV,GACtBW,IAAe,CAACC,MAA4B;AAChD,IAAAX,EAASW,CAAQ,GACjBb,EAAA;AAAA,EACF,GAEMc,IAAe,MAAM;AACzB,IAAAd,EAAA;AAAA,EACF,GAGM,CAACe,GAAUC,CAAW,IAAIC,EAAM,SAAS,EAAK;AAEpD,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAMC,IAAc,MAAM;AACxB,MAAAF,EAAY,OAAO,cAAc,GAAG;AAAA,IACtC;AAEA,WAAAE,EAAA,GACA,OAAO,iBAAiB,UAAUA,CAAW,GAEtC,MAAM,OAAO,oBAAoB,UAAUA,CAAW;AAAA,EAC/D,GAAG,CAAA,CAAE,GAGHC,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,QAAArB;AAAA,MACA,SAAAC;AAAA,MACA,OAAOe,IAAW,SAAS;AAAA,MAC3B,WAAU;AAAA,MACV,OAAM;AAAA,MACN,QAAQ,EAAE,SAAS,MAAA;AAAA,MAElB,UAAAd,IACCkB,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAMV;AAAA,UACN,gBAAgBD;AAAA,UAChB,UAAUE;AAAA,UACV,UAAUE;AAAA,UACV,cAAAX;AAAA,UACA,qBAAAC;AAAA,UACA,eAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,0BAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,oBAAAC;AAAA,QAAA;AAAA,MAAA,IAEA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
1
+ {"version":3,"file":"index11.js","sources":["../src/components/OrderModal/index.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { OrderForm, OrderFormData } from \"../OrderForm\";\nimport { type TimelineData } from \"../StockLeadTime\";\nimport Modal from \"../Modal\";\nimport { UnitOption } from \"../UnitSelect\";\nimport { type DailyConsumptionAverage } from \"../../utils\";\n\nexport interface OrderModalProps {\n isOpen: boolean;\n onClose: () => void;\n data: OrderFormData;\n onSubmit: (data: OrderFormData) => void;\n timelineData?: TimelineData;\n fornecedoresOptions: UnitOption[];\n marcasOptions: UnitOption[];\n embalagensOptions: UnitOption[];\n /** Média de consumo por dia da semana para cálculo de previsão */\n dailyConsumptionAverages?: DailyConsumptionAverage;\n /** Exibe ou oculta a barra amarela (Sugestão de Compra) no StockLeadTime. @default true */\n showSuggestionBar?: boolean;\n /** Exibe ou oculta a legenda da timeline (StockLeadTime) dentro do modal. @default false */\n showLegendTimeline?: boolean;\n /** Quantidade de dias padrão para o select \"Quantos dias?\" (cálculo de estoque). Se definido, o modal abre já com esse valor selecionado. */\n defaultQtdDays?: number;\n}\n\nexport function OrderModal({\n isOpen,\n onClose,\n data,\n onSubmit,\n timelineData,\n fornecedoresOptions,\n marcasOptions,\n embalagensOptions,\n dailyConsumptionAverages,\n showSuggestionBar = true,\n showLegendTimeline = false,\n defaultQtdDays,\n}: OrderModalProps) {\n // Alias para compatibilidade (dias iniciais vão via initialQtdDays no OrderForm)\n const dataWithDefaultDays = data;\n const handleSubmit = (formData: OrderFormData) => {\n onSubmit(formData);\n onClose();\n };\n\n const handleCancel = () => {\n onClose();\n };\n\n // Detecta se é mobile (largura <= 768px)\n const [isMobile, setIsMobile] = React.useState(false);\n\n React.useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= 768);\n };\n\n checkMobile();\n window.addEventListener(\"resize\", checkMobile);\n\n return () => window.removeEventListener(\"resize\", checkMobile);\n }, []);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n width={isMobile ? \"100%\" : \"800px\"}\n minHeight=\"auto\"\n title=\"\"\n styles={{ padding: \"0px\" }}\n >\n {data ? (\n <OrderForm\n data={dataWithDefaultDays}\n initialQtdDays={defaultQtdDays}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n timelineData={timelineData}\n fornecedoresOptions={fornecedoresOptions}\n marcasOptions={marcasOptions}\n embalagensOptions={embalagensOptions}\n dailyConsumptionAverages={dailyConsumptionAverages}\n showSuggestionBar={showSuggestionBar}\n showLegendTimeline={showLegendTimeline}\n stockLeadTimeZoomOnly={true}\n />\n ) : null}\n </Modal>\n );\n}\n"],"names":["OrderModal","isOpen","onClose","data","onSubmit","timelineData","fornecedoresOptions","marcasOptions","embalagensOptions","dailyConsumptionAverages","showSuggestionBar","showLegendTimeline","defaultQtdDays","dataWithDefaultDays","handleSubmit","formData","handleCancel","isMobile","setIsMobile","React","checkMobile","jsx","Modal","OrderForm"],"mappings":";;;;AA2BO,SAASA,EAAW;AAAA,EACzB,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,0BAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,oBAAAC,IAAqB;AAAA,EACrB,gBAAAC;AACF,GAAoB;AAElB,QAAMC,IAAsBV,GACtBW,IAAe,CAACC,MAA4B;AAChD,IAAAX,EAASW,CAAQ,GACjBb,EAAA;AAAA,EACF,GAEMc,IAAe,MAAM;AACzB,IAAAd,EAAA;AAAA,EACF,GAGM,CAACe,GAAUC,CAAW,IAAIC,EAAM,SAAS,EAAK;AAEpD,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAMC,IAAc,MAAM;AACxB,MAAAF,EAAY,OAAO,cAAc,GAAG;AAAA,IACtC;AAEA,WAAAE,EAAA,GACA,OAAO,iBAAiB,UAAUA,CAAW,GAEtC,MAAM,OAAO,oBAAoB,UAAUA,CAAW;AAAA,EAC/D,GAAG,CAAA,CAAE,GAGHC,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,QAAArB;AAAA,MACA,SAAAC;AAAA,MACA,OAAOe,IAAW,SAAS;AAAA,MAC3B,WAAU;AAAA,MACV,OAAM;AAAA,MACN,QAAQ,EAAE,SAAS,MAAA;AAAA,MAElB,UAAAd,IACCkB,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAMV;AAAA,UACN,gBAAgBD;AAAA,UAChB,UAAUE;AAAA,UACV,UAAUE;AAAA,UACV,cAAAX;AAAA,UACA,qBAAAC;AAAA,UACA,eAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,0BAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,oBAAAC;AAAA,UACA,uBAAuB;AAAA,QAAA;AAAA,MAAA,IAEvB;AAAA,IAAA;AAAA,EAAA;AAGV;"}