@soyfri/shared-library 1.5.0-beta.4 → 1.6.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Button-C17mExpd.cjs.map +1 -1
- package/Button-UkkP-bNw.js.map +1 -1
- package/components/ActionMenu/ActionMenu.cjs +107 -0
- package/components/ActionMenu/ActionMenu.cjs.map +1 -0
- package/components/ActionMenu/ActionMenu.d.ts +44 -0
- package/components/ActionMenu/ActionMenu.js +107 -0
- package/components/ActionMenu/ActionMenu.js.map +1 -0
- package/components/ActionMenu/index.d.ts +2 -0
- package/components/ActionMenu.d.ts +6 -0
- package/components/AppBar/AppBar.cjs +129 -0
- package/components/AppBar/AppBar.cjs.map +1 -0
- package/components/AppBar/AppBar.d.ts +55 -0
- package/components/AppBar/AppBar.js +129 -0
- package/components/AppBar/AppBar.js.map +1 -0
- package/components/AppBar/AppBar.sx.d.ts +12 -0
- package/components/AppBar/AppBarContext.d.ts +18 -0
- package/components/AppBar/AppBarMenuToggle.d.ts +39 -0
- package/components/AppBar/index.d.ts +6 -0
- package/components/AppBar.d.ts +6 -0
- package/components/Autocomplete/Autocomplete.cjs +263 -82
- package/components/Autocomplete/Autocomplete.cjs.map +1 -1
- package/components/Autocomplete/Autocomplete.d.ts +71 -13
- package/components/Autocomplete/Autocomplete.definitions.d.ts +7 -0
- package/components/Autocomplete/Autocomplete.helpers.d.ts +22 -0
- package/components/Autocomplete/Autocomplete.js +264 -83
- package/components/Autocomplete/Autocomplete.js.map +1 -1
- package/components/Autocomplete/Autocomplete.sx.d.ts +7 -0
- package/components/Autocomplete/_parts/AutocompleteChips.d.ts +20 -0
- package/components/Autocomplete/_parts/AutocompleteLoader.d.ts +9 -0
- package/components/Autocomplete/_parts/AutocompleteOption.d.ts +16 -0
- package/components/Autocomplete/index.d.ts +2 -1
- package/components/Autocomplete.d.ts +4 -0
- package/components/Avatar/Avatar.cjs +117 -81
- package/components/Avatar/Avatar.cjs.map +1 -1
- package/components/Avatar/Avatar.d.ts +16 -2
- package/components/Avatar/Avatar.definitions.d.ts +11 -0
- package/components/Avatar/Avatar.js +118 -82
- package/components/Avatar/Avatar.js.map +1 -1
- package/components/Avatar/index.d.ts +1 -0
- package/components/Button/Button.d.ts +5 -5
- package/components/Button/index.d.ts +1 -0
- package/components/Card/Card.cjs +78 -7
- package/components/Card/Card.cjs.map +1 -1
- package/components/Card/Card.d.ts +31 -8
- package/components/Card/Card.js +79 -8
- package/components/Card/Card.js.map +1 -1
- package/components/Card/Card.sx.d.ts +14 -0
- package/components/Card/index.d.ts +4 -1
- package/components/Card.d.ts +4 -0
- package/components/Checkbox/Checkbox.cjs +189 -0
- package/components/Checkbox/Checkbox.cjs.map +1 -0
- package/components/Checkbox/Checkbox.d.ts +55 -0
- package/components/Checkbox/Checkbox.js +189 -0
- package/components/Checkbox/Checkbox.js.map +1 -0
- package/components/Checkbox/Checkbox.sx.d.ts +13 -0
- package/components/Checkbox/index.d.ts +2 -0
- package/components/Checkbox.d.ts +6 -0
- package/components/Chip/Chip.cjs +2 -1
- package/components/Chip/Chip.cjs.map +1 -1
- package/components/Chip/Chip.js +2 -1
- package/components/Chip/Chip.js.map +1 -1
- package/components/Chip/index.d.ts +2 -1
- package/components/Chip.d.ts +4 -0
- package/components/DatePicker/DatePicker.cjs +178 -3
- package/components/DatePicker/DatePicker.cjs.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +35 -9
- package/components/DatePicker/DatePicker.definitions.d.ts +1 -0
- package/components/DatePicker/DatePicker.helpers.d.ts +7 -0
- package/components/DatePicker/DatePicker.js +177 -2
- package/components/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.sx.d.ts +9 -0
- package/components/DatePicker/index.d.ts +2 -1
- package/components/DatePicker.d.ts +4 -0
- package/components/DateTimePicker/DateTimePicker.cjs +121 -131
- package/components/DateTimePicker/DateTimePicker.cjs.map +1 -1
- package/components/DateTimePicker/DateTimePicker.d.ts +41 -12
- package/components/DateTimePicker/DateTimePicker.definitions.d.ts +3 -0
- package/components/DateTimePicker/DateTimePicker.helpers.d.ts +13 -0
- package/components/DateTimePicker/DateTimePicker.js +121 -131
- package/components/DateTimePicker/DateTimePicker.js.map +1 -1
- package/components/DateTimePicker/DateTimePicker.sx.d.ts +7 -0
- package/components/DateTimePicker/index.d.ts +2 -1
- package/components/DateTimePicker.d.ts +4 -0
- package/components/Drawer/Drawer.cjs +272 -0
- package/components/Drawer/Drawer.cjs.map +1 -0
- package/components/Drawer/Drawer.d.ts +58 -0
- package/components/Drawer/Drawer.js +272 -0
- package/components/Drawer/Drawer.js.map +1 -0
- package/components/Drawer/Drawer.sx.d.ts +23 -0
- package/components/Drawer/DrawerContext.d.ts +18 -0
- package/components/Drawer/DrawerItem.d.ts +40 -0
- package/components/Drawer/index.d.ts +6 -0
- package/components/Drawer.d.ts +6 -0
- package/components/Gallery/Gallery.cjs +154 -79
- package/components/Gallery/Gallery.cjs.map +1 -1
- package/components/Gallery/Gallery.d.ts +25 -9
- package/components/Gallery/Gallery.js +154 -79
- package/components/Gallery/Gallery.js.map +1 -1
- package/components/Gallery/GalleryLightbox.d.ts +6 -10
- package/components/Gallery/GalleryMain.d.ts +3 -7
- package/components/Gallery/GalleryThumbnails.d.ts +7 -11
- package/components/Gallery/index.d.ts +2 -1
- package/components/Gallery.d.ts +4 -0
- package/components/Icon/Icon.cjs +49 -10
- package/components/Icon/Icon.cjs.map +1 -1
- package/components/Icon/Icon.d.ts +29 -2
- package/components/Icon/Icon.js +49 -10
- package/components/Icon/Icon.js.map +1 -1
- package/components/Icon/index.d.ts +2 -1
- package/components/Icon.d.ts +4 -0
- package/components/Input/Input.cjs +186 -3
- package/components/Input/Input.cjs.map +1 -1
- package/components/Input/Input.d.ts +29 -17
- package/components/Input/Input.definitions.d.ts +6 -2
- package/components/Input/Input.helpers.d.ts +14 -0
- package/components/Input/Input.js +185 -2
- package/components/Input/Input.js.map +1 -1
- package/components/Input/Input.sx.d.ts +8 -0
- package/components/Input/index.d.ts +2 -1
- package/components/Input.d.ts +4 -0
- package/components/InputGroup/InputGroup.cjs +107 -93
- package/components/InputGroup/InputGroup.cjs.map +1 -1
- package/components/InputGroup/InputGroup.d.ts +38 -2
- package/components/InputGroup/InputGroup.definitions.d.ts +6 -0
- package/components/InputGroup/InputGroup.js +109 -95
- package/components/InputGroup/InputGroup.js.map +1 -1
- package/components/InputGroup/index.d.ts +2 -1
- package/components/InputGroup.d.ts +4 -0
- package/components/Modal/Modal.cjs +287 -148
- package/components/Modal/Modal.cjs.map +1 -1
- package/components/Modal/Modal.d.ts +57 -6
- package/components/Modal/Modal.js +289 -150
- package/components/Modal/Modal.js.map +1 -1
- package/components/Modal/ModalBody.d.ts +6 -1
- package/components/Modal/ModalFooter.d.ts +12 -4
- package/components/Modal/ModalHeader.d.ts +6 -1
- package/components/Modal/index.d.ts +8 -1
- package/components/Modal.d.ts +4 -0
- package/components/RadioGroup/RadioGroup.cjs +204 -0
- package/components/RadioGroup/RadioGroup.cjs.map +1 -0
- package/components/RadioGroup/RadioGroup.d.ts +59 -0
- package/components/RadioGroup/RadioGroup.definitions.d.ts +6 -0
- package/components/RadioGroup/RadioGroup.js +204 -0
- package/components/RadioGroup/RadioGroup.js.map +1 -0
- package/components/RadioGroup/RadioGroup.sx.d.ts +20 -0
- package/components/RadioGroup/index.d.ts +2 -0
- package/components/RadioGroup.d.ts +6 -0
- package/components/Select/Select.cjs +311 -4
- package/components/Select/Select.cjs.map +1 -1
- package/components/Select/Select.d.ts +62 -27
- package/components/Select/Select.helpers.d.ts +15 -0
- package/components/Select/Select.js +310 -3
- package/components/Select/Select.js.map +1 -1
- package/components/Select/Select.sx.d.ts +7 -0
- package/components/Select/_parts/SelectMenuItem.d.ts +20 -0
- package/components/Select/index.d.ts +2 -1
- package/components/Select.d.ts +4 -0
- package/components/Stat/Stat.cjs +2 -2
- package/components/Stat/Stat.cjs.map +1 -1
- package/components/Stat/Stat.js +2 -2
- package/components/Stat/Stat.js.map +1 -1
- package/components/Stat/index.d.ts +2 -1
- package/components/Stat.d.ts +4 -0
- package/components/StatusMessage/StatusMessage.cjs +66 -55
- package/components/StatusMessage/StatusMessage.cjs.map +1 -1
- package/components/StatusMessage/StatusMessage.d.ts +20 -36
- package/components/StatusMessage/StatusMessage.js +68 -57
- package/components/StatusMessage/StatusMessage.js.map +1 -1
- package/components/StatusMessage/index.d.ts +2 -1
- package/components/StatusMessage.d.ts +4 -0
- package/components/Stepper/Stepper.cjs +285 -29
- package/components/Stepper/Stepper.cjs.map +1 -1
- package/components/Stepper/Stepper.d.ts +13 -7
- package/components/Stepper/Stepper.js +287 -31
- package/components/Stepper/Stepper.js.map +1 -1
- package/components/Stepper/StepperContext.d.ts +73 -0
- package/components/Stepper/_hooks/useHorizontalScroll.d.ts +19 -0
- package/components/Stepper/_parts/StepperScrollArrow.d.ts +19 -0
- package/components/Stepper/index.d.ts +6 -2
- package/components/Stepper.d.ts +4 -0
- package/components/Switch/Switch.cjs +184 -0
- package/components/Switch/Switch.cjs.map +1 -0
- package/components/Switch/Switch.d.ts +48 -0
- package/components/Switch/Switch.definitions.d.ts +7 -0
- package/components/Switch/Switch.js +184 -0
- package/components/Switch/Switch.js.map +1 -0
- package/components/Switch/Switch.sx.d.ts +22 -0
- package/components/Switch/Switch.types.d.ts +1 -0
- package/components/Switch/index.d.ts +2 -0
- package/components/Switch.d.ts +6 -0
- package/components/Tabs/Tabs.cjs +45 -29
- package/components/Tabs/Tabs.cjs.map +1 -1
- package/components/Tabs/Tabs.d.ts +21 -16
- package/components/Tabs/Tabs.js +46 -30
- package/components/Tabs/Tabs.js.map +1 -1
- package/components/Tabs/index.d.ts +4 -2
- package/components/Tabs.d.ts +4 -0
- package/components/Timeline/Timeline.cjs +3 -2
- package/components/Timeline/Timeline.cjs.map +1 -1
- package/components/Timeline/Timeline.d.ts +4 -8
- package/components/Timeline/Timeline.js +3 -2
- package/components/Timeline/Timeline.js.map +1 -1
- package/components/Timeline/index.d.ts +4 -2
- package/components/Timeline.d.ts +4 -0
- package/components/_shared/formField.sx.d.ts +33 -0
- package/components/_shared/mergeSx.d.ts +7 -0
- package/components/_shared/resolvePreset.d.ts +18 -0
- package/formField.sx-8_QRnKxv.js +68 -0
- package/formField.sx-8_QRnKxv.js.map +1 -0
- package/formField.sx-BAX7KwMR.cjs +67 -0
- package/formField.sx-BAX7KwMR.cjs.map +1 -0
- package/index.cjs +144 -1
- package/index.cjs.map +1 -1
- package/index.d.ts +4 -0
- package/index.js +49 -2
- package/index.js.map +1 -1
- package/mergeSx-BXoNZjB_.js +10 -0
- package/mergeSx-BXoNZjB_.js.map +1 -0
- package/mergeSx-Dbccoo_H.cjs +9 -0
- package/mergeSx-Dbccoo_H.cjs.map +1 -0
- package/mui.d.ts +7 -0
- package/package.json +31 -1
- package/resolvePreset-B-IB0ehH.js +15 -0
- package/resolvePreset-B-IB0ehH.js.map +1 -0
- package/resolvePreset-CT3kU-K2.cjs +14 -0
- package/resolvePreset-CT3kU-K2.cjs.map +1 -0
- package/theme/componentStyles.d.ts +32 -0
- package/theme/tokens.d.ts +28 -0
- package/tokens-BRrcP_p_.js +21 -0
- package/tokens-BRrcP_p_.js.map +1 -0
- package/tokens-jaWWNk39.cjs +20 -0
- package/tokens-jaWWNk39.cjs.map +1 -0
- package/utils/index.d.ts +2 -0
- package/utils/scrollToTop.d.ts +28 -0
- package/DatePicker-BSNboVhN.js +0 -201
- package/DatePicker-BSNboVhN.js.map +0 -1
- package/DatePicker-BoqxWAhj.cjs +0 -200
- package/DatePicker-BoqxWAhj.cjs.map +0 -1
- package/Input-DFHs7cJ_.js +0 -171
- package/Input-DFHs7cJ_.js.map +0 -1
- package/Input-c8MwNNPg.cjs +0 -170
- package/Input-c8MwNNPg.cjs.map +0 -1
- package/Select-BO2N56sm.cjs +0 -411
- package/Select-BO2N56sm.cjs.map +0 -1
- package/Select-BcLkyHSE.js +0 -412
- package/Select-BcLkyHSE.js.map +0 -1
- package/components/Select/Select.definitions.d.ts +0 -14
|
@@ -18,107 +18,143 @@ var __spreadValues = (a, b) => {
|
|
|
18
18
|
};
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
20
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
21
|
-
import {
|
|
21
|
+
import React__default, { useState } from "react";
|
|
22
|
+
import { Box, Typography, Avatar as Avatar$1, Tooltip } from "@mui/material";
|
|
22
23
|
import AccountCircleIcon from "@mui/icons-material/AccountCircle";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
const sizeMap = {
|
|
25
|
+
sm: { px: 32, border: 2, font: 14, overlap: 8 },
|
|
26
|
+
md: { px: 40, border: 2, font: 16, overlap: 10 },
|
|
27
|
+
lg: { px: 56, border: 3, font: 22, overlap: 14 },
|
|
28
|
+
xl: { px: 96, border: 4, font: 36, overlap: 20 }
|
|
29
|
+
};
|
|
30
|
+
const resolveSize = (size) => {
|
|
31
|
+
if (typeof size === "number") {
|
|
32
|
+
return {
|
|
33
|
+
px: size,
|
|
34
|
+
border: Math.max(2, Math.round(size * 0.05)),
|
|
35
|
+
font: Math.round(size * 0.4),
|
|
36
|
+
overlap: Math.round(size * 0.25)
|
|
37
|
+
};
|
|
34
38
|
}
|
|
39
|
+
return sizeMap[size];
|
|
40
|
+
};
|
|
41
|
+
const mergeSx = (base, extra) => {
|
|
42
|
+
if (!extra) return base;
|
|
43
|
+
const baseArr = Array.isArray(base) ? base : [base];
|
|
44
|
+
const extraArr = Array.isArray(extra) ? extra : [extra];
|
|
45
|
+
return [...baseArr, ...extraArr];
|
|
35
46
|
};
|
|
36
47
|
const Avatar = ({
|
|
37
48
|
items,
|
|
38
49
|
type,
|
|
39
50
|
displayedAvatars = 4,
|
|
40
51
|
size = "sm",
|
|
41
|
-
trustUrls = false,
|
|
42
52
|
showText = true,
|
|
43
|
-
showTooltip = false
|
|
53
|
+
showTooltip = false,
|
|
54
|
+
sx,
|
|
55
|
+
avatarSx,
|
|
56
|
+
className,
|
|
57
|
+
overlap
|
|
44
58
|
}) => {
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
59
|
+
var _a;
|
|
60
|
+
const [failedUrls, setFailedUrls] = useState(/* @__PURE__ */ new Set());
|
|
61
|
+
const handleImageError = (url) => {
|
|
62
|
+
setFailedUrls((prev) => {
|
|
63
|
+
if (prev.has(url)) return prev;
|
|
64
|
+
const next = new Set(prev);
|
|
65
|
+
next.add(url);
|
|
66
|
+
return next;
|
|
67
|
+
});
|
|
48
68
|
};
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
69
|
+
if (!items || items.length === 0) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const s = resolveSize(size);
|
|
73
|
+
const effectiveOverlap = overlap != null ? overlap : s.overlap;
|
|
74
|
+
const visibleItems = items.slice(0, displayedAvatars);
|
|
75
|
+
const baseAvatarSx = {
|
|
76
|
+
width: s.px,
|
|
77
|
+
height: s.px,
|
|
78
|
+
fontSize: s.font,
|
|
79
|
+
fontWeight: 700,
|
|
80
|
+
border: (theme) => `${s.border}px solid ${theme.palette.background.paper}`,
|
|
81
|
+
boxSizing: "content-box"
|
|
82
|
+
};
|
|
83
|
+
const renderSingleAvatar = (item, i) => {
|
|
84
|
+
var _a2, _b, _c, _d, _e;
|
|
85
|
+
const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);
|
|
86
|
+
const showBadgeFallback = !!item.badge;
|
|
87
|
+
const itemKey = (_c = item.imageUrl) != null ? _c : `${(_a2 = item.text) != null ? _a2 : ""}-${(_b = item.badge) != null ? _b : ""}-${i}`;
|
|
88
|
+
const itemSx = __spreadProps(__spreadValues({
|
|
89
|
+
bgcolor: (_d = item.backgroundColor) != null ? _d : "action.selected",
|
|
90
|
+
color: (_e = item.color) != null ? _e : "text.secondary"
|
|
91
|
+
}, i > 0 && { marginLeft: `-${effectiveOverlap}px` }), {
|
|
92
|
+
zIndex: visibleItems.length - i
|
|
93
|
+
});
|
|
94
|
+
const finalSx = mergeSx(mergeSx(baseAvatarSx, itemSx), avatarSx);
|
|
95
|
+
const avatarEl = /* @__PURE__ */ jsx(
|
|
96
|
+
Avatar$1,
|
|
97
|
+
{
|
|
98
|
+
alt: item.text || "User avatar",
|
|
99
|
+
src: hasImage ? item.imageUrl : void 0,
|
|
100
|
+
imgProps: {
|
|
101
|
+
onError: () => {
|
|
102
|
+
if (item.imageUrl) handleImageError(item.imageUrl);
|
|
73
103
|
}
|
|
74
|
-
|
|
104
|
+
},
|
|
105
|
+
sx: finalSx,
|
|
106
|
+
children: !hasImage && showBadgeFallback ? /* @__PURE__ */ jsx("span", { "aria-label": item.text, children: item.badge }) : !hasImage ? /* @__PURE__ */ jsx(
|
|
75
107
|
AccountCircleIcon,
|
|
76
108
|
{
|
|
77
|
-
"data-testid": "icon",
|
|
78
109
|
"aria-label": item.text,
|
|
79
|
-
sx:
|
|
80
|
-
fontSize: style.icon.fontSize,
|
|
81
|
-
marginTop: style.icon.marginTop,
|
|
82
|
-
borderRadius: "9999px",
|
|
83
|
-
backgroundColor: "#fff",
|
|
84
|
-
color: item.color || "#667688"
|
|
85
|
-
})
|
|
110
|
+
sx: { width: "100%", height: "100%" }
|
|
86
111
|
}
|
|
87
|
-
) : null
|
|
88
|
-
|
|
89
|
-
|
|
112
|
+
) : null
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
if (showTooltip && item.text) {
|
|
116
|
+
return /* @__PURE__ */ jsx(Tooltip, { title: item.text, children: avatarEl }, itemKey);
|
|
117
|
+
}
|
|
118
|
+
return /* @__PURE__ */ jsx(React__default.Fragment, { children: avatarEl }, itemKey);
|
|
119
|
+
};
|
|
120
|
+
return /* @__PURE__ */ jsxs(
|
|
121
|
+
Box,
|
|
122
|
+
{
|
|
123
|
+
className,
|
|
124
|
+
sx: mergeSx(
|
|
125
|
+
{
|
|
126
|
+
display: "flex",
|
|
127
|
+
alignItems: "center",
|
|
128
|
+
lineHeight: 1,
|
|
129
|
+
width: "fit-content"
|
|
130
|
+
},
|
|
131
|
+
sx
|
|
132
|
+
),
|
|
133
|
+
children: [
|
|
134
|
+
/* @__PURE__ */ jsx(Box, { sx: { display: "flex", alignItems: "center" }, children: visibleItems.map((item, i) => renderSingleAvatar(item, i)) }),
|
|
135
|
+
showText && ((_a = items[0]) == null ? void 0 : _a.text) && /* @__PURE__ */ jsxs(
|
|
136
|
+
Typography,
|
|
90
137
|
{
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
color:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
children: item.badge
|
|
138
|
+
variant: "caption",
|
|
139
|
+
sx: {
|
|
140
|
+
ml: 1,
|
|
141
|
+
fontSize: "0.75rem",
|
|
142
|
+
fontWeight: 400,
|
|
143
|
+
color: "text.primary"
|
|
144
|
+
},
|
|
145
|
+
children: [
|
|
146
|
+
type && items.length === 1 && /* @__PURE__ */ jsxs(Box, { component: "span", sx: { mr: 0.5 }, children: [
|
|
147
|
+
type,
|
|
148
|
+
":"
|
|
149
|
+
] }),
|
|
150
|
+
items[0].text,
|
|
151
|
+
items.length > 1 && ` +${items.length - 1}`
|
|
152
|
+
]
|
|
107
153
|
}
|
|
108
154
|
)
|
|
109
|
-
]
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
showText && /* @__PURE__ */ jsxs("span", { "data-testid": "text", className: "ml-2 text-xs font-normal", children: [
|
|
113
|
-
type && items.length === 1 && /* @__PURE__ */ jsxs("span", { "data-testid": "type", children: [
|
|
114
|
-
type,
|
|
115
|
-
": "
|
|
116
|
-
] }),
|
|
117
|
-
items[0].text,
|
|
118
|
-
" ",
|
|
119
|
-
items.length > 2 && `+${items.length - 1}`
|
|
120
|
-
] })
|
|
121
|
-
] });
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
);
|
|
122
158
|
};
|
|
123
159
|
export {
|
|
124
160
|
Avatar
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import { Avatar as MuiAvatar
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Avatar as MuiAvatar,\n Box,\n Tooltip,\n Typography,\n type SxProps,\n type Theme,\n} from '@mui/material';\nimport AccountCircleIcon from '@mui/icons-material/AccountCircle';\n\nexport interface AvatarItem {\n text?: string;\n imageUrl?: string;\n badge?: string;\n color?: string;\n backgroundColor?: string;\n}\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl' | number;\n\nexport interface AvatarProps {\n type?: string;\n items: AvatarItem[];\n displayedAvatars?: number;\n size?: AvatarSize;\n showText?: boolean;\n showTooltip?: boolean;\n /**\n * sx aplicado al contenedor raíz.\n */\n sx?: SxProps<Theme>;\n /**\n * sx aplicado a cada MuiAvatar individual (se mergea sobre los defaults).\n */\n avatarSx?: SxProps<Theme>;\n className?: string;\n /**\n * Overlap (px) entre avatares cuando hay varios. Default depende del tamaño.\n */\n overlap?: number;\n}\n\n// Escala alineada con la escala de MUI (sm=32, md=40, lg=56, xl=96) con borde\n// proporcional para el efecto stacked.\nconst sizeMap: Record<\n Exclude<AvatarSize, number>,\n { px: number; border: number; font: number; overlap: number }\n> = {\n sm: { px: 32, border: 2, font: 14, overlap: 8 },\n md: { px: 40, border: 2, font: 16, overlap: 10 },\n lg: { px: 56, border: 3, font: 22, overlap: 14 },\n xl: { px: 96, border: 4, font: 36, overlap: 20 },\n};\n\nconst resolveSize = (size: AvatarSize) => {\n if (typeof size === 'number') {\n return {\n px: size,\n border: Math.max(2, Math.round(size * 0.05)),\n font: Math.round(size * 0.4),\n overlap: Math.round(size * 0.25),\n };\n }\n return sizeMap[size];\n};\n\nconst mergeSx = (base: SxProps<Theme>, extra?: SxProps<Theme>): SxProps<Theme> => {\n if (!extra) return base;\n const baseArr = Array.isArray(base) ? base : [base];\n const extraArr = Array.isArray(extra) ? extra : [extra];\n return [...baseArr, ...extraArr] as SxProps<Theme>;\n};\n\nexport const Avatar: React.FC<AvatarProps> = ({\n items,\n type,\n displayedAvatars = 4,\n size = 'sm',\n showText = true,\n showTooltip = false,\n sx,\n avatarSx,\n className,\n overlap,\n}) => {\n // Indexamos por URL (no por posición) para que cambios en `items` — reorder,\n // filtrado, paginación — no hagan que un avatar válido \"herede\" el estado de\n // imagen rota de un item anterior que estaba en la misma posición.\n const [failedUrls, setFailedUrls] = useState<Set<string>>(new Set());\n\n const handleImageError = (url: string) => {\n setFailedUrls((prev) => {\n if (prev.has(url)) return prev;\n const next = new Set(prev);\n next.add(url);\n return next;\n });\n };\n\n if (!items || items.length === 0) {\n return null;\n }\n\n const s = resolveSize(size);\n const effectiveOverlap = overlap ?? s.overlap;\n const visibleItems = items.slice(0, displayedAvatars);\n\n const baseAvatarSx: SxProps<Theme> = {\n width: s.px,\n height: s.px,\n fontSize: s.font,\n fontWeight: 700,\n border: (theme) => `${s.border}px solid ${theme.palette.background.paper}`,\n boxSizing: 'content-box',\n };\n\n const renderSingleAvatar = (item: AvatarItem, i: number) => {\n const hasImage = !!item.imageUrl && !failedUrls.has(item.imageUrl);\n const showBadgeFallback = !!item.badge;\n const itemKey = item.imageUrl ?? `${item.text ?? ''}-${item.badge ?? ''}-${i}`;\n\n // Defaults tirando al theme; item.color / item.backgroundColor tienen prioridad.\n const itemSx: SxProps<Theme> = {\n bgcolor: item.backgroundColor ?? 'action.selected',\n color: item.color ?? 'text.secondary',\n // Stacking manual: margen negativo al segundo avatar en adelante.\n ...(i > 0 && { marginLeft: `-${effectiveOverlap}px` }),\n zIndex: visibleItems.length - i,\n };\n\n const finalSx = mergeSx(mergeSx(baseAvatarSx, itemSx), avatarSx);\n\n const avatarEl = (\n <MuiAvatar\n alt={item.text || 'User avatar'}\n src={hasImage ? item.imageUrl : undefined}\n imgProps={{\n onError: () => {\n if (item.imageUrl) handleImageError(item.imageUrl);\n },\n }}\n sx={finalSx}\n >\n {!hasImage && showBadgeFallback ? (\n <span aria-label={item.text}>{item.badge}</span>\n ) : !hasImage ? (\n <AccountCircleIcon\n aria-label={item.text}\n sx={{ width: '100%', height: '100%' }}\n />\n ) : null}\n </MuiAvatar>\n );\n\n if (showTooltip && item.text) {\n return (\n <Tooltip key={itemKey} title={item.text}>\n {avatarEl}\n </Tooltip>\n );\n }\n return <React.Fragment key={itemKey}>{avatarEl}</React.Fragment>;\n };\n\n return (\n <Box\n className={className}\n sx={mergeSx(\n {\n display: 'flex',\n alignItems: 'center',\n lineHeight: 1,\n width: 'fit-content',\n },\n sx,\n )}\n >\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n {visibleItems.map((item, i) => renderSingleAvatar(item, i))}\n </Box>\n\n {showText && items[0]?.text && (\n <Typography\n variant=\"caption\"\n sx={{\n ml: 1,\n fontSize: '0.75rem',\n fontWeight: 400,\n color: 'text.primary',\n }}\n >\n {type && items.length === 1 && (\n <Box component=\"span\" sx={{ mr: 0.5 }}>\n {type}:\n </Box>\n )}\n {items[0].text}\n {items.length > 1 && ` +${items.length - 1}`}\n </Typography>\n )}\n </Box>\n );\n};\n\nexport default Avatar;\n"],"names":["_a","MuiAvatar","React"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SxProps, Theme } from '@mui/material/styles';
|
|
2
2
|
import { default as React } from 'react';
|
|
3
|
-
|
|
4
|
-
export interface MyButtonProps extends PickButtonProps {
|
|
3
|
+
export interface ButtonProps {
|
|
5
4
|
children?: React.ReactNode;
|
|
6
5
|
variant?: "text" | "outlined" | "contained";
|
|
7
6
|
disabled?: boolean;
|
|
@@ -13,10 +12,11 @@ export interface MyButtonProps extends PickButtonProps {
|
|
|
13
12
|
loading?: boolean;
|
|
14
13
|
loadingIndicator?: React.ReactNode;
|
|
15
14
|
loadingPosition?: "start" | "end" | "center";
|
|
16
|
-
color?: "primary" | "success" | "error" | "info" | "warning";
|
|
15
|
+
color?: "inherit" | "primary" | "secondary" | "success" | "error" | "info" | "warning";
|
|
17
16
|
href?: string;
|
|
18
17
|
"data-testid"?: string;
|
|
19
18
|
type?: "button" | "submit";
|
|
19
|
+
sx?: SxProps<Theme>;
|
|
20
20
|
}
|
|
21
|
-
export declare const Button: React.FC<
|
|
21
|
+
export declare const Button: React.FC<ButtonProps>;
|
|
22
22
|
export default Button;
|
package/components/Card/Card.cjs
CHANGED
|
@@ -1,28 +1,99 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __spreadValues = (a, b) => {
|
|
10
|
+
for (var prop in b || (b = {}))
|
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
|
13
|
+
if (__getOwnPropSymbols)
|
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
+
if (__propIsEnum.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
18
|
+
return a;
|
|
19
|
+
};
|
|
20
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
22
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
23
|
const material = require("@mui/material");
|
|
5
|
-
const
|
|
24
|
+
const resolvePreset = require("../../resolvePreset-CT3kU-K2.cjs");
|
|
25
|
+
const paddingMap = {
|
|
26
|
+
none: 0,
|
|
27
|
+
dense: 1.5,
|
|
28
|
+
normal: 2.5,
|
|
29
|
+
loose: 4
|
|
30
|
+
};
|
|
31
|
+
function buildCardSx({
|
|
32
|
+
variant,
|
|
33
|
+
padding,
|
|
34
|
+
clickable
|
|
35
|
+
}) {
|
|
36
|
+
return (theme) => __spreadProps(__spreadValues({
|
|
37
|
+
borderRadius: 2,
|
|
38
|
+
backgroundColor: "background.paper",
|
|
39
|
+
boxShadow: variant === "elevated" ? theme.shadows[1] : "none",
|
|
40
|
+
border: variant === "outlined" ? `1px solid ${theme.palette.divider}` : "none",
|
|
41
|
+
transition: theme.transitions.create(
|
|
42
|
+
["box-shadow", "transform", "border-color"],
|
|
43
|
+
{ duration: theme.transitions.duration.shorter }
|
|
44
|
+
),
|
|
45
|
+
cursor: clickable ? "pointer" : "default"
|
|
46
|
+
}, clickable && {
|
|
47
|
+
"&:hover": {
|
|
48
|
+
boxShadow: variant === "elevated" ? theme.shadows[3] : variant === "outlined" ? theme.shadows[1] : "none",
|
|
49
|
+
transform: variant !== "plain" ? "translateY(-1px)" : "none"
|
|
50
|
+
},
|
|
51
|
+
"&:active": {
|
|
52
|
+
transform: "translateY(0)"
|
|
53
|
+
}
|
|
54
|
+
}), {
|
|
55
|
+
p: paddingMap[padding]
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function Card({
|
|
6
59
|
children,
|
|
60
|
+
variant,
|
|
61
|
+
padding = "normal",
|
|
62
|
+
clickable = false,
|
|
63
|
+
preset,
|
|
7
64
|
raised,
|
|
8
65
|
sx,
|
|
9
|
-
className,
|
|
10
66
|
onClick,
|
|
11
67
|
onBlur,
|
|
68
|
+
className,
|
|
12
69
|
"data-testid": dataTestId
|
|
13
|
-
})
|
|
70
|
+
}) {
|
|
71
|
+
const theme = material.useTheme();
|
|
72
|
+
const resolvedVariant = raised ? "elevated" : variant != null ? variant : "elevated";
|
|
73
|
+
const presetSx = resolvePreset.resolvePreset("Card", preset, theme);
|
|
74
|
+
const rootSx = [
|
|
75
|
+
buildCardSx({
|
|
76
|
+
variant: resolvedVariant,
|
|
77
|
+
padding,
|
|
78
|
+
clickable: clickable || Boolean(onClick)
|
|
79
|
+
}),
|
|
80
|
+
...presetSx ? [presetSx] : [],
|
|
81
|
+
...Array.isArray(sx) ? sx : sx ? [sx] : []
|
|
82
|
+
];
|
|
14
83
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
15
84
|
material.Card,
|
|
16
85
|
{
|
|
17
|
-
|
|
18
|
-
sx,
|
|
86
|
+
sx: rootSx,
|
|
19
87
|
className,
|
|
20
88
|
"data-testid": dataTestId,
|
|
21
89
|
onClick,
|
|
22
90
|
onBlur,
|
|
91
|
+
elevation: 0,
|
|
23
92
|
children
|
|
24
93
|
}
|
|
25
94
|
);
|
|
26
|
-
}
|
|
95
|
+
}
|
|
27
96
|
exports.Card = Card;
|
|
97
|
+
exports.buildCardSx = buildCardSx;
|
|
98
|
+
exports.default = Card;
|
|
28
99
|
//# sourceMappingURL=Card.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.cjs","sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Card.cjs","sources":["../../../src/components/Card/Card.sx.ts","../../../src/components/Card/Card.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'plain';\nexport type CardPadding = 'none' | 'dense' | 'normal' | 'loose';\n\nexport interface BuildCardSxArgs {\n variant: CardVariant;\n padding: CardPadding;\n clickable: boolean;\n}\n\nconst paddingMap: Record<CardPadding, number> = {\n none: 0,\n dense: 1.5,\n normal: 2.5,\n loose: 4,\n};\n\n/**\n * Estilo base del Card. La prop `sx` del consumer se compone encima junto al\n * preset resuelto (en Card.tsx). Este builder solo se ocupa de variant +\n * padding para que siga siendo predecible.\n */\nexport function buildCardSx({\n variant,\n padding,\n clickable,\n}: BuildCardSxArgs): SxProps<Theme> {\n return (theme) => ({\n borderRadius: 2,\n backgroundColor: 'background.paper',\n boxShadow: variant === 'elevated' ? theme.shadows[1] : 'none',\n border:\n variant === 'outlined'\n ? `1px solid ${theme.palette.divider}`\n : 'none',\n transition: theme.transitions.create(\n ['box-shadow', 'transform', 'border-color'],\n { duration: theme.transitions.duration.shorter },\n ),\n cursor: clickable ? 'pointer' : 'default',\n ...(clickable && {\n '&:hover': {\n boxShadow:\n variant === 'elevated'\n ? theme.shadows[3]\n : variant === 'outlined'\n ? theme.shadows[1]\n : 'none',\n transform: variant !== 'plain' ? 'translateY(-1px)' : 'none',\n },\n '&:active': {\n transform: 'translateY(0)',\n },\n }),\n p: paddingMap[padding],\n });\n}\n","import React, { type ReactNode } from 'react';\nimport { Card as MuiCard, useTheme } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { buildCardSx, type CardVariant, type CardPadding } from './Card.sx';\n\nexport interface CardProps {\n /** Contenido del Card. */\n children?: ReactNode;\n /**\n * Variante visual.\n * - `elevated` (default): sombra sutil.\n * - `outlined`: borde sin sombra.\n * - `plain`: sin borde ni sombra, útil para layouts con nesting.\n */\n variant?: CardVariant;\n /** Densidad del padding interno. */\n padding?: CardPadding;\n /** Si `true`, muestra feedback de hover/active (cursor, sombra). */\n clickable?: boolean;\n /**\n * Preset registrado en `theme.styles.Card`. `\"default\"` usa el estilo\n * built-in sin preset extra.\n */\n preset?: string;\n /**\n * MUI `raised` legacy — mantenido por backward-compat. Equivale a\n * `variant=\"elevated\"` con sombra mayor. Ignora `variant` si se usa.\n */\n raised?: boolean;\n /** sx del root. Se compone sobre el base + preset. */\n sx?: SxProps<Theme>;\n onClick?: () => void;\n onBlur?: () => void;\n className?: string;\n 'data-testid'?: string;\n}\n\nexport function Card({\n children,\n variant,\n padding = 'normal',\n clickable = false,\n preset,\n raised,\n sx,\n onClick,\n onBlur,\n className,\n 'data-testid': dataTestId,\n}: CardProps) {\n const theme = useTheme();\n\n const resolvedVariant: CardVariant = raised\n ? 'elevated'\n : (variant ?? 'elevated');\n\n const presetSx = resolvePreset('Card', preset, theme);\n\n const rootSx: SxProps<Theme> = [\n buildCardSx({\n variant: resolvedVariant,\n padding,\n clickable: clickable || Boolean(onClick),\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n return (\n <MuiCard\n sx={rootSx}\n className={className}\n data-testid={dataTestId}\n onClick={onClick}\n onBlur={onBlur}\n elevation={0}\n >\n {children}\n </MuiCard>\n );\n}\n\nexport default Card;\n"],"names":["useTheme","resolvePreset","jsx","MuiCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,aAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAOO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,SAAO,CAAC,UAAW;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAW,YAAY,aAAa,MAAM,QAAQ,CAAC,IAAI;AAAA,IACvD,QACE,YAAY,aACR,aAAa,MAAM,QAAQ,OAAO,KAClC;AAAA,IACN,YAAY,MAAM,YAAY;AAAA,MAC5B,CAAC,cAAc,aAAa,cAAc;AAAA,MAC1C,EAAE,UAAU,MAAM,YAAY,SAAS,QAAA;AAAA,IAAQ;AAAA,IAEjD,QAAQ,YAAY,YAAY;AAAA,KAC5B,aAAa;AAAA,IACf,WAAW;AAAA,MACT,WACE,YAAY,aACR,MAAM,QAAQ,CAAC,IACf,YAAY,aACV,MAAM,QAAQ,CAAC,IACf;AAAA,MACR,WAAW,YAAY,UAAU,qBAAqB;AAAA,IAAA;AAAA,IAExD,YAAY;AAAA,MACV,WAAW;AAAA,IAAA;AAAA,EACb,IAzBe;AAAA,IA2BjB,GAAG,WAAW,OAAO;AAAA,EAAA;AAEzB;AClBO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAc;AACZ,QAAM,QAAQA,SAAAA,SAAA;AAEd,QAAM,kBAA+B,SACjC,aACC,4BAAW;AAEhB,QAAM,WAAWC,cAAAA,cAAc,QAAQ,QAAQ,KAAK;AAEpD,QAAM,SAAyB;AAAA,IAC7B,YAAY;AAAA,MACV,SAAS;AAAA,MACT;AAAA,MACA,WAAW,aAAa,QAAQ,OAAO;AAAA,IAAA,CACxC;AAAA,IACD,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC;AAG5C,SACEC,2BAAAA;AAAAA,IAACC,SAAAA;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,MACJ;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MAEV;AAAA,IAAA;AAAA,EAAA;AAGP;;;;"}
|
|
@@ -1,13 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SxProps, Theme } from '@mui/material/styles';
|
|
3
|
+
import { CardVariant, CardPadding } from './Card.sx';
|
|
4
|
+
export interface CardProps {
|
|
5
|
+
/** Contenido del Card. */
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* Variante visual.
|
|
9
|
+
* - `elevated` (default): sombra sutil.
|
|
10
|
+
* - `outlined`: borde sin sombra.
|
|
11
|
+
* - `plain`: sin borde ni sombra, útil para layouts con nesting.
|
|
12
|
+
*/
|
|
13
|
+
variant?: CardVariant;
|
|
14
|
+
/** Densidad del padding interno. */
|
|
15
|
+
padding?: CardPadding;
|
|
16
|
+
/** Si `true`, muestra feedback de hover/active (cursor, sombra). */
|
|
17
|
+
clickable?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Preset registrado en `theme.styles.Card`. `"default"` usa el estilo
|
|
20
|
+
* built-in sin preset extra.
|
|
21
|
+
*/
|
|
22
|
+
preset?: string;
|
|
23
|
+
/**
|
|
24
|
+
* MUI `raised` legacy — mantenido por backward-compat. Equivale a
|
|
25
|
+
* `variant="elevated"` con sombra mayor. Ignora `variant` si se usa.
|
|
26
|
+
*/
|
|
5
27
|
raised?: boolean;
|
|
6
|
-
|
|
28
|
+
/** sx del root. Se compone sobre el base + preset. */
|
|
29
|
+
sx?: SxProps<Theme>;
|
|
7
30
|
onClick?: () => void;
|
|
8
31
|
onBlur?: () => void;
|
|
9
|
-
|
|
10
|
-
|
|
32
|
+
className?: string;
|
|
33
|
+
'data-testid'?: string;
|
|
11
34
|
}
|
|
12
|
-
export declare
|
|
35
|
+
export declare function Card({ children, variant, padding, clickable, preset, raised, sx, onClick, onBlur, className, 'data-testid': dataTestId, }: CardProps): import("react/jsx-runtime").JSX.Element;
|
|
13
36
|
export default Card;
|
package/components/Card/Card.js
CHANGED
|
@@ -1,28 +1,99 @@
|
|
|
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));
|
|
1
20
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Card as Card$1 } from "@mui/material";
|
|
3
|
-
|
|
21
|
+
import { useTheme, Card as Card$1 } from "@mui/material";
|
|
22
|
+
import { r as resolvePreset } from "../../resolvePreset-B-IB0ehH.js";
|
|
23
|
+
const paddingMap = {
|
|
24
|
+
none: 0,
|
|
25
|
+
dense: 1.5,
|
|
26
|
+
normal: 2.5,
|
|
27
|
+
loose: 4
|
|
28
|
+
};
|
|
29
|
+
function buildCardSx({
|
|
30
|
+
variant,
|
|
31
|
+
padding,
|
|
32
|
+
clickable
|
|
33
|
+
}) {
|
|
34
|
+
return (theme) => __spreadProps(__spreadValues({
|
|
35
|
+
borderRadius: 2,
|
|
36
|
+
backgroundColor: "background.paper",
|
|
37
|
+
boxShadow: variant === "elevated" ? theme.shadows[1] : "none",
|
|
38
|
+
border: variant === "outlined" ? `1px solid ${theme.palette.divider}` : "none",
|
|
39
|
+
transition: theme.transitions.create(
|
|
40
|
+
["box-shadow", "transform", "border-color"],
|
|
41
|
+
{ duration: theme.transitions.duration.shorter }
|
|
42
|
+
),
|
|
43
|
+
cursor: clickable ? "pointer" : "default"
|
|
44
|
+
}, clickable && {
|
|
45
|
+
"&:hover": {
|
|
46
|
+
boxShadow: variant === "elevated" ? theme.shadows[3] : variant === "outlined" ? theme.shadows[1] : "none",
|
|
47
|
+
transform: variant !== "plain" ? "translateY(-1px)" : "none"
|
|
48
|
+
},
|
|
49
|
+
"&:active": {
|
|
50
|
+
transform: "translateY(0)"
|
|
51
|
+
}
|
|
52
|
+
}), {
|
|
53
|
+
p: paddingMap[padding]
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function Card({
|
|
4
57
|
children,
|
|
58
|
+
variant,
|
|
59
|
+
padding = "normal",
|
|
60
|
+
clickable = false,
|
|
61
|
+
preset,
|
|
5
62
|
raised,
|
|
6
63
|
sx,
|
|
7
|
-
className,
|
|
8
64
|
onClick,
|
|
9
65
|
onBlur,
|
|
66
|
+
className,
|
|
10
67
|
"data-testid": dataTestId
|
|
11
|
-
})
|
|
68
|
+
}) {
|
|
69
|
+
const theme = useTheme();
|
|
70
|
+
const resolvedVariant = raised ? "elevated" : variant != null ? variant : "elevated";
|
|
71
|
+
const presetSx = resolvePreset("Card", preset, theme);
|
|
72
|
+
const rootSx = [
|
|
73
|
+
buildCardSx({
|
|
74
|
+
variant: resolvedVariant,
|
|
75
|
+
padding,
|
|
76
|
+
clickable: clickable || Boolean(onClick)
|
|
77
|
+
}),
|
|
78
|
+
...presetSx ? [presetSx] : [],
|
|
79
|
+
...Array.isArray(sx) ? sx : sx ? [sx] : []
|
|
80
|
+
];
|
|
12
81
|
return /* @__PURE__ */ jsx(
|
|
13
82
|
Card$1,
|
|
14
83
|
{
|
|
15
|
-
|
|
16
|
-
sx,
|
|
84
|
+
sx: rootSx,
|
|
17
85
|
className,
|
|
18
86
|
"data-testid": dataTestId,
|
|
19
87
|
onClick,
|
|
20
88
|
onBlur,
|
|
89
|
+
elevation: 0,
|
|
21
90
|
children
|
|
22
91
|
}
|
|
23
92
|
);
|
|
24
|
-
}
|
|
93
|
+
}
|
|
25
94
|
export {
|
|
26
|
-
Card
|
|
95
|
+
Card,
|
|
96
|
+
buildCardSx,
|
|
97
|
+
Card as default
|
|
27
98
|
};
|
|
28
99
|
//# sourceMappingURL=Card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.js","sources":["../../../src/components/Card/Card.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Card.js","sources":["../../../src/components/Card/Card.sx.ts","../../../src/components/Card/Card.tsx"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nexport type CardVariant = 'elevated' | 'outlined' | 'plain';\nexport type CardPadding = 'none' | 'dense' | 'normal' | 'loose';\n\nexport interface BuildCardSxArgs {\n variant: CardVariant;\n padding: CardPadding;\n clickable: boolean;\n}\n\nconst paddingMap: Record<CardPadding, number> = {\n none: 0,\n dense: 1.5,\n normal: 2.5,\n loose: 4,\n};\n\n/**\n * Estilo base del Card. La prop `sx` del consumer se compone encima junto al\n * preset resuelto (en Card.tsx). Este builder solo se ocupa de variant +\n * padding para que siga siendo predecible.\n */\nexport function buildCardSx({\n variant,\n padding,\n clickable,\n}: BuildCardSxArgs): SxProps<Theme> {\n return (theme) => ({\n borderRadius: 2,\n backgroundColor: 'background.paper',\n boxShadow: variant === 'elevated' ? theme.shadows[1] : 'none',\n border:\n variant === 'outlined'\n ? `1px solid ${theme.palette.divider}`\n : 'none',\n transition: theme.transitions.create(\n ['box-shadow', 'transform', 'border-color'],\n { duration: theme.transitions.duration.shorter },\n ),\n cursor: clickable ? 'pointer' : 'default',\n ...(clickable && {\n '&:hover': {\n boxShadow:\n variant === 'elevated'\n ? theme.shadows[3]\n : variant === 'outlined'\n ? theme.shadows[1]\n : 'none',\n transform: variant !== 'plain' ? 'translateY(-1px)' : 'none',\n },\n '&:active': {\n transform: 'translateY(0)',\n },\n }),\n p: paddingMap[padding],\n });\n}\n","import React, { type ReactNode } from 'react';\nimport { Card as MuiCard, useTheme } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nimport { resolvePreset } from '../_shared/resolvePreset';\nimport { buildCardSx, type CardVariant, type CardPadding } from './Card.sx';\n\nexport interface CardProps {\n /** Contenido del Card. */\n children?: ReactNode;\n /**\n * Variante visual.\n * - `elevated` (default): sombra sutil.\n * - `outlined`: borde sin sombra.\n * - `plain`: sin borde ni sombra, útil para layouts con nesting.\n */\n variant?: CardVariant;\n /** Densidad del padding interno. */\n padding?: CardPadding;\n /** Si `true`, muestra feedback de hover/active (cursor, sombra). */\n clickable?: boolean;\n /**\n * Preset registrado en `theme.styles.Card`. `\"default\"` usa el estilo\n * built-in sin preset extra.\n */\n preset?: string;\n /**\n * MUI `raised` legacy — mantenido por backward-compat. Equivale a\n * `variant=\"elevated\"` con sombra mayor. Ignora `variant` si se usa.\n */\n raised?: boolean;\n /** sx del root. Se compone sobre el base + preset. */\n sx?: SxProps<Theme>;\n onClick?: () => void;\n onBlur?: () => void;\n className?: string;\n 'data-testid'?: string;\n}\n\nexport function Card({\n children,\n variant,\n padding = 'normal',\n clickable = false,\n preset,\n raised,\n sx,\n onClick,\n onBlur,\n className,\n 'data-testid': dataTestId,\n}: CardProps) {\n const theme = useTheme();\n\n const resolvedVariant: CardVariant = raised\n ? 'elevated'\n : (variant ?? 'elevated');\n\n const presetSx = resolvePreset('Card', preset, theme);\n\n const rootSx: SxProps<Theme> = [\n buildCardSx({\n variant: resolvedVariant,\n padding,\n clickable: clickable || Boolean(onClick),\n }),\n ...(presetSx ? [presetSx] : []),\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ];\n\n return (\n <MuiCard\n sx={rootSx}\n className={className}\n data-testid={dataTestId}\n onClick={onClick}\n onBlur={onBlur}\n elevation={0}\n >\n {children}\n </MuiCard>\n );\n}\n\nexport default Card;\n"],"names":["MuiCard"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,aAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAOO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,SAAO,CAAC,UAAW;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,WAAW,YAAY,aAAa,MAAM,QAAQ,CAAC,IAAI;AAAA,IACvD,QACE,YAAY,aACR,aAAa,MAAM,QAAQ,OAAO,KAClC;AAAA,IACN,YAAY,MAAM,YAAY;AAAA,MAC5B,CAAC,cAAc,aAAa,cAAc;AAAA,MAC1C,EAAE,UAAU,MAAM,YAAY,SAAS,QAAA;AAAA,IAAQ;AAAA,IAEjD,QAAQ,YAAY,YAAY;AAAA,KAC5B,aAAa;AAAA,IACf,WAAW;AAAA,MACT,WACE,YAAY,aACR,MAAM,QAAQ,CAAC,IACf,YAAY,aACV,MAAM,QAAQ,CAAC,IACf;AAAA,MACR,WAAW,YAAY,UAAU,qBAAqB;AAAA,IAAA;AAAA,IAExD,YAAY;AAAA,MACV,WAAW;AAAA,IAAA;AAAA,EACb,IAzBe;AAAA,IA2BjB,GAAG,WAAW,OAAO;AAAA,EAAA;AAEzB;AClBO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAc;AACZ,QAAM,QAAQ,SAAA;AAEd,QAAM,kBAA+B,SACjC,aACC,4BAAW;AAEhB,QAAM,WAAW,cAAc,QAAQ,QAAQ,KAAK;AAEpD,QAAM,SAAyB;AAAA,IAC7B,YAAY;AAAA,MACV,SAAS;AAAA,MACT;AAAA,MACA,WAAW,aAAa,QAAQ,OAAO;AAAA,IAAA,CACxC;AAAA,IACD,GAAI,WAAW,CAAC,QAAQ,IAAI,CAAA;AAAA,IAC5B,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAA;AAAA,EAAC;AAG5C,SACE;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,MACJ;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MAEV;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|