@roax/ui 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -170
- package/dist/index.js +591 -76
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +613 -75
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -5
- package/src/styles/_roax-colors.scss +107 -8
- package/src/styles/index.scss +3 -8
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js","../src/components/buttons/SolidButton.jsx","../src/components/buttons/OutlineButton.jsx","../src/components/buttons/TextButton.jsx","../src/components/buttons/IconButton.jsx","../src/components/custom-tooltip/CustomTooltip.jsx"],"sourcesContent":["// Buttons\nexport { default as SolidButton } from './components/buttons/SolidButton'\nexport { default as OutlineButton } from './components/buttons/OutlineButton'\nexport { default as TextButton } from './components/buttons/TextButton'\nexport { default as IconButton } from './components/buttons/IconButton'\n\n// Utilities\nexport { default as CustomTooltip } from './components/custom-tooltip/CustomTooltip'\n","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport './SolidButton.scss'\n\nexport default function SolidButton({\n title = 'Button',\n onClick,\n color = 'custom-primary',\n textColor = 'custom-white',\n className = '',\n loading = false,\n icon,\n svgComponent: SvgComponent,\n type = 'submit',\n badge,\n disabled,\n}) {\n return (\n <CLoadingButton\n type={type}\n onClick={onClick}\n className={`solid-button rounded-4 px-4 py-2 fw-semibold text-${textColor} bg-${color} ${className}`}\n loading={loading}\n disabledOnLoading\n disabled={disabled}\n style={{\n minHeight: '44px',\n minWidth: 'fit-content',\n fontSize: '0.95rem',\n letterSpacing: '0.3px',\n }}\n >\n {icon && <CIcon icon={icon} className=\"btn-icon\" />}\n {SvgComponent && !icon && <SvgComponent />}\n <span className=\"btn-title\">{title}</span>\n {badge && badge}\n </CLoadingButton>\n )\n}\n","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport './OutlineButton.scss'\n\nexport default function OutlineButton({\n title = 'Button',\n onClick,\n color = 'custom-primary',\n className = '',\n loading = false,\n icon,\n type = 'submit',\n disabled,\n}) {\n return (\n <CLoadingButton\n type={type}\n onClick={onClick}\n className={`outline-button rounded-3 fw-medium text-${color} border-${color} ${className}`}\n loading={loading}\n disabledOnLoading\n disabled={disabled}\n variant=\"outline\"\n style={{\n maxHeight: '40px',\n minWidth: 'fit-content',\n }}\n >\n {icon && <CIcon icon={icon} />}\n <span>{title}</span>\n </CLoadingButton>\n )\n}\n","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\n\nexport default function TextButton({\n disabled,\n title,\n onClick,\n color = 'dark',\n className = '',\n loading = false,\n icon,\n children,\n}) {\n const buttonClasses = `rounded-3 px-2 d-flex justify-content-center gap-2 fw-medium ${className}`\n\n return (\n <span className=\"d-inline-block\" tabIndex={0}>\n <CLoadingButton\n disabled={disabled}\n onClick={onClick}\n variant=\"ghost\"\n type=\"button\"\n color={color}\n className={buttonClasses}\n loading={loading}\n >\n {icon && <CIcon size=\"xl\" icon={icon} />}\n {children ? children : title}\n </CLoadingButton>\n </span>\n )\n}\n","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport CustomTooltip from '../custom-tooltip/CustomTooltip'\n\nexport default function IconButton({\n title,\n onClick,\n color = 'dark',\n className = '',\n loading = false,\n icon,\n tooltip = '',\n disabled,\n}) {\n const buttonClasses = `d-flex justify-content-center align-items-center gap-1 m-0 p-1 ${className}`\n\n return (\n <CustomTooltip content={tooltip} placement=\"bottom\">\n <CLoadingButton\n onClick={onClick}\n variant=\"ghost\"\n type=\"button\"\n color={color}\n className={buttonClasses}\n loading={loading}\n disabled={disabled}\n >\n <CIcon size=\"xl\" icon={icon} />\n {title && <span className=\"ml-2 d-none d-md-block\">{title}</span>}\n </CLoadingButton>\n </CustomTooltip>\n )\n}\n","'use client'\nimport Tippy from '@tippyjs/react'\nimport 'tippy.js/dist/tippy.css'\n\nexport default function CustomTooltip({\n content,\n placement = 'bottom',\n delay = 0,\n className = '',\n children,\n}) {\n return (\n <Tippy\n content={content}\n placement={placement}\n className={className}\n delay={delay}\n >\n {children}\n </Tippy>\n )\n}\n"],"mappings":"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","names":["CIcon","import_react_pro","import_icons_react","CIcon","import_react_pro","import_icons_react","CIcon","import_react_pro","import_icons_react","Tippy","CIcon"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.js","../src/components/buttons/SolidButton.jsx","../src/components/buttons/OutlineButton.jsx","../src/components/buttons/TextButton.jsx","../src/components/buttons/IconButton.jsx","../src/components/custom-tooltip/CustomTooltip.jsx","../src/components/modal/Modal.jsx","../src/components/card/MetricCard.jsx","../src/components/card/card-utils.js","../src/components/card/GeneralCard.jsx","../src/components/charts/FunnelChart.jsx","../src/components/charts/TimeSeriesComparisonChart.jsx","../src/components/charts/TopProductsChart.jsx","../src/components/charts/SalesByChannelChart.jsx","../src/components/charts/InvestmentByPlatformChart.jsx","../src/components/pagination/PaginatedTable.jsx","../src/components/pagination/PaginatedGrid.jsx","../src/components/skeletons/CardSkeleton.jsx","../src/components/skeletons/TextSkeleton.jsx","../src/components/skeletons/MetricsSkeleton.jsx","../src/components/skeletons/ReportTableSkeleton.jsx","../src/components/skeletons/SummaryReportSkeleton.jsx","../../../node_modules/@coreui/icons-pro/src/duotone/cid-exclamation-circle.ts","../src/components/feedback/NoDataMessage.jsx","../src/components/back-button/BackButton.jsx"],"sourcesContent":["// ── Buttons ───────────────────────────────────────────────────────────────────\nexport { default as SolidButton } from './components/buttons/SolidButton'\nexport { default as OutlineButton } from './components/buttons/OutlineButton'\nexport { default as TextButton } from './components/buttons/TextButton'\nexport { default as IconButton } from './components/buttons/IconButton'\n\n// ── Overlay ───────────────────────────────────────────────────────────────────\nexport { default as CustomTooltip } from './components/custom-tooltip/CustomTooltip'\n\n// ── Modal ─────────────────────────────────────────────────────────────────────\nexport { default as Modal } from './components/modal/Modal'\n\n// ── Cards ─────────────────────────────────────────────────────────────────────\nexport { default as MetricCard } from './components/card/MetricCard'\nexport { default as GeneralCard } from './components/card/GeneralCard'\nexport { formatValue, getBadgeStyles, formatDateRange } from './components/card/card-utils'\n\n// ── Charts ────────────────────────────────────────────────────────────────────\nexport { default as FunnelChart } from './components/charts/FunnelChart'\nexport { default as TimeSeriesComparisonChart } from './components/charts/TimeSeriesComparisonChart'\nexport { default as TopProductsChart } from './components/charts/TopProductsChart'\nexport { default as SalesByChannelChart } from './components/charts/SalesByChannelChart'\nexport { default as InvestmentByPlatformChart } from './components/charts/InvestmentByPlatformChart'\n\n// ── Pagination ────────────────────────────────────────────────────────────────\nexport { default as PaginatedTable } from './components/pagination/PaginatedTable'\nexport { default as PaginatedGrid } from './components/pagination/PaginatedGrid'\n\n// ── Skeletons ─────────────────────────────────────────────────────────────────\nexport { default as CardSkeleton } from './components/skeletons/CardSkeleton'\nexport { default as TextSkeleton } from './components/skeletons/TextSkeleton'\nexport { default as MetricsSkeleton } from './components/skeletons/MetricsSkeleton'\nexport { default as ReportTableSkeleton } from './components/skeletons/ReportTableSkeleton'\nexport { default as SummaryReportSkeleton } from './components/skeletons/SummaryReportSkeleton'\n\n// ── Feedback ──────────────────────────────────────────────────────────────────\nexport { NoDataMessage } from './components/feedback/NoDataMessage'\n\n// ── Navigation ────────────────────────────────────────────────────────────────\nexport { default as BackButton } from './components/back-button/BackButton'\n","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport './SolidButton.scss'\n\nexport default function SolidButton({ title = 'Button', onClick, color = 'custom-primary', textColor = 'custom-white', className = '', loading = false, icon, svgComponent: SvgComponent, type = 'submit', badge, disabled }) {\n return (\n <CLoadingButton\n type={type}\n onClick={onClick}\n className={`solid-button rounded-4 px-4 py-2 fw-semibold text-${textColor} bg-${color} ${className}`}\n loading={loading}\n disabledOnLoading\n disabled={disabled}\n style={{ minHeight: '44px', minWidth: 'fit-content', fontSize: '0.95rem', letterSpacing: '0.3px' }}\n >\n {icon && <CIcon icon={icon} className=\"btn-icon\" />}\n {SvgComponent && !icon && <SvgComponent />}\n <span className=\"btn-title\">{title}</span>\n {badge && badge}\n </CLoadingButton>\n )\n}\n","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport './OutlineButton.scss'\n\nexport default function OutlineButton({ title = 'Button', onClick, color = 'custom-primary', className = '', loading = false, icon, type = 'submit', disabled }) {\n return (\n <CLoadingButton\n type={type}\n onClick={onClick}\n className={`outline-button rounded-3 fw-medium text-${color} border-${color} ${className}`}\n loading={loading}\n disabledOnLoading\n disabled={disabled}\n variant=\"outline\"\n style={{ maxHeight: '40px', minWidth: 'fit-content' }}\n >\n {icon && <CIcon icon={icon} />}\n <span>{title}</span>\n </CLoadingButton>\n )\n}\n ","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\n\nexport default function TextButton({ disabled, title, onClick, color = 'dark', className = '', loading = false, icon, children }) {\n return (\n <span className=\"d-inline-block\" tabIndex={0}>\n <CLoadingButton\n disabled={disabled}\n onClick={onClick}\n variant=\"ghost\"\n type=\"button\"\n color={color}\n className={`rounded-3 px-2 d-flex justify-content-center gap-2 fw-medium ${className}`}\n loading={loading}\n >\n {icon && <CIcon size=\"xl\" icon={icon} />}\n {children ? children : title}\n </CLoadingButton>\n </span>\n )\n}\n","'use client'\nimport { CLoadingButton } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport CustomTooltip from '../custom-tooltip/CustomTooltip'\n\nexport default function IconButton({ title, onClick, color = 'dark', className = '', loading = false, icon, tooltip = '', disabled }) {\n return (\n <CustomTooltip content={tooltip} placement=\"bottom\">\n <CLoadingButton\n onClick={onClick}\n variant=\"ghost\"\n type=\"button\"\n color={color}\n className={`d-flex justify-content-center align-items-center gap-1 m-0 p-1 ${className}`}\n loading={loading}\n disabled={disabled}\n >\n <CIcon size=\"xl\" icon={icon} />\n {title && <span className=\"ml-2 d-none d-md-block\">{title}</span>}\n </CLoadingButton>\n </CustomTooltip>\n )\n}\n","'use client'\nimport Tippy from '@tippyjs/react'\nimport 'tippy.js/dist/tippy.css'\n\nexport default function CustomTooltip({ content, placement = 'bottom', delay = 0, className = '', children }) {\n return (\n <Tippy content={content} placement={placement} className={className} delay={delay}>\n {children}\n </Tippy>\n )\n}\n","'use client'\nimport CIcon from '@coreui/icons-react'\nimport { CModal, CModalBody, CModalHeader, CModalTitle } from '@coreui/react-pro'\nimport { cilX } from '@coreui/icons'\n\nexport default function Modal({ title, titleIcon, visible, setVisible, alignment = 'center', size, children }) {\n return (\n <CModal alignment={alignment} visible={visible} onClose={() => setVisible(false)} size={size} focus keyboard aria-labelledby=\"roax-modal-title\">\n <CModalHeader className=\"position-relative\">\n <CModalTitle id=\"roax-modal-title\" className=\"d-flex align-items-center gap-2\">\n {titleIcon && <CIcon icon={titleIcon} size=\"lg\" className=\"text-muted\" />}\n {title}\n </CModalTitle>\n <button\n onClick={() => setVisible(false)}\n type=\"button\"\n className=\"position-absolute end-0 top-0 mt-3 me-3 p-0 bg-transparent border-0\"\n style={{ fontSize: '1.25rem', color: 'var(--cui-body-color)', zIndex: 10 }}\n aria-label=\"Cerrar\"\n >\n <CIcon icon={cilX} size=\"lg\" />\n </button>\n </CModalHeader>\n <CModalBody>{children}</CModalBody>\n </CModal>\n )\n}\n","'use client'\nimport { CCard, CCardBody } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport { cilArrowTop, cilArrowBottom, cilInfo } from '@coreui/icons'\nimport CustomTooltip from '../custom-tooltip/CustomTooltip'\nimport { formatValue, getBadgeStyles, formatDateRange } from './card-utils'\nimport './MetricCard.scss'\n\nexport default function MetricCard({ title, current, previous, change, isPositive, unit = '', previousDateRange = '', tooltipText = '', backgroundColor }) {\n const isColored = !!backgroundColor\n return (\n <CCard\n className={`metric-card w-100 h-100 d-flex flex-column border-0${isColored ? ' metric-card--colored' : ''}`}\n style={isColored ? { background: backgroundColor } : undefined}\n >\n <CCardBody className=\"d-flex flex-column justify-content-between h-100 p-4 position-relative\">\n {tooltipText && (\n <div className=\"position-absolute top-0 end-0 m-2\">\n <CustomTooltip content={tooltipText} placement=\"top\">\n <CIcon icon={cilInfo} style={{ cursor: 'pointer', opacity: 0.5, width: 16, height: 16 }} />\n </CustomTooltip>\n </div>\n )}\n <p className=\"metric-card__title m-0\">{title}</p>\n <div className=\"d-flex align-items-center gap-2 mt-1\">\n <span className=\"metric-card__value\">{formatValue(current, unit, title)}</span>\n {typeof change === 'number' && isFinite(change) && current > 0 && (\n <div style={getBadgeStyles(isPositive)}>\n <CIcon icon={isPositive ? cilArrowTop : cilArrowBottom} size=\"sm\" />\n {Math.abs(change)}%\n </div>\n )}\n </div>\n <hr className=\"metric-card__divider\" />\n {(() => {\n const { formattedRange } = formatDateRange(previousDateRange)\n return (\n <div className=\"d-flex justify-content-between align-items-center metric-card__footer\">\n <strong>{formatValue(previous, unit, title)}</strong>\n <span>{formattedRange}</span>\n </div>\n )\n })()}\n </CCardBody>\n </CCard>\n )\n}\n","export const formatValue = (val, unit = '', title = '') => {\n if (val == null || typeof val !== 'number' || val === 0) return '0'\n if (title.includes('ROAS')) return `x ${val.toFixed(2)}`\n if (title.includes('CAC %')) return `${val.toFixed(2)}%`\n if (unit === '%' || title.includes('%')) return `${val.toFixed(2)}%`\n if (unit === 'x') return `x ${val.toFixed(2)}`\n if (unit === 'COP') return `COP ${Math.round(val).toLocaleString('es-CO')}`\n return val.toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 2 })\n}\n\nexport const getBadgeStyles = (isPositive) => ({\n backgroundColor: isPositive ? '#55ed7b' : '#f74a4a',\n color: isPositive ? '#0b3e26' : '#842029',\n borderRadius: '9999px',\n padding: '4px 10px',\n fontSize: '0.75rem',\n fontWeight: 700,\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n})\n\nexport function formatDateRange(previousDateRange) {\n if (!previousDateRange) return { formattedRange: '' }\n const parts = previousDateRange.split(' - ')\n const parseDate = (str) => { const [y, m, d] = str.split('-').map(Number); return new Date(y, m - 1, d) }\n const format = (date) => {\n const day = String(date.getDate()).padStart(2, '0')\n const month = date.toLocaleString('es-CO', { month: 'short' }).replace('.', '')\n const year = String(date.getFullYear()).slice(-2)\n return `${month} ${day},${year}`\n }\n const since = parseDate(parts[0])\n const until = parts[1] ? parseDate(parts[1]) : null\n return { formattedRange: until ? `${format(since)} - ${format(until)}` : format(since) }\n}\n","import { CCard, CCardBody } from '@coreui/react-pro'\nimport CIcon from '@coreui/icons-react'\nimport { cilArrowTop, cilArrowBottom } from '@coreui/icons'\nimport { Info } from 'lucide-react'\nimport CustomTooltip from '../custom-tooltip/CustomTooltip'\nimport { getBadgeStyles, formatValue, formatDateRange } from './card-utils'\n\nimport './general-card.scss'\n\n/**\n * GeneralCard\n *\n * Tarjeta de métrica con valor actual, valor anterior, variación porcentual y tooltip.\n *\n * @param {string} title - Nombre de la métrica\n * @param {number} current - Valor del período actual\n * @param {number} previous - Valor del período anterior\n * @param {number} change - Variación porcentual\n * @param {boolean} isPositive - Si la variación es positiva\n * @param {string} [unit] - Unidad ('COP', '%', 'x')\n * @param {string} [previousDateRange] - Rango de fechas anterior ('yyyy-MM-dd - yyyy-MM-dd')\n * @param {string} [tooltipText] - Texto del tooltip informativo\n * @param {string} [backgroundColor] - Color de fondo personalizado\n */\nexport default function GeneralCard({\n title,\n current,\n previous,\n change,\n isPositive,\n unit = '',\n previousDateRange = '',\n tooltipText = '',\n backgroundColor,\n}) {\n const isColored = !!backgroundColor\n const cardClass = `general-card w-100 h-100 d-flex flex-column border-0${isColored ? ' general-card--colored' : ''}`\n\n return (\n <CCard\n className={cardClass}\n style={isColored ? { background: backgroundColor } : undefined}\n >\n <CCardBody className=\"d-flex flex-column justify-content-between h-100 p-4 position-relative\">\n {tooltipText && (\n <div className=\"position-absolute top-0 end-0 m-2\">\n <CustomTooltip content={tooltipText} placement=\"top\">\n <Info\n size={16}\n strokeWidth={2}\n style={{ cursor: 'pointer', opacity: 0.5 }}\n />\n </CustomTooltip>\n </div>\n )}\n\n <p className=\"general-card__title m-0\">{title}</p>\n\n <div className=\"d-flex align-items-center gap-2 mt-1\">\n <span className=\"general-card__value\">\n {formatValue(current, unit, title)}\n </span>\n {typeof change === 'number' && isFinite(change) && current > 0 && (\n <div style={getBadgeStyles(isPositive)}>\n <CIcon icon={isPositive ? cilArrowTop : cilArrowBottom} size=\"sm\" />\n {Math.abs(change)}%\n </div>\n )}\n </div>\n\n <hr className=\"general-card__divider\" />\n\n {(() => {\n const { formattedRange } = formatDateRange(previousDateRange)\n return (\n <div className=\"d-flex justify-content-between align-items-center general-card__footer\">\n <strong>{formatValue(previous, unit, title)}</strong>\n <span>{formattedRange}</span>\n </div>\n )\n })()}\n </CCardBody>\n </CCard>\n )\n}\n","'use client'\n\nimport {\n ResponsiveContainer,\n BarChart,\n Bar,\n XAxis,\n YAxis,\n Tooltip,\n Cell,\n LabelList,\n} from 'recharts'\nimport { CCard, CCardBody, CRow, CCol } from '@coreui/react-pro'\nimport { formatValue } from '../card/card-utils'\nimport GeneralCard from '../card/GeneralCard'\n\n/**\n * FunnelChart\n *\n * Gráfico de embudo horizontal con tarjetas de métricas debajo.\n *\n * @param {Array} data - Cada item: { title, value, previous, percentageChange, isPositive, unit, previousDateRange, color? }\n */\nexport default function FunnelChart({ data = [] }) {\n return (\n <CCard className=\"mt-4 rounded-4 shadow-sm p-3\">\n <CCardBody>\n <ResponsiveContainer width=\"100%\" height={data.length * 45 + 50}>\n <BarChart\n data={data}\n layout=\"vertical\"\n margin={{ top: 10, right: 60, left: 20, bottom: 0 }}\n barCategoryGap={15}\n >\n <defs>\n <linearGradient id=\"funnelGradient\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0%\" stopColor=\"#FF8AAE\" />\n <stop offset=\"100%\" stopColor=\"#FF1F3D\" />\n </linearGradient>\n </defs>\n <XAxis type=\"number\" hide domain={[0, 'dataMax']} />\n <YAxis\n dataKey=\"title\"\n type=\"category\"\n width={130}\n axisLine={false}\n tickLine={false}\n style={{ fontWeight: 600, fill: '#333', fontSize: 13 }}\n />\n <Tooltip\n content={({ active, payload }) => {\n if (active && payload && payload.length > 0) {\n const { value, payload: item } = payload[0]\n return (\n <div className=\"bg-white shadow-sm p-2 rounded\">\n <strong>{item.title}</strong>:{' '}\n <span>{formatValue(value, item.unit, item.title)}</span>\n </div>\n )\n }\n return null\n }}\n />\n <Bar dataKey=\"value\" fill=\"url(#funnelGradient)\" radius={[0, 10, 10, 0]}>\n <LabelList\n dataKey=\"value\"\n position=\"right\"\n formatter={(val) => formatValue(val)}\n style={{ fill: '#333', fontWeight: 500, fontSize: 12 }}\n />\n {data.map((entry, index) => (\n <Cell\n key={`cell-${entry.title || index}`}\n fill={entry.color || 'url(#funnelGradient)'}\n />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n\n <CRow className=\"pt-4 g-3\">\n {data.slice(0, 3).map((item, index) => (\n <CCol xs={12} md={4} key={`card-top-${index}`}>\n <GeneralCard\n title={item.title}\n current={item.value}\n previous={item.previous}\n change={item.percentageChange}\n isPositive={item.isPositive}\n unit={item.unit}\n previousDateRange={item.previousDateRange}\n tooltipText={item.title}\n />\n </CCol>\n ))}\n </CRow>\n\n {data.length > 3 && (\n <CRow className=\"pt-3 g-3\">\n {data.slice(3).map((item, index) => (\n <CCol xs={12} md={5} lg={4} key={`card-bottom-${index}`}>\n <GeneralCard\n title={item.title}\n current={item.value}\n previous={item.previous}\n change={item.percentageChange}\n isPositive={item.isPositive}\n unit={item.unit}\n previousDateRange={item.previousDateRange}\n tooltipText={item.title}\n />\n </CCol>\n ))}\n </CRow>\n )}\n </CCardBody>\n </CCard>\n )\n}\n","import {\n ResponsiveContainer,\n LineChart,\n Line,\n XAxis,\n YAxis,\n Tooltip,\n Legend,\n CartesianGrid,\n} from 'recharts'\nimport { CCard, CCardBody, CRow, CCol } from '@coreui/react-pro'\nimport { formatValue } from '../card/card-utils'\nimport GeneralCard from '../card/GeneralCard'\n\n/**\n * TimeSeriesComparisonChart\n *\n * Gráfico de líneas para comparar series de tiempo con tarjetas de resumen opcionales.\n *\n * @param {Array} data - Array de puntos { date, [lineName]: number, ... }\n * @param {Array} lines - Claves de las líneas a dibujar (e.g. ['ventas', 'inversión'])\n * @param {Object} colors - Mapa de nombre → color (e.g. { ventas: '#FF2F86' })\n * @param {Array} cards - Tarjetas de resumen opcionales\n * @param {string} currency - Símbolo de moneda para el eje Y (e.g. 'COP')\n * @param {string} yAxisLabel - Etiqueta del eje Y\n * @param {Object} displayNames - Mapa de clave → nombre legible para tooltip/leyenda\n */\nexport default function TimeSeriesComparisonChart({\n data = [],\n lines = [],\n colors = {},\n cards = [],\n currency = '',\n yAxisLabel = '',\n displayNames = {},\n}) {\n const detectUnit = (name = '') => {\n const lower = name.toLowerCase()\n if (lower.includes('%')) return '%'\n if (lower.includes('venta') || lower.includes('inversión')) return currency || ''\n return ''\n }\n\n const maxY = data.length\n ? Math.ceil(\n Math.max(\n ...lines.map((lineName) => Math.max(...data.map((d) => d[lineName] || 0)))\n ) * 1.1\n )\n : 100\n\n return (\n <CCard className=\"mt-4 rounded-4 shadow-sm p-3\">\n <CCardBody>\n {cards.length > 0 && (\n <CRow className=\"pt-4 g-3 justify-content-center text-center mb-4\">\n {cards.map((card, index) => (\n <CCol xs={12} md={4} lg={5} key={index}>\n <GeneralCard\n title={card.title}\n current={card.value}\n previous={card.previous}\n change={card.percentageChange}\n isPositive={card.isPositive}\n unit={card.unit}\n previousDateRange={card.previousDateRange}\n tooltipText={card.title}\n />\n </CCol>\n ))}\n </CRow>\n )}\n\n <ResponsiveContainer width=\"100%\" height={340}>\n <LineChart data={data} margin={{ top: 20, right: 30, left: 10, bottom: 10 }}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#e5e5e5\" />\n <XAxis dataKey=\"date\" stroke=\"#333\" tick={{ fontSize: 12 }} />\n <YAxis\n yAxisId=\"left\"\n stroke=\"#333\"\n tickFormatter={(val) =>\n `${currency ? currency + ' ' : ''}${\n val >= 1_000_000\n ? (val / 1_000_000).toFixed(1) + 'M'\n : val.toLocaleString('es-CO')\n }`\n }\n tick={{ fontSize: 12 }}\n width={100}\n domain={[0, maxY]}\n allowDecimals={false}\n label={\n yAxisLabel\n ? {\n value: yAxisLabel,\n angle: -90,\n position: 'insideLeft',\n style: { textAnchor: 'middle', fill: '#333', fontSize: 13 },\n }\n : undefined\n }\n />\n <Tooltip\n formatter={(val, name) => {\n const unit = detectUnit(name)\n return [formatValue(val, unit), displayNames[name] || name]\n }}\n labelClassName=\"fw-bold\"\n wrapperStyle={{ zIndex: 1000 }}\n />\n <Legend\n verticalAlign=\"bottom\"\n height={36}\n wrapperStyle={{ marginTop: 20 }}\n iconType=\"circle\"\n formatter={(value) => displayNames[value] || value}\n />\n {lines.map((lineName) => (\n <Line\n key={lineName}\n yAxisId=\"left\"\n type=\"monotone\"\n dataKey={lineName}\n stroke={colors[lineName] || '#000'}\n strokeWidth={2.5}\n dot={{ r: 4 }}\n activeDot={{ r: 6 }}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n </CCardBody>\n </CCard>\n )\n}\n","'use client'\n\nimport {\n BarChart,\n Bar,\n XAxis,\n YAxis,\n Tooltip,\n ResponsiveContainer,\n LabelList,\n Cell,\n} from 'recharts'\nimport { CCard, CCardBody } from '@coreui/react-pro'\n\nconst COLORS = ['#FF6A8D', '#FF8AAE', '#FFA3BC', '#FFC3D0', '#FFE0E7']\n\nconst ChartTooltip = ({ active, payload }) => {\n if (active && payload && payload.length) {\n return (\n <div className=\"bg-white p-2 shadow rounded border border-light\">\n <p className=\"mb-1 fw-semibold\">{payload[0].payload.name}</p>\n <p className=\"mb-0 text-muted\">Cantidad: {payload[0].value.toLocaleString()}</p>\n </div>\n )\n }\n return null\n}\n\n/**\n * TopProductsChart\n *\n * Gráfico horizontal de barras para los productos más vendidos.\n *\n * @param {Array} data - Array de { name: string, quantity: number }\n * @param {string} title - Título del gráfico\n * @param {string} emptyText - Mensaje cuando no hay datos\n * @param {number} maxItems - Máximo de productos a mostrar (default 5)\n */\nexport default function TopProductsChart({\n data = [],\n title = 'Productos Más Vendidos',\n emptyText = 'No se registraron productos vendidos en este rango de fechas.',\n maxItems = 5,\n}) {\n const processedData = (data || [])\n .filter((item) => item.quantity > 0 && item.name?.trim())\n .sort((a, b) => b.quantity - a.quantity)\n .slice(0, maxItems)\n .map((item) => ({ name: item.name, quantity: item.quantity }))\n\n if (!processedData.length) {\n return (\n <CCard className=\"mt-4 rounded-4 shadow-sm p-3\">\n <CCardBody className=\"text-center py-5\">\n <p className=\"text-muted mb-2\">\n <i className=\"bi bi-box-seam fs-4 d-block mb-2\" />\n {emptyText}\n </p>\n </CCardBody>\n </CCard>\n )\n }\n\n return (\n <CCard className=\"mt-4 rounded-4 shadow-sm p-3\">\n <CCardBody>\n <h5 className=\"fw-semibold text-center fs-5 mb-4\">{title}</h5>\n <div style={{ height: `${Math.max(processedData.length * 50, 80)}px` }}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart\n layout=\"vertical\"\n data={processedData}\n margin={{ top: 10, right: 40, left: 20, bottom: 10 }}\n >\n <defs>\n <linearGradient id=\"barGradient\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"0%\" stopColor=\"#FF8AAE\" />\n <stop offset=\"100%\" stopColor=\"#FF1F3D\" />\n </linearGradient>\n </defs>\n <XAxis\n type=\"number\"\n tickFormatter={(value) => value.toLocaleString()}\n axisLine={false}\n tick={{ fontSize: 12 }}\n />\n <YAxis\n type=\"category\"\n dataKey=\"name\"\n width={150}\n tick={{ fontSize: 13 }}\n tickFormatter={(value) =>\n value.length > 30 ? value.substring(0, 30) + '...' : value\n }\n />\n <Tooltip content={<ChartTooltip />} />\n <Bar dataKey=\"quantity\" fill=\"url(#barGradient)\" radius={[0, 8, 8, 0]}>\n <LabelList\n dataKey=\"quantity\"\n position=\"right\"\n formatter={(value) => value.toLocaleString()}\n style={{ fill: '#333', fontWeight: 500, fontSize: 12 }}\n />\n {processedData.map((_, index) => (\n <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n </div>\n </CCardBody>\n </CCard>\n )\n}\n","'use client'\n\nimport {\n ResponsiveContainer,\n BarChart,\n Bar,\n XAxis,\n YAxis,\n Tooltip,\n Legend,\n CartesianGrid,\n} from 'recharts'\nimport { CCard, CCardBody } from '@coreui/react-pro'\n\n/**\n * SalesByChannelChart\n *\n * Gráfico de barras apiladas para ventas por canal (Meta, TikTok, Google).\n *\n * @param {Array} data - Array de { fecha: string, Meta?: number, TikTok?: number, Google?: number }\n * @param {string} title - Título del gráfico\n * @param {string} emptyText - Mensaje cuando no hay datos\n * @param {string[]} channels - Canales a mostrar (default ['Meta', 'TikTok', 'Google'])\n * @param {Object} channelColors - Mapa canal → color\n */\nexport default function SalesByChannelChart({\n data = [],\n title = 'Ventas por canal',\n emptyText = 'Sin datos para este período',\n channels = ['Meta', 'TikTok', 'Google'],\n channelColors = { Meta: '#FF2F86', TikTok: '#C0C0C0', Google: '#333333' },\n}) {\n const hasData = data.length > 0\n\n return (\n <CCard className=\"rounded-4 shadow-sm p-3\">\n <CCardBody>\n <h5 className=\"fw-bold text-center\">{title}</h5>\n {!hasData ? (\n <p className=\"text-center text-muted\">{emptyText}</p>\n ) : (\n <ResponsiveContainer width=\"100%\" height={300}>\n <BarChart data={data} margin={{ top: 20, right: 30, left: 10, bottom: 10 }}>\n <CartesianGrid strokeDasharray=\"3 3\" stroke=\"#e5e5e5\" />\n <XAxis\n dataKey=\"fecha\"\n tick={{ fontSize: 12 }}\n angle={-45}\n textAnchor=\"end\"\n interval={Math.ceil(data.length / 10)}\n />\n <YAxis tick={{ fontSize: 12 }} />\n <Tooltip />\n <Legend verticalAlign=\"top\" height={36} iconType=\"circle\" />\n {channels.map((channel) => (\n <Bar\n key={channel}\n dataKey={channel}\n stackId=\"ventas\"\n fill={channelColors[channel] || '#888'}\n />\n ))}\n </BarChart>\n </ResponsiveContainer>\n )}\n </CCardBody>\n </CCard>\n )\n}\n","'use client'\n\nimport {\n PieChart,\n Pie,\n Cell,\n Legend,\n Tooltip,\n ResponsiveContainer,\n} from 'recharts'\nimport { CCard, CCardBody } from '@coreui/react-pro'\n\nconst DEFAULT_COLORS = ['#FF2F86', '#D9D9D9', '#333333']\n\n/**\n * InvestmentByPlatformChart\n *\n * Gráfico de dona para distribución de inversión por plataforma.\n *\n * @param {Array} data - Array de { name: string, value: number }\n * @param {string} title - Título del gráfico\n * @param {string[]} colors - Colores para cada slice\n * @param {string} currencySymbol - Símbolo de moneda para el tooltip\n * @param {string} locale - Locale para formatear números (default 'es-CO')\n */\nexport default function InvestmentByPlatformChart({\n data = [],\n title = 'Inversión por plataforma',\n colors = DEFAULT_COLORS,\n currencySymbol = 'COP',\n locale = 'es-CO',\n}) {\n return (\n <CCard className=\"rounded-4 shadow-sm p-3\">\n <CCardBody>\n <h5 className=\"text-center fw-bold\">{title}</h5>\n <ResponsiveContainer width=\"100%\" height={280}>\n <PieChart>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius={60}\n outerRadius={100}\n paddingAngle={5}\n label={({ name, percent }) => `${name} ${(percent * 100).toFixed(1)}%`}\n >\n {data.map((_, index) => (\n <Cell key={`cell-${index}`} fill={colors[index % colors.length]} />\n ))}\n </Pie>\n <Tooltip\n formatter={(value) =>\n `${currencySymbol} ${value.toLocaleString(locale)}`\n }\n />\n <Legend verticalAlign=\"bottom\" height={36} />\n </PieChart>\n </ResponsiveContainer>\n </CCardBody>\n </CCard>\n )\n}\n","'use client'\nimport { CTable, CTableHead, CTableBody, CTableRow, CTableHeaderCell, CSpinner } from '@coreui/react-pro'\n\nexport default function PaginatedTable({ data = [], itemsPerPage = 10, currentPage = 1, setCurrentPage = () => {}, columns = [], renderRow = () => null, loading = false, emptyMessage = 'No hay datos disponibles.' }) {\n const totalPages = Math.ceil(data.length / itemsPerPage)\n const paginatedData = data.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage)\n\n if (loading) return <div className=\"text-center py-5\"><CSpinner color=\"secondary\" /></div>\n if (!data.length) return <div className=\"text-center py-5 text-muted\">{emptyMessage}</div>\n\n const renderPagination = () => {\n const pages = Array.from({ length: totalPages }, (_, i) => i + 1)\n return (\n <div className=\"d-flex justify-content-center align-items-center gap-2 mt-3 flex-wrap\">\n {currentPage > 1 && <button onClick={() => setCurrentPage(currentPage - 1)} className=\"px-3 py-1 rounded-pill border bg-white text-dark\" style={{ minWidth: 80, fontWeight: 500 }}>Anterior</button>}\n {pages.map(i => <button key={i} onClick={() => setCurrentPage(i)} className={`px-3 py-1 rounded-pill border ${i === currentPage ? 'bg-dark text-white' : 'bg-white text-dark'}`}>{i}</button>)}\n {currentPage < totalPages && <button onClick={() => setCurrentPage(currentPage + 1)} className=\"px-3 py-1 rounded-pill border bg-white text-dark\" style={{ minWidth: 80, fontWeight: 500 }}>Siguiente</button>}\n </div>\n )\n }\n\n return (\n <>\n <CTable hover responsive>\n <CTableHead className=\"bg-dark text-white\">\n <CTableRow>{columns.map((col, i) => <CTableHeaderCell key={i}>{col}</CTableHeaderCell>)}</CTableRow>\n </CTableHead>\n <CTableBody>{paginatedData.map(renderRow)}</CTableBody>\n </CTable>\n {totalPages > 1 && renderPagination()}\n </>\n )\n}\n","'use client'\nimport { CSpinner } from '@coreui/react-pro'\n\nexport default function PaginatedGrid({ data = [], itemsPerPage = 6, currentPage = 1, setCurrentPage = () => {}, renderItem = () => null, loading = false, emptyMessage = 'No hay elementos.' }) {\n const totalPages = Math.ceil(data.length / itemsPerPage)\n const paginatedData = data.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage)\n\n if (loading) return <div className=\"text-center py-5\"><CSpinner color=\"secondary\" /></div>\n if (!data.length) return <div className=\"text-center py-5 text-muted\">{emptyMessage}</div>\n\n const renderPagination = () => {\n const pages = Array.from({ length: totalPages }, (_, i) => i + 1)\n return (\n <div className=\"d-flex justify-content-center gap-2 mt-4 flex-wrap\">\n {currentPage > 1 && <button onClick={() => setCurrentPage(currentPage - 1)} className=\"px-3 py-1 rounded-pill border bg-white text-dark\">Anterior</button>}\n {pages.map(i => <button key={i} onClick={() => setCurrentPage(i)} className={`px-3 py-1 rounded-pill border ${i === currentPage ? 'bg-dark text-white' : 'bg-white text-dark'}`}>{i}</button>)}\n {currentPage < totalPages && <button onClick={() => setCurrentPage(currentPage + 1)} className=\"px-3 py-1 rounded-pill border bg-white text-dark\">Siguiente</button>}\n </div>\n )\n }\n\n return (\n <>\n <div className=\"row g-4\">{paginatedData.map(renderItem)}</div>\n {totalPages > 1 && renderPagination()}\n </>\n )\n}\n","import { CCard, CPlaceholder } from '@coreui/react-pro'\n\nexport default function CardSkeleton() {\n return (\n <CCard className=\"shadow-none p-0 m-0 bg-transparent border-0\">\n <CPlaceholder component=\"div\" animation=\"glow\" className=\"d-flex flex-column gap-2 bg-transparent\">\n <CPlaceholder className=\"p-4 mt-2 rounded-1\" size=\"lg\" xs={12} color=\"skeleton\" />\n </CPlaceholder>\n </CCard>\n )\n}\n","import { CCard, CPlaceholder } from '@coreui/react-pro'\n\nexport default function TextSkeleton() {\n return (\n <CCard className=\"shadow-none p-0 m-0 bg-transparent border-0\">\n <CPlaceholder component=\"div\" animation=\"glow\" className=\"d-flex flex-column gap-2 bg-transparent\">\n <CPlaceholder className=\"p-0 my-2 rounded-1\" size=\"lg\" xs={8} color=\"skeleton\" />\n </CPlaceholder>\n </CCard>\n )\n}\n","import { CCard, CPlaceholder } from '@coreui/react-pro'\n\nexport default function MetricsSkeleton() {\n return (\n <CCard className=\"shadow-none p-0 m-0 bg-transparent border-0\">\n <CPlaceholder component=\"div\" animation=\"glow\" className=\"d-flex flex-column gap-2 bg-transparent\">\n <CPlaceholder className=\"p-5 mt-2 rounded-1\" size=\"lg\" xs={12} color=\"skeleton\" />\n <CPlaceholder className=\"p-3 mt-2 rounded-1\" size=\"xs\" xs={12} color=\"skeleton\" />\n </CPlaceholder>\n </CCard>\n )\n}\n","import { CCard, CPlaceholder } from '@coreui/react-pro'\n\n/**\n * ReportTableSkeleton\n *\n * Placeholder animado para tablas de reporte mientras cargan los datos.\n */\nexport default function ReportTableSkeleton() {\n return (\n <CCard className=\"shadow-none p-0 m-0 bg-transparent border-0\">\n <CPlaceholder\n component=\"div\"\n animation=\"glow\"\n className=\"d-flex flex-column gap-2 bg-transparent\"\n >\n <CPlaceholder className=\"p-4 mt-2 rounded-1\" size=\"lg\" xs={12} color=\"skeleton\" />\n <CPlaceholder className=\"p-5 mt-2 rounded-1\" size=\"lg\" xs={12} color=\"skeleton\" />\n </CPlaceholder>\n </CCard>\n )\n}\n","'use client'\n\nimport { CCard, CCol, CPlaceholder, CRow } from '@coreui/react-pro'\n\nconst CardPlaceholder = ({ className = '' }) => (\n <CCard className=\"shadow-none p-0 m-0 bg-transparent border-0\">\n <CPlaceholder\n component=\"div\"\n animation=\"glow\"\n className={`d-flex flex-column gap-2 bg-transparent ${className}`}\n >\n <CPlaceholder className=\"p-4 mt-2 rounded-2\" size=\"lg\" xs={12} color=\"skeleton\" />\n </CPlaceholder>\n </CCard>\n)\n\n/**\n * SummaryReportSkeleton\n *\n * Grilla de placeholders animados para reportes de resumen mientras cargan.\n *\n * @param {Array} layout - Array de { sm, md } para controlar el grid (default: 8 columnas predefinidas)\n */\nexport default function SummaryReportSkeleton({\n layout = [\n { sm: 6, md: 6 },\n { sm: 6, md: 6 },\n { sm: 6, md: 4 },\n { sm: 6, md: 4 },\n { sm: 6, md: 4 },\n { sm: 6, md: 6 },\n { sm: 6, md: 4 },\n { sm: 6, md: 2 },\n ],\n}) {\n return (\n <CRow className=\"g-md-3 px-4 px-sm-2 g-sm-2 pt-2 pb-4\">\n {layout.map((col, index) => (\n <CCol sm={col.sm} md={col.md} key={index}>\n <CardPlaceholder />\n </CCol>\n ))}\n </CRow>\n )\n}\n","export var cidExclamationCircle = [\"512 512\", \"<path fill='var(--ci-secondary-color, currentColor)' d='M256,16C123.452,16,16,123.452,16,256S123.452,496,256,496a238.867,238.867,0,0,0,132.685-40q1.668-1.108,3.315-2.246A239.721,239.721,0,0,0,496,256C496,123.452,388.548,16,256,16Z' class='ci-secondary' opacity='var(--ci-secondary-opacity, 0.25)'/><polygon fill='var(--ci-primary-color, currentColor)' points='224 232 238 304 274 304 288 232 288 120 224 120 224 232' class='ci-primary'/><rect width='40' height='40' x='236' y='344' fill='var(--ci-primary-color, currentColor)' class='ci-primary'/>\"];\n","import { cidExclamationCircle } from '@coreui/icons-pro'\nimport CIcon from '@coreui/icons-react'\n\n/**\n * NoDataMessage\n *\n * Alerta visual cuando no hay datos disponibles para el período seleccionado.\n *\n * @param {string} message - Mensaje a mostrar\n */\nexport function NoDataMessage({\n message = 'No se obtuvieron datos. Revisa el rango de fechas y la integración.',\n}) {\n return (\n <div\n className=\"d-flex align-items-center gap-2 rounded-3 px-3 py-3 mt-3 mb-3\"\n style={{\n backgroundColor: 'var(--cui-warning-bg-subtle)',\n border: '1px solid var(--cui-warning)',\n color: 'var(--cui-body-color)',\n }}\n >\n <CIcon\n icon={cidExclamationCircle}\n className=\"flex-shrink-0 me-2 text-warning\"\n size=\"xxl\"\n />\n {message}\n </div>\n )\n}\n","'use client'\nimport { useRouter } from 'next/navigation'\nimport { CButton } from '@coreui/react-pro'\nimport { cilArrowLeft } from '@coreui/icons'\nimport CIcon from '@coreui/icons-react'\nimport CustomTooltip from '../custom-tooltip/CustomTooltip'\n\nexport default function BackButton({ title, color = 'dark', className = '', path }) {\n const { back, push } = useRouter()\n return (\n <CustomTooltip content=\"Volver atrás\" placement=\"bottom\">\n <CButton color={color} variant=\"ghost\" className={`back-button d-flex align-items-center px-0 ${className}`} onClick={() => path ? push(path) : back()}>\n <CIcon icon={cilArrowLeft} size=\"lg\" className=\"mx-1\" />\n {title && <span className=\"px-2\">{title}</span>}\n </CButton>\n </CustomTooltip>\n )\n}\n"],"mappings":"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","names":["CIcon","import_react_pro","import_icons_react","CIcon","import_react_pro","import_icons_react","CIcon","import_react_pro","import_icons_react","Tippy","CIcon","import_icons_react","import_react_pro","CIcon","import_react_pro","import_icons_react","import_icons","CIcon","import_react_pro","import_icons_react","import_icons","CIcon","import_react_pro","import_recharts","import_react_pro","import_recharts","import_react_pro","import_recharts","import_react_pro","import_recharts","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_icons_react","CIcon","import_react_pro","import_icons","import_icons_react","CIcon"]}
|