@soyfri/shared-library 2.0.0-beta.9 → 2.0.0-beta8

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 (168) hide show
  1. package/Autocomplete-BA-cGASd.js +316 -0
  2. package/Autocomplete-BA-cGASd.js.map +1 -0
  3. package/Autocomplete-C2x-lBvZ.cjs +315 -0
  4. package/Autocomplete-C2x-lBvZ.cjs.map +1 -0
  5. package/Avatar-9L7YMxya.cjs +162 -0
  6. package/Avatar-9L7YMxya.cjs.map +1 -0
  7. package/Avatar-BJTr-PBd.js +163 -0
  8. package/Avatar-BJTr-PBd.js.map +1 -0
  9. package/Card-DG_crfkK.cjs +185 -0
  10. package/Card-DG_crfkK.cjs.map +1 -0
  11. package/Card-Ug-ttVSh.js +186 -0
  12. package/Card-Ug-ttVSh.js.map +1 -0
  13. package/Chip-OPYQ1uQ_.js +74 -0
  14. package/Chip-OPYQ1uQ_.js.map +1 -0
  15. package/Chip-qoJLDiva.cjs +73 -0
  16. package/Chip-qoJLDiva.cjs.map +1 -0
  17. package/DatePicker-8f_9bwhS.js +202 -0
  18. package/DatePicker-8f_9bwhS.js.map +1 -0
  19. package/DatePicker-DLSfkgGA.cjs +201 -0
  20. package/DatePicker-DLSfkgGA.cjs.map +1 -0
  21. package/DateRangePicker-BVpeJCHI.js +76 -0
  22. package/DateRangePicker-BVpeJCHI.js.map +1 -0
  23. package/DateRangePicker-B_hKQhbj.cjs +75 -0
  24. package/DateRangePicker-B_hKQhbj.cjs.map +1 -0
  25. package/DateTimePicker-CWNW09-O.cjs +220 -0
  26. package/DateTimePicker-CWNW09-O.cjs.map +1 -0
  27. package/DateTimePicker-D4L9GAod.js +221 -0
  28. package/DateTimePicker-D4L9GAod.js.map +1 -0
  29. package/Input-Cp911l23.js +174 -0
  30. package/Input-Cp911l23.js.map +1 -0
  31. package/Input-DI0jfq5X.cjs +173 -0
  32. package/Input-DI0jfq5X.cjs.map +1 -0
  33. package/Modal-Bm_HH9cv.cjs +319 -0
  34. package/Modal-Bm_HH9cv.cjs.map +1 -0
  35. package/Modal-Bnz6d9m9.js +320 -0
  36. package/Modal-Bnz6d9m9.js.map +1 -0
  37. package/RadioGroup-CxqDHap1.cjs +200 -0
  38. package/RadioGroup-CxqDHap1.cjs.map +1 -0
  39. package/RadioGroup-DMi9FvMP.js +201 -0
  40. package/RadioGroup-DMi9FvMP.js.map +1 -0
  41. package/Select-3CBOfM2H.js +447 -0
  42. package/Select-3CBOfM2H.js.map +1 -0
  43. package/Select-Bku4f4f8.cjs +446 -0
  44. package/Select-Bku4f4f8.cjs.map +1 -0
  45. package/Stat-BUcFCGrz.cjs +83 -0
  46. package/Stat-BUcFCGrz.cjs.map +1 -0
  47. package/Stat-C06A_izS.js +84 -0
  48. package/Stat-C06A_izS.js.map +1 -0
  49. package/StatusMessage-C5B6oGZ_.cjs +78 -0
  50. package/StatusMessage-C5B6oGZ_.cjs.map +1 -0
  51. package/StatusMessage-D1GlfQdz.js +79 -0
  52. package/StatusMessage-D1GlfQdz.js.map +1 -0
  53. package/Step-Dq0N72YB.js +49 -0
  54. package/Step-Dq0N72YB.js.map +1 -0
  55. package/Step-a8U8O-91.cjs +48 -0
  56. package/Step-a8U8O-91.cjs.map +1 -0
  57. package/Switch-BIeobv6i.cjs +179 -0
  58. package/Switch-BIeobv6i.cjs.map +1 -0
  59. package/Switch-DQEOxM2R.js +180 -0
  60. package/Switch-DQEOxM2R.js.map +1 -0
  61. package/Tab-Co31KY2k.cjs +95 -0
  62. package/Tab-Co31KY2k.cjs.map +1 -0
  63. package/Tab-DiK62gRz.js +96 -0
  64. package/Tab-DiK62gRz.js.map +1 -0
  65. package/Table-C2LbW0B1.js +531 -0
  66. package/Table-C2LbW0B1.js.map +1 -0
  67. package/Table-C4OM6rrC.cjs +530 -0
  68. package/Table-C4OM6rrC.cjs.map +1 -0
  69. package/components/AppBar/AppBar.cjs +1 -1
  70. package/components/AppBar/AppBar.js +1 -1
  71. package/components/Autocomplete/Autocomplete.cjs +4 -311
  72. package/components/Autocomplete/Autocomplete.cjs.map +1 -1
  73. package/components/Autocomplete/Autocomplete.js +4 -311
  74. package/components/Autocomplete/Autocomplete.js.map +1 -1
  75. package/components/Avatar/Avatar.cjs +2 -160
  76. package/components/Avatar/Avatar.cjs.map +1 -1
  77. package/components/Avatar/Avatar.js +2 -160
  78. package/components/Avatar/Avatar.js.map +1 -1
  79. package/components/Card/Card.cjs +7 -184
  80. package/components/Card/Card.cjs.map +1 -1
  81. package/components/Card/Card.js +7 -184
  82. package/components/Card/Card.js.map +1 -1
  83. package/components/Chip/Chip.cjs +2 -71
  84. package/components/Chip/Chip.cjs.map +1 -1
  85. package/components/Chip/Chip.js +2 -71
  86. package/components/Chip/Chip.js.map +1 -1
  87. package/components/Column/Column.cjs +1 -1
  88. package/components/Column/Column.cjs.map +1 -1
  89. package/components/Column/Column.d.ts +1 -1
  90. package/components/Column/Column.js +1 -1
  91. package/components/Column/Column.js.map +1 -1
  92. package/components/Column/index.d.ts +1 -0
  93. package/components/DatePicker/DatePicker.cjs +3 -200
  94. package/components/DatePicker/DatePicker.cjs.map +1 -1
  95. package/components/DatePicker/DatePicker.js +3 -200
  96. package/components/DatePicker/DatePicker.js.map +1 -1
  97. package/components/DateRangePicker/DateRangePicker.cjs +2 -73
  98. package/components/DateRangePicker/DateRangePicker.cjs.map +1 -1
  99. package/components/DateRangePicker/DateRangePicker.js +2 -73
  100. package/components/DateRangePicker/DateRangePicker.js.map +1 -1
  101. package/components/DateTimePicker/DateTimePicker.cjs +3 -219
  102. package/components/DateTimePicker/DateTimePicker.cjs.map +1 -1
  103. package/components/DateTimePicker/DateTimePicker.js +3 -219
  104. package/components/DateTimePicker/DateTimePicker.js.map +1 -1
  105. package/components/Drawer/Drawer.cjs +1 -1
  106. package/components/Drawer/Drawer.js +1 -1
  107. package/components/Input/Input.cjs +3 -172
  108. package/components/Input/Input.cjs.map +1 -1
  109. package/components/Input/Input.js +3 -172
  110. package/components/Input/Input.js.map +1 -1
  111. package/components/Modal/Modal.cjs +7 -317
  112. package/components/Modal/Modal.cjs.map +1 -1
  113. package/components/Modal/Modal.js +6 -316
  114. package/components/Modal/Modal.js.map +1 -1
  115. package/components/Modal/index.d.ts +2 -1
  116. package/components/Modal.d.ts +4 -0
  117. package/components/RadioGroup/RadioGroup.cjs +3 -199
  118. package/components/RadioGroup/RadioGroup.cjs.map +1 -1
  119. package/components/RadioGroup/RadioGroup.js +3 -199
  120. package/components/RadioGroup/RadioGroup.js.map +1 -1
  121. package/components/ScrollTopButton/ScrollTopButton.cjs +1 -1
  122. package/components/ScrollTopButton/ScrollTopButton.js +1 -1
  123. package/components/Select/Select.cjs +4 -445
  124. package/components/Select/Select.cjs.map +1 -1
  125. package/components/Select/Select.js +4 -445
  126. package/components/Select/Select.js.map +1 -1
  127. package/components/Stat/Stat.cjs +2 -81
  128. package/components/Stat/Stat.cjs.map +1 -1
  129. package/components/Stat/Stat.js +2 -81
  130. package/components/Stat/Stat.js.map +1 -1
  131. package/components/StatusMessage/StatusMessage.cjs +4 -77
  132. package/components/StatusMessage/StatusMessage.cjs.map +1 -1
  133. package/components/StatusMessage/StatusMessage.d.ts +1 -1
  134. package/components/StatusMessage/StatusMessage.js +3 -76
  135. package/components/StatusMessage/StatusMessage.js.map +1 -1
  136. package/components/StatusMessage/index.d.ts +2 -1
  137. package/components/StatusMessage.d.ts +4 -0
  138. package/components/Stepper/Stepper.cjs +3 -89
  139. package/components/Stepper/Stepper.cjs.map +1 -1
  140. package/components/Stepper/Stepper.d.ts +0 -12
  141. package/components/Stepper/Stepper.js +3 -89
  142. package/components/Stepper/Stepper.js.map +1 -1
  143. package/components/Switch/Switch.cjs +3 -178
  144. package/components/Switch/Switch.cjs.map +1 -1
  145. package/components/Switch/Switch.js +3 -178
  146. package/components/Switch/Switch.js.map +1 -1
  147. package/components/Table/Table.cjs +2 -528
  148. package/components/Table/Table.cjs.map +1 -1
  149. package/components/Table/Table.d.ts +1 -1
  150. package/components/Table/Table.js +2 -528
  151. package/components/Table/Table.js.map +1 -1
  152. package/components/Tabs/Tabs.cjs +3 -93
  153. package/components/Tabs/Tabs.cjs.map +1 -1
  154. package/components/Tabs/Tabs.js +3 -93
  155. package/components/Tabs/Tabs.js.map +1 -1
  156. package/hooks/Wizard/WizardContext.d.ts +2 -2
  157. package/index.cjs +46 -1
  158. package/index.cjs.map +1 -1
  159. package/index.d.ts +30 -0
  160. package/index.js +46 -1
  161. package/index.js.map +1 -1
  162. package/package.json +5 -3
  163. package/{resolvePreset-CT3kU-K2.cjs → resolvePreset-CxTI6_Ln.cjs} +3 -3
  164. package/{resolvePreset-CT3kU-K2.cjs.map → resolvePreset-CxTI6_Ln.cjs.map} +1 -1
  165. package/{resolvePreset-B-IB0ehH.js → resolvePreset-K6_BfWHD.js} +3 -3
  166. package/{resolvePreset-B-IB0ehH.js.map → resolvePreset-K6_BfWHD.js.map} +1 -1
  167. package/useWizard-CWdIxZzX.cjs.map +1 -1
  168. package/useWizard-CWq--C3o.js.map +1 -1
@@ -1,448 +1,7 @@
1
- var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __spreadValues = (a, b) => {
9
- for (var prop in b || (b = {}))
10
- if (__hasOwnProp.call(b, prop))
11
- __defNormalProp(a, prop, b[prop]);
12
- if (__getOwnPropSymbols)
13
- for (var prop of __getOwnPropSymbols(b)) {
14
- if (__propIsEnum.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
16
- }
17
- return a;
18
- };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- var __objRest = (source, exclude) => {
21
- var target = {};
22
- for (var prop in source)
23
- if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
- target[prop] = source[prop];
25
- if (source != null && __getOwnPropSymbols)
26
- for (var prop of __getOwnPropSymbols(source)) {
27
- if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
- target[prop] = source[prop];
29
- }
30
- return target;
31
- };
32
- import { jsx, Fragment, jsxs } from "react/jsx-runtime";
33
- import React__default, { useMemo, isValidElement, useState, useRef, useEffect } from "react";
34
- import { ListSubheader, TextField, Typography, Box, Chip, Avatar, MenuItem, ListItemIcon, CircularProgress, FormControl, InputLabel, Select as Select$1, FormHelperText, OutlinedInput } from "@mui/material";
35
- import { useTheme } from "@mui/material/styles";
36
- import { Controller } from "react-hook-form";
37
- import { b as buildFormFieldSx } from "../../formField.sx-DfVbMe0V.js";
38
- import { r as resolvePreset } from "../../resolvePreset-B-IB0ehH.js";
39
- import ClearIcon from "@mui/icons-material/Clear";
40
- import CheckIcon from "@mui/icons-material/Check";
41
- const buildSelectSx = (borderRadius, labelPosition) => buildFormFieldSx({ borderRadius, labelPosition });
42
- const filterOptionsByLabel = (options, search) => {
43
- if (!search) return options;
44
- const needle = search.toLowerCase();
45
- return options.filter((opt) => opt.label.toLowerCase().includes(needle));
46
- };
47
- const groupOptions = (options) => {
48
- const groups = {};
49
- options.forEach((opt) => {
50
- const group = opt.group || "__default";
51
- if (!groups[group]) groups[group] = [];
52
- groups[group].push(opt);
53
- });
54
- return groups;
55
- };
56
- const isGroupedOptionsEmpty = (groups) => {
57
- const keys = Object.keys(groups);
58
- if (keys.length === 0) return true;
59
- if (keys.length === 1 && groups["__default"] && groups["__default"].length === 0) {
60
- return true;
61
- }
62
- return false;
63
- };
64
- const normalizeSelectValue = (value, multiple) => {
65
- if (multiple) return value != null ? value : [];
66
- return value != null ? value : "";
67
- };
68
- const isSelectValueEmpty = (normalizedValue, multiple) => {
69
- if (multiple) return Array.isArray(normalizedValue) && normalizedValue.length === 0;
70
- return normalizedValue === "" || normalizedValue === null || normalizedValue === void 0;
71
- };
72
- const SelectSearchHeader = ({
73
- value,
74
- onChange,
75
- placeholder = "Buscar...",
76
- inputRef
77
- }) => {
78
- return /* @__PURE__ */ jsx(
79
- ListSubheader,
80
- {
81
- sx: {
82
- px: 2,
83
- pt: 1,
84
- pb: 1,
85
- backgroundColor: "background.paper",
86
- zIndex: 1,
87
- position: "sticky",
88
- top: 0
89
- },
90
- children: /* @__PURE__ */ jsx(
91
- TextField,
92
- {
93
- inputRef,
94
- placeholder,
95
- variant: "standard",
96
- size: "small",
97
- fullWidth: true,
98
- value,
99
- onChange: (e) => onChange(e.target.value),
100
- slotProps: { htmlInput: { autoFocus: true } },
101
- onClick: (e) => e.stopPropagation(),
102
- onKeyDown: (e) => e.stopPropagation()
103
- }
104
- )
105
- }
106
- );
107
- };
108
- function SelectValue(props) {
109
- var _a;
110
- const {
111
- selected,
112
- options,
113
- multiple,
114
- placeholder,
115
- maxChipsToShow,
116
- chipVariant,
117
- renderChipLabel,
118
- onDeleteChip,
119
- currentValues
120
- } = props;
121
- const isEmpty = !selected || Array.isArray(selected) && selected.length === 0;
122
- if (isEmpty) {
123
- return /* @__PURE__ */ jsx(Typography, { sx: { color: "text.disabled" }, children: placeholder || "" });
124
- }
125
- if (!multiple) {
126
- const item = options.find((opt) => opt.value === selected);
127
- if (renderChipLabel && item) return /* @__PURE__ */ jsx(Fragment, { children: renderChipLabel(item) });
128
- return /* @__PURE__ */ jsx(Fragment, { children: (_a = item == null ? void 0 : item.label) != null ? _a : String(selected) });
129
- }
130
- const selectedValuesArray = selected;
131
- const displayedChips = selectedValuesArray.slice(0, maxChipsToShow);
132
- const hiddenChipsCount = selectedValuesArray.length - maxChipsToShow;
133
- const handleDelete = (chipValue) => {
134
- if (!onDeleteChip || !currentValues) return;
135
- onDeleteChip(currentValues.filter((v) => v !== chipValue));
136
- };
137
- return /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", flexWrap: "wrap", gap: 0.5 }, children: [
138
- displayedChips.map((val) => {
139
- const item = options.find((o) => o.value === val);
140
- if (!item) return null;
141
- return /* @__PURE__ */ jsx(
142
- Chip,
143
- {
144
- variant: chipVariant,
145
- color: "primary",
146
- size: "small",
147
- label: renderChipLabel ? renderChipLabel(item) : item.label,
148
- avatar: item.img ? /* @__PURE__ */ jsx(Avatar, { src: item.img }) : void 0,
149
- onDelete: () => handleDelete(val),
150
- deleteIcon: /* @__PURE__ */ jsx(ClearIcon, { fontSize: "small" })
151
- },
152
- String(val)
153
- );
154
- }),
155
- hiddenChipsCount > 0 && /* @__PURE__ */ jsx(Chip, { size: "small", variant: chipVariant, label: `+${hiddenChipsCount} más` })
156
- ] });
157
- }
158
- const renderSelectMenuItem = ({
159
- option,
160
- selected,
161
- customRender
162
- }) => /* @__PURE__ */ jsxs(
163
- MenuItem,
164
- {
165
- value: option.value,
166
- disabled: option.disabled,
167
- selected,
168
- children: [
169
- /* @__PURE__ */ jsx(ListItemIcon, { sx: { minWidth: 32 }, children: selected && /* @__PURE__ */ jsx(CheckIcon, { color: "success", fontSize: "small" }) }),
170
- customRender ? customRender(option) : option.label
171
- ]
172
- },
173
- String(option.value)
174
- );
175
- function Option(_props) {
176
- return null;
177
- }
178
- Option.displayName = "Option";
179
- function Select(props) {
180
- const _a = props, {
181
- label,
182
- options = [],
183
- value,
184
- onChange,
185
- defaultValue,
186
- size = "small",
187
- multiple = false,
188
- filterable = false,
189
- placeholder,
190
- children,
191
- maxHeight = 300,
192
- maxWidth,
193
- maxChipsToShow = 3,
194
- renderChipLabel,
195
- chipVariant = "outlined",
196
- loadOptions,
197
- loadingMessage = "Cargando opciones...",
198
- noOptionsMessage = "No hay opciones",
199
- debounceTimeout = 300,
200
- disabled = false,
201
- error = false,
202
- helperText,
203
- borderRadius = 10,
204
- labelPosition = "outside",
205
- preset,
206
- sx,
207
- className
208
- } = _a, rest = __objRest(_a, [
209
- "label",
210
- "options",
211
- "value",
212
- "onChange",
213
- "defaultValue",
214
- "size",
215
- "multiple",
216
- "filterable",
217
- "placeholder",
218
- "children",
219
- "maxHeight",
220
- "maxWidth",
221
- "maxChipsToShow",
222
- "renderChipLabel",
223
- "chipVariant",
224
- "loadOptions",
225
- "loadingMessage",
226
- "noOptionsMessage",
227
- "debounceTimeout",
228
- "disabled",
229
- "error",
230
- "helperText",
231
- "borderRadius",
232
- "labelPosition",
233
- "preset",
234
- "sx",
235
- "className"
236
- ]);
237
- const theme = useTheme();
238
- const presetSx = resolvePreset("Select", preset, theme);
239
- const isRHFMode = "control" in rest && rest.control !== void 0;
240
- const customRender = useMemo(() => {
241
- var _a2;
242
- if (React__default.Children.count(children) === 1) {
243
- const child = React__default.Children.only(children);
244
- if (isValidElement(child) && ((_a2 = child.type) == null ? void 0 : _a2.displayName) === "Option") {
245
- return child.props.children;
246
- }
247
- }
248
- return null;
249
- }, [children]);
250
- const [search, setSearch] = useState("");
251
- const [asyncOptions, setAsyncOptions] = useState([]);
252
- const [loading, setLoading] = useState(false);
253
- const debounceTimerRef = useRef(null);
254
- const searchInputRef = useRef(null);
255
- const [isOpen, setIsOpen] = useState(false);
256
- const [isFocused, setIsFocused] = useState(false);
257
- const isAsync = typeof loadOptions === "function";
258
- const currentOptions = isAsync ? asyncOptions : options;
259
- useEffect(() => {
260
- var _a2;
261
- if (!isAsync) return;
262
- if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
263
- if (search) {
264
- setLoading(true);
265
- debounceTimerRef.current = window.setTimeout(() => {
266
- loadOptions(search).then(setAsyncOptions).finally(() => {
267
- var _a3;
268
- setLoading(false);
269
- (_a3 = searchInputRef.current) == null ? void 0 : _a3.focus();
270
- });
271
- }, debounceTimeout);
272
- } else {
273
- setAsyncOptions([]);
274
- setLoading(false);
275
- (_a2 = searchInputRef.current) == null ? void 0 : _a2.focus();
276
- }
277
- }, [search, isAsync, loadOptions, debounceTimeout]);
278
- const filteredOptions = useMemo(() => {
279
- if (isAsync) return currentOptions;
280
- if (!filterable) return currentOptions;
281
- return filterOptionsByLabel(currentOptions, search);
282
- }, [search, filterable, currentOptions, isAsync]);
283
- const groupedOptions = useMemo(() => groupOptions(filteredOptions), [filteredOptions]);
284
- const menuItems = useMemo(() => {
285
- const items = [];
286
- if (filterable || isAsync) {
287
- items.push(
288
- /* @__PURE__ */ jsx(
289
- SelectSearchHeader,
290
- {
291
- value: search,
292
- onChange: setSearch,
293
- inputRef: searchInputRef
294
- },
295
- "search-header"
296
- )
297
- );
298
- }
299
- const noOptions = isGroupedOptionsEmpty(groupedOptions);
300
- if (loading) {
301
- items.push(
302
- /* @__PURE__ */ jsx(MenuItem, { disabled: true, children: /* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "center", gap: 1 }, children: [
303
- /* @__PURE__ */ jsx(CircularProgress, { size: 20 }),
304
- /* @__PURE__ */ jsx(Typography, { children: loadingMessage })
305
- ] }) }, "loading-message")
306
- );
307
- } else if (noOptions) {
308
- items.push(
309
- /* @__PURE__ */ jsx(MenuItem, { disabled: true, children: /* @__PURE__ */ jsx(Typography, { children: noOptionsMessage }) }, "no-options-message")
310
- );
311
- } else {
312
- Object.entries(groupedOptions).forEach(([group, opts]) => {
313
- if (group !== "__default") {
314
- items.push(
315
- /* @__PURE__ */ jsx(ListSubheader, { disableSticky: true, children: group }, group)
316
- );
317
- }
318
- opts.forEach((opt) => {
319
- var _a2;
320
- const isSelected = multiple ? (_a2 = value == null ? void 0 : value.includes(opt.value)) != null ? _a2 : false : value === opt.value;
321
- items.push(
322
- renderSelectMenuItem({
323
- option: opt,
324
- selected: isSelected,
325
- customRender
326
- })
327
- );
328
- });
329
- });
330
- }
331
- return items;
332
- }, [
333
- groupedOptions,
334
- customRender,
335
- filterable,
336
- isAsync,
337
- search,
338
- loading,
339
- loadingMessage,
340
- noOptionsMessage,
341
- multiple,
342
- value
343
- ]);
344
- const handleChangeInternal = (event, rhfOnChange) => {
345
- const newValue = event.target.value;
346
- if (isRHFMode) {
347
- rhfOnChange == null ? void 0 : rhfOnChange(newValue);
348
- } else {
349
- onChange == null ? void 0 : onChange(newValue);
350
- }
351
- };
352
- const mergedSx = [
353
- buildSelectSx(borderRadius, labelPosition),
354
- ...presetSx ? [presetSx] : [],
355
- ...Array.isArray(sx) ? sx : [sx]
356
- ];
357
- const renderSelect = (selectValue, selectOnChange, onBlur, inputRef, rhfError, rhfHelperText) => {
358
- const finalError = rhfError != null ? rhfError : error;
359
- const finalHelperText = rhfHelperText != null ? rhfHelperText : helperText;
360
- const inputElement = labelPosition === "floating" ? /* @__PURE__ */ jsx(OutlinedInput, { label }) : /* @__PURE__ */ jsx(OutlinedInput, {});
361
- const normalizedValue = normalizeSelectValue(selectValue, multiple);
362
- const isEmpty = isSelectValueEmpty(normalizedValue, multiple);
363
- const shouldShrink = !isEmpty || isFocused || isOpen;
364
- const shouldDisplayPlaceholder = isEmpty && (isFocused || isOpen) && !!placeholder;
365
- return /* @__PURE__ */ jsxs(
366
- FormControl,
367
- {
368
- fullWidth: true,
369
- size,
370
- error: finalError,
371
- disabled,
372
- className,
373
- sx: mergedSx,
374
- children: [
375
- label && /* @__PURE__ */ jsx(InputLabel, { shrink: shouldShrink, children: label }),
376
- /* @__PURE__ */ jsx(
377
- Select$1,
378
- __spreadProps(__spreadValues({
379
- value: normalizedValue,
380
- defaultValue,
381
- multiple,
382
- onChange: selectOnChange,
383
- onBlur: (e) => {
384
- setIsFocused(false);
385
- onBlur == null ? void 0 : onBlur(e);
386
- },
387
- onFocus: () => setIsFocused(true),
388
- onOpen: () => setIsOpen(true),
389
- onClose: () => setIsOpen(false),
390
- renderValue: (selected) => /* @__PURE__ */ jsx(
391
- SelectValue,
392
- {
393
- selected,
394
- options: currentOptions,
395
- multiple,
396
- placeholder,
397
- maxChipsToShow,
398
- chipVariant,
399
- renderChipLabel,
400
- currentValues: value != null ? value : [],
401
- onDeleteChip: (next) => onChange == null ? void 0 : onChange(next)
402
- }
403
- ),
404
- displayEmpty: shouldDisplayPlaceholder,
405
- input: inputElement,
406
- disabled,
407
- MenuProps: {
408
- PaperProps: {
409
- style: { maxHeight, maxWidth }
410
- }
411
- },
412
- inputRef
413
- }, rest), {
414
- children: menuItems
415
- })
416
- ),
417
- finalHelperText && /* @__PURE__ */ jsx(FormHelperText, { children: finalHelperText })
418
- ]
419
- }
420
- );
421
- };
422
- if (isRHFMode) {
423
- const rhfProps = rest;
424
- return /* @__PURE__ */ jsx(
425
- Controller,
426
- {
427
- name: rhfProps.name,
428
- control: rhfProps.control,
429
- rules: rhfProps.validation,
430
- render: ({ field, fieldState: { error: fieldError } }) => renderSelect(
431
- field.value,
432
- (e) => handleChangeInternal(e, field.onChange),
433
- field.onBlur,
434
- field.ref,
435
- !!fieldError,
436
- fieldError == null ? void 0 : fieldError.message
437
- )
438
- }
439
- );
440
- }
441
- return renderSelect(value, (e) => handleChangeInternal(e));
442
- }
1
+ import { O, S, S as S2 } from "../../Select-3CBOfM2H.js";
443
2
  export {
444
- Option,
445
- Select,
446
- Select as default
3
+ O as Option,
4
+ S as Select,
5
+ S2 as default
447
6
  };
448
7
  //# sourceMappingURL=Select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sources":["../../../src/components/Select/Select.sx.ts","../../../src/components/Select/Select.helpers.ts","../../../src/components/Select/_parts/SelectSearchHeader.tsx","../../../src/components/Select/_parts/SelectValue.tsx","../../../src/components/Select/_parts/SelectMenuItem.tsx","../../../src/components/Select/Select.tsx"],"sourcesContent":["import type { SelectProps as MuiSelectProps } from '@mui/material';\n\nimport { buildFormFieldSx } from '../_shared/formField.sx';\nimport type { LabelPosition } from './Select';\n\n/**\n * Builder de sx para el Select. Usa el builder compartido\n * `buildFormFieldSx`. El Select no necesita overrides específicos.\n */\nexport const buildSelectSx = (\n borderRadius: number | string,\n labelPosition: LabelPosition,\n): MuiSelectProps['sx'] =>\n buildFormFieldSx({ borderRadius, labelPosition }) as MuiSelectProps['sx'];\n","import type { SelectOption } from './Select';\n\n/**\n * Filtra opciones por `label` (case-insensitive). Si `search` es vacío,\n * devuelve el array completo. Solo se usa en modo no-async.\n */\nexport const filterOptionsByLabel = (\n options: SelectOption[],\n search: string,\n): SelectOption[] => {\n if (!search) return options;\n const needle = search.toLowerCase();\n return options.filter((opt) => opt.label.toLowerCase().includes(needle));\n};\n\n/**\n * Agrupa opciones por la propiedad `group`. Las opciones sin group caen\n * bajo la key especial `__default`. Devuelve un Record para iterar en orden\n * de inserción con Object.entries.\n */\nexport const groupOptions = (\n options: SelectOption[],\n): Record<string, SelectOption[]> => {\n const groups: Record<string, SelectOption[]> = {};\n options.forEach((opt) => {\n const group = opt.group || '__default';\n if (!groups[group]) groups[group] = [];\n groups[group].push(opt);\n });\n return groups;\n};\n\n/**\n * Determina si un conjunto de grupos está efectivamente vacío\n * (no hay grupos o solo existe `__default` sin items).\n */\nexport const isGroupedOptionsEmpty = (\n groups: Record<string, SelectOption[]>,\n): boolean => {\n const keys = Object.keys(groups);\n if (keys.length === 0) return true;\n if (keys.length === 1 && groups['__default'] && groups['__default'].length === 0) {\n return true;\n }\n return false;\n};\n\n/**\n * Normaliza el valor actual al shape que espera el MUI Select:\n * - multiple: siempre array (aunque esté vacío).\n * - single: string vacío si null/undefined.\n */\nexport const normalizeSelectValue = <T>(\n value: T | T[] | null | undefined,\n multiple: boolean,\n): T | T[] | '' => {\n if (multiple) return (value ?? []) as T[];\n return (value ?? '') as T | '';\n};\n\n/**\n * Evalúa si el valor actual está vacío (para decidir shrink del label\n * y visibilidad del placeholder).\n */\nexport const isSelectValueEmpty = (\n normalizedValue: unknown,\n multiple: boolean,\n): boolean => {\n if (multiple) return Array.isArray(normalizedValue) && normalizedValue.length === 0;\n return normalizedValue === '' || normalizedValue === null || normalizedValue === undefined;\n};\n","import React from 'react';\nimport { ListSubheader, TextField } from '@mui/material';\n\ninterface SelectSearchHeaderProps {\n value: string;\n onChange: (next: string) => void;\n placeholder?: string;\n inputRef?: React.Ref<HTMLInputElement>;\n}\n\n/**\n * Header sticky del menu del Select que contiene el input de búsqueda.\n * Se usa cuando `filterable` es true o cuando el Select opera en modo async.\n * Detiene la propagación de click/keydown para que el menu no se cierre ni\n * intercepte las teclas al tipear.\n */\nexport const SelectSearchHeader: React.FC<SelectSearchHeaderProps> = ({\n value,\n onChange,\n placeholder = 'Buscar...',\n inputRef,\n}) => {\n return (\n <ListSubheader\n sx={{\n px: 2,\n pt: 1,\n pb: 1,\n backgroundColor: 'background.paper',\n zIndex: 1,\n position: 'sticky',\n top: 0,\n }}\n >\n <TextField\n inputRef={inputRef}\n placeholder={placeholder}\n variant=\"standard\"\n size=\"small\"\n fullWidth\n value={value}\n onChange={(e) => onChange(e.target.value)}\n slotProps={{ htmlInput: { autoFocus: true } }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n />\n </ListSubheader>\n );\n};\n\nexport default SelectSearchHeader;\n","import React from 'react';\nimport { Avatar, Box, Chip, Typography } from '@mui/material';\nimport ClearIcon from '@mui/icons-material/Clear';\n\nimport type {\n SelectOption,\n RenderChipLabel,\n ChipVariant,\n} from '../Select';\n\ninterface SelectValueProps<TValue extends SelectOption['value']> {\n selected: TValue | TValue[] | null | undefined;\n options: SelectOption[];\n multiple: boolean;\n placeholder?: string;\n maxChipsToShow: number;\n chipVariant: ChipVariant;\n renderChipLabel?: RenderChipLabel;\n /** Solo relevante en modo multiple. Recibe el nuevo array de valores. */\n onDeleteChip?: (nextValues: TValue[]) => void;\n /** Array de valores actuales (para componer el nuevo array al borrar chips). */\n currentValues?: TValue[];\n}\n\n/**\n * Render del valor seleccionado del Select.\n * - single: texto (label) o lo que devuelva `renderChipLabel`.\n * - multiple: chips con delete. Trunca después de `maxChipsToShow` mostrando \"+N más\".\n * - empty: placeholder en color disabled.\n */\nexport function SelectValue<TValue extends SelectOption['value']>(\n props: SelectValueProps<TValue>,\n) {\n const {\n selected,\n options,\n multiple,\n placeholder,\n maxChipsToShow,\n chipVariant,\n renderChipLabel,\n onDeleteChip,\n currentValues,\n } = props;\n\n const isEmpty =\n !selected || (Array.isArray(selected) && selected.length === 0);\n\n if (isEmpty) {\n return (\n <Typography sx={{ color: 'text.disabled' }}>{placeholder || ''}</Typography>\n );\n }\n\n if (!multiple) {\n const item = options.find((opt) => opt.value === selected);\n if (renderChipLabel && item) return <>{renderChipLabel(item)}</>;\n return <>{item?.label ?? String(selected)}</>;\n }\n\n const selectedValuesArray = selected as TValue[];\n const displayedChips = selectedValuesArray.slice(0, maxChipsToShow);\n const hiddenChipsCount = selectedValuesArray.length - maxChipsToShow;\n\n const handleDelete = (chipValue: TValue) => {\n if (!onDeleteChip || !currentValues) return;\n onDeleteChip(currentValues.filter((v) => v !== chipValue));\n };\n\n return (\n <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>\n {displayedChips.map((val) => {\n const item = options.find((o) => o.value === val);\n if (!item) return null;\n\n return (\n <Chip\n variant={chipVariant}\n color=\"primary\"\n size=\"small\"\n key={String(val)}\n label={renderChipLabel ? renderChipLabel(item) : item.label}\n avatar={item.img ? <Avatar src={item.img} /> : undefined}\n onDelete={() => handleDelete(val)}\n deleteIcon={<ClearIcon fontSize=\"small\" />}\n />\n );\n })}\n {hiddenChipsCount > 0 && (\n <Chip size=\"small\" variant={chipVariant} label={`+${hiddenChipsCount} más`} />\n )}\n </Box>\n );\n}\n\nexport default SelectValue;\n","import React from 'react';\nimport { ListItemIcon, MenuItem } from '@mui/material';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport type { SelectOption, RenderOptionItem } from '../Select';\n\ninterface RenderSelectMenuItemArgs {\n option: SelectOption;\n selected: boolean;\n customRender?: RenderOptionItem | null;\n}\n\n/**\n * Render helper (no componente) que devuelve un <MenuItem> listo para\n * colocarse como hijo directo del <MuiSelect>. Se implementa como función\n * y no como componente porque MUI Select inspecciona `props.value` de sus\n * children para resolver la selección, y envolverlo en un componente extra\n * rompe esa detección.\n *\n * Incluye el icono de check a la izquierda cuando `selected` es true. Si el\n * consumer pasó un `<Option>{(opt) => ...}</Option>`, usa ese render para el\n * contenido principal; de lo contrario muestra `option.label`.\n */\nexport const renderSelectMenuItem = ({\n option,\n selected,\n customRender,\n}: RenderSelectMenuItemArgs): React.ReactElement => (\n <MenuItem\n key={String(option.value)}\n value={option.value}\n disabled={option.disabled}\n selected={selected}\n >\n <ListItemIcon sx={{ minWidth: 32 }}>\n {selected && <CheckIcon color=\"success\" fontSize=\"small\" />}\n </ListItemIcon>\n {customRender ? customRender(option) : option.label}\n </MenuItem>\n);\n","import React, {\n isValidElement,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport {\n Box,\n CircularProgress,\n FormControl,\n FormHelperText,\n InputLabel,\n ListSubheader,\n MenuItem,\n OutlinedInput,\n Select as MuiSelect,\n SelectChangeEvent,\n Typography,\n type SelectProps as MuiSelectProps,\n} from '@mui/material';\nimport { useTheme } from '@mui/material/styles';\nimport { Controller, type Control, type RegisterOptions } from 'react-hook-form';\n\nimport { buildSelectSx } from './Select.sx';\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport {\n filterOptionsByLabel,\n groupOptions,\n isGroupedOptionsEmpty,\n isSelectValueEmpty,\n normalizeSelectValue,\n} from './Select.helpers';\nimport { SelectSearchHeader } from './_parts/SelectSearchHeader';\nimport { SelectValue } from './_parts/SelectValue';\nimport { renderSelectMenuItem } from './_parts/SelectMenuItem';\n\n// ── Tipos de dominio ─────────────────────────────────────────────────────\nexport interface SelectOption {\n value: string | number;\n label: string;\n img?: string;\n disabled?: boolean;\n group?: string;\n [key: string]: any;\n}\n\nexport type LabelPosition = 'outside' | 'floating';\nexport type ChipVariant = 'outlined' | 'filled';\nexport type SelectSize = 'small' | 'medium';\n\n// ── Render slots ─────────────────────────────────────────────────────────\nexport type RenderOptionItem = (item: SelectOption) => ReactNode;\nexport type RenderChipLabel = (item: SelectOption) => ReactNode;\n\n// ── Sub-componente declarativo <Option> ──────────────────────────────────\nexport interface OptionProps {\n children: RenderOptionItem;\n}\n\n// ── Props base ───────────────────────────────────────────────────────────\nexport interface BaseSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> {\n label?: string;\n options?: SelectOption[];\n defaultValue?: TValue | TValue[];\n size?: SelectSize;\n multiple?: boolean;\n filterable?: boolean;\n placeholder?: string;\n children?: ReactElement<{ children: RenderOptionItem }>;\n maxHeight?: number | string;\n maxWidth?: number | string;\n maxChipsToShow?: number;\n renderChipLabel?: RenderChipLabel;\n chipVariant?: ChipVariant;\n loadOptions?: (inputValue: string) => Promise<SelectOption[]>;\n loadingMessage?: ReactNode;\n noOptionsMessage?: ReactNode;\n debounceTimeout?: number;\n disabled?: boolean;\n error?: boolean;\n helperText?: string;\n /** Border radius del input (px o string CSS). Default: 10 */\n borderRadius?: number | string;\n /**\n * Posición del label.\n * - \"outside\" (default): label arriba del input, sin animación.\n * - \"floating\": label clásico de MUI (flota dentro del notched outline).\n */\n labelPosition?: LabelPosition;\n /**\n * Nombre del preset de estilo registrado en `theme.styles.Select`.\n * - `\"default\"` (o ausente) = estilo built-in del paquete.\n * - Cualquier otro string = mergea el preset encima del estilo built-in.\n */\n preset?: string;\n sx?: MuiSelectProps['sx'];\n className?: string;\n}\n\n// ── Variantes discriminadas (RHF vs controlado) ──────────────────────────\nexport interface RHFSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> extends BaseSelectProps<TValue> {\n name: string;\n control: Control<any>;\n validation?: RegisterOptions;\n value?: TValue | TValue[];\n onChange?: (val: TValue | TValue[]) => void;\n}\n\nexport interface StandardSelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> extends BaseSelectProps<TValue> {\n name?: string;\n control?: never;\n validation?: never;\n value: TValue | TValue[];\n onChange: (val: TValue | TValue[]) => void;\n}\n\n// ── API pública final ────────────────────────────────────────────────────\nexport type SelectProps<\n TValue extends SelectOption['value'] = SelectOption['value'],\n> = RHFSelectProps<TValue> | StandardSelectProps<TValue>;\n\n// ── Sub-componente declarativo <Option> ──────────────────────────────────\nexport function Option(_props: OptionProps) {\n return null;\n}\nOption.displayName = 'Option';\n\n// ── Componente ───────────────────────────────────────────────────────────\nexport function Select<TValue extends SelectOption['value'] = SelectOption['value']>(\n props: SelectProps<TValue>,\n) {\n const {\n label,\n options = [],\n value,\n onChange,\n defaultValue,\n size = 'small',\n multiple = false,\n filterable = false,\n placeholder,\n children,\n maxHeight = 300,\n maxWidth,\n maxChipsToShow = 3,\n renderChipLabel,\n chipVariant = 'outlined',\n loadOptions,\n loadingMessage = 'Cargando opciones...',\n noOptionsMessage = 'No hay opciones',\n debounceTimeout = 300,\n disabled = false,\n error = false,\n helperText,\n borderRadius = 10,\n labelPosition = 'outside',\n preset,\n sx,\n className,\n ...rest\n } = props;\n\n const theme = useTheme();\n const presetSx = resolvePreset('Select', preset, theme);\n\n const isRHFMode = 'control' in rest && (rest as any).control !== undefined;\n\n // Custom render opcional vía <Option>{item => ...}</Option>\n const customRender: RenderOptionItem | null = useMemo(() => {\n if (React.Children.count(children) === 1) {\n const child = React.Children.only(children);\n if (isValidElement(child) && (child.type as any)?.displayName === 'Option') {\n return (child.props as OptionProps).children;\n }\n }\n return null;\n }, [children]);\n\n // Búsqueda / async\n const [search, setSearch] = useState('');\n const [asyncOptions, setAsyncOptions] = useState<SelectOption[]>([]);\n const [loading, setLoading] = useState(false);\n const debounceTimerRef = useRef<number | null>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n // Focus/open tracking para el comportamiento del label \"outside\".\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const isAsync = typeof loadOptions === 'function';\n const currentOptions = isAsync ? asyncOptions : options;\n\n useEffect(() => {\n if (!isAsync) return;\n\n if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);\n\n if (search) {\n setLoading(true);\n debounceTimerRef.current = window.setTimeout(() => {\n loadOptions!(search)\n .then(setAsyncOptions)\n .finally(() => {\n setLoading(false);\n searchInputRef.current?.focus();\n });\n }, debounceTimeout);\n } else {\n setAsyncOptions([]);\n setLoading(false);\n searchInputRef.current?.focus();\n }\n }, [search, isAsync, loadOptions, debounceTimeout]);\n\n const filteredOptions = useMemo(() => {\n if (isAsync) return currentOptions;\n if (!filterable) return currentOptions;\n return filterOptionsByLabel(currentOptions, search);\n }, [search, filterable, currentOptions, isAsync]);\n\n const groupedOptions = useMemo(() => groupOptions(filteredOptions), [filteredOptions]);\n\n // Items del menu (search header + loading/empty + grupos + opciones)\n const menuItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n\n if (filterable || isAsync) {\n items.push(\n <SelectSearchHeader\n key=\"search-header\"\n value={search}\n onChange={setSearch}\n inputRef={searchInputRef}\n />,\n );\n }\n\n const noOptions = isGroupedOptionsEmpty(groupedOptions);\n\n if (loading) {\n items.push(\n <MenuItem key=\"loading-message\" disabled>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <CircularProgress size={20} />\n <Typography>{loadingMessage}</Typography>\n </Box>\n </MenuItem>,\n );\n } else if (noOptions) {\n items.push(\n <MenuItem key=\"no-options-message\" disabled>\n <Typography>{noOptionsMessage}</Typography>\n </MenuItem>,\n );\n } else {\n Object.entries(groupedOptions).forEach(([group, opts]) => {\n if (group !== '__default') {\n items.push(\n <ListSubheader key={group} disableSticky>\n {group}\n </ListSubheader>,\n );\n }\n opts.forEach((opt) => {\n const isSelected = multiple\n ? (value as TValue[] | undefined)?.includes(opt.value as TValue) ?? false\n : value === opt.value;\n\n items.push(\n renderSelectMenuItem({\n option: opt,\n selected: isSelected,\n customRender,\n }),\n );\n });\n });\n }\n return items;\n }, [\n groupedOptions,\n customRender,\n filterable,\n isAsync,\n search,\n loading,\n loadingMessage,\n noOptionsMessage,\n multiple,\n value,\n ]);\n\n // Handler de cambio\n const handleChangeInternal = (\n event: SelectChangeEvent<any>,\n rhfOnChange?: (...event: any[]) => void,\n ) => {\n const newValue = event.target.value;\n if (isRHFMode) {\n rhfOnChange?.(newValue);\n } else {\n (onChange as (val: TValue | TValue[]) => void)?.(newValue);\n }\n };\n\n // Sx mergeado (defaults + consumer)\n const mergedSx = [\n buildSelectSx(borderRadius, labelPosition),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : [sx]),\n ];\n\n // Render base\n const renderSelect = (\n selectValue: any,\n selectOnChange: any,\n onBlur?: any,\n inputRef?: any,\n rhfError?: boolean,\n rhfHelperText?: string,\n ) => {\n const finalError = rhfError ?? error;\n const finalHelperText = rhfHelperText ?? helperText;\n\n const inputElement =\n labelPosition === 'floating' ? (\n <OutlinedInput label={label} />\n ) : (\n <OutlinedInput />\n );\n\n const normalizedValue = normalizeSelectValue(selectValue, multiple);\n const isEmpty = isSelectValueEmpty(normalizedValue, multiple);\n\n // Shrink cuando hay valor, foco, o dropdown abierto.\n const shouldShrink = !isEmpty || isFocused || isOpen;\n // Placeholder solo cuando el label ya subió.\n const shouldDisplayPlaceholder = isEmpty && (isFocused || isOpen) && !!placeholder;\n\n return (\n <FormControl\n fullWidth\n size={size}\n error={finalError}\n disabled={disabled}\n className={className}\n sx={mergedSx}\n >\n {label && <InputLabel shrink={shouldShrink}>{label}</InputLabel>}\n <MuiSelect\n value={normalizedValue}\n defaultValue={defaultValue}\n multiple={multiple}\n onChange={selectOnChange}\n onBlur={(e) => {\n setIsFocused(false);\n onBlur?.(e);\n }}\n onFocus={() => setIsFocused(true)}\n onOpen={() => setIsOpen(true)}\n onClose={() => setIsOpen(false)}\n renderValue={(selected) => (\n <SelectValue<TValue>\n selected={selected as TValue | TValue[]}\n options={currentOptions}\n multiple={multiple}\n placeholder={placeholder}\n maxChipsToShow={maxChipsToShow}\n chipVariant={chipVariant}\n renderChipLabel={renderChipLabel}\n currentValues={(value as TValue[]) ?? []}\n onDeleteChip={(next) =>\n (onChange as (v: TValue | TValue[]) => void)?.(next)\n }\n />\n )}\n displayEmpty={shouldDisplayPlaceholder}\n input={inputElement}\n disabled={disabled}\n MenuProps={{\n PaperProps: {\n style: { maxHeight, maxWidth },\n },\n }}\n inputRef={inputRef}\n {...(rest as any)}\n >\n {menuItems}\n </MuiSelect>\n {finalHelperText && <FormHelperText>{finalHelperText}</FormHelperText>}\n </FormControl>\n );\n };\n\n // Branch: RHF vs controlado\n if (isRHFMode) {\n const rhfProps = rest as RHFSelectProps<TValue>;\n return (\n <Controller\n name={rhfProps.name}\n control={rhfProps.control}\n rules={rhfProps.validation}\n render={({ field, fieldState: { error: fieldError } }) =>\n renderSelect(\n field.value,\n (e: SelectChangeEvent<any>) => handleChangeInternal(e, field.onChange),\n field.onBlur,\n field.ref,\n !!fieldError,\n fieldError?.message,\n )\n }\n />\n );\n }\n\n return renderSelect(value, (e: SelectChangeEvent<any>) => handleChangeInternal(e));\n}\n\nexport default Select;\n"],"names":["React","_a","MuiSelect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASO,MAAM,gBAAgB,CAC3B,cACA,kBAEA,iBAAiB,EAAE,cAAc,eAAe;ACP3C,MAAM,uBAAuB,CAClC,SACA,WACmB;AACnB,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,SAAS,OAAO,YAAA;AACtB,SAAO,QAAQ,OAAO,CAAC,QAAQ,IAAI,MAAM,YAAA,EAAc,SAAS,MAAM,CAAC;AACzE;AAOO,MAAM,eAAe,CAC1B,YACmC;AACnC,QAAM,SAAyC,CAAA;AAC/C,UAAQ,QAAQ,CAAC,QAAQ;AACvB,UAAM,QAAQ,IAAI,SAAS;AAC3B,QAAI,CAAC,OAAO,KAAK,EAAG,QAAO,KAAK,IAAI,CAAA;AACpC,WAAO,KAAK,EAAE,KAAK,GAAG;AAAA,EACxB,CAAC;AACD,SAAO;AACT;AAMO,MAAM,wBAAwB,CACnC,WACY;AACZ,QAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,MAAI,KAAK,WAAW,KAAK,OAAO,WAAW,KAAK,OAAO,WAAW,EAAE,WAAW,GAAG;AAChF,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOO,MAAM,uBAAuB,CAClC,OACA,aACiB;AACjB,MAAI,SAAU,QAAQ,wBAAS,CAAA;AAC/B,SAAQ,wBAAS;AACnB;AAMO,MAAM,qBAAqB,CAChC,iBACA,aACY;AACZ,MAAI,SAAU,QAAO,MAAM,QAAQ,eAAe,KAAK,gBAAgB,WAAW;AAClF,SAAO,oBAAoB,MAAM,oBAAoB,QAAQ,oBAAoB;AACnF;ACtDO,MAAM,qBAAwD,CAAC;AAAA,EACpE;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AACF,MAAM;AACJ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,KAAK;AAAA,MAAA;AAAA,MAGP,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,WAAS;AAAA,UACT;AAAA,UACA,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,KAAK;AAAA,UACxC,WAAW,EAAE,WAAW,EAAE,WAAW,OAAK;AAAA,UAC1C,SAAS,CAAC,MAAM,EAAE,gBAAA;AAAA,UAClB,WAAW,CAAC,MAAM,EAAE,gBAAA;AAAA,QAAgB;AAAA,MAAA;AAAA,IACtC;AAAA,EAAA;AAGN;AClBO,SAAS,YACd,OACA;;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAEJ,QAAM,UACJ,CAAC,YAAa,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW;AAE/D,MAAI,SAAS;AACX,WACE,oBAAC,cAAW,IAAI,EAAE,OAAO,gBAAA,GAAoB,yBAAe,IAAG;AAAA,EAEnE;AAEA,MAAI,CAAC,UAAU;AACb,UAAM,OAAO,QAAQ,KAAK,CAAC,QAAQ,IAAI,UAAU,QAAQ;AACzD,QAAI,mBAAmB,KAAM,QAAO,oBAAA,UAAA,EAAG,UAAA,gBAAgB,IAAI,GAAE;AAC7D,WAAO,oBAAA,UAAA,EAAG,WAAA,kCAAM,UAAN,YAAe,OAAO,QAAQ,GAAE;AAAA,EAC5C;AAEA,QAAM,sBAAsB;AAC5B,QAAM,iBAAiB,oBAAoB,MAAM,GAAG,cAAc;AAClE,QAAM,mBAAmB,oBAAoB,SAAS;AAEtD,QAAM,eAAe,CAAC,cAAsB;AAC1C,QAAI,CAAC,gBAAgB,CAAC,cAAe;AACrC,iBAAa,cAAc,OAAO,CAAC,MAAM,MAAM,SAAS,CAAC;AAAA,EAC3D;AAEA,SACE,qBAAC,KAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,UAAU,QAAQ,KAAK,IAAA,GAChD,UAAA;AAAA,IAAA,eAAe,IAAI,CAAC,QAAQ;AAC3B,YAAM,OAAO,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG;AAChD,UAAI,CAAC,KAAM,QAAO;AAElB,aACE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS;AAAA,UACT,OAAM;AAAA,UACN,MAAK;AAAA,UAEL,OAAO,kBAAkB,gBAAgB,IAAI,IAAI,KAAK;AAAA,UACtD,QAAQ,KAAK,MAAM,oBAAC,UAAO,KAAK,KAAK,KAAK,IAAK;AAAA,UAC/C,UAAU,MAAM,aAAa,GAAG;AAAA,UAChC,YAAY,oBAAC,WAAA,EAAU,UAAS,QAAA,CAAQ;AAAA,QAAA;AAAA,QAJnC,OAAO,GAAG;AAAA,MAAA;AAAA,IAOrB,CAAC;AAAA,IACA,mBAAmB,KAClB,oBAAC,MAAA,EAAK,MAAK,SAAQ,SAAS,aAAa,OAAO,IAAI,gBAAgB,OAAA,CAAQ;AAAA,EAAA,GAEhF;AAEJ;ACtEO,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IAEC,OAAO,OAAO;AAAA,IACd,UAAU,OAAO;AAAA,IACjB;AAAA,IAEA,UAAA;AAAA,MAAA,oBAAC,cAAA,EAAa,IAAI,EAAE,UAAU,GAAA,GAC3B,UAAA,YAAY,oBAAC,WAAA,EAAU,OAAM,WAAU,UAAS,SAAQ,GAC3D;AAAA,MACC,eAAe,aAAa,MAAM,IAAI,OAAO;AAAA,IAAA;AAAA,EAAA;AAAA,EARzC,OAAO,OAAO,KAAK;AAS1B;AC6FK,SAAS,OAAO,QAAqB;AACxC,SAAO;AACX;AACA,OAAO,cAAc;AAGd,SAAS,OACZ,OACF;AACE,QA6BI,YA5BA;AAAA;AAAA,IACA,UAAU,CAAA;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,IACX,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR;AAAA,IACA,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,MAEA,IADG,iBACH,IADG;AAAA,IA3BH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIJ,QAAM,QAAQ,SAAA;AACd,QAAM,WAAW,cAAc,UAAU,QAAQ,KAAK;AAEtD,QAAM,YAAY,aAAa,QAAS,KAAa,YAAY;AAGjE,QAAM,eAAwC,QAAQ,MAAM;;AACxD,QAAIA,eAAM,SAAS,MAAM,QAAQ,MAAM,GAAG;AACtC,YAAM,QAAQA,eAAM,SAAS,KAAK,QAAQ;AAC1C,UAAI,eAAe,KAAK,OAAMC,MAAA,MAAM,SAAN,gBAAAA,IAAoB,iBAAgB,UAAU;AACxE,eAAQ,MAAM,MAAsB;AAAA,MACxC;AAAA,IACJ;AACA,WAAO;AAAA,EACX,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAyB,CAAA,CAAE;AACnE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,mBAAmB,OAAsB,IAAI;AACnD,QAAM,iBAAiB,OAAyB,IAAI;AAGpD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,UAAU,OAAO,gBAAgB;AACvC,QAAM,iBAAiB,UAAU,eAAe;AAEhD,YAAU,MAAM;;AACZ,QAAI,CAAC,QAAS;AAEd,QAAI,iBAAiB,QAAS,cAAa,iBAAiB,OAAO;AAEnE,QAAI,QAAQ;AACR,iBAAW,IAAI;AACf,uBAAiB,UAAU,OAAO,WAAW,MAAM;AAC/C,oBAAa,MAAM,EACd,KAAK,eAAe,EACpB,QAAQ,MAAM;;AACX,qBAAW,KAAK;AAChB,WAAAA,MAAA,eAAe,YAAf,gBAAAA,IAAwB;AAAA,QAC5B,CAAC;AAAA,MACT,GAAG,eAAe;AAAA,IACtB,OAAO;AACH,sBAAgB,CAAA,CAAE;AAClB,iBAAW,KAAK;AAChB,OAAAA,MAAA,eAAe,YAAf,gBAAAA,IAAwB;AAAA,IAC5B;AAAA,EACJ,GAAG,CAAC,QAAQ,SAAS,aAAa,eAAe,CAAC;AAElD,QAAM,kBAAkB,QAAQ,MAAM;AAClC,QAAI,QAAS,QAAO;AACpB,QAAI,CAAC,WAAY,QAAO;AACxB,WAAO,qBAAqB,gBAAgB,MAAM;AAAA,EACtD,GAAG,CAAC,QAAQ,YAAY,gBAAgB,OAAO,CAAC;AAEhD,QAAM,iBAAiB,QAAQ,MAAM,aAAa,eAAe,GAAG,CAAC,eAAe,CAAC;AAGrF,QAAM,YAAY,QAAQ,MAAM;AAC5B,UAAM,QAA2B,CAAA;AAEjC,QAAI,cAAc,SAAS;AACvB,YAAM;AAAA,QACF;AAAA,UAAC;AAAA,UAAA;AAAA,YAEG,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU;AAAA,UAAA;AAAA,UAHN;AAAA,QAAA;AAAA,MAIR;AAAA,IAER;AAEA,UAAM,YAAY,sBAAsB,cAAc;AAEtD,QAAI,SAAS;AACT,YAAM;AAAA,QACF,oBAAC,UAAA,EAA+B,UAAQ,MACpC,+BAAC,KAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,KACnD,UAAA;AAAA,UAAA,oBAAC,kBAAA,EAAiB,MAAM,GAAA,CAAI;AAAA,UAC5B,oBAAC,cAAY,UAAA,eAAA,CAAe;AAAA,QAAA,EAAA,CAChC,KAJU,iBAKd;AAAA,MAAA;AAAA,IAER,WAAW,WAAW;AAClB,YAAM;AAAA,QACF,oBAAC,YAAkC,UAAQ,MACvC,8BAAC,YAAA,EAAY,UAAA,iBAAA,CAAiB,KADpB,oBAEd;AAAA,MAAA;AAAA,IAER,OAAO;AACH,aAAO,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC,OAAO,IAAI,MAAM;AACtD,YAAI,UAAU,aAAa;AACvB,gBAAM;AAAA,YACF,oBAAC,eAAA,EAA0B,eAAa,MACnC,mBADe,KAEpB;AAAA,UAAA;AAAA,QAER;AACA,aAAK,QAAQ,CAAC,QAAQ;;AAClB,gBAAM,aAAa,YACZA,MAAA,+BAAgC,SAAS,IAAI,WAA7C,OAAAA,MAAiE,QAClE,UAAU,IAAI;AAEpB,gBAAM;AAAA,YACF,qBAAqB;AAAA,cACjB,QAAQ;AAAA,cACR,UAAU;AAAA,cACV;AAAA,YAAA,CACH;AAAA,UAAA;AAAA,QAET,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AACA,WAAO;AAAA,EACX,GAAG;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACH;AAGD,QAAM,uBAAuB,CACzB,OACA,gBACC;AACD,UAAM,WAAW,MAAM,OAAO;AAC9B,QAAI,WAAW;AACX,iDAAc;AAAA,IAClB,OAAO;AACF,2CAAgD;AAAA,IACrD;AAAA,EACJ;AAGA,QAAM,WAAW;AAAA,IACb,cAAc,cAAc,aAAa;AAAA,IACzC,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,CAAC,EAAE;AAAA,EAAA;AAIpC,QAAM,eAAe,CACjB,aACA,gBACA,QACA,UACA,UACA,kBACC;AACD,UAAM,aAAa,8BAAY;AAC/B,UAAM,kBAAkB,wCAAiB;AAEzC,UAAM,eACF,kBAAkB,aACd,oBAAC,iBAAc,OAAc,wBAE5B,eAAA,CAAA,CAAc;AAGvB,UAAM,kBAAkB,qBAAqB,aAAa,QAAQ;AAClE,UAAM,UAAU,mBAAmB,iBAAiB,QAAQ;AAG5D,UAAM,eAAe,CAAC,WAAW,aAAa;AAE9C,UAAM,2BAA2B,YAAY,aAAa,WAAW,CAAC,CAAC;AAEvE,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAS;AAAA,QACT;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,IAAI;AAAA,QAEH,UAAA;AAAA,UAAA,SAAS,oBAAC,YAAA,EAAW,QAAQ,cAAe,UAAA,OAAM;AAAA,UACnD;AAAA,YAACC;AAAAA,YAAA;AAAA,cACG,OAAO;AAAA,cACP;AAAA,cACA;AAAA,cACA,UAAU;AAAA,cACV,QAAQ,CAAC,MAAM;AACX,6BAAa,KAAK;AAClB,iDAAS;AAAA,cACb;AAAA,cACA,SAAS,MAAM,aAAa,IAAI;AAAA,cAChC,QAAQ,MAAM,UAAU,IAAI;AAAA,cAC5B,SAAS,MAAM,UAAU,KAAK;AAAA,cAC9B,aAAa,CAAC,aACV;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG;AAAA,kBACA,SAAS;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,eAAgB,wBAAsB,CAAA;AAAA,kBACtC,cAAc,CAAC,SACV,qCAA8C;AAAA,gBAAI;AAAA,cAAA;AAAA,cAI/D,cAAc;AAAA,cACd,OAAO;AAAA,cACP;AAAA,cACA,WAAW;AAAA,gBACP,YAAY;AAAA,kBACR,OAAO,EAAE,WAAW,SAAA;AAAA,gBAAS;AAAA,cACjC;AAAA,cAEJ;AAAA,eACK,OApCR;AAAA,cAsCI,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAEJ,mBAAmB,oBAAC,gBAAA,EAAgB,UAAA,gBAAA,CAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGjE;AAGA,MAAI,WAAW;AACX,UAAM,WAAW;AACjB,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAM,SAAS;AAAA,QACf,SAAS,SAAS;AAAA,QAClB,OAAO,SAAS;AAAA,QAChB,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,OAAO,WAAA,EAAW,MAC9C;AAAA,UACI,MAAM;AAAA,UACN,CAAC,MAA8B,qBAAqB,GAAG,MAAM,QAAQ;AAAA,UACrE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,CAAC,CAAC;AAAA,UACF,yCAAY;AAAA,QAAA;AAAA,MAChB;AAAA,IAAA;AAAA,EAIhB;AAEA,SAAO,aAAa,OAAO,CAAC,MAA8B,qBAAqB,CAAC,CAAC;AACrF;"}
1
+ {"version":3,"file":"Select.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,85 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  require('../../styles.css');;/* empty css */
4
- const jsxRuntime = require("react/jsx-runtime");
5
- const React = require("react");
6
- const material = require("@mui/material");
7
- const Stat = ({
8
- stat,
9
- stat2,
10
- label,
11
- color = "#1469B8",
12
- chipColor = "#1469B8",
13
- chips = [],
14
- simple = false,
15
- chip = false,
16
- chipList = false,
17
- children,
18
- statDisplay
19
- }) => {
20
- const selectedTemplate = React.useMemo(() => {
21
- if (simple) return "simple";
22
- if (chip) return "chip";
23
- if (chipList) return "chipList";
24
- return "default";
25
- }, [simple, chip, chipList]);
26
- const renderStatDisplay = () => {
27
- return statDisplay ? statDisplay(stat) : /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h6", children: stat });
28
- };
29
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30
- selectedTemplate === "default" && /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "stat", children: [
31
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "h4", "data-testid": "selection-template-option-outlet", children: renderStatDisplay() }),
32
- /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { className: "stat__label", display: "flex", alignItems: "center", gap: 1, children: [
33
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
34
- /* @__PURE__ */ jsxRuntime.jsx(
35
- material.Box,
36
- {
37
- width: 40,
38
- height: 4,
39
- bgcolor: color,
40
- "data-testid": "stat-border",
41
- borderRadius: 2
42
- }
43
- )
44
- ] })
45
- ] }),
46
- selectedTemplate === "simple" && /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
47
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
48
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { "data-testid": "selection-template-option-outlet", children: renderStatDisplay() }),
49
- stat2 && /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { children: stat2 })
50
- ] }),
51
- selectedTemplate === "chip" && /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
52
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
53
- /* @__PURE__ */ jsxRuntime.jsx(
54
- material.Chip,
55
- {
56
- "data-testid": "chip-template-option-outlet",
57
- label: renderStatDisplay(),
58
- sx: {
59
- backgroundColor: chipColor,
60
- color: "#fff",
61
- fontWeight: "bold"
62
- }
63
- }
64
- )
65
- ] }),
66
- selectedTemplate === "chipList" && /* @__PURE__ */ jsxRuntime.jsxs(material.Stack, { direction: "row", spacing: 2, alignItems: "center", children: [
67
- /* @__PURE__ */ jsxRuntime.jsx(material.Typography, { variant: "body1", children: label }),
68
- /* @__PURE__ */ jsxRuntime.jsx(material.Stack, { direction: "row", spacing: 1, children: chips.map((chip2, i) => /* @__PURE__ */ jsxRuntime.jsx(
69
- material.Chip,
70
- {
71
- label: chip2.stat,
72
- sx: {
73
- backgroundColor: chip2.chipColor,
74
- color: "#fff",
75
- fontWeight: "bold"
76
- }
77
- },
78
- i
79
- )) })
80
- ] }),
81
- children
82
- ] });
83
- };
84
- exports.Stat = Stat;
4
+ const Stat = require("../../Stat-BUcFCGrz.cjs");
5
+ exports.Stat = Stat.Stat;
85
6
  //# sourceMappingURL=Stat.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stat.cjs","sources":["../../../src/components/Stat/Stat.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Chip, Stack, Typography, Box } from '@mui/material';\n\nexport interface StatChip {\n stat: any;\n chipColor: string;\n}\n\nexport interface StatProps {\n stat: any; // Replace 'any' with the actual type of 'stat'\n stat2?: any; // Replace 'any' with the actual type of'stat2'\n label: string; // Replace 'any' with the actual type of'label'\n color?: string;\n chipColor?: string;\n chips?: StatChip[]; // Replace 'any' with the actual type of'chips'\n simple?: boolean;\n chip?: boolean;\n chipList?: boolean;\n children?: React.ReactNode;\n statDisplay?: (stat: any) => React.ReactNode;\n}\n\nexport const Stat: React.FC<StatProps> = ({\n stat,\n stat2,\n label,\n color = '#1469B8',\n chipColor = '#1469B8',\n chips = [],\n simple = false,\n chip = false,\n chipList = false,\n children,\n statDisplay,\n}) => {\n const selectedTemplate = useMemo(() => {\n if (simple) return 'simple';\n if (chip) return 'chip';\n if (chipList) return 'chipList';\n return 'default';\n }, [simple, chip, chipList]);\n\n const renderStatDisplay = () => {\n return statDisplay ? statDisplay(stat) : <Typography variant=\"h6\">{stat}</Typography>;\n };\n\n return (\n <>\n {selectedTemplate === 'default' && (\n <Box className=\"stat\">\n <Typography variant=\"h4\" data-testid=\"selection-template-option-outlet\">\n {renderStatDisplay()}\n </Typography>\n <Box className=\"stat__label\" display=\"flex\" alignItems=\"center\" gap={1}>\n <Typography variant=\"body1\">{label}</Typography>\n <Box\n width={40}\n height={4}\n bgcolor={color}\n data-testid=\"stat-border\"\n borderRadius={2}\n />\n </Box>\n </Box>\n )}\n\n {selectedTemplate === 'simple' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Typography data-testid=\"selection-template-option-outlet\">\n {renderStatDisplay()}\n </Typography>\n {stat2 && <Typography>{stat2}</Typography>}\n </Stack>\n )}\n\n {selectedTemplate === 'chip' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Chip\n data-testid=\"chip-template-option-outlet\"\n label={renderStatDisplay()}\n sx={{\n backgroundColor: chipColor,\n color: '#fff',\n fontWeight: 'bold',\n }}\n />\n </Stack>\n )}\n\n {selectedTemplate === 'chipList' && (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <Typography variant=\"body1\">{label}</Typography>\n <Stack direction=\"row\" spacing={1}>\n {chips.map((chip, i) => (\n <Chip\n key={i}\n label={chip.stat}\n sx={{\n backgroundColor: chip.chipColor,\n color: '#fff',\n fontWeight: 'bold',\n }}\n />\n ))}\n </Stack>\n </Stack>\n )}\n\n {/* Content projection (similar to ng-content) */}\n {children}\n </>\n );\n};\n\nexport default Stat;"],"names":["useMemo","Typography","jsxs","Fragment","Box","jsx","Stack","Chip","chip"],"mappings":";;;;;;AAsBO,MAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,QAAQ,CAAA;AAAA,EACR,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AACJ,QAAM,mBAAmBA,MAAAA,QAAQ,MAAM;AACrC,QAAI,OAAQ,QAAO;AACnB,QAAI,KAAM,QAAO;AACjB,QAAI,SAAU,QAAO;AACrB,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,MAAM,QAAQ,CAAC;AAE3B,QAAM,oBAAoB,MAAM;AAC9B,WAAO,cAAc,YAAY,IAAI,mCAAKC,qBAAA,EAAW,SAAQ,MAAM,UAAA,KAAA,CAAK;AAAA,EAC1E;AAEA,SACEC,2BAAAA,KAAAC,qBAAA,EACG,UAAA;AAAA,IAAA,qBAAqB,aACpBD,gCAACE,SAAAA,KAAA,EAAI,WAAU,QACb,UAAA;AAAA,MAAAC,+BAACJ,SAAAA,cAAW,SAAQ,MAAK,eAAY,oCAClC,+BACH;AAAA,MACAC,2BAAAA,KAACE,SAAAA,OAAI,WAAU,eAAc,SAAQ,QAAO,YAAW,UAAS,KAAK,GACnE,UAAA;AAAA,QAAAC,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,QACnCI,2BAAAA;AAAAA,UAACD,SAAAA;AAAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,eAAY;AAAA,YACZ,cAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAChB,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IAGD,qBAAqB,YACpBF,gCAACI,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAAD,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnCI,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,eAAY,oCACrB,+BACH;AAAA,MACC,SAASI,2BAAAA,IAACJ,SAAAA,YAAA,EAAY,UAAA,MAAA,CAAM;AAAA,IAAA,GAC/B;AAAA,IAGD,qBAAqB,UACpBC,gCAACI,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAAD,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnCI,2BAAAA;AAAAA,QAACE,SAAAA;AAAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,OAAO,kBAAA;AAAA,UACP,IAAI;AAAA,YACF,iBAAiB;AAAA,YACjB,OAAO;AAAA,YACP,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAGD,qBAAqB,cACpBL,gCAACI,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C,UAAA;AAAA,MAAAD,2BAAAA,IAACJ,SAAAA,YAAA,EAAW,SAAQ,SAAS,UAAA,OAAM;AAAA,MACnCI,2BAAAA,IAACC,SAAAA,OAAA,EAAM,WAAU,OAAM,SAAS,GAC7B,UAAA,MAAM,IAAI,CAACE,OAAM,MAChBH,2BAAAA;AAAAA,QAACE,SAAAA;AAAAA,QAAA;AAAA,UAEC,OAAOC,MAAK;AAAA,UACZ,IAAI;AAAA,YACF,iBAAiBA,MAAK;AAAA,YACtB,OAAO;AAAA,YACP,YAAY;AAAA,UAAA;AAAA,QACd;AAAA,QANK;AAAA,MAAA,CAQR,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IAID;AAAA,EAAA,GACH;AAEJ;;"}
1
+ {"version":3,"file":"Stat.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}