@beweco/aurora-ui 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/assets/css/styles.css +1 -1
  2. package/dist/index.cjs.js +1182 -235
  3. package/dist/index.esm.js +1165 -241
  4. package/dist/types/components/add-holiday-form/AddHolidayForm.d.ts +10 -0
  5. package/dist/types/components/add-holiday-form/AddHolidayForm.d.ts.map +1 -0
  6. package/dist/types/components/add-holiday-form/AddHolidayForm.types.d.ts +56 -0
  7. package/dist/types/components/add-holiday-form/AddHolidayForm.types.d.ts.map +1 -0
  8. package/dist/types/components/add-holiday-form/index.d.ts +3 -0
  9. package/dist/types/components/add-holiday-form/index.d.ts.map +1 -0
  10. package/dist/types/components/button/Button.types.d.ts +1 -1
  11. package/dist/types/components/button/Button.types.d.ts.map +1 -1
  12. package/dist/types/components/color-selector/ColorSelector.d.ts +5 -0
  13. package/dist/types/components/color-selector/ColorSelector.d.ts.map +1 -0
  14. package/dist/types/components/color-selector/ColorSelector.types.d.ts +5 -0
  15. package/dist/types/components/color-selector/ColorSelector.types.d.ts.map +1 -0
  16. package/dist/types/components/color-selector/index.d.ts +3 -0
  17. package/dist/types/components/color-selector/index.d.ts.map +1 -0
  18. package/dist/types/components/datepicker/DatePicker.d.ts +4 -0
  19. package/dist/types/components/datepicker/DatePicker.d.ts.map +1 -0
  20. package/dist/types/components/datepicker/DatePicker.types.d.ts +5 -0
  21. package/dist/types/components/datepicker/DatePicker.types.d.ts.map +1 -0
  22. package/dist/types/components/datepicker/index.d.ts +3 -0
  23. package/dist/types/components/datepicker/index.d.ts.map +1 -0
  24. package/dist/types/components/daterangepicker/DateRangePicker.d.ts +5 -0
  25. package/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -0
  26. package/dist/types/components/daterangepicker/DateRangePicker.types.d.ts +5 -0
  27. package/dist/types/components/daterangepicker/DateRangePicker.types.d.ts.map +1 -0
  28. package/dist/types/components/daterangepicker/index.d.ts +3 -0
  29. package/dist/types/components/daterangepicker/index.d.ts.map +1 -0
  30. package/dist/types/components/h2/H2.d.ts +4 -0
  31. package/dist/types/components/h2/H2.d.ts.map +1 -0
  32. package/dist/types/components/h2/H2.types.d.ts +4 -0
  33. package/dist/types/components/h2/H2.types.d.ts.map +1 -0
  34. package/dist/types/components/h2/index.d.ts +3 -0
  35. package/dist/types/components/h2/index.d.ts.map +1 -0
  36. package/dist/types/components/h3/H3.d.ts +4 -0
  37. package/dist/types/components/h3/H3.d.ts.map +1 -0
  38. package/dist/types/components/h3/H3.types.d.ts +4 -0
  39. package/dist/types/components/h3/H3.types.d.ts.map +1 -0
  40. package/dist/types/components/h3/index.d.ts +3 -0
  41. package/dist/types/components/h3/index.d.ts.map +1 -0
  42. package/dist/types/components/h4/H4.d.ts +4 -0
  43. package/dist/types/components/h4/H4.d.ts.map +1 -0
  44. package/dist/types/components/h4/H4.types.d.ts +4 -0
  45. package/dist/types/components/h4/H4.types.d.ts.map +1 -0
  46. package/dist/types/components/h4/index.d.ts +3 -0
  47. package/dist/types/components/h4/index.d.ts.map +1 -0
  48. package/dist/types/components/input/Input.d.ts.map +1 -1
  49. package/dist/types/components/modal/Modal.d.ts +5 -0
  50. package/dist/types/components/modal/Modal.d.ts.map +1 -0
  51. package/dist/types/components/modal/Modal.types.d.ts +4 -0
  52. package/dist/types/components/modal/Modal.types.d.ts.map +1 -0
  53. package/dist/types/components/modal/_internal/ModalBody.d.ts +3 -0
  54. package/dist/types/components/modal/_internal/ModalBody.d.ts.map +1 -0
  55. package/dist/types/components/modal/_internal/ModalContent.d.ts +6 -0
  56. package/dist/types/components/modal/_internal/ModalContent.d.ts.map +1 -0
  57. package/dist/types/components/modal/_internal/ModalFooter.d.ts +3 -0
  58. package/dist/types/components/modal/_internal/ModalFooter.d.ts.map +1 -0
  59. package/dist/types/components/modal/_internal/ModalHeader.d.ts +3 -0
  60. package/dist/types/components/modal/_internal/ModalHeader.d.ts.map +1 -0
  61. package/dist/types/components/modal/_internal/index.d.ts +5 -0
  62. package/dist/types/components/modal/_internal/index.d.ts.map +1 -0
  63. package/dist/types/components/modal/index.d.ts +4 -0
  64. package/dist/types/components/modal/index.d.ts.map +1 -0
  65. package/dist/types/components/p/P.d.ts +4 -0
  66. package/dist/types/components/p/P.d.ts.map +1 -0
  67. package/dist/types/components/p/P.types.d.ts +4 -0
  68. package/dist/types/components/p/P.types.d.ts.map +1 -0
  69. package/dist/types/components/p/index.d.ts +3 -0
  70. package/dist/types/components/p/index.d.ts.map +1 -0
  71. package/dist/types/components/pagination/Pagination.d.ts +5 -0
  72. package/dist/types/components/pagination/Pagination.d.ts.map +1 -0
  73. package/dist/types/components/pagination/Pagination.types.d.ts +4 -0
  74. package/dist/types/components/pagination/Pagination.types.d.ts.map +1 -0
  75. package/dist/types/components/pagination/index.d.ts +3 -0
  76. package/dist/types/components/pagination/index.d.ts.map +1 -0
  77. package/dist/types/components/schedule-row/index.d.ts +3 -0
  78. package/dist/types/components/schedule-row/index.d.ts.map +1 -0
  79. package/dist/types/components/schedule-row/schedule-row.d.ts +14 -0
  80. package/dist/types/components/schedule-row/schedule-row.d.ts.map +1 -0
  81. package/dist/types/components/schedule-row/schedule-row.types.d.ts +68 -0
  82. package/dist/types/components/schedule-row/schedule-row.types.d.ts.map +1 -0
  83. package/dist/types/components/switch/Switch.d.ts +4 -0
  84. package/dist/types/components/switch/Switch.d.ts.map +1 -0
  85. package/dist/types/components/switch/Switch.types.d.ts +3 -0
  86. package/dist/types/components/switch/Switch.types.d.ts.map +1 -0
  87. package/dist/types/components/switch/index.d.ts +3 -0
  88. package/dist/types/components/switch/index.d.ts.map +1 -0
  89. package/dist/types/components/table/AuraTable.d.ts +9 -0
  90. package/dist/types/components/table/AuraTable.d.ts.map +1 -0
  91. package/dist/types/components/table/AuraTable.types.d.ts +15 -0
  92. package/dist/types/components/table/AuraTable.types.d.ts.map +1 -0
  93. package/dist/types/components/table/_internal/TableBody.d.ts +5 -0
  94. package/dist/types/components/table/_internal/TableBody.d.ts.map +1 -0
  95. package/dist/types/components/table/_internal/TableCell.d.ts +4 -0
  96. package/dist/types/components/table/_internal/TableCell.d.ts.map +1 -0
  97. package/dist/types/components/table/_internal/TableColumn.d.ts +5 -0
  98. package/dist/types/components/table/_internal/TableColumn.d.ts.map +1 -0
  99. package/dist/types/components/table/_internal/TableHeader.d.ts +5 -0
  100. package/dist/types/components/table/_internal/TableHeader.d.ts.map +1 -0
  101. package/dist/types/components/table/_internal/TableRow.d.ts +4 -0
  102. package/dist/types/components/table/_internal/TableRow.d.ts.map +1 -0
  103. package/dist/types/components/table/_internal/index.d.ts +7 -0
  104. package/dist/types/components/table/_internal/index.d.ts.map +1 -0
  105. package/dist/types/components/table/index.d.ts +3 -0
  106. package/dist/types/components/table/index.d.ts.map +1 -0
  107. package/dist/types/components/textarea/Textarea.d.ts +7 -0
  108. package/dist/types/components/textarea/Textarea.d.ts.map +1 -0
  109. package/dist/types/components/textarea/Textarea.types.d.ts +3 -0
  110. package/dist/types/components/textarea/Textarea.types.d.ts.map +1 -0
  111. package/dist/types/components/textarea/index.d.ts +3 -0
  112. package/dist/types/components/textarea/index.d.ts.map +1 -0
  113. package/dist/types/components/time-input/TimeInput.d.ts +7 -0
  114. package/dist/types/components/time-input/TimeInput.d.ts.map +1 -0
  115. package/dist/types/components/time-input/TimeInput.types.d.ts +5 -0
  116. package/dist/types/components/time-input/TimeInput.types.d.ts.map +1 -0
  117. package/dist/types/components/time-input/index.d.ts +3 -0
  118. package/dist/types/components/time-input/index.d.ts.map +1 -0
  119. package/dist/types/components/toast/GlobalToast.d.ts +2 -0
  120. package/dist/types/components/toast/GlobalToast.d.ts.map +1 -0
  121. package/dist/types/components/toast/index.d.ts +2 -0
  122. package/dist/types/components/toast/index.d.ts.map +1 -0
  123. package/dist/types/contexts/theme/index.d.ts +2 -2
  124. package/dist/types/contexts/theme/index.d.ts.map +1 -1
  125. package/dist/types/contexts/theme/theme-context.d.ts.map +1 -1
  126. package/dist/types/contexts/theme/theme-context.type.d.ts +6 -3
  127. package/dist/types/contexts/theme/theme-context.type.d.ts.map +1 -1
  128. package/dist/types/contexts/toast/index.d.ts +3 -0
  129. package/dist/types/contexts/toast/index.d.ts.map +1 -0
  130. package/dist/types/contexts/toast/toast.context.d.ts +4 -0
  131. package/dist/types/contexts/toast/toast.context.d.ts.map +1 -0
  132. package/dist/types/contexts/toast/toast.context.type.d.ts +15 -0
  133. package/dist/types/contexts/toast/toast.context.type.d.ts.map +1 -0
  134. package/dist/types/index.d.ts +25 -1
  135. package/dist/types/index.d.ts.map +1 -1
  136. package/dist/types/providers/theme/theme-provider.d.ts +10 -2
  137. package/dist/types/providers/theme/theme-provider.d.ts.map +1 -1
  138. package/dist/types/providers/theme/theme-provider.types.d.ts +8 -0
  139. package/dist/types/providers/theme/theme-provider.types.d.ts.map +1 -1
  140. package/dist/types/providers/theme/theme.utils.d.ts +5 -0
  141. package/dist/types/providers/theme/theme.utils.d.ts.map +1 -0
  142. package/dist/types/providers/theme/useThemeManager.d.ts +12 -0
  143. package/dist/types/providers/theme/useThemeManager.d.ts.map +1 -0
  144. package/dist/types/providers/toast/index.d.ts +2 -0
  145. package/dist/types/providers/toast/index.d.ts.map +1 -0
  146. package/dist/types/providers/toast/toast-provider.d.ts +7 -0
  147. package/dist/types/providers/toast/toast-provider.d.ts.map +1 -0
  148. package/dist/types/styles/colors.default.d.ts +385 -74
  149. package/dist/types/styles/colors.default.d.ts.map +1 -1
  150. package/dist/types/types/calendar.types.d.ts +12 -0
  151. package/dist/types/types/calendar.types.d.ts.map +1 -0
  152. package/package.json +3 -2
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
- import { Autocomplete, cn, ListboxItem, Popover, PopoverTrigger, Tooltip, PopoverContent, Listbox, Accordion, AccordionItem, ListboxSection, Spacer, Avatar, Card as Card$1, CardBody, CardFooter, Button as Button$1, Input as Input$1, RadioGroup, Radio, Modal, ModalContent, ModalHeader, ModalBody, Slider, ModalFooter, Dropdown, DropdownTrigger, DropdownMenu, DropdownSection, DropdownItem, Select as Select$1 } from '@heroui/react';
1
+ import { Autocomplete, Button as Button$1, DatePicker as DatePicker$1, DateRangePicker as DateRangePicker$1, Input as Input$1, RadioGroup, Radio, cn, ListboxItem, Popover, PopoverTrigger, Tooltip, PopoverContent, Listbox, Accordion, AccordionItem, ListboxSection, Spacer, Avatar, Card as Card$1, CardBody, CardFooter, Select as Select$1, Switch as Switch$1, TimeInput as TimeInput$1, Chip, Table, TableHeader, TableColumn, TableBody, TableRow, TableCell, Textarea as Textarea$1, Dropdown, DropdownTrigger, DropdownMenu, DropdownSection, DropdownItem, Alert, Modal as Modal$1, ModalContent as ModalContent$1, ModalHeader as ModalHeader$1, ModalBody as ModalBody$1, Slider, ModalFooter as ModalFooter$1, Pagination as Pagination$1 } from '@heroui/react';
2
2
  export * from '@heroui/react';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
- import React, { useId, useState, createElement, useCallback, useRef, useEffect, useMemo, createContext, useContext } from 'react';
4
+ import React, { useId, useState, useCallback, createElement, useRef, useEffect, createContext, useContext, useMemo } from 'react';
5
5
  import { Icon } from '@iconify/react';
6
6
  import { useTheme } from '@heroui/use-theme';
7
7
 
@@ -45,6 +45,16 @@ function __rest(s, e) {
45
45
  return t;
46
46
  }
47
47
 
48
+ function __spreadArray(to, from, pack) {
49
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
50
+ if (ar || !(i in from)) {
51
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
52
+ ar[i] = from[i];
53
+ }
54
+ }
55
+ return to.concat(ar || Array.prototype.slice.call(from));
56
+ }
57
+
48
58
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
49
59
  var e = new Error(message);
50
60
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
@@ -69,6 +79,48 @@ var AutoComplete = function (_a) {
69
79
  } }))] }));
70
80
  };
71
81
 
82
+ var HolidayType;
83
+ (function (HolidayType) {
84
+ HolidayType["SingleDay"] = "singleDay";
85
+ HolidayType["DateRange"] = "dateRange";
86
+ })(HolidayType || (HolidayType = {}));
87
+
88
+ /**
89
+ * Botón genérico basado en HeroUI siguiendo las reglas de diseño BeweOS.
90
+ *
91
+ * Reglas aplicadas:
92
+ * - Variant: Solid, Bordered, Light, Flat, Faded
93
+ * - Size: sm, md, lg
94
+ * - StartContent: On, Off
95
+ * - isLoading: On, Off
96
+ * - Radius: md (por defecto)
97
+ * - isIconOnly: True, False
98
+ */
99
+ var Button = function (_a) {
100
+ var _b = _a.color, color = _b === void 0 ? "primary" : _b, _c = _a.size, size = _c === void 0 ? "md" : _c, _d = _a.variant, variant = _d === void 0 ? "solid" : _d, _e = _a.radius, radius = _e === void 0 ? "sm" : _e, startContent = _a.startContent, endContent = _a.endContent, _f = _a.isLoading, isLoading = _f === void 0 ? false : _f, _g = _a.isIconOnly, isIconOnly = _g === void 0 ? false : _g, props = __rest(_a, ["color", "size", "variant", "radius", "startContent", "endContent", "isLoading", "isIconOnly"]);
101
+ return (jsx(Button$1, __assign({}, props, { color: color, size: size, variant: variant, radius: radius, startContent: startContent, endContent: endContent, isLoading: isLoading, isIconOnly: isIconOnly })));
102
+ };
103
+
104
+ var DatePicker = function (_a) {
105
+ var label = _a.label, id = _a.id, _b = _a.size, size = _b === void 0 ? "md" : _b, props = __rest(_a, ["label", "id", "size"]);
106
+ var generatedId = useId();
107
+ var autoId = id || generatedId;
108
+ return (jsx(DatePicker$1, __assign({ label: label, size: size, labelPlacement: "outside", classNames: {
109
+ label: "text-sm font-medium text-default-600",
110
+ segment: "focus:bg-primary-50",
111
+ }, id: autoId }, props)));
112
+ };
113
+
114
+ var DateRangePicker = function (_a) {
115
+ var label = _a.label, id = _a.id, _b = _a.size, size = _b === void 0 ? "md" : _b, props = __rest(_a, ["label", "id", "size"]);
116
+ var generatedId = useId();
117
+ var autoId = id || generatedId;
118
+ return (jsx(DateRangePicker$1, __assign({ label: label, size: size, labelPlacement: "outside", classNames: {
119
+ label: "text-sm font-medium text-default-600",
120
+ segment: "focus:bg-primary-50",
121
+ } }, props, { id: autoId })));
122
+ };
123
+
72
124
  var sizeMap = {
73
125
  sm: "16px",
74
126
  md: "20px",
@@ -82,6 +134,109 @@ var IconComponent = function (_a) {
82
134
  return (jsx("span", __assign({}, nativeProps, { children: jsx(Icon, { icon: icon, width: iconSize, height: iconSize, className: className, style: style, color: color, hFlip: hFlip, vFlip: vFlip, flip: flip, rotate: rotate }) })));
83
135
  };
84
136
 
137
+ /**
138
+ * Input genérico reutilizable basado en HeroUI siguiendo las reglas de diseño BeweOS.
139
+ *
140
+ * Reglas aplicadas:
141
+ * - Variant: Bordered (por defecto)
142
+ * - labelPlacement: Outside
143
+ * - Size: sm, md, lg (configurable)
144
+ * - Radius configurable
145
+ */
146
+ var Input = function (_a) {
147
+ var label = _a.label, id = _a.id, _b = _a.size, size = _b === void 0 ? "md" : _b, _c = _a.variant, variant = _c === void 0 ? "bordered" : _c, _d = _a.radius, radius = _d === void 0 ? "md" : _d, placeholder = _a.placeholder, props = __rest(_a, ["label", "id", "size", "variant", "radius", "placeholder"]);
148
+ var generatedId = useId();
149
+ var inputId = id || generatedId;
150
+ return (jsx(Input$1, __assign({}, props, { id: inputId, label: label, labelPlacement: "outside", placeholder: placeholder, variant: variant, size: size, radius: radius, classNames: {
151
+ label: "text-default-600 text-tiny group-data-[filled=true]:text-default-600",
152
+ inputWrapper: "focus-within:!border-primary-500",
153
+ } })));
154
+ };
155
+
156
+ var defaultTranslations$3 = {
157
+ addHolidayTitle: "Add holiday",
158
+ dayOption: "Day",
159
+ dateRangeOption: "Date range",
160
+ selectDateRangeAriaLabel: "Select date range",
161
+ selectDateAriaLabel: "Select date",
162
+ optionalTitle: "Title (optional)",
163
+ titlePlaceholder: "e.g., Summer vacation",
164
+ addButton: "Add",
165
+ };
166
+ var INITIAL_HOLIDAY_STATE = {
167
+ type: HolidayType.SingleDay,
168
+ startDate: null,
169
+ endDate: null,
170
+ title: "",
171
+ };
172
+ /**
173
+ * A form component for adding single or date-range holidays.
174
+ * It includes options for setting a date or a date range, an optional title,
175
+ * and handles form submission and state reset.
176
+ * The 'Add' button is disabled until a date is selected.
177
+ */
178
+ var AddHolidayForm = function (_a) {
179
+ var onAddHoliday = _a.onAddHoliday, translations = _a.translations, className = _a.className, radioGroupProps = _a.radioGroupProps, dateRangePickerProps = _a.dateRangePickerProps, buttonProps = _a.buttonProps;
180
+ var t = __assign(__assign({}, defaultTranslations$3), translations);
181
+ var _b = useState(INITIAL_HOLIDAY_STATE), newHoliday = _b[0], setNewHoliday = _b[1];
182
+ /**
183
+ * A boolean flag that determines if a date has been set.
184
+ * For a single day, it checks if `startDate` is not null.
185
+ * For a date range, it checks if both `startDate` and `endDate` are not null.
186
+ */
187
+ var isDateSet = newHoliday.type === HolidayType.SingleDay
188
+ ? newHoliday.startDate !== null
189
+ : newHoliday.startDate !== null && newHoliday.endDate !== null;
190
+ /**
191
+ * Resets the form to its initial state.
192
+ */
193
+ var resetForm = useCallback(function () {
194
+ setNewHoliday(INITIAL_HOLIDAY_STATE);
195
+ }, []);
196
+ /**
197
+ * Handles changes to the single date picker.
198
+ * @param date The selected date.
199
+ */
200
+ var handleDateChange = useCallback(function (date) {
201
+ setNewHoliday(function (prev) { return (__assign(__assign({}, prev), { startDate: date, endDate: null })); });
202
+ }, []);
203
+ /**
204
+ * Handles changes to the date range picker.
205
+ * @param range The selected date range.
206
+ */
207
+ var handleDateRangeChange = useCallback(function (range) {
208
+ setNewHoliday(function (prev) {
209
+ var _a, _b;
210
+ return (__assign(__assign({}, prev), { startDate: (_a = range === null || range === void 0 ? void 0 : range.start) !== null && _a !== void 0 ? _a : null, endDate: (_b = range === null || range === void 0 ? void 0 : range.end) !== null && _b !== void 0 ? _b : null }));
211
+ });
212
+ }, []);
213
+ /**
214
+ * Handles the submission of the form.
215
+ * If a date is set, it calls the `onAddHoliday` callback and resets the form.
216
+ */
217
+ var handleAddHoliday = useCallback(function () {
218
+ var _a;
219
+ // biome-ignore lint/complexity/useSimplifiedLogicExpression: <explanation>
220
+ if (!isDateSet || !newHoliday.startDate) {
221
+ return;
222
+ }
223
+ onAddHoliday({
224
+ type: newHoliday.type,
225
+ title: newHoliday.title,
226
+ startDate: newHoliday.startDate.toDate("UTC"),
227
+ endDate: (_a = newHoliday.endDate) === null || _a === void 0 ? void 0 : _a.toDate("UTC"),
228
+ });
229
+ resetForm();
230
+ }, [newHoliday, onAddHoliday, resetForm, isDateSet]);
231
+ return (jsxs("div", { className: "flex flex-col gap-4 ".concat(className), children: [jsx("h3", { className: "font-semibold text-small text-foreground", children: t.addHolidayTitle }), jsxs("div", { className: "w-full flex flex-wrap xs:gap-5 justify-between items-center", children: [jsxs(RadioGroup, __assign({ color: "primary", orientation: "horizontal", size: "sm", value: newHoliday.type, onValueChange: function (value) {
232
+ return setNewHoliday(__assign(__assign({}, INITIAL_HOLIDAY_STATE), { type: value }));
233
+ } }, radioGroupProps, { children: [jsx(Radio, { value: HolidayType.SingleDay, children: t.dayOption }), jsx(Radio, { value: HolidayType.DateRange, children: t.dateRangeOption })] })), newHoliday.type === HolidayType.DateRange ? (jsx(DateRangePicker, __assign({ className: "xs:w-full md:flex-1 md:max-w-xs", value: newHoliday.startDate && newHoliday.endDate
234
+ ? { start: newHoliday.startDate, end: newHoliday.endDate }
235
+ : null, onChange: handleDateRangeChange, "aria-label": t.selectDateRangeAriaLabel, endContent: jsx(IconComponent, { icon: "solar:calendar-outline" }) }, dateRangePickerProps))) : (jsx(DatePicker, { className: "xs:w-full md:flex-1 md:max-w-40", value: newHoliday.startDate, onChange: handleDateChange, endContent: jsx(IconComponent, { icon: "solar:calendar-outline" }), "aria-label": t.selectDateAriaLabel }))] }), jsx(Input, { label: t.optionalTitle, placeholder: t.titlePlaceholder, className: "w-full", value: newHoliday.title, onValueChange: function (value) {
236
+ setNewHoliday(function (prev) { return (__assign(__assign({}, prev), { title: value })); });
237
+ }, "aria-label": t.optionalTitle }), jsx("div", { className: "w-full", children: jsx(Button, __assign({ size: "sm", fullWidth: true, variant: "flat", startContent: jsx(IconComponent, { icon: "solar:add-circle-outline" }), onPress: handleAddHoliday, isDisabled: !isDateSet }, buttonProps, { children: t.addButton })) })] }));
238
+ };
239
+
85
240
  function normalizeClass(value) {
86
241
  if (typeof value === "string") {
87
242
  return value || undefined;
@@ -370,7 +525,7 @@ var Phone = function (_a) {
370
525
  onChange(selectedCountry.code + val);
371
526
  }
372
527
  };
373
- return (jsxs("div", { className: "flex flex-col gap-1 w-full relative", children: [finalLabel && (jsxs("label", { htmlFor: "phone-input-".concat(name), className: "text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: [finalLabel, " ", required && jsx("span", { className: "text-pink-600", children: "*" })] })), jsxs("div", { className: "flex items-center w-full min-h-[56px] bg-white dark:bg-gray-900 transition-colors shadow-sm border border-[#E4E4E7] dark:border-gray-700 rounded-2xl focus-within:border-blue-500 dark:focus-within:border-blue-400 ".concat(error
528
+ return (jsxs("div", { className: "flex flex-col gap-1 w-full relative", children: [finalLabel && (jsxs("label", { htmlFor: "phone-input-".concat(name), className: "text-tiny text-default-600 mb-1", children: [finalLabel, " ", required && jsx("span", { className: "text-pink-600", children: "*" })] })), jsxs("div", { className: "flex items-center w-full min-h-[56px] bg-white dark:bg-gray-900 transition-colors shadow-sm border border-[#E4E4E7] dark:border-gray-700 rounded-2xl focus-within:border-blue-500 dark:focus-within:border-blue-400 ".concat(error
374
529
  ? "border-pink-500 dark:border-pink-600"
375
530
  : "border-[#E4E4E7] dark:border-gray-700").concat(disabled ? " bg-gray-100 dark:bg-gray-800 opacity-60" : ""), children: [jsxs("div", { className: "relative ml-2", ref: dropdownRef, children: [jsxs("button", { type: "button",
376
531
  ///bg-gray-100
@@ -386,6 +541,321 @@ var Phone = function (_a) {
386
541
  : ""), onClick: function () { return handleCountrySelect(country); }, children: [jsx("span", { className: "mr-3 text-lg", children: country.flag }), jsx("span", { className: "flex-1 text-left dark:text-gray-100", children: country.name }), jsx("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: country.code })] }, country.code)); })) : (jsx("div", { className: "px-4 py-2 text-sm text-gray-500 dark:text-gray-400", children: t.noCountriesFound })) })] }))] }), jsx(Input$1, { type: "tel", className: "flex-1 border-none bg-transparent text-gray-900 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 h-10 px-2", placeholder: t.placeholder, value: inputValue, onChange: handleInputChange, onBlur: onBlur, disabled: disabled, name: name, autoComplete: "tel", id: "phone-input-".concat(name) })] }), error && errorText && (jsx("span", { className: "text-xs text-pink-600 dark:text-pink-400 mt-1", children: errorText }))] }));
387
542
  };
388
543
 
544
+ /**
545
+ * Select genérico reutilizable basado en HeroUI siguiendo las reglas de diseño BeweOS.
546
+ *
547
+ * Reglas aplicadas:
548
+ * - Variant: Bordered (por defecto)
549
+ * - Radius: md (por defecto)
550
+ * - labelPlacement: Outside
551
+ * - Size: sm, md, lg (configurable)
552
+ */
553
+ var Select = function (_a) {
554
+ var label = _a.label, id = _a.id, _b = _a.size, size = _b === void 0 ? "md" : _b, _c = _a.variant, variant = _c === void 0 ? "bordered" : _c, _d = _a.radius, radius = _d === void 0 ? "md" : _d, placeholder = _a.placeholder, props = __rest(_a, ["label", "id", "size", "variant", "radius", "placeholder"]);
555
+ var generatedId = useId();
556
+ var selectId = id || generatedId;
557
+ return (jsx("div", { className: "group", children: jsx(Select$1, __assign({}, props, { id: selectId, label: label, labelPlacement: "outside", placeholder: placeholder, variant: variant, size: size, radius: radius, classNames: {
558
+ label: "text-default-600 text-tiny group-data-[filled=true]:text-default-600",
559
+ trigger: "data-[open=true]:!border-primary-500 data-[focus=true]:!border-primary-500 data-[disabled=true]:bg-default-100",
560
+ popoverContent: "[&_[data-focus-visible=true]]:!outline-none [&_[data-selectable=true]:focus]:!bg-primary-50 [&_li]:!text-default-500 [&_li[data-hover=true]]:!text-default-600",
561
+ } })) }));
562
+ };
563
+
564
+ function $14e0f24ef4ac5c92$export$c19a80a9721b80f6(a, b) {
565
+ return $14e0f24ef4ac5c92$var$timeToMs(a) - $14e0f24ef4ac5c92$var$timeToMs(b);
566
+ }
567
+ function $14e0f24ef4ac5c92$var$timeToMs(a) {
568
+ return a.hour * 3600000 + a.minute * 60000 + a.second * 1000 + a.millisecond;
569
+ }
570
+
571
+ function $735220c2d4774dd3$export$3e2544e88a25bff8(duration) {
572
+ let inverseDuration = {};
573
+ for(let key in duration)if (typeof duration[key] === 'number') inverseDuration[key] = -duration[key];
574
+ return inverseDuration;
575
+ }
576
+ function $735220c2d4774dd3$export$e5d5e1c1822b6e56(value, fields) {
577
+ let mutableValue = value.copy();
578
+ if (fields.hour != null) mutableValue.hour = fields.hour;
579
+ if (fields.minute != null) mutableValue.minute = fields.minute;
580
+ if (fields.second != null) mutableValue.second = fields.second;
581
+ if (fields.millisecond != null) mutableValue.millisecond = fields.millisecond;
582
+ $735220c2d4774dd3$export$7555de1e070510cb(mutableValue);
583
+ return mutableValue;
584
+ }
585
+ function $735220c2d4774dd3$var$balanceTime(time) {
586
+ time.second += Math.floor(time.millisecond / 1000);
587
+ time.millisecond = $735220c2d4774dd3$var$nonNegativeMod(time.millisecond, 1000);
588
+ time.minute += Math.floor(time.second / 60);
589
+ time.second = $735220c2d4774dd3$var$nonNegativeMod(time.second, 60);
590
+ time.hour += Math.floor(time.minute / 60);
591
+ time.minute = $735220c2d4774dd3$var$nonNegativeMod(time.minute, 60);
592
+ let days = Math.floor(time.hour / 24);
593
+ time.hour = $735220c2d4774dd3$var$nonNegativeMod(time.hour, 24);
594
+ return days;
595
+ }
596
+ function $735220c2d4774dd3$export$7555de1e070510cb(time) {
597
+ time.millisecond = Math.max(0, Math.min(time.millisecond, 1000));
598
+ time.second = Math.max(0, Math.min(time.second, 59));
599
+ time.minute = Math.max(0, Math.min(time.minute, 59));
600
+ time.hour = Math.max(0, Math.min(time.hour, 23));
601
+ }
602
+ function $735220c2d4774dd3$var$nonNegativeMod(a, b) {
603
+ let result = a % b;
604
+ if (result < 0) result += b;
605
+ return result;
606
+ }
607
+ function $735220c2d4774dd3$var$addTimeFields(time, duration) {
608
+ time.hour += duration.hours || 0;
609
+ time.minute += duration.minutes || 0;
610
+ time.second += duration.seconds || 0;
611
+ time.millisecond += duration.milliseconds || 0;
612
+ return $735220c2d4774dd3$var$balanceTime(time);
613
+ }
614
+ function $735220c2d4774dd3$export$7ed87b6bc2506470(time, duration) {
615
+ let res = time.copy();
616
+ $735220c2d4774dd3$var$addTimeFields(res, duration);
617
+ return res;
618
+ }
619
+ function $735220c2d4774dd3$export$fe34d3a381cd7501(time, duration) {
620
+ return $735220c2d4774dd3$export$7ed87b6bc2506470(time, $735220c2d4774dd3$export$3e2544e88a25bff8(duration));
621
+ }
622
+ function $735220c2d4774dd3$export$dd02b3e0007dfe28(value, field, amount, options) {
623
+ let mutable = value.copy();
624
+ switch(field){
625
+ case 'hour':
626
+ {
627
+ let hours = value.hour;
628
+ let min = 0;
629
+ let max = 23;
630
+ if ((options === null || options === void 0 ? void 0 : options.hourCycle) === 12) {
631
+ let isPM = hours >= 12;
632
+ min = isPM ? 12 : 0;
633
+ max = isPM ? 23 : 11;
634
+ }
635
+ mutable.hour = $735220c2d4774dd3$var$cycleValue(hours, amount, min, max, options === null || options === void 0 ? void 0 : options.round);
636
+ break;
637
+ }
638
+ case 'minute':
639
+ mutable.minute = $735220c2d4774dd3$var$cycleValue(value.minute, amount, 0, 59, options === null || options === void 0 ? void 0 : options.round);
640
+ break;
641
+ case 'second':
642
+ mutable.second = $735220c2d4774dd3$var$cycleValue(value.second, amount, 0, 59, options === null || options === void 0 ? void 0 : options.round);
643
+ break;
644
+ case 'millisecond':
645
+ mutable.millisecond = $735220c2d4774dd3$var$cycleValue(value.millisecond, amount, 0, 999, options === null || options === void 0 ? void 0 : options.round);
646
+ break;
647
+ default:
648
+ throw new Error('Unsupported field ' + field);
649
+ }
650
+ return mutable;
651
+ }
652
+ function $735220c2d4774dd3$var$cycleValue(value, amount, min, max, round = false) {
653
+ if (round) {
654
+ value += Math.sign(amount);
655
+ if (value < min) value = max;
656
+ let div = Math.abs(amount);
657
+ if (amount > 0) value = Math.ceil(value / div) * div;
658
+ else value = Math.floor(value / div) * div;
659
+ if (value > max) value = min;
660
+ } else {
661
+ value += amount;
662
+ if (value < min) value = max - (min - value - 1);
663
+ else if (value > max) value = min + (value - max - 1);
664
+ }
665
+ return value;
666
+ }
667
+
668
+ function $fae977aafc393c5c$export$f59dee82248f5ad4(time) {
669
+ return `${String(time.hour).padStart(2, '0')}:${String(time.minute).padStart(2, '0')}:${String(time.second).padStart(2, '0')}${time.millisecond ? String(time.millisecond / 1000).slice(1) : ''}`;
670
+ }
671
+
672
+ function _check_private_redeclaration(obj, privateCollection) {
673
+ if (privateCollection.has(obj)) {
674
+ throw new TypeError("Cannot initialize the same private elements twice on an object");
675
+ }
676
+ }
677
+
678
+ function _class_private_field_init(obj, privateMap, value) {
679
+ _check_private_redeclaration(obj, privateMap);
680
+ privateMap.set(obj, value);
681
+ }
682
+
683
+ var // This prevents TypeScript from allowing other types with the same fields to match.
684
+ // @ts-ignore
685
+ $35ea8db9cb2ccb90$var$_type1 = /*#__PURE__*/ new WeakMap();
686
+ class $35ea8db9cb2ccb90$export$680ea196effce5f {
687
+ /** Returns a copy of this time. */ copy() {
688
+ return new $35ea8db9cb2ccb90$export$680ea196effce5f(this.hour, this.minute, this.second, this.millisecond);
689
+ }
690
+ /** Returns a new `Time` with the given duration added to it. */ add(duration) {
691
+ return ($735220c2d4774dd3$export$7ed87b6bc2506470)(this, duration);
692
+ }
693
+ /** Returns a new `Time` with the given duration subtracted from it. */ subtract(duration) {
694
+ return ($735220c2d4774dd3$export$fe34d3a381cd7501)(this, duration);
695
+ }
696
+ /** Returns a new `Time` with the given fields set to the provided values. Other fields will be constrained accordingly. */ set(fields) {
697
+ return ($735220c2d4774dd3$export$e5d5e1c1822b6e56)(this, fields);
698
+ }
699
+ /**
700
+ * Returns a new `Time` with the given field adjusted by a specified amount.
701
+ * When the resulting value reaches the limits of the field, it wraps around.
702
+ */ cycle(field, amount, options) {
703
+ return ($735220c2d4774dd3$export$dd02b3e0007dfe28)(this, field, amount, options);
704
+ }
705
+ /** Converts the time to an ISO 8601 formatted string. */ toString() {
706
+ return ($fae977aafc393c5c$export$f59dee82248f5ad4)(this);
707
+ }
708
+ /** Compares this time with another. A negative result indicates that this time is before the given one, and a positive time indicates that it is after. */ compare(b) {
709
+ return ($14e0f24ef4ac5c92$export$c19a80a9721b80f6)(this, b);
710
+ }
711
+ constructor(hour = 0, minute = 0, second = 0, millisecond = 0){
712
+ (_class_private_field_init)(this, $35ea8db9cb2ccb90$var$_type1, {
713
+ writable: true,
714
+ value: void 0
715
+ });
716
+ this.hour = hour;
717
+ this.minute = minute;
718
+ this.second = second;
719
+ this.millisecond = millisecond;
720
+ ($735220c2d4774dd3$export$7555de1e070510cb)(this);
721
+ }
722
+ }
723
+
724
+ var Switch = function (_a) {
725
+ var id = _a.id, props = __rest(_a, ["id"]);
726
+ var generatedId = useId();
727
+ var autoId = id || generatedId;
728
+ return jsx(Switch$1, __assign({}, props, { id: autoId }));
729
+ };
730
+
731
+ /**
732
+ * TimeInput genérico reutilizable basado en HeroUI siguiendo las reglas de diseño BeweOS.
733
+ */
734
+ var TimeInput = function (_a) {
735
+ var label = _a.label, id = _a.id, _b = _a.size, size = _b === void 0 ? "md" : _b, _c = _a.radius, radius = _c === void 0 ? "md" : _c, _d = _a.variant, variant = _d === void 0 ? "bordered" : _d, props = __rest(_a, ["label", "id", "size", "radius", "variant"]);
736
+ var generatedId = useId();
737
+ var autoId = id || generatedId;
738
+ return (jsx(TimeInput$1, __assign({}, props, { id: autoId, size: size, radius: radius, variant: variant, label: label, labelPlacement: "outside-left", classNames: {
739
+ label: "text-default-600 text-tiny group-data-[filled=true]:text-default-600",
740
+ inputWrapper: "focus-within:!border-primary-500",
741
+ } })));
742
+ };
743
+
744
+ /**
745
+ * @component ScheduleRow
746
+ * @description A React component for managing the schedule of a single day.
747
+ * It allows users to open or close the schedule, add or remove time slots,
748
+ * and modify the start and end times of each slot. The component is fully
749
+ * controlled and reports changes to the parent via the `onChange` callback.
750
+ *
751
+ * @param {ScheduleRowProps} props - The props for the component.
752
+ * @returns {React.ReactElement} The rendered ScheduleRow component.
753
+ */
754
+ var ScheduleRow = function (_a) {
755
+ var day = _a.day, daySchedule = _a.daySchedule, translations = _a.translations, onChange = _a.onChange, onCopyToAll = _a.onCopyToAll;
756
+ /**
757
+ * @function validateTimeSlots
758
+ * @description Validates all time slots to ensure the "from" time is not after the "to" time.
759
+ * @param {TimeSlot[]} timeSlots - The array of time slots to validate.
760
+ * @returns {TimeSlot[]} The updated array of time slots with error messages if any.
761
+ */
762
+ var validateTimeSlots = function (timeSlots) {
763
+ return timeSlots.map(function (slot) {
764
+ if (slot.from && slot.to) {
765
+ var fromTime = new ($35ea8db9cb2ccb90$export$680ea196effce5f.bind.apply($35ea8db9cb2ccb90$export$680ea196effce5f, __spreadArray([void 0], slot.from.split(":").map(Number), false)))();
766
+ var toTime = new ($35ea8db9cb2ccb90$export$680ea196effce5f.bind.apply($35ea8db9cb2ccb90$export$680ea196effce5f, __spreadArray([void 0], slot.to.split(":").map(Number), false)))();
767
+ if (fromTime.compare(toTime) > 0) {
768
+ return __assign(__assign({}, slot), { error: "From time cannot be after to time" });
769
+ }
770
+ }
771
+ return __assign(__assign({}, slot), { error: null });
772
+ });
773
+ };
774
+ /**
775
+ * @function toTimeValue
776
+ * @description Converts a time string (e.g., "09:00") to a `TimeValue` object
777
+ * required by the `TimeInput` component.
778
+ * @param {string} time - The time string to convert.
779
+ * @returns {TimeValue | null} The corresponding `TimeValue` object, or `null` if the input is empty.
780
+ */
781
+ var toTimeValue = function (time) {
782
+ if (!time) {
783
+ return null;
784
+ }
785
+ var _a = time.split(":").map(Number), hour = _a[0], minute = _a[1];
786
+ return new $35ea8db9cb2ccb90$export$680ea196effce5f(hour, minute);
787
+ };
788
+ /**
789
+ * @function fromTimeValue
790
+ * @description Converts a `TimeValue` object back to a formatted time string (e.g., "09:00").
791
+ * @param {TimeValue | null} time - The `TimeValue` object to convert.
792
+ * @returns {string} The formatted time string.
793
+ */
794
+ var fromTimeValue = function (time) {
795
+ if (!time) {
796
+ return "";
797
+ }
798
+ return "".concat(String(time.hour).padStart(2, "0"), ":").concat(String(time.minute).padStart(2, "0"));
799
+ };
800
+ /**
801
+ * @function handleToggleDay
802
+ * @description Toggles the `isOpen` status of the schedule for the day.
803
+ */
804
+ var handleToggleDay = function () {
805
+ onChange(__assign(__assign({}, daySchedule), { isOpen: !daySchedule.isOpen }));
806
+ };
807
+ /**
808
+ * @function handleTimeChange
809
+ * @description Updates the time for a specific time slot.
810
+ * @param {number} index - The index of the time slot to modify.
811
+ * @param {"from" | "to"} field - The field to update ("from" or "to").
812
+ * @param {TimeValue | null} value - The new time value from the `TimeInput` component.
813
+ */
814
+ var handleTimeChange = function (index, field, value) {
815
+ var _a;
816
+ var newTimeSlots = __spreadArray([], daySchedule.timeSlots, true);
817
+ newTimeSlots[index] = __assign(__assign({}, newTimeSlots[index]), (_a = {}, _a[field] = fromTimeValue(value), _a));
818
+ var validatedSlots = validateTimeSlots(newTimeSlots);
819
+ onChange(__assign(__assign({}, daySchedule), { timeSlots: validatedSlots }));
820
+ };
821
+ /**
822
+ * @function handleAddTimeSlot
823
+ * @description Adds a new, empty time slot to the schedule.
824
+ */
825
+ var handleAddTimeSlot = function () {
826
+ var newTimeSlots = __spreadArray(__spreadArray([], daySchedule.timeSlots, true), [{ from: "", to: "" }], false);
827
+ onChange(__assign(__assign({}, daySchedule), { timeSlots: newTimeSlots }));
828
+ };
829
+ /**
830
+ * @function handleRemoveTimeSlot
831
+ * @description Removes a time slot from the schedule at the specified index.
832
+ * @param {number} index - The index of the time slot to remove.
833
+ */
834
+ var handleRemoveTimeSlot = function (index) {
835
+ var newTimeSlots = daySchedule.timeSlots.filter(function (_, i) { return i !== index; });
836
+ onChange(__assign(__assign({}, daySchedule), { timeSlots: newTimeSlots }));
837
+ };
838
+ return (jsxs("div", { className: "flex flex-col w-full gap-y-4 last:border-b-0 last:mb-0 last:pb-0 border-b border-default-200 xs:py-4 xl:p-4 first:pt-0", children: [jsxs("div", { className: "flex w-full items-center justify-between", children: [jsxs("div", { className: "flex xs:space-x-2 sm:space-x-4", children: [jsx("h3", { className: "text-small font-semibold text-default-900 capitalize", children: day }), jsx(Chip, { size: "sm", color: daySchedule.isOpen ? "primary" : "default", className: "text-background", children: daySchedule.isOpen ? translations.open : translations.closed })] }), jsxs("div", { className: "flex xs:gap-2 sm:gap-5", children: [jsx(Switch, { size: "sm", color: "primary", isSelected: daySchedule.isOpen, onValueChange: handleToggleDay }), jsx(Button, { size: "sm", variant: "bordered", onPress: function () { return onCopyToAll(day); }, children: translations.copyToAll })] })] }), daySchedule.isOpen && (jsxs("div", { className: "flex flex-col justify-around gap-y-3 ", children: [daySchedule.timeSlots.map(function (slot, index) { return (jsxs("div", { className: "flex items-center gap-1 w-full justify-between", children: [jsxs("div", { className: "flex items-center justify-between gap-1", children: [jsx(TimeInput, { label: translations.from, className: "w-full", value: toTimeValue(slot.from), onChange: function (value) { return handleTimeChange(index, "from", value); }, isInvalid: !!slot.error }), jsx("span", { className: "text-default-900 xs:hidden xl:block", children: "-" }), jsx(TimeInput, { label: translations.to, className: "w-full", value: toTimeValue(slot.to), onChange: function (value) { return handleTimeChange(index, "to", value); }, isInvalid: !!slot.error, errorMessage: slot.error })] }), jsx(Button, { isIconOnly: true, size: "sm", color: "danger", variant: "light", onPress: function () { return handleRemoveTimeSlot(index); }, isDisabled: daySchedule.timeSlots.length === 1, startContent: jsx(IconComponent, { icon: "solar:trash-bin-minimalistic-outline" }) })] }, "".concat(day, "-timeslot-").concat(slot.from, "-").concat(slot.to, "-").concat(index))); }), daySchedule.timeSlots.length < 2 && (jsx(Button, { size: "sm", variant: "flat", onPress: function () { return handleAddTimeSlot(); }, startContent: jsx(IconComponent, { icon: "solar:add-circle-outline" }), children: translations.addTimeSlot }))] }))] }, day));
839
+ };
840
+
841
+ function AuraTable(_a) {
842
+ var columns = _a.columns, items = _a.items, renderCell = _a.renderCell, children = _a.children, props = __rest(_a, ["columns", "items", "renderCell", "children"]);
843
+ return (jsxs(Table, __assign({ removeWrapper: true, radius: "none" }, props, { children: [jsx(TableHeader, { columns: columns, children: function (column) { return jsx(TableColumn, { children: column.label }, column.key); } }), jsx(TableBody, { items: items, children: function (item) { return (jsx(TableRow, { children: function (columnKey) { return (jsx(TableCell, { children: renderCell ? renderCell(item, columnKey) : children })); } }, item.id)); } })] })));
844
+ }
845
+
846
+ /**
847
+ * Textarea component that wraps the HeroUI TextArea component.
848
+ */
849
+ var Textarea = function (_a) {
850
+ var id = _a.id, label = _a.label, placeholder = _a.placeholder, description = _a.description, errorMessage = _a.errorMessage, _b = _a.variant, variant = _b === void 0 ? "bordered" : _b, _c = _a.radius, radius = _c === void 0 ? "md" : _c, _d = _a.size, size = _d === void 0 ? "md" : _d; _a.labelPlacement; var props = __rest(_a, ["id", "label", "placeholder", "description", "errorMessage", "variant", "radius", "size", "labelPlacement"]);
851
+ var generatedId = useId();
852
+ var autoId = id || generatedId;
853
+ return (jsx(Textarea$1, __assign({}, props, { id: autoId, label: label, variant: variant, radius: radius, size: size, labelPlacement: "outside", placeholder: placeholder, description: description, errorMessage: errorMessage, classNames: {
854
+ label: "text-default-600 text-tiny group-data-[filled=true]:text-default-600",
855
+ inputWrapper: "data-[focus=true]:!border-primary-500 data-[focus=true]:!border-primary-500",
856
+ } })));
857
+ };
858
+
389
859
  // Traducciones por defecto en español según las reglas de diseño
390
860
  var defaultTranslations$1 = {
391
861
  lightTheme: "Claro",
@@ -427,6 +897,46 @@ var ThemePicker = function (_a) {
427
897
  return (jsx(RadioGroup, { value: value, onChange: function (e) { return onChange(e.target.value); }, className: "flex gap-6 w-full ".concat(className || ""), style: { gap: 16 }, children: themes.map(function (theme) { return (jsxs("div", { className: "relative rounded-[14px] ".concat(theme.cardClass, " p-6 w-1/2 min-h-[180px] transition-all duration-200 flex flex-col justify-start"), children: [jsx("div", { className: "absolute top-6 right-6", children: jsx(Radio, { "aria-label": theme.label, color: theme.radioColor, size: "sm", value: theme.key }) }), jsx("span", { className: theme.labelClass, children: theme.label }), theme.previewContent] }, theme.key)); }) }));
428
898
  };
429
899
 
900
+ var ConfigMenu = function (_a) {
901
+ var _b;
902
+ var options = _a.options, onLogout = _a.onLogout, translations = _a.translations;
903
+ return (jsxs(Dropdown, { className: "min-w-40", children: [jsx(DropdownTrigger, { children: jsx(Button$1, { isIconOnly: true, color: "default", startContent: jsx(IconComponent, { icon: "solar:settings-linear" }) }) }), jsxs(DropdownMenu, { "aria-label": "Configuration", children: [jsx(DropdownSection, { showDivider: true, className: "mb-0", children: options.map(function (item) { return (jsx(DropdownItem, { href: item.href, className: "data-[hover=true]:bg-primary-100 data-[hover=true]:text-default-700", classNames: {
904
+ base: "text-default-500",
905
+ }, startContent: item.icon ? jsx(IconComponent, { icon: item.icon }) : undefined, children: item.label }, item.label)); }) }), jsx(DropdownSection, { children: jsx(DropdownItem, { onPress: onLogout, className: "data-[hover=true]:bg-primary-100 data-[hover=true]:text-default-700", classNames: {
906
+ base: "text-default-500",
907
+ }, startContent: jsx(IconComponent, { icon: "solar:logout-2-linear" }), children: (_b = translations === null || translations === void 0 ? void 0 : translations.logout) !== null && _b !== void 0 ? _b : "Logout" }, "logout") })] })] }));
908
+ };
909
+ ConfigMenu.displayName = "ConfigMenu";
910
+
911
+ var NotificationButton = function (_a) {
912
+ var _b = _a.notificationCount, notificationCount = _b === void 0 ? 0 : _b;
913
+ return (jsx(Button$1, { isIconOnly: true, color: "secondary", variant: "flat", startContent: jsx(IconComponent, { icon: "solar:bell-bing-linear" }), children: notificationCount > 0 && (jsx("span", { className: "notification__alert", children: notificationCount })) }));
914
+ };
915
+ NotificationButton.displayName = "NotificationButton";
916
+
917
+ var HeaderComponent = function (_a) {
918
+ var notificationCount = _a.notificationCount, options = _a.options, onMenuClick = _a.onMenuClick, onLogout = _a.onLogout, translations = _a.translations;
919
+ return (jsxs("header", { className: "header__container", children: [jsx(Button$1, { className: "sm:hidden", isIconOnly: true, variant: "light", startContent: jsx(IconComponent, { icon: "solar:hamburger-menu-linear" }), onPress: onMenuClick }), jsxs("div", { className: "flex items-center gap-4", children: [jsx(NotificationButton, { notificationCount: notificationCount }), jsx(ConfigMenu, { options: options, onLogout: onLogout, translations: translations })] })] }));
920
+ };
921
+ HeaderComponent.displayName = "Header";
922
+
923
+ var ToastContext = createContext(undefined);
924
+ var useAuraToast = function () {
925
+ var context = useContext(ToastContext);
926
+ if (!context) {
927
+ throw new Error("useAuraToast must be used within a AuraToastProvider");
928
+ }
929
+ return context;
930
+ };
931
+
932
+ function GlobalToast() {
933
+ var _a = useAuraToast(), toast = _a.toast, hideToast = _a.hideToast;
934
+ if (!toast.isVisible) {
935
+ return null;
936
+ }
937
+ return (jsx("div", { className: "fixed top-4 right-4 z-50 w-full max-w-sm", children: jsx(Alert, { hideIconWrapper: true, color: toast.color, variant: "flat", title: toast.title, description: toast.description, isClosable: true, onClose: hideToast }) }));
938
+ }
939
+
430
940
  // Traducciones por defecto en español
431
941
  var defaultTranslations = {
432
942
  uploadText: "Da clic y selecciona tus archivos",
@@ -701,11 +1211,11 @@ var ImageCropModal = function (_a) {
701
1211
  window.removeEventListener("resize", handleResize);
702
1212
  };
703
1213
  }, [isOpen, updateCanvasSize]);
704
- return (jsx(Modal, { isOpen: isOpen, onClose: onCancel, size: "5xl", className: "sm:max-w-4xl", scrollBehavior: "inside", backdrop: "blur", classNames: {
1214
+ return (jsx(Modal$1, { isOpen: isOpen, onClose: onCancel, size: "5xl", className: "sm:max-w-4xl", scrollBehavior: "inside", backdrop: "blur", classNames: {
705
1215
  backdrop: "bg-black/80",
706
1216
  wrapper: "p-0 sm:p-4",
707
1217
  base: "m-0 sm:m-4 max-h-screen sm:max-h-[90vh] w-full sm:w-auto",
708
- }, children: jsxs(ModalContent, { className: "m-0 sm:m-0 h-screen sm:h-auto sm:max-h-[90vh] sm:rounded-lg", children: [jsxs(ModalHeader, { className: "flex flex-col gap-1 px-4 sm:px-6", children: [translations.cropModalTitle, jsx("p", { className: "text-xs sm:text-sm text-gray-500 font-normal", children: translations.cropInstructions })] }), jsx(ModalBody, { className: "px-4 sm:px-6 py-4", children: jsxs("div", { className: "flex flex-col gap-4", children: [jsx("div", { className: "flex justify-center overflow-hidden", children: jsx("canvas", { ref: canvasRef, width: canvasSize.width, height: canvasSize.height, className: "border border-gray-300 cursor-move select-none max-w-full max-h-[50vh] sm:max-h-[60vh]", onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp, onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, style: { touchAction: "none" } }) }), jsxs("div", { className: "flex flex-col gap-2", children: [jsx("label", { htmlFor: "zoom-slider", className: "text-sm font-medium", children: translations.cropZoomLabel }), jsxs("div", { className: "flex items-center gap-2 sm:gap-3 w-full", children: [jsx("span", { className: "text-xs text-gray-500 min-w-[15px] sm:min-w-[20px]", children: "-" }), jsx(Slider, { id: "zoom-slider", size: "sm", step: 0.1, minValue: -1, maxValue: 1, value: zoomValue, onChange: function (value) { return setZoomValue(value); }, className: "flex-1", marks: [
1218
+ }, children: jsxs(ModalContent$1, { className: "m-0 sm:m-0 h-screen sm:h-auto sm:max-h-[90vh] sm:rounded-lg", children: [jsxs(ModalHeader$1, { className: "flex flex-col gap-1 px-4 sm:px-6", children: [translations.cropModalTitle, jsx("p", { className: "text-xs sm:text-sm text-gray-500 font-normal", children: translations.cropInstructions })] }), jsx(ModalBody$1, { className: "px-4 sm:px-6 py-4", children: jsxs("div", { className: "flex flex-col gap-4", children: [jsx("div", { className: "flex justify-center overflow-hidden", children: jsx("canvas", { ref: canvasRef, width: canvasSize.width, height: canvasSize.height, className: "border border-gray-300 cursor-move select-none max-w-full max-h-[50vh] sm:max-h-[60vh]", onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onMouseLeave: handleMouseUp, onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, style: { touchAction: "none" } }) }), jsxs("div", { className: "flex flex-col gap-2", children: [jsx("label", { htmlFor: "zoom-slider", className: "text-sm font-medium", children: translations.cropZoomLabel }), jsxs("div", { className: "flex items-center gap-2 sm:gap-3 w-full", children: [jsx("span", { className: "text-xs text-gray-500 min-w-[15px] sm:min-w-[20px]", children: "-" }), jsx(Slider, { id: "zoom-slider", size: "sm", step: 0.1, minValue: -1, maxValue: 1, value: zoomValue, onChange: function (value) { return setZoomValue(value); }, className: "flex-1", marks: [
709
1219
  { value: -1, label: "Out" },
710
1220
  { value: 0, label: "0" },
711
1221
  { value: 1, label: "In" },
@@ -719,7 +1229,7 @@ var ImageCropModal = function (_a) {
719
1229
  backgroundImage: "linear-gradient(45deg, #ccc 25%, transparent 25%), linear-gradient(-45deg, #ccc 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #ccc 75%), linear-gradient(-45deg, transparent 75%, #ccc 75%)",
720
1230
  backgroundSize: "8px 8px",
721
1231
  backgroundPosition: "0 0, 0 4px, 4px -4px, -4px 0px",
722
- } }), jsx("span", { className: "text-sm", children: translations.cropBackgroundTransparent })] })] })] })] }) }), jsxs(ModalFooter, { className: "flex flex-col-reverse sm:flex-row gap-2 px-4 sm:px-6", children: [jsx(Button$1, { color: "danger", variant: "light", onPress: onCancel, className: "w-full sm:w-auto", children: translations.cropCancelButton }), jsx(Button$1, { color: "primary", onPress: handleSave, className: "w-full sm:w-auto", children: translations.cropSaveButton })] })] }) }));
1232
+ } }), jsx("span", { className: "text-sm", children: translations.cropBackgroundTransparent })] })] })] })] }) }), jsxs(ModalFooter$1, { className: "flex flex-col-reverse sm:flex-row gap-2 px-4 sm:px-6", children: [jsx(Button$1, { color: "danger", variant: "light", onPress: onCancel, className: "w-full sm:w-auto", children: translations.cropCancelButton }), jsx(Button$1, { color: "primary", onPress: handleSave, className: "w-full sm:w-auto", children: translations.cropSaveButton })] })] }) }));
723
1233
  };
724
1234
  /**
725
1235
  * Componente de previsualización de archivo
@@ -903,323 +1413,737 @@ var UploadFile = function (_a) {
903
1413
  onUpload([]);
904
1414
  };
905
1415
  // Clases CSS dinámicas usando Tailwind
906
- var containerClasses = "\n\t\trelative w-full border-2 border-dashed rounded-2xl p-2 sm:p-4 lg:p-4 transition-all duration-300\n\t\t".concat(width !== "100%" ? "w-[".concat(width, "]") : "w-full", "\n\t\t").concat(height !== "auto" ? "h-[".concat(height, "]") : "min-h-[150px] sm:min-h-[180px] lg:min-h-[200px]", "\n\t\t").concat(isDragging
907
- ? "border-blue-500 bg-blue-50 dark:bg-blue-950"
1416
+ var containerClasses = "\n\t\trelative w-full border-2 border-dashed rounded-2xl p-3 transition-all duration-300 bg-red-500\n\t\t".concat(width !== "100%" ? "w-[".concat(width, "]") : "w-full", "\n\t\t").concat(height !== "auto" ? "h-[".concat(height, "]") : "min-h-28", "\n\t\t").concat(isDragging
1417
+ ? "border-primary-500 bg-primary-50 dark:bg-primary-900"
908
1418
  : error
909
- ? "border-red-500 bg-red-50 dark:bg-red-950"
1419
+ ? "border-danger-500 bg-danger-50 dark:bg-danger-950"
910
1420
  : success
911
- ? "border-green-500 bg-green-50 dark:bg-green-950"
1421
+ ? "border-success-500 bg-success-50 dark:bg-success-950"
912
1422
  : disabled
913
1423
  ? "border-gray-300 bg-gray-100 dark:bg-gray-800"
914
- : "border-gray-300 hover:border-gray-400 bg-gray-50 dark:bg-gray-900", "\n\t\t").concat(!(disabled || uploadImageRef.current) ? "cursor-pointer" : "cursor-default", "\n\t\t").concat(className, "\n\t")
1424
+ : "border-gray-300 hover:border-gray-400 bg-primary-50 dark:bg-gray-900", "\n\t\t").concat(!(disabled || uploadImageRef.current) ? "cursor-pointer" : "cursor-default", "\n\t\t").concat(className, "\n\t")
915
1425
  .trim()
916
1426
  .replace(/\s+/g, " ");
917
- var textClasses = "\n\t\ttext-center mb-1 sm:mb-2 text-sm sm:text-base lg:text-lg font-medium\n\t\t".concat(disabled ? "text-gray-400" : textColor || "text-gray-700 dark:text-gray-200", "\n\t");
918
- var subTextClasses = "\n\t\ttext-xs sm:text-sm text-center\n\t\t".concat(disabled ? "text-gray-400" : "text-gray-500 dark:text-gray-400", "\n\t");
919
- return (jsxs("div", { className: "relative", children: [jsx(Card$1, { className: containerClasses, isPressable: !(disabled || uploadImageRef.current), onPress: handleClick, children: jsxs(CardBody, { className: "flex flex-col items-center justify-center gap-3 sm:gap-4 relative", onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [uploadImageRef.current && (jsx(FilePreview, { file: uploadImageRef.current, onRemove: handleRemoveImage, removeAriaLabel: t.removeFileAriaLabel })), jsx("div", { className: uploadImageRef.current
1427
+ var textClasses = "\n\t\ttext-centertext-base ont-medium\n\t\t".concat(disabled ? "text-default-400" : textColor || "text-default-700 dark:text-default-200", "\n\t");
1428
+ var subTextClasses = "\n\t\ttext-tiny text-center\n\t\t".concat(disabled ? "text-default-400" : "text-default-500 dark:text-default-400", "\n\t");
1429
+ return (jsxs("div", { className: "relative", children: [jsx(Card$1, { className: containerClasses, isPressable: !(disabled || uploadImageRef.current), onPress: handleClick, children: jsxs(CardBody, { className: "flex flex-col items-center justify-center gap-3 sm:gap-4 relative overflow-hidden", onDragEnter: handleDragEnter, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [uploadImageRef.current && (jsx(FilePreview, { file: uploadImageRef.current, onRemove: handleRemoveImage, removeAriaLabel: t.removeFileAriaLabel })), jsx("div", { className: uploadImageRef.current
920
1430
  ? "opacity-0"
921
- : "opacity-100 transition-opacity", children: jsxs("div", { className: "flex flex-col items-center gap-3 sm:gap-4", children: [jsx(IconComponent, { icon: icon, size: "xl", className: "sm:text-4xl lg:text-5xl ".concat(disabled ? "text-gray-400" : iconColor || "text-primary") }), jsxs("div", { className: "space-y-1 sm:space-y-2 text-center px-2", children: [jsx("p", { className: textClasses, children: isDragging ? t.dragText : finalText }), finalSubText && !isDragging && (jsx("p", { className: subTextClasses, children: finalSubText }))] })] }) }), jsx("input", { ref: inputRef, type: "file", className: "hidden", multiple: multiple, accept: Array.isArray(acceptedFiles)
1431
+ : "opacity-100 transition-opacity", children: jsxs("div", { className: "flex flex-col items-center gap-3 sm:gap-4", children: [jsx(IconComponent, { icon: icon, size: "xl", className: "sm:text-4xl lg:text-5xl ".concat(disabled ? "text-gray-400" : iconColor || "text-primary") }), jsxs("div", { className: "text-center px-2", children: [jsx("p", { className: textClasses, children: isDragging ? t.dragText : finalText }), finalSubText && !isDragging && (jsx("p", { className: subTextClasses, children: finalSubText }))] })] }) }), jsx("input", { ref: inputRef, type: "file", className: "hidden", multiple: multiple, accept: Array.isArray(acceptedFiles)
922
1432
  ? acceptedFiles.join(",")
923
1433
  : acceptedFiles, onChange: handleChange, disabled: disabled, "aria-label": t.uploadAreaAriaLabel })] }) }), error && errorText && (jsx("p", { className: "text-red-500 text-sm mt-2", role: "alert", children: errorText })), showCropModal && selectedImageUrl && cropConfig && (jsx(ImageCropModal, { isOpen: showCropModal, imageUrl: selectedImageUrl, targetWidth: cropConfig.targetWidth, targetHeight: cropConfig.targetHeight, onSave: handleCropSave, onCancel: handleCropCancel, translations: t }))] }));
924
1434
  };
925
1435
  UploadFile.displayName = "UploadFile";
926
1436
 
927
- var ConfigMenu = function (_a) {
928
- var _b;
929
- var options = _a.options, onLogout = _a.onLogout, translations = _a.translations;
930
- return (jsxs(Dropdown, { className: "min-w-40", children: [jsx(DropdownTrigger, { children: jsx(Button$1, { isIconOnly: true, color: "default", startContent: jsx(IconComponent, { icon: "solar:settings-linear" }) }) }), jsxs(DropdownMenu, { "aria-label": "Configuration", children: [jsx(DropdownSection, { showDivider: true, className: "mb-0", children: options.map(function (item) { return (jsx(DropdownItem, { href: item.href, className: "data-[hover=true]:bg-primary-50 data-[hover=true]:text-default-700", classNames: {
931
- base: "text-default-500",
932
- }, startContent: item.icon ? jsx(IconComponent, { icon: item.icon }) : undefined, children: item.label }, item.label)); }) }), jsx(DropdownSection, { children: jsx(DropdownItem, { onPress: onLogout, className: "data-[hover=true]:bg-primary-50 data-[hover=true]:text-default-700", classNames: {
933
- base: "text-default-500",
934
- }, startContent: jsx(IconComponent, { icon: "solar:logout-2-linear" }), children: (_b = translations === null || translations === void 0 ? void 0 : translations.logout) !== null && _b !== void 0 ? _b : "Logout" }, "logout") })] })] }));
1437
+ var Pagination = function (_a) {
1438
+ _a.size; var props = __rest(_a, ["size"]);
1439
+ return jsx(Pagination$1, __assign({ showControls: true, isCompact: true }, props));
935
1440
  };
936
- ConfigMenu.displayName = "ConfigMenu";
937
1441
 
938
- var NotificationButton = function (_a) {
939
- var _b = _a.notificationCount, notificationCount = _b === void 0 ? 0 : _b;
940
- return (jsx(Button$1, { isIconOnly: true, color: "secondary", variant: "flat", startContent: jsx(IconComponent, { icon: "solar:bell-bing-linear" }), children: notificationCount > 0 && (jsx("span", { className: "notification__alert", children: notificationCount })) }));
1442
+ var H2 = function (_a) {
1443
+ var children = _a.children, className = _a.className, props = __rest(_a, ["children", "className"]);
1444
+ return (jsx("h2", __assign({ className: cn("text-lg font-medium", className) }, props, { children: children })));
941
1445
  };
942
- NotificationButton.displayName = "NotificationButton";
943
1446
 
944
- var HeaderComponent = function (_a) {
945
- var notificationCount = _a.notificationCount, options = _a.options, onMenuClick = _a.onMenuClick, onLogout = _a.onLogout, translations = _a.translations;
946
- return (jsxs("header", { className: "header__container", children: [jsx(Button$1, { className: "sm:hidden", isIconOnly: true, variant: "light", startContent: jsx(IconComponent, { icon: "solar:hamburger-menu-linear" }), onPress: onMenuClick }), jsxs("div", { className: "flex items-center gap-4", children: [jsx(NotificationButton, { notificationCount: notificationCount }), jsx(ConfigMenu, { options: options, onLogout: onLogout, translations: translations })] })] }));
1447
+ var H3 = function (_a) {
1448
+ var children = _a.children, className = _a.className, props = __rest(_a, ["children", "className"]);
1449
+ return (jsx("h3", __assign({ className: cn("text-base font-medium mb-1", className) }, props, { children: children })));
947
1450
  };
948
- HeaderComponent.displayName = "Header";
949
1451
 
950
- /**
951
- * Botón genérico basado en HeroUI siguiendo las reglas de diseño BeweOS.
952
- *
953
- * Reglas aplicadas:
954
- * - Variant: Solid, Bordered, Light, Flat, Faded
955
- * - Size: sm, md, lg
956
- * - StartContent: On, Off
957
- * - isLoading: On, Off
958
- * - Radius: md (por defecto)
959
- * - isIconOnly: True, False
960
- */
961
- var Button = function (_a) {
962
- var _b = _a.color, color = _b === void 0 ? "primary" : _b, _c = _a.size, size = _c === void 0 ? "md" : _c, _d = _a.variant, variant = _d === void 0 ? "solid" : _d, _e = _a.radius, radius = _e === void 0 ? "sm" : _e, startContent = _a.startContent, endContent = _a.endContent, _f = _a.isLoading, isLoading = _f === void 0 ? false : _f, _g = _a.isIconOnly, isIconOnly = _g === void 0 ? false : _g, props = __rest(_a, ["color", "size", "variant", "radius", "startContent", "endContent", "isLoading", "isIconOnly"]);
963
- return (jsx(Button$1, __assign({}, props, { color: color, size: size, variant: variant, radius: radius, startContent: startContent, endContent: endContent, isLoading: isLoading, isIconOnly: isIconOnly })));
1452
+ var H4 = function (_a) {
1453
+ var children = _a.children, className = _a.className, props = __rest(_a, ["children", "className"]);
1454
+ return (jsx("h4", __assign({ className: cn("text-sm font-medium mb-1", className) }, props, { children: children })));
964
1455
  };
965
1456
 
966
- var paddingClasses = {
967
- sm: "p-4",
968
- md: "p-6",
969
- lg: "p-8",
1457
+ var P = function (_a) {
1458
+ var children = _a.children, className = _a.className, props = __rest(_a, ["children", "className"]);
1459
+ return (jsx("p", __assign({ className: cn("text-sm text-default-500", className) }, props, { children: children })));
970
1460
  };
971
1461
 
972
- /**
973
- * Card genérica siguiendo las reglas de diseño BeweOS basada en HeroUI.
974
- *
975
- * Reglas aplicadas:
976
- * - Shadow: none, sm, md, lg (configurable)
977
- * - Radius: sm (por defecto, configurable)
978
- * - Padding configurable (sm, md, lg)
979
- * - Hereda de HeroUI Card con personalización BeweOS
980
- */
981
- var Card = function (_a) {
982
- var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b, _c = _a.shadow, shadow = _c === void 0 ? "sm" : _c, _d = _a.radius, radius = _d === void 0 ? "sm" : _d, _e = _a.padding, padding = _e === void 0 ? "md" : _e, props = __rest(_a, ["children", "className", "shadow", "radius", "padding"]);
983
- var paddingClass = paddingClasses[padding];
984
- var combinedClassName = [paddingClass, className].filter(Boolean).join(" ");
985
- return (jsx(Card$1, __assign({ shadow: shadow, radius: radius, className: combinedClassName }, props, { children: children })));
986
- };
987
-
988
- /**
989
- * Input genérico reutilizable basado en HeroUI siguiendo las reglas de diseño BeweOS.
990
- *
991
- * Reglas aplicadas:
992
- * - Variant: Bordered (por defecto)
993
- * - labelPlacement: Outside
994
- * - Size: sm, md, lg (configurable)
995
- * - Radius configurable
996
- */
997
- var Input = function (_a) {
998
- var label = _a.label, id = _a.id, _b = _a.size, size = _b === void 0 ? "md" : _b, _c = _a.variant, variant = _c === void 0 ? "bordered" : _c, _d = _a.radius, radius = _d === void 0 ? "md" : _d, placeholder = _a.placeholder, props = __rest(_a, ["label", "id", "size", "variant", "radius", "placeholder"]);
999
- var generatedId = useId();
1000
- var inputId = id || generatedId;
1001
- return (jsx(Input$1, __assign({}, props, { id: inputId, label: label, labelPlacement: "outside", placeholder: placeholder, variant: variant, size: size, radius: radius, classNames: {
1002
- label: "text-default-600 text-tiny",
1003
- inputWrapper: "focus-within:!border-primary-500",
1004
- } })));
1005
- };
1006
-
1007
- /**
1008
- * Select genérico reutilizable basado en HeroUI siguiendo las reglas de diseño BeweOS.
1009
- *
1010
- * Reglas aplicadas:
1011
- * - Variant: Bordered (por defecto)
1012
- * - Radius: md (por defecto)
1013
- * - labelPlacement: Outside
1014
- * - Size: sm, md, lg (configurable)
1015
- */
1016
- var Select = function (_a) {
1017
- var label = _a.label, id = _a.id, _b = _a.size, size = _b === void 0 ? "md" : _b, _c = _a.variant, variant = _c === void 0 ? "bordered" : _c, _d = _a.radius, radius = _d === void 0 ? "md" : _d, placeholder = _a.placeholder, props = __rest(_a, ["label", "id", "size", "variant", "radius", "placeholder"]);
1018
- var generatedId = useId();
1019
- var selectId = id || generatedId;
1020
- return (jsx("div", { className: "group", children: jsx(Select$1, __assign({}, props, { id: selectId, label: label, labelPlacement: "outside", placeholder: placeholder, variant: variant, size: size, radius: radius, classNames: {
1021
- label: "text-default-600 text-tiny group-data-[filled=true]:text-default-600",
1022
- trigger: "data-[open=true]:!border-primary-500 data-[focus=true]:!border-primary-500",
1023
- popoverContent: "[&_[data-focus-visible=true]]:!outline-none [&_[data-selectable=true]:focus]:!bg-primary-50 [&_li]:!text-default-500 [&_li[data-hover=true]]:!text-default-600",
1024
- } })) }));
1462
+ var ThemeContext = createContext({
1463
+ mode: "light",
1464
+ color: "blue",
1465
+ // biome-ignore lint/suspicious/noEmptyBlockStatements: <explanation>
1466
+ setMode: function () { },
1467
+ // biome-ignore lint/suspicious/noEmptyBlockStatements: <explanation>
1468
+ setColor: function () { },
1469
+ });
1470
+ var useThemeContext = function () {
1471
+ var context = useContext(ThemeContext);
1472
+ if (!context) {
1473
+ throw new Error("useThemeContext debe ser usado dentro de un ThemeProvider");
1474
+ }
1475
+ return context;
1025
1476
  };
1026
1477
 
1027
1478
  var themeColors = {
1479
+ "blue-light": {
1480
+ extend: "light",
1481
+ colors: {
1482
+ primary: {
1483
+ "50": "#dfedfd",
1484
+ "100": "#b3d4fa",
1485
+ "200": "#86bbf7",
1486
+ "300": "#59a1f4",
1487
+ "400": "#2d88f1",
1488
+ "500": "#006fee",
1489
+ "600": "#005cc4",
1490
+ "700": "#00489b",
1491
+ "800": "#003571",
1492
+ "900": "#002147",
1493
+ foreground: "#fff",
1494
+ DEFAULT: "#006fee",
1495
+ },
1496
+ secondary: {
1497
+ "50": "#eee4f8",
1498
+ "100": "#d7bfef",
1499
+ "200": "#bf99e5",
1500
+ "300": "#a773db",
1501
+ "400": "#904ed2",
1502
+ "500": "#7828c8",
1503
+ "600": "#6321a5",
1504
+ "700": "#4e1a82",
1505
+ "800": "#39135f",
1506
+ "900": "#240c3c",
1507
+ foreground: "#fff",
1508
+ DEFAULT: "#7828c8",
1509
+ },
1510
+ success: {
1511
+ "50": "#e2f8ec",
1512
+ "100": "#b9efd1",
1513
+ "200": "#91e5b5",
1514
+ "300": "#68dc9a",
1515
+ "400": "#40d27f",
1516
+ "500": "#17c964",
1517
+ "600": "#13a653",
1518
+ "700": "#0f8341",
1519
+ "800": "#0b5f30",
1520
+ "900": "#073c1e",
1521
+ foreground: "#000",
1522
+ DEFAULT: "#17c964",
1523
+ },
1524
+ warning: {
1525
+ "50": "#fef4e4",
1526
+ "100": "#fce4bd",
1527
+ "200": "#fad497",
1528
+ "300": "#f9c571",
1529
+ "400": "#f7b54a",
1530
+ "500": "#f5a524",
1531
+ "600": "#ca881e",
1532
+ "700": "#9f6b17",
1533
+ "800": "#744e11",
1534
+ "900": "#4a320b",
1535
+ foreground: "#000",
1536
+ DEFAULT: "#f5a524",
1537
+ },
1538
+ danger: {
1539
+ "50": "#fee1eb",
1540
+ "100": "#fbb8cf",
1541
+ "200": "#f98eb3",
1542
+ "300": "#f76598",
1543
+ "400": "#f53b7c",
1544
+ "500": "#f31260",
1545
+ "600": "#c80f4f",
1546
+ "700": "#9e0c3e",
1547
+ "800": "#73092e",
1548
+ "900": "#49051d",
1549
+ foreground: "#000",
1550
+ DEFAULT: "#f31260",
1551
+ },
1552
+ focus: "#006FEE",
1553
+ overlay: "#000000",
1554
+ },
1555
+ },
1556
+ "blue-dark": {
1557
+ extend: "dark",
1558
+ colors: {
1559
+ primary: {
1560
+ "50": "#002147",
1561
+ "100": "#003571",
1562
+ "200": "#00489b",
1563
+ "300": "#005cc4",
1564
+ "400": "#006fee",
1565
+ "500": "#2d88f1",
1566
+ "600": "#59a1f4",
1567
+ "700": "#86bbf7",
1568
+ "800": "#b3d4fa",
1569
+ "900": "#dfedfd",
1570
+ foreground: "#fff",
1571
+ DEFAULT: "#006fee",
1572
+ },
1573
+ secondary: {
1574
+ "50": "#240c3c",
1575
+ "100": "#39135f",
1576
+ "200": "#4e1a82",
1577
+ "300": "#6321a5",
1578
+ "400": "#7828c8",
1579
+ "500": "#904ed2",
1580
+ "600": "#a773db",
1581
+ "700": "#bf99e5",
1582
+ "800": "#d7bfef",
1583
+ "900": "#eee4f8",
1584
+ foreground: "#fff",
1585
+ DEFAULT: "#7828c8",
1586
+ },
1587
+ success: {
1588
+ "50": "#073c1e",
1589
+ "100": "#0b5f30",
1590
+ "200": "#0f8341",
1591
+ "300": "#13a653",
1592
+ "400": "#17c964",
1593
+ "500": "#40d27f",
1594
+ "600": "#68dc9a",
1595
+ "700": "#91e5b5",
1596
+ "800": "#b9efd1",
1597
+ "900": "#e2f8ec",
1598
+ foreground: "#000",
1599
+ DEFAULT: "#17c964",
1600
+ },
1601
+ warning: {
1602
+ "50": "#4a320b",
1603
+ "100": "#744e11",
1604
+ "200": "#9f6b17",
1605
+ "300": "#ca881e",
1606
+ "400": "#f5a524",
1607
+ "500": "#f7b54a",
1608
+ "600": "#f9c571",
1609
+ "700": "#fad497",
1610
+ "800": "#fce4bd",
1611
+ "900": "#fef4e4",
1612
+ foreground: "#000",
1613
+ DEFAULT: "#f5a524",
1614
+ },
1615
+ danger: {
1616
+ "50": "#49051d",
1617
+ "100": "#73092e",
1618
+ "200": "#9e0c3e",
1619
+ "300": "#c80f4f",
1620
+ "400": "#f31260",
1621
+ "500": "#f53b7c",
1622
+ "600": "#f76598",
1623
+ "700": "#f98eb3",
1624
+ "800": "#fbb8cf",
1625
+ "900": "#fee1eb",
1626
+ foreground: "#000",
1627
+ DEFAULT: "#f31260",
1628
+ },
1629
+ focus: "#006FEE",
1630
+ overlay: "#ffffff",
1631
+ },
1632
+ },
1028
1633
  "purple-light": {
1029
1634
  extend: "light",
1030
1635
  colors: {
1031
- background: "#ffffff",
1032
- foreground: "#111827",
1033
1636
  primary: {
1034
- 50: "#eee4f8",
1035
- 100: "#d7bfef",
1036
- 200: "#bf99e5",
1037
- 300: "#a773db",
1038
- 400: "#904ed2",
1039
- 500: "#7828c8",
1040
- 600: "#6321a5",
1041
- 700: "#4e1a82",
1042
- 800: "#39135f",
1043
- 900: "#240c3c",
1637
+ "50": "#eee4f8",
1638
+ "100": "#d7bfef",
1639
+ "200": "#bf99e5",
1640
+ "300": "#a773db",
1641
+ "400": "#904ed2",
1642
+ "500": "#7828c8",
1643
+ "600": "#6321a5",
1644
+ "700": "#4e1a82",
1645
+ "800": "#39135f",
1646
+ "900": "#240c3c",
1647
+ foreground: "#fff",
1044
1648
  DEFAULT: "#7828c8",
1045
- foreground: "#ffffff",
1046
1649
  },
1047
- focus: "#904ed2",
1650
+ secondary: {
1651
+ "50": "#dfedfd",
1652
+ "100": "#b3d4fa",
1653
+ "200": "#86bbf7",
1654
+ "300": "#59a1f4",
1655
+ "400": "#2d88f1",
1656
+ "500": "#006fee",
1657
+ "600": "#005cc4",
1658
+ "700": "#00489b",
1659
+ "800": "#003571",
1660
+ "900": "#002147",
1661
+ foreground: "#fff",
1662
+ DEFAULT: "#006fee",
1663
+ },
1664
+ focus: "#7828c8",
1665
+ overlay: "#000000",
1048
1666
  },
1049
1667
  },
1050
1668
  "purple-dark": {
1051
1669
  extend: "dark",
1052
1670
  colors: {
1053
- background: "#1A1023",
1054
- foreground: "#ffffff",
1055
1671
  primary: {
1056
- 50: "#2c193f",
1057
- 100: "#462764",
1058
- 200: "#603689",
1059
- 300: "#7944ae",
1060
- 400: "#9353d3",
1061
- 500: "#a671db",
1062
- 600: "#b98fe2",
1063
- 700: "#ccadee",
1064
- 800: "#dfcbf2",
1065
- 900: "#f2eafa",
1672
+ "50": "#2c193f",
1673
+ "100": "#462764",
1674
+ "200": "#603689",
1675
+ "300": "#7944ae",
1676
+ "400": "#9353d3",
1677
+ "500": "#a671db",
1678
+ "600": "#b98fe2",
1679
+ "700": "#ccadea",
1680
+ "800": "#dfcbf2",
1681
+ "900": "#f2eafa",
1682
+ foreground: "#fff",
1066
1683
  DEFAULT: "#9353d3",
1067
- foreground: "#ffffff",
1068
1684
  },
1069
- focus: "#a671db",
1685
+ secondary: {
1686
+ "50": "#1e254d",
1687
+ "100": "#2f3a79",
1688
+ "200": "#404fa6",
1689
+ "300": "#5265d2",
1690
+ "400": "#637aff",
1691
+ "500": "#7e91ff",
1692
+ "600": "#9aa9ff",
1693
+ "700": "#b5c0ff",
1694
+ "800": "#d0d7ff",
1695
+ "900": "#eceeff",
1696
+ foreground: "#000",
1697
+ DEFAULT: "#637aff",
1698
+ },
1699
+ focus: "#9353d3",
1070
1700
  },
1071
1701
  },
1072
- "green-light": {
1702
+ "yellow-light": {
1073
1703
  extend: "light",
1074
1704
  colors: {
1075
- background: "#ffffff",
1076
- foreground: "#111827",
1077
1705
  primary: {
1078
- 50: "#ecf9f0",
1079
- 100: "#d1f0dc",
1080
- 200: "#b6e7c7",
1081
- 300: "#9cdeb3",
1082
- 400: "#81d59e",
1083
- 500: "#66cc8a",
1084
- 600: "#54a872",
1085
- 700: "#42855a",
1086
- 800: "#306142",
1087
- 900: "#1f3d29",
1088
- DEFAULT: "#66cc8a",
1089
- foreground: "#000000",
1706
+ "50": "#fffbe6",
1707
+ "100": "#FFFACD",
1708
+ "200": "#FFF39B",
1709
+ "300": "#FFEB69",
1710
+ "400": "#FFE243",
1711
+ "500": "#FFD505",
1712
+ "600": "#DBB303",
1713
+ "700": "#B79202",
1714
+ "800": "#937301",
1715
+ "900": "#7A5D00",
1716
+ foreground: "#000",
1717
+ DEFAULT: "#FFD505",
1090
1718
  },
1091
- focus: "#81d59e",
1719
+ secondary: {
1720
+ "50": "#F3F7FD",
1721
+ "100": "#D1DFFB",
1722
+ "200": "#A5BEF7",
1723
+ "300": "#7494E7",
1724
+ "400": "#4E6FCF",
1725
+ "500": "#1E40AF",
1726
+ "600": "#153096",
1727
+ "700": "#0F237D",
1728
+ "800": "#091865",
1729
+ "900": "#051053",
1730
+ foreground: "#fff",
1731
+ DEFAULT: "#1E40AF",
1732
+ },
1733
+ focus: "#FFD505",
1734
+ overlay: "#000000",
1092
1735
  },
1093
1736
  },
1094
- "green-dark": {
1737
+ "yellow-dark": {
1095
1738
  extend: "dark",
1096
1739
  colors: {
1097
- background: "#0F1D15",
1098
- foreground: "#ffffff",
1099
1740
  primary: {
1100
- 50: "#1f3d29",
1101
- 100: "#306142",
1102
- 200: "#42855a",
1103
- 300: "#54a872",
1104
- 400: "#66cc8a",
1105
- 500: "#81d59e",
1106
- 600: "#9cdeb3",
1107
- 700: "#b6e7c7",
1108
- 800: "#d1f0dc",
1109
- 900: "#ecf9f0",
1110
- DEFAULT: "#66cc8a",
1111
- foreground: "#000000",
1741
+ "50": "#7A5D00",
1742
+ "100": "#937301",
1743
+ "200": "#B79202",
1744
+ "300": "#DBB303",
1745
+ "400": "#FFD505",
1746
+ "500": "#FFE243",
1747
+ "600": "#FFEB69",
1748
+ "700": "#FFF39B",
1749
+ "800": "#FFFACD",
1750
+ "900": "#fffbe6",
1751
+ foreground: "#000",
1752
+ DEFAULT: "#FFD505",
1112
1753
  },
1113
- focus: "#81d59e",
1754
+ secondary: {
1755
+ 50: "#e1efff",
1756
+ 100: "#b2d0ff",
1757
+ 200: "#83b1fc",
1758
+ 300: "#5292f8",
1759
+ 400: "#2473f5",
1760
+ 500: "#0a5adb",
1761
+ 600: "#0246ac",
1762
+ 700: "#00327c",
1763
+ 800: "#001e4d",
1764
+ 900: "#000a1f",
1765
+ foreground: "#fff",
1766
+ DEFAULT: "#0a5adb",
1767
+ },
1768
+ focus: "#FFD505",
1769
+ overlay: "#ffffff",
1114
1770
  },
1115
1771
  },
1116
- "blue-light": {
1772
+ "coral-light": {
1117
1773
  extend: "light",
1118
1774
  colors: {
1119
- background: "#ffffff",
1120
- foreground: "#111827",
1121
1775
  primary: {
1122
- 50: "#eff6ff",
1123
- 100: "#dbeafe",
1124
- 200: "#bfdbfe",
1125
- 300: "#93c5fd",
1126
- 400: "#60a5fa",
1127
- 500: "#3b82f6",
1128
- 600: "#2563eb",
1129
- 700: "#1d4ed8",
1130
- 800: "#1e40af",
1131
- 900: "#1e3a8a",
1132
- DEFAULT: "#3b82f6",
1133
- foreground: "#ffffff",
1776
+ "50": "#ffe9e9",
1777
+ "100": "#ffcaca",
1778
+ "200": "#ffabab",
1779
+ "300": "#ff8d8d",
1780
+ "400": "#ff6e6e",
1781
+ "500": "#ff4f4f",
1782
+ "600": "#d24141",
1783
+ "700": "#a63333",
1784
+ "800": "#792626",
1785
+ "900": "#4d1818",
1786
+ foreground: "#000",
1787
+ DEFAULT: "#ff4f4f",
1134
1788
  },
1135
- focus: "#60a5fa",
1789
+ focus: "#ff4f4f",
1136
1790
  },
1137
1791
  },
1138
- "blue-dark": {
1792
+ "coral-dark": {
1139
1793
  extend: "dark",
1140
1794
  colors: {
1141
- background: "#101d3a",
1142
- foreground: "#ffffff",
1143
1795
  primary: {
1144
- 50: "#1e3a8a",
1145
- 100: "#1e40af",
1146
- 200: "#1d4ed8",
1147
- 300: "#2563eb",
1148
- 400: "#3b82f6",
1149
- 500: "#60a5fa",
1150
- 600: "#93c5fd",
1151
- 700: "#bfdbfe",
1152
- 800: "#dbeafe",
1153
- 900: "#eff6ff",
1154
- DEFAULT: "#3b82f6",
1155
- foreground: "#ffffff",
1796
+ "50": "#4d1818",
1797
+ "100": "#792626",
1798
+ "200": "#a63333",
1799
+ "300": "#d24141",
1800
+ "400": "#ff4f4f",
1801
+ "500": "#ff6e6e",
1802
+ "600": "#ff8d8d",
1803
+ "700": "#ffabab",
1804
+ "800": "#ffcaca",
1805
+ "900": "#ffe9e9",
1806
+ foreground: "#000",
1807
+ DEFAULT: "#ff4f4f",
1156
1808
  },
1157
- focus: "#60a5fa",
1809
+ focus: "#ff4f4f",
1158
1810
  },
1159
1811
  },
1160
- "yellow-light": {
1812
+ "green-light": {
1161
1813
  extend: "light",
1162
1814
  colors: {
1163
- background: "#ffffff",
1164
- foreground: "#111827",
1165
1815
  primary: {
1166
- 50: "#fefce8",
1167
- 100: "#fef9c3",
1168
- 200: "#fef08a",
1169
- 300: "#fde047",
1170
- 400: "#facc15",
1171
- 500: "#eab308",
1172
- 600: "#ca8a04",
1173
- 700: "#a16207",
1174
- 800: "#854d0e",
1175
- 900: "#713f12",
1176
- DEFAULT: "#eab308",
1177
- foreground: "#111827",
1816
+ 50: "#EFFFEF",
1817
+ 100: "#CFFCD1",
1818
+ 200: "#A0F9AC",
1819
+ 300: "#6FEE8D",
1820
+ 400: "#49DE7B",
1821
+ 500: "#16C964",
1822
+ 600: "#10AC64",
1823
+ 700: "#0B905F",
1824
+ 800: "#077457",
1825
+ 900: "#046051",
1826
+ foreground: "#000",
1827
+ DEFAULT: "#16C964",
1828
+ },
1829
+ secondary: {
1830
+ "50": "#e3eaff",
1831
+ "100": "#D7DFFE",
1832
+ "200": "#AFBFFE",
1833
+ "300": "#889DFD",
1834
+ "400": "#6A82FB",
1835
+ "500": "#3956F9",
1836
+ "600": "#2941D6",
1837
+ "700": "#1C2EB3",
1838
+ "800": "#121F90",
1839
+ "900": "#0A1477",
1840
+ foreground: "#fff",
1841
+ DEFAULT: "#3956F9",
1842
+ },
1843
+ success: {
1844
+ "50": "#e7fde3",
1845
+ "100": "#E8FCD3",
1846
+ "200": "#CBFAA8",
1847
+ "300": "#A4F17B",
1848
+ "400": "#7EE358",
1849
+ "500": "#49D127",
1850
+ "600": "#2FB31C",
1851
+ "700": "#1A9613",
1852
+ "800": "#0C790E",
1853
+ "900": "#076410",
1854
+ foreground: "#000",
1855
+ DEFAULT: "#49D127",
1856
+ },
1857
+ warning: {
1858
+ "50": "#fff9da",
1859
+ "100": "#FFF7CC",
1860
+ "200": "#FFEE99",
1861
+ "300": "#FFE266",
1862
+ "400": "#FFD63F",
1863
+ "500": "#FFC300",
1864
+ "600": "#DBA200",
1865
+ "700": "#B78300",
1866
+ "800": "#936600",
1867
+ "900": "#7A5100",
1868
+ foreground: "#000",
1869
+ DEFAULT: "#FFC300",
1870
+ },
1871
+ danger: {
1872
+ "50": "#ffe2e5",
1873
+ "100": "#FFE3D8",
1874
+ "200": "#FFC1B2",
1875
+ "300": "#FF988B",
1876
+ "400": "#FF726F",
1877
+ "500": "#FF3F4C",
1878
+ "600": "#DB2E49",
1879
+ "700": "#B71F45",
1880
+ "800": "#93143F",
1881
+ "900": "#7A0C3B",
1882
+ foreground: "#000",
1883
+ DEFAULT: "#FF3F4C",
1178
1884
  },
1179
- focus: "#facc15",
1885
+ focus: "#66cc8a",
1886
+ overlay: "#000000",
1180
1887
  },
1181
1888
  },
1182
- "yellow-dark": {
1889
+ "green-dark": {
1183
1890
  extend: "dark",
1184
1891
  colors: {
1185
- background: "#18181b",
1186
- foreground: "#ffffff",
1187
1892
  primary: {
1188
- 50: "#713f12",
1189
- 100: "#854d0e",
1190
- 200: "#a16207",
1191
- 300: "#ca8a04",
1192
- 400: "#eab308",
1193
- 500: "#facc15",
1194
- 600: "#fde047",
1195
- 700: "#fef08a",
1196
- 800: "#fef9c3",
1197
- 900: "#fefce8",
1198
- DEFAULT: "#facc15",
1199
- foreground: "#18181b",
1893
+ 50: "#EFFFEF",
1894
+ 100: "#CFFCD1",
1895
+ 200: "#A0F9AC",
1896
+ 300: "#6FEE8D",
1897
+ 400: "#49DE7B",
1898
+ 500: "#16C964",
1899
+ 600: "#10AC64",
1900
+ 700: "#0B905F",
1901
+ 800: "#077457",
1902
+ 900: "#046051",
1903
+ foreground: "#000",
1904
+ DEFAULT: "#16C964",
1905
+ },
1906
+ secondary: {
1907
+ "50": "#e3eaff",
1908
+ "100": "#D7DFFE",
1909
+ "200": "#AFBFFE",
1910
+ "300": "#889DFD",
1911
+ "400": "#6A82FB",
1912
+ "500": "#3956F9",
1913
+ "600": "#2941D6",
1914
+ "700": "#1C2EB3",
1915
+ "800": "#121F90",
1916
+ "900": "#0A1477",
1917
+ foreground: "#fff",
1918
+ DEFAULT: "#3956F9",
1919
+ },
1920
+ success: {
1921
+ "50": "#e7fde3",
1922
+ "100": "#E8FCD3",
1923
+ "200": "#CBFAA8",
1924
+ "300": "#A4F17B",
1925
+ "400": "#7EE358",
1926
+ "500": "#49D127",
1927
+ "600": "#2FB31C",
1928
+ "700": "#1A9613",
1929
+ "800": "#0C790E",
1930
+ "900": "#076410",
1931
+ foreground: "#000",
1932
+ DEFAULT: "#49D127",
1933
+ },
1934
+ warning: {
1935
+ "50": "#fff9da",
1936
+ "100": "#FFF7CC",
1937
+ "200": "#FFEE99",
1938
+ "300": "#FFE266",
1939
+ "400": "#FFD63F",
1940
+ "500": "#FFC300",
1941
+ "600": "#DBA200",
1942
+ "700": "#B78300",
1943
+ "800": "#936600",
1944
+ "900": "#7A5100",
1945
+ foreground: "#000",
1946
+ DEFAULT: "#FFC300",
1947
+ },
1948
+ danger: {
1949
+ "50": "#ffe2e5",
1950
+ "100": "#FFE3D8",
1951
+ "200": "#FFC1B2",
1952
+ "300": "#FF988B",
1953
+ "400": "#FF726F",
1954
+ "500": "#FF3F4C",
1955
+ "600": "#DB2E49",
1956
+ "700": "#B71F45",
1957
+ "800": "#93143F",
1958
+ "900": "#7A0C3B",
1959
+ foreground: "#fff",
1960
+ DEFAULT: "#FF3F4C",
1200
1961
  },
1201
- focus: "#eab308",
1962
+ focus: "#66cc8a",
1963
+ overlay: "#ffffff",
1202
1964
  },
1203
1965
  },
1204
1966
  };
1205
1967
 
1206
- var ThemeContext = createContext({
1207
- theme: "light",
1208
- // biome-ignore lint/suspicious/noEmptyBlockStatements: <explanation>
1209
- setTheme: function () { },
1210
- });
1211
- var useThemeContext = function () {
1212
- var context = useContext(ThemeContext);
1213
- if (!context) {
1214
- throw new Error("useThemeContext debe ser usado dentro de un ThemeProvider");
1215
- }
1216
- return context;
1968
+ var ColorSelector = function (_a) {
1969
+ var selectedColor = _a.selectedColor, onColorChange = _a.onColorChange;
1970
+ var mode = useThemeContext().mode;
1971
+ /**
1972
+ * Filters and maps the available theme colors to the current theme mode (light/dark).
1973
+ * Each color option contains:
1974
+ * - value: the theme name (e.g., "blue-light")
1975
+ * - label: the base color name (e.g., "blue")
1976
+ * - color: the primary color hex value
1977
+ */
1978
+ var colorOptions = Object.entries(themeColors)
1979
+ .filter(function (_a) {
1980
+ var themeData = _a[1];
1981
+ var themeMode = themeData.extend;
1982
+ return mode === "light" ? themeMode === "light" : themeMode === "dark";
1983
+ })
1984
+ .map(function (_a) {
1985
+ var themeName = _a[0], theme = _a[1];
1986
+ return ({
1987
+ value: themeName,
1988
+ label: themeName.split("-")[0],
1989
+ color: theme.colors.primary.DEFAULT,
1990
+ });
1991
+ });
1992
+ return (jsx(RadioGroup, { value: selectedColor, onValueChange: onColorChange, orientation: "horizontal", className: "flex flex-wrap !gap-2", classNames: {
1993
+ base: "flex flex-wrap !gap-2",
1994
+ wrapper: "flex flex-wrap !gap-2",
1995
+ }, children: colorOptions.map(function (color) { return (jsx(Radio, { value: color.label, className: "p-0 m-0", classNames: {
1996
+ base: "p-0 m-0",
1997
+ wrapper: "hidden",
1998
+ labelWrapper: "p-0 m-0",
1999
+ }, children: jsx("div", { className: "w-8 h-8 rounded-full border-2 cursor-pointer transition-all ".concat(selectedColor === color.label
2000
+ ? "border-black border-opacity-20 scale-110"
2001
+ : "border-gray-200 hover:scale-105"), style: { backgroundColor: color.color }, title: color.label }) }, color.value)); }) }));
2002
+ };
2003
+
2004
+ var Modal = function (props) {
2005
+ return (jsx(Modal$1, __assign({ shouldBlockScroll: true, radius: "lg", className: "py-9 px-6" }, props)));
1217
2006
  };
1218
2007
 
2008
+ var ModalContent = ModalContent$1;
2009
+
2010
+ var ModalHeader = ModalHeader$1;
2011
+
2012
+ var ModalBody = ModalBody$1;
2013
+
2014
+ var ModalFooter = ModalFooter$1;
2015
+
2016
+ var paddingClasses = {
2017
+ sm: "p-4",
2018
+ md: "p-6",
2019
+ lg: "p-8",
2020
+ };
2021
+
2022
+ /**
2023
+ * Card genérica siguiendo las reglas de diseño BeweOS basada en HeroUI.
2024
+ *
2025
+ * Reglas aplicadas:
2026
+ * - Shadow: none, sm, md, lg (configurable)
2027
+ * - Radius: sm (por defecto, configurable)
2028
+ * - Padding configurable (sm, md, lg)
2029
+ * - Hereda de HeroUI Card con personalización BeweOS
2030
+ */
2031
+ var Card = function (_a) {
2032
+ var children = _a.children, _b = _a.className, className = _b === void 0 ? "" : _b, _c = _a.shadow, shadow = _c === void 0 ? "sm" : _c, _d = _a.radius, radius = _d === void 0 ? "sm" : _d, _e = _a.padding, padding = _e === void 0 ? "md" : _e, props = __rest(_a, ["children", "className", "shadow", "radius", "padding"]);
2033
+ var paddingClass = paddingClasses[padding];
2034
+ var combinedClassName = [paddingClass, className].filter(Boolean).join(" ");
2035
+ return (jsx(Card$1, __assign({ shadow: shadow, radius: radius, className: combinedClassName }, props, { children: children })));
2036
+ };
2037
+
2038
+ /**
2039
+ * @file This file contains the theme configurations for the application.
2040
+ */
2041
+ var ALL_THEMES = __spreadArray(["light", "dark"], Object.keys(themeColors), true);
2042
+
2043
+ /**
2044
+ * Custom hook to manage the theme state and side effects.
2045
+ * @returns An object with the current mode, color, and functions to set them.
2046
+ */
2047
+ var useThemeManager = function () {
2048
+ var _a = useTheme(), rawTheme = _a.theme, setRawTheme = _a.setTheme;
2049
+ var setTheme = useCallback(function (theme) {
2050
+ var _a;
2051
+ var html = document.documentElement;
2052
+ (_a = html.classList).remove.apply(_a, ALL_THEMES);
2053
+ setRawTheme(theme);
2054
+ }, [setRawTheme]);
2055
+ useEffect(function () {
2056
+ var _a;
2057
+ var html = document.documentElement;
2058
+ (_a = html.classList).remove.apply(_a, ALL_THEMES);
2059
+ html.classList.add(rawTheme);
2060
+ }, [rawTheme]);
2061
+ var _b = useMemo(function () {
2062
+ var parts = rawTheme.split("-");
2063
+ var parsedColor = "blue";
2064
+ var parsedMode = "light";
2065
+ if (parts.length === 2) {
2066
+ var colorPart = parts[0], modePart = parts[1];
2067
+ parsedColor = colorPart;
2068
+ parsedMode = modePart;
2069
+ }
2070
+ else if (rawTheme === "light" || rawTheme === "dark") {
2071
+ parsedMode = rawTheme;
2072
+ }
2073
+ return { mode: parsedMode, color: parsedColor };
2074
+ }, [rawTheme]), mode = _b.mode, color = _b.color;
2075
+ var setMode = useCallback(function (newMode) {
2076
+ var newTheme = color === "blue" ? newMode : "".concat(color, "-").concat(newMode);
2077
+ setTheme(newTheme);
2078
+ }, [color, setTheme]);
2079
+ var setColor = useCallback(function (newColor) {
2080
+ var newTheme = newColor === "blue" ? mode : "".concat(newColor, "-").concat(mode);
2081
+ setTheme(newTheme);
2082
+ }, [mode, setTheme]);
2083
+ return {
2084
+ mode: mode,
2085
+ color: color,
2086
+ setMode: setMode,
2087
+ setColor: setColor,
2088
+ };
2089
+ };
2090
+
2091
+ /**
2092
+ * The ThemeProvider component is a wrapper that provides theme context to its children.
2093
+ * It uses the useThemeManager hook to manage the theme state and provides the current
2094
+ * theme mode and color, along with functions to update them, to its children.
2095
+ *
2096
+ * @param {IThemeProvider} { children }
2097
+ * @returns {JSX.Element}
2098
+ */
1219
2099
  var ThemeProvider = function (_a) {
1220
2100
  var children = _a.children;
1221
- var _b = useTheme(), theme = _b.theme, setTheme = _b.setTheme;
1222
- return (jsx(ThemeContext.Provider, { value: { theme: theme, setTheme: setTheme }, children: jsx("main", { className: "".concat(theme, " bg-background text-foreground "), children: children }) }));
2101
+ var _b = useThemeManager(), mode = _b.mode, color = _b.color, setMode = _b.setMode, setColor = _b.setColor;
2102
+ return (jsx(ThemeContext.Provider, { value: {
2103
+ mode: mode,
2104
+ color: color,
2105
+ setMode: setMode,
2106
+ setColor: setColor,
2107
+ }, children: children }));
2108
+ };
2109
+
2110
+ var AuraToastProvider = function (_a) {
2111
+ var children = _a.children;
2112
+ var _b = useState({
2113
+ isVisible: false,
2114
+ title: "",
2115
+ description: "",
2116
+ color: "primary",
2117
+ duration: 3000,
2118
+ }), toast = _b[0], setToast = _b[1];
2119
+ var timerRef = useRef(null);
2120
+ var hideToast = useCallback(function () {
2121
+ if (timerRef.current) {
2122
+ clearTimeout(timerRef.current);
2123
+ timerRef.current = null;
2124
+ }
2125
+ setToast(function (currentToast) { return (__assign(__assign({}, currentToast), { isVisible: false })); });
2126
+ }, []);
2127
+ var showToast = useCallback(function (options) {
2128
+ if (timerRef.current) {
2129
+ clearTimeout(timerRef.current);
2130
+ }
2131
+ setToast(__assign({ isVisible: true }, options));
2132
+ var duration = options.duration === undefined ? 3000 : options.duration;
2133
+ if (duration > 0) {
2134
+ timerRef.current = setTimeout(function () {
2135
+ hideToast();
2136
+ }, duration);
2137
+ }
2138
+ }, [hideToast]);
2139
+ useEffect(function () {
2140
+ return function () {
2141
+ if (timerRef.current) {
2142
+ clearTimeout(timerRef.current);
2143
+ }
2144
+ };
2145
+ }, []);
2146
+ return (jsx(ToastContext.Provider, { value: { toast: toast, showToast: showToast, hideToast: hideToast }, children: children }));
1223
2147
  };
1224
2148
 
1225
- export { AutoComplete, Button, Card, HeaderComponent, IconComponent, Input, MenuComponent, Phone, Select, ThemeContext, ThemePicker, ThemeProvider, UploadFile, sizeMap, themeColors, useThemeContext };
2149
+ export { AddHolidayForm, AuraTable, AuraToastProvider, AutoComplete, Button, Card, ColorSelector, DatePicker, DateRangePicker, GlobalToast, H2, H3, H4, HeaderComponent, HolidayType, IconComponent, Input, MenuComponent, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, P, Pagination, Phone, ScheduleRow, Select, Switch as SwitchComponent, Textarea, ThemeContext, ThemePicker, ThemeProvider, TimeInput as TimeInputComponent, ToastContext, UploadFile, sizeMap, themeColors, useAuraToast, useThemeContext };