@roax/ui 0.2.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 +461 -250
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +492 -254
- 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","../src/components/modal/Modal.jsx","../../../node_modules/@coreui/icons/src/free/cil-arrow-bottom.ts","../../../node_modules/@coreui/icons/src/free/cil-arrow-left.ts","../../../node_modules/@coreui/icons/src/free/cil-arrow-top.ts","../../../node_modules/@coreui/icons/src/free/cil-info.ts","../../../node_modules/@coreui/icons/src/free/cil-x.ts","../src/components/card/MetricCard.jsx","../src/components/card/card-utils.js","../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/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// ── Modal ─────────────────────────────────────────────────────────────────────\nexport { default as Modal } from './components/modal/Modal'\n\n// ── Cards ─────────────────────────────────────────────────────────────────────\nexport { default as MetricCard } from './components/card/MetricCard'\nexport { formatValue, getBadgeStyles, formatDateRange } from './components/card/card-utils'\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'\n\n// ── Navigation ────────────────────────────────────────────────────────────────\nexport { default as BackButton } from './components/back-button/BackButton'\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","'use client'\nimport CIcon from '@coreui/icons-react'\nimport { CModal, CModalBody, CModalHeader, CModalTitle } from '@coreui/react-pro'\nimport { cilX } from '@coreui/icons'\n\n/**\n * Modal reutilizable construido sobre CoreUI.\n *\n * @param {string} props.title - Título del modal\n * @param {Array} [props.titleIcon] - Ícono CoreUI opcional junto al título\n * @param {boolean} props.visible - Controla visibilidad\n * @param {Function} props.setVisible - Setter para abrir/cerrar\n * @param {'top'|'center'|'bottom'} [props.alignment='center'] - Alineación vertical\n * @param {'sm'|'lg'|'xl'} [props.size] - Tamaño del modal\n * @param {React.ReactNode} props.children - Contenido del body\n */\nexport default function Modal({\n title,\n titleIcon,\n visible,\n setVisible,\n alignment = 'center',\n size,\n children,\n}) {\n return (\n <CModal\n alignment={alignment}\n visible={visible}\n onClose={() => setVisible(false)}\n size={size}\n focus\n keyboard\n aria-labelledby=\"roax-modal-title\"\n >\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\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\n <CModalBody>{children}</CModalBody>\n </CModal>\n )\n}\n","export var cilArrowBottom = [\"512 512\", \"<polygon fill='var(--ci-primary-color, currentColor)' points='367.997 338.75 271.999 434.747 271.999 17.503 239.999 17.503 239.999 434.745 144.003 338.75 121.376 361.377 256 496 390.624 361.377 367.997 338.75' class='ci-primary'/>\"];\n","export var cilArrowLeft = [\"512 512\", \"<polygon fill='var(--ci-primary-color, currentColor)' points='497.333 239.999 80.092 239.999 176.087 144.004 153.46 121.377 18.837 256 153.46 390.623 176.087 367.996 80.09 271.999 497.333 271.999 497.333 239.999' class='ci-primary'/>\"];\n","export var cilArrowTop = [\"512 512\", \"<polygon fill='var(--ci-primary-color, currentColor)' points='390.624 150.625 256 16 121.376 150.625 144.004 173.252 240.001 77.254 240.001 495.236 272.001 495.236 272.001 77.257 367.996 173.252 390.624 150.625' class='ci-primary'/>\"];\n","export var cilInfo = [\"512 512\", \"<rect width='34.924' height='34.924' x='256' y='95.998' fill='var(--ci-primary-color, currentColor)' class='ci-primary'/><path fill='var(--ci-primary-color, currentColor)' d='M16,496H496V16H16ZM48,48H464V464H48Z' class='ci-primary'/><path fill='var(--ci-primary-color, currentColor)' d='M285.313,359.032a18.123,18.123,0,0,1-15.6,8.966,18.061,18.061,0,0,1-17.327-23.157l35.67-121.277A49.577,49.577,0,0,0,194.7,190.572l-11.718,28.234,29.557,12.266,11.718-28.235a17.577,17.577,0,0,1,33.1,11.7l-35.67,121.277A50.061,50.061,0,0,0,269.709,400a50.227,50.227,0,0,0,43.25-24.853l15.1-25.913-27.646-16.115Z' class='ci-primary'/>\"];\n","export var cilX = [\"512 512\", \"<polygon fill='var(--ci-primary-color, currentColor)' points='427.314 107.313 404.686 84.687 256 233.373 107.314 84.687 84.686 107.313 233.373 256 84.686 404.687 107.314 427.313 256 278.627 404.686 427.313 427.314 404.687 278.627 256 427.314 107.313' class='ci-primary'/>\"];\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\n/**\n * Tarjeta de métrica con glassmorphism, tendencia y rango de fechas previo.\n *\n * @param {string} props.title - Nombre de la métrica\n * @param {number} props.current - Valor actual\n * @param {number} props.previous - Valor anterior (periodo previo)\n * @param {number} props.change - Variación porcentual\n * @param {boolean} props.isPositive - Si la tendencia es positiva\n * @param {string} [props.unit=''] - Unidad: '$', '%', 'COP', 'x'\n * @param {string} [props.previousDateRange=''] - Rango de fechas previo (yyyy-MM-dd - yyyy-MM-dd)\n * @param {string} [props.tooltipText=''] - Texto del tooltip de información\n * @param {string} [props.backgroundColor] - Color de fondo custom (glassmorphism tintado)\n */\nexport default function MetricCard({\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 = `metric-card w-100 h-100 d-flex flex-column border-0${isColored ? ' metric-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\n {tooltipText && (\n <div className=\"position-absolute top-0 end-0 m-2\">\n <CustomTooltip content={tooltipText} placement=\"top\">\n <CIcon\n icon={cilInfo}\n style={{ cursor: 'pointer', opacity: 0.5, width: 16, height: 16 }}\n />\n </CustomTooltip>\n </div>\n )}\n\n <p className=\"metric-card__title m-0\">{title}</p>\n\n <div className=\"d-flex align-items-center gap-2 mt-1\">\n <span className=\"metric-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=\"metric-card__divider\" />\n\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\n </CCardBody>\n </CCard>\n )\n}\n","/**\n * Formatea un valor numérico según su unidad o contexto del título.\n * @param {number} val\n * @param {string} [unit='']\n * @param {string} [title='']\n * @returns {string}\n */\nexport 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\n/**\n * Retorna estilos de badge según si la tendencia es positiva o negativa.\n * @param {boolean} isPositive\n * @returns {Object}\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\n/**\n * Formatea un rango de fechas 'yyyy-MM-dd - yyyy-MM-dd' a formato legible.\n * @param {string} previousDateRange\n * @returns {{ formattedRange: string }}\n */\nexport function formatDateRange(previousDateRange) {\n if (!previousDateRange) return { formattedRange: '' }\n const parts = previousDateRange.split(' - ')\n const parseDate = (str) => {\n const [year, month, day] = str.split('-').map(Number)\n return new Date(year, month - 1, day)\n }\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 const formattedRange = until ? `${format(since)} - ${format(until)}` : format(since)\n return { formattedRange }\n}\n","'use client'\nimport {\n CTable,\n CTableHead,\n CTableBody,\n CTableRow,\n CTableHeaderCell,\n CSpinner,\n} from '@coreui/react-pro'\n\n/**\n * Tabla paginada reutilizable construida sobre CoreUI.\n *\n * @param {Array} [props.data=[]] - Dataset completo\n * @param {number} [props.itemsPerPage=10] - Items por página\n * @param {number} [props.currentPage=1] - Página actual\n * @param {Function} [props.setCurrentPage] - Setter de página\n * @param {string[]} [props.columns=[]] - Cabeceras de columna\n * @param {Function} [props.renderRow] - Función que renderiza cada fila\n * @param {boolean} [props.loading=false] - Estado de carga\n * @param {string} [props.emptyMessage] - Mensaje sin datos\n */\nexport default function PaginatedTable({\n data = [],\n itemsPerPage = 10,\n currentPage = 1,\n setCurrentPage = () => {},\n columns = [],\n renderRow = () => null,\n loading = false,\n emptyMessage = 'No hay datos disponibles.',\n}) {\n const totalPages = Math.ceil(data.length / itemsPerPage)\n const paginatedData = data.slice(\n (currentPage - 1) * itemsPerPage,\n currentPage * itemsPerPage\n )\n\n if (loading) {\n return (\n <div className=\"text-center py-5\">\n <CSpinner color=\"secondary\" />\n </div>\n )\n }\n\n if (!data.length) {\n return <div className=\"text-center py-5 text-muted\">{emptyMessage}</div>\n }\n\n const renderPagination = () => {\n const pages = []\n for (let i = 1; i <= totalPages; i++) {\n pages.push(\n <button\n key={i}\n onClick={() => setCurrentPage(i)}\n className={`px-3 py-1 rounded-pill border ${\n i === currentPage ? 'bg-dark text-white' : 'bg-white text-dark'\n }`}\n >\n {i}\n </button>\n )\n }\n\n return (\n <div className=\"d-flex justify-content-center align-items-center gap-2 mt-3 flex-wrap\">\n {currentPage > 1 && (\n <button\n onClick={() => setCurrentPage(currentPage - 1)}\n className=\"px-3 py-1 rounded-pill border bg-white text-dark\"\n style={{ minWidth: '80px', fontWeight: 500 }}\n >\n Anterior\n </button>\n )}\n {pages}\n {currentPage < totalPages && (\n <button\n onClick={() => setCurrentPage(currentPage + 1)}\n className=\"px-3 py-1 rounded-pill border bg-white text-dark\"\n style={{ minWidth: '80px', fontWeight: 500 }}\n >\n Siguiente\n </button>\n )}\n </div>\n )\n }\n\n return (\n <>\n <CTable hover responsive>\n <CTableHead className=\"bg-dark text-white\">\n <CTableRow>\n {columns.map((col, idx) => (\n <CTableHeaderCell key={idx}>{col}</CTableHeaderCell>\n ))}\n </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\n/**\n * Grid paginado para renderizar ítems tipo card.\n *\n * @param {Array} [props.data=[]] - Dataset completo\n * @param {number} [props.itemsPerPage=6] - Items por página\n * @param {number} [props.currentPage=1] - Página actual\n * @param {Function} [props.setCurrentPage] - Setter de página\n * @param {Function} [props.renderItem] - Función que renderiza cada ítem\n * @param {boolean} [props.loading=false] - Estado de carga\n * @param {string} [props.emptyMessage] - Mensaje sin datos\n */\nexport default function PaginatedGrid({\n data = [],\n itemsPerPage = 6,\n currentPage = 1,\n setCurrentPage = () => {},\n renderItem = () => null,\n loading = false,\n emptyMessage = 'No hay elementos.',\n}) {\n const totalPages = Math.ceil(data.length / itemsPerPage)\n const paginatedData = data.slice(\n (currentPage - 1) * itemsPerPage,\n currentPage * itemsPerPage\n )\n\n if (loading) {\n return (\n <div className=\"text-center py-5\">\n <CSpinner color=\"secondary\" />\n </div>\n )\n }\n\n if (!data.length) {\n return <div className=\"text-center py-5 text-muted\">{emptyMessage}</div>\n }\n\n const renderPagination = () => {\n const pages = []\n for (let i = 1; i <= totalPages; i++) {\n pages.push(\n <button\n key={i}\n onClick={() => setCurrentPage(i)}\n className={`px-3 py-1 rounded-pill border ${\n i === currentPage ? 'bg-dark text-white' : 'bg-white text-dark'\n }`}\n >\n {i}\n </button>\n )\n }\n return (\n <div className=\"d-flex justify-content-center gap-2 mt-4 flex-wrap\">\n {currentPage > 1 && (\n <button\n onClick={() => setCurrentPage(currentPage - 1)}\n className=\"px-3 py-1 rounded-pill border bg-white text-dark\"\n >\n Anterior\n </button>\n )}\n {pages}\n {currentPage < totalPages && (\n <button\n onClick={() => setCurrentPage(currentPage + 1)}\n className=\"px-3 py-1 rounded-pill border bg-white text-dark\"\n >\n Siguiente\n </button>\n )}\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\n/** Skeleton de tarjeta — reemplaza un card mientras carga su contenido. */\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\n/** Skeleton de texto — reemplaza una línea de texto mientras carga. */\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\n/** Skeleton de métrica — reemplaza un MetricCard mientras carga. */\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","'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\n/**\n * Botón de navegación hacia atrás.\n * Usa router.push(path) si se pasa path, o router.back() si no.\n *\n * @param {string} [props.title] - Texto opcional junto al ícono\n * @param {string} [props.color='dark'] - Color CoreUI del botón\n * @param {string} [props.path] - Ruta destino (si no, usa history.back())\n * @param {string} [props.className] - Clases CSS adicionales\n */\nexport default function BackButton({ title, color = 'dark', className = '', path }) {\n const { back, push } = useRouter()\n const buttonClasses = `back-button d-flex align-items-center px-0 ${className}`\n\n function handleBack() {\n if (path) push(path)\n else back()\n }\n\n return (\n <CustomTooltip content=\"Volver atrás\" placement=\"bottom\">\n <CButton color={color} variant=\"ghost\" className={buttonClasses} onClick={handleBack}>\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","CIcon","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_react_pro","import_icons_react","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"]}
|