@beweco/aurora-ui 0.6.61 → 0.6.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -341,7 +341,7 @@ var Input = function (_a) {
341
341
  } })));
342
342
  };
343
343
 
344
- var defaultTranslations$f = {
344
+ var defaultTranslations$g = {
345
345
  addHolidayTitle: "Add holiday",
346
346
  dayOption: "Day",
347
347
  dateRangeOption: "Date range",
@@ -365,7 +365,7 @@ var INITIAL_HOLIDAY_STATE = {
365
365
  */
366
366
  var AddHolidayForm = function (_a) {
367
367
  var onAddHoliday = _a.onAddHoliday, translations = _a.translations, className = _a.className, radioGroupProps = _a.radioGroupProps, dateRangePickerProps = _a.dateRangePickerProps, buttonProps = _a.buttonProps;
368
- var t = __assign(__assign({}, defaultTranslations$f), translations);
368
+ var t = __assign(__assign({}, defaultTranslations$g), translations);
369
369
  var _b = React.useState(INITIAL_HOLIDAY_STATE), newHoliday = _b[0], setNewHoliday = _b[1];
370
370
  /**
371
371
  * A boolean flag that determines if a date has been set.
@@ -435,7 +435,7 @@ var P = function (_a) {
435
435
  return (jsxRuntime.jsx("p", __assign({ className: react.cn("text-tiny text-default-500 font-normal", className) }, props, { children: children })));
436
436
  };
437
437
 
438
- var defaultTranslations$e = {
438
+ var defaultTranslations$f = {
439
439
  title: "Analytics",
440
440
  description: "Monthly growth of your metrics during the selected period",
441
441
  viewDetails: "View Details",
@@ -489,7 +489,7 @@ var formatMonth = function (month) {
489
489
  var AnalyticsCard = function (_a) {
490
490
  var _b, _c;
491
491
  var data = _a.data, _d = _a.showTimePeriods, showTimePeriods = _d === void 0 ? true : _d, _e = _a.showDropdownMenu, showDropdownMenu = _e === void 0 ? true : _e, _f = _a.showMetricCards, showMetricCards = _f === void 0 ? true : _f, onChartChange = _a.onChartChange, onMenuAction = _a.onMenuAction, onTimePeriodChange = _a.onTimePeriodChange, _g = _a.translations, translations = _g === void 0 ? {} : _g, props = __rest(_a, ["data", "showTimePeriods", "showDropdownMenu", "showMetricCards", "onChartChange", "onMenuAction", "onTimePeriodChange", "translations"]);
492
- var t = __assign(__assign({}, defaultTranslations$e), translations);
492
+ var t = __assign(__assign({}, defaultTranslations$f), translations);
493
493
  var _h = React.useState((_c = (_b = data[0]) === null || _b === void 0 ? void 0 : _b.key) !== null && _c !== void 0 ? _c : ""), activeChart = _h[0], setActiveChart = _h[1];
494
494
  var activeChartData = React.useMemo(function () {
495
495
  var _a;
@@ -652,7 +652,7 @@ var DEFAULT_PREDEFINED_COLORS = [
652
652
  /**
653
653
  * Default translations (Spanish)
654
654
  */
655
- var defaultTranslations$d = {
655
+ var defaultTranslations$e = {
656
656
  label: "Color",
657
657
  placeholder: "Ingresa código hex",
658
658
  customColorLabel: "Color personalizado",
@@ -717,7 +717,7 @@ var ColorPicker = React.forwardRef(function (_a, ref) {
717
717
  var value = _a.value, onChange = _a.onChange, label = _a.label, _b = _a.required, required = _b === void 0 ? false : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, _d = _a.error, error = _d === void 0 ? false : _d, errorText = _a.errorText, _e = _a.predefinedColors, predefinedColors = _e === void 0 ? DEFAULT_PREDEFINED_COLORS : _e, _f = _a.enableRecentColors, enableRecentColors = _f === void 0 ? true : _f, _g = _a.maxRecentColors, maxRecentColors = _g === void 0 ? 6 : _g, _h = _a.recentColorsStorageKey, recentColorsStorageKey = _h === void 0 ? "aurora-ui-recent-colors" : _h, _j = _a.showPredefinedColors, showPredefinedColors = _j === void 0 ? true : _j, _k = _a.translations, translations = _k === void 0 ? {} : _k, _l = _a.className, className = _l === void 0 ? "" : _l, id = _a.id, name = _a.name;
718
718
  var generatedId = React.useId();
719
719
  var inputId = id || generatedId;
720
- var t = __assign(__assign({}, defaultTranslations$d), translations);
720
+ var t = __assign(__assign({}, defaultTranslations$e), translations);
721
721
  // Local state for text input — holds the hex digits WITHOUT the leading "#".
722
722
  // The "#" is rendered as a fixed startContent prefix.
723
723
  var _m = React.useState(stripHash(value)), textValue = _m[0], setTextValue = _m[1];
@@ -1848,7 +1848,7 @@ var countries = [
1848
1848
  ];
1849
1849
  var uniqueCountries = Array.from(new Map(countries.map(function (item) { return [item.code + item.name, item]; })).values());
1850
1850
  // Traducciones por defecto
1851
- var defaultTranslations$c = {
1851
+ var defaultTranslations$d = {
1852
1852
  label: "Teléfono",
1853
1853
  placeholder: "Número de teléfono",
1854
1854
  searchPlaceholder: "Buscar país...",
@@ -1932,7 +1932,7 @@ var defaultCurrencyOptions = (function () {
1932
1932
  euroOption
1933
1933
  ], false), base.slice(zaIdx + 1), true);
1934
1934
  })();
1935
- var defaultTranslations$b = {
1935
+ var defaultTranslations$c = {
1936
1936
  label: "Importe",
1937
1937
  placeholder: "0",
1938
1938
  searchPlaceholder: "Buscar país o moneda...",
@@ -2397,7 +2397,7 @@ var Currency = function (_a) {
2397
2397
  var portalDropdownRef = React.useRef(null);
2398
2398
  var _q = React.useState({}), dropdownPosition = _q[0], setDropdownPosition = _q[1];
2399
2399
  var _r = React.useState(options), filteredOptions = _r[0], setFilteredOptions = _r[1];
2400
- var t = __assign(__assign({}, defaultTranslations$b), translations);
2400
+ var t = __assign(__assign({}, defaultTranslations$c), translations);
2401
2401
  var getCountryName = function (opt) { var _a, _b; return (_b = (_a = t.countries) === null || _a === void 0 ? void 0 : _a[opt.country]) !== null && _b !== void 0 ? _b : opt.name; };
2402
2402
  var finalLabel = label !== null && label !== void 0 ? label : t.label;
2403
2403
  React.useEffect(function () {
@@ -2557,7 +2557,7 @@ function useBreakpoint() {
2557
2557
  }
2558
2558
 
2559
2559
  // Default translations in Spanish
2560
- var defaultTranslations$a = {
2560
+ var defaultTranslations$b = {
2561
2561
  emptyStateMessage: "No hay contenido disponible",
2562
2562
  emptyStateButtonText: "Agregar contenido",
2563
2563
  previousButtonLabel: "Anterior",
@@ -2583,7 +2583,7 @@ var defaultTranslations$a = {
2583
2583
  */
2584
2584
  var ContentCarousel = function (_a) {
2585
2585
  var items = _a.items, onItemClick = _a.onItemClick, _b = _a.className, className = _b === void 0 ? "" : _b, _c = _a.emptyStateRedirectPath, emptyStateRedirectPath = _c === void 0 ? "" : _c, _d = _a.translations, translations = _d === void 0 ? {} : _d, renderFooter = _a.renderFooter, renderHeader = _a.renderHeader, renderBody = _a.renderBody, _e = _a.haveChip, haveChip = _e === void 0 ? false : _e;
2586
- var t = __assign(__assign({}, defaultTranslations$a), translations);
2586
+ var t = __assign(__assign({}, defaultTranslations$b), translations);
2587
2587
  var breakpoint = useBreakpoint();
2588
2588
  var isMobile = breakpoint === "mobile";
2589
2589
  var isTablet = breakpoint === "tablet";
@@ -2788,7 +2788,7 @@ function CarouselItemComponent(_a) {
2788
2788
  }
2789
2789
 
2790
2790
  // Default translations in Spanish
2791
- var defaultTranslations$9 = {
2791
+ var defaultTranslations$a = {
2792
2792
  editButtonLabel: "Editar",
2793
2793
  deleteButtonLabel: "Eliminar",
2794
2794
  publishButtonLabel: "Publicar",
@@ -2815,7 +2815,7 @@ var defaultTranslations$9 = {
2815
2815
  */
2816
2816
  var SocialMediaBar = function (_a) {
2817
2817
  var platform = _a.platform, _b = _a.badgeOnly, badgeOnly = _b === void 0 ? false : _b, _c = _a.showPreview, showPreview = _c === void 0 ? false : _c, onEdit = _a.onEdit, onDelete = _a.onDelete, onPublish = _a.onPublish, onPreview = _a.onPreview, _d = _a.actionsAlwaysVisible, actionsAlwaysVisible = _d === void 0 ? false : _d, _e = _a.isHovered, isHovered = _e === void 0 ? false : _e, _f = _a.className, className = _f === void 0 ? "" : _f, _g = _a.translations, translations = _g === void 0 ? {} : _g, customBadge = _a.customBadge, customActions = _a.customActions;
2818
- var t = __assign(__assign({}, defaultTranslations$9), translations);
2818
+ var t = __assign(__assign({}, defaultTranslations$a), translations);
2819
2819
  // Determine visibility of actions
2820
2820
  var showActions = actionsAlwaysVisible || isHovered;
2821
2821
  return (jsxRuntime.jsxs("div", { className: "flex items-center justify-between ".concat(className), children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [customBadge || (jsxRuntime.jsxs("div", { className: "backdrop-blur-xl border border-white/30 rounded-full px-3 py-1.5 shadow-xl flex items-center gap-2", style: {
@@ -2891,7 +2891,7 @@ var SocialMediaCarousel = function (_a) {
2891
2891
  };
2892
2892
 
2893
2893
  // Traducciones por defecto en español
2894
- var defaultTranslations$8 = {
2894
+ var defaultTranslations$9 = {
2895
2895
  dayOption: "Día específico",
2896
2896
  dateRangeOption: "Rango de fechas",
2897
2897
  selectDateAriaLabel: "Seleccionar fecha",
@@ -2909,7 +2909,7 @@ var DateSelector = function (_a) {
2909
2909
  var _f = React.useState(initialDate || null), date = _f[0], setDate = _f[1];
2910
2910
  var _g = React.useState(initialDateRange || null), dateRange = _g[0], setDateRange = _g[1];
2911
2911
  // Combinar traducciones por defecto con las proporcionadas
2912
- var t = __assign(__assign({}, defaultTranslations$8), translations);
2912
+ var t = __assign(__assign({}, defaultTranslations$9), translations);
2913
2913
  var handleTypeChange = function (value) {
2914
2914
  var newType = value;
2915
2915
  setType(newType);
@@ -3221,7 +3221,7 @@ var KanbanComponent = function (_a) {
3221
3221
  var Kanban = React.memo(KanbanComponent);
3222
3222
  Kanban.displayName = "Kanban";
3223
3223
 
3224
- var defaultTranslations$7 = {
3224
+ var defaultTranslations$8 = {
3225
3225
  previewAlt: "Vista previa de imagen",
3226
3226
  removeButtonAriaLabel: "Eliminar imagen",
3227
3227
  emptyStateText: "No hay imágenes para mostrar",
@@ -3254,7 +3254,7 @@ var normalizeImages = function (images) {
3254
3254
  };
3255
3255
  var ImagePreview = function (_a) {
3256
3256
  var images = _a.images, _b = _a.size, size = _b === void 0 ? "small" : _b, onRemove = _a.onRemove, _c = _a.showRemoveButton, showRemoveButton = _c === void 0 ? true : _c, _d = _a.className, className = _d === void 0 ? "" : _d, _e = _a.translations, translations = _e === void 0 ? {} : _e, _f = _a.backgroundColor, backgroundColor = _f === void 0 ? "bg-white dark:bg-gray-800" : _f, _g = _a.radius, radius = _g === void 0 ? "lg" : _g, _h = _a.showBorder, showBorder = _h === void 0 ? true : _h, onImageClick = _a.onImageClick;
3257
- var t = __assign(__assign({}, defaultTranslations$7), translations);
3257
+ var t = __assign(__assign({}, defaultTranslations$8), translations);
3258
3258
  var normalizedImages = normalizeImages(images);
3259
3259
  var sizeClass = sizeClasses[size];
3260
3260
  var radiusClass = radiusClasses[radius];
@@ -3780,7 +3780,7 @@ var VALID_STEP_COLORS$1 = [
3780
3780
  "danger",
3781
3781
  "default",
3782
3782
  ];
3783
- var defaultTranslations$6 = {
3783
+ var defaultTranslations$7 = {
3784
3784
  checkIconTitle: "Check",
3785
3785
  };
3786
3786
  function getContainerCSSVars$1(color) {
@@ -3825,7 +3825,7 @@ function getCircleStyle$1(status) {
3825
3825
  var VerticalSteps = React.forwardRef(function (_a, ref) {
3826
3826
  var _b = _a.color, color = _b === void 0 ? "primary" : _b, _c = _a.steps, stepsProp = _c === void 0 ? [] : _c, _d = _a.defaultStep, defaultStep = _d === void 0 ? 0 : _d, onStepChange = _a.onStepChange, currentStepProp = _a.currentStep, _e = _a.hideProgressBars, hideProgressBars = _e === void 0 ? false : _e, _f = _a.hideInactiveDescriptions, hideInactiveDescriptions = _f === void 0 ? false : _f, stepClassName = _a.stepClassName, className = _a.className, translations = _a.translations, props = __rest(_a, ["color", "steps", "defaultStep", "onStepChange", "currentStep", "hideProgressBars", "hideInactiveDescriptions", "stepClassName", "className", "translations"]);
3827
3827
  var _g = $458b0a5536c1a7cf$export$40bfa8c7b0832715(currentStepProp, defaultStep, onStepChange), currentStep = _g[0], setCurrentStep = _g[1];
3828
- var t = __assign(__assign({}, defaultTranslations$6), translations);
3828
+ var t = __assign(__assign({}, defaultTranslations$7), translations);
3829
3829
  var steps = React.useMemo(function () {
3830
3830
  if (typeof stepsProp === "number") {
3831
3831
  return Array.from({ length: stepsProp }, function () { return ({}); });
@@ -3989,7 +3989,7 @@ var Phone = function (_a) {
3989
3989
  var portalDropdownRef = React.useRef(null);
3990
3990
  var _l = React.useState({}), dropdownPosition = _l[0], setDropdownPosition = _l[1];
3991
3991
  var _m = React.useState(uniqueCountries), filteredCountries = _m[0], setFilteredCountries = _m[1];
3992
- var t = __assign(__assign({}, defaultTranslations$c), translations);
3992
+ var t = __assign(__assign({}, defaultTranslations$d), translations);
3993
3993
  var getCountryName = function (country) { var _a, _b; return (_b = (_a = t.countries) === null || _a === void 0 ? void 0 : _a[country.country]) !== null && _b !== void 0 ? _b : country.name; };
3994
3994
  var finalLabel = label || t.label;
3995
3995
  React.useEffect(function () {
@@ -4088,7 +4088,7 @@ var Phone = function (_a) {
4088
4088
  : ""), onClick: function () { return handleCountrySelect(country); }, children: [jsxRuntime.jsx("span", { className: "mr-3", children: jsxRuntime.jsx(FlagIcon, { countryCode: country.country, size: "md" }) }), jsxRuntime.jsx("span", { className: "flex-1 text-left text-default-500", children: getCountryName(country) }), jsxRuntime.jsx("span", { className: "text-xs text-default-500", children: country.code })] }, "".concat(country.code, "-").concat(country.country))); })) : (jsxRuntime.jsx("div", { className: "px-4 py-2 text-sm text-default-500", children: t.noCountriesFound })) })] }), document.body)] }));
4089
4089
  };
4090
4090
 
4091
- var defaultTranslations$5 = {
4091
+ var defaultTranslations$6 = {
4092
4092
  message: "The Winter 2024 Release is here: new editor, analytics API, and so much more.",
4093
4093
  buttonText: "Explore",
4094
4094
  closeButtonLabel: "Close Banner",
@@ -4098,7 +4098,7 @@ var defaultTranslations$5 = {
4098
4098
  */
4099
4099
  var PromotionalBanner = function (_a) {
4100
4100
  var message = _a.message, buttonText = _a.buttonText, _b = _a.messageHref, messageHref = _b === void 0 ? "#" : _b, _c = _a.buttonHref, buttonHref = _c === void 0 ? "#" : _c, _d = _a.showCloseButton, showCloseButton = _d === void 0 ? true : _d, _e = _a.isVisible, isVisible = _e === void 0 ? true : _e, _f = _a.gradientColors, gradientColors = _f === void 0 ? ["default-100", "danger-100", "secondary-100"] : _f, _g = _a.buttonGradientColors, buttonGradientColors = _g === void 0 ? ["#F871A0", "#9353D3"] : _g, onClose = _a.onClose, onMessageClick = _a.onMessageClick, onButtonClick = _a.onButtonClick, _h = _a.messageLinkProps, messageLinkProps = _h === void 0 ? {} : _h, _j = _a.buttonProps, buttonProps = _j === void 0 ? {} : _j, _k = _a.translations, translations = _k === void 0 ? {} : _k;
4101
- var t = __assign(__assign({}, defaultTranslations$5), translations);
4101
+ var t = __assign(__assign({}, defaultTranslations$6), translations);
4102
4102
  var finalMessage = message || t.message;
4103
4103
  var finalButtonText = buttonText || t.buttonText;
4104
4104
  var handleClose = function () {
@@ -5015,7 +5015,7 @@ var TimeInput = function (_a) {
5015
5015
  * />
5016
5016
  * ```
5017
5017
  */
5018
- var defaultTranslations$4 = {
5018
+ var defaultTranslations$5 = {
5019
5019
  /** Label for the start time input field */
5020
5020
  from: "Desde",
5021
5021
  /** Label for the end time input field */
@@ -5073,7 +5073,7 @@ var defaultTranslations$4 = {
5073
5073
  */
5074
5074
  var ScheduleRow = function (_a) {
5075
5075
  var day = _a.day, daySchedule = _a.daySchedule, _b = _a.translations, translations = _b === void 0 ? {} : _b, _c = _a.showCopyToAll, showCopyToAll = _c === void 0 ? false : _c, onChange = _a.onChange, onCopyToAll = _a.onCopyToAll;
5076
- var t = __assign(__assign({}, defaultTranslations$4), translations);
5076
+ var t = __assign(__assign({}, defaultTranslations$5), translations);
5077
5077
  /**
5078
5078
  * @function validateTimeSlots
5079
5079
  * @description Validates all time slots to ensure the "from" time is not after the "to" time.
@@ -5226,7 +5226,7 @@ var Select = function (_a) {
5226
5226
  } })) }));
5227
5227
  };
5228
5228
 
5229
- var defaultTranslations$3 = {
5229
+ var defaultTranslations$4 = {
5230
5230
  username: "tu_negocio",
5231
5231
  sendMessage: "Enviar mensaje",
5232
5232
  viewMore: "ver más",
@@ -5251,7 +5251,7 @@ var defaultTranslations$3 = {
5251
5251
  */
5252
5252
  var SocialMediaPreview = function (_a) {
5253
5253
  var platform = _a.platform, imageUrl = _a.imageUrl, caption = _a.caption, _b = _a.variant, variant = _b === void 0 ? "full" : _b, _c = _a.postAspectRatio, postAspectRatio = _c === void 0 ? "square" : _c, _d = _a.showHeader, showHeader = _d === void 0 ? true : _d, _e = _a.maxCaptionLength, maxCaptionLength = _e === void 0 ? 125 : _e, onToggleCaption = _a.onToggleCaption, showFullCaption = _a.showFullCaption, username = _a.username, avatarUrl = _a.avatarUrl, _f = _a.translations, translations = _f === void 0 ? {} : _f, _g = _a.className, className = _g === void 0 ? "" : _g, _h = _a.imageProps, imageProps = _h === void 0 ? {} : _h, _j = _a.showEditButton, showEditButton = _j === void 0 ? false : _j, onEditClick = _a.onEditClick;
5254
- var t = __assign(__assign({}, defaultTranslations$3), translations);
5254
+ var t = __assign(__assign({}, defaultTranslations$4), translations);
5255
5255
  var displayUsername = username || t.username;
5256
5256
  var shouldTruncate = variant === "compact" && caption.length > maxCaptionLength;
5257
5257
  // Get aspect ratio based on postAspectRatio prop
@@ -5333,7 +5333,7 @@ var Textarea = function (_a) {
5333
5333
  };
5334
5334
 
5335
5335
  // Traducciones por defecto en español según las reglas de diseño
5336
- var defaultTranslations$2 = {
5336
+ var defaultTranslations$3 = {
5337
5337
  lightTheme: "Claro",
5338
5338
  darkTheme: "Oscuro",
5339
5339
  };
@@ -5349,7 +5349,7 @@ var defaultTranslations$2 = {
5349
5349
  var ThemePicker = function (_a) {
5350
5350
  var value = _a.value, onChange = _a.onChange, className = _a.className, _b = _a.translations, translations = _b === void 0 ? {} : _b;
5351
5351
  // Combinar traducciones por defecto con las proporcionadas
5352
- var t = __assign(__assign({}, defaultTranslations$2), translations);
5352
+ var t = __assign(__assign({}, defaultTranslations$3), translations);
5353
5353
  var themes = [
5354
5354
  {
5355
5355
  key: "light",
@@ -5778,7 +5778,7 @@ var TwoColumnLayoutAgent = function (_a) {
5778
5778
  };
5779
5779
 
5780
5780
  // Traducciones por defecto en español
5781
- var defaultTranslations$1 = {
5781
+ var defaultTranslations$2 = {
5782
5782
  uploadText: "Da clic y selecciona tus archivos",
5783
5783
  subText: "",
5784
5784
  dragText: "Suelta el archivo aquí",
@@ -6128,7 +6128,7 @@ var UploadFile = function (_a) {
6128
6128
  var _q = React.useState(""), selectedImageUrl = _q[0], setSelectedImageUrl = _q[1];
6129
6129
  var _r = React.useState(null); _r[0]; var setOriginalFile = _r[1];
6130
6130
  // Combinar traducciones por defecto con las proporcionadas
6131
- var t = React.useMemo(function () { return (__assign(__assign({}, defaultTranslations$1), translations)); }, [translations]);
6131
+ var t = React.useMemo(function () { return (__assign(__assign({}, defaultTranslations$2), translations)); }, [translations]);
6132
6132
  // Actualizar texto si se pasa como prop (retrocompatibilidad)
6133
6133
  var finalText = text || t.uploadText;
6134
6134
  var finalSubText = subText || t.subText;
@@ -6314,6 +6314,185 @@ var UploadFile = function (_a) {
6314
6314
  };
6315
6315
  UploadFile.displayName = "UploadFile";
6316
6316
 
6317
+ /**
6318
+ * Jitter pseudo-aleatorio determinista en [0,1), sembrado SOLO por el índice.
6319
+ * Misma constante Knuth (2654435761) que `computeStripJitter`/`computeBoxJitter`
6320
+ * de beweanalytics — nunca `Math.random()`.
6321
+ */
6322
+ function jitter(index) {
6323
+ return ((index * 2654435761) % 1000) / 1000;
6324
+ }
6325
+ /**
6326
+ * Cuartiles por interpolación lineal (R-7, el default de numpy/Excel).
6327
+ * Espeja `computeQuartiles` de beweanalytics para coherencia entre repos.
6328
+ */
6329
+ function computeQuartilesFromRaw(values) {
6330
+ if (values.length === 0) {
6331
+ return { min: 0, q1: 0, median: 0, q3: 0, max: 0 };
6332
+ }
6333
+ var sorted = __spreadArray([], values, true).sort(function (a, b) { return a - b; });
6334
+ var n = sorted.length;
6335
+ var first = sorted[0];
6336
+ var last = sorted[n - 1];
6337
+ var percentile = function (p) {
6338
+ if (n === 1) {
6339
+ return first;
6340
+ }
6341
+ var h = (n - 1) * p;
6342
+ var lo = Math.floor(h);
6343
+ var hi = Math.ceil(h);
6344
+ var loVal = sorted[lo];
6345
+ if (lo === hi) {
6346
+ return loVal;
6347
+ }
6348
+ var hiVal = sorted[hi];
6349
+ return loVal + (h - lo) * (hiVal - loVal);
6350
+ };
6351
+ return {
6352
+ min: first,
6353
+ q1: percentile(0.25),
6354
+ median: percentile(0.5),
6355
+ q3: percentile(0.75),
6356
+ max: last,
6357
+ };
6358
+ }
6359
+ /** Un grupo cae al fallback si tiene pocos datos o trae valores crudos. */
6360
+ function shouldFallback(group, minN) {
6361
+ var _a, _b;
6362
+ return group.n < minN || ((_b = (_a = group.rawValues) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
6363
+ }
6364
+ var TO_SECONDS = {
6365
+ s: 1,
6366
+ min: 60,
6367
+ h: 3600,
6368
+ d: 86400,
6369
+ };
6370
+ /**
6371
+ * Elige la unidad de display (s/min/h/d) más legible para un valor de
6372
+ * referencia (típicamente la mediana) y devuelve el `factor` por el que
6373
+ * multiplicar los valores en `baseUnit` para obtener la unidad elegida.
6374
+ */
6375
+ function pickDisplayUnit(value, base) {
6376
+ if (base === "none") {
6377
+ return { unit: "", factor: 1 };
6378
+ }
6379
+ var seconds = Math.abs(value) * TO_SECONDS[base];
6380
+ var unit = "s";
6381
+ if (seconds >= TO_SECONDS.d) {
6382
+ unit = "d";
6383
+ }
6384
+ else if (seconds >= TO_SECONDS.h) {
6385
+ unit = "h";
6386
+ }
6387
+ else if (seconds >= TO_SECONDS.min) {
6388
+ unit = "min";
6389
+ }
6390
+ return { unit: unit, factor: TO_SECONDS[base] / TO_SECONDS[unit] };
6391
+ }
6392
+ /**
6393
+ * Path SVG del cuerpo del violin: polígono cerrado y espejado sobre `centerX`.
6394
+ * El ancho de cada bin es proporcional a su count (normalizado al bin máximo)
6395
+ * escalado a `halfWidth` px. `valueToY` mapea el valor medio del bin a la Y en px.
6396
+ */
6397
+ function buildDensityPath(bins, centerX, halfWidth, valueToY) {
6398
+ if (bins.length === 0) {
6399
+ return "";
6400
+ }
6401
+ var maxCount = Math.max.apply(Math, __spreadArray(__spreadArray([], bins.map(function (b) { return b.count; }), false), [1], false));
6402
+ var pts = bins.map(function (b) {
6403
+ var mid = (b.x0 + b.x1) / 2;
6404
+ return { y: valueToY(mid), w: (b.count / maxCount) * halfWidth };
6405
+ });
6406
+ var right = pts.map(function (p) { return "".concat(centerX + p.w, ",").concat(p.y); });
6407
+ var left = __spreadArray([], pts, true).reverse().map(function (p) { return "".concat(centerX - p.w, ",").concat(p.y); });
6408
+ return "M ".concat(right.join(" L "), " L ").concat(left.join(" L "), " Z");
6409
+ }
6410
+
6411
+ var COLOR_STROKE$1 = "#4338ca";
6412
+ var COLOR_MEDIAN$1 = "#1e3a8a";
6413
+ var COLOR_POINT = "#6366f1";
6414
+ var BOX_HALF = 10;
6415
+ var JITTER_SPAN = 22;
6416
+ /**
6417
+ * Fallback para grupos con n<20: caja (q1–q3) + mediana + puntos crudos con
6418
+ * jitter horizontal determinista. Un violin de 8 puntos miente; aquí se ve cada
6419
+ * punto real (caso Guru). Si faltan `rawValues`, cae a caja desde percentiles.
6420
+ */
6421
+ function ViolinFallback(_a) {
6422
+ var _b;
6423
+ var group = _a.group, centerX = _a.centerX, valueToY = _a.valueToY;
6424
+ var raw = (_b = group.rawValues) !== null && _b !== void 0 ? _b : [];
6425
+ var q = raw.length > 0
6426
+ ? computeQuartilesFromRaw(raw)
6427
+ : {
6428
+ min: group.p5,
6429
+ q1: group.p25,
6430
+ median: group.p50,
6431
+ q3: group.p75,
6432
+ max: group.p95,
6433
+ };
6434
+ return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("line", { x1: centerX, x2: centerX, y1: valueToY(q.min), y2: valueToY(q.max), stroke: COLOR_STROKE$1, strokeWidth: 1 }), jsxRuntime.jsx("rect", { x: centerX - BOX_HALF, y: valueToY(q.q3), width: BOX_HALF * 2, height: Math.max(0, valueToY(q.q1) - valueToY(q.q3)), fill: COLOR_STROKE$1, fillOpacity: 0.18, stroke: COLOR_STROKE$1 }), jsxRuntime.jsx("line", { x1: centerX - BOX_HALF, x2: centerX + BOX_HALF, y1: valueToY(q.median), y2: valueToY(q.median), stroke: COLOR_MEDIAN$1, strokeWidth: 2 }), raw.map(function (value, idx) { return (jsxRuntime.jsx("circle", { cx: centerX + (jitter(idx) - 0.5) * JITTER_SPAN, cy: valueToY(value), r: 2.5, fill: COLOR_POINT, fillOpacity: 0.8 }, "".concat(value, "-").concat(idx))); })] }));
6435
+ }
6436
+
6437
+ var MARGIN = { top: 24, right: 16, bottom: 40, left: 44 };
6438
+ var VIEW_WIDTH = 640;
6439
+ var VIOLIN_HALF_WIDTH = 46;
6440
+ var COLOR_BODY = "#c7d2fe";
6441
+ var COLOR_STROKE = "#4338ca";
6442
+ var COLOR_MEDIAN = "#1e3a8a";
6443
+ var COLOR_AXIS = "#6b7280";
6444
+ var defaultTranslations$1 = {
6445
+ emptyState: "Sin datos de distribución",
6446
+ sampleSizeLabel: "n",
6447
+ outliersLabel: "outliers",
6448
+ };
6449
+ function formatTick(value, factor, unit) {
6450
+ var scaled = value * factor;
6451
+ var rounded = Math.round(scaled * 10) / 10;
6452
+ return unit ? "".concat(rounded).concat(unit) : "".concat(rounded);
6453
+ }
6454
+ /**
6455
+ * ViolinPlot — distribución por grupo como densidad espejada (SVG puro), con
6456
+ * mediana/cuartiles superpuestos y `n=` visible. Cuando un grupo tiene n<20 (o
6457
+ * trae `rawValues`) degrada a box/strip (`ViolinFallback`): un violin de pocos
6458
+ * puntos miente. La estadística llega pre-calculada del SQL (payload chico).
6459
+ *
6460
+ * Sin `ResponsiveContainer` (no renderiza en happy-dom y complica el test):
6461
+ * `<svg viewBox>` + `width="100%"`. Autocontenido, sin HeroUI, para render
6462
+ * server-side directo en tests.
6463
+ */
6464
+ function ViolinPlot(_a) {
6465
+ var groups = _a.groups, valueLabel = _a.valueLabel, _b = _a.baseUnit, baseUnit = _b === void 0 ? "none" : _b, formatValue = _a.formatValue, _c = _a.height, height = _c === void 0 ? 320 : _c, _d = _a.minSampleForViolin, minSampleForViolin = _d === void 0 ? 20 : _d, _e = _a.translations, translations = _e === void 0 ? {} : _e;
6466
+ var t = __assign(__assign({}, defaultTranslations$1), translations);
6467
+ if (groups.length === 0) {
6468
+ return (jsxRuntime.jsx("svg", { viewBox: "0 0 ".concat(VIEW_WIDTH, " ").concat(height), width: "100%", role: "img", "aria-label": valueLabel, children: jsxRuntime.jsx("text", { x: VIEW_WIDTH / 2, y: height / 2, textAnchor: "middle", fill: COLOR_AXIS, children: t.emptyState }) }));
6469
+ }
6470
+ var plotTop = MARGIN.top;
6471
+ var plotBottom = height - MARGIN.bottom;
6472
+ var plotHeight = plotBottom - plotTop;
6473
+ // Escala Y común a todos los grupos (de 0 al p95 máximo, con margen).
6474
+ var maxValue = Math.max.apply(Math, __spreadArray(__spreadArray([], groups.map(function (g) { return g.p95; }), false), [1], false));
6475
+ var valueToY = function (v) {
6476
+ return plotBottom - (v / maxValue) * plotHeight;
6477
+ };
6478
+ var refMedian = groups.map(function (g) { return g.p50; }).sort(function (a, b) { return a - b; })[Math.floor(groups.length / 2)];
6479
+ var _f = pickDisplayUnit(refMedian, baseUnit), unit = _f.unit, factor = _f.factor;
6480
+ var fmt = formatValue !== null && formatValue !== void 0 ? formatValue : (function (v) { return formatTick(v, factor, unit); });
6481
+ var columnWidth = (VIEW_WIDTH - MARGIN.left - MARGIN.right) / groups.length;
6482
+ return (jsxRuntime.jsxs("svg", { viewBox: "0 0 ".concat(VIEW_WIDTH, " ").concat(height), width: "100%", role: "img", "aria-label": valueLabel, children: [[0, maxValue / 2, maxValue].map(function (v) { return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("line", { x1: MARGIN.left, x2: VIEW_WIDTH - MARGIN.right, y1: valueToY(v), y2: valueToY(v), stroke: "#e5e7eb", strokeDasharray: "3 3" }), jsxRuntime.jsx("text", { x: MARGIN.left - 6, y: valueToY(v) + 4, textAnchor: "end", fontSize: 11, fill: COLOR_AXIS, children: fmt(v) })] }, v)); }), groups.map(function (group, i) {
6483
+ var centerX = MARGIN.left + columnWidth * (i + 0.5);
6484
+ return (jsxRuntime.jsxs("g", { children: [shouldFallback(group, minSampleForViolin) ? (jsxRuntime.jsx(ViolinFallback, { group: group, centerX: centerX, valueToY: valueToY })) : (jsxRuntime.jsx(ViolinBody, { group: group, centerX: centerX, valueToY: valueToY })), jsxRuntime.jsx("text", { x: centerX, y: plotBottom + 16, textAnchor: "middle", fontSize: 12, fill: COLOR_AXIS, children: group.label }), jsxRuntime.jsxs("text", { x: centerX, y: plotBottom + 30, textAnchor: "middle", fontSize: 10, fill: COLOR_AXIS, children: [t.sampleSizeLabel, "=", group.n, group.nExcluded > 0
6485
+ ? " \u00B7 \u2212".concat(group.nExcluded, " ").concat(t.outliersLabel)
6486
+ : ""] })] }, group.label));
6487
+ })] }));
6488
+ }
6489
+ function ViolinBody(_a) {
6490
+ var group = _a.group, centerX = _a.centerX, valueToY = _a.valueToY;
6491
+ var path = buildDensityPath(group.bins, centerX, VIOLIN_HALF_WIDTH, valueToY);
6492
+ var boxHalf = 8;
6493
+ return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("path", { d: path, fill: COLOR_BODY, fillOpacity: 0.55, stroke: COLOR_STROKE, strokeWidth: 1 }), jsxRuntime.jsx("line", { x1: centerX, x2: centerX, y1: valueToY(group.p5), y2: valueToY(group.p95), stroke: COLOR_MEDIAN, strokeWidth: 1 }), jsxRuntime.jsx("rect", { x: centerX - boxHalf, y: valueToY(group.p75), width: boxHalf * 2, height: Math.max(0, valueToY(group.p25) - valueToY(group.p75)), fill: COLOR_STROKE, fillOpacity: 0.25, stroke: COLOR_STROKE }), jsxRuntime.jsx("line", { x1: centerX - boxHalf, x2: centerX + boxHalf, y1: valueToY(group.p50), y2: valueToY(group.p50), stroke: COLOR_MEDIAN, strokeWidth: 2 })] }));
6494
+ }
6495
+
6317
6496
  function resolvePreviewActions(previewAction, ctaType, ctaLabel, ctaValue) {
6318
6497
  var _a;
6319
6498
  var fromProp = (_a = previewAction === null || previewAction === void 0 ? void 0 : previewAction.filter(function (a) {
@@ -9107,6 +9286,7 @@ exports.Tooltip = Tooltip;
9107
9286
  exports.TwoColumnLayoutAgent = TwoColumnLayoutAgent;
9108
9287
  exports.UploadFile = UploadFile;
9109
9288
  exports.VerticalSteps = VerticalSteps;
9289
+ exports.ViolinPlot = ViolinPlot;
9110
9290
  exports.WhatsAppPreview = WhatsAppPreview;
9111
9291
  exports.Wizard = Wizard;
9112
9292
  exports.WizardNavigation = WizardNavigation;
@@ -9115,7 +9295,7 @@ exports.applyCustomPrimaryColor = applyCustomPrimaryColor;
9115
9295
  exports.createCurrencyFormatter = createCurrencyFormatter;
9116
9296
  exports.defaultCountries = uniqueCountries;
9117
9297
  exports.defaultCurrencyOptions = defaultCurrencyOptions;
9118
- exports.defaultTranslations = defaultTranslations$4;
9298
+ exports.defaultTranslations = defaultTranslations$5;
9119
9299
  exports.forceLightOnlyThemeBeforeReact = forceLightOnlyThemeBeforeReact;
9120
9300
  exports.formatAuroraThemeTooltip = formatAuroraThemeTooltip;
9121
9301
  exports.generateThemeColorScale = generateThemeColorScale;
package/dist/index.esm.js CHANGED
@@ -342,7 +342,7 @@ var Input = function (_a) {
342
342
  } })));
343
343
  };
344
344
 
345
- var defaultTranslations$f = {
345
+ var defaultTranslations$g = {
346
346
  addHolidayTitle: "Add holiday",
347
347
  dayOption: "Day",
348
348
  dateRangeOption: "Date range",
@@ -366,7 +366,7 @@ var INITIAL_HOLIDAY_STATE = {
366
366
  */
367
367
  var AddHolidayForm = function (_a) {
368
368
  var onAddHoliday = _a.onAddHoliday, translations = _a.translations, className = _a.className, radioGroupProps = _a.radioGroupProps, dateRangePickerProps = _a.dateRangePickerProps, buttonProps = _a.buttonProps;
369
- var t = __assign(__assign({}, defaultTranslations$f), translations);
369
+ var t = __assign(__assign({}, defaultTranslations$g), translations);
370
370
  var _b = useState(INITIAL_HOLIDAY_STATE), newHoliday = _b[0], setNewHoliday = _b[1];
371
371
  /**
372
372
  * A boolean flag that determines if a date has been set.
@@ -436,7 +436,7 @@ var P = function (_a) {
436
436
  return (jsx("p", __assign({ className: cn("text-tiny text-default-500 font-normal", className) }, props, { children: children })));
437
437
  };
438
438
 
439
- var defaultTranslations$e = {
439
+ var defaultTranslations$f = {
440
440
  title: "Analytics",
441
441
  description: "Monthly growth of your metrics during the selected period",
442
442
  viewDetails: "View Details",
@@ -490,7 +490,7 @@ var formatMonth = function (month) {
490
490
  var AnalyticsCard = function (_a) {
491
491
  var _b, _c;
492
492
  var data = _a.data, _d = _a.showTimePeriods, showTimePeriods = _d === void 0 ? true : _d, _e = _a.showDropdownMenu, showDropdownMenu = _e === void 0 ? true : _e, _f = _a.showMetricCards, showMetricCards = _f === void 0 ? true : _f, onChartChange = _a.onChartChange, onMenuAction = _a.onMenuAction, onTimePeriodChange = _a.onTimePeriodChange, _g = _a.translations, translations = _g === void 0 ? {} : _g, props = __rest(_a, ["data", "showTimePeriods", "showDropdownMenu", "showMetricCards", "onChartChange", "onMenuAction", "onTimePeriodChange", "translations"]);
493
- var t = __assign(__assign({}, defaultTranslations$e), translations);
493
+ var t = __assign(__assign({}, defaultTranslations$f), translations);
494
494
  var _h = useState((_c = (_b = data[0]) === null || _b === void 0 ? void 0 : _b.key) !== null && _c !== void 0 ? _c : ""), activeChart = _h[0], setActiveChart = _h[1];
495
495
  var activeChartData = useMemo(function () {
496
496
  var _a;
@@ -653,7 +653,7 @@ var DEFAULT_PREDEFINED_COLORS = [
653
653
  /**
654
654
  * Default translations (Spanish)
655
655
  */
656
- var defaultTranslations$d = {
656
+ var defaultTranslations$e = {
657
657
  label: "Color",
658
658
  placeholder: "Ingresa código hex",
659
659
  customColorLabel: "Color personalizado",
@@ -718,7 +718,7 @@ var ColorPicker = forwardRef(function (_a, ref) {
718
718
  var value = _a.value, onChange = _a.onChange, label = _a.label, _b = _a.required, required = _b === void 0 ? false : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, _d = _a.error, error = _d === void 0 ? false : _d, errorText = _a.errorText, _e = _a.predefinedColors, predefinedColors = _e === void 0 ? DEFAULT_PREDEFINED_COLORS : _e, _f = _a.enableRecentColors, enableRecentColors = _f === void 0 ? true : _f, _g = _a.maxRecentColors, maxRecentColors = _g === void 0 ? 6 : _g, _h = _a.recentColorsStorageKey, recentColorsStorageKey = _h === void 0 ? "aurora-ui-recent-colors" : _h, _j = _a.showPredefinedColors, showPredefinedColors = _j === void 0 ? true : _j, _k = _a.translations, translations = _k === void 0 ? {} : _k, _l = _a.className, className = _l === void 0 ? "" : _l, id = _a.id, name = _a.name;
719
719
  var generatedId = useId();
720
720
  var inputId = id || generatedId;
721
- var t = __assign(__assign({}, defaultTranslations$d), translations);
721
+ var t = __assign(__assign({}, defaultTranslations$e), translations);
722
722
  // Local state for text input — holds the hex digits WITHOUT the leading "#".
723
723
  // The "#" is rendered as a fixed startContent prefix.
724
724
  var _m = useState(stripHash(value)), textValue = _m[0], setTextValue = _m[1];
@@ -1849,7 +1849,7 @@ var countries = [
1849
1849
  ];
1850
1850
  var uniqueCountries = Array.from(new Map(countries.map(function (item) { return [item.code + item.name, item]; })).values());
1851
1851
  // Traducciones por defecto
1852
- var defaultTranslations$c = {
1852
+ var defaultTranslations$d = {
1853
1853
  label: "Teléfono",
1854
1854
  placeholder: "Número de teléfono",
1855
1855
  searchPlaceholder: "Buscar país...",
@@ -1933,7 +1933,7 @@ var defaultCurrencyOptions = (function () {
1933
1933
  euroOption
1934
1934
  ], false), base.slice(zaIdx + 1), true);
1935
1935
  })();
1936
- var defaultTranslations$b = {
1936
+ var defaultTranslations$c = {
1937
1937
  label: "Importe",
1938
1938
  placeholder: "0",
1939
1939
  searchPlaceholder: "Buscar país o moneda...",
@@ -2398,7 +2398,7 @@ var Currency = function (_a) {
2398
2398
  var portalDropdownRef = useRef(null);
2399
2399
  var _q = useState({}), dropdownPosition = _q[0], setDropdownPosition = _q[1];
2400
2400
  var _r = useState(options), filteredOptions = _r[0], setFilteredOptions = _r[1];
2401
- var t = __assign(__assign({}, defaultTranslations$b), translations);
2401
+ var t = __assign(__assign({}, defaultTranslations$c), translations);
2402
2402
  var getCountryName = function (opt) { var _a, _b; return (_b = (_a = t.countries) === null || _a === void 0 ? void 0 : _a[opt.country]) !== null && _b !== void 0 ? _b : opt.name; };
2403
2403
  var finalLabel = label !== null && label !== void 0 ? label : t.label;
2404
2404
  useEffect(function () {
@@ -2558,7 +2558,7 @@ function useBreakpoint() {
2558
2558
  }
2559
2559
 
2560
2560
  // Default translations in Spanish
2561
- var defaultTranslations$a = {
2561
+ var defaultTranslations$b = {
2562
2562
  emptyStateMessage: "No hay contenido disponible",
2563
2563
  emptyStateButtonText: "Agregar contenido",
2564
2564
  previousButtonLabel: "Anterior",
@@ -2584,7 +2584,7 @@ var defaultTranslations$a = {
2584
2584
  */
2585
2585
  var ContentCarousel = function (_a) {
2586
2586
  var items = _a.items, onItemClick = _a.onItemClick, _b = _a.className, className = _b === void 0 ? "" : _b, _c = _a.emptyStateRedirectPath, emptyStateRedirectPath = _c === void 0 ? "" : _c, _d = _a.translations, translations = _d === void 0 ? {} : _d, renderFooter = _a.renderFooter, renderHeader = _a.renderHeader, renderBody = _a.renderBody, _e = _a.haveChip, haveChip = _e === void 0 ? false : _e;
2587
- var t = __assign(__assign({}, defaultTranslations$a), translations);
2587
+ var t = __assign(__assign({}, defaultTranslations$b), translations);
2588
2588
  var breakpoint = useBreakpoint();
2589
2589
  var isMobile = breakpoint === "mobile";
2590
2590
  var isTablet = breakpoint === "tablet";
@@ -2789,7 +2789,7 @@ function CarouselItemComponent(_a) {
2789
2789
  }
2790
2790
 
2791
2791
  // Default translations in Spanish
2792
- var defaultTranslations$9 = {
2792
+ var defaultTranslations$a = {
2793
2793
  editButtonLabel: "Editar",
2794
2794
  deleteButtonLabel: "Eliminar",
2795
2795
  publishButtonLabel: "Publicar",
@@ -2816,7 +2816,7 @@ var defaultTranslations$9 = {
2816
2816
  */
2817
2817
  var SocialMediaBar = function (_a) {
2818
2818
  var platform = _a.platform, _b = _a.badgeOnly, badgeOnly = _b === void 0 ? false : _b, _c = _a.showPreview, showPreview = _c === void 0 ? false : _c, onEdit = _a.onEdit, onDelete = _a.onDelete, onPublish = _a.onPublish, onPreview = _a.onPreview, _d = _a.actionsAlwaysVisible, actionsAlwaysVisible = _d === void 0 ? false : _d, _e = _a.isHovered, isHovered = _e === void 0 ? false : _e, _f = _a.className, className = _f === void 0 ? "" : _f, _g = _a.translations, translations = _g === void 0 ? {} : _g, customBadge = _a.customBadge, customActions = _a.customActions;
2819
- var t = __assign(__assign({}, defaultTranslations$9), translations);
2819
+ var t = __assign(__assign({}, defaultTranslations$a), translations);
2820
2820
  // Determine visibility of actions
2821
2821
  var showActions = actionsAlwaysVisible || isHovered;
2822
2822
  return (jsxs("div", { className: "flex items-center justify-between ".concat(className), children: [jsxs("div", { className: "flex items-center gap-2", children: [customBadge || (jsxs("div", { className: "backdrop-blur-xl border border-white/30 rounded-full px-3 py-1.5 shadow-xl flex items-center gap-2", style: {
@@ -2892,7 +2892,7 @@ var SocialMediaCarousel = function (_a) {
2892
2892
  };
2893
2893
 
2894
2894
  // Traducciones por defecto en español
2895
- var defaultTranslations$8 = {
2895
+ var defaultTranslations$9 = {
2896
2896
  dayOption: "Día específico",
2897
2897
  dateRangeOption: "Rango de fechas",
2898
2898
  selectDateAriaLabel: "Seleccionar fecha",
@@ -2910,7 +2910,7 @@ var DateSelector = function (_a) {
2910
2910
  var _f = React.useState(initialDate || null), date = _f[0], setDate = _f[1];
2911
2911
  var _g = React.useState(initialDateRange || null), dateRange = _g[0], setDateRange = _g[1];
2912
2912
  // Combinar traducciones por defecto con las proporcionadas
2913
- var t = __assign(__assign({}, defaultTranslations$8), translations);
2913
+ var t = __assign(__assign({}, defaultTranslations$9), translations);
2914
2914
  var handleTypeChange = function (value) {
2915
2915
  var newType = value;
2916
2916
  setType(newType);
@@ -3222,7 +3222,7 @@ var KanbanComponent = function (_a) {
3222
3222
  var Kanban = memo(KanbanComponent);
3223
3223
  Kanban.displayName = "Kanban";
3224
3224
 
3225
- var defaultTranslations$7 = {
3225
+ var defaultTranslations$8 = {
3226
3226
  previewAlt: "Vista previa de imagen",
3227
3227
  removeButtonAriaLabel: "Eliminar imagen",
3228
3228
  emptyStateText: "No hay imágenes para mostrar",
@@ -3255,7 +3255,7 @@ var normalizeImages = function (images) {
3255
3255
  };
3256
3256
  var ImagePreview = function (_a) {
3257
3257
  var images = _a.images, _b = _a.size, size = _b === void 0 ? "small" : _b, onRemove = _a.onRemove, _c = _a.showRemoveButton, showRemoveButton = _c === void 0 ? true : _c, _d = _a.className, className = _d === void 0 ? "" : _d, _e = _a.translations, translations = _e === void 0 ? {} : _e, _f = _a.backgroundColor, backgroundColor = _f === void 0 ? "bg-white dark:bg-gray-800" : _f, _g = _a.radius, radius = _g === void 0 ? "lg" : _g, _h = _a.showBorder, showBorder = _h === void 0 ? true : _h, onImageClick = _a.onImageClick;
3258
- var t = __assign(__assign({}, defaultTranslations$7), translations);
3258
+ var t = __assign(__assign({}, defaultTranslations$8), translations);
3259
3259
  var normalizedImages = normalizeImages(images);
3260
3260
  var sizeClass = sizeClasses[size];
3261
3261
  var radiusClass = radiusClasses[radius];
@@ -3781,7 +3781,7 @@ var VALID_STEP_COLORS$1 = [
3781
3781
  "danger",
3782
3782
  "default",
3783
3783
  ];
3784
- var defaultTranslations$6 = {
3784
+ var defaultTranslations$7 = {
3785
3785
  checkIconTitle: "Check",
3786
3786
  };
3787
3787
  function getContainerCSSVars$1(color) {
@@ -3826,7 +3826,7 @@ function getCircleStyle$1(status) {
3826
3826
  var VerticalSteps = React.forwardRef(function (_a, ref) {
3827
3827
  var _b = _a.color, color = _b === void 0 ? "primary" : _b, _c = _a.steps, stepsProp = _c === void 0 ? [] : _c, _d = _a.defaultStep, defaultStep = _d === void 0 ? 0 : _d, onStepChange = _a.onStepChange, currentStepProp = _a.currentStep, _e = _a.hideProgressBars, hideProgressBars = _e === void 0 ? false : _e, _f = _a.hideInactiveDescriptions, hideInactiveDescriptions = _f === void 0 ? false : _f, stepClassName = _a.stepClassName, className = _a.className, translations = _a.translations, props = __rest(_a, ["color", "steps", "defaultStep", "onStepChange", "currentStep", "hideProgressBars", "hideInactiveDescriptions", "stepClassName", "className", "translations"]);
3828
3828
  var _g = $458b0a5536c1a7cf$export$40bfa8c7b0832715(currentStepProp, defaultStep, onStepChange), currentStep = _g[0], setCurrentStep = _g[1];
3829
- var t = __assign(__assign({}, defaultTranslations$6), translations);
3829
+ var t = __assign(__assign({}, defaultTranslations$7), translations);
3830
3830
  var steps = React.useMemo(function () {
3831
3831
  if (typeof stepsProp === "number") {
3832
3832
  return Array.from({ length: stepsProp }, function () { return ({}); });
@@ -3990,7 +3990,7 @@ var Phone = function (_a) {
3990
3990
  var portalDropdownRef = useRef(null);
3991
3991
  var _l = useState({}), dropdownPosition = _l[0], setDropdownPosition = _l[1];
3992
3992
  var _m = useState(uniqueCountries), filteredCountries = _m[0], setFilteredCountries = _m[1];
3993
- var t = __assign(__assign({}, defaultTranslations$c), translations);
3993
+ var t = __assign(__assign({}, defaultTranslations$d), translations);
3994
3994
  var getCountryName = function (country) { var _a, _b; return (_b = (_a = t.countries) === null || _a === void 0 ? void 0 : _a[country.country]) !== null && _b !== void 0 ? _b : country.name; };
3995
3995
  var finalLabel = label || t.label;
3996
3996
  useEffect(function () {
@@ -4089,7 +4089,7 @@ var Phone = function (_a) {
4089
4089
  : ""), onClick: function () { return handleCountrySelect(country); }, children: [jsx("span", { className: "mr-3", children: jsx(FlagIcon, { countryCode: country.country, size: "md" }) }), jsx("span", { className: "flex-1 text-left text-default-500", children: getCountryName(country) }), jsx("span", { className: "text-xs text-default-500", children: country.code })] }, "".concat(country.code, "-").concat(country.country))); })) : (jsx("div", { className: "px-4 py-2 text-sm text-default-500", children: t.noCountriesFound })) })] }), document.body)] }));
4090
4090
  };
4091
4091
 
4092
- var defaultTranslations$5 = {
4092
+ var defaultTranslations$6 = {
4093
4093
  message: "The Winter 2024 Release is here: new editor, analytics API, and so much more.",
4094
4094
  buttonText: "Explore",
4095
4095
  closeButtonLabel: "Close Banner",
@@ -4099,7 +4099,7 @@ var defaultTranslations$5 = {
4099
4099
  */
4100
4100
  var PromotionalBanner = function (_a) {
4101
4101
  var message = _a.message, buttonText = _a.buttonText, _b = _a.messageHref, messageHref = _b === void 0 ? "#" : _b, _c = _a.buttonHref, buttonHref = _c === void 0 ? "#" : _c, _d = _a.showCloseButton, showCloseButton = _d === void 0 ? true : _d, _e = _a.isVisible, isVisible = _e === void 0 ? true : _e, _f = _a.gradientColors, gradientColors = _f === void 0 ? ["default-100", "danger-100", "secondary-100"] : _f, _g = _a.buttonGradientColors, buttonGradientColors = _g === void 0 ? ["#F871A0", "#9353D3"] : _g, onClose = _a.onClose, onMessageClick = _a.onMessageClick, onButtonClick = _a.onButtonClick, _h = _a.messageLinkProps, messageLinkProps = _h === void 0 ? {} : _h, _j = _a.buttonProps, buttonProps = _j === void 0 ? {} : _j, _k = _a.translations, translations = _k === void 0 ? {} : _k;
4102
- var t = __assign(__assign({}, defaultTranslations$5), translations);
4102
+ var t = __assign(__assign({}, defaultTranslations$6), translations);
4103
4103
  var finalMessage = message || t.message;
4104
4104
  var finalButtonText = buttonText || t.buttonText;
4105
4105
  var handleClose = function () {
@@ -5016,7 +5016,7 @@ var TimeInput = function (_a) {
5016
5016
  * />
5017
5017
  * ```
5018
5018
  */
5019
- var defaultTranslations$4 = {
5019
+ var defaultTranslations$5 = {
5020
5020
  /** Label for the start time input field */
5021
5021
  from: "Desde",
5022
5022
  /** Label for the end time input field */
@@ -5074,7 +5074,7 @@ var defaultTranslations$4 = {
5074
5074
  */
5075
5075
  var ScheduleRow = function (_a) {
5076
5076
  var day = _a.day, daySchedule = _a.daySchedule, _b = _a.translations, translations = _b === void 0 ? {} : _b, _c = _a.showCopyToAll, showCopyToAll = _c === void 0 ? false : _c, onChange = _a.onChange, onCopyToAll = _a.onCopyToAll;
5077
- var t = __assign(__assign({}, defaultTranslations$4), translations);
5077
+ var t = __assign(__assign({}, defaultTranslations$5), translations);
5078
5078
  /**
5079
5079
  * @function validateTimeSlots
5080
5080
  * @description Validates all time slots to ensure the "from" time is not after the "to" time.
@@ -5227,7 +5227,7 @@ var Select = function (_a) {
5227
5227
  } })) }));
5228
5228
  };
5229
5229
 
5230
- var defaultTranslations$3 = {
5230
+ var defaultTranslations$4 = {
5231
5231
  username: "tu_negocio",
5232
5232
  sendMessage: "Enviar mensaje",
5233
5233
  viewMore: "ver más",
@@ -5252,7 +5252,7 @@ var defaultTranslations$3 = {
5252
5252
  */
5253
5253
  var SocialMediaPreview = function (_a) {
5254
5254
  var platform = _a.platform, imageUrl = _a.imageUrl, caption = _a.caption, _b = _a.variant, variant = _b === void 0 ? "full" : _b, _c = _a.postAspectRatio, postAspectRatio = _c === void 0 ? "square" : _c, _d = _a.showHeader, showHeader = _d === void 0 ? true : _d, _e = _a.maxCaptionLength, maxCaptionLength = _e === void 0 ? 125 : _e, onToggleCaption = _a.onToggleCaption, showFullCaption = _a.showFullCaption, username = _a.username, avatarUrl = _a.avatarUrl, _f = _a.translations, translations = _f === void 0 ? {} : _f, _g = _a.className, className = _g === void 0 ? "" : _g, _h = _a.imageProps, imageProps = _h === void 0 ? {} : _h, _j = _a.showEditButton, showEditButton = _j === void 0 ? false : _j, onEditClick = _a.onEditClick;
5255
- var t = __assign(__assign({}, defaultTranslations$3), translations);
5255
+ var t = __assign(__assign({}, defaultTranslations$4), translations);
5256
5256
  var displayUsername = username || t.username;
5257
5257
  var shouldTruncate = variant === "compact" && caption.length > maxCaptionLength;
5258
5258
  // Get aspect ratio based on postAspectRatio prop
@@ -5334,7 +5334,7 @@ var Textarea = function (_a) {
5334
5334
  };
5335
5335
 
5336
5336
  // Traducciones por defecto en español según las reglas de diseño
5337
- var defaultTranslations$2 = {
5337
+ var defaultTranslations$3 = {
5338
5338
  lightTheme: "Claro",
5339
5339
  darkTheme: "Oscuro",
5340
5340
  };
@@ -5350,7 +5350,7 @@ var defaultTranslations$2 = {
5350
5350
  var ThemePicker = function (_a) {
5351
5351
  var value = _a.value, onChange = _a.onChange, className = _a.className, _b = _a.translations, translations = _b === void 0 ? {} : _b;
5352
5352
  // Combinar traducciones por defecto con las proporcionadas
5353
- var t = __assign(__assign({}, defaultTranslations$2), translations);
5353
+ var t = __assign(__assign({}, defaultTranslations$3), translations);
5354
5354
  var themes = [
5355
5355
  {
5356
5356
  key: "light",
@@ -5779,7 +5779,7 @@ var TwoColumnLayoutAgent = function (_a) {
5779
5779
  };
5780
5780
 
5781
5781
  // Traducciones por defecto en español
5782
- var defaultTranslations$1 = {
5782
+ var defaultTranslations$2 = {
5783
5783
  uploadText: "Da clic y selecciona tus archivos",
5784
5784
  subText: "",
5785
5785
  dragText: "Suelta el archivo aquí",
@@ -6129,7 +6129,7 @@ var UploadFile = function (_a) {
6129
6129
  var _q = useState(""), selectedImageUrl = _q[0], setSelectedImageUrl = _q[1];
6130
6130
  var _r = useState(null); _r[0]; var setOriginalFile = _r[1];
6131
6131
  // Combinar traducciones por defecto con las proporcionadas
6132
- var t = useMemo(function () { return (__assign(__assign({}, defaultTranslations$1), translations)); }, [translations]);
6132
+ var t = useMemo(function () { return (__assign(__assign({}, defaultTranslations$2), translations)); }, [translations]);
6133
6133
  // Actualizar texto si se pasa como prop (retrocompatibilidad)
6134
6134
  var finalText = text || t.uploadText;
6135
6135
  var finalSubText = subText || t.subText;
@@ -6315,6 +6315,185 @@ var UploadFile = function (_a) {
6315
6315
  };
6316
6316
  UploadFile.displayName = "UploadFile";
6317
6317
 
6318
+ /**
6319
+ * Jitter pseudo-aleatorio determinista en [0,1), sembrado SOLO por el índice.
6320
+ * Misma constante Knuth (2654435761) que `computeStripJitter`/`computeBoxJitter`
6321
+ * de beweanalytics — nunca `Math.random()`.
6322
+ */
6323
+ function jitter(index) {
6324
+ return ((index * 2654435761) % 1000) / 1000;
6325
+ }
6326
+ /**
6327
+ * Cuartiles por interpolación lineal (R-7, el default de numpy/Excel).
6328
+ * Espeja `computeQuartiles` de beweanalytics para coherencia entre repos.
6329
+ */
6330
+ function computeQuartilesFromRaw(values) {
6331
+ if (values.length === 0) {
6332
+ return { min: 0, q1: 0, median: 0, q3: 0, max: 0 };
6333
+ }
6334
+ var sorted = __spreadArray([], values, true).sort(function (a, b) { return a - b; });
6335
+ var n = sorted.length;
6336
+ var first = sorted[0];
6337
+ var last = sorted[n - 1];
6338
+ var percentile = function (p) {
6339
+ if (n === 1) {
6340
+ return first;
6341
+ }
6342
+ var h = (n - 1) * p;
6343
+ var lo = Math.floor(h);
6344
+ var hi = Math.ceil(h);
6345
+ var loVal = sorted[lo];
6346
+ if (lo === hi) {
6347
+ return loVal;
6348
+ }
6349
+ var hiVal = sorted[hi];
6350
+ return loVal + (h - lo) * (hiVal - loVal);
6351
+ };
6352
+ return {
6353
+ min: first,
6354
+ q1: percentile(0.25),
6355
+ median: percentile(0.5),
6356
+ q3: percentile(0.75),
6357
+ max: last,
6358
+ };
6359
+ }
6360
+ /** Un grupo cae al fallback si tiene pocos datos o trae valores crudos. */
6361
+ function shouldFallback(group, minN) {
6362
+ var _a, _b;
6363
+ return group.n < minN || ((_b = (_a = group.rawValues) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) > 0;
6364
+ }
6365
+ var TO_SECONDS = {
6366
+ s: 1,
6367
+ min: 60,
6368
+ h: 3600,
6369
+ d: 86400,
6370
+ };
6371
+ /**
6372
+ * Elige la unidad de display (s/min/h/d) más legible para un valor de
6373
+ * referencia (típicamente la mediana) y devuelve el `factor` por el que
6374
+ * multiplicar los valores en `baseUnit` para obtener la unidad elegida.
6375
+ */
6376
+ function pickDisplayUnit(value, base) {
6377
+ if (base === "none") {
6378
+ return { unit: "", factor: 1 };
6379
+ }
6380
+ var seconds = Math.abs(value) * TO_SECONDS[base];
6381
+ var unit = "s";
6382
+ if (seconds >= TO_SECONDS.d) {
6383
+ unit = "d";
6384
+ }
6385
+ else if (seconds >= TO_SECONDS.h) {
6386
+ unit = "h";
6387
+ }
6388
+ else if (seconds >= TO_SECONDS.min) {
6389
+ unit = "min";
6390
+ }
6391
+ return { unit: unit, factor: TO_SECONDS[base] / TO_SECONDS[unit] };
6392
+ }
6393
+ /**
6394
+ * Path SVG del cuerpo del violin: polígono cerrado y espejado sobre `centerX`.
6395
+ * El ancho de cada bin es proporcional a su count (normalizado al bin máximo)
6396
+ * escalado a `halfWidth` px. `valueToY` mapea el valor medio del bin a la Y en px.
6397
+ */
6398
+ function buildDensityPath(bins, centerX, halfWidth, valueToY) {
6399
+ if (bins.length === 0) {
6400
+ return "";
6401
+ }
6402
+ var maxCount = Math.max.apply(Math, __spreadArray(__spreadArray([], bins.map(function (b) { return b.count; }), false), [1], false));
6403
+ var pts = bins.map(function (b) {
6404
+ var mid = (b.x0 + b.x1) / 2;
6405
+ return { y: valueToY(mid), w: (b.count / maxCount) * halfWidth };
6406
+ });
6407
+ var right = pts.map(function (p) { return "".concat(centerX + p.w, ",").concat(p.y); });
6408
+ var left = __spreadArray([], pts, true).reverse().map(function (p) { return "".concat(centerX - p.w, ",").concat(p.y); });
6409
+ return "M ".concat(right.join(" L "), " L ").concat(left.join(" L "), " Z");
6410
+ }
6411
+
6412
+ var COLOR_STROKE$1 = "#4338ca";
6413
+ var COLOR_MEDIAN$1 = "#1e3a8a";
6414
+ var COLOR_POINT = "#6366f1";
6415
+ var BOX_HALF = 10;
6416
+ var JITTER_SPAN = 22;
6417
+ /**
6418
+ * Fallback para grupos con n<20: caja (q1–q3) + mediana + puntos crudos con
6419
+ * jitter horizontal determinista. Un violin de 8 puntos miente; aquí se ve cada
6420
+ * punto real (caso Guru). Si faltan `rawValues`, cae a caja desde percentiles.
6421
+ */
6422
+ function ViolinFallback(_a) {
6423
+ var _b;
6424
+ var group = _a.group, centerX = _a.centerX, valueToY = _a.valueToY;
6425
+ var raw = (_b = group.rawValues) !== null && _b !== void 0 ? _b : [];
6426
+ var q = raw.length > 0
6427
+ ? computeQuartilesFromRaw(raw)
6428
+ : {
6429
+ min: group.p5,
6430
+ q1: group.p25,
6431
+ median: group.p50,
6432
+ q3: group.p75,
6433
+ max: group.p95,
6434
+ };
6435
+ return (jsxs("g", { children: [jsx("line", { x1: centerX, x2: centerX, y1: valueToY(q.min), y2: valueToY(q.max), stroke: COLOR_STROKE$1, strokeWidth: 1 }), jsx("rect", { x: centerX - BOX_HALF, y: valueToY(q.q3), width: BOX_HALF * 2, height: Math.max(0, valueToY(q.q1) - valueToY(q.q3)), fill: COLOR_STROKE$1, fillOpacity: 0.18, stroke: COLOR_STROKE$1 }), jsx("line", { x1: centerX - BOX_HALF, x2: centerX + BOX_HALF, y1: valueToY(q.median), y2: valueToY(q.median), stroke: COLOR_MEDIAN$1, strokeWidth: 2 }), raw.map(function (value, idx) { return (jsx("circle", { cx: centerX + (jitter(idx) - 0.5) * JITTER_SPAN, cy: valueToY(value), r: 2.5, fill: COLOR_POINT, fillOpacity: 0.8 }, "".concat(value, "-").concat(idx))); })] }));
6436
+ }
6437
+
6438
+ var MARGIN = { top: 24, right: 16, bottom: 40, left: 44 };
6439
+ var VIEW_WIDTH = 640;
6440
+ var VIOLIN_HALF_WIDTH = 46;
6441
+ var COLOR_BODY = "#c7d2fe";
6442
+ var COLOR_STROKE = "#4338ca";
6443
+ var COLOR_MEDIAN = "#1e3a8a";
6444
+ var COLOR_AXIS = "#6b7280";
6445
+ var defaultTranslations$1 = {
6446
+ emptyState: "Sin datos de distribución",
6447
+ sampleSizeLabel: "n",
6448
+ outliersLabel: "outliers",
6449
+ };
6450
+ function formatTick(value, factor, unit) {
6451
+ var scaled = value * factor;
6452
+ var rounded = Math.round(scaled * 10) / 10;
6453
+ return unit ? "".concat(rounded).concat(unit) : "".concat(rounded);
6454
+ }
6455
+ /**
6456
+ * ViolinPlot — distribución por grupo como densidad espejada (SVG puro), con
6457
+ * mediana/cuartiles superpuestos y `n=` visible. Cuando un grupo tiene n<20 (o
6458
+ * trae `rawValues`) degrada a box/strip (`ViolinFallback`): un violin de pocos
6459
+ * puntos miente. La estadística llega pre-calculada del SQL (payload chico).
6460
+ *
6461
+ * Sin `ResponsiveContainer` (no renderiza en happy-dom y complica el test):
6462
+ * `<svg viewBox>` + `width="100%"`. Autocontenido, sin HeroUI, para render
6463
+ * server-side directo en tests.
6464
+ */
6465
+ function ViolinPlot(_a) {
6466
+ var groups = _a.groups, valueLabel = _a.valueLabel, _b = _a.baseUnit, baseUnit = _b === void 0 ? "none" : _b, formatValue = _a.formatValue, _c = _a.height, height = _c === void 0 ? 320 : _c, _d = _a.minSampleForViolin, minSampleForViolin = _d === void 0 ? 20 : _d, _e = _a.translations, translations = _e === void 0 ? {} : _e;
6467
+ var t = __assign(__assign({}, defaultTranslations$1), translations);
6468
+ if (groups.length === 0) {
6469
+ return (jsx("svg", { viewBox: "0 0 ".concat(VIEW_WIDTH, " ").concat(height), width: "100%", role: "img", "aria-label": valueLabel, children: jsx("text", { x: VIEW_WIDTH / 2, y: height / 2, textAnchor: "middle", fill: COLOR_AXIS, children: t.emptyState }) }));
6470
+ }
6471
+ var plotTop = MARGIN.top;
6472
+ var plotBottom = height - MARGIN.bottom;
6473
+ var plotHeight = plotBottom - plotTop;
6474
+ // Escala Y común a todos los grupos (de 0 al p95 máximo, con margen).
6475
+ var maxValue = Math.max.apply(Math, __spreadArray(__spreadArray([], groups.map(function (g) { return g.p95; }), false), [1], false));
6476
+ var valueToY = function (v) {
6477
+ return plotBottom - (v / maxValue) * plotHeight;
6478
+ };
6479
+ var refMedian = groups.map(function (g) { return g.p50; }).sort(function (a, b) { return a - b; })[Math.floor(groups.length / 2)];
6480
+ var _f = pickDisplayUnit(refMedian, baseUnit), unit = _f.unit, factor = _f.factor;
6481
+ var fmt = formatValue !== null && formatValue !== void 0 ? formatValue : (function (v) { return formatTick(v, factor, unit); });
6482
+ var columnWidth = (VIEW_WIDTH - MARGIN.left - MARGIN.right) / groups.length;
6483
+ return (jsxs("svg", { viewBox: "0 0 ".concat(VIEW_WIDTH, " ").concat(height), width: "100%", role: "img", "aria-label": valueLabel, children: [[0, maxValue / 2, maxValue].map(function (v) { return (jsxs("g", { children: [jsx("line", { x1: MARGIN.left, x2: VIEW_WIDTH - MARGIN.right, y1: valueToY(v), y2: valueToY(v), stroke: "#e5e7eb", strokeDasharray: "3 3" }), jsx("text", { x: MARGIN.left - 6, y: valueToY(v) + 4, textAnchor: "end", fontSize: 11, fill: COLOR_AXIS, children: fmt(v) })] }, v)); }), groups.map(function (group, i) {
6484
+ var centerX = MARGIN.left + columnWidth * (i + 0.5);
6485
+ return (jsxs("g", { children: [shouldFallback(group, minSampleForViolin) ? (jsx(ViolinFallback, { group: group, centerX: centerX, valueToY: valueToY })) : (jsx(ViolinBody, { group: group, centerX: centerX, valueToY: valueToY })), jsx("text", { x: centerX, y: plotBottom + 16, textAnchor: "middle", fontSize: 12, fill: COLOR_AXIS, children: group.label }), jsxs("text", { x: centerX, y: plotBottom + 30, textAnchor: "middle", fontSize: 10, fill: COLOR_AXIS, children: [t.sampleSizeLabel, "=", group.n, group.nExcluded > 0
6486
+ ? " \u00B7 \u2212".concat(group.nExcluded, " ").concat(t.outliersLabel)
6487
+ : ""] })] }, group.label));
6488
+ })] }));
6489
+ }
6490
+ function ViolinBody(_a) {
6491
+ var group = _a.group, centerX = _a.centerX, valueToY = _a.valueToY;
6492
+ var path = buildDensityPath(group.bins, centerX, VIOLIN_HALF_WIDTH, valueToY);
6493
+ var boxHalf = 8;
6494
+ return (jsxs("g", { children: [jsx("path", { d: path, fill: COLOR_BODY, fillOpacity: 0.55, stroke: COLOR_STROKE, strokeWidth: 1 }), jsx("line", { x1: centerX, x2: centerX, y1: valueToY(group.p5), y2: valueToY(group.p95), stroke: COLOR_MEDIAN, strokeWidth: 1 }), jsx("rect", { x: centerX - boxHalf, y: valueToY(group.p75), width: boxHalf * 2, height: Math.max(0, valueToY(group.p25) - valueToY(group.p75)), fill: COLOR_STROKE, fillOpacity: 0.25, stroke: COLOR_STROKE }), jsx("line", { x1: centerX - boxHalf, x2: centerX + boxHalf, y1: valueToY(group.p50), y2: valueToY(group.p50), stroke: COLOR_MEDIAN, strokeWidth: 2 })] }));
6495
+ }
6496
+
6318
6497
  function resolvePreviewActions(previewAction, ctaType, ctaLabel, ctaValue) {
6319
6498
  var _a;
6320
6499
  var fromProp = (_a = previewAction === null || previewAction === void 0 ? void 0 : previewAction.filter(function (a) {
@@ -9022,4 +9201,4 @@ var NavigationLoadingProvider = function (_a) {
9022
9201
  return (jsxs(NavigationLoadingContext.Provider, { value: value, children: [children, jsx(NavigationLoadingOverlay, { isVisible: isVisible })] }));
9023
9202
  };
9024
9203
 
9025
- export { ALL_THEMES, AURORA_THEME_FAMILIES, AURORA_THEME_REGISTRY, AccordionList, AddHolidayForm, AnalyticsCard, AreaLineChart, AuraAutocomplete, AuraTable, AuraToastProvider, BEWEOS_THEME_MODE_COOKIE_NAME, BreadcrumbsComponent, Button, Card, Chip, ColorPicker, ColorSelector, ContentCarousel, Currency, DEFAULT_PREDEFINED_COLORS, DatePicker, DateRangePicker, DateSelector, DrawerFilters, EmailPreview, EnumMenuNavListItem, GlobalToast, H1, H2, H3, H4, HeaderComponent, HolidayType, IconComponent, ImagePreview, Input, InputPassword, Kanban, KanbanCard, KanbanColumn, MenuComponent, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, MultiStepWizard, NavigationLoadingContext, NavigationLoadingOverlay, NavigationLoadingProvider, P, Pagination, Phone, PromotionalBanner, REGISTERED_THEME_COLORS, RangeFilter, RowSteps, DEFAULT_TRANSLATIONS$1 as SEGMENTATION_DEFAULT_TRANSLATIONS, ScheduleRow, SearchInput, SegmentationBuilder, Select, SimpleLineChart, SocialMediaBar, SocialMediaCarousel, SocialMediaPreview, StepIndicator, Switch as SwitchComponent, THEME_COLOR_HEX_MAP, TagsFilter, Textarea, ThemeContext, ThemePicker, ThemeProvider, TimeInput as TimeInputComponent, ToastContext, Tooltip, TwoColumnLayoutAgent, UploadFile, VerticalSteps, WhatsAppPreview, Wizard, WizardNavigation, WizardSidebar, applyCustomPrimaryColor, createCurrencyFormatter, uniqueCountries as defaultCountries, defaultCurrencyOptions, defaultTranslations$4 as defaultTranslations, forceLightOnlyThemeBeforeReact, formatAuroraThemeTooltip, generateThemeColorScale, getContrastForeground, getRegisteredThemeColorBases, getSelectedKeyFromPath, hexToThemeColor, hslToCssValue, isAuroraFullThemeId, isExactThemeColor, isGroupState, isHexColor, isSegmentationGroup, removeCustomPrimaryColor, sizeMap, themeColors, useAuraToast, useCloseOnAncestorScroll, useMediaQuery, useNavigationLoading, useThemeContext };
9204
+ export { ALL_THEMES, AURORA_THEME_FAMILIES, AURORA_THEME_REGISTRY, AccordionList, AddHolidayForm, AnalyticsCard, AreaLineChart, AuraAutocomplete, AuraTable, AuraToastProvider, BEWEOS_THEME_MODE_COOKIE_NAME, BreadcrumbsComponent, Button, Card, Chip, ColorPicker, ColorSelector, ContentCarousel, Currency, DEFAULT_PREDEFINED_COLORS, DatePicker, DateRangePicker, DateSelector, DrawerFilters, EmailPreview, EnumMenuNavListItem, GlobalToast, H1, H2, H3, H4, HeaderComponent, HolidayType, IconComponent, ImagePreview, Input, InputPassword, Kanban, KanbanCard, KanbanColumn, MenuComponent, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, MultiStepWizard, NavigationLoadingContext, NavigationLoadingOverlay, NavigationLoadingProvider, P, Pagination, Phone, PromotionalBanner, REGISTERED_THEME_COLORS, RangeFilter, RowSteps, DEFAULT_TRANSLATIONS$1 as SEGMENTATION_DEFAULT_TRANSLATIONS, ScheduleRow, SearchInput, SegmentationBuilder, Select, SimpleLineChart, SocialMediaBar, SocialMediaCarousel, SocialMediaPreview, StepIndicator, Switch as SwitchComponent, THEME_COLOR_HEX_MAP, TagsFilter, Textarea, ThemeContext, ThemePicker, ThemeProvider, TimeInput as TimeInputComponent, ToastContext, Tooltip, TwoColumnLayoutAgent, UploadFile, VerticalSteps, ViolinPlot, WhatsAppPreview, Wizard, WizardNavigation, WizardSidebar, applyCustomPrimaryColor, createCurrencyFormatter, uniqueCountries as defaultCountries, defaultCurrencyOptions, defaultTranslations$5 as defaultTranslations, forceLightOnlyThemeBeforeReact, formatAuroraThemeTooltip, generateThemeColorScale, getContrastForeground, getRegisteredThemeColorBases, getSelectedKeyFromPath, hexToThemeColor, hslToCssValue, isAuroraFullThemeId, isExactThemeColor, isGroupState, isHexColor, isSegmentationGroup, removeCustomPrimaryColor, sizeMap, themeColors, useAuraToast, useCloseOnAncestorScroll, useMediaQuery, useNavigationLoading, useThemeContext };
@@ -0,0 +1,12 @@
1
+ import type { ViolinGroup } from "./ViolinPlot.types";
2
+ /**
3
+ * Fallback para grupos con n<20: caja (q1–q3) + mediana + puntos crudos con
4
+ * jitter horizontal determinista. Un violin de 8 puntos miente; aquí se ve cada
5
+ * punto real (caso Guru). Si faltan `rawValues`, cae a caja desde percentiles.
6
+ */
7
+ export declare function ViolinFallback({ group, centerX, valueToY, }: {
8
+ group: ViolinGroup;
9
+ centerX: number;
10
+ valueToY: (v: number) => number;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=ViolinFallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolinFallback.d.ts","sourceRoot":"","sources":["../../../../src/components/violin-plot/ViolinFallback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAStD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,QAAQ,GACR,EAAE;IACF,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAChC,2CAyDA"}
@@ -0,0 +1,14 @@
1
+ import type { ViolinPlotProps } from "./ViolinPlot.types";
2
+ /**
3
+ * ViolinPlot — distribución por grupo como densidad espejada (SVG puro), con
4
+ * mediana/cuartiles superpuestos y `n=` visible. Cuando un grupo tiene n<20 (o
5
+ * trae `rawValues`) degrada a box/strip (`ViolinFallback`): un violin de pocos
6
+ * puntos miente. La estadística llega pre-calculada del SQL (payload chico).
7
+ *
8
+ * Sin `ResponsiveContainer` (no renderiza en happy-dom y complica el test):
9
+ * `<svg viewBox>` + `width="100%"`. Autocontenido, sin HeroUI, para render
10
+ * server-side directo en tests.
11
+ */
12
+ export declare function ViolinPlot({ groups, valueLabel, baseUnit, formatValue, height, minSampleForViolin, translations, }: ViolinPlotProps): import("react/jsx-runtime").JSX.Element;
13
+ export default ViolinPlot;
14
+ //# sourceMappingURL=ViolinPlot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolinPlot.d.ts","sourceRoot":"","sources":["../../../../src/components/violin-plot/ViolinPlot.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEX,eAAe,EAEf,MAAM,oBAAoB,CAAC;AA2B5B;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,EAC1B,MAAM,EACN,UAAU,EACV,QAAiB,EACjB,WAAW,EACX,MAAY,EACZ,kBAAuB,EACvB,YAAiB,GACjB,EAAE,eAAe,2CA4GjB;AA2DD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,47 @@
1
+ /** Un bin del histograma de densidad, en coordenadas de VALOR (no px). */
2
+ export interface ViolinBin {
3
+ x0: number;
4
+ x1: number;
5
+ count: number;
6
+ }
7
+ /** Unidad base de los valores de entrada (para formateo adaptativo). */
8
+ export type BaseUnit = "s" | "min" | "h" | "d" | "none";
9
+ /**
10
+ * Distribución de un grupo, con la estadística ya calculada en SQL.
11
+ * `bins` alimenta el violin (n>=minSampleForViolin). `rawValues` llega SOLO
12
+ * cuando n<20 y activa el fallback box/strip.
13
+ */
14
+ export interface ViolinGroup {
15
+ label: string;
16
+ n: number;
17
+ nExcluded: number;
18
+ p5: number;
19
+ p25: number;
20
+ p50: number;
21
+ p75: number;
22
+ p95: number;
23
+ bins: ViolinBin[];
24
+ rawValues?: number[];
25
+ }
26
+ /**
27
+ * Textos visibles del componente, para i18n (patrón AuraUI). Todas las claves
28
+ * son opcionales: se fusionan sobre los defaults en español.
29
+ */
30
+ export interface ViolinPlotTranslations {
31
+ /** Mensaje cuando no hay grupos que mostrar. */
32
+ emptyState?: string;
33
+ /** Prefijo del tamaño de muestra (`n=248`). */
34
+ sampleSizeLabel?: string;
35
+ /** Sufijo del conteo de outliers excluidos (`· −12 outliers`). */
36
+ outliersLabel?: string;
37
+ }
38
+ export interface ViolinPlotProps {
39
+ groups: ViolinGroup[];
40
+ valueLabel: string;
41
+ baseUnit?: BaseUnit;
42
+ formatValue?: (value: number) => string;
43
+ height?: number;
44
+ minSampleForViolin?: number;
45
+ translations?: ViolinPlotTranslations;
46
+ }
47
+ //# sourceMappingURL=ViolinPlot.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViolinPlot.types.d.ts","sourceRoot":"","sources":["../../../../src/components/violin-plot/ViolinPlot.types.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACd;AAED,wEAAwE;AACxE,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;AAExD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,sBAAsB,CAAC;CACtC"}
@@ -0,0 +1,3 @@
1
+ export { ViolinPlot } from "./ViolinPlot.js";
2
+ export type { BaseUnit, ViolinBin, ViolinGroup, ViolinPlotProps, ViolinPlotTranslations, } from "./ViolinPlot.types";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/violin-plot/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EACX,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,sBAAsB,GACtB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { BaseUnit, ViolinBin } from "./ViolinPlot.types";
2
+ /**
3
+ * Jitter pseudo-aleatorio determinista en [0,1), sembrado SOLO por el índice.
4
+ * Misma constante Knuth (2654435761) que `computeStripJitter`/`computeBoxJitter`
5
+ * de beweanalytics — nunca `Math.random()`.
6
+ */
7
+ export declare function jitter(index: number): number;
8
+ export interface Quartiles {
9
+ min: number;
10
+ q1: number;
11
+ median: number;
12
+ q3: number;
13
+ max: number;
14
+ }
15
+ /**
16
+ * Cuartiles por interpolación lineal (R-7, el default de numpy/Excel).
17
+ * Espeja `computeQuartiles` de beweanalytics para coherencia entre repos.
18
+ */
19
+ export declare function computeQuartilesFromRaw(values: number[]): Quartiles;
20
+ /** Un grupo cae al fallback si tiene pocos datos o trae valores crudos. */
21
+ export declare function shouldFallback(group: {
22
+ n: number;
23
+ rawValues?: number[];
24
+ }, minN: number): boolean;
25
+ export interface DisplayUnit {
26
+ unit: string;
27
+ factor: number;
28
+ }
29
+ /**
30
+ * Elige la unidad de display (s/min/h/d) más legible para un valor de
31
+ * referencia (típicamente la mediana) y devuelve el `factor` por el que
32
+ * multiplicar los valores en `baseUnit` para obtener la unidad elegida.
33
+ */
34
+ export declare function pickDisplayUnit(value: number, base: BaseUnit): DisplayUnit;
35
+ /**
36
+ * Path SVG del cuerpo del violin: polígono cerrado y espejado sobre `centerX`.
37
+ * El ancho de cada bin es proporcional a su count (normalizado al bin máximo)
38
+ * escalado a `halfWidth` px. `valueToY` mapea el valor medio del bin a la Y en px.
39
+ */
40
+ export declare function buildDensityPath(bins: ViolinBin[], centerX: number, halfWidth: number, valueToY: (value: number) => number): string;
41
+ //# sourceMappingURL=violin-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violin-geometry.d.ts","sourceRoot":"","sources":["../../../../src/components/violin-plot/violin-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,MAAM,WAAW,SAAS;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACZ;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CA6BnE;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAC7B,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC1C,IAAI,EAAE,MAAM,GACV,OAAO,CAET;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf;AASD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,CAc1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,SAAS,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACjC,MAAM,CAYR"}
@@ -44,6 +44,7 @@ export * from "./components/toast";
44
44
  export * from "./components/two-column-layout-agent";
45
45
  export * from "./components/upload-file";
46
46
  export * from "./components/vertical-steps";
47
+ export * from "./components/violin-plot";
47
48
  export * from "./components/whatsapp-preview";
48
49
  export * from "./components/wizard";
49
50
  export * from "./components/breadcrumbs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beweco/aurora-ui",
3
- "version": "0.6.61",
3
+ "version": "0.6.62",
4
4
  "description": "Bewe Aurora UI Component Library",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",
@@ -33,6 +33,7 @@
33
33
  "dev": "rollup -c --watch",
34
34
  "format": "biome format --write",
35
35
  "storybook": "storybook dev --port 6006",
36
+ "test": "vitest run",
36
37
  "chromatic": "npx chromatic --project-token=chpt_a33f7fd2ebb3349",
37
38
  "prepare": "husky",
38
39
  "publish:with-env": "dotenv -e .env -- npm publish --access public",
@@ -91,7 +92,8 @@
91
92
  "sass": "^1.89.2",
92
93
  "storybook": "^8.0.0",
93
94
  "tailwindcss": "3.4.17",
94
- "typescript": "^5.8.3"
95
+ "typescript": "^5.8.3",
96
+ "vitest": "^2.1.9"
95
97
  },
96
98
  "type": "module"
97
99
  }