@beweco/aurora-ui 0.1.30 → 0.1.34

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.esm.js CHANGED
@@ -4,7 +4,7 @@ export { Slider } from '@heroui/react';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
  import { Icon } from '@iconify/react';
6
6
  export { loadIcons } from '@iconify/react';
7
- import React, { useId, useState, useCallback, useMemo, createContext, useContext, useEffect, createElement, useRef, useLayoutEffect } from 'react';
7
+ import React, { useId, useState, useCallback, useMemo, useEffect, createContext, useContext, createElement, useRef, useLayoutEffect } from 'react';
8
8
  import { ResponsiveContainer, AreaChart, CartesianGrid, XAxis, Tooltip, Area } from 'recharts';
9
9
  import { LazyMotion, domAnimation, m } from 'framer-motion';
10
10
  import { createPortal } from 'react-dom';
@@ -193,7 +193,13 @@ function AccordionList(_a) {
193
193
  }
194
194
  return null;
195
195
  }
196
- // Render Actions
196
+ /**
197
+ * Render Actions with Button Components
198
+ * ✅ Usado en: List Mode
199
+ *
200
+ * En el modo list, no hay problema de anidamiento de botones,
201
+ * por lo que podemos usar componentes Button normales.
202
+ */
197
203
  var renderActions = function (item) {
198
204
  var visibleActions = actions.filter(function (action) {
199
205
  if (action.show === undefined)
@@ -204,6 +210,53 @@ function AccordionList(_a) {
204
210
  });
205
211
  return (jsx("div", { className: "flex items-center gap-1", onClick: function (e) { return e.stopPropagation(); }, children: visibleActions.map(function (action) { return (jsx(Button$1, { variant: "light", color: action.color || "default", size: "sm", isIconOnly: true, onPress: function () { return action.onPress(item); }, className: action.className, title: action.tooltip, children: jsx(IconComponent, { icon: action.icon, className: "w-4 h-4" }) }, action.key)); }) }));
206
212
  };
213
+ /**
214
+ * Render Actions as DIV Elements with button role
215
+ * ✅ Usado en: Accordion Mode
216
+ *
217
+ * PROBLEMA RESUELTO: Botones anidados inválidos en HTML
218
+ * ❌ ANTES: <button trigger><button action></button></button>
219
+ * ✅ AHORA: <button trigger><div role="button"></div></button>
220
+ *
221
+ * En el modo accordion, el AccordionItem renderiza las acciones dentro
222
+ * del prop `title`, que a su vez está dentro del trigger button del accordion.
223
+ * Usar Button components generaría HTML inválido (button dentro de button)
224
+ * y causaría errores de hidratación en React.
225
+ *
226
+ * Solución: Renderizar las acciones como elementos div con role="button"
227
+ * que se ven y comportan como botones pero no generan HTML inválido.
228
+ */
229
+ var renderActionsAsDiv = function (item) {
230
+ var visibleActions = actions.filter(function (action) {
231
+ if (action.show === undefined)
232
+ return true;
233
+ if (typeof action.show === "function")
234
+ return action.show(item);
235
+ return action.show;
236
+ });
237
+ return (jsx("div", { className: "flex items-center gap-1", onClick: function (e) { return e.stopPropagation(); }, children: visibleActions.map(function (action) {
238
+ var colorClasses = {
239
+ default: "text-default-500 hover:text-default-700 hover:bg-default-100",
240
+ primary: "text-primary-500 hover:text-primary-700 hover:bg-primary-50",
241
+ secondary: "text-secondary-500 hover:text-secondary-700 hover:bg-secondary-50",
242
+ success: "text-success-500 hover:text-success-700 hover:bg-success-50",
243
+ warning: "text-warning-500 hover:text-warning-700 hover:bg-warning-50",
244
+ danger: "text-danger-500 hover:text-danger-700 hover:bg-danger-50",
245
+ };
246
+ var colorClass = colorClasses[action.color || "default"];
247
+ return (jsx("div", { role: "button", tabIndex: 0, "aria-label": action.tooltip, title: action.tooltip, className: "\n\t\t\t\t\t\t\t\tinline-flex items-center justify-center\n\t\t\t\t\t\t\t\tw-8 h-8 rounded-md cursor-pointer\n\t\t\t\t\t\t\t\ttransition-colors duration-200\n\t\t\t\t\t\t\t\t".concat(colorClass, "\n\t\t\t\t\t\t\t\t").concat(action.className || "", "\n\t\t\t\t\t\t\t"), onClick: function (e) {
248
+ e.stopPropagation();
249
+ e.preventDefault();
250
+ action.onPress(item);
251
+ }, onKeyDown: function (e) {
252
+ if (e.key === "Enter" || e.key === " ") {
253
+ e.stopPropagation();
254
+ e.preventDefault();
255
+ action.onPress(item);
256
+ }
257
+ }, children: jsx(IconComponent, { icon: action.icon, className: "w-4 h-4" }) }, action.key));
258
+ }) }));
259
+ };
207
260
  // Render Metadata Chips
208
261
  var renderMetadata = function (item) {
209
262
  if (!header.getMetadata)
@@ -219,7 +272,7 @@ function AccordionList(_a) {
219
272
  }
220
273
  return (jsxs("div", { className: "h-full w-full ".concat(className), children: [(sectionTitle || sectionIcon) && (jsx("div", { className: "mb-4 flex items-center justify-between", children: jsxs("div", { className: "flex items-center gap-2", children: [sectionIcon && (jsx(IconComponent, { icon: sectionIcon, className: "w-5 h-5 text-violet-600 dark:text-violet-400" })), sectionTitle && (jsx("h3", { className: "text-base font-semibold text-foreground", children: sectionTitle })), showCount && (jsx(Chip$1, { size: "sm", variant: "flat", color: "secondary", children: items.length }))] }) })), jsx(Accordion, { variant: accordionVariant, selectionMode: selectionMode, disableIndicatorAnimation: disableIndicatorAnimation, children: items.map(function (item) { return (jsx(AccordionItem, { "aria-label": header.getTitle(item), indicator: jsx(IconComponent, { icon: "solar:alt-arrow-down-outline", className: "w-4 h-4 text-default-400 transition-transform duration-200 data-[open=true]:rotate-180" }), classNames: {
221
274
  indicator: "data-[open=true]:rotate-180 transition-transform duration-200",
222
- }, title: jsxs("div", { className: "flex items-center justify-between w-full pr-4", children: [jsx("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: header.customRender ? (header.customRender(item)) : (jsxs(Fragment, { children: [jsx("span", { className: "text-sm text-default-900 truncate", children: header.getTitle(item) }), renderMetadata(item)] })) }), actions.length > 0 && renderActions(item)] }), children: jsx("div", { className: "pb-4", children: content.render(item) }) }, item.id)); }) }), pagination && pagination.totalPages > 1 && (jsx("div", { className: "flex justify-center mt-4", children: jsx(Pagination$1, { isCompact: pagination.isCompact, showControls: pagination.showControls, showShadow: true, color: "primary", page: pagination.currentPage, total: pagination.totalPages, onChange: pagination.onPageChange }) }))] }));
275
+ }, title: jsxs("div", { className: "flex items-center justify-between w-full pr-4", children: [jsx("div", { className: "flex items-center gap-3 flex-1 min-w-0", children: header.customRender ? (header.customRender(item)) : (jsxs(Fragment, { children: [jsx("span", { className: "text-sm text-default-900 truncate", children: header.getTitle(item) }), renderMetadata(item)] })) }), actions.length > 0 && renderActionsAsDiv(item)] }), children: jsx("div", { className: "pb-4", children: content.render(item) }) }, item.id)); }) }), pagination && pagination.totalPages > 1 && (jsx("div", { className: "flex justify-center mt-4", children: jsx(Pagination$1, { isCompact: pagination.isCompact, showControls: pagination.showControls, showShadow: true, color: "primary", page: pagination.currentPage, total: pagination.totalPages, onChange: pagination.onPageChange }) }))] }));
223
276
  }
224
277
  // List Mode
225
278
  return (jsxs("div", { className: "flex flex-col gap-3 ".concat(className), children: [(sectionTitle || sectionIcon) && (jsx("div", { className: "mb-1 flex items-center justify-between", children: jsxs("div", { className: "flex items-center gap-2", children: [sectionIcon && (jsx(IconComponent, { icon: sectionIcon, className: "w-5 h-5 text-primary-600 dark:text-primary-400" })), sectionTitle && (jsx("h3", { className: "text-base font-semibold text-foreground", children: sectionTitle })), showCount && (jsx(Chip$1, { size: "sm", variant: "flat", color: "primary", children: items.length }))] }) })), items.map(function (item) { return (jsxs("div", { className: "flex items-start justify-between p-4 border border-default-100 rounded-lg transition-colors bg-default-50 hover:bg-default-100", children: [jsx("div", { className: "flex-1 min-w-0", children: header.customRender ? (header.customRender(item)) : (jsxs(Fragment, { children: [jsx("div", { className: "flex items-center gap-2 mb-2", children: jsx("span", { className: "text-sm font-medium text-default-900 truncate", children: header.getTitle(item) }) }), header.getSubtitle && (jsx("p", { className: "text-sm text-default-700 line-clamp-2 leading-relaxed mb-2", children: header.getSubtitle(item) })), renderMetadata(item)] })) }), actions.length > 0 && (jsx("div", { className: "ml-4 flex-shrink-0", children: renderActions(item) }))] }, item.id)); }), pagination && pagination.totalPages > 1 && (jsx("div", { className: "flex justify-center mt-4", children: jsx(Pagination$1, { isCompact: pagination.isCompact, showControls: pagination.showControls, showShadow: true, color: "primary", page: pagination.currentPage, total: pagination.totalPages, onChange: pagination.onPageChange }) }))] }));
@@ -288,7 +341,7 @@ var Input = function (_a) {
288
341
  } })));
289
342
  };
290
343
 
291
- var defaultTranslations$d = {
344
+ var defaultTranslations$e = {
292
345
  addHolidayTitle: "Add holiday",
293
346
  dayOption: "Day",
294
347
  dateRangeOption: "Date range",
@@ -312,7 +365,7 @@ var INITIAL_HOLIDAY_STATE = {
312
365
  */
313
366
  var AddHolidayForm = function (_a) {
314
367
  var onAddHoliday = _a.onAddHoliday, translations = _a.translations, className = _a.className, radioGroupProps = _a.radioGroupProps, dateRangePickerProps = _a.dateRangePickerProps, buttonProps = _a.buttonProps;
315
- var t = __assign(__assign({}, defaultTranslations$d), translations);
368
+ var t = __assign(__assign({}, defaultTranslations$e), translations);
316
369
  var _b = useState(INITIAL_HOLIDAY_STATE), newHoliday = _b[0], setNewHoliday = _b[1];
317
370
  /**
318
371
  * A boolean flag that determines if a date has been set.
@@ -382,7 +435,7 @@ var P = function (_a) {
382
435
  return (jsx("p", __assign({ className: cn("text-tiny text-default-500 font-normal", className) }, props, { children: children })));
383
436
  };
384
437
 
385
- var defaultTranslations$c = {
438
+ var defaultTranslations$d = {
386
439
  title: "Analytics",
387
440
  description: "Monthly growth of your metrics during the selected period",
388
441
  viewDetails: "View Details",
@@ -436,7 +489,7 @@ var formatMonth = function (month) {
436
489
  var AnalyticsCard = function (_a) {
437
490
  var _b, _c;
438
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"]);
439
- var t = __assign(__assign({}, defaultTranslations$c), translations);
492
+ var t = __assign(__assign({}, defaultTranslations$d), translations);
440
493
  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];
441
494
  var activeChartData = useMemo(function () {
442
495
  var _a;
@@ -527,6 +580,205 @@ var AuraAutocomplete = function (_a) {
527
580
  } }))] }));
528
581
  };
529
582
 
583
+ /**
584
+ * ColorPicker Types
585
+ *
586
+ * Defines the type system for the ColorPicker component used for brand configuration.
587
+ */
588
+ /**
589
+ * Default predefined colors (Brand-safe palette)
590
+ */
591
+ var DEFAULT_PREDEFINED_COLORS = [
592
+ // Primary colors
593
+ { key: "blue", name: "Azul", value: "#3B82F6" },
594
+ { key: "violet", name: "Violeta", value: "#8B5CF6" },
595
+ { key: "purple", name: "Púrpura", value: "#A855F7" },
596
+ // Secondary colors
597
+ { key: "green", name: "Verde", value: "#10B981" },
598
+ { key: "teal", name: "Turquesa", value: "#14B8A6" },
599
+ { key: "cyan", name: "Cian", value: "#06B6D4" },
600
+ // Accent colors
601
+ { key: "pink", name: "Rosa", value: "#EC4899" },
602
+ { key: "rose", name: "Rosa claro", value: "#F43F5E" },
603
+ { key: "orange", name: "Naranja", value: "#F97316" },
604
+ // Neutral colors
605
+ { key: "red", name: "Rojo", value: "#EF4444" },
606
+ { key: "amber", name: "Ámbar", value: "#F59E0B" },
607
+ { key: "yellow", name: "Amarillo", value: "#EAB308" },
608
+ // Gray scale (useful for text/backgrounds)
609
+ { key: "gray-dark", name: "Gris oscuro", value: "#374151" },
610
+ { key: "gray", name: "Gris", value: "#6B7280" },
611
+ { key: "gray-light", name: "Gris claro", value: "#9CA3AF" },
612
+ ];
613
+
614
+ /**
615
+ * Default translations (Spanish)
616
+ */
617
+ var defaultTranslations$c = {
618
+ label: "Color",
619
+ placeholder: "Ingresa código hex",
620
+ customColorLabel: "Color personalizado",
621
+ predefinedColorsLabel: "Colores predefinidos",
622
+ recentColorsLabel: "Colores recientes",
623
+ noRecentColors: "No hay colores recientes",
624
+ invalidColorFormat: "Formato de color inválido. Usa #RRGGBB",
625
+ colorPreview: "Vista previa del color",
626
+ };
627
+ /**
628
+ * Validates hex color format (#RRGGBB or #RGB)
629
+ */
630
+ var isValidHexColor = function (color) {
631
+ var hexRegex = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;
632
+ return hexRegex.test(color);
633
+ };
634
+ /**
635
+ * Normalizes hex color to 6-digit format (#RGB -> #RRGGBB)
636
+ */
637
+ var normalizeHexColor = function (color) {
638
+ if (!color.startsWith("#")) {
639
+ color = "#".concat(color);
640
+ }
641
+ // Convert 3-digit to 6-digit
642
+ if (color.length === 4) {
643
+ var r = color[1];
644
+ var g = color[2];
645
+ var b = color[3];
646
+ return "#".concat(r).concat(r).concat(g).concat(g).concat(b).concat(b).toUpperCase();
647
+ }
648
+ return color.toUpperCase();
649
+ };
650
+ /**
651
+ * ColorPicker - Advanced color selection component
652
+ *
653
+ * Features:
654
+ * - Native color picker input
655
+ * - Text input for hex codes
656
+ * - Predefined color palette
657
+ * - Recent colors with localStorage persistence
658
+ * - Full i18n support
659
+ * - Dark mode compatible
660
+ * - Accessible
661
+ *
662
+ * @component
663
+ * @example
664
+ * ```tsx
665
+ * <ColorPicker
666
+ * value={brandColor}
667
+ * onChange={setBrandColor}
668
+ * label="Color de marca"
669
+ * enableRecentColors
670
+ * />
671
+ * ```
672
+ */
673
+ var ColorPicker = function (_a) {
674
+ 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;
675
+ var generatedId = useId();
676
+ var inputId = id || generatedId;
677
+ var t = __assign(__assign({}, defaultTranslations$c), translations);
678
+ // Local state for text input
679
+ var _m = useState(value), textValue = _m[0], setTextValue = _m[1];
680
+ var _o = useState(false), isInvalidFormat = _o[0], setIsInvalidFormat = _o[1];
681
+ // Recent colors state
682
+ var _p = useState([]), recentColors = _p[0], setRecentColors = _p[1];
683
+ // Load recent colors from localStorage on mount
684
+ useEffect(function () {
685
+ if (!enableRecentColors)
686
+ return;
687
+ try {
688
+ var stored = localStorage.getItem(recentColorsStorageKey);
689
+ if (stored) {
690
+ var colors = JSON.parse(stored);
691
+ setRecentColors(colors);
692
+ }
693
+ }
694
+ catch (error) {
695
+ console.error("Error loading recent colors:", error);
696
+ }
697
+ }, [enableRecentColors, recentColorsStorageKey]);
698
+ // Save to recent colors when value changes
699
+ useEffect(function () {
700
+ if (!enableRecentColors || !value || !isValidHexColor(value))
701
+ return;
702
+ var normalizedValue = normalizeHexColor(value);
703
+ // Add to recent colors if not already present
704
+ setRecentColors(function (prev) {
705
+ // Remove if already exists
706
+ var filtered = prev.filter(function (c) { return c !== normalizedValue; });
707
+ // Add to beginning
708
+ var updated = __spreadArray([normalizedValue], filtered, true).slice(0, maxRecentColors);
709
+ // Save to localStorage
710
+ try {
711
+ localStorage.setItem(recentColorsStorageKey, JSON.stringify(updated));
712
+ }
713
+ catch (error) {
714
+ console.error("Error saving recent colors:", error);
715
+ }
716
+ return updated;
717
+ });
718
+ }, [value, enableRecentColors, maxRecentColors, recentColorsStorageKey]);
719
+ // Sync text value when prop value changes
720
+ useEffect(function () {
721
+ setTextValue(value);
722
+ setIsInvalidFormat(false);
723
+ }, [value]);
724
+ /**
725
+ * Handle color picker (native input) change
726
+ */
727
+ var handleColorPickerChange = function (e) {
728
+ var newColor = normalizeHexColor(e.target.value);
729
+ setTextValue(newColor);
730
+ setIsInvalidFormat(false);
731
+ onChange(newColor);
732
+ };
733
+ /**
734
+ * Handle text input change
735
+ */
736
+ var handleTextChange = function (newValue) {
737
+ setTextValue(newValue);
738
+ // Validate format
739
+ if (isValidHexColor(newValue)) {
740
+ var normalized = normalizeHexColor(newValue);
741
+ setIsInvalidFormat(false);
742
+ onChange(normalized);
743
+ }
744
+ else if (newValue.length >= 4) {
745
+ // Show error only if user has typed enough characters
746
+ setIsInvalidFormat(true);
747
+ }
748
+ else {
749
+ setIsInvalidFormat(false);
750
+ }
751
+ };
752
+ /**
753
+ * Handle predefined color selection
754
+ */
755
+ var handlePredefinedColorClick = function (colorValue) {
756
+ if (disabled)
757
+ return;
758
+ var normalized = normalizeHexColor(colorValue);
759
+ setTextValue(normalized);
760
+ setIsInvalidFormat(false);
761
+ onChange(normalized);
762
+ };
763
+ /**
764
+ * Render a color circle button
765
+ */
766
+ var renderColorCircle = function (colorValue, colorName, isSelected) { return (jsx("button", { type: "button", disabled: disabled, onClick: function () { return handlePredefinedColorClick(colorValue); }, className: "\n\t\t\t\tw-8 h-8 rounded-full border-2 cursor-pointer transition-all\n\t\t\t\tfocus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1\n\t\t\t\t".concat(disabled ? "opacity-50 cursor-not-allowed" : "hover:scale-110", "\n\t\t\t\t").concat(isSelected
767
+ ? "border-primary-500 scale-110 ring-2 ring-primary-500 ring-offset-1"
768
+ : "border-default-700", "\n\t\t\t"), style: { backgroundColor: colorValue }, title: colorName, "aria-label": colorName }, colorValue)); };
769
+ return (jsxs("div", { className: "flex flex-col gap-3 ".concat(className), children: [label && (jsxs("label", { htmlFor: inputId, className: "block text-sm font-medium text-foreground", children: [label, required && jsx("span", { className: "text-danger ml-1", children: "*" })] })), jsxs("div", { className: "flex flex-col gap-1", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("input", { type: "color", id: inputId, name: name, value: textValue, onChange: handleColorPickerChange, disabled: disabled, className: "\n\t\t\t\t\t\t\tw-10 h-10 rounded-lg cursor-pointer border-2 flex-shrink-0\n\t\t\t\t\t\t\ttransition-colors appearance-none bg-transparent p-0.5\n\t\t\t\t\t\t\tfocus:border-primary-500\n\t\t\t\t\t\t\t".concat(disabled ? "opacity-50 cursor-not-allowed" : "hover:border-default-400", "\n\t\t\t\t\t\t\t").concat(error
770
+ ? "border-danger dark:border-danger-400"
771
+ : "border-default-300 dark:border-default-700", "\n\t\t\t\t\t\t"), "aria-label": t.customColorLabel, title: t.customColorLabel }), jsx(Input$1, { type: "text", value: textValue, onValueChange: handleTextChange, placeholder: t.placeholder, disabled: disabled, isInvalid: error || isInvalidFormat, size: "sm", variant: "bordered", classNames: {
772
+ input: "uppercase font-mono text-small",
773
+ inputWrapper: "min-h-8 h-8 focus-within:!border-primary-500",
774
+ }, startContent: jsx("span", { className: "text-default-400 text-sm", children: "#" }) })] }), (error || isInvalidFormat) && (jsx("p", { className: "text-tiny text-danger", children: isInvalidFormat ? t.invalidColorFormat : errorText }))] }), showPredefinedColors && predefinedColors.length > 0 && (jsxs("div", { children: [jsx("p", { className: "text-xs font-medium text-default-600 mb-2", children: t.predefinedColorsLabel }), jsx("div", { className: "flex flex-wrap gap-2", children: predefinedColors.map(function (color) {
775
+ return renderColorCircle(color.value, color.name, normalizeHexColor(value) === normalizeHexColor(color.value));
776
+ }) })] })), enableRecentColors && recentColors.length > 0 && (jsxs("div", { children: [jsx("p", { className: "text-xs font-medium text-default-600 mb-2", children: t.recentColorsLabel }), jsx("div", { className: "flex flex-wrap gap-2", children: recentColors.map(function (color) {
777
+ return renderColorCircle(color, color, normalizeHexColor(value) === color);
778
+ }) })] }))] }));
779
+ };
780
+ ColorPicker.displayName = "ColorPicker";
781
+
530
782
  var ThemeContext = createContext({
531
783
  mode: "light",
532
784
  color: "blue",
@@ -4700,4 +4952,4 @@ var NavigationLoadingProvider = function (_a) {
4700
4952
  return (jsxs(NavigationLoadingContext.Provider, { value: value, children: [children, jsx(NavigationLoadingOverlay, { isVisible: isVisible })] }));
4701
4953
  };
4702
4954
 
4703
- export { AccordionList, AddHolidayForm, AnalyticsCard, AuraAutocomplete, AuraTable, AuraToastProvider, BreadcrumbsComponent, Button, Card, Chip, ColorSelector, ContentCarousel, DatePicker, DateRangePicker, DateSelector, DrawerFilters, GlobalToast, H1, H2, H3, H4, HeaderComponent, HolidayType, IconComponent, ImagePreview, Input, MenuComponent, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, MultiStepWizard, NavigationLoadingContext, NavigationLoadingOverlay, NavigationLoadingProvider, P, Pagination, Phone, PromotionalBanner, RangeFilter, RowSteps, ScheduleRow, SearchInput, Select, SocialMediaBar, SocialMediaCarousel, SocialMediaPreview, StepIndicator, Switch as SwitchComponent, Textarea, ThemeContext, ThemePicker, ThemeProvider, TimeInput as TimeInputComponent, ToastContext, UploadFile, VerticalSteps, Wizard, WizardNavigation, WizardSidebar, defaultTranslations$4 as defaultTranslations, sizeMap, themeColors, useAuraToast, useNavigationLoading, useThemeContext };
4955
+ export { AccordionList, AddHolidayForm, AnalyticsCard, AuraAutocomplete, AuraTable, AuraToastProvider, BreadcrumbsComponent, Button, Card, Chip, ColorPicker, ColorSelector, ContentCarousel, DEFAULT_PREDEFINED_COLORS, DatePicker, DateRangePicker, DateSelector, DrawerFilters, GlobalToast, H1, H2, H3, H4, HeaderComponent, HolidayType, IconComponent, ImagePreview, Input, MenuComponent, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, MultiStepWizard, NavigationLoadingContext, NavigationLoadingOverlay, NavigationLoadingProvider, P, Pagination, Phone, PromotionalBanner, RangeFilter, RowSteps, ScheduleRow, SearchInput, Select, SocialMediaBar, SocialMediaCarousel, SocialMediaPreview, StepIndicator, Switch as SwitchComponent, Textarea, ThemeContext, ThemePicker, ThemeProvider, TimeInput as TimeInputComponent, ToastContext, UploadFile, VerticalSteps, Wizard, WizardNavigation, WizardSidebar, defaultTranslations$4 as defaultTranslations, sizeMap, themeColors, useAuraToast, useNavigationLoading, useThemeContext };
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionList.d.ts","sourceRoot":"","sources":["../../../../src/components/accordion-list/AccordionList.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,kBAAkB,EAClB,iBAAiB,EAEjB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,EAC9E,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAY,EACZ,IAAa,EACb,UAAU,EACV,SAAiB,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAgB,EAChB,SAAc,EACd,gBAA6B,EAC7B,aAA0B,EAC1B,yBAAiC,EACjC,gBAAgB,EAChB,mBAAmB,GACnB,EAAE,kBAAkB,CAAC,CAAC,CAAC,kDA8QvB;yBAhSe,aAAa"}
1
+ {"version":3,"file":"AccordionList.d.ts","sourceRoot":"","sources":["../../../../src/components/accordion-list/AccordionList.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,kBAAkB,EAClB,iBAAiB,EAEjB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,EAC9E,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAY,EACZ,IAAa,EACb,UAAU,EACV,SAAiB,EACjB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAgB,EAChB,SAAc,EACd,gBAA6B,EAC7B,aAA0B,EAC1B,yBAAiC,EACjC,gBAAgB,EAChB,mBAAmB,GACnB,EAAE,kBAAkB,CAAC,CAAC,CAAC,kDA6VvB;yBA/We,aAAa"}
@@ -0,0 +1,27 @@
1
+ import type React from "react";
2
+ import type { ColorPickerProps } from "./ColorPicker.types";
3
+ /**
4
+ * ColorPicker - Advanced color selection component
5
+ *
6
+ * Features:
7
+ * - Native color picker input
8
+ * - Text input for hex codes
9
+ * - Predefined color palette
10
+ * - Recent colors with localStorage persistence
11
+ * - Full i18n support
12
+ * - Dark mode compatible
13
+ * - Accessible
14
+ *
15
+ * @component
16
+ * @example
17
+ * ```tsx
18
+ * <ColorPicker
19
+ * value={brandColor}
20
+ * onChange={setBrandColor}
21
+ * label="Color de marca"
22
+ * enableRecentColors
23
+ * />
24
+ * ```
25
+ */
26
+ export declare const ColorPicker: React.FC<ColorPickerProps>;
27
+ //# sourceMappingURL=ColorPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../../../src/components/color-picker/ColorPicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EACX,gBAAgB,EAGhB,MAAM,qBAAqB,CAAC;AA4C7B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAsPlD,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * ColorPicker Types
3
+ *
4
+ * Defines the type system for the ColorPicker component used for brand configuration.
5
+ */
6
+ /**
7
+ * Translations interface for ColorPicker
8
+ * All text strings that can be customized by the consumer
9
+ */
10
+ export interface ColorPickerTranslations {
11
+ label?: string;
12
+ placeholder?: string;
13
+ customColorLabel?: string;
14
+ predefinedColorsLabel?: string;
15
+ recentColorsLabel?: string;
16
+ noRecentColors?: string;
17
+ invalidColorFormat?: string;
18
+ colorPreview?: string;
19
+ }
20
+ /**
21
+ * Predefined color option
22
+ */
23
+ export interface PredefinedColor {
24
+ /** Unique identifier */
25
+ key: string;
26
+ /** Display name */
27
+ name: string;
28
+ /** Hex color value (e.g., "#FF5733") */
29
+ value: string;
30
+ /** Optional tooltip */
31
+ tooltip?: string;
32
+ }
33
+ /**
34
+ * ColorPicker component props
35
+ */
36
+ export interface ColorPickerProps {
37
+ /** Current selected color (hex format: #RRGGBB) */
38
+ value: string;
39
+ /** Callback when color changes */
40
+ onChange: (color: string) => void;
41
+ /** Label text */
42
+ label?: string;
43
+ /** Whether the field is required */
44
+ required?: boolean;
45
+ /** Whether the field is disabled */
46
+ disabled?: boolean;
47
+ /** Error state */
48
+ error?: boolean;
49
+ /** Error message text */
50
+ errorText?: string;
51
+ /** Predefined color palette */
52
+ predefinedColors?: PredefinedColor[];
53
+ /** Enable recent colors feature */
54
+ enableRecentColors?: boolean;
55
+ /** Maximum number of recent colors to store */
56
+ maxRecentColors?: number;
57
+ /** LocalStorage key for recent colors */
58
+ recentColorsStorageKey?: string;
59
+ /** Show predefined colors palette */
60
+ showPredefinedColors?: boolean;
61
+ /** Translations for i18n */
62
+ translations?: ColorPickerTranslations;
63
+ /** Custom className */
64
+ className?: string;
65
+ /** Input HTML id */
66
+ id?: string;
67
+ /** Name attribute for forms */
68
+ name?: string;
69
+ }
70
+ /**
71
+ * Default predefined colors (Brand-safe palette)
72
+ */
73
+ export declare const DEFAULT_PREDEFINED_COLORS: PredefinedColor[];
74
+ //# sourceMappingURL=ColorPicker.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker.types.d.ts","sourceRoot":"","sources":["../../../../src/components/color-picker/ColorPicker.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IAErC,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,+CAA+C;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,yCAAyC;IACzC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,qCAAqC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,4BAA4B;IAC5B,YAAY,CAAC,EAAE,uBAAuB,CAAC;IAEvC,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oBAAoB;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,eAAe,EAyBtD,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ColorPicker } from "./ColorPicker.js";
2
+ export type { ColorPickerProps, ColorPickerTranslations, PredefinedColor, } from "./ColorPicker.types.js";
3
+ export { DEFAULT_PREDEFINED_COLORS } from "./ColorPicker.types.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/color-picker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EACX,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -5,6 +5,7 @@ export * from "./components/accordion-list";
5
5
  export * from "./components/add-holiday-form";
6
6
  export * from "./components/analytics-card";
7
7
  export * from "./components/autocomplete";
8
+ export * from "./components/color-picker";
8
9
  export * from "./components/color-selector";
9
10
  export * from "./components/chip";
10
11
  export * from "./components/content-carousel";
@@ -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.1.30",
3
+ "version": "0.1.34",
4
4
  "description": "Bewe Aurora UI Component Library",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",