@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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../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":["'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":["CLoadingButton","CIcon","CLoadingButton","CIcon","CLoadingButton","CIcon","CLoadingButton","CIcon"]}
1
+ {"version":3,"sources":["../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":["'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":["CLoadingButton","CIcon","CLoadingButton","CIcon","CLoadingButton","CIcon","CLoadingButton","CIcon","CIcon","CIcon","CIcon","CCard","CCardBody","CIcon","cilArrowTop","cilArrowBottom","CCard","CCardBody","CIcon","cilArrowTop","cilArrowBottom","CCard","CCardBody","CCard","CCardBody","ResponsiveContainer","XAxis","YAxis","Tooltip","CCard","CCardBody","CRow","CCol","CCard","CCardBody","CRow","CCol","ResponsiveContainer","XAxis","YAxis","Tooltip","BarChart","Bar","XAxis","YAxis","Tooltip","ResponsiveContainer","LabelList","Cell","CCard","CCardBody","ResponsiveContainer","BarChart","Bar","XAxis","YAxis","Tooltip","Legend","CartesianGrid","CCard","CCardBody","Cell","Legend","Tooltip","ResponsiveContainer","CCard","CCardBody","CSpinner","CCard","CCard","CPlaceholder","CCard","CPlaceholder","CCard","CPlaceholder","CCard","CCol","CPlaceholder","CRow","CIcon","CIcon","CIcon"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roax/ui",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Roax UI Component Library — componentes reutilizables para proyectos Roax",
5
5
  "keywords": ["react", "ui", "components", "roax", "coreui"],
6
6
  "main": "./dist/index.js",
@@ -23,16 +23,18 @@
23
23
  "pack:preview": "npm pack --dry-run"
24
24
  },
25
25
  "peerDependencies": {
26
+ "@coreui/icons": ">=3.0.0",
26
27
  "@coreui/icons-react": ">=2.0.0",
27
28
  "@coreui/react-pro": ">=5.0.0",
28
29
  "@tippyjs/react": ">=4.0.0",
30
+ "lucide-react": ">=0.400.0",
29
31
  "react": ">=18.0.0",
30
- "react-dom": ">=18.0.0"
32
+ "react-dom": ">=18.0.0",
33
+ "recharts": ">=2.0.0"
31
34
  },
32
35
  "peerDependenciesMeta": {
33
- "@tippyjs/react": {
34
- "optional": true
35
- }
36
+ "@tippyjs/react": { "optional": true },
37
+ "recharts": { "optional": true }
36
38
  },
37
39
  "publishConfig": {
38
40
  "access": "public",
@@ -6,6 +6,7 @@
6
6
  :root {
7
7
  // ---------------------------------------------------------------------------
8
8
  // Primary - Rosa
9
+ // Color principal para acciones, botones y elementos interactivos
9
10
  // ---------------------------------------------------------------------------
10
11
  --roax-rosa-50: #FDE9F2;
11
12
  --roax-rosa-100: #FCDDEB;
@@ -20,6 +21,7 @@
20
21
 
21
22
  // ---------------------------------------------------------------------------
22
23
  // Primary - Naranja
24
+ // Color principal alternativo para acentos y CTAs secundarios
23
25
  // ---------------------------------------------------------------------------
24
26
  --roax-orange-50: #FEEFE9;
25
27
  --roax-orange-100: #FDE6DE;
@@ -34,6 +36,7 @@
34
36
 
35
37
  // ---------------------------------------------------------------------------
36
38
  // Secondary - Morado
39
+ // Color secundario para elementos de soporte y decorativos
37
40
  // ---------------------------------------------------------------------------
38
41
  --roax-purple-50: #EFE6FB;
39
42
  --roax-purple-100: #E6D9F8;
@@ -47,7 +50,8 @@
47
50
  --roax-purple-900: #20004A;
48
51
 
49
52
  // ---------------------------------------------------------------------------
50
- // Neutrals
53
+ // Typography & Neutrals - Neutral (Text)
54
+ // Colores para textos principales y contenido
51
55
  // ---------------------------------------------------------------------------
52
56
  --roax-neutral-50: #FFFFFF;
53
57
  --roax-neutral-100: #CDD0D3;
@@ -61,7 +65,8 @@
61
65
  --roax-neutral-900: #020610;
62
66
 
63
67
  // ---------------------------------------------------------------------------
64
- // Gray
68
+ // Typography & Neutrals - Gris (Text Secondary)
69
+ // Colores para textos secundarios, placeholders y elementos deshabilitados
65
70
  // ---------------------------------------------------------------------------
66
71
  --roax-gray-50: #FFFFFF;
67
72
  --roax-gray-100: #E6E6E7;
@@ -75,15 +80,67 @@
75
80
  --roax-gray-900: #202021;
76
81
 
77
82
  // ---------------------------------------------------------------------------
78
- // Semantic
83
+ // Semantic - Éxito (Success)
84
+ // Color para indicar acciones exitosas o estados positivos
79
85
  // ---------------------------------------------------------------------------
80
- --roax-success-400: #34C38F;
81
- --roax-warning-400: #FFCE33;
82
- --roax-error-400: #FF0505;
83
- --roax-info-400: #33A7FF;
86
+ --roax-success-50: #E8F8F2;
87
+ --roax-success-100: #D1F1E5;
88
+ --roax-success-200: #A3E3CB;
89
+ --roax-success-300: #75D5B1;
90
+ --roax-success-400: #34C38F; // Principal
91
+ --roax-success-500: #2A9D72;
92
+ --roax-success-600: #228A62;
93
+ --roax-success-700: #1B6D4D;
94
+ --roax-success-800: #145038;
95
+ --roax-success-900: #0D3323;
96
+
97
+ // ---------------------------------------------------------------------------
98
+ // Semantic - Advertencia (Warning)
99
+ // Color para indicar advertencias o estados de precaución
100
+ // ---------------------------------------------------------------------------
101
+ --roax-warning-50: #FFF9E6;
102
+ --roax-warning-100: #FFF3CC;
103
+ --roax-warning-200: #FFE799;
104
+ --roax-warning-300: #FFDB66;
105
+ --roax-warning-400: #FFCE33; // Principal
106
+ --roax-warning-500: #E6B82E;
107
+ --roax-warning-600: #CC9F28;
108
+ --roax-warning-700: #997720;
109
+ --roax-warning-800: #665018;
110
+ --roax-warning-900: #33280C;
111
+
112
+ // ---------------------------------------------------------------------------
113
+ // Semantic - Error
114
+ // Color para indicar errores o estados negativos
115
+ // ---------------------------------------------------------------------------
116
+ --roax-error-50: #FFE6E6;
117
+ --roax-error-100: #FFCCCC;
118
+ --roax-error-200: #FF9999;
119
+ --roax-error-300: #FF6666;
120
+ --roax-error-400: #FF0505; // Principal
121
+ --roax-error-500: #E60404;
122
+ --roax-error-600: #CC0404;
123
+ --roax-error-700: #990303;
124
+ --roax-error-800: #660202;
125
+ --roax-error-900: #330101;
126
+
127
+ // ---------------------------------------------------------------------------
128
+ // Semantic - Información (Info)
129
+ // Color para indicar información o estados neutrales
130
+ // ---------------------------------------------------------------------------
131
+ --roax-info-50: #E6F4FF;
132
+ --roax-info-100: #CCE9FF;
133
+ --roax-info-200: #99D3FF;
134
+ --roax-info-300: #66BDFF;
135
+ --roax-info-400: #33A7FF; // Principal
136
+ --roax-info-500: #2E96E6;
137
+ --roax-info-600: #2985CC;
138
+ --roax-info-700: #1F6499;
139
+ --roax-info-800: #154266;
140
+ --roax-info-900: #0A2133;
84
141
  }
85
142
 
86
- // Dark mode
143
+ // Dark mode: overrides de componentes y variables semánticas
87
144
  [data-coreui-theme="dark"] {
88
145
  --roax-neutral-50: #071324;
89
146
  --roax-neutral-100: #0D1E33;
@@ -92,6 +149,48 @@
92
149
  --roax-gray-50: #202021;
93
150
  --roax-gray-100: #2e2e30;
94
151
  --roax-gray-200: #3d3d40;
152
+
153
+ // CCard — fondo glass sutil en dark mode (--cui-card-bg no cambia bien en esta versión)
154
+ .card {
155
+ background-color: rgba(255, 255, 255, 0.06) !important;
156
+ border-color: rgba(255, 255, 255, 0.08) !important;
157
+ }
158
+
159
+ // Excepción: cards con fondo de color explícito (ej: resultado verde) conservan su color
160
+ .card[style*="background"] {
161
+ background-color: unset !important;
162
+ }
163
+
164
+ // Back button — oscuro en light, blanco en dark
165
+ .back-button {
166
+ color: rgba(255, 255, 255, 0.85) !important;
167
+
168
+ &:hover {
169
+ color: #fff !important;
170
+ }
171
+ }
172
+
173
+ // Header — sobreescribe el $header-bg SCSS compilado a valor fijo
174
+ .header {
175
+ background-color: var(--cui-body-bg) !important;
176
+ border-color: var(--cui-border-color) !important;
177
+ }
178
+
179
+ // Dropdown menus
180
+ .dropdown-menu {
181
+ background-color: rgba(255, 255, 255, 0.06) !important;
182
+ backdrop-filter: blur(20px);
183
+ -webkit-backdrop-filter: blur(20px);
184
+ border: 1px solid rgba(255, 255, 255, 0.1) !important;
185
+ color: var(--cui-body-color);
186
+ }
187
+
188
+ .dropdown-item {
189
+ color: var(--cui-body-color);
190
+ &:hover {
191
+ background-color: rgba(255, 255, 255, 0.08);
192
+ }
193
+ }
95
194
  }
96
195
 
97
196
  // Progress bar con gradiente primario ROAX
@@ -1,9 +1,4 @@
1
- // =============================================================================
2
- // @roax/ui — Estilos del sistema de diseño Roax
3
- // Importar DESPUÉS de configurar CoreUI en tu proyecto:
4
- //
5
- // @import '@coreui/coreui-pro/scss/coreui';
6
- // @import '@roax/ui/styles';
7
- // =============================================================================
8
-
1
+ // Importar DESPUÉS de CoreUI en tu proyecto:
2
+ // @import '@coreui/coreui-pro/scss/coreui';
3
+ // @import '@roax/ui/styles';
9
4
  @import 'roax-colors';