@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,20 +1,35 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import
|
|
2
|
+
import { useState } from 'react';
|
|
3
3
|
import { Box, Typography } from '@mui/material';
|
|
4
|
-
import InputGroup from './InputGroup'; // Asegúrate de tener este componente
|
|
5
|
-
|
|
6
4
|
import dayjs, { Dayjs } from 'dayjs';
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
5
|
+
|
|
6
|
+
import InputGroup from './InputGroup';
|
|
7
|
+
import { Input } from '../Input';
|
|
8
|
+
import Select, { SelectOption } from '../Select/Select';
|
|
9
|
+
import { Button } from '../Button';
|
|
10
|
+
import { DatePicker } from '../DatePicker';
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
BasicInputGroupDefinition,
|
|
14
|
+
CombinedInputGroupDefinition,
|
|
15
|
+
DatePickerInputGroupDefinition,
|
|
16
|
+
VerticalInputGroupDefinition,
|
|
17
|
+
CustomStylingInputGroupDefinition,
|
|
18
|
+
DisabledInputGroupDefinition,
|
|
19
|
+
} from './InputGroup.definitions';
|
|
11
20
|
|
|
12
21
|
const meta: Meta<typeof InputGroup> = {
|
|
13
|
-
title: 'InputGroup',
|
|
22
|
+
title: 'Components/InputGroup',
|
|
14
23
|
component: InputGroup,
|
|
15
24
|
tags: ['autodocs'],
|
|
16
25
|
parameters: {
|
|
17
26
|
layout: 'centered',
|
|
27
|
+
docs: {
|
|
28
|
+
description: {
|
|
29
|
+
component:
|
|
30
|
+
'Agrupa visualmente varios campos (Input / Select / DatePicker / Button, etc.) bajo un único borde, con separadores internos por cada slot. Respeta el espacio reservado para los labels `outside` de Input/Select, y mantiene el contenido centrado verticalmente sin importar si cada hijo tiene label o no.',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
18
33
|
},
|
|
19
34
|
decorators: [
|
|
20
35
|
(Story) => (
|
|
@@ -23,6 +38,29 @@ const meta: Meta<typeof InputGroup> = {
|
|
|
23
38
|
</Box>
|
|
24
39
|
),
|
|
25
40
|
],
|
|
41
|
+
argTypes: {
|
|
42
|
+
borderRadius: {
|
|
43
|
+
control: 'number',
|
|
44
|
+
description: 'Radio del borde del grupo. Default: 10.',
|
|
45
|
+
},
|
|
46
|
+
orientation: {
|
|
47
|
+
control: 'radio',
|
|
48
|
+
options: ['horizontal', 'vertical'],
|
|
49
|
+
description: 'Orientación del grupo.',
|
|
50
|
+
},
|
|
51
|
+
disabled: {
|
|
52
|
+
control: 'boolean',
|
|
53
|
+
description: 'Desactiva visualmente el grupo (los hijos manejan su propio `disabled` lógico).',
|
|
54
|
+
},
|
|
55
|
+
sx: {
|
|
56
|
+
control: false,
|
|
57
|
+
description: 'sx del contenedor raíz. Se mergea sobre los defaults.',
|
|
58
|
+
},
|
|
59
|
+
slotSx: {
|
|
60
|
+
control: false,
|
|
61
|
+
description: 'sx aplicado a cada slot que envuelve un hijo.',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
26
64
|
};
|
|
27
65
|
|
|
28
66
|
export default meta;
|
|
@@ -50,9 +88,7 @@ export const BasicInputGroup: Story = {
|
|
|
50
88
|
value={text}
|
|
51
89
|
onChange={(val) => setText(val as string)}
|
|
52
90
|
/>
|
|
53
|
-
<Button variant="outlined">
|
|
54
|
-
Buscar
|
|
55
|
-
</Button>
|
|
91
|
+
<Button variant="outlined">Buscar</Button>
|
|
56
92
|
</InputGroup>
|
|
57
93
|
</Box>
|
|
58
94
|
);
|
|
@@ -60,10 +96,11 @@ export const BasicInputGroup: Story = {
|
|
|
60
96
|
parameters: {
|
|
61
97
|
docs: {
|
|
62
98
|
description: {
|
|
63
|
-
story: 'Un grupo de entrada simple que combina un campo de texto y un botón.'
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
99
|
+
story: 'Un grupo de entrada simple que combina un campo de texto y un botón.',
|
|
100
|
+
},
|
|
101
|
+
source: { code: BasicInputGroupDefinition.trim() },
|
|
102
|
+
},
|
|
103
|
+
},
|
|
67
104
|
};
|
|
68
105
|
|
|
69
106
|
export const CombinedInputGroup: Story = {
|
|
@@ -88,9 +125,7 @@ export const CombinedInputGroup: Story = {
|
|
|
88
125
|
value={text}
|
|
89
126
|
onChange={(val) => setText(val as string)}
|
|
90
127
|
/>
|
|
91
|
-
<Button variant="contained">
|
|
92
|
-
Aplicar
|
|
93
|
-
</Button>
|
|
128
|
+
<Button variant="contained">Aplicar</Button>
|
|
94
129
|
</InputGroup>
|
|
95
130
|
</Box>
|
|
96
131
|
);
|
|
@@ -98,10 +133,12 @@ export const CombinedInputGroup: Story = {
|
|
|
98
133
|
parameters: {
|
|
99
134
|
docs: {
|
|
100
135
|
description: {
|
|
101
|
-
story:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
136
|
+
story:
|
|
137
|
+
'Select + Input + Button compartiendo un borde. Los labels de Select e Input flotan por encima del borde del grupo con la misma animación que fuera del grupo.',
|
|
138
|
+
},
|
|
139
|
+
source: { code: CombinedInputGroupDefinition.trim() },
|
|
140
|
+
},
|
|
141
|
+
},
|
|
105
142
|
};
|
|
106
143
|
|
|
107
144
|
export const DatePickerInputGroup: Story = {
|
|
@@ -119,8 +156,73 @@ export const DatePickerInputGroup: Story = {
|
|
|
119
156
|
selectedDate={selectedDate}
|
|
120
157
|
onDateChange={(date) => setSelectedDate(date)}
|
|
121
158
|
/>
|
|
122
|
-
<Button variant="contained">
|
|
123
|
-
|
|
159
|
+
<Button variant="contained">Ver calendario</Button>
|
|
160
|
+
</InputGroup>
|
|
161
|
+
</Box>
|
|
162
|
+
);
|
|
163
|
+
},
|
|
164
|
+
parameters: {
|
|
165
|
+
docs: {
|
|
166
|
+
description: {
|
|
167
|
+
story: 'Un grupo de entrada que combina un `DatePicker` con un botón de acción.',
|
|
168
|
+
},
|
|
169
|
+
source: { code: DatePickerInputGroupDefinition.trim() },
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export const VerticalInputGroup: Story = {
|
|
175
|
+
render: () => {
|
|
176
|
+
const [nombre, setNombre] = useState('');
|
|
177
|
+
const [email, setEmail] = useState('');
|
|
178
|
+
|
|
179
|
+
return (
|
|
180
|
+
<Box sx={{ width: 320 }}>
|
|
181
|
+
<InputGroup orientation="vertical">
|
|
182
|
+
<Input
|
|
183
|
+
label="Nombre"
|
|
184
|
+
value={nombre}
|
|
185
|
+
onChange={(val) => setNombre(val as string)}
|
|
186
|
+
/>
|
|
187
|
+
<Input
|
|
188
|
+
label="Email"
|
|
189
|
+
value={email}
|
|
190
|
+
onChange={(val) => setEmail(val as string)}
|
|
191
|
+
/>
|
|
192
|
+
</InputGroup>
|
|
193
|
+
</Box>
|
|
194
|
+
);
|
|
195
|
+
},
|
|
196
|
+
parameters: {
|
|
197
|
+
docs: {
|
|
198
|
+
description: {
|
|
199
|
+
story: 'Grupo en orientación vertical: los separadores pasan a ser horizontales entre slots.',
|
|
200
|
+
},
|
|
201
|
+
source: { code: VerticalInputGroupDefinition.trim() },
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export const CustomStyling: Story = {
|
|
207
|
+
render: () => {
|
|
208
|
+
const [q, setQ] = useState('');
|
|
209
|
+
|
|
210
|
+
return (
|
|
211
|
+
<Box sx={{ width: 500 }}>
|
|
212
|
+
<InputGroup
|
|
213
|
+
borderRadius={999}
|
|
214
|
+
sx={{
|
|
215
|
+
bgcolor: 'action.hover',
|
|
216
|
+
borderColor: 'primary.main',
|
|
217
|
+
}}
|
|
218
|
+
>
|
|
219
|
+
<Input
|
|
220
|
+
label="Búsqueda avanzada"
|
|
221
|
+
value={q}
|
|
222
|
+
onChange={(val) => setQ(val as string)}
|
|
223
|
+
/>
|
|
224
|
+
<Button variant="contained" color="primary">
|
|
225
|
+
Buscar
|
|
124
226
|
</Button>
|
|
125
227
|
</InputGroup>
|
|
126
228
|
</Box>
|
|
@@ -129,8 +231,37 @@ export const DatePickerInputGroup: Story = {
|
|
|
129
231
|
parameters: {
|
|
130
232
|
docs: {
|
|
131
233
|
description: {
|
|
132
|
-
story:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
234
|
+
story:
|
|
235
|
+
'Demo del passthrough de `sx` y `borderRadius`. El consumidor puede pintar fondo, cambiar el color del borde o dejar el grupo completamente pill-shaped (`borderRadius={999}`) sin tocar el componente.',
|
|
236
|
+
},
|
|
237
|
+
source: { code: CustomStylingInputGroupDefinition.trim() },
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
export const DisabledGroup: Story = {
|
|
243
|
+
render: () => (
|
|
244
|
+
<Box sx={{ width: 400 }}>
|
|
245
|
+
<InputGroup disabled>
|
|
246
|
+
<Input
|
|
247
|
+
label="Búsqueda"
|
|
248
|
+
value=""
|
|
249
|
+
onChange={() => {}}
|
|
250
|
+
disabled
|
|
251
|
+
/>
|
|
252
|
+
<Button variant="outlined" disabled>
|
|
253
|
+
Buscar
|
|
254
|
+
</Button>
|
|
255
|
+
</InputGroup>
|
|
256
|
+
</Box>
|
|
257
|
+
),
|
|
258
|
+
parameters: {
|
|
259
|
+
docs: {
|
|
260
|
+
description: {
|
|
261
|
+
story:
|
|
262
|
+
'`disabled` aplica opacidad y bloquea interacciones en el grupo. Cada hijo debe manejar su propio `disabled` lógico (validación, formularios, etc.).',
|
|
263
|
+
},
|
|
264
|
+
source: { code: DisabledInputGroupDefinition.trim() },
|
|
265
|
+
},
|
|
266
|
+
},
|
|
136
267
|
};
|
|
@@ -1,136 +1,179 @@
|
|
|
1
|
-
import React, { Children,
|
|
2
|
-
import { Box } from '@mui/material';
|
|
3
|
-
import { DatePicker as MuiDatePicker } from '@mui/x-date-pickers/DatePicker';
|
|
4
|
-
import { Select as MuiSelect } from '@mui/material';
|
|
5
|
-
import { TextField as MuiTextField } from '@mui/material';
|
|
6
|
-
import { Input } from '../Input';
|
|
7
|
-
import { Select } from '../Select';
|
|
8
|
-
import { DatePicker } from '../DatePicker';
|
|
1
|
+
import React, { Children, isValidElement } from 'react';
|
|
2
|
+
import { Box, type SxProps, type Theme } from '@mui/material';
|
|
9
3
|
|
|
10
|
-
interface
|
|
11
|
-
sx?: object;
|
|
12
|
-
[key: string]: any;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
interface InputGroupProps {
|
|
4
|
+
export interface InputGroupProps {
|
|
16
5
|
children: React.ReactNode;
|
|
6
|
+
/**
|
|
7
|
+
* sx aplicado al contenedor raíz del grupo. Se mergea sobre los defaults.
|
|
8
|
+
*/
|
|
9
|
+
sx?: SxProps<Theme>;
|
|
10
|
+
/**
|
|
11
|
+
* sx aplicado a cada slot individual. Útil para controlar flex/gap entre
|
|
12
|
+
* los hijos del grupo.
|
|
13
|
+
*/
|
|
14
|
+
slotSx?: SxProps<Theme>;
|
|
15
|
+
/**
|
|
16
|
+
* Radio del borde del grupo. Default: 10.
|
|
17
|
+
*/
|
|
18
|
+
borderRadius?: number | string;
|
|
19
|
+
/**
|
|
20
|
+
* Desactiva visualmente el grupo (no cascada lógica — los hijos deben
|
|
21
|
+
* manejar su propio `disabled`).
|
|
22
|
+
*/
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Orientación del grupo. Default: 'horizontal'.
|
|
26
|
+
*/
|
|
27
|
+
orientation?: 'horizontal' | 'vertical';
|
|
28
|
+
className?: string;
|
|
17
29
|
}
|
|
18
30
|
|
|
19
|
-
const
|
|
20
|
-
|
|
31
|
+
const mergeSx = (base: SxProps<Theme>, extra?: SxProps<Theme>): SxProps<Theme> => {
|
|
32
|
+
if (!extra) return base;
|
|
33
|
+
const baseArr = Array.isArray(base) ? base : [base];
|
|
34
|
+
const extraArr = Array.isArray(extra) ? extra : [extra];
|
|
35
|
+
return [...baseArr, ...extraArr] as SxProps<Theme>;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Agrupa visualmente varios componentes de entrada (Input / Select / DatePicker /
|
|
40
|
+
* Button, etc.) compartiendo un solo borde y con separadores internos.
|
|
41
|
+
*
|
|
42
|
+
* El grupo respeta el espacio que Input/Select reservan para su label `outside`
|
|
43
|
+
* (marginTop=14px) moviendo ese reservado al contenedor externo y cancelándolo
|
|
44
|
+
* en los hijos. Los labels siguen flotando por encima del borde del grupo con
|
|
45
|
+
* la misma animación que fuera del grupo.
|
|
46
|
+
*
|
|
47
|
+
* No inspecciona el tipo de cada hijo; aplica los overrides a través de
|
|
48
|
+
* descendant selectors por CSS para funcionar con cualquier wrapper / memoizado.
|
|
49
|
+
*/
|
|
50
|
+
const InputGroup: React.FC<InputGroupProps> = ({
|
|
51
|
+
children,
|
|
52
|
+
sx,
|
|
53
|
+
slotSx,
|
|
54
|
+
borderRadius = 10,
|
|
55
|
+
disabled,
|
|
56
|
+
orientation = 'horizontal',
|
|
57
|
+
className,
|
|
58
|
+
}) => {
|
|
59
|
+
const radius = typeof borderRadius === 'number' ? `${borderRadius}px` : borderRadius;
|
|
60
|
+
const slots = Children.toArray(children).filter(isValidElement);
|
|
61
|
+
const isHorizontal = orientation === 'horizontal';
|
|
21
62
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
63
|
+
const baseSx: SxProps<Theme> = {
|
|
64
|
+
// Respeta el label "outside" de Input/Select: los hijos pierden su marginTop
|
|
65
|
+
// (ver más abajo) y el grupo reserva el mismo espacio arriba para que los
|
|
66
|
+
// labels floten por encima del borde del grupo.
|
|
67
|
+
marginTop: '14px',
|
|
26
68
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
69
|
+
display: 'flex',
|
|
70
|
+
flexDirection: isHorizontal ? 'row' : 'column',
|
|
71
|
+
alignItems: 'stretch',
|
|
72
|
+
width: '100%',
|
|
73
|
+
border: (theme) => `1px solid ${theme.palette.divider}`,
|
|
74
|
+
borderRadius: radius,
|
|
75
|
+
backgroundColor: 'background.paper',
|
|
76
|
+
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',
|
|
77
|
+
'&:focus-within': {
|
|
78
|
+
borderColor: 'primary.main',
|
|
79
|
+
boxShadow: (theme) => `0 0 0 1px ${theme.palette.primary.main}`,
|
|
80
|
+
},
|
|
81
|
+
opacity: disabled ? 0.6 : 1,
|
|
82
|
+
pointerEvents: disabled ? 'none' : 'auto',
|
|
35
83
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
sx: {
|
|
42
|
-
...childProps.sx,
|
|
43
|
-
// Usa el selector correcto para anular el borde del NotchedOutline
|
|
44
|
-
'& .MuiOutlinedInput-notchedOutline': {
|
|
45
|
-
border: 'none !important',
|
|
46
|
-
},
|
|
47
|
-
// Asegura que el botón del DatePicker no tenga borde divisor
|
|
48
|
-
'& .MuiInputBase-root .MuiButtonBase-root': {
|
|
49
|
-
borderRight: 'none',
|
|
50
|
-
},
|
|
51
|
-
// Oculta el legend de MuiOutlinedInput para que el borde no tenga "muescas"
|
|
52
|
-
'& .MuiOutlinedInput-notchedOutline > legend': {
|
|
53
|
-
display: 'none',
|
|
54
|
-
},
|
|
84
|
+
// Cancelar el marginTop que Input/Select reservan en labelPosition="outside".
|
|
85
|
+
// El grupo ya lo reservó en su nivel externo.
|
|
86
|
+
'& .MuiFormControl-root, & > .InputGroup__slot > .MuiTextField-root, & > .InputGroup__slot > .MuiFormControl-root': {
|
|
87
|
+
marginTop: 0,
|
|
88
|
+
},
|
|
55
89
|
|
|
56
|
-
|
|
57
|
-
|
|
90
|
+
// Quitar el borde del notched outline interno: el borde visible es el del
|
|
91
|
+
// grupo, los separadores son los borderRight/borderBottom de cada slot.
|
|
92
|
+
'& .MuiOutlinedInput-notchedOutline': {
|
|
93
|
+
border: 'none',
|
|
94
|
+
},
|
|
58
95
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
96
|
+
// Forzar que todos los campos pinten sus esquinas cuadradas (las esquinas
|
|
97
|
+
// redondeadas se aplican solo al primer/último slot más abajo).
|
|
98
|
+
'& .MuiInputBase-root, & .MuiChip-root': {
|
|
99
|
+
borderRadius: 0,
|
|
100
|
+
},
|
|
63
101
|
|
|
102
|
+
// Botones integrados: sin radius propio, altura completa, sin sombra.
|
|
103
|
+
'& .MuiButton-root': {
|
|
104
|
+
borderRadius: 0,
|
|
105
|
+
height: '100%',
|
|
106
|
+
boxShadow: 'none',
|
|
107
|
+
border: 'none',
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
// Slots: cada hijo vive en un slot neutro que lo centra verticalmente.
|
|
111
|
+
'& > .InputGroup__slot': {
|
|
112
|
+
flex: 1,
|
|
113
|
+
display: 'flex',
|
|
114
|
+
alignItems: 'center',
|
|
115
|
+
minWidth: 0,
|
|
116
|
+
// Separador entre slots (horizontal: borderRight / vertical: borderBottom),
|
|
117
|
+
// usando el color de divider del theme.
|
|
118
|
+
...(isHorizontal
|
|
119
|
+
? { borderRight: (theme: Theme) => `1px solid ${theme.palette.divider}` }
|
|
120
|
+
: { borderBottom: (theme: Theme) => `1px solid ${theme.palette.divider}` }),
|
|
121
|
+
'&:last-of-type': {
|
|
122
|
+
borderRight: 'none',
|
|
123
|
+
borderBottom: 'none',
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
// Esquinas redondeadas: primer slot (izquierda o arriba).
|
|
128
|
+
'& > .InputGroup__slot:first-of-type .MuiInputBase-root, & > .InputGroup__slot:first-of-type .MuiButton-root, & > .InputGroup__slot:first-of-type .MuiChip-root':
|
|
129
|
+
isHorizontal
|
|
130
|
+
? {
|
|
131
|
+
borderTopLeftRadius: radius,
|
|
132
|
+
borderBottomLeftRadius: radius,
|
|
133
|
+
}
|
|
134
|
+
: {
|
|
135
|
+
borderTopLeftRadius: radius,
|
|
136
|
+
borderTopRightRadius: radius,
|
|
64
137
|
},
|
|
65
|
-
} as CommonProps)
|
|
66
|
-
) : (
|
|
67
|
-
child
|
|
68
|
-
);
|
|
69
138
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
</Box>
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
return child;
|
|
86
|
-
});
|
|
139
|
+
// Esquinas redondeadas: último slot (derecha o abajo).
|
|
140
|
+
'& > .InputGroup__slot:last-of-type .MuiInputBase-root, & > .InputGroup__slot:last-of-type .MuiButton-root, & > .InputGroup__slot:last-of-type .MuiChip-root':
|
|
141
|
+
isHorizontal
|
|
142
|
+
? {
|
|
143
|
+
borderTopRightRadius: radius,
|
|
144
|
+
borderBottomRightRadius: radius,
|
|
145
|
+
}
|
|
146
|
+
: {
|
|
147
|
+
borderBottomLeftRadius: radius,
|
|
148
|
+
borderBottomRightRadius: radius,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
87
151
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
marginTop: '10px'
|
|
95
|
-
}}
|
|
152
|
+
const baseSlotSx: SxProps<Theme> = {
|
|
153
|
+
flex: 1,
|
|
154
|
+
display: 'flex',
|
|
155
|
+
alignItems: 'center',
|
|
156
|
+
minWidth: 0,
|
|
157
|
+
};
|
|
96
158
|
|
|
97
|
-
|
|
159
|
+
return (
|
|
98
160
|
<Box
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
height: '32px',
|
|
104
|
-
border: '1px solid #ccc',
|
|
105
|
-
borderRadius: '10px',
|
|
106
|
-
padding: '8px 0px',
|
|
107
|
-
marginTop: '-5px',
|
|
108
|
-
marginBottom: '20px',
|
|
109
|
-
'& .MuiInputBase-root, & .MuiButtonBase-root, & .MuiChip-root': {
|
|
110
|
-
borderRadius: 0,
|
|
111
|
-
},
|
|
112
|
-
'& > div:first-of-type .MuiInputBase-root, & > div:first-of-type .MuiButtonBase-root, & > div:first-of-type .MuiChip-root': {
|
|
113
|
-
borderTopLeftRadius: '10px',
|
|
114
|
-
borderBottomLeftRadius: '10px',
|
|
115
|
-
},
|
|
116
|
-
'& > div:last-of-type .MuiInputBase-root, & > div:last-of-type .MuiButtonBase-root, & > div:last-of-type .MuiChip-root': {
|
|
117
|
-
borderTopRightRadius: '10px',
|
|
118
|
-
borderBottomRightRadius: '10px',
|
|
119
|
-
border: 'none !important'
|
|
120
|
-
},
|
|
121
|
-
// Estilo para los componentes que tienen `InputGroupChild` en la clase
|
|
122
|
-
'& .InputGroupChild': {
|
|
123
|
-
width: '100%',
|
|
124
|
-
},
|
|
125
|
-
'& > div:first-of-type .MuiInputBase-root > .MuiOutlinedInput-notchedOutline': {
|
|
126
|
-
border: 'none !important',
|
|
127
|
-
},
|
|
128
|
-
}}
|
|
161
|
+
data-testid="input-group"
|
|
162
|
+
className={className}
|
|
163
|
+
aria-disabled={disabled ? 'true' : undefined}
|
|
164
|
+
sx={mergeSx(baseSx, sx)}
|
|
129
165
|
>
|
|
130
|
-
{
|
|
166
|
+
{slots.map((child, i) => (
|
|
167
|
+
<Box
|
|
168
|
+
key={i}
|
|
169
|
+
className="InputGroup__slot"
|
|
170
|
+
sx={mergeSx(baseSlotSx, slotSx)}
|
|
171
|
+
>
|
|
172
|
+
{child}
|
|
173
|
+
</Box>
|
|
174
|
+
))}
|
|
131
175
|
</Box>
|
|
132
|
-
</Box>
|
|
133
176
|
);
|
|
134
177
|
};
|
|
135
178
|
|
|
136
|
-
export default InputGroup;
|
|
179
|
+
export default InputGroup;
|