eatopia-ds 0.0.948 → 0.0.950
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index10.js +327 -299
- package/build/index10.js.map +1 -1
- package/build/index11.js +23 -21
- package/build/index11.js.map +1 -1
- package/build/index18.js +657 -570
- package/build/index18.js.map +1 -1
- package/build/index31.js +2 -2
- package/build/index32.js +1 -1
- package/build/index34.js +2 -2
- package/build/index35.js +1 -1
- package/build/index46.js.map +1 -1
- package/build/index47.js +66 -52
- package/build/index47.js.map +1 -1
- package/build/index48.js +26 -22
- package/build/index48.js.map +1 -1
- package/build/index49.js.map +1 -1
- package/build/index50.js +52 -66
- package/build/index50.js.map +1 -1
- package/build/index51.js +22 -26
- package/build/index51.js.map +1 -1
- package/package.json +1 -1
package/build/index10.js.map
CHANGED
|
@@ -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 } | null;\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}\n\nexport function OrderForm({\n data,\n onSubmit,\n onCancel,\n timelineData,\n fornecedoresOptions,\n marcasOptions,\n embalagensOptions,\n dailyConsumptionAverages,\n showSuggestionBar = true,\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 // 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 [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(getInitialRangeDays);\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 = getClosestDays(suggestionDays);\n setRangeStartDate(start);\n setRangeDays(days);\n }, [timelineData, data]);\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: \"36px\",\n padding: \"6px 10px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n backgroundColor: \"white\",\n color: \"#374151\",\n cursor: \"pointer\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n boxSizing: \"border-box\" as const,\n lineHeight: \"1\",\n },\n dateInput: {\n height: \"36px\",\n padding: \"6px 10px\",\n border: \"1px solid #d1d5db\",\n borderRadius: \"6px\",\n fontSize: \"14px\",\n backgroundColor: \"white\",\n color: \"#374151\",\n outline: \"none\",\n fontFamily: \"Inter, sans-serif\",\n boxSizing: \"border-box\" as const,\n lineHeight: \"1\",\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)} KG\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 <select\n value={selectedFornecedor}\n onChange={(e) => handleFornecedorChange(e.target.value)}\n style={styles.select}\n >\n {formData.fornecedores?.map((fornecedor) => (\n <option key={fornecedor.nome} value={fornecedor.nome}>\n {fornecedor.nome}\n </option>\n ))}\n </select>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Marcas:</label>\n <select\n value={selectedMarca}\n onChange={(e) => handleMarcaChange(e.target.value)}\n style={styles.select}\n >\n {getMarcasDisponiveis().map((marca) => (\n <option key={marca.nome} value={marca.nome}>\n {marca.nome}\n </option>\n ))}\n </select>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Embalagem:</label>\n <select\n value={selectedEmbalagem}\n onChange={(e) => handleEmbalagemChange(e.target.value)}\n style={styles.select}\n >\n {getEmbalagensDisponiveis().map((embalagem) => (\n <option key={embalagem.label} value={embalagem.label}>\n {embalagem.label}\n </option>\n ))}\n </select>\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={false}\n size=\"sm\"\n showSuggestionBar={showSuggestionBar}\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 ...styles.formGrid,\n marginTop: \"8px\",\n alignItems: \"flex-start\",\n }}\n >\n <div style={styles.formField}>\n <label style={styles.label}>Data inicial</label>\n <input\n type=\"date\"\n value={rangeStartDate}\n min={getTomorrowYYYYMMDD()}\n onChange={(e) => setRangeStartDate(e.target.value)}\n style={styles.dateInput}\n aria-label=\"Data inicial\"\n />\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Quantos dias?</label>\n <select\n value={rangeDays}\n onChange={(e) => setRangeDays(Number(e.target.value))}\n style={styles.select}\n aria-label=\"Quantos dias?\"\n >\n {DAY_OPTIONS.map((d) => (\n <option key={d} value={d}>\n {d}\n </option>\n ))}\n </select>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Consumo previsto</label>\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}\n >\n <div style={styles.rangeTotal}>\n {rangeTotalConsumption.toFixed(2)} kg\n </div>\n <button\n type=\"button\"\n onClick={handleAddConsumoPrevisto}\n disabled={\n rangeTotalConsumption <= 0 || getQuantidadeFornecedor() <= 0\n }\n style={{\n ...styles.addConsumoButton,\n ...(rangeTotalConsumption <= 0 ||\n getQuantidadeFornecedor() <= 0\n ? styles.addConsumoButtonDisabled\n : {}),\n }}\n onMouseEnter={(e) => {\n if (\n rangeTotalConsumption > 0 &&\n getQuantidadeFornecedor() > 0\n ) {\n e.currentTarget.style.backgroundColor = \"#d1d5db\";\n }\n }}\n onMouseLeave={(e) => {\n if (\n rangeTotalConsumption > 0 &&\n getQuantidadeFornecedor() > 0\n ) {\n e.currentTarget.style.backgroundColor = \"#e5e7eb\";\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)} kg\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(\n formData.qtdPedido *\n getQuantidadeFornecedor() *\n getValorUnitario(),\n )}\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","OrderForm","data","onSubmit","onCancel","timelineData","fornecedoresOptions","marcasOptions","embalagensOptions","dailyConsumptionAverages","showSuggestionBar","React","style","isMobile","setIsMobile","useState","useEffect","checkMobile","getSuggestionDays","restockSuggestionStart","restockSuggestionEnd","startDate","diffTime","diffDays","getInitialRangeStartDate","tomorrow","end","_a","endDate","getInitialRangeDays","optimalSelection","fornecedor","suggestionDays","primeiraMarca","_b","primeiraEmbalagem","_c","bestOption","marca","embalagem","kgPorEmbalagem","qty","totalKg","forecast","calculateConsumptionForecast","totalValue","daysDifference","getInitialValorUnitario","formData","setFormData","selectedFornecedor","setSelectedFornecedor","selectedMarca","setSelectedMarca","_f","_e","_d","selectedEmbalagem","setSelectedEmbalagem","_l","_k","_j","_i","_h","_g","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","jsxs","jsx","AlertIcon","_m","_n","_o","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;\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}\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}: 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 // 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(getInitialRangeDays);\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 = getClosestDays(suggestionDays);\n setRangeStartDate(start);\n setRangeDays(days);\n }, [timelineData, data]);\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 <select\n value={selectedFornecedor}\n onChange={(e) => handleFornecedorChange(e.target.value)}\n style={styles.select}\n >\n {formData.fornecedores?.map((fornecedor) => (\n <option key={fornecedor.nome} value={fornecedor.nome}>\n {fornecedor.nome}\n </option>\n ))}\n </select>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Marcas:</label>\n <select\n value={selectedMarca}\n onChange={(e) => handleMarcaChange(e.target.value)}\n style={styles.select}\n >\n {getMarcasDisponiveis().map((marca) => (\n <option key={marca.nome} value={marca.nome}>\n {marca.nome}\n </option>\n ))}\n </select>\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Embalagem:</label>\n <select\n value={selectedEmbalagem}\n onChange={(e) => handleEmbalagemChange(e.target.value)}\n style={styles.select}\n >\n {getEmbalagensDisponiveis().map((embalagem) => (\n <option key={embalagem.label} value={embalagem.label}>\n {embalagem.label}\n </option>\n ))}\n </select>\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 <input\n type=\"date\"\n value={rangeStartDate}\n min={getTomorrowYYYYMMDD()}\n onChange={(e) => setRangeStartDate(e.target.value)}\n style={styles.dateInput}\n aria-label=\"Data inicial\"\n />\n </div>\n <div style={styles.formField}>\n <label style={styles.label}>Quantos dias?</label>\n <select\n value={rangeDays}\n onChange={(e) => setRangeDays(Number(e.target.value))}\n style={styles.select}\n aria-label=\"Quantos dias?\"\n >\n {DAY_OPTIONS.map((d) => (\n <option key={d} value={d}>\n {d}\n </option>\n ))}\n </select>\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","OrderForm","data","onSubmit","onCancel","timelineData","fornecedoresOptions","marcasOptions","embalagensOptions","dailyConsumptionAverages","showSuggestionBar","showLegendTimeline","React","style","isMobile","setIsMobile","useState","useEffect","checkMobile","getSuggestionDays","restockSuggestionStart","restockSuggestionEnd","startDate","diffTime","diffDays","getInitialRangeStartDate","tomorrow","end","_a","endDate","getInitialRangeDays","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","jsxs","jsx","AlertIcon","_n","_o","_p","StockLeadTime","weightKg"],"mappings":"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"}
|
package/build/index11.js
CHANGED
|
@@ -1,56 +1,58 @@
|
|
|
1
1
|
import { j as r } from "./index24.js";
|
|
2
2
|
import n from "react";
|
|
3
|
-
import { OrderForm as
|
|
4
|
-
import
|
|
5
|
-
function
|
|
3
|
+
import { OrderForm as b } from "./index10.js";
|
|
4
|
+
import M from "./index17.js";
|
|
5
|
+
function g({
|
|
6
6
|
isOpen: o,
|
|
7
7
|
onClose: t,
|
|
8
8
|
data: i,
|
|
9
9
|
onSubmit: s,
|
|
10
10
|
timelineData: d,
|
|
11
|
-
fornecedoresOptions:
|
|
12
|
-
marcasOptions:
|
|
13
|
-
embalagensOptions:
|
|
14
|
-
dailyConsumptionAverages:
|
|
15
|
-
showSuggestionBar: u = !0
|
|
11
|
+
fornecedoresOptions: l,
|
|
12
|
+
marcasOptions: m,
|
|
13
|
+
embalagensOptions: a,
|
|
14
|
+
dailyConsumptionAverages: c,
|
|
15
|
+
showSuggestionBar: u = !0,
|
|
16
|
+
showLegendTimeline: f = !1
|
|
16
17
|
}) {
|
|
17
18
|
const p = (e) => {
|
|
18
19
|
s(e), t();
|
|
19
|
-
},
|
|
20
|
+
}, h = () => {
|
|
20
21
|
t();
|
|
21
|
-
}, [
|
|
22
|
+
}, [w, x] = n.useState(!1);
|
|
22
23
|
return n.useEffect(() => {
|
|
23
24
|
const e = () => {
|
|
24
|
-
|
|
25
|
+
x(window.innerWidth <= 768);
|
|
25
26
|
};
|
|
26
27
|
return e(), window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
|
|
27
28
|
}, []), /* @__PURE__ */ r.jsx(
|
|
28
|
-
|
|
29
|
+
M,
|
|
29
30
|
{
|
|
30
31
|
isOpen: o,
|
|
31
32
|
onClose: t,
|
|
32
|
-
width:
|
|
33
|
+
width: w ? "100%" : "800px",
|
|
33
34
|
minHeight: "auto",
|
|
34
35
|
title: "",
|
|
35
36
|
styles: { padding: "0px" },
|
|
36
37
|
children: i ? /* @__PURE__ */ r.jsx(
|
|
37
|
-
|
|
38
|
+
b,
|
|
38
39
|
{
|
|
39
40
|
data: i,
|
|
40
41
|
onSubmit: p,
|
|
41
|
-
onCancel:
|
|
42
|
+
onCancel: h,
|
|
42
43
|
timelineData: d,
|
|
43
|
-
fornecedoresOptions:
|
|
44
|
-
marcasOptions:
|
|
45
|
-
embalagensOptions:
|
|
46
|
-
dailyConsumptionAverages:
|
|
47
|
-
showSuggestionBar: u
|
|
44
|
+
fornecedoresOptions: l,
|
|
45
|
+
marcasOptions: m,
|
|
46
|
+
embalagensOptions: a,
|
|
47
|
+
dailyConsumptionAverages: c,
|
|
48
|
+
showSuggestionBar: u,
|
|
49
|
+
showLegendTimeline: f
|
|
48
50
|
}
|
|
49
51
|
) : null
|
|
50
52
|
}
|
|
51
53
|
);
|
|
52
54
|
}
|
|
53
55
|
export {
|
|
54
|
-
|
|
56
|
+
g as OrderModal
|
|
55
57
|
};
|
|
56
58
|
//# sourceMappingURL=index11.js.map
|
package/build/index11.js.map
CHANGED
|
@@ -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}\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}: OrderModalProps) {\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%\" : \"
|
|
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}\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}: OrderModalProps) {\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={data}\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","handleSubmit","formData","handleCancel","isMobile","setIsMobile","React","checkMobile","jsx","Modal","OrderForm"],"mappings":";;;;AAyBO,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;AACvB,GAAoB;AAClB,QAAMC,IAAe,CAACC,MAA4B;AAChD,IAAAT,EAASS,CAAQ,GACjBX,EAAA;AAAA,EACF,GAEMY,IAAe,MAAM;AACzB,IAAAZ,EAAA;AAAA,EACF,GAGM,CAACa,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,QAAAnB;AAAA,MACA,SAAAC;AAAA,MACA,OAAOa,IAAW,SAAS;AAAA,MAC3B,WAAU;AAAA,MACV,OAAM;AAAA,MACN,QAAQ,EAAE,SAAS,MAAA;AAAA,MAElB,UAAAZ,IACCgB,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAAlB;AAAA,UACA,UAAUS;AAAA,UACV,UAAUE;AAAA,UACV,cAAAT;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;"}
|