@soyfri/shared-library 2.0.0-beta.1 → 2.0.0-beta.10
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/build.js +38 -75
- package/dist/README.md +243 -0
- package/dist/components/Drawer/Drawer.cjs +14 -17
- package/dist/components/Drawer/Drawer.cjs.map +1 -1
- package/dist/components/Drawer/Drawer.d.ts +8 -1
- package/dist/components/Drawer/Drawer.js +14 -17
- package/dist/components/Drawer/Drawer.js.map +1 -1
- package/dist/components/Input/Input.definitions.d.ts +1 -0
- package/dist/components/RadioGroup/RadioGroup.cjs +202 -0
- package/dist/components/RadioGroup/RadioGroup.cjs.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +53 -0
- package/dist/components/RadioGroup/RadioGroup.definitions.d.ts +6 -0
- package/dist/components/RadioGroup/RadioGroup.js +202 -0
- package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.sx.d.ts +20 -0
- package/dist/components/RadioGroup/RadioGroup.types.d.ts +1 -0
- package/dist/components/RadioGroup/index.d.ts +2 -0
- package/dist/components/RadioGroup.d.ts +6 -0
- package/dist/components/Stepper/Stepper.cjs +136 -23
- package/dist/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/components/Stepper/Stepper.js +137 -24
- package/dist/components/Stepper/Stepper.js.map +1 -1
- package/dist/components/Switch/Switch.cjs +181 -0
- package/dist/components/Switch/Switch.cjs.map +1 -0
- package/dist/components/Switch/Switch.d.ts +43 -0
- package/dist/components/Switch/Switch.definitions.d.ts +7 -0
- package/dist/components/Switch/Switch.js +181 -0
- package/dist/components/Switch/Switch.js.map +1 -0
- package/dist/components/Switch/Switch.sx.d.ts +22 -0
- package/dist/components/Switch/Switch.types.d.ts +1 -0
- package/dist/components/Switch/index.d.ts +2 -0
- package/dist/components/Switch.d.ts +6 -0
- package/dist/index.cjs +24 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -1
- package/dist/mui.d.ts +1 -0
- package/dist/package.json +207 -0
- package/dist/theme/componentStyles.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/Drawer/Drawer.stories.tsx +168 -0
- package/src/components/Drawer/Drawer.tsx +26 -18
- package/src/components/Input/Input.definitions.ts +24 -0
- package/src/components/Input/Input.stories.tsx +29 -0
- package/src/components/RadioGroup/RadioGroup.definitions.ts +177 -0
- package/src/components/RadioGroup/RadioGroup.stories.tsx +231 -0
- package/src/components/RadioGroup/RadioGroup.sx.ts +75 -0
- package/src/components/RadioGroup/RadioGroup.tsx +196 -0
- package/src/components/RadioGroup/RadioGroup.types.ts +10 -0
- package/src/components/RadioGroup/index.ts +9 -0
- package/src/components/Stepper/Stepper.stories.tsx +72 -0
- package/src/components/Stepper/Stepper.tsx +139 -4
- package/src/components/Switch/Switch.definitions.ts +134 -0
- package/src/components/Switch/Switch.stories.tsx +213 -0
- package/src/components/Switch/Switch.sx.ts +81 -0
- package/src/components/Switch/Switch.tsx +172 -0
- package/src/components/Switch/Switch.types.ts +10 -0
- package/src/components/Switch/index.ts +9 -0
- package/src/mui.ts +10 -0
- package/src/theme/componentStyles.ts +3 -1
- package/storybook-static/addon-visual-tests-assets/visual-test-illustration.mp4 +0 -0
- package/storybook-static/assets/AccountCircle-BDZFsbTw.js +1 -0
- package/storybook-static/assets/ActionMenu-EynP8yU1.js +19 -0
- package/storybook-static/assets/ActionMenu.stories-DqSqRGix.js +185 -0
- package/storybook-static/assets/Alert-3zvTPc0p.js +1 -0
- package/storybook-static/assets/AppBar.stories-DcX3M5th.js +172 -0
- package/storybook-static/assets/Autocomplete.stories-CXJm8FOT.js +788 -0
- package/storybook-static/assets/Avatar-NbFfkZws.js +1 -0
- package/storybook-static/assets/Avatar.stories-CwOYCzqU.js +390 -0
- package/storybook-static/assets/Box-BnhEcfFm.js +1 -0
- package/storybook-static/assets/Button-D9h7OggD.js +1 -0
- package/storybook-static/assets/Button-DBpqmVB_.js +1 -0
- package/storybook-static/assets/Button.stories-F20dmnjq.js +320 -0
- package/storybook-static/assets/ButtonBase-qyaMEhe4.js +74 -0
- package/storybook-static/assets/Card.stories-B3NpAhO0.js +154 -0
- package/storybook-static/assets/CheckCircleOutline-CEj5mDsl.js +1 -0
- package/storybook-static/assets/Chip-C3vKPpzR.js +1 -0
- package/storybook-static/assets/Chip.stories-sxcfHVo9.js +333 -0
- package/storybook-static/assets/CircularProgress-DC7ZNWwl.js +28 -0
- package/storybook-static/assets/Clear-4kYcKvT3.js +1 -0
- package/storybook-static/assets/ClipBoard-DvLBdNHe.js +1 -0
- package/storybook-static/assets/ClipBoard.stories-BGUo47r6.js +108 -0
- package/storybook-static/assets/Close-CgHeRgmh.js +1 -0
- package/storybook-static/assets/Close-Cy8nELYU.js +1 -0
- package/storybook-static/assets/Color-AVL7NMMY-BJKvwERm.js +1 -0
- package/storybook-static/assets/ContentCopy-BfLTDb10.js +1 -0
- package/storybook-static/assets/DatePicker-Clkpr-Ku.js +1 -0
- package/storybook-static/assets/DatePicker.stories-EaUCMkh3.js +444 -0
- package/storybook-static/assets/DateRangePicker.stories-BMlkj-8K.js +390 -0
- package/storybook-static/assets/DateTimePicker.stories-B6gdzKq5.js +555 -0
- package/storybook-static/assets/DefaultPropsProvider-BGoQxtDa.js +16 -0
- package/storybook-static/assets/Delete-D2SMMmIA.js +1 -0
- package/storybook-static/assets/DialogContent-BeCDKgax.js +1 -0
- package/storybook-static/assets/Divider-BbCj9wT4.js +1 -0
- package/storybook-static/assets/DocsRenderer-PQXLIZUC-BebLK5Y_.js +1243 -0
- package/storybook-static/assets/Drawer-DcFwy73r.js +1 -0
- package/storybook-static/assets/Drawer.stories-C5AZkJBk.js +173 -0
- package/storybook-static/assets/EmptyTable-B-RKtgVs.png +0 -0
- package/storybook-static/assets/ErrorOutline-D9gM7ART.js +1 -0
- package/storybook-static/assets/Fade-Ll96CvH8.js +1 -0
- package/storybook-static/assets/Flyout.stories-Cf7z6MNw.js +163 -0
- package/storybook-static/assets/Gallery.stories-DdpWVTF6.js +127 -0
- package/storybook-static/assets/Grow-8y4FglGK.js +1 -0
- package/storybook-static/assets/Home-BRvJEp2L.js +1 -0
- package/storybook-static/assets/Icon.stories-D0mUiW_t.js +78 -0
- package/storybook-static/assets/IconButton-9OYSTH58.js +1 -0
- package/storybook-static/assets/Input-CjX0t4h-.js +1 -0
- package/storybook-static/assets/Input.stories-BRxekliy.js +650 -0
- package/storybook-static/assets/InputGroup.stories-DH6gUfmn.js +306 -0
- package/storybook-static/assets/KeyboardArrowRight-WO_attK2.js +1 -0
- package/storybook-static/assets/KeyboardArrowUp-DsyVef-i.js +1 -0
- package/storybook-static/assets/ListItem-D3O0103N.js +1 -0
- package/storybook-static/assets/ListItemIcon-hca6xN79.js +1 -0
- package/storybook-static/assets/ListItemText-BFLAwLdl.js +1 -0
- package/storybook-static/assets/Logout-gj-P3AfU.js +1 -0
- package/storybook-static/assets/Menu-ClzfjLc3.js +1 -0
- package/storybook-static/assets/MenuButton.stories-B-W_QVDt.js +162 -0
- package/storybook-static/assets/MenuItem-iU6tAqJI.js +1 -0
- package/storybook-static/assets/Modal-3okp9H2i.js +1 -0
- package/storybook-static/assets/Modal.stories-DIWzm4qR.js +468 -0
- package/storybook-static/assets/MoreVert-BoIVG4gh.js +1 -0
- package/storybook-static/assets/Notifications-DY_A-Sho.js +1 -0
- package/storybook-static/assets/PageLoader.stories-DmtO1mlm.js +158 -0
- package/storybook-static/assets/Paper-SwQBhqI7.js +1 -0
- package/storybook-static/assets/Person-CkQl-mpq.js +1 -0
- package/storybook-static/assets/PickersModalDialog-Tjnr_cu5.js +10 -0
- package/storybook-static/assets/PickersToolbarButton-Tt185-si.js +1 -0
- package/storybook-static/assets/Popper-CnCTYXxy.js +1 -0
- package/storybook-static/assets/Portal-Cj8XF9Lf.js +1 -0
- package/storybook-static/assets/ScrollTopButton.stories-BflQCwNP.js +90 -0
- package/storybook-static/assets/Select-CjcuMAY0.js +4 -0
- package/storybook-static/assets/Select-DJh2biEb.js +3 -0
- package/storybook-static/assets/Select.stories-DU1Gb3I2.js +1103 -0
- package/storybook-static/assets/Settings-BLKc1CnO.js +1 -0
- package/storybook-static/assets/Snackbar-BtVeKTw6.js +1 -0
- package/storybook-static/assets/Stack-D01OUIXi.js +1 -0
- package/storybook-static/assets/Stat.stories-Bn9-iuPT.js +60 -0
- package/storybook-static/assets/StatusMessage.stories-hnfX8FeU.js +73 -0
- package/storybook-static/assets/Stepper-BtKB5ykn.js +2 -0
- package/storybook-static/assets/Stepper.stories-CTEZbgPc.js +165 -0
- package/storybook-static/assets/Table.stories-CTn2Ktmn.js +1260 -0
- package/storybook-static/assets/TableContainer-CzLNaEU-.js +1 -0
- package/storybook-static/assets/TableRow-CS88-1HF.js +2 -0
- package/storybook-static/assets/Tabs-DLpDOu_n.js +1 -0
- package/storybook-static/assets/Tabs.stories-BFVuFy_5.js +159 -0
- package/storybook-static/assets/TextField-22T-xHBm.js +1 -0
- package/storybook-static/assets/Timeline.stories-DJU_U2Hv.js +97 -0
- package/storybook-static/assets/Tooltip-DbnHUxNj.js +1 -0
- package/storybook-static/assets/Tooltip.stories-B7tA3dnV.js +66 -0
- package/storybook-static/assets/Typography-BgntX2Ep.js +1 -0
- package/storybook-static/assets/Wizard.stories-CVrJLK_D.js +23 -0
- package/storybook-static/assets/createSimplePaletteValueFilter-bm0fmN_7.js +1 -0
- package/storybook-static/assets/createSvgIcon-D_Gca4vA.js +1 -0
- package/storybook-static/assets/debounce-Be36O1Ab.js +1 -0
- package/storybook-static/assets/emotion-react.browser.esm--g-C9cX9.js +8 -0
- package/storybook-static/assets/extendSxProp-CEpa30hT.js +1 -0
- package/storybook-static/assets/formField.sx-DMCmZIAa.js +1 -0
- package/storybook-static/assets/getReactElementRef-BQ3ANZdy.js +1 -0
- package/storybook-static/assets/iframe-BAJnc_4n.js +1079 -0
- package/storybook-static/assets/index-B1tlhOpe.js +240 -0
- package/storybook-static/assets/index-BF3FAXTk.js +9 -0
- package/storybook-static/assets/index-CIeucmOB.js +2 -0
- package/storybook-static/assets/index-CY7j4a7o.js +1 -0
- package/storybook-static/assets/index-CxkKctw5.js +1 -0
- package/storybook-static/assets/isFocusVisible-B8k4qzLc.js +1 -0
- package/storybook-static/assets/isMuiElement-CTZSFcY5.js +1 -0
- package/storybook-static/assets/jsx-runtime-D_zvdyIk.js +9 -0
- package/storybook-static/assets/listItemTextClasses-CC_rwJam.js +1 -0
- package/storybook-static/assets/mergeSlotProps-B0UBKBMe.js +1 -0
- package/storybook-static/assets/ownerDocument-DW-IO8s5.js +1 -0
- package/storybook-static/assets/ownerWindow-HkKU3E4x.js +1 -0
- package/storybook-static/assets/preload-helper-PPVm8Dsz.js +1 -0
- package/storybook-static/assets/react-18-BUJ64QCV.js +25 -0
- package/storybook-static/assets/resolvePreset-CN2aOJJr.js +1 -0
- package/storybook-static/assets/useControlled-DsVh1a5j.js +1 -0
- package/storybook-static/assets/useForkRef-0ANIrxcF.js +1 -0
- package/storybook-static/assets/useId-b4fZxjOL.js +1 -0
- package/storybook-static/assets/useMobilePicker-DK-c8xbD.js +1 -0
- package/storybook-static/assets/usePreviousProps-WR0rG4aR.js +1 -0
- package/storybook-static/assets/useSlot-b6pXgp5_.js +1 -0
- package/storybook-static/assets/useSlotProps-C0uMfuBt.js +1 -0
- package/storybook-static/assets/useTheme-BmOJK7ra.js +1 -0
- package/storybook-static/assets/useThemeProps-DYtxXiUU.js +1 -0
- package/storybook-static/assets/useThemeProps-U4yXiZ_5.js +1 -0
- package/storybook-static/assets/useTimeout-DNjRaOWc.js +1 -0
- package/storybook-static/assets/visuallyHidden-Dan1xhjv.js +1 -0
- package/storybook-static/favicon-wrapper.svg +46 -0
- package/storybook-static/favicon.svg +1 -0
- package/storybook-static/iframe.html +686 -0
- package/storybook-static/index.html +160 -0
- package/storybook-static/index.json +1 -0
- package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
- package/storybook-static/nunito-sans-bold.woff2 +0 -0
- package/storybook-static/nunito-sans-italic.woff2 +0 -0
- package/storybook-static/nunito-sans-regular.woff2 +0 -0
- package/storybook-static/project.json +1 -0
- package/storybook-static/sb-addons/chromatic-com-storybook-2/manager-bundle.js +356 -0
- package/storybook-static/sb-addons/chromatic-com-storybook-2/manager-bundle.js.LEGAL.txt +40 -0
- package/storybook-static/sb-addons/docs-4/manager-bundle.js +151 -0
- package/storybook-static/sb-addons/onboarding-1/manager-bundle.js +127 -0
- package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +971 -0
- package/storybook-static/sb-addons/vitest-3/manager-bundle.js +3 -0
- package/storybook-static/sb-common-assets/favicon-wrapper.svg +46 -0
- package/storybook-static/sb-common-assets/favicon.svg +1 -0
- package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
- package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
- package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
- package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
- package/storybook-static/sb-manager/globals-module-info.js +797 -0
- package/storybook-static/sb-manager/globals-runtime.js +69679 -0
- package/storybook-static/sb-manager/globals.js +34 -0
- package/storybook-static/sb-manager/runtime.js +13195 -0
- package/storybook-static/vite-inject-mocker-entry.js +18 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SxProps, Theme } from '@mui/material/styles';
|
|
2
|
+
export interface BuildRadioGroupSxOptions {
|
|
3
|
+
bordered: boolean;
|
|
4
|
+
borderRadius: number | string;
|
|
5
|
+
error: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Builder de sx para RadioGroup. Reproduce el estilo del antiguo
|
|
9
|
+
* `FormRadioGroup` legacy: contenedor con borde + padding vertical.
|
|
10
|
+
*
|
|
11
|
+
* Cuando `bordered=true`, el contenedor gana:
|
|
12
|
+
* - `:focus-within` → borde + shadow primario (mismo patrón que `InputGroup`).
|
|
13
|
+
* - `error=true` → borde + shadow de error (palette.error.main).
|
|
14
|
+
*
|
|
15
|
+
* El shadow es de 1px, así que no hay shift de layout — sólo se intensifica
|
|
16
|
+
* visualmente el borde sin empujar nada alrededor.
|
|
17
|
+
*
|
|
18
|
+
* Si `bordered=false`, devuelve un sx mínimo (sólo helper text reset).
|
|
19
|
+
*/
|
|
20
|
+
export declare const buildRadioGroupSx: ({ bordered, borderRadius, error, }: BuildRadioGroupSxOptions) => SxProps<Theme>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { RadioOption, RadioGroupSize, BaseRadioGroupProps, RHFRadioGroupProps, ControlledRadioGroupProps, RadioGroupProps, } from './RadioGroup';
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const React = require("react");
|
|
4
5
|
const material = require("@mui/material");
|
|
6
|
+
const ChevronLeftIcon = require("@mui/icons-material/ChevronLeft");
|
|
7
|
+
const ChevronRightIcon = require("@mui/icons-material/ChevronRight");
|
|
5
8
|
const useWizard = require("../../useWizard-CWdIxZzX.cjs");
|
|
6
9
|
const Stepper = ({
|
|
7
10
|
children,
|
|
@@ -12,31 +15,141 @@ const Stepper = ({
|
|
|
12
15
|
}) => {
|
|
13
16
|
const wizard = useWizard.useWizard();
|
|
14
17
|
const currentStep = currentStepProp !== void 0 ? currentStepProp : wizard.totalSteps > 0 ? wizard.currentStep : 0;
|
|
18
|
+
const isHorizontal = orientation === "horizontal";
|
|
19
|
+
const scrollRef = React.useRef(null);
|
|
20
|
+
const [canScrollLeft, setCanScrollLeft] = React.useState(false);
|
|
21
|
+
const [canScrollRight, setCanScrollRight] = React.useState(false);
|
|
22
|
+
const updateScrollState = () => {
|
|
23
|
+
const el = scrollRef.current;
|
|
24
|
+
if (!el) return;
|
|
25
|
+
const { scrollLeft, scrollWidth, clientWidth } = el;
|
|
26
|
+
setCanScrollLeft(scrollLeft > 1);
|
|
27
|
+
setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);
|
|
28
|
+
};
|
|
29
|
+
React.useLayoutEffect(() => {
|
|
30
|
+
if (!isHorizontal) return;
|
|
31
|
+
updateScrollState();
|
|
32
|
+
}, [isHorizontal, children.length, currentStep]);
|
|
33
|
+
React.useEffect(() => {
|
|
34
|
+
if (!isHorizontal) return;
|
|
35
|
+
const el = scrollRef.current;
|
|
36
|
+
if (!el) return;
|
|
37
|
+
const onScroll = () => updateScrollState();
|
|
38
|
+
el.addEventListener("scroll", onScroll, { passive: true });
|
|
39
|
+
const ro = new ResizeObserver(() => updateScrollState());
|
|
40
|
+
ro.observe(el);
|
|
41
|
+
return () => {
|
|
42
|
+
el.removeEventListener("scroll", onScroll);
|
|
43
|
+
ro.disconnect();
|
|
44
|
+
};
|
|
45
|
+
}, [isHorizontal]);
|
|
46
|
+
const scrollBy = (delta) => {
|
|
47
|
+
const el = scrollRef.current;
|
|
48
|
+
if (!el) return;
|
|
49
|
+
el.scrollBy({ left: delta, behavior: "smooth" });
|
|
50
|
+
};
|
|
51
|
+
const showArrows = isHorizontal && (canScrollLeft || canScrollRight);
|
|
15
52
|
return /* @__PURE__ */ jsxRuntime.jsxs(material.Box, { sx, children: [
|
|
16
|
-
/* @__PURE__ */ jsxRuntime.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
54
|
+
material.Box,
|
|
55
|
+
{
|
|
56
|
+
sx: isHorizontal ? {
|
|
57
|
+
display: "flex",
|
|
58
|
+
alignItems: "center",
|
|
59
|
+
width: "100%",
|
|
60
|
+
gap: 0.5
|
|
61
|
+
} : void 0,
|
|
62
|
+
children: [
|
|
63
|
+
isHorizontal && /* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
material.IconButton,
|
|
65
|
+
{
|
|
66
|
+
"aria-label": "Anterior",
|
|
67
|
+
size: "small",
|
|
68
|
+
onClick: () => scrollBy(-160),
|
|
69
|
+
disabled: !canScrollLeft,
|
|
70
|
+
sx: {
|
|
71
|
+
flex: "0 0 auto",
|
|
72
|
+
// Reservamos el slot siempre que haya overflow en algún lado,
|
|
73
|
+
// así el área scroll tiene un ancho estable (no saltan los
|
|
74
|
+
// steps cuando aparece/desaparece la flecha).
|
|
75
|
+
visibility: showArrows ? "visible" : "hidden"
|
|
76
|
+
},
|
|
77
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon, { fontSize: "small" })
|
|
34
78
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
79
|
+
),
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
81
|
+
material.Box,
|
|
82
|
+
{
|
|
83
|
+
ref: scrollRef,
|
|
84
|
+
sx: isHorizontal ? {
|
|
85
|
+
flex: "1 1 auto",
|
|
86
|
+
minWidth: 0,
|
|
87
|
+
overflowX: "auto",
|
|
88
|
+
scrollBehavior: "smooth",
|
|
89
|
+
WebkitOverflowScrolling: "touch",
|
|
90
|
+
// Ocultamos la scrollbar (la navegación es con flechas)
|
|
91
|
+
scrollbarWidth: "none",
|
|
92
|
+
"&::-webkit-scrollbar": { display: "none" }
|
|
93
|
+
} : void 0,
|
|
94
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
95
|
+
material.Stepper,
|
|
96
|
+
{
|
|
97
|
+
activeStep: currentStep,
|
|
98
|
+
orientation,
|
|
99
|
+
alternativeLabel: alternateLabel,
|
|
100
|
+
sx: isHorizontal ? {
|
|
101
|
+
display: "inline-flex",
|
|
102
|
+
flexWrap: "nowrap",
|
|
103
|
+
minWidth: "100%",
|
|
104
|
+
width: "max-content",
|
|
105
|
+
// Evita que los steps se compriman al punto de solaparse.
|
|
106
|
+
"& .MuiStep-root": { flex: "0 0 auto", minWidth: 120 }
|
|
107
|
+
} : void 0,
|
|
108
|
+
children: children.map((child, idx) => {
|
|
109
|
+
const { label, completed, disabled, className, sx: stepSx, dotColor, activeDotColor, completedDotColor, iconTextColor } = child.props;
|
|
110
|
+
return /* @__PURE__ */ jsxRuntime.jsx(material.Step, { completed, disabled, className, sx: stepSx, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
111
|
+
material.StepLabel,
|
|
112
|
+
{
|
|
113
|
+
sx: {
|
|
114
|
+
pointerEvents: "none",
|
|
115
|
+
"& .MuiStepIcon-root": {
|
|
116
|
+
color: dotColor
|
|
117
|
+
},
|
|
118
|
+
"& .MuiStepIcon-active": {
|
|
119
|
+
color: activeDotColor
|
|
120
|
+
},
|
|
121
|
+
"& .MuiStepIcon-completed": {
|
|
122
|
+
color: completedDotColor
|
|
123
|
+
},
|
|
124
|
+
"& .MuiStepIcon-text": {
|
|
125
|
+
fill: iconTextColor
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
children: label
|
|
129
|
+
}
|
|
130
|
+
) }, idx);
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
),
|
|
136
|
+
isHorizontal && /* @__PURE__ */ jsxRuntime.jsx(
|
|
137
|
+
material.IconButton,
|
|
138
|
+
{
|
|
139
|
+
"aria-label": "Siguiente",
|
|
140
|
+
size: "small",
|
|
141
|
+
onClick: () => scrollBy(160),
|
|
142
|
+
disabled: !canScrollRight,
|
|
143
|
+
sx: {
|
|
144
|
+
flex: "0 0 auto",
|
|
145
|
+
visibility: showArrows ? "visible" : "hidden"
|
|
146
|
+
},
|
|
147
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon, { fontSize: "small" })
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
),
|
|
40
153
|
/* @__PURE__ */ jsxRuntime.jsx(material.Box, { mt: 2, children: children.map(
|
|
41
154
|
(child, idx) => idx === currentStep ? /* @__PURE__ */ jsxRuntime.jsx(material.Box, { children: child.props.children }, idx) : null
|
|
42
155
|
) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stepper.cjs","sources":["../../../src/components/Stepper/Stepper.tsx","../../../src/components/Stepper/Step.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\nimport { Stepper as MuiStepper, Step as MuiStep, StepLabel as MuiStepLabel, Box } from \"@mui/material\";\nimport { StepProps } from \"./Step\";\nimport { useWizard } from \"../../hooks/Wizard\";\n\ninterface MyStepperProps {\n children: ReactElement<StepProps>[];\n orientation?: \"horizontal\" | \"vertical\";\n sx?: object;\n alternateLabel?: boolean;\n /**\n * Índice 0-based del paso activo. Si no se provee, el Stepper intenta\n * leerlo del `WizardContext` (si está dentro de un `<WizardProvider>`).\n * Si tampoco hay provider, el default es 0.\n */\n currentStep?: number;\n}\n\nexport const Stepper: React.FC<MyStepperProps> = ({\n children,\n orientation = \"horizontal\",\n alternateLabel = false,\n\n sx,\n currentStep: currentStepProp,\n}) => {\n // Lee el paso desde el WizardContext cuando el consumer no lo pasa como prop.\n // Si el Stepper NO está dentro de un WizardProvider, `useWizard()` devuelve\n // el valor default (currentStep=0, totalSteps=0), así que no rompe nada.\n const wizard = useWizard();\n const currentStep =\n currentStepProp !== undefined\n ? currentStepProp\n : wizard.totalSteps > 0\n ? wizard.currentStep\n : 0;\n\n return (\n <Box sx={sx}>\n <MuiStepper activeStep={currentStep} orientation={orientation} alternativeLabel={alternateLabel} >\n {children.map((child, idx) => {\n const { label, completed, disabled, className, sx: stepSx, dotColor, activeDotColor, completedDotColor, iconTextColor } = child.props;\n return (\n <MuiStep key={idx} completed={completed} disabled={disabled} className={className} sx={stepSx}>\n <MuiStepLabel sx={{\n pointerEvents: 'none',\n \"& .MuiStepIcon-root\": {\n color: dotColor,\n },\n \"& .MuiStepIcon-active\": {\n color: activeDotColor,\n },\n \"& .MuiStepIcon-completed\": {\n color: completedDotColor,\n },\n \"& .MuiStepIcon-text\": {\n fill: iconTextColor,\n },\n }}\n >{label}\n </MuiStepLabel>\n </MuiStep>\n );\n })}\n </MuiStepper>\n <Box mt={2}>\n {children.map((child, idx) =>\n idx === currentStep ? <Box key={idx}>{child.props.children}</Box> : null\n )}\n </Box>\n </Box>\n );\n};\n\nexport default Stepper;","import React from \"react\";\nimport { StepProps as MuiStepProps } from \"@mui/material\";\n\ntype PickMuiStepProps = Pick<MuiStepProps, \"completed\" | \"disabled\" | \"sx\" | \"className\">;\n\nexport interface StepProps extends PickMuiStepProps {\n label: React.ReactNode;\n children?: React.ReactNode;\n disabled?: boolean;\n sx?: object;\n dotColor?: string; // dot base\n activeDotColor?: string; // dot activa\n completedDotColor?: string; // dot completada\n iconTextColor?: string; // número o check dentro\n}\n\nexport const Step = (_: StepProps): null => null;\n\nStep.displayName = \"Step\";\n\nexport default Step;"],"names":["useWizard","jsxs","Box","jsx","MuiStepper","MuiStep","MuiStepLabel"],"mappings":";;;;;AAkBO,MAAM,UAAoC,CAAC;AAAA,EAChD;AAAA,EACA,cAAc;AAAA,EACd,iBAAiB;AAAA,EAEjB;AAAA,EACA,aAAa;AACf,MAAM;AAIJ,QAAM,SAASA,UAAAA,UAAA;AACf,QAAM,cACJ,oBAAoB,SAChB,kBACA,OAAO,aAAa,IAClB,OAAO,cACP;AAER,SACEC,gCAACC,SAAAA,OAAI,IACH,UAAA;AAAA,IAAAC,2BAAAA,IAACC,SAAAA,SAAA,EAAW,YAAY,aAAa,aAA0B,kBAAkB,gBAC9E,UAAA,SAAS,IAAI,CAAC,OAAO,QAAQ;AAC5B,YAAM,EAAE,OAAO,WAAW,UAAU,WAAW,IAAI,QAAQ,UAAU,gBAAgB,mBAAmB,cAAA,IAAkB,MAAM;AAChI,4CACGC,eAAA,EAAkB,WAAsB,UAAoB,WAAsB,IAAI,QACrF,UAAAF,2BAAAA;AAAAA,QAACG,SAAAA;AAAAA,QAAA;AAAA,UAAa,IAAI;AAAA,YAChB,eAAe;AAAA,YACf,uBAAuB;AAAA,cACrB,OAAO;AAAA,YAAA;AAAA,YAET,yBAAyB;AAAA,cACvB,OAAO;AAAA,YAAA;AAAA,YAET,4BAA4B;AAAA,cAC1B,OAAO;AAAA,YAAA;AAAA,YAET,uBAAuB;AAAA,cACrB,MAAM;AAAA,YAAA;AAAA,UACR;AAAA,UAEA,UAAA;AAAA,QAAA;AAAA,MAAA,KAhBU,GAkBd;AAAA,IAEJ,CAAC,EAAA,CACH;AAAA,IACAH,2BAAAA,IAACD,SAAAA,KAAA,EAAI,IAAI,GACN,UAAA,SAAS;AAAA,MAAI,CAAC,OAAO,QACpB,QAAQ,cAAcC,2BAAAA,IAACD,SAAAA,KAAA,EAAe,UAAA,MAAM,MAAM,SAAA,GAAlB,GAA2B,IAAS;AAAA,IAAA,EACtE,CACF;AAAA,EAAA,GACF;AAEJ;ACxDO,MAAM,OAAO,CAAC,MAAuB;AAE5C,KAAK,cAAc;;;"}
|
|
1
|
+
{"version":3,"file":"Stepper.cjs","sources":["../../../src/components/Stepper/Stepper.tsx","../../../src/components/Stepper/Step.tsx"],"sourcesContent":["import React, { ReactElement, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n Stepper as MuiStepper,\n Step as MuiStep,\n StepLabel as MuiStepLabel,\n Box,\n IconButton,\n} from \"@mui/material\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport { StepProps } from \"./Step\";\nimport { useWizard } from \"../../hooks/Wizard\";\n\ninterface MyStepperProps {\n children: ReactElement<StepProps>[];\n orientation?: \"horizontal\" | \"vertical\";\n sx?: object;\n alternateLabel?: boolean;\n /**\n * Índice 0-based del paso activo. Si no se provee, el Stepper intenta\n * leerlo del `WizardContext` (si está dentro de un `<WizardProvider>`).\n * Si tampoco hay provider, el default es 0.\n */\n currentStep?: number;\n}\n\nexport const Stepper: React.FC<MyStepperProps> = ({\n children,\n orientation = \"horizontal\",\n alternateLabel = false,\n\n sx,\n currentStep: currentStepProp,\n}) => {\n // Lee el paso desde el WizardContext cuando el consumer no lo pasa como prop.\n // Si el Stepper NO está dentro de un WizardProvider, `useWizard()` devuelve\n // el valor default (currentStep=0, totalSteps=0), así que no rompe nada.\n const wizard = useWizard();\n const currentStep =\n currentStepProp !== undefined\n ? currentStepProp\n : wizard.totalSteps > 0\n ? wizard.currentStep\n : 0;\n\n const isHorizontal = orientation === \"horizontal\";\n\n // Scroll horizontal con flechitas cuando los steps no caben.\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const updateScrollState = () => {\n const el = scrollRef.current;\n if (!el) return;\n const { scrollLeft, scrollWidth, clientWidth } = el;\n // Tolerancia de 1px por redondeos de subpixel.\n setCanScrollLeft(scrollLeft > 1);\n setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n };\n\n useLayoutEffect(() => {\n if (!isHorizontal) return;\n updateScrollState();\n }, [isHorizontal, children.length, currentStep]);\n\n useEffect(() => {\n if (!isHorizontal) return;\n const el = scrollRef.current;\n if (!el) return;\n const onScroll = () => updateScrollState();\n el.addEventListener(\"scroll\", onScroll, { passive: true });\n const ro = new ResizeObserver(() => updateScrollState());\n ro.observe(el);\n return () => {\n el.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n };\n }, [isHorizontal]);\n\n const scrollBy = (delta: number) => {\n const el = scrollRef.current;\n if (!el) return;\n el.scrollBy({ left: delta, behavior: \"smooth\" });\n };\n\n const showArrows = isHorizontal && (canScrollLeft || canScrollRight);\n\n return (\n <Box sx={sx}>\n {/*\n En horizontal envolvemos el MuiStepper en un Box con `overflowX: auto`\n y flechitas `<` `>` a los costados para navegar cuando los steps no\n caben en el contenedor. Mantenemos el scroll nativo (rueda / swipe)\n y ocultamos la scrollbar visual.\n */}\n <Box\n sx={\n isHorizontal\n ? {\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n gap: 0.5,\n }\n : undefined\n }\n >\n {isHorizontal && (\n <IconButton\n aria-label=\"Anterior\"\n size=\"small\"\n onClick={() => scrollBy(-160)}\n disabled={!canScrollLeft}\n sx={{\n flex: \"0 0 auto\",\n // Reservamos el slot siempre que haya overflow en algún lado,\n // así el área scroll tiene un ancho estable (no saltan los\n // steps cuando aparece/desaparece la flecha).\n visibility: showArrows ? \"visible\" : \"hidden\",\n }}\n >\n <ChevronLeftIcon fontSize=\"small\" />\n </IconButton>\n )}\n <Box\n ref={scrollRef}\n sx={\n isHorizontal\n ? {\n flex: \"1 1 auto\",\n minWidth: 0,\n overflowX: \"auto\",\n scrollBehavior: \"smooth\",\n WebkitOverflowScrolling: \"touch\",\n // Ocultamos la scrollbar (la navegación es con flechas)\n scrollbarWidth: \"none\",\n \"&::-webkit-scrollbar\": { display: \"none\" },\n }\n : undefined\n }\n >\n <MuiStepper\n activeStep={currentStep}\n orientation={orientation}\n alternativeLabel={alternateLabel}\n sx={\n isHorizontal\n ? {\n display: \"inline-flex\",\n flexWrap: \"nowrap\",\n minWidth: \"100%\",\n width: \"max-content\",\n // Evita que los steps se compriman al punto de solaparse.\n \"& .MuiStep-root\": { flex: \"0 0 auto\", minWidth: 120 },\n }\n : undefined\n }\n >\n {children.map((child, idx) => {\n const { label, completed, disabled, className, sx: stepSx, dotColor, activeDotColor, completedDotColor, iconTextColor } = child.props;\n return (\n <MuiStep key={idx} completed={completed} disabled={disabled} className={className} sx={stepSx}>\n <MuiStepLabel sx={{\n pointerEvents: 'none',\n \"& .MuiStepIcon-root\": {\n color: dotColor,\n },\n \"& .MuiStepIcon-active\": {\n color: activeDotColor,\n },\n \"& .MuiStepIcon-completed\": {\n color: completedDotColor,\n },\n \"& .MuiStepIcon-text\": {\n fill: iconTextColor,\n },\n }}\n >{label}\n </MuiStepLabel>\n </MuiStep>\n );\n })}\n </MuiStepper>\n </Box>\n {isHorizontal && (\n <IconButton\n aria-label=\"Siguiente\"\n size=\"small\"\n onClick={() => scrollBy(160)}\n disabled={!canScrollRight}\n sx={{\n flex: \"0 0 auto\",\n visibility: showArrows ? \"visible\" : \"hidden\",\n }}\n >\n <ChevronRightIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n <Box mt={2}>\n {children.map((child, idx) =>\n idx === currentStep ? <Box key={idx}>{child.props.children}</Box> : null\n )}\n </Box>\n </Box>\n );\n};\n\nexport default Stepper;","import React from \"react\";\nimport { StepProps as MuiStepProps } from \"@mui/material\";\n\ntype PickMuiStepProps = Pick<MuiStepProps, \"completed\" | \"disabled\" | \"sx\" | \"className\">;\n\nexport interface StepProps extends PickMuiStepProps {\n label: React.ReactNode;\n children?: React.ReactNode;\n disabled?: boolean;\n sx?: object;\n dotColor?: string; // dot base\n activeDotColor?: string; // dot activa\n completedDotColor?: string; // dot completada\n iconTextColor?: string; // número o check dentro\n}\n\nexport const Step = (_: StepProps): null => null;\n\nStep.displayName = \"Step\";\n\nexport default Step;"],"names":["useWizard","useRef","useState","useLayoutEffect","useEffect","jsxs","Box","jsx","IconButton","MuiStepper","MuiStep","MuiStepLabel"],"mappings":";;;;;;;;AA0BO,MAAM,UAAoC,CAAC;AAAA,EAChD;AAAA,EACA,cAAc;AAAA,EACd,iBAAiB;AAAA,EAEjB;AAAA,EACA,aAAa;AACf,MAAM;AAIJ,QAAM,SAASA,UAAAA,UAAA;AACf,QAAM,cACJ,oBAAoB,SAChB,kBACA,OAAO,aAAa,IAClB,OAAO,cACP;AAER,QAAM,eAAe,gBAAgB;AAGrC,QAAM,YAAYC,MAAAA,OAA8B,IAAI;AACpD,QAAM,CAAC,eAAe,gBAAgB,IAAIC,MAAAA,SAAS,KAAK;AACxD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,MAAAA,SAAS,KAAK;AAE1D,QAAM,oBAAoB,MAAM;AAC9B,UAAM,KAAK,UAAU;AACrB,QAAI,CAAC,GAAI;AACT,UAAM,EAAE,YAAY,aAAa,YAAA,IAAgB;AAEjD,qBAAiB,aAAa,CAAC;AAC/B,sBAAkB,aAAa,cAAc,cAAc,CAAC;AAAA,EAC9D;AAEAC,QAAAA,gBAAgB,MAAM;AACpB,QAAI,CAAC,aAAc;AACnB,sBAAA;AAAA,EACF,GAAG,CAAC,cAAc,SAAS,QAAQ,WAAW,CAAC;AAE/CC,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,aAAc;AACnB,UAAM,KAAK,UAAU;AACrB,QAAI,CAAC,GAAI;AACT,UAAM,WAAW,MAAM,kBAAA;AACvB,OAAG,iBAAiB,UAAU,UAAU,EAAE,SAAS,MAAM;AACzD,UAAM,KAAK,IAAI,eAAe,MAAM,mBAAmB;AACvD,OAAG,QAAQ,EAAE;AACb,WAAO,MAAM;AACX,SAAG,oBAAoB,UAAU,QAAQ;AACzC,SAAG,WAAA;AAAA,IACL;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,WAAW,CAAC,UAAkB;AAClC,UAAM,KAAK,UAAU;AACrB,QAAI,CAAC,GAAI;AACT,OAAG,SAAS,EAAE,MAAM,OAAO,UAAU,UAAU;AAAA,EACjD;AAEA,QAAM,aAAa,iBAAiB,iBAAiB;AAErD,SACEC,gCAACC,SAAAA,OAAI,IAOH,UAAA;AAAA,IAAAD,2BAAAA;AAAAA,MAACC,SAAAA;AAAAA,MAAA;AAAA,QACC,IACE,eACI;AAAA,UACE,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,KAAK;AAAA,QAAA,IAEP;AAAA,QAGL,UAAA;AAAA,UAAA,gBACCC,2BAAAA;AAAAA,YAACC,SAAAA;AAAAA,YAAA;AAAA,cACC,cAAW;AAAA,cACX,MAAK;AAAA,cACL,SAAS,MAAM,SAAS,IAAI;AAAA,cAC5B,UAAU,CAAC;AAAA,cACX,IAAI;AAAA,gBACF,MAAM;AAAA;AAAA;AAAA;AAAA,gBAIN,YAAY,aAAa,YAAY;AAAA,cAAA;AAAA,cAGvC,UAAAD,2BAAAA,IAAC,iBAAA,EAAgB,UAAS,QAAA,CAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,UAGxCA,2BAAAA;AAAAA,YAACD,SAAAA;AAAAA,YAAA;AAAA,cACC,KAAK;AAAA,cACL,IACE,eACI;AAAA,gBACE,MAAM;AAAA,gBACN,UAAU;AAAA,gBACV,WAAW;AAAA,gBACX,gBAAgB;AAAA,gBAChB,yBAAyB;AAAA;AAAA,gBAEzB,gBAAgB;AAAA,gBAChB,wBAAwB,EAAE,SAAS,OAAA;AAAA,cAAO,IAE5C;AAAA,cAGN,UAAAC,2BAAAA;AAAAA,gBAACE,SAAAA;AAAAA,gBAAA;AAAA,kBACC,YAAY;AAAA,kBACZ;AAAA,kBACA,kBAAkB;AAAA,kBAClB,IACE,eACI;AAAA,oBACE,SAAS;AAAA,oBACT,UAAU;AAAA,oBACV,UAAU;AAAA,oBACV,OAAO;AAAA;AAAA,oBAEP,mBAAmB,EAAE,MAAM,YAAY,UAAU,IAAA;AAAA,kBAAI,IAEvD;AAAA,kBAGP,UAAA,SAAS,IAAI,CAAC,OAAO,QAAQ;AAC5B,0BAAM,EAAE,OAAO,WAAW,UAAU,WAAW,IAAI,QAAQ,UAAU,gBAAgB,mBAAmB,cAAA,IAAkB,MAAM;AAChI,0DACGC,eAAA,EAAkB,WAAsB,UAAoB,WAAsB,IAAI,QACrF,UAAAH,2BAAAA;AAAAA,sBAACI,SAAAA;AAAAA,sBAAA;AAAA,wBAAa,IAAI;AAAA,0BAChB,eAAe;AAAA,0BACf,uBAAuB;AAAA,4BACrB,OAAO;AAAA,0BAAA;AAAA,0BAET,yBAAyB;AAAA,4BACvB,OAAO;AAAA,0BAAA;AAAA,0BAET,4BAA4B;AAAA,4BAC1B,OAAO;AAAA,0BAAA;AAAA,0BAET,uBAAuB;AAAA,4BACrB,MAAM;AAAA,0BAAA;AAAA,wBACR;AAAA,wBAEA,UAAA;AAAA,sBAAA;AAAA,oBAAA,KAhBU,GAkBd;AAAA,kBAEJ,CAAC;AAAA,gBAAA;AAAA,cAAA;AAAA,YACD;AAAA,UAAA;AAAA,UAEC,gBACCJ,2BAAAA;AAAAA,YAACC,SAAAA;AAAAA,YAAA;AAAA,cACC,cAAW;AAAA,cACX,MAAK;AAAA,cACL,SAAS,MAAM,SAAS,GAAG;AAAA,cAC3B,UAAU,CAAC;AAAA,cACX,IAAI;AAAA,gBACF,MAAM;AAAA,gBACN,YAAY,aAAa,YAAY;AAAA,cAAA;AAAA,cAGvC,UAAAD,2BAAAA,IAAC,kBAAA,EAAiB,UAAS,QAAA,CAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACrC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJA,2BAAAA,IAACD,SAAAA,KAAA,EAAI,IAAI,GACN,UAAA,SAAS;AAAA,MAAI,CAAC,OAAO,QACpB,QAAQ,cAAcC,2BAAAA,IAACD,SAAAA,KAAA,EAAe,UAAA,MAAM,MAAM,SAAA,GAAlB,GAA2B,IAAS;AAAA,IAAA,EACtE,CACF;AAAA,EAAA,GACF;AAEJ;AC/LO,MAAM,OAAO,CAAC,MAAuB;AAE5C,KAAK,cAAc;;;"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useRef, useState, useLayoutEffect, useEffect } from "react";
|
|
3
|
+
import { Box, IconButton, Stepper as Stepper$1, Step as Step$1, StepLabel } from "@mui/material";
|
|
4
|
+
import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
|
|
5
|
+
import ChevronRightIcon from "@mui/icons-material/ChevronRight";
|
|
3
6
|
import { u as useWizard } from "../../useWizard-CWq--C3o.js";
|
|
4
7
|
const Stepper = ({
|
|
5
8
|
children,
|
|
@@ -10,31 +13,141 @@ const Stepper = ({
|
|
|
10
13
|
}) => {
|
|
11
14
|
const wizard = useWizard();
|
|
12
15
|
const currentStep = currentStepProp !== void 0 ? currentStepProp : wizard.totalSteps > 0 ? wizard.currentStep : 0;
|
|
16
|
+
const isHorizontal = orientation === "horizontal";
|
|
17
|
+
const scrollRef = useRef(null);
|
|
18
|
+
const [canScrollLeft, setCanScrollLeft] = useState(false);
|
|
19
|
+
const [canScrollRight, setCanScrollRight] = useState(false);
|
|
20
|
+
const updateScrollState = () => {
|
|
21
|
+
const el = scrollRef.current;
|
|
22
|
+
if (!el) return;
|
|
23
|
+
const { scrollLeft, scrollWidth, clientWidth } = el;
|
|
24
|
+
setCanScrollLeft(scrollLeft > 1);
|
|
25
|
+
setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);
|
|
26
|
+
};
|
|
27
|
+
useLayoutEffect(() => {
|
|
28
|
+
if (!isHorizontal) return;
|
|
29
|
+
updateScrollState();
|
|
30
|
+
}, [isHorizontal, children.length, currentStep]);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!isHorizontal) return;
|
|
33
|
+
const el = scrollRef.current;
|
|
34
|
+
if (!el) return;
|
|
35
|
+
const onScroll = () => updateScrollState();
|
|
36
|
+
el.addEventListener("scroll", onScroll, { passive: true });
|
|
37
|
+
const ro = new ResizeObserver(() => updateScrollState());
|
|
38
|
+
ro.observe(el);
|
|
39
|
+
return () => {
|
|
40
|
+
el.removeEventListener("scroll", onScroll);
|
|
41
|
+
ro.disconnect();
|
|
42
|
+
};
|
|
43
|
+
}, [isHorizontal]);
|
|
44
|
+
const scrollBy = (delta) => {
|
|
45
|
+
const el = scrollRef.current;
|
|
46
|
+
if (!el) return;
|
|
47
|
+
el.scrollBy({ left: delta, behavior: "smooth" });
|
|
48
|
+
};
|
|
49
|
+
const showArrows = isHorizontal && (canScrollLeft || canScrollRight);
|
|
13
50
|
return /* @__PURE__ */ jsxs(Box, { sx, children: [
|
|
14
|
-
/* @__PURE__ */
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
51
|
+
/* @__PURE__ */ jsxs(
|
|
52
|
+
Box,
|
|
53
|
+
{
|
|
54
|
+
sx: isHorizontal ? {
|
|
55
|
+
display: "flex",
|
|
56
|
+
alignItems: "center",
|
|
57
|
+
width: "100%",
|
|
58
|
+
gap: 0.5
|
|
59
|
+
} : void 0,
|
|
60
|
+
children: [
|
|
61
|
+
isHorizontal && /* @__PURE__ */ jsx(
|
|
62
|
+
IconButton,
|
|
63
|
+
{
|
|
64
|
+
"aria-label": "Anterior",
|
|
65
|
+
size: "small",
|
|
66
|
+
onClick: () => scrollBy(-160),
|
|
67
|
+
disabled: !canScrollLeft,
|
|
68
|
+
sx: {
|
|
69
|
+
flex: "0 0 auto",
|
|
70
|
+
// Reservamos el slot siempre que haya overflow en algún lado,
|
|
71
|
+
// así el área scroll tiene un ancho estable (no saltan los
|
|
72
|
+
// steps cuando aparece/desaparece la flecha).
|
|
73
|
+
visibility: showArrows ? "visible" : "hidden"
|
|
74
|
+
},
|
|
75
|
+
children: /* @__PURE__ */ jsx(ChevronLeftIcon, { fontSize: "small" })
|
|
32
76
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
Box,
|
|
80
|
+
{
|
|
81
|
+
ref: scrollRef,
|
|
82
|
+
sx: isHorizontal ? {
|
|
83
|
+
flex: "1 1 auto",
|
|
84
|
+
minWidth: 0,
|
|
85
|
+
overflowX: "auto",
|
|
86
|
+
scrollBehavior: "smooth",
|
|
87
|
+
WebkitOverflowScrolling: "touch",
|
|
88
|
+
// Ocultamos la scrollbar (la navegación es con flechas)
|
|
89
|
+
scrollbarWidth: "none",
|
|
90
|
+
"&::-webkit-scrollbar": { display: "none" }
|
|
91
|
+
} : void 0,
|
|
92
|
+
children: /* @__PURE__ */ jsx(
|
|
93
|
+
Stepper$1,
|
|
94
|
+
{
|
|
95
|
+
activeStep: currentStep,
|
|
96
|
+
orientation,
|
|
97
|
+
alternativeLabel: alternateLabel,
|
|
98
|
+
sx: isHorizontal ? {
|
|
99
|
+
display: "inline-flex",
|
|
100
|
+
flexWrap: "nowrap",
|
|
101
|
+
minWidth: "100%",
|
|
102
|
+
width: "max-content",
|
|
103
|
+
// Evita que los steps se compriman al punto de solaparse.
|
|
104
|
+
"& .MuiStep-root": { flex: "0 0 auto", minWidth: 120 }
|
|
105
|
+
} : void 0,
|
|
106
|
+
children: children.map((child, idx) => {
|
|
107
|
+
const { label, completed, disabled, className, sx: stepSx, dotColor, activeDotColor, completedDotColor, iconTextColor } = child.props;
|
|
108
|
+
return /* @__PURE__ */ jsx(Step$1, { completed, disabled, className, sx: stepSx, children: /* @__PURE__ */ jsx(
|
|
109
|
+
StepLabel,
|
|
110
|
+
{
|
|
111
|
+
sx: {
|
|
112
|
+
pointerEvents: "none",
|
|
113
|
+
"& .MuiStepIcon-root": {
|
|
114
|
+
color: dotColor
|
|
115
|
+
},
|
|
116
|
+
"& .MuiStepIcon-active": {
|
|
117
|
+
color: activeDotColor
|
|
118
|
+
},
|
|
119
|
+
"& .MuiStepIcon-completed": {
|
|
120
|
+
color: completedDotColor
|
|
121
|
+
},
|
|
122
|
+
"& .MuiStepIcon-text": {
|
|
123
|
+
fill: iconTextColor
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
children: label
|
|
127
|
+
}
|
|
128
|
+
) }, idx);
|
|
129
|
+
})
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
),
|
|
134
|
+
isHorizontal && /* @__PURE__ */ jsx(
|
|
135
|
+
IconButton,
|
|
136
|
+
{
|
|
137
|
+
"aria-label": "Siguiente",
|
|
138
|
+
size: "small",
|
|
139
|
+
onClick: () => scrollBy(160),
|
|
140
|
+
disabled: !canScrollRight,
|
|
141
|
+
sx: {
|
|
142
|
+
flex: "0 0 auto",
|
|
143
|
+
visibility: showArrows ? "visible" : "hidden"
|
|
144
|
+
},
|
|
145
|
+
children: /* @__PURE__ */ jsx(ChevronRightIcon, { fontSize: "small" })
|
|
146
|
+
}
|
|
147
|
+
)
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
),
|
|
38
151
|
/* @__PURE__ */ jsx(Box, { mt: 2, children: children.map(
|
|
39
152
|
(child, idx) => idx === currentStep ? /* @__PURE__ */ jsx(Box, { children: child.props.children }, idx) : null
|
|
40
153
|
) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stepper.js","sources":["../../../src/components/Stepper/Stepper.tsx","../../../src/components/Stepper/Step.tsx"],"sourcesContent":["import React, { ReactElement } from \"react\";\nimport { Stepper as MuiStepper, Step as MuiStep, StepLabel as MuiStepLabel, Box } from \"@mui/material\";\nimport { StepProps } from \"./Step\";\nimport { useWizard } from \"../../hooks/Wizard\";\n\ninterface MyStepperProps {\n children: ReactElement<StepProps>[];\n orientation?: \"horizontal\" | \"vertical\";\n sx?: object;\n alternateLabel?: boolean;\n /**\n * Índice 0-based del paso activo. Si no se provee, el Stepper intenta\n * leerlo del `WizardContext` (si está dentro de un `<WizardProvider>`).\n * Si tampoco hay provider, el default es 0.\n */\n currentStep?: number;\n}\n\nexport const Stepper: React.FC<MyStepperProps> = ({\n children,\n orientation = \"horizontal\",\n alternateLabel = false,\n\n sx,\n currentStep: currentStepProp,\n}) => {\n // Lee el paso desde el WizardContext cuando el consumer no lo pasa como prop.\n // Si el Stepper NO está dentro de un WizardProvider, `useWizard()` devuelve\n // el valor default (currentStep=0, totalSteps=0), así que no rompe nada.\n const wizard = useWizard();\n const currentStep =\n currentStepProp !== undefined\n ? currentStepProp\n : wizard.totalSteps > 0\n ? wizard.currentStep\n : 0;\n\n return (\n <Box sx={sx}>\n <MuiStepper activeStep={currentStep} orientation={orientation} alternativeLabel={alternateLabel} >\n {children.map((child, idx) => {\n const { label, completed, disabled, className, sx: stepSx, dotColor, activeDotColor, completedDotColor, iconTextColor } = child.props;\n return (\n <MuiStep key={idx} completed={completed} disabled={disabled} className={className} sx={stepSx}>\n <MuiStepLabel sx={{\n pointerEvents: 'none',\n \"& .MuiStepIcon-root\": {\n color: dotColor,\n },\n \"& .MuiStepIcon-active\": {\n color: activeDotColor,\n },\n \"& .MuiStepIcon-completed\": {\n color: completedDotColor,\n },\n \"& .MuiStepIcon-text\": {\n fill: iconTextColor,\n },\n }}\n >{label}\n </MuiStepLabel>\n </MuiStep>\n );\n })}\n </MuiStepper>\n <Box mt={2}>\n {children.map((child, idx) =>\n idx === currentStep ? <Box key={idx}>{child.props.children}</Box> : null\n )}\n </Box>\n </Box>\n );\n};\n\nexport default Stepper;","import React from \"react\";\nimport { StepProps as MuiStepProps } from \"@mui/material\";\n\ntype PickMuiStepProps = Pick<MuiStepProps, \"completed\" | \"disabled\" | \"sx\" | \"className\">;\n\nexport interface StepProps extends PickMuiStepProps {\n label: React.ReactNode;\n children?: React.ReactNode;\n disabled?: boolean;\n sx?: object;\n dotColor?: string; // dot base\n activeDotColor?: string; // dot activa\n completedDotColor?: string; // dot completada\n iconTextColor?: string; // número o check dentro\n}\n\nexport const Step = (_: StepProps): null => null;\n\nStep.displayName = \"Step\";\n\nexport default Step;"],"names":["MuiStepper","MuiStep","MuiStepLabel"],"mappings":";;;AAkBO,MAAM,UAAoC,CAAC;AAAA,EAChD;AAAA,EACA,cAAc;AAAA,EACd,iBAAiB;AAAA,EAEjB;AAAA,EACA,aAAa;AACf,MAAM;AAIJ,QAAM,SAAS,UAAA;AACf,QAAM,cACJ,oBAAoB,SAChB,kBACA,OAAO,aAAa,IAClB,OAAO,cACP;AAER,SACE,qBAAC,OAAI,IACH,UAAA;AAAA,IAAA,oBAACA,WAAA,EAAW,YAAY,aAAa,aAA0B,kBAAkB,gBAC9E,UAAA,SAAS,IAAI,CAAC,OAAO,QAAQ;AAC5B,YAAM,EAAE,OAAO,WAAW,UAAU,WAAW,IAAI,QAAQ,UAAU,gBAAgB,mBAAmB,cAAA,IAAkB,MAAM;AAChI,iCACGC,QAAA,EAAkB,WAAsB,UAAoB,WAAsB,IAAI,QACrF,UAAA;AAAA,QAACC;AAAAA,QAAA;AAAA,UAAa,IAAI;AAAA,YAChB,eAAe;AAAA,YACf,uBAAuB;AAAA,cACrB,OAAO;AAAA,YAAA;AAAA,YAET,yBAAyB;AAAA,cACvB,OAAO;AAAA,YAAA;AAAA,YAET,4BAA4B;AAAA,cAC1B,OAAO;AAAA,YAAA;AAAA,YAET,uBAAuB;AAAA,cACrB,MAAM;AAAA,YAAA;AAAA,UACR;AAAA,UAEA,UAAA;AAAA,QAAA;AAAA,MAAA,KAhBU,GAkBd;AAAA,IAEJ,CAAC,EAAA,CACH;AAAA,IACA,oBAAC,KAAA,EAAI,IAAI,GACN,UAAA,SAAS;AAAA,MAAI,CAAC,OAAO,QACpB,QAAQ,cAAc,oBAAC,KAAA,EAAe,UAAA,MAAM,MAAM,SAAA,GAAlB,GAA2B,IAAS;AAAA,IAAA,EACtE,CACF;AAAA,EAAA,GACF;AAEJ;ACxDO,MAAM,OAAO,CAAC,MAAuB;AAE5C,KAAK,cAAc;"}
|
|
1
|
+
{"version":3,"file":"Stepper.js","sources":["../../../src/components/Stepper/Stepper.tsx","../../../src/components/Stepper/Step.tsx"],"sourcesContent":["import React, { ReactElement, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport {\n Stepper as MuiStepper,\n Step as MuiStep,\n StepLabel as MuiStepLabel,\n Box,\n IconButton,\n} from \"@mui/material\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport { StepProps } from \"./Step\";\nimport { useWizard } from \"../../hooks/Wizard\";\n\ninterface MyStepperProps {\n children: ReactElement<StepProps>[];\n orientation?: \"horizontal\" | \"vertical\";\n sx?: object;\n alternateLabel?: boolean;\n /**\n * Índice 0-based del paso activo. Si no se provee, el Stepper intenta\n * leerlo del `WizardContext` (si está dentro de un `<WizardProvider>`).\n * Si tampoco hay provider, el default es 0.\n */\n currentStep?: number;\n}\n\nexport const Stepper: React.FC<MyStepperProps> = ({\n children,\n orientation = \"horizontal\",\n alternateLabel = false,\n\n sx,\n currentStep: currentStepProp,\n}) => {\n // Lee el paso desde el WizardContext cuando el consumer no lo pasa como prop.\n // Si el Stepper NO está dentro de un WizardProvider, `useWizard()` devuelve\n // el valor default (currentStep=0, totalSteps=0), así que no rompe nada.\n const wizard = useWizard();\n const currentStep =\n currentStepProp !== undefined\n ? currentStepProp\n : wizard.totalSteps > 0\n ? wizard.currentStep\n : 0;\n\n const isHorizontal = orientation === \"horizontal\";\n\n // Scroll horizontal con flechitas cuando los steps no caben.\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const updateScrollState = () => {\n const el = scrollRef.current;\n if (!el) return;\n const { scrollLeft, scrollWidth, clientWidth } = el;\n // Tolerancia de 1px por redondeos de subpixel.\n setCanScrollLeft(scrollLeft > 1);\n setCanScrollRight(scrollLeft + clientWidth < scrollWidth - 1);\n };\n\n useLayoutEffect(() => {\n if (!isHorizontal) return;\n updateScrollState();\n }, [isHorizontal, children.length, currentStep]);\n\n useEffect(() => {\n if (!isHorizontal) return;\n const el = scrollRef.current;\n if (!el) return;\n const onScroll = () => updateScrollState();\n el.addEventListener(\"scroll\", onScroll, { passive: true });\n const ro = new ResizeObserver(() => updateScrollState());\n ro.observe(el);\n return () => {\n el.removeEventListener(\"scroll\", onScroll);\n ro.disconnect();\n };\n }, [isHorizontal]);\n\n const scrollBy = (delta: number) => {\n const el = scrollRef.current;\n if (!el) return;\n el.scrollBy({ left: delta, behavior: \"smooth\" });\n };\n\n const showArrows = isHorizontal && (canScrollLeft || canScrollRight);\n\n return (\n <Box sx={sx}>\n {/*\n En horizontal envolvemos el MuiStepper en un Box con `overflowX: auto`\n y flechitas `<` `>` a los costados para navegar cuando los steps no\n caben en el contenedor. Mantenemos el scroll nativo (rueda / swipe)\n y ocultamos la scrollbar visual.\n */}\n <Box\n sx={\n isHorizontal\n ? {\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n gap: 0.5,\n }\n : undefined\n }\n >\n {isHorizontal && (\n <IconButton\n aria-label=\"Anterior\"\n size=\"small\"\n onClick={() => scrollBy(-160)}\n disabled={!canScrollLeft}\n sx={{\n flex: \"0 0 auto\",\n // Reservamos el slot siempre que haya overflow en algún lado,\n // así el área scroll tiene un ancho estable (no saltan los\n // steps cuando aparece/desaparece la flecha).\n visibility: showArrows ? \"visible\" : \"hidden\",\n }}\n >\n <ChevronLeftIcon fontSize=\"small\" />\n </IconButton>\n )}\n <Box\n ref={scrollRef}\n sx={\n isHorizontal\n ? {\n flex: \"1 1 auto\",\n minWidth: 0,\n overflowX: \"auto\",\n scrollBehavior: \"smooth\",\n WebkitOverflowScrolling: \"touch\",\n // Ocultamos la scrollbar (la navegación es con flechas)\n scrollbarWidth: \"none\",\n \"&::-webkit-scrollbar\": { display: \"none\" },\n }\n : undefined\n }\n >\n <MuiStepper\n activeStep={currentStep}\n orientation={orientation}\n alternativeLabel={alternateLabel}\n sx={\n isHorizontal\n ? {\n display: \"inline-flex\",\n flexWrap: \"nowrap\",\n minWidth: \"100%\",\n width: \"max-content\",\n // Evita que los steps se compriman al punto de solaparse.\n \"& .MuiStep-root\": { flex: \"0 0 auto\", minWidth: 120 },\n }\n : undefined\n }\n >\n {children.map((child, idx) => {\n const { label, completed, disabled, className, sx: stepSx, dotColor, activeDotColor, completedDotColor, iconTextColor } = child.props;\n return (\n <MuiStep key={idx} completed={completed} disabled={disabled} className={className} sx={stepSx}>\n <MuiStepLabel sx={{\n pointerEvents: 'none',\n \"& .MuiStepIcon-root\": {\n color: dotColor,\n },\n \"& .MuiStepIcon-active\": {\n color: activeDotColor,\n },\n \"& .MuiStepIcon-completed\": {\n color: completedDotColor,\n },\n \"& .MuiStepIcon-text\": {\n fill: iconTextColor,\n },\n }}\n >{label}\n </MuiStepLabel>\n </MuiStep>\n );\n })}\n </MuiStepper>\n </Box>\n {isHorizontal && (\n <IconButton\n aria-label=\"Siguiente\"\n size=\"small\"\n onClick={() => scrollBy(160)}\n disabled={!canScrollRight}\n sx={{\n flex: \"0 0 auto\",\n visibility: showArrows ? \"visible\" : \"hidden\",\n }}\n >\n <ChevronRightIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n <Box mt={2}>\n {children.map((child, idx) =>\n idx === currentStep ? <Box key={idx}>{child.props.children}</Box> : null\n )}\n </Box>\n </Box>\n );\n};\n\nexport default Stepper;","import React from \"react\";\nimport { StepProps as MuiStepProps } from \"@mui/material\";\n\ntype PickMuiStepProps = Pick<MuiStepProps, \"completed\" | \"disabled\" | \"sx\" | \"className\">;\n\nexport interface StepProps extends PickMuiStepProps {\n label: React.ReactNode;\n children?: React.ReactNode;\n disabled?: boolean;\n sx?: object;\n dotColor?: string; // dot base\n activeDotColor?: string; // dot activa\n completedDotColor?: string; // dot completada\n iconTextColor?: string; // número o check dentro\n}\n\nexport const Step = (_: StepProps): null => null;\n\nStep.displayName = \"Step\";\n\nexport default Step;"],"names":["MuiStepper","MuiStep","MuiStepLabel"],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
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
|
+
var __objRest = (source, exclude) => {
|
|
22
|
+
var target = {};
|
|
23
|
+
for (var prop in source)
|
|
24
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
25
|
+
target[prop] = source[prop];
|
|
26
|
+
if (source != null && __getOwnPropSymbols)
|
|
27
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
28
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
}
|
|
31
|
+
return target;
|
|
32
|
+
};
|
|
33
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
34
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
35
|
+
const styles = require("@mui/material/styles");
|
|
36
|
+
const material = require("@mui/material");
|
|
37
|
+
const reactHookForm = require("react-hook-form");
|
|
38
|
+
const resolvePreset = require("../../resolvePreset-CT3kU-K2.cjs");
|
|
39
|
+
const toRadius = (borderRadius) => typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius;
|
|
40
|
+
const FOCUS_TRANSITION = "border-color 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms, box-shadow 200ms cubic-bezier(0.0, 0, 0.2, 1) 0ms";
|
|
41
|
+
const buildSwitchSx = ({
|
|
42
|
+
bordered,
|
|
43
|
+
borderRadius,
|
|
44
|
+
hasLabel,
|
|
45
|
+
error
|
|
46
|
+
}) => {
|
|
47
|
+
const radius = toRadius(borderRadius);
|
|
48
|
+
if (!bordered) {
|
|
49
|
+
return {
|
|
50
|
+
"& .MuiFormHelperText-root": { marginLeft: 0 }
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return (theme) => ({
|
|
54
|
+
"& .MuiFormControlLabel-root": __spreadValues(__spreadProps(__spreadValues({
|
|
55
|
+
marginLeft: 0,
|
|
56
|
+
marginRight: 0,
|
|
57
|
+
paddingX: 1.5,
|
|
58
|
+
paddingY: 1.25,
|
|
59
|
+
border: `1px solid ${error ? theme.palette.error.main : theme.palette.divider}`,
|
|
60
|
+
borderRadius: radius,
|
|
61
|
+
transition: FOCUS_TRANSITION
|
|
62
|
+
}, error && {
|
|
63
|
+
boxShadow: `0 0 0 1px ${theme.palette.error.main}`
|
|
64
|
+
}), {
|
|
65
|
+
// Focus del usuario sobre el switch interno.
|
|
66
|
+
"&:focus-within": {
|
|
67
|
+
borderColor: error ? theme.palette.error.main : theme.palette.primary.main,
|
|
68
|
+
boxShadow: `0 0 0 1px ${error ? theme.palette.error.main : theme.palette.primary.main}`
|
|
69
|
+
}
|
|
70
|
+
}), hasLabel && {
|
|
71
|
+
width: "100%",
|
|
72
|
+
justifyContent: "space-between"
|
|
73
|
+
}),
|
|
74
|
+
"& .MuiFormHelperText-root": {
|
|
75
|
+
marginLeft: 0
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
const Switch = (props) => {
|
|
80
|
+
const _a = props, {
|
|
81
|
+
label,
|
|
82
|
+
size = "medium",
|
|
83
|
+
labelPlacement = "end",
|
|
84
|
+
disabled = false,
|
|
85
|
+
error = false,
|
|
86
|
+
helperText,
|
|
87
|
+
bordered = false,
|
|
88
|
+
borderRadius = 10,
|
|
89
|
+
defaultChecked,
|
|
90
|
+
preset,
|
|
91
|
+
sx
|
|
92
|
+
} = _a, rest = __objRest(_a, [
|
|
93
|
+
"label",
|
|
94
|
+
"size",
|
|
95
|
+
"labelPlacement",
|
|
96
|
+
"disabled",
|
|
97
|
+
"error",
|
|
98
|
+
"helperText",
|
|
99
|
+
"bordered",
|
|
100
|
+
"borderRadius",
|
|
101
|
+
"defaultChecked",
|
|
102
|
+
"preset",
|
|
103
|
+
"sx"
|
|
104
|
+
]);
|
|
105
|
+
const theme = styles.useTheme();
|
|
106
|
+
const presetSx = resolvePreset.resolvePreset("Switch", preset, theme);
|
|
107
|
+
const buildSx = (effectiveError) => [
|
|
108
|
+
buildSwitchSx({
|
|
109
|
+
bordered,
|
|
110
|
+
borderRadius,
|
|
111
|
+
hasLabel: !!label,
|
|
112
|
+
error: effectiveError
|
|
113
|
+
}),
|
|
114
|
+
...presetSx ? [presetSx] : [],
|
|
115
|
+
...Array.isArray(sx) ? sx : [sx]
|
|
116
|
+
];
|
|
117
|
+
const renderSwitch = (checked2, onChange2, onBlur, inputRef) => {
|
|
118
|
+
const switchEl = /* @__PURE__ */ jsxRuntime.jsx(
|
|
119
|
+
material.Switch,
|
|
120
|
+
__spreadProps(__spreadValues({}, rest), {
|
|
121
|
+
size,
|
|
122
|
+
checked: !!checked2,
|
|
123
|
+
onChange: (_e, next) => onChange2(next),
|
|
124
|
+
onBlur,
|
|
125
|
+
inputRef,
|
|
126
|
+
disabled
|
|
127
|
+
})
|
|
128
|
+
);
|
|
129
|
+
return label ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
130
|
+
material.FormControlLabel,
|
|
131
|
+
{
|
|
132
|
+
control: switchEl,
|
|
133
|
+
label,
|
|
134
|
+
labelPlacement,
|
|
135
|
+
disabled
|
|
136
|
+
}
|
|
137
|
+
) : switchEl;
|
|
138
|
+
};
|
|
139
|
+
if ("control" in props && props.control) {
|
|
140
|
+
const { name, control, validation } = props;
|
|
141
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
142
|
+
reactHookForm.Controller,
|
|
143
|
+
{
|
|
144
|
+
name,
|
|
145
|
+
control,
|
|
146
|
+
rules: validation,
|
|
147
|
+
defaultValue: defaultChecked,
|
|
148
|
+
render: ({ field, fieldState: { error: fieldError } }) => {
|
|
149
|
+
var _a2;
|
|
150
|
+
const finalError = !!fieldError || error;
|
|
151
|
+
const finalHelperText = (_a2 = fieldError == null ? void 0 : fieldError.message) != null ? _a2 : helperText;
|
|
152
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
153
|
+
material.FormControl,
|
|
154
|
+
{
|
|
155
|
+
error: finalError,
|
|
156
|
+
disabled,
|
|
157
|
+
sx: buildSx(finalError),
|
|
158
|
+
children: [
|
|
159
|
+
renderSwitch(
|
|
160
|
+
!!field.value,
|
|
161
|
+
(next) => field.onChange(next),
|
|
162
|
+
field.onBlur,
|
|
163
|
+
field.ref
|
|
164
|
+
),
|
|
165
|
+
finalHelperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: finalHelperText })
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
const { checked, onChange } = props;
|
|
174
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(material.FormControl, { error, disabled, sx: buildSx(error), children: [
|
|
175
|
+
renderSwitch(checked, onChange),
|
|
176
|
+
helperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: helperText })
|
|
177
|
+
] });
|
|
178
|
+
};
|
|
179
|
+
exports.Switch = Switch;
|
|
180
|
+
exports.default = Switch;
|
|
181
|
+
//# sourceMappingURL=Switch.cjs.map
|