@beweco/aurora-ui 0.6.68 → 0.6.69-qa.89

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.
Files changed (41) hide show
  1. package/dist/assets/css/styles.css +1 -1
  2. package/dist/index.cjs.js +245 -47
  3. package/dist/index.esm.js +236 -49
  4. package/dist/types/components/area-line-chart/AreaLineChart.d.ts +1 -1
  5. package/dist/types/components/area-line-chart/AreaLineChart.d.ts.map +1 -1
  6. package/dist/types/components/area-line-chart/AreaLineChart.types.d.ts +8 -0
  7. package/dist/types/components/area-line-chart/AreaLineChart.types.d.ts.map +1 -1
  8. package/dist/types/components/donut-chart/DonutChart.d.ts +9 -0
  9. package/dist/types/components/donut-chart/DonutChart.d.ts.map +1 -0
  10. package/dist/types/components/donut-chart/DonutChart.types.d.ts +51 -0
  11. package/dist/types/components/donut-chart/DonutChart.types.d.ts.map +1 -0
  12. package/dist/types/components/donut-chart/donut-chart.utils.d.ts +15 -0
  13. package/dist/types/components/donut-chart/donut-chart.utils.d.ts.map +1 -0
  14. package/dist/types/components/donut-chart/index.d.ts +4 -0
  15. package/dist/types/components/donut-chart/index.d.ts.map +1 -0
  16. package/dist/types/components/menu-claw/MenuClaw.d.ts.map +1 -1
  17. package/dist/types/components/menu-claw/_internal/menu-claw-nav/MenuClawNavItem.d.ts +17 -0
  18. package/dist/types/components/menu-claw/_internal/menu-claw-nav/MenuClawNavItem.d.ts.map +1 -0
  19. package/dist/types/components/menu-claw/_internal/menu-claw-nav/MenuClawNavItem.types.d.ts +18 -0
  20. package/dist/types/components/menu-claw/_internal/menu-claw-nav/MenuClawNavItem.types.d.ts.map +1 -0
  21. package/dist/types/components/menu-claw/_internal/menu-claw-nav/index.d.ts +3 -0
  22. package/dist/types/components/menu-claw/_internal/menu-claw-nav/index.d.ts.map +1 -0
  23. package/dist/types/components/phone/Phone.d.ts.map +1 -1
  24. package/dist/types/components/ranked-bar-list/RankedBarList.d.ts +10 -0
  25. package/dist/types/components/ranked-bar-list/RankedBarList.d.ts.map +1 -0
  26. package/dist/types/components/ranked-bar-list/RankedBarList.types.d.ts +41 -0
  27. package/dist/types/components/ranked-bar-list/RankedBarList.types.d.ts.map +1 -0
  28. package/dist/types/components/ranked-bar-list/index.d.ts +4 -0
  29. package/dist/types/components/ranked-bar-list/index.d.ts.map +1 -0
  30. package/dist/types/components/ranked-bar-list/ranked-bar-list.utils.d.ts +16 -0
  31. package/dist/types/components/ranked-bar-list/ranked-bar-list.utils.d.ts.map +1 -0
  32. package/dist/types/components/schedule-row/schedule-row.d.ts.map +1 -1
  33. package/dist/types/components/stat-tile/StatTile.d.ts +10 -0
  34. package/dist/types/components/stat-tile/StatTile.d.ts.map +1 -0
  35. package/dist/types/components/stat-tile/StatTile.types.d.ts +40 -0
  36. package/dist/types/components/stat-tile/StatTile.types.d.ts.map +1 -0
  37. package/dist/types/components/stat-tile/index.d.ts +3 -0
  38. package/dist/types/components/stat-tile/index.d.ts.map +1 -0
  39. package/dist/types/index.d.ts +3 -0
  40. package/dist/types/index.d.ts.map +1 -1
  41. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -581,9 +581,9 @@ function ChartTooltip(_a) {
581
581
  })] }));
582
582
  }
583
583
  function AreaLineChart(_a) {
584
- var data = _a.data, xAxisKey = _a.xAxisKey, series = _a.series, title = _a.title, value = _a.value, trend = _a.trend, _b = _a.height, height = _b === void 0 ? 200 : _b, _c = _a.className, className = _c === void 0 ? "" : _c, _d = _a.wrappedInCard, wrappedInCard = _d === void 0 ? false : _d, formatTooltipValue = _a.formatTooltipValue;
584
+ var data = _a.data, xAxisKey = _a.xAxisKey, series = _a.series, title = _a.title, value = _a.value, trend = _a.trend, _b = _a.height, height = _b === void 0 ? 200 : _b, _c = _a.className, className = _c === void 0 ? "" : _c, _d = _a.wrappedInCard, wrappedInCard = _d === void 0 ? false : _d, formatTooltipValue = _a.formatTooltipValue, _e = _a.yAxisDomain, yAxisDomain = _e === void 0 ? [0, "dataMax + 100"] : _e;
585
585
  var hasHeader = title != null || value != null || trend != null || series.length > 0;
586
- var content = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [hasHeader && (jsxRuntime.jsxs("div", { className: "flex items-start justify-between mb-6", children: [jsxRuntime.jsxs("div", { children: [title != null && (jsxRuntime.jsx(H3, { className: "text-xs font-semibold text-gray-500 uppercase tracking-wide mb-1", children: title })), value != null && (jsxRuntime.jsxs("div", { className: "flex items-baseline gap-2", children: [jsxRuntime.jsx("span", { className: "text-2xl font-bold text-gray-900", children: value }), trend != null && (jsxRuntime.jsx("span", { className: "text-xs font-medium text-yellow-600 bg-yellow-50 px-2 py-1 rounded", children: trend }))] }))] }), series.length > 0 && (jsxRuntime.jsx("div", { className: "flex items-center gap-4", children: series.map(function (s) { return (jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntime.jsx("svg", { width: "16", height: "2", viewBox: "0 0 16 2", fill: "none", children: jsxRuntime.jsx("line", { x1: "0", y1: "1", x2: "16", y2: "1", stroke: s.color, strokeWidth: "2" }) }), jsxRuntime.jsx("span", { className: "text-xs text-gray-600 font-medium", children: s.label })] }, s.dataKey)); }) }))] })), jsxRuntime.jsx("div", { className: "w-full", style: { height: "".concat(height, "px") }, children: jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: jsxRuntime.jsxs(recharts.LineChart, { data: data, margin: { top: 5, right: 5, left: 5, bottom: 5 }, children: [jsxRuntime.jsx("defs", { children: series.map(function (s) { return (jsxRuntime.jsxs("linearGradient", { id: "area-line-chart-".concat(s.dataKey), x1: "0", y1: "0", x2: "0", y2: "1", children: [jsxRuntime.jsx("stop", { offset: "0%", stopColor: s.color, stopOpacity: 0.3 }), jsxRuntime.jsx("stop", { offset: "50%", stopColor: s.color, stopOpacity: 0.15 }), jsxRuntime.jsx("stop", { offset: "100%", stopColor: s.color, stopOpacity: 0 })] }, s.dataKey)); }) }), jsxRuntime.jsx(recharts.XAxis, { dataKey: xAxisKey, axisLine: false, tickLine: false, tick: { fill: "#9ca3af", fontSize: 12 }, dy: 10 }), jsxRuntime.jsx(recharts.YAxis, { axisLine: false, tickLine: false, tick: { fill: "transparent", fontSize: 0 }, width: 0, tickCount: 6, domain: [0, "dataMax + 100"], allowDecimals: false }), jsxRuntime.jsx(recharts.CartesianGrid, { strokeDasharray: "3 3", stroke: "#d1d5db", strokeOpacity: 0.5, vertical: false, horizontal: true }), jsxRuntime.jsx(recharts.Tooltip, { content: jsxRuntime.jsx(ChartTooltip, { series: series, formatValue: formatTooltipValue }) }), series.map(function (s) { return (jsxRuntime.jsx(recharts.Area, { type: "natural", dataKey: s.dataKey, stroke: "none", fill: "url(#area-line-chart-".concat(s.dataKey, ")"), animationDuration: 1500, animationEasing: "ease-in-out" }, "area-".concat(s.dataKey))); }), series.map(function (s) { return (jsxRuntime.jsx(recharts.Line, { type: "natural", dataKey: s.dataKey, name: s.dataKey, stroke: s.color, strokeWidth: 3, dot: false, activeDot: {
586
+ var content = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [hasHeader && (jsxRuntime.jsxs("div", { className: "flex items-start justify-between mb-6", children: [jsxRuntime.jsxs("div", { children: [title != null && (jsxRuntime.jsx(H3, { className: "text-xs font-semibold text-gray-500 uppercase tracking-wide mb-1", children: title })), value != null && (jsxRuntime.jsxs("div", { className: "flex items-baseline gap-2", children: [jsxRuntime.jsx("span", { className: "text-2xl font-bold text-gray-900", children: value }), trend != null && (jsxRuntime.jsx("span", { className: "text-xs font-medium text-yellow-600 bg-yellow-50 px-2 py-1 rounded", children: trend }))] }))] }), series.length > 0 && (jsxRuntime.jsx("div", { className: "flex flex-wrap items-center gap-4", children: series.map(function (s) { return (jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntime.jsx("svg", { width: "16", height: "2", viewBox: "0 0 16 2", fill: "none", children: jsxRuntime.jsx("line", { x1: "0", y1: "1", x2: "16", y2: "1", stroke: s.color, strokeWidth: "2" }) }), jsxRuntime.jsx("span", { className: "text-xs text-gray-600 font-medium", children: s.label })] }, s.dataKey)); }) }))] })), jsxRuntime.jsx("div", { className: "w-full", style: { height: "".concat(height, "px") }, children: jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: jsxRuntime.jsxs(recharts.LineChart, { data: data, margin: { top: 5, right: 5, left: 5, bottom: 5 }, children: [jsxRuntime.jsx("defs", { children: series.map(function (s) { return (jsxRuntime.jsxs("linearGradient", { id: "area-line-chart-".concat(s.dataKey), x1: "0", y1: "0", x2: "0", y2: "1", children: [jsxRuntime.jsx("stop", { offset: "0%", stopColor: s.color, stopOpacity: 0.3 }), jsxRuntime.jsx("stop", { offset: "50%", stopColor: s.color, stopOpacity: 0.15 }), jsxRuntime.jsx("stop", { offset: "100%", stopColor: s.color, stopOpacity: 0 })] }, s.dataKey)); }) }), jsxRuntime.jsx(recharts.XAxis, { dataKey: xAxisKey, axisLine: false, tickLine: false, tick: { fill: "#9ca3af", fontSize: 12 }, dy: 10 }), jsxRuntime.jsx(recharts.YAxis, { axisLine: false, tickLine: false, tick: { fill: "transparent", fontSize: 0 }, width: 0, tickCount: 6, domain: yAxisDomain, allowDecimals: false }), jsxRuntime.jsx(recharts.CartesianGrid, { strokeDasharray: "3 3", stroke: "#d1d5db", strokeOpacity: 0.5, vertical: false, horizontal: true }), jsxRuntime.jsx(recharts.Tooltip, { content: jsxRuntime.jsx(ChartTooltip, { series: series, formatValue: formatTooltipValue }) }), series.map(function (s) { return (jsxRuntime.jsx(recharts.Area, { type: "natural", dataKey: s.dataKey, stroke: "none", fill: "url(#area-line-chart-".concat(s.dataKey, ")"), animationDuration: 1500, animationEasing: "ease-in-out" }, "area-".concat(s.dataKey))); }), series.map(function (s) { return (jsxRuntime.jsx(recharts.Line, { type: "natural", dataKey: s.dataKey, name: s.dataKey, stroke: s.color, strokeWidth: 3, dot: false, activeDot: {
587
587
  r: 6,
588
588
  fill: s.color,
589
589
  stroke: "#fff",
@@ -2946,6 +2946,65 @@ var DateSelector = function (_a) {
2946
2946
  return (jsxRuntime.jsxs("div", { className: "w-full flex flex-wrap xs:gap-5 justify-between items-center ".concat(className), children: [jsxRuntime.jsxs(react.RadioGroup, __assign({ color: "primary", orientation: "horizontal", size: "sm", value: type, onValueChange: handleTypeChange }, radioGroupProps, { children: [jsxRuntime.jsx(react.Radio, __assign({ value: exports.HolidayType.SingleDay }, radioItemProps, { children: t.dayOption })), jsxRuntime.jsx(react.Radio, __assign({ value: exports.HolidayType.DateRange }, radioItemProps, { children: t.dateRangeOption }))] })), type === exports.HolidayType.DateRange ? (jsxRuntime.jsx(react.DateRangePicker, __assign({ className: "xs:w-full md:flex-1 md:max-w-xs", value: dateRange || null, onChange: handleDateRangeChange, "aria-label": t.selectDateRangeAriaLabel, endContent: jsxRuntime.jsx(IconComponent, { icon: "solar:calendar-outline" }) }, dateRangePickerProps))) : (jsxRuntime.jsx(react.DatePicker, __assign({ className: "xs:w-full md:flex-1 md:max-w-40", value: date || null, onChange: handleDateChange, endContent: jsxRuntime.jsx(IconComponent, { icon: "solar:calendar-outline" }), "aria-label": t.selectDateAriaLabel }, datePickerProps)))] }));
2947
2947
  };
2948
2948
 
2949
+ /** Paleta categórica por defecto: primary/secondary/success/warning/danger de BeweOS. */
2950
+ var DEFAULT_DONUT_COLORS = [
2951
+ "#006fee",
2952
+ "#7828c8",
2953
+ "#17c964",
2954
+ "#f5a524",
2955
+ "#f31260",
2956
+ ];
2957
+ function safeValue$1(value) {
2958
+ return Number.isFinite(value) && value > 0 ? value : 0;
2959
+ }
2960
+ function computeTotal(data) {
2961
+ return data.reduce(function (sum, d) { return sum + safeValue$1(d.value); }, 0);
2962
+ }
2963
+ /**
2964
+ * `true` cuando no hay datos o todos los valores son 0 — mismo criterio que el
2965
+ * `NotData` legacy de Guru.js: un donut sin nada que repartir no aporta información.
2966
+ */
2967
+ function isDonutEmpty(data) {
2968
+ return data.length === 0 || computeTotal(data) === 0;
2969
+ }
2970
+ /**
2971
+ * Resuelve las proporciones y el color final de cada categoría.
2972
+ * El color propio de cada dato tiene prioridad; si falta, se cicla `palette` por índice.
2973
+ */
2974
+ function computeSlices(data, palette) {
2975
+ if (palette === void 0) { palette = DEFAULT_DONUT_COLORS; }
2976
+ var total = computeTotal(data);
2977
+ return data.map(function (datum, index) {
2978
+ var _a;
2979
+ var value = safeValue$1(datum.value);
2980
+ return __assign(__assign({}, datum), { value: value, color: (_a = datum.color) !== null && _a !== void 0 ? _a : palette[index % palette.length], percent: total > 0 ? value / total : 0 });
2981
+ });
2982
+ }
2983
+
2984
+ var DEFAULT_TRANSLATIONS$b = {
2985
+ emptyState: "Sin datos para mostrar",
2986
+ totalLabel: "Total",
2987
+ };
2988
+ /**
2989
+ * DonutChart - Gráfico circular (pie o donut, según `innerRadiusRatio`) con
2990
+ * leyenda y total central propios, renderizados fuera del árbol de Recharts
2991
+ * para que sean estables independientemente del tamaño medido del contenedor.
2992
+ */
2993
+ var DonutChart = function (_a) {
2994
+ var data = _a.data, _b = _a.height, height = _b === void 0 ? 220 : _b, _c = _a.innerRadiusRatio, innerRadiusRatio = _c === void 0 ? 0.65 : _c, _d = _a.showLegend, showLegend = _d === void 0 ? true : _d, _e = _a.showTotal, showTotal = _e === void 0 ? true : _e, colors = _a.colors, formatValue = _a.formatValue, _f = _a.translations, translations = _f === void 0 ? {} : _f, className = _a.className;
2995
+ var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$b), translations);
2996
+ if (isDonutEmpty(data)) {
2997
+ return (jsxRuntime.jsx("div", { className: className, children: jsxRuntime.jsx(P, { children: t.emptyState }) }));
2998
+ }
2999
+ var slices = computeSlices(data, colors);
3000
+ var total = slices.reduce(function (sum, s) { return sum + s.value; }, 0);
3001
+ var format = function (value) {
3002
+ return formatValue ? formatValue(value) : String(value);
3003
+ };
3004
+ var isDonut = innerRadiusRatio > 0;
3005
+ return (jsxRuntime.jsxs("div", { className: className, children: [jsxRuntime.jsxs("div", { className: "relative w-full", style: { height: height }, children: [jsxRuntime.jsx(recharts.ResponsiveContainer, { width: "100%", height: "100%", children: jsxRuntime.jsxs(recharts.PieChart, { children: [jsxRuntime.jsx(recharts.Pie, { data: slices, dataKey: "value", nameKey: "name", innerRadius: isDonut ? "".concat(innerRadiusRatio * 100, "%") : 0, outerRadius: "90%", stroke: "none", children: slices.map(function (slice) { return (jsxRuntime.jsx(recharts.Cell, { fill: slice.color }, slice.name)); }) }), jsxRuntime.jsx(recharts.Tooltip, { formatter: function (value) { return format(value); } })] }) }), isDonut && showTotal && (jsxRuntime.jsxs("div", { className: "aurora-donut-total pointer-events-none absolute inset-0 flex flex-col items-center justify-center", "aria-hidden": "true", children: [jsxRuntime.jsx("span", { className: "text-xs text-foreground-500", children: t.totalLabel }), jsxRuntime.jsx("span", { className: "text-xl font-semibold", children: format(total) })] }))] }), showLegend && (jsxRuntime.jsx("ul", { className: "mt-3 flex flex-wrap gap-3", children: slices.map(function (slice) { return (jsxRuntime.jsxs("li", { className: "flex items-center gap-1.5 text-xs", children: [jsxRuntime.jsx("span", { className: "h-2 w-2 rounded-full", style: { backgroundColor: slice.color }, "aria-hidden": "true" }), jsxRuntime.jsx("span", { children: slice.name }), jsxRuntime.jsxs("span", { className: "text-foreground-500", children: [Math.round(slice.percent * 100), "%"] })] }, slice.name)); }) }))] }));
3006
+ };
3007
+
2949
3008
  var H1 = function (_a) {
2950
3009
  var children = _a.children, className = _a.className, props = __rest(_a, ["children", "className"]);
2951
3010
  return (jsxRuntime.jsx("h1", __assign({ className: react.cn("text-xl font-bold", className) }, props, { children: children })));
@@ -3011,12 +3070,12 @@ var NotificationButton = function (_a) {
3011
3070
  };
3012
3071
  NotificationButton.displayName = "NotificationButton";
3013
3072
 
3014
- var DEFAULT_TRANSLATIONS$8 = {
3073
+ var DEFAULT_TRANSLATIONS$a = {
3015
3074
  logout: "Cerrar sesión",
3016
3075
  };
3017
3076
  var HeaderComponent = function (_a) {
3018
3077
  var notificationCount = _a.notificationCount, options = _a.options, onMenuClick = _a.onMenuClick, onLogout = _a.onLogout, _b = _a.translations, translations = _b === void 0 ? {} : _b, breadcrumbs = _a.breadcrumbs, extraContent = _a.extraContent, _c = _a.showMenuButton, showMenuButton = _c === void 0 ? true : _c, onNotificationClick = _a.onNotificationClick, onOptionSelect = _a.onOptionSelect, onBreadcrumbClick = _a.onBreadcrumbClick;
3019
- var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$8), translations);
3078
+ var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$a), translations);
3020
3079
  return (jsxRuntime.jsx("header", { className: "header__container", children: jsxRuntime.jsxs("div", { className: "flex items-center justify-between w-full", children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [showMenuButton && (jsxRuntime.jsx(react.Button, { className: "sm:hidden", isIconOnly: true, variant: "light", startContent: jsxRuntime.jsx(IconComponent, { icon: "solar:hamburger-menu-linear" }), onPress: onMenuClick })), breadcrumbs && breadcrumbs.length > 0 && (jsxRuntime.jsx(BreadcrumbsComponent, { items: breadcrumbs, onItemClick: onBreadcrumbClick }))] }), jsxRuntime.jsxs("div", { className: "flex items-center gap-4", children: [extraContent, jsxRuntime.jsx(NotificationButton, { notificationCount: notificationCount, onPress: onNotificationClick }), jsxRuntime.jsx(ConfigMenu, { options: options, onLogout: onLogout, onOptionSelect: onOptionSelect, translations: t })] })] }) }));
3021
3080
  };
3022
3081
  HeaderComponent.displayName = "Header";
@@ -3140,7 +3199,7 @@ KanbanColumn.displayName = "KanbanColumn";
3140
3199
  * Traducciones por defecto en español.
3141
3200
  * Se mezclan con las traducciones proporcionadas por el usuario.
3142
3201
  */
3143
- var DEFAULT_TRANSLATIONS$7 = {
3202
+ var DEFAULT_TRANSLATIONS$9 = {
3144
3203
  dropHere: "Soltar aquí",
3145
3204
  emptyMessage: "No hay elementos",
3146
3205
  };
@@ -3174,7 +3233,7 @@ var columnGapClasses = {
3174
3233
  var KanbanComponent = function (_a) {
3175
3234
  var columns = _a.columns, renderItem = _a.renderItem, onCardClick = _a.onCardClick, onItemMove = _a.onItemMove, isDraggable = _a.isDraggable, cardClassName = _a.cardClassName, isCardClickable = _a.isCardClickable, className = _a.className, _b = _a.columnWidth, columnWidth = _b === void 0 ? "280px" : _b, _c = _a.columnGap, columnGap = _c === void 0 ? "md" : _c, _d = _a.horizontalScroll, horizontalScroll = _d === void 0 ? true : _d, columnMaxHeight = _a.columnMaxHeight, renderColumnHeader = _a.renderColumnHeader, renderEmptyState = _a.renderEmptyState, _e = _a.translations, translations = _e === void 0 ? {} : _e, onLoadMore = _a.onLoadMore;
3176
3235
  // Mezclar traducciones del usuario con las por defecto
3177
- var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$7), translations);
3236
+ var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$9), translations);
3178
3237
  // Determinar si drag está habilitado
3179
3238
  var dragEnabled = isDraggable !== null && isDraggable !== void 0 ? isDraggable : !!onItemMove;
3180
3239
  // Estado del drag actual
@@ -3518,7 +3577,7 @@ var MenuNavList = React.forwardRef(function (_a, ref) {
3518
3577
  });
3519
3578
  MenuNavList.displayName = "MenuNavList";
3520
3579
 
3521
- var DEFAULT_TRANSLATIONS$6 = {
3580
+ var DEFAULT_TRANSLATIONS$8 = {
3522
3581
  menuLabel: "Menú",
3523
3582
  closeSidebarAriaLabel: "Cerrar menú lateral",
3524
3583
  mobileNavAriaLabel: "Navegación móvil",
@@ -3536,7 +3595,7 @@ var MenuComponent = React.memo(function Menu(_a) {
3536
3595
  var commerceInfo = _a.commerceInfo, userInfo = _a.userInfo, helpButton = _a.helpButton, isOpenSidebar = _a.isOpenSidebar, onOpenSidebarChange = _a.onOpenSidebarChange, menuItems = _a.menuItems, mobileBottomBarGroupKey = _a.mobileBottomBarGroupKey, _d = _a.showNativeMenu, showNativeMenu = _d === void 0 ? true : _d, onUserInfoClick = _a.onUserInfoClick, _e = _a.translations, translations = _e === void 0 ? {} : _e;
3537
3596
  var _f = React.useState(false), isCollapsed = _f[0], setIsCollapsed = _f[1];
3538
3597
  var _g = React.useState(false), logoError = _g[0], setLogoError = _g[1];
3539
- var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$6), translations);
3598
+ var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$8), translations);
3540
3599
  var selectedKey = React.useMemo(function () {
3541
3600
  var _a, _b, _c;
3542
3601
  if (menuItems.selectedPath) {
@@ -3768,7 +3827,59 @@ var MenuClawHistoryPanel = React.memo(function MenuClawHistoryPanel(_a) {
3768
3827
  : "solar:alt-arrow-down-linear", size: "sm", "aria-hidden": true }), isExpanded ? showLessLabel : showMoreLabel] })) : null] })) : null] }));
3769
3828
  });
3770
3829
 
3771
- var DEFAULT_TRANSLATIONS$5 = {
3830
+ /** ¿Está la key seleccionada en este ítem o en cualquiera de sus descendientes? */
3831
+ var containsKey = function (item, key) {
3832
+ var _a;
3833
+ if (!key) {
3834
+ return false;
3835
+ }
3836
+ if (item.key === key) {
3837
+ return true;
3838
+ }
3839
+ return ((_a = item.items) !== null && _a !== void 0 ? _a : []).some(function (child) { return containsKey(child, key); });
3840
+ };
3841
+ /**
3842
+ * Fila del menú. Si el ítem trae `items`, se pinta como grupo desplegable en vez
3843
+ * de como enlace.
3844
+ *
3845
+ * Existe porque `MenuClaw` no puede reutilizar `MenuNavList` (heredaría sus filas
3846
+ * de 44px) pero sí necesita el mismo dato jerárquico: los consumidores mandan
3847
+ * módulos con hijos —Catálogo › Productos/Servicios— y sin este render se
3848
+ * perderían en silencio, porque `MenuNavListItem.items` es opcional y no falla
3849
+ * al compilar.
3850
+ *
3851
+ * El grupo que contiene la ruta activa se despliega solo y no se puede plegar:
3852
+ * si se pudiera, el ítem activo quedaría oculto.
3853
+ */
3854
+ var MenuClawNavItem = function (_a) {
3855
+ var _b, _c;
3856
+ var item = _a.item, selectedKey = _a.selectedKey, isCollapsed = _a.isCollapsed, onSelect = _a.onSelect, _d = _a.depth, depth = _d === void 0 ? 0 : _d;
3857
+ var submenuId = React.useId();
3858
+ var _e = React.useState(false), isManuallyOpen = _e[0], setIsManuallyOpen = _e[1];
3859
+ var children = (_b = item.items) !== null && _b !== void 0 ? _b : [];
3860
+ // Comprimido no hay sitio para desplegables: la fila vuelve a ser navegable.
3861
+ var isGroup = children.length > 0 && !isCollapsed;
3862
+ var hasSelectedDescendant = React.useMemo(function () { return children.some(function (child) { return containsKey(child, selectedKey); }); }, [children, selectedKey]);
3863
+ var isOpen = hasSelectedDescendant || isManuallyOpen;
3864
+ var isActive = !!item.key && item.key === selectedKey;
3865
+ var handleClick = React.useCallback(function () {
3866
+ if (isGroup) {
3867
+ setIsManuallyOpen(function (prev) { return !prev; });
3868
+ return;
3869
+ }
3870
+ onSelect(item.key, item.href);
3871
+ }, [isGroup, onSelect, item.key, item.href]);
3872
+ var icon = item.icon || item.startContent ? (jsxRuntime.jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-default-500 [&_svg]:h-5 [&_svg]:w-5", children: item.icon ? (jsxRuntime.jsx(IconComponent, { icon: item.icon, size: "md", "aria-hidden": true })) : (item.startContent) })) : null;
3873
+ return (jsxRuntime.jsxs("li", { children: [jsxRuntime.jsxs("button", { type: "button", title: isCollapsed ? item.title : undefined, onClick: handleClick, "aria-expanded": isGroup ? isOpen : undefined, "aria-controls": isGroup ? submenuId : undefined, className: react.cn("flex w-full items-center rounded-lg px-2 py-1.5 text-left text-small transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", depth === 0 ? "min-h-9" : "min-h-8", isCollapsed ? "justify-center" : "gap-3",
3874
+ // Sangría del hijo: alinea su texto con el del padre (px-2 + icono
3875
+ // de 20px + gap de 12px).
3876
+ !isCollapsed && depth > 0 && !icon ? "pl-10" : undefined, isActive
3877
+ ? "bg-default-100 font-medium text-foreground"
3878
+ : "text-default-600 hover:bg-default-100", item.className), children: [icon, !isCollapsed ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: "menu-claw-collapsible flex-1 truncate", children: item.title }), (_c = item.endContent) !== null && _c !== void 0 ? _c : null, isGroup ? (jsxRuntime.jsx(IconComponent, { icon: "solar:alt-arrow-down-linear", size: "sm", "aria-hidden": true, className: react.cn("shrink-0 text-default-400 transition-transform", isOpen && "rotate-180") })) : null] })) : null] }), isGroup && isOpen ? (jsxRuntime.jsx("ul", { id: submenuId, className: "mt-0.5 flex flex-col gap-0.5", children: children.map(function (child) { return (jsxRuntime.jsx(MenuClawNavItem, { item: child, selectedKey: selectedKey, isCollapsed: isCollapsed, onSelect: onSelect, depth: depth + 1 }, child.key)); }) })) : null] }));
3879
+ };
3880
+ MenuClawNavItem.displayName = "MenuClawNavItem";
3881
+
3882
+ var DEFAULT_TRANSLATIONS$7 = {
3772
3883
  menuLabel: "Menú",
3773
3884
  closeSidebarAriaLabel: "Cerrar menú lateral",
3774
3885
  mobileNavAriaLabel: "Navegación móvil",
@@ -3806,7 +3917,7 @@ var MenuClaw = React.memo(function MenuClaw(_a) {
3806
3917
  var _b, _c;
3807
3918
  var userInfo = _a.userInfo, helpButton = _a.helpButton, menuItems = _a.menuItems, history = _a.history, isOpenSidebar = _a.isOpenSidebar, onOpenSidebarChange = _a.onOpenSidebarChange, mobileBottomBarGroupKey = _a.mobileBottomBarGroupKey, _d = _a.showNativeMenu, showNativeMenu = _d === void 0 ? true : _d, _e = _a.translations, translations = _e === void 0 ? {} : _e;
3808
3919
  var _f = React.useState(false), isCollapsed = _f[0], setIsCollapsed = _f[1];
3809
- var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$5), translations);
3920
+ var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$7), translations);
3810
3921
  var selectedKey = React.useMemo(function () {
3811
3922
  var _a, _b, _c;
3812
3923
  if (menuItems.selectedPath) {
@@ -3878,13 +3989,7 @@ var MenuClaw = React.memo(function MenuClaw(_a) {
3878
3989
  ? "solar:alt-arrow-right-linear"
3879
3990
  : "solar:alt-arrow-left-linear", size: "md", "aria-hidden": true }) })] }), jsxRuntime.jsxs("div", { className: react.cn("flex items-center py-3", isCollapsed ? "justify-center gap-0" : "gap-3"), children: [jsxRuntime.jsx(react.Avatar, { size: "sm", src: ((_b = userInfo === null || userInfo === void 0 ? void 0 : userInfo.avatar) === null || _b === void 0 ? void 0 : _b.trim()) || undefined, color: !((_c = userInfo === null || userInfo === void 0 ? void 0 : userInfo.avatar) === null || _c === void 0 ? void 0 : _c.trim()) ? "warning" : "default", name: userName, className: "shrink-0" }), !isCollapsed ? (jsxRuntime.jsxs("div", { className: "menu-claw-collapsible flex min-w-0 flex-col overflow-hidden", children: [jsxRuntime.jsx("p", { className: "truncate text-small font-semibold text-foreground", children: userName }), jsxRuntime.jsx("p", { className: "truncate text-tiny text-default-400", children: userRole })] })) : null] }), jsxRuntime.jsx(MenuClawHistoryPanel, { items: historyConfig.items, initialVisibleCount: historyConfig.initialVisibleCount, onNewConversation: history === null || history === void 0 ? void 0 : history.onNewConversation, isCollapsed: isCollapsed, title: t.historyTitle, newLabel: t.historyNewLabel, showMoreLabel: t.historyShowMoreLabel, showLessLabel: t.historyShowLessLabel, onBeforeSelect: handleSidebarClose }), jsxRuntime.jsx("nav", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", children: menuItems.items.map(function (group) {
3880
3991
  var _a;
3881
- return (jsxRuntime.jsxs("div", { className: "mb-2", children: [group.title && !isCollapsed ? (jsxRuntime.jsx("p", { className: "px-2 pb-1 pt-2 text-tiny font-medium uppercase tracking-wide text-default-400", children: group.title })) : null, jsxRuntime.jsx("ul", { className: "flex flex-col gap-0.5", children: ((_a = group.items) !== null && _a !== void 0 ? _a : []).map(function (item) {
3882
- var _a;
3883
- var isActive = !!item.key && item.key === selectedKey;
3884
- return (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("button", { type: "button", title: isCollapsed ? item.title : undefined, onClick: function () { return handleMenuSelect(item.key, item.href); }, className: react.cn("flex min-h-9 w-full items-center rounded-lg px-2 py-1.5 text-left text-small transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", isCollapsed ? "justify-center" : "gap-3", isActive
3885
- ? "bg-default-100 font-medium text-foreground"
3886
- : "text-default-600 hover:bg-default-100", item.className), children: [item.icon || item.startContent ? (jsxRuntime.jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-default-500 [&_svg]:h-5 [&_svg]:w-5", children: item.icon ? (jsxRuntime.jsx(IconComponent, { icon: item.icon, size: "md", "aria-hidden": true })) : (item.startContent) })) : null, !isCollapsed ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: "menu-claw-collapsible flex-1 truncate", children: item.title }), (_a = item.endContent) !== null && _a !== void 0 ? _a : null] })) : null] }) }, item.key));
3887
- }) })] }, group.key));
3992
+ return (jsxRuntime.jsxs("div", { className: "mb-2", children: [group.title && !isCollapsed ? (jsxRuntime.jsx("p", { className: "px-2 pb-1 pt-2 text-tiny font-medium uppercase tracking-wide text-default-400", children: group.title })) : null, jsxRuntime.jsx("ul", { className: "flex flex-col gap-0.5", children: ((_a = group.items) !== null && _a !== void 0 ? _a : []).map(function (item) { return (jsxRuntime.jsx(MenuClawNavItem, { item: item, selectedKey: selectedKey, isCollapsed: isCollapsed, onSelect: handleMenuSelect }, item.key)); }) })] }, group.key));
3888
3993
  }) }), helpSection ? (jsxRuntime.jsx("div", { className: "mt-auto flex flex-col items-center justify-center", children: jsxRuntime.jsx(react.Button, { fullWidth: true, className: "text-default-500 data-[hover=true]:text-default-600", startContent: jsxRuntime.jsx(IconComponent, { className: "text-default-500", icon: "solar:info-circle-line-duotone", size: "md" }), variant: "light", onPress: handleHelpClick, isIconOnly: isCollapsed, children: !isCollapsed ? (jsxRuntime.jsx("span", { className: "menu-claw-collapsible truncate", children: helpSection.title })) : null }) })) : null] }) })] }));
3889
3994
  });
3890
3995
 
@@ -4244,13 +4349,6 @@ var Phone = function (_a) {
4244
4349
  document.removeEventListener("mousedown", handleClickOutside);
4245
4350
  };
4246
4351
  }, [isDropdownOpen]);
4247
- // El dropdown se portea a `body` con posición absoluta fija; cerrarlo cuando
4248
- // un ancestro hace scroll para que no quede flotando fuera de lugar.
4249
- useCloseOnAncestorScroll({
4250
- isOpen: isDropdownOpen,
4251
- onClose: function () { return setIsDropdownOpen(false); },
4252
- contentRef: portalDropdownRef,
4253
- });
4254
4352
  var handleCountrySelect = function (country) {
4255
4353
  setSelectedCountry(country);
4256
4354
  setIsDropdownOpen(false);
@@ -4322,6 +4420,64 @@ var PromotionalBanner = function (_a) {
4322
4420
  }, variant: "bordered", onClick: handleButtonClick }, buttonProps, { children: finalButtonText })), showCloseButton && (jsxRuntime.jsx("div", { className: "flex flex-1 justify-end", children: jsxRuntime.jsx(react.Button, { isIconOnly: true, "aria-label": t.closeButtonLabel, className: "-m-1", size: "lg", variant: "bordered", onClick: handleClose, children: jsxRuntime.jsx(IconComponent, { "aria-hidden": "true", className: "text-default-500", icon: "lucide:x", size: "md" }) }) }))] }));
4323
4421
  };
4324
4422
 
4423
+ /** Paleta categórica por defecto: primary/secondary/success/warning/danger de BeweOS. */
4424
+ var DEFAULT_RANKED_BAR_COLORS = [
4425
+ "#006fee",
4426
+ "#7828c8",
4427
+ "#17c964",
4428
+ "#f5a524",
4429
+ "#f31260",
4430
+ ];
4431
+ function safeValue(value) {
4432
+ return Number.isFinite(value) && value > 0 ? value : 0;
4433
+ }
4434
+ function computeMax(data) {
4435
+ return data.reduce(function (max, d) { return Math.max(max, safeValue(d.value)); }, 0);
4436
+ }
4437
+ /**
4438
+ * `true` cuando no hay datos o todos los valores son 0 — mismo criterio que el
4439
+ * `NotData` legacy de Guru.js.
4440
+ */
4441
+ function isRankedBarListEmpty(data) {
4442
+ return data.length === 0 || computeMax(data) === 0;
4443
+ }
4444
+ /**
4445
+ * Resuelve el ancho de cada barra como porcentaje del **valor máximo del set**
4446
+ * (no del total) — igual que `BusinessStage.js` legacy (`100 * quantity / max`),
4447
+ * y el color final de cada fila.
4448
+ */
4449
+ function computeBars(data, palette) {
4450
+ if (palette === void 0) { palette = DEFAULT_RANKED_BAR_COLORS; }
4451
+ var max = computeMax(data);
4452
+ return data.map(function (item, index) {
4453
+ var _a;
4454
+ var value = safeValue(item.value);
4455
+ return __assign(__assign({}, item), { value: value, color: (_a = item.color) !== null && _a !== void 0 ? _a : palette[index % palette.length], percent: max > 0 ? (value / max) * 100 : 0 });
4456
+ });
4457
+ }
4458
+
4459
+ var DEFAULT_TRANSLATIONS$6 = {
4460
+ emptyState: "Sin datos para mostrar",
4461
+ };
4462
+ /**
4463
+ * RankedBarList - Lista de barras horizontales escaladas al valor máximo del
4464
+ * set (no al total) — mismo criterio visual que `BusinessStage.js` legacy.
4465
+ * No reordena las filas: el llamador decide el orden (por relevancia, por
4466
+ * etapa del funnel, etc.).
4467
+ */
4468
+ var RankedBarList = function (_a) {
4469
+ var data = _a.data, colors = _a.colors, formatValue = _a.formatValue, _b = _a.showValue, showValue = _b === void 0 ? true : _b, _c = _a.barHeight, barHeight = _c === void 0 ? 8 : _c, _d = _a.translations, translations = _d === void 0 ? {} : _d, className = _a.className;
4470
+ var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$6), translations);
4471
+ if (isRankedBarListEmpty(data)) {
4472
+ return (jsxRuntime.jsx("div", { className: className, children: jsxRuntime.jsx(P, { children: t.emptyState }) }));
4473
+ }
4474
+ var bars = computeBars(data, colors);
4475
+ var format = function (value) {
4476
+ return formatValue ? formatValue(value) : String(value);
4477
+ };
4478
+ return (jsxRuntime.jsx("div", { className: ["flex flex-col gap-3", className].filter(Boolean).join(" "), children: bars.map(function (bar) { return (jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [jsxRuntime.jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [jsxRuntime.jsx(P, { className: "truncate", children: bar.label }), showValue && (jsxRuntime.jsx("span", { className: "text-sm font-medium text-foreground", children: format(bar.value) }))] }), jsxRuntime.jsx("div", { className: "w-full rounded-full bg-default-100", style: { height: barHeight }, children: jsxRuntime.jsx("div", { className: "h-full rounded-full", style: { width: "".concat(bar.percent, "%"), backgroundColor: bar.color } }) })] }, bar.label)); }) }));
4479
+ };
4480
+
4325
4481
  var VALID_STEP_COLORS = [
4326
4482
  "primary",
4327
4483
  "secondary",
@@ -5379,7 +5535,7 @@ var ScheduleRow = function (_a) {
5379
5535
  // Return slots exactly as they are - no automatic additions
5380
5536
  return slots;
5381
5537
  };
5382
- return (jsxRuntime.jsxs("div", { className: "flex flex-col w-full gap-y-4 last:border-b-0 last:mb-0 last:pb-0 border-b border-default-200 xs:py-4 xl:p-4 first:pt-0", children: [jsxRuntime.jsxs("div", { className: "flex w-full items-center justify-between", children: [jsxRuntime.jsxs("div", { className: "flex xs:space-x-2 sm:space-x-4", children: [jsxRuntime.jsx("h3", { className: "text-small font-semibold text-default-900 capitalize", children: day }), jsxRuntime.jsx(react.Chip, { size: "sm", color: daySchedule.isOpen ? "primary" : "default", className: "text-background", children: daySchedule.isOpen ? t.open : t.closed })] }), jsxRuntime.jsxs("div", { className: "flex xs:gap-2 sm:gap-5", children: [jsxRuntime.jsx(Switch, { size: "sm", color: "primary", isSelected: daySchedule.isOpen, onValueChange: handleToggleDay }), showCopyToAll && onCopyToAll && (jsxRuntime.jsx(Button, { size: "sm", variant: "bordered", onPress: function () { return onCopyToAll(day); }, children: t.copyToAll }))] })] }), daySchedule.isOpen && (jsxRuntime.jsx("div", { className: "flex flex-col justify-around gap-y-3 ", children: getSlotsToDisplay().map(function (slot, index) {
5538
+ return (jsxRuntime.jsxs("div", { className: "flex flex-col w-full gap-y-4 last:border-b-0 last:mb-0 last:pb-0 border-b border-default-200 xs:py-4 xl:p-4 first:pt-0", children: [jsxRuntime.jsxs("div", { className: "flex w-full items-center justify-between", children: [jsxRuntime.jsxs("div", { className: "flex items-center xs:space-x-2 sm:space-x-4", children: [jsxRuntime.jsx("h3", { className: "text-small font-semibold text-default-900 capitalize w-24 shrink-0", children: day }), jsxRuntime.jsx(react.Chip, { size: "sm", color: daySchedule.isOpen ? "primary" : "default", className: "text-background", children: daySchedule.isOpen ? t.open : t.closed })] }), jsxRuntime.jsxs("div", { className: "flex xs:gap-2 sm:gap-5", children: [jsxRuntime.jsx(Switch, { size: "sm", color: "primary", isSelected: daySchedule.isOpen, onValueChange: handleToggleDay }), showCopyToAll && onCopyToAll && (jsxRuntime.jsx(Button, { size: "sm", variant: "bordered", onPress: function () { return onCopyToAll(day); }, children: t.copyToAll }))] })] }), daySchedule.isOpen && (jsxRuntime.jsx("div", { className: "flex flex-col justify-around gap-y-3 ", children: getSlotsToDisplay().map(function (slot, index) {
5383
5539
  var slotsToDisplay = getSlotsToDisplay();
5384
5540
  var isLastSlot = index === slotsToDisplay.length - 1;
5385
5541
  var isSlotFilled = slot.from && slot.to;
@@ -5513,6 +5669,59 @@ var SocialMediaPreview = function (_a) {
5513
5669
  }
5514
5670
  };
5515
5671
 
5672
+ var paddingClasses = {
5673
+ sm: "p-4",
5674
+ md: "p-6",
5675
+ lg: "p-8",
5676
+ };
5677
+
5678
+ /**
5679
+ * Card genérica siguiendo las reglas de diseño BeweOS basada en HeroUI.
5680
+ *
5681
+ * Reglas aplicadas:
5682
+ * - Shadow: none, sm, md, lg (configurable)
5683
+ * - Radius: sm (por defecto, configurable)
5684
+ * - Padding configurable (sm, md, lg)
5685
+ * - Hereda de HeroUI Card con personalización BeweOS
5686
+ */
5687
+ var Card = function (_a) {
5688
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b, _c = _a.shadow, shadow = _c === void 0 ? "sm" : _c, _d = _a.radius, radius = _d === void 0 ? "sm" : _d, _e = _a.padding, padding = _e === void 0 ? "md" : _e, props = __rest(_a, ["children", "className", "shadow", "radius", "padding"]);
5689
+ var paddingClass = paddingClasses[padding];
5690
+ var combinedClassName = [paddingClass, className].filter(Boolean).join(" ");
5691
+ return (jsxRuntime.jsx(react.Card, __assign({ shadow: shadow, radius: radius, className: combinedClassName }, props, { children: children })));
5692
+ };
5693
+
5694
+ var DEFAULT_TRANSLATIONS$5 = {
5695
+ trendUpAriaLabel: "Tendencia al alza",
5696
+ trendDownAriaLabel: "Tendencia a la baja",
5697
+ trendNeutralAriaLabel: "Sin variación",
5698
+ };
5699
+ var TREND_COLOR_CLASS = {
5700
+ positive: "text-success",
5701
+ negative: "text-danger",
5702
+ neutral: "text-foreground-500",
5703
+ };
5704
+ var TREND_ARIA_KEY = {
5705
+ positive: "trendUpAriaLabel",
5706
+ negative: "trendDownAriaLabel",
5707
+ neutral: "trendNeutralAriaLabel",
5708
+ };
5709
+ /**
5710
+ * StatTile - Tarjeta KPI compacta: ícono opcional + título + valor + tendencia opcional.
5711
+ *
5712
+ * Cubre el patrón "tile" (título + número, con o sin ícono/variación) que se repite en
5713
+ * varios dashboards de estadísticas y no encajaba en ningún chart existente de AuraUI.
5714
+ */
5715
+ var StatTile = function (_a) {
5716
+ var _b;
5717
+ var title = _a.title, value = _a.value, icon = _a.icon, trend = _a.trend, _c = _a.translations, translations = _c === void 0 ? {} : _c, className = _a.className, _d = _a.padding, padding = _d === void 0 ? "md" : _d, cardProps = __rest(_a, ["title", "value", "icon", "trend", "translations", "className", "padding"]);
5718
+ var t = __assign(__assign({}, DEFAULT_TRANSLATIONS$5), translations);
5719
+ var direction = (_b = trend === null || trend === void 0 ? void 0 : trend.direction) !== null && _b !== void 0 ? _b : "neutral";
5720
+ return (jsxRuntime.jsxs(Card, __assign({ padding: padding, className: ["flex flex-row items-center gap-3", className]
5721
+ .filter(Boolean)
5722
+ .join(" ") }, cardProps, { children: [icon && (jsxRuntime.jsx("span", { className: "shrink-0 text-foreground-600", "aria-hidden": "true", children: icon })), jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [jsxRuntime.jsx(P, { className: "truncate", children: title }), jsxRuntime.jsxs("div", { className: "flex items-baseline gap-2", children: [jsxRuntime.jsx(H3, { className: "text-2xl font-semibold", children: value }), trend && (jsxRuntime.jsx("span", { className: "text-xs font-medium ".concat(TREND_COLOR_CLASS[direction]), "aria-label": t[TREND_ARIA_KEY[direction]], children: trend.value }))] })] })] })));
5723
+ };
5724
+
5516
5725
  function AuraTable(_a) {
5517
5726
  var columns = _a.columns, items = _a.items, renderCell = _a.renderCell, children = _a.children, props = __rest(_a, ["columns", "items", "renderCell", "children"]);
5518
5727
  return (jsxRuntime.jsxs(react.Table, __assign({ removeWrapper: true, radius: "none" }, props, { children: [jsxRuntime.jsx(react.TableHeader, { columns: columns, children: function (column) { return jsxRuntime.jsx(react.TableColumn, { children: column.label }, column.key); } }), jsxRuntime.jsx(react.TableBody, { items: items, children: function (item) { return (jsxRuntime.jsx(react.TableRow, { children: function (columnKey) { return (jsxRuntime.jsx(react.TableCell, { children: renderCell ? renderCell(item, columnKey) : children })); } }, item.id)); } })] })));
@@ -8901,28 +9110,6 @@ ModalBody.displayName = "ModalBody";
8901
9110
 
8902
9111
  var ModalFooter = react.ModalFooter;
8903
9112
 
8904
- var paddingClasses = {
8905
- sm: "p-4",
8906
- md: "p-6",
8907
- lg: "p-8",
8908
- };
8909
-
8910
- /**
8911
- * Card genérica siguiendo las reglas de diseño BeweOS basada en HeroUI.
8912
- *
8913
- * Reglas aplicadas:
8914
- * - Shadow: none, sm, md, lg (configurable)
8915
- * - Radius: sm (por defecto, configurable)
8916
- * - Padding configurable (sm, md, lg)
8917
- * - Hereda de HeroUI Card con personalización BeweOS
8918
- */
8919
- var Card = function (_a) {
8920
- var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b, _c = _a.shadow, shadow = _c === void 0 ? "sm" : _c, _d = _a.radius, radius = _d === void 0 ? "sm" : _d, _e = _a.padding, padding = _e === void 0 ? "md" : _e, props = __rest(_a, ["children", "className", "shadow", "radius", "padding"]);
8921
- var paddingClass = paddingClasses[padding];
8922
- var combinedClassName = [paddingClass, className].filter(Boolean).join(" ");
8923
- return (jsxRuntime.jsx(react.Card, __assign({ shadow: shadow, radius: radius, className: combinedClassName }, props, { children: children })));
8924
- };
8925
-
8926
9113
  /**
8927
9114
  * Tooltip - Componente BeweOS basado en HeroUI.
8928
9115
  *
@@ -9492,10 +9679,13 @@ exports.ColorPicker = ColorPicker;
9492
9679
  exports.ColorSelector = ColorSelector;
9493
9680
  exports.ContentCarousel = ContentCarousel;
9494
9681
  exports.Currency = Currency;
9682
+ exports.DEFAULT_DONUT_COLORS = DEFAULT_DONUT_COLORS;
9495
9683
  exports.DEFAULT_PREDEFINED_COLORS = DEFAULT_PREDEFINED_COLORS;
9684
+ exports.DEFAULT_RANKED_BAR_COLORS = DEFAULT_RANKED_BAR_COLORS;
9496
9685
  exports.DatePicker = DatePicker;
9497
9686
  exports.DateRangePicker = DateRangePicker;
9498
9687
  exports.DateSelector = DateSelector;
9688
+ exports.DonutChart = DonutChart;
9499
9689
  exports.DrawerFilters = DrawerFilters;
9500
9690
  exports.EmailPreview = EmailPreview;
9501
9691
  exports.GlobalToast = GlobalToast;
@@ -9528,6 +9718,7 @@ exports.Phone = Phone;
9528
9718
  exports.PromotionalBanner = PromotionalBanner;
9529
9719
  exports.REGISTERED_THEME_COLORS = REGISTERED_THEME_COLORS;
9530
9720
  exports.RangeFilter = RangeFilter;
9721
+ exports.RankedBarList = RankedBarList;
9531
9722
  exports.RowSteps = RowSteps;
9532
9723
  exports.SEGMENTATION_DEFAULT_TRANSLATIONS = DEFAULT_TRANSLATIONS$1;
9533
9724
  exports.ScheduleRow = ScheduleRow;
@@ -9538,6 +9729,7 @@ exports.SimpleLineChart = SimpleLineChart;
9538
9729
  exports.SocialMediaBar = SocialMediaBar;
9539
9730
  exports.SocialMediaCarousel = SocialMediaCarousel;
9540
9731
  exports.SocialMediaPreview = SocialMediaPreview;
9732
+ exports.StatTile = StatTile;
9541
9733
  exports.StepIndicator = StepIndicator;
9542
9734
  exports.SwitchComponent = Switch;
9543
9735
  exports.THEME_COLOR_HEX_MAP = THEME_COLOR_HEX_MAP;
@@ -9558,6 +9750,10 @@ exports.Wizard = Wizard;
9558
9750
  exports.WizardNavigation = WizardNavigation;
9559
9751
  exports.WizardSidebar = WizardSidebar;
9560
9752
  exports.applyCustomPrimaryColor = applyCustomPrimaryColor;
9753
+ exports.computeBars = computeBars;
9754
+ exports.computeMax = computeMax;
9755
+ exports.computeSlices = computeSlices;
9756
+ exports.computeTotal = computeTotal;
9561
9757
  exports.createCurrencyFormatter = createCurrencyFormatter;
9562
9758
  exports.defaultCountries = uniqueCountries;
9563
9759
  exports.defaultCurrencyOptions = defaultCurrencyOptions;
@@ -9571,9 +9767,11 @@ exports.getSelectedKeyFromPath = getSelectedKeyFromPath;
9571
9767
  exports.hexToThemeColor = hexToThemeColor;
9572
9768
  exports.hslToCssValue = hslToCssValue;
9573
9769
  exports.isAuroraFullThemeId = isAuroraFullThemeId;
9770
+ exports.isDonutEmpty = isDonutEmpty;
9574
9771
  exports.isExactThemeColor = isExactThemeColor;
9575
9772
  exports.isGroupState = isGroupState;
9576
9773
  exports.isHexColor = isHexColor;
9774
+ exports.isRankedBarListEmpty = isRankedBarListEmpty;
9577
9775
  exports.isSegmentationGroup = isSegmentationGroup;
9578
9776
  exports.removeCustomPrimaryColor = removeCustomPrimaryColor;
9579
9777
  exports.sizeMap = sizeMap;