@soyfri/shared-library 1.5.0 → 2.0.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/dist/components/ActionMenu/ActionMenu.cjs +107 -0
- package/dist/components/ActionMenu/ActionMenu.cjs.map +1 -0
- package/dist/components/ActionMenu/ActionMenu.d.ts +60 -0
- package/dist/components/ActionMenu/ActionMenu.js +107 -0
- package/dist/components/ActionMenu/ActionMenu.js.map +1 -0
- package/dist/components/ActionMenu/index.d.ts +2 -0
- package/dist/components/ActionMenu.d.ts +6 -0
- package/dist/components/AppBar/AppBar.cjs +346 -0
- package/dist/components/AppBar/AppBar.cjs.map +1 -0
- package/dist/components/AppBar/AppBar.d.ts +55 -0
- package/dist/components/AppBar/AppBar.js +346 -0
- package/dist/components/AppBar/AppBar.js.map +1 -0
- package/dist/components/AppBar/AppBar.sx.d.ts +12 -0
- package/dist/components/AppBar/AppBarBrand.d.ts +31 -0
- package/dist/components/AppBar/AppBarContext.d.ts +18 -0
- package/dist/components/AppBar/AppBarMenuToggle.d.ts +39 -0
- package/dist/components/AppBar/AppBarUserMenu.d.ts +65 -0
- package/dist/components/AppBar/index.d.ts +12 -0
- package/dist/components/AppBar.d.ts +6 -0
- package/dist/components/Autocomplete/Autocomplete.cjs +259 -54
- package/dist/components/Autocomplete/Autocomplete.cjs.map +1 -1
- package/dist/components/Autocomplete/Autocomplete.d.ts +64 -9
- package/dist/components/Autocomplete/Autocomplete.definitions.d.ts +6 -0
- package/dist/components/Autocomplete/Autocomplete.helpers.d.ts +18 -0
- package/dist/components/Autocomplete/Autocomplete.js +261 -56
- package/dist/components/Autocomplete/Autocomplete.js.map +1 -1
- package/dist/components/Autocomplete/Autocomplete.sx.d.ts +7 -0
- package/dist/components/Autocomplete/Autocomplete.types.d.ts +1 -0
- package/dist/components/Autocomplete/_parts/AutocompleteChips.d.ts +19 -0
- package/dist/components/Autocomplete/_parts/AutocompleteLoader.d.ts +9 -0
- package/dist/components/Autocomplete/_parts/AutocompleteOption.d.ts +19 -0
- package/dist/components/Autocomplete/index.d.ts +2 -1
- package/dist/components/Autocomplete.d.ts +4 -0
- package/dist/components/Avatar/Avatar.cjs +116 -79
- package/dist/components/Avatar/Avatar.cjs.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +16 -2
- package/dist/components/Avatar/Avatar.definitions.d.ts +11 -0
- package/dist/components/Avatar/Avatar.js +117 -80
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Card/Card.cjs +168 -9
- package/dist/components/Card/Card.cjs.map +1 -1
- package/dist/components/Card/Card.d.ts +78 -8
- package/dist/components/Card/Card.js +170 -11
- package/dist/components/Card/Card.js.map +1 -1
- package/dist/components/Card/Card.sx.d.ts +17 -0
- package/dist/components/Card/index.d.ts +4 -1
- package/dist/components/Card.d.ts +4 -0
- package/dist/components/DatePicker/DatePicker.cjs +201 -3
- package/dist/components/DatePicker/DatePicker.cjs.map +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +47 -9
- package/dist/components/DatePicker/DatePicker.definitions.d.ts +1 -0
- package/dist/components/DatePicker/DatePicker.helpers.d.ts +7 -0
- package/dist/components/DatePicker/DatePicker.js +200 -2
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.sx.d.ts +9 -0
- package/dist/components/DatePicker/DatePicker.types.d.ts +1 -0
- package/dist/components/DatePicker/index.d.ts +2 -1
- package/dist/components/DatePicker.d.ts +4 -0
- package/dist/components/DateTimePicker/DateTimePicker.cjs +152 -138
- package/dist/components/DateTimePicker/DateTimePicker.cjs.map +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.d.ts +46 -9
- package/dist/components/DateTimePicker/DateTimePicker.definitions.d.ts +1 -0
- package/dist/components/DateTimePicker/DateTimePicker.helpers.d.ts +11 -0
- package/dist/components/DateTimePicker/DateTimePicker.js +152 -138
- package/dist/components/DateTimePicker/DateTimePicker.js.map +1 -1
- package/dist/components/DateTimePicker/DateTimePicker.sx.d.ts +7 -0
- package/dist/components/DateTimePicker/DateTimePicker.types.d.ts +1 -0
- package/dist/components/DateTimePicker/index.d.ts +2 -1
- package/dist/components/DateTimePicker.d.ts +4 -0
- package/dist/components/Drawer/Drawer.cjs +271 -0
- package/dist/components/Drawer/Drawer.cjs.map +1 -0
- package/dist/components/Drawer/Drawer.d.ts +51 -0
- package/dist/components/Drawer/Drawer.js +271 -0
- package/dist/components/Drawer/Drawer.js.map +1 -0
- package/dist/components/Drawer/Drawer.sx.d.ts +23 -0
- package/dist/components/Drawer/DrawerContext.d.ts +18 -0
- package/dist/components/Drawer/DrawerItem.d.ts +35 -0
- package/dist/components/Drawer/index.d.ts +6 -0
- package/dist/components/Drawer.d.ts +6 -0
- package/dist/components/Icon/Icon.cjs +44 -3
- package/dist/components/Icon/Icon.cjs.map +1 -1
- package/dist/components/Icon/Icon.d.ts +34 -1
- package/dist/components/Icon/Icon.js +44 -3
- package/dist/components/Icon/Icon.js.map +1 -1
- package/dist/components/Input/Input.cjs +173 -3
- package/dist/components/Input/Input.cjs.map +1 -1
- package/dist/components/Input/Input.d.ts +20 -15
- package/dist/components/Input/Input.definitions.d.ts +5 -2
- package/dist/components/Input/Input.helpers.d.ts +14 -0
- package/dist/components/Input/Input.js +172 -2
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Input/Input.sx.d.ts +8 -0
- package/dist/components/Input/Input.types.d.ts +1 -0
- package/dist/components/Input/index.d.ts +2 -1
- package/dist/components/Input.d.ts +4 -0
- package/dist/components/InputGroup/InputGroup.cjs +104 -91
- package/dist/components/InputGroup/InputGroup.cjs.map +1 -1
- package/dist/components/InputGroup/InputGroup.d.ts +37 -1
- package/dist/components/InputGroup/InputGroup.definitions.d.ts +6 -0
- package/dist/components/InputGroup/InputGroup.js +106 -93
- package/dist/components/InputGroup/InputGroup.js.map +1 -1
- package/dist/components/Modal/Modal.cjs +226 -116
- package/dist/components/Modal/Modal.cjs.map +1 -1
- package/dist/components/Modal/Modal.d.ts +38 -2
- package/dist/components/Modal/Modal.js +227 -117
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/ModalFooter.d.ts +9 -1
- package/dist/components/Modal/index.d.ts +5 -0
- package/dist/components/PageLoader/PageLoader.cjs +61 -0
- package/dist/components/PageLoader/PageLoader.cjs.map +1 -0
- package/dist/components/PageLoader/PageLoader.d.ts +38 -0
- package/dist/components/PageLoader/PageLoader.js +61 -0
- package/dist/components/PageLoader/PageLoader.js.map +1 -0
- package/dist/components/PageLoader/index.d.ts +2 -0
- package/dist/components/PageLoader.d.ts +6 -0
- package/dist/components/ScrollTopButton/ScrollTopButton.cjs +79 -0
- package/dist/components/ScrollTopButton/ScrollTopButton.cjs.map +1 -0
- package/dist/components/ScrollTopButton/ScrollTopButton.d.ts +48 -0
- package/dist/components/ScrollTopButton/ScrollTopButton.js +79 -0
- package/dist/components/ScrollTopButton/ScrollTopButton.js.map +1 -0
- package/dist/components/ScrollTopButton/index.d.ts +4 -0
- package/dist/components/ScrollTopButton/scrollToTop.d.ts +29 -0
- package/dist/components/ScrollTopButton.d.ts +6 -0
- package/dist/components/Select/Select.cjs +446 -4
- package/dist/components/Select/Select.cjs.map +1 -1
- package/dist/components/Select/Select.d.ts +33 -13
- package/dist/components/Select/Select.definitions.d.ts +3 -0
- package/dist/components/Select/Select.helpers.d.ts +28 -0
- package/dist/components/Select/Select.js +445 -3
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/Select.sx.d.ts +7 -0
- package/dist/components/Select/Select.types.d.ts +1 -0
- package/dist/components/Select/_parts/SelectMenuItem.d.ts +20 -0
- package/dist/components/Select/_parts/SelectSearchHeader.d.ts +15 -0
- package/dist/components/Select/_parts/SelectValue.d.ts +22 -0
- package/dist/components/Select/index.d.ts +2 -1
- package/dist/components/Select.d.ts +4 -0
- package/dist/components/Stat/Stat.cjs +1 -1
- package/dist/components/Stat/Stat.js +1 -1
- package/dist/components/Stepper/Stepper.cjs +4 -1
- package/dist/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/components/Stepper/Stepper.d.ts +5 -0
- package/dist/components/Stepper/Stepper.js +4 -1
- package/dist/components/Stepper/Stepper.js.map +1 -1
- package/dist/components/_shared/formField.sx.d.ts +33 -0
- package/dist/components/_shared/resolvePreset.d.ts +18 -0
- package/dist/formField.sx-CQ1mbk9M.cjs +76 -0
- package/dist/formField.sx-CQ1mbk9M.cjs.map +1 -0
- package/dist/formField.sx-DfVbMe0V.js +77 -0
- package/dist/formField.sx-DfVbMe0V.js.map +1 -0
- package/dist/hooks/Wizard/Wizard.cjs +7 -0
- package/dist/hooks/Wizard/Wizard.cjs.map +1 -0
- package/dist/hooks/Wizard/Wizard.js +7 -0
- package/dist/hooks/Wizard/Wizard.js.map +1 -0
- package/dist/hooks/Wizard/WizardContext.d.ts +67 -0
- package/dist/hooks/Wizard/index.d.ts +3 -0
- package/dist/hooks/Wizard/useWizard.d.ts +9 -0
- package/dist/hooks/Wizard.d.ts +2 -0
- package/dist/index.cjs +99 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +31 -2
- package/dist/index.js.map +1 -1
- package/dist/mui.d.ts +5 -0
- package/dist/resolvePreset-B-IB0ehH.js +15 -0
- package/dist/resolvePreset-B-IB0ehH.js.map +1 -0
- package/dist/resolvePreset-CT3kU-K2.cjs +14 -0
- package/dist/resolvePreset-CT3kU-K2.cjs.map +1 -0
- package/dist/styles.css +3 -112
- package/dist/theme/componentStyles.d.ts +32 -0
- package/dist/theme/tokens.d.ts +28 -0
- package/dist/useWizard-CWdIxZzX.cjs +94 -0
- package/dist/useWizard-CWdIxZzX.cjs.map +1 -0
- package/dist/useWizard-CWq--C3o.js +95 -0
- package/dist/useWizard-CWq--C3o.js.map +1 -0
- package/package.json +1 -1
- package/src/components/ActionMenu/ActionMenu.stories.tsx +230 -0
- package/src/components/ActionMenu/ActionMenu.tsx +174 -0
- package/src/components/ActionMenu/index.ts +2 -0
- package/src/components/AppBar/AppBar.stories.tsx +272 -0
- package/src/components/AppBar/AppBar.sx.ts +32 -0
- package/src/components/AppBar/AppBar.tsx +123 -0
- package/src/components/AppBar/AppBarBrand.tsx +120 -0
- package/src/components/AppBar/AppBarContext.ts +25 -0
- package/src/components/AppBar/AppBarMenuToggle.tsx +90 -0
- package/src/components/AppBar/AppBarUserMenu.tsx +217 -0
- package/src/components/AppBar/index.ts +25 -0
- package/src/components/Autocomplete/Autocomplete.definitions.ts +223 -0
- package/src/components/Autocomplete/Autocomplete.helpers.ts +60 -0
- package/src/components/Autocomplete/Autocomplete.stories.tsx +363 -2
- package/src/components/Autocomplete/Autocomplete.sx.ts +30 -0
- package/src/components/Autocomplete/Autocomplete.tsx +312 -90
- package/src/components/Autocomplete/Autocomplete.types.ts +13 -0
- package/src/components/Autocomplete/_parts/AutocompleteChips.tsx +55 -0
- package/src/components/Autocomplete/_parts/AutocompleteLoader.tsx +17 -0
- package/src/components/Autocomplete/_parts/AutocompleteOption.tsx +31 -0
- package/src/components/Autocomplete/index.ts +12 -1
- package/src/components/Avatar/Avatar.definitions.ts +162 -0
- package/src/components/Avatar/Avatar.stories.tsx +205 -1
- package/src/components/Avatar/Avatar.tsx +166 -103
- package/src/components/Card/Card.stories.tsx +205 -16
- package/src/components/Card/Card.sx.ts +104 -0
- package/src/components/Card/Card.tsx +191 -35
- package/src/components/Card/index.ts +9 -1
- package/src/components/DatePicker/DatePicker.definitions.ts +24 -1
- package/src/components/DatePicker/DatePicker.helpers.ts +24 -0
- package/src/components/DatePicker/DatePicker.stories.tsx +29 -2
- package/src/components/DatePicker/DatePicker.sx.ts +33 -0
- package/src/components/DatePicker/DatePicker.tsx +163 -139
- package/src/components/DatePicker/DatePicker.types.ts +10 -0
- package/src/components/DatePicker/index.ts +9 -1
- package/src/components/DateTimePicker/DateTimePicker.definitions.ts +24 -0
- package/src/components/DateTimePicker/DateTimePicker.helpers.ts +38 -0
- package/src/components/DateTimePicker/DateTimePicker.stories.tsx +29 -1
- package/src/components/DateTimePicker/DateTimePicker.sx.ts +30 -0
- package/src/components/DateTimePicker/DateTimePicker.tsx +200 -166
- package/src/components/DateTimePicker/DateTimePicker.types.ts +10 -0
- package/src/components/DateTimePicker/index.ts +9 -1
- package/src/components/Drawer/Drawer.stories.tsx +270 -0
- package/src/components/Drawer/Drawer.sx.ts +106 -0
- package/src/components/Drawer/Drawer.tsx +214 -0
- package/src/components/Drawer/DrawerContext.ts +26 -0
- package/src/components/Drawer/DrawerItem.tsx +110 -0
- package/src/components/Drawer/index.ts +10 -0
- package/src/components/Flyout/Flyout.stories.tsx +26 -18
- package/src/components/Icon/Icon.stories.tsx +68 -1
- package/src/components/Icon/Icon.tsx +87 -6
- package/src/components/Input/Input.definitions.ts +74 -2
- package/src/components/Input/Input.helpers.ts +49 -0
- package/src/components/Input/Input.stories.tsx +116 -4
- package/src/components/Input/Input.sx.ts +42 -0
- package/src/components/Input/Input.tsx +117 -162
- package/src/components/Input/Input.types.ts +10 -0
- package/src/components/Input/index.ts +9 -1
- package/src/components/InputGroup/InputGroup.definitions.ts +158 -0
- package/src/components/InputGroup/InputGroup.stories.tsx +159 -28
- package/src/components/InputGroup/InputGroup.tsx +159 -116
- package/src/components/Modal/Modal.stories.tsx +434 -6
- package/src/components/Modal/Modal.tsx +303 -121
- package/src/components/Modal/ModalFooter.tsx +22 -12
- package/src/components/Modal/index.ts +6 -1
- package/src/components/PageLoader/PageLoader.stories.tsx +217 -0
- package/src/components/PageLoader/PageLoader.tsx +96 -0
- package/src/components/PageLoader/index.ts +2 -0
- package/src/components/ScrollTopButton/ScrollTopButton.stories.tsx +158 -0
- package/src/components/ScrollTopButton/ScrollTopButton.tsx +135 -0
- package/src/components/ScrollTopButton/index.ts +8 -0
- package/src/components/ScrollTopButton/scrollToTop.ts +37 -0
- package/src/components/Select/Select.definitions.ts +114 -0
- package/src/components/Select/Select.helpers.ts +71 -0
- package/src/components/Select/Select.stories.tsx +126 -8
- package/src/components/Select/Select.sx.ts +14 -0
- package/src/components/Select/Select.tsx +246 -285
- package/src/components/Select/Select.types.ts +15 -0
- package/src/components/Select/_parts/SelectMenuItem.tsx +40 -0
- package/src/components/Select/_parts/SelectSearchHeader.tsx +51 -0
- package/src/components/Select/_parts/SelectValue.tsx +96 -0
- package/src/components/Select/index.ts +14 -1
- package/src/components/Stepper/Stepper.tsx +17 -1
- package/src/components/Tooltip/Tooltip.stories.tsx +15 -3
- package/src/components/_shared/formField.sx.ts +118 -0
- package/src/components/_shared/resolvePreset.ts +35 -0
- package/src/hooks/Wizard/Wizard.stories.tsx +301 -0
- package/src/hooks/Wizard/WizardContext.tsx +166 -0
- package/src/hooks/Wizard/index.ts +6 -0
- package/src/hooks/Wizard/useWizard.ts +13 -0
- package/src/index.ts +17 -1
- package/src/mui.ts +44 -0
- package/src/theme/componentStyles.ts +47 -0
- package/src/theme/tokens.ts +43 -0
- package/dist/DatePicker-BSNboVhN.js +0 -201
- package/dist/DatePicker-BSNboVhN.js.map +0 -1
- package/dist/DatePicker-BoqxWAhj.cjs +0 -200
- package/dist/DatePicker-BoqxWAhj.cjs.map +0 -1
- package/dist/Input-DFHs7cJ_.js +0 -171
- package/dist/Input-DFHs7cJ_.js.map +0 -1
- package/dist/Input-c8MwNNPg.cjs +0 -170
- package/dist/Input-c8MwNNPg.cjs.map +0 -1
- package/dist/Select-BO2N56sm.cjs +0 -411
- package/dist/Select-BO2N56sm.cjs.map +0 -1
- package/dist/Select-BcLkyHSE.js +0 -412
- package/dist/Select-BcLkyHSE.js.map +0 -1
- package/dist/index.css +0 -3
|
@@ -1,44 +1,200 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { Box, Card as MuiCard, Typography, useTheme } from '@mui/material';
|
|
3
|
+
import type { SxProps, Theme } from '@mui/material/styles';
|
|
4
4
|
|
|
5
|
+
import { resolvePreset } from '../_shared/resolvePreset';
|
|
6
|
+
import {
|
|
7
|
+
buildCardSx,
|
|
8
|
+
buildCardHeaderSx,
|
|
9
|
+
buildCardBodySx,
|
|
10
|
+
buildCardFooterSx,
|
|
11
|
+
type CardVariant,
|
|
12
|
+
type CardPadding,
|
|
13
|
+
} from './Card.sx';
|
|
5
14
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
export interface CardProps {
|
|
16
|
+
/** Contenido principal. */
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
/**
|
|
19
|
+
* Título del Card. Si se provee, renderiza un header con separador. Puede
|
|
20
|
+
* ser string o cualquier ReactNode para permitir iconos / chips.
|
|
21
|
+
*/
|
|
22
|
+
title?: ReactNode;
|
|
23
|
+
/** Texto secundario debajo del título. */
|
|
24
|
+
subtitle?: ReactNode;
|
|
25
|
+
/**
|
|
26
|
+
* Acciones del header (botones, ActionMenu, etc). Se renderizan alineadas
|
|
27
|
+
* a la derecha.
|
|
28
|
+
*/
|
|
29
|
+
actions?: ReactNode;
|
|
30
|
+
/**
|
|
31
|
+
* Header totalmente custom. Si se provee, ignora `title`/`subtitle`/`actions`
|
|
32
|
+
* y toma control del slot entero.
|
|
33
|
+
*/
|
|
34
|
+
header?: ReactNode;
|
|
35
|
+
/** Footer custom (botones, mensajes, etc). */
|
|
36
|
+
footer?: ReactNode;
|
|
37
|
+
/**
|
|
38
|
+
* Variante visual.
|
|
39
|
+
* - `elevated` (default): sombra sutil.
|
|
40
|
+
* - `outlined`: borde sin sombra.
|
|
41
|
+
* - `plain`: sin borde ni sombra, útil para layouts con nesting.
|
|
42
|
+
*/
|
|
43
|
+
variant?: CardVariant;
|
|
44
|
+
/**
|
|
45
|
+
* Densidad del padding interno. Solo aplica al body cuando hay header/footer;
|
|
46
|
+
* cuando no hay slots, aplica al root.
|
|
47
|
+
*/
|
|
48
|
+
padding?: CardPadding;
|
|
49
|
+
/** Si `true`, muestra feedback de hover/active (cursor, sombra). */
|
|
50
|
+
clickable?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Preset registrado en `theme.styles.Card`. `"default"` usa el estilo
|
|
53
|
+
* built-in sin preset extra.
|
|
54
|
+
*/
|
|
55
|
+
preset?: string;
|
|
56
|
+
/**
|
|
57
|
+
* MUI `raised` legacy — mantenido por backward-compat. Equivale a
|
|
58
|
+
* `variant="elevated"` con sombra mayor. Ignora `variant` si se usa.
|
|
59
|
+
*/
|
|
60
|
+
raised?: boolean;
|
|
61
|
+
/** sx del root. Se compone sobre el base + preset. */
|
|
62
|
+
sx?: SxProps<Theme>;
|
|
63
|
+
/** sx custom del slot body. */
|
|
64
|
+
bodySx?: SxProps<Theme>;
|
|
65
|
+
/** sx custom del slot header. */
|
|
66
|
+
headerSx?: SxProps<Theme>;
|
|
67
|
+
/** sx custom del slot footer. */
|
|
68
|
+
footerSx?: SxProps<Theme>;
|
|
69
|
+
onClick?: () => void;
|
|
70
|
+
onBlur?: () => void;
|
|
71
|
+
className?: string;
|
|
72
|
+
'data-testid'?: string;
|
|
16
73
|
}
|
|
17
74
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Card semántico con slots `title` / `subtitle` / `actions` / `footer`.
|
|
77
|
+
* Reemplaza el patrón `<div class="card"><div class="card-header">...</div>...`
|
|
78
|
+
* de Metronic/Bootstrap con composición declarativa.
|
|
79
|
+
*
|
|
80
|
+
* Backward-compat: si solo se pasa `children`, se comporta como el Card
|
|
81
|
+
* original (MUI Card + body padding).
|
|
82
|
+
*
|
|
83
|
+
* ```tsx
|
|
84
|
+
* <Card
|
|
85
|
+
* title="Datos del cliente"
|
|
86
|
+
* subtitle="Última actualización: hace 2h"
|
|
87
|
+
* actions={<ActionMenu items={menuItems} />}
|
|
88
|
+
* footer={<Button>Guardar</Button>}
|
|
89
|
+
* >
|
|
90
|
+
* <CustomerForm />
|
|
91
|
+
* </Card>
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export function Card({
|
|
95
|
+
children,
|
|
96
|
+
title,
|
|
97
|
+
subtitle,
|
|
98
|
+
actions,
|
|
99
|
+
header,
|
|
100
|
+
footer,
|
|
101
|
+
variant,
|
|
102
|
+
padding = 'normal',
|
|
103
|
+
clickable = false,
|
|
104
|
+
preset,
|
|
105
|
+
raised,
|
|
106
|
+
sx,
|
|
107
|
+
bodySx,
|
|
108
|
+
headerSx,
|
|
109
|
+
footerSx,
|
|
110
|
+
onClick,
|
|
111
|
+
onBlur,
|
|
112
|
+
className,
|
|
113
|
+
'data-testid': dataTestId,
|
|
114
|
+
}: CardProps) {
|
|
115
|
+
const theme = useTheme();
|
|
116
|
+
|
|
117
|
+
// Back-compat: `raised` legacy => elevated. Si no vienen ni `raised` ni
|
|
118
|
+
// `variant`, default a 'elevated'.
|
|
119
|
+
const resolvedVariant: CardVariant = raised
|
|
120
|
+
? 'elevated'
|
|
121
|
+
: (variant ?? 'elevated');
|
|
122
|
+
|
|
123
|
+
const hasHeader = Boolean(header || title || subtitle || actions);
|
|
124
|
+
const hasFooter = Boolean(footer);
|
|
125
|
+
const isCompound = hasHeader || hasFooter;
|
|
35
126
|
|
|
36
|
-
|
|
127
|
+
// Cuando hay slots, el root no lleva padding (lo llevan los slots).
|
|
128
|
+
const rootPadding: CardPadding = isCompound ? 'none' : padding;
|
|
37
129
|
|
|
38
|
-
|
|
130
|
+
const presetSx = resolvePreset('Card', preset, theme);
|
|
39
131
|
|
|
40
|
-
|
|
132
|
+
const rootSx: SxProps<Theme> = [
|
|
133
|
+
buildCardSx({
|
|
134
|
+
variant: resolvedVariant,
|
|
135
|
+
padding: rootPadding,
|
|
136
|
+
clickable: clickable || Boolean(onClick),
|
|
137
|
+
}),
|
|
138
|
+
...(presetSx ? [presetSx] : []),
|
|
139
|
+
...(Array.isArray(sx) ? sx : sx ? [sx] : []),
|
|
140
|
+
];
|
|
141
|
+
|
|
142
|
+
const renderHeader = () => {
|
|
143
|
+
if (header) return <Box sx={[buildCardHeaderSx(), ...(Array.isArray(headerSx) ? headerSx : headerSx ? [headerSx] : [])]}>{header}</Box>;
|
|
144
|
+
if (!title && !subtitle && !actions) return null;
|
|
145
|
+
return (
|
|
146
|
+
<Box sx={[buildCardHeaderSx(), ...(Array.isArray(headerSx) ? headerSx : headerSx ? [headerSx] : [])]}>
|
|
147
|
+
<Box className="card-header-text">
|
|
148
|
+
{title && (
|
|
149
|
+
<Typography
|
|
150
|
+
variant="subtitle1"
|
|
151
|
+
component="div"
|
|
152
|
+
sx={{ fontWeight: 600, lineHeight: 1.3 }}
|
|
153
|
+
noWrap
|
|
154
|
+
>
|
|
155
|
+
{title}
|
|
156
|
+
</Typography>
|
|
157
|
+
)}
|
|
158
|
+
{subtitle && (
|
|
159
|
+
<Typography
|
|
160
|
+
variant="caption"
|
|
161
|
+
color="text.secondary"
|
|
162
|
+
component="div"
|
|
163
|
+
noWrap
|
|
164
|
+
>
|
|
165
|
+
{subtitle}
|
|
166
|
+
</Typography>
|
|
167
|
+
)}
|
|
168
|
+
</Box>
|
|
169
|
+
{actions && <Box className="card-header-actions">{actions}</Box>}
|
|
170
|
+
</Box>
|
|
41
171
|
);
|
|
42
|
-
};
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
return (
|
|
175
|
+
<MuiCard
|
|
176
|
+
sx={rootSx}
|
|
177
|
+
className={className}
|
|
178
|
+
data-testid={dataTestId}
|
|
179
|
+
onClick={onClick}
|
|
180
|
+
onBlur={onBlur}
|
|
181
|
+
elevation={0} // sombra la maneja buildCardSx
|
|
182
|
+
>
|
|
183
|
+
{renderHeader()}
|
|
184
|
+
{isCompound ? (
|
|
185
|
+
<Box sx={[buildCardBodySx(padding), ...(Array.isArray(bodySx) ? bodySx : bodySx ? [bodySx] : [])]}>
|
|
186
|
+
{children}
|
|
187
|
+
</Box>
|
|
188
|
+
) : (
|
|
189
|
+
children
|
|
190
|
+
)}
|
|
191
|
+
{hasFooter && (
|
|
192
|
+
<Box sx={[buildCardFooterSx(), ...(Array.isArray(footerSx) ? footerSx : footerSx ? [footerSx] : [])]}>
|
|
193
|
+
{footer}
|
|
194
|
+
</Box>
|
|
195
|
+
)}
|
|
196
|
+
</MuiCard>
|
|
197
|
+
);
|
|
198
|
+
}
|
|
43
199
|
|
|
44
|
-
export default Card;
|
|
200
|
+
export default Card;
|
|
@@ -1 +1,9 @@
|
|
|
1
|
-
export { default
|
|
1
|
+
export { Card, default } from './Card';
|
|
2
|
+
export type { CardProps } from './Card';
|
|
3
|
+
export type { CardVariant, CardPadding } from './Card.sx';
|
|
4
|
+
export {
|
|
5
|
+
buildCardSx,
|
|
6
|
+
buildCardHeaderSx,
|
|
7
|
+
buildCardBodySx,
|
|
8
|
+
buildCardFooterSx,
|
|
9
|
+
} from './Card.sx';
|
|
@@ -202,4 +202,27 @@ export const DatePickerReadOnlyDefinition = `
|
|
|
202
202
|
</Box>
|
|
203
203
|
);
|
|
204
204
|
};
|
|
205
|
-
`;
|
|
205
|
+
`;
|
|
206
|
+
export const DatePickerEmptyWithMaskDefinition = `
|
|
207
|
+
import React, { useState } from 'react';
|
|
208
|
+
import { DatePicker } from '@soyfri/shared-library/DatePicker';
|
|
209
|
+
import { Dayjs } from 'dayjs';
|
|
210
|
+
import { Box, Typography } from '@mui/material';
|
|
211
|
+
|
|
212
|
+
export const DatePickerEmptyWithMaskExample = () => {
|
|
213
|
+
const [selectedDate, setSelectedDate] = useState<Dayjs | null>(null);
|
|
214
|
+
return (
|
|
215
|
+
<Box sx={{ width: 300 }}>
|
|
216
|
+
<DatePicker
|
|
217
|
+
label="Fecha"
|
|
218
|
+
selectedDate={selectedDate}
|
|
219
|
+
onDateChange={setSelectedDate}
|
|
220
|
+
format="DD/MM/YY"
|
|
221
|
+
/>
|
|
222
|
+
<Typography sx={{ mt: 2 }} variant="caption" color="text.secondary">
|
|
223
|
+
Al estar vacío, el campo muestra la máscara del formato (DD/MM/AA).
|
|
224
|
+
</Typography>
|
|
225
|
+
</Box>
|
|
226
|
+
);
|
|
227
|
+
};
|
|
228
|
+
`;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DateValidationError } from '@mui/x-date-pickers/models';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Traduce el código de error del DatePicker de MUI X a un mensaje en español.
|
|
5
|
+
* Se usa internamente para poblar `helperText` cuando hay error de validación
|
|
6
|
+
* y el consumer no pasó un mensaje propio.
|
|
7
|
+
*/
|
|
8
|
+
export const getDateValidationMessage = (
|
|
9
|
+
error: DateValidationError | null,
|
|
10
|
+
): string => {
|
|
11
|
+
switch (error) {
|
|
12
|
+
case 'minDate':
|
|
13
|
+
case 'maxDate':
|
|
14
|
+
return 'Fecha fuera del rango permitido';
|
|
15
|
+
case 'invalidDate':
|
|
16
|
+
return 'Formato de fecha inválido';
|
|
17
|
+
case 'disableFuture':
|
|
18
|
+
return 'No se permiten fechas futuras';
|
|
19
|
+
case 'disablePast':
|
|
20
|
+
return 'No se permiten fechas pasadas';
|
|
21
|
+
default:
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
};
|
|
@@ -4,7 +4,6 @@ import React, { useState, useMemo } from 'react';
|
|
|
4
4
|
import {
|
|
5
5
|
Box,
|
|
6
6
|
Typography,
|
|
7
|
-
TextField,
|
|
8
7
|
} from '@mui/material';
|
|
9
8
|
|
|
10
9
|
// Importar las definiciones de las historias
|
|
@@ -16,7 +15,7 @@ import {
|
|
|
16
15
|
DatePickerSmallSizeDefinition,
|
|
17
16
|
DatePickerDisabledDefinition,
|
|
18
17
|
DatePickerReadOnlyDefinition,
|
|
19
|
-
|
|
18
|
+
DatePickerEmptyWithMaskDefinition,
|
|
20
19
|
} from './DatePicker.definitions'; // Mantener el nombre del archivo de definiciones como está
|
|
21
20
|
import DatePicker from './DatePicker';
|
|
22
21
|
import dayjs, { Dayjs } from 'dayjs';
|
|
@@ -81,6 +80,34 @@ const meta: Meta<typeof DatePicker> = { // Renombrado a DatePicker
|
|
|
81
80
|
}
|
|
82
81
|
};
|
|
83
82
|
|
|
83
|
+
export const DatePickerEmptyWithMask: Story = {
|
|
84
|
+
render: () => {
|
|
85
|
+
const [selectedDate, setSelectedDate] = useState<Dayjs | null>(null);
|
|
86
|
+
return (
|
|
87
|
+
<Box sx={{ width: 300 }}>
|
|
88
|
+
<DatePicker
|
|
89
|
+
label="Fecha"
|
|
90
|
+
selectedDate={selectedDate}
|
|
91
|
+
onDateChange={setSelectedDate}
|
|
92
|
+
format="DD/MM/YY"
|
|
93
|
+
/>
|
|
94
|
+
<Typography sx={{ mt: 2 }} variant="caption" color="text.secondary">
|
|
95
|
+
Al estar vacío, el campo muestra la máscara del formato (DD/MM/AA).
|
|
96
|
+
</Typography>
|
|
97
|
+
</Box>
|
|
98
|
+
);
|
|
99
|
+
},
|
|
100
|
+
parameters: {
|
|
101
|
+
docs: {
|
|
102
|
+
description: {
|
|
103
|
+
story:
|
|
104
|
+
"DatePicker vacío. Al no haber valor seleccionado, cada sección del campo muestra su placeholder según el `format` (por ejemplo `DD/MM/AA`), funcionando como máscara visual."
|
|
105
|
+
},
|
|
106
|
+
source: { code: DatePickerEmptyWithMaskDefinition.trim() }
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
84
111
|
export const DatePickerWithMinMax: Story = {
|
|
85
112
|
render: () => {
|
|
86
113
|
const [selectedDate, setSelectedDate] = useState<Dayjs | null>(dayjs('2023-06-15'));
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SxProps, Theme } from '@mui/material';
|
|
2
|
+
|
|
3
|
+
import { buildFormFieldSx } from '../_shared/formField.sx';
|
|
4
|
+
import { FIELD_INPUT_PADDING_Y } from '../../theme/tokens';
|
|
5
|
+
import type { LabelPosition } from './DatePicker';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Builder de sx para el DatePicker. Reutiliza `buildFormFieldSx` con
|
|
9
|
+
* `includePickersApi: true` para cubrir tanto la API clásica (MuiInputBase /
|
|
10
|
+
* MuiOutlinedInput) como la nueva (MuiPickersInputBase / MuiPickersOutlinedInput)
|
|
11
|
+
* del DatePicker de MUI X v8.
|
|
12
|
+
*/
|
|
13
|
+
export const buildDatePickerSx = (
|
|
14
|
+
borderRadius: number | string,
|
|
15
|
+
labelPosition: LabelPosition,
|
|
16
|
+
): SxProps<Theme> =>
|
|
17
|
+
buildFormFieldSx({
|
|
18
|
+
borderRadius,
|
|
19
|
+
labelPosition,
|
|
20
|
+
includePickersApi: true,
|
|
21
|
+
extraOutsideSx: {
|
|
22
|
+
'& .MuiInputBase-input': {
|
|
23
|
+
paddingTop: FIELD_INPUT_PADDING_Y,
|
|
24
|
+
paddingBottom: FIELD_INPUT_PADDING_Y,
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
// Secciones editables del PickersTextField (DD/MM/YYYY en API nueva).
|
|
28
|
+
'& .MuiPickersInputBase-sectionsContainer': {
|
|
29
|
+
paddingTop: FIELD_INPUT_PADDING_Y,
|
|
30
|
+
paddingBottom: FIELD_INPUT_PADDING_Y,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
});
|