@soyfri/shared-library 1.5.0 → 2.0.0-beta.1
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 +75 -38
- 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
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const DEFAULT_PRESET_NAME = "default";
|
|
3
|
+
function resolvePreset(componentName, presetName, theme) {
|
|
4
|
+
var _a;
|
|
5
|
+
if (!presetName || presetName === DEFAULT_PRESET_NAME) return void 0;
|
|
6
|
+
const componentPresets = (_a = theme.styles) == null ? void 0 : _a[componentName];
|
|
7
|
+
if (!componentPresets) return void 0;
|
|
8
|
+
const entry = componentPresets[presetName];
|
|
9
|
+
if (!entry) return void 0;
|
|
10
|
+
return typeof entry === "function" ? entry(theme) : entry;
|
|
11
|
+
}
|
|
12
|
+
exports.DEFAULT_PRESET_NAME = DEFAULT_PRESET_NAME;
|
|
13
|
+
exports.resolvePreset = resolvePreset;
|
|
14
|
+
//# sourceMappingURL=resolvePreset-CT3kU-K2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvePreset-CT3kU-K2.cjs","sources":["../src/components/_shared/resolvePreset.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles';\n\nimport type { LibraryComponentName, PresetStyle } from '../../theme/componentStyles';\n\n/**\n * Nombre del preset built-in del paquete. No se registra en el theme: si un\n * componente recibe `preset=\"default\"` (o no recibe preset), sólo aplica el\n * estilo base de fábrica.\n */\nexport const DEFAULT_PRESET_NAME = 'default';\n\n/**\n * Resuelve el sx de un preset registrado en `theme.styles[componentName]`.\n *\n * - Si `presetName` es `\"default\"` o `undefined`, devuelve `undefined`\n * (caller sólo aplicará el estilo base del paquete).\n * - Si la entrada en el theme es una función `(theme) => sx`, se ejecuta.\n * - Si la entrada no existe, devuelve `undefined` silenciosamente (no se\n * rompe el componente — la responsabilidad de registrarlo es del consumer).\n */\nexport function resolvePreset(\n componentName: LibraryComponentName,\n presetName: string | undefined,\n theme: Theme,\n): SxProps<Theme> | undefined {\n if (!presetName || presetName === DEFAULT_PRESET_NAME) return undefined;\n\n const componentPresets = theme.styles?.[componentName];\n if (!componentPresets) return undefined;\n\n const entry: PresetStyle | undefined = componentPresets[presetName];\n if (!entry) return undefined;\n\n return typeof entry === 'function' ? entry(theme) : entry;\n}\n"],"names":[],"mappings":";AASO,MAAM,sBAAsB;AAW5B,SAAS,cACd,eACA,YACA,OAC4B;;AAC5B,MAAI,CAAC,cAAc,eAAe,oBAAqB,QAAO;AAE9D,QAAM,oBAAmB,WAAM,WAAN,mBAAe;AACxC,MAAI,CAAC,iBAAkB,QAAO;AAE9B,QAAM,QAAiC,iBAAiB,UAAU;AAClE,MAAI,CAAC,MAAO,QAAO;AAEnB,SAAO,OAAO,UAAU,aAAa,MAAM,KAAK,IAAI;AACtD;;;"}
|
package/dist/styles.css
CHANGED
|
@@ -1,112 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
@
|
|
3
|
-
|
|
4
|
-
visibility: hidden;
|
|
5
|
-
}
|
|
6
|
-
.visible {
|
|
7
|
-
visibility: visible;
|
|
8
|
-
}
|
|
9
|
-
.absolute {
|
|
10
|
-
position: absolute;
|
|
11
|
-
}
|
|
12
|
-
.relative {
|
|
13
|
-
position: relative;
|
|
14
|
-
}
|
|
15
|
-
.sticky {
|
|
16
|
-
position: sticky;
|
|
17
|
-
}
|
|
18
|
-
.container {
|
|
19
|
-
width: 100%;
|
|
20
|
-
}
|
|
21
|
-
.block {
|
|
22
|
-
display: block;
|
|
23
|
-
}
|
|
24
|
-
.flex {
|
|
25
|
-
display: flex;
|
|
26
|
-
}
|
|
27
|
-
.grid {
|
|
28
|
-
display: grid;
|
|
29
|
-
}
|
|
30
|
-
.hidden {
|
|
31
|
-
display: none;
|
|
32
|
-
}
|
|
33
|
-
.inline-block {
|
|
34
|
-
display: inline-block;
|
|
35
|
-
}
|
|
36
|
-
.inline-flex {
|
|
37
|
-
display: inline-flex;
|
|
38
|
-
}
|
|
39
|
-
.table {
|
|
40
|
-
display: table;
|
|
41
|
-
}
|
|
42
|
-
.h-full {
|
|
43
|
-
height: 100%;
|
|
44
|
-
}
|
|
45
|
-
.w-full {
|
|
46
|
-
width: 100%;
|
|
47
|
-
}
|
|
48
|
-
.transform {
|
|
49
|
-
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
|
|
50
|
-
}
|
|
51
|
-
.items-center {
|
|
52
|
-
align-items: center;
|
|
53
|
-
}
|
|
54
|
-
.border {
|
|
55
|
-
border-style: var(--tw-border-style);
|
|
56
|
-
border-width: 1px;
|
|
57
|
-
}
|
|
58
|
-
.lowercase {
|
|
59
|
-
text-transform: lowercase;
|
|
60
|
-
}
|
|
61
|
-
.outline {
|
|
62
|
-
outline-style: var(--tw-outline-style);
|
|
63
|
-
outline-width: 1px;
|
|
64
|
-
}
|
|
65
|
-
.transition {
|
|
66
|
-
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
|
|
67
|
-
transition-timing-function: var(--tw-ease, ease);
|
|
68
|
-
transition-duration: var(--tw-duration, 0s);
|
|
69
|
-
}
|
|
70
|
-
@property --tw-rotate-x {
|
|
71
|
-
syntax: "*";
|
|
72
|
-
inherits: false;
|
|
73
|
-
}
|
|
74
|
-
@property --tw-rotate-y {
|
|
75
|
-
syntax: "*";
|
|
76
|
-
inherits: false;
|
|
77
|
-
}
|
|
78
|
-
@property --tw-rotate-z {
|
|
79
|
-
syntax: "*";
|
|
80
|
-
inherits: false;
|
|
81
|
-
}
|
|
82
|
-
@property --tw-skew-x {
|
|
83
|
-
syntax: "*";
|
|
84
|
-
inherits: false;
|
|
85
|
-
}
|
|
86
|
-
@property --tw-skew-y {
|
|
87
|
-
syntax: "*";
|
|
88
|
-
inherits: false;
|
|
89
|
-
}
|
|
90
|
-
@property --tw-border-style {
|
|
91
|
-
syntax: "*";
|
|
92
|
-
inherits: false;
|
|
93
|
-
initial-value: solid;
|
|
94
|
-
}
|
|
95
|
-
@property --tw-outline-style {
|
|
96
|
-
syntax: "*";
|
|
97
|
-
inherits: false;
|
|
98
|
-
initial-value: solid;
|
|
99
|
-
}
|
|
100
|
-
@layer properties {
|
|
101
|
-
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
|
|
102
|
-
*, ::before, ::after, ::backdrop {
|
|
103
|
-
--tw-rotate-x: initial;
|
|
104
|
-
--tw-rotate-y: initial;
|
|
105
|
-
--tw-rotate-z: initial;
|
|
106
|
-
--tw-skew-x: initial;
|
|
107
|
-
--tw-skew-y: initial;
|
|
108
|
-
--tw-border-style: solid;
|
|
109
|
-
--tw-outline-style: solid;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SxProps, Theme } from '@mui/material/styles';
|
|
2
|
+
/**
|
|
3
|
+
* Lista de componentes del paquete que soportan presets registrables en el
|
|
4
|
+
* theme. Si en el futuro se agrega otro componente al sistema, se extiende
|
|
5
|
+
* esta union.
|
|
6
|
+
*/
|
|
7
|
+
export type LibraryComponentName = 'Input' | 'Select' | 'Autocomplete' | 'DatePicker' | 'DateTimePicker' | 'Drawer' | 'AppBar' | 'Card' | 'ScrollTopButton';
|
|
8
|
+
/**
|
|
9
|
+
* Un estilo de preset. Puede ser un objeto sx directo o una función del theme
|
|
10
|
+
* para acceder a palette/typography/etc.
|
|
11
|
+
*/
|
|
12
|
+
export type PresetStyle = SxProps<Theme> | ((theme: Theme) => SxProps<Theme>);
|
|
13
|
+
/**
|
|
14
|
+
* Map de presets disponibles para un componente. Las keys son nombres libres
|
|
15
|
+
* elegidos por el consumidor (p.ej. `reddit`, `compact-filled`). El paquete
|
|
16
|
+
* no registra ninguna entrada: `preset="default"` significa "usar el estilo
|
|
17
|
+
* built-in de fábrica" y no requiere registro.
|
|
18
|
+
*/
|
|
19
|
+
export type ComponentPresets = Record<string, PresetStyle>;
|
|
20
|
+
/**
|
|
21
|
+
* Shape del namespace `theme.styles` — un map de componentes del paquete a
|
|
22
|
+
* sus presets registrados.
|
|
23
|
+
*/
|
|
24
|
+
export type LibraryStyles = Partial<Record<LibraryComponentName, ComponentPresets>>;
|
|
25
|
+
declare module '@mui/material/styles' {
|
|
26
|
+
interface Theme {
|
|
27
|
+
styles: LibraryStyles;
|
|
28
|
+
}
|
|
29
|
+
interface ThemeOptions {
|
|
30
|
+
styles?: LibraryStyles;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design tokens compartidos por los componentes de formulario
|
|
3
|
+
* (Input, Select, Autocomplete, DatePicker, DateTimePicker).
|
|
4
|
+
*
|
|
5
|
+
* Centralizar estos valores garantiza que:
|
|
6
|
+
* - el espaciado, la tipografía y las animaciones del label sean idénticos
|
|
7
|
+
* en todos los campos;
|
|
8
|
+
* - un cambio visual global (p.ej. cambiar el transform del shrink) se haga
|
|
9
|
+
* en un único archivo.
|
|
10
|
+
*/
|
|
11
|
+
/** Margen superior que deja el aire para el label flotante "outside". */
|
|
12
|
+
export declare const LABEL_MARGIN_TOP = "14px";
|
|
13
|
+
/** Padding vertical interno del input (TextField/Select/Picker sections). */
|
|
14
|
+
export declare const FIELD_INPUT_PADDING_Y = "8.5px";
|
|
15
|
+
/** Transform que aplica el label cuando sube arriba del input (shrink). */
|
|
16
|
+
export declare const LABEL_SHRINK_TRANSFORM = "translate(4px, -22px) scale(0.85)";
|
|
17
|
+
/** Origen del transform para el shrink. */
|
|
18
|
+
export declare const LABEL_TRANSFORM_ORIGIN = "top left";
|
|
19
|
+
/** Transición del label (color + transform + max-width). */
|
|
20
|
+
export declare const LABEL_TRANSITION: string;
|
|
21
|
+
/** Color del label en reposo. */
|
|
22
|
+
export declare const LABEL_COLOR_REST = "text.secondary";
|
|
23
|
+
/** Color del label cuando el campo tiene valor (shrink). */
|
|
24
|
+
export declare const LABEL_COLOR_FILLED = "text.primary";
|
|
25
|
+
/** Color del label cuando el campo está focused. */
|
|
26
|
+
export declare const LABEL_COLOR_FOCUSED = "primary.main";
|
|
27
|
+
/** Peso del label cuando sube (filled/focused). */
|
|
28
|
+
export declare const LABEL_FONT_WEIGHT_FILLED = 500;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const React = require("react");
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const defaultValue = {
|
|
5
|
+
currentStep: 0,
|
|
6
|
+
totalSteps: 0,
|
|
7
|
+
isFirst: true,
|
|
8
|
+
isLast: true,
|
|
9
|
+
completed: false,
|
|
10
|
+
nextStep: () => {
|
|
11
|
+
},
|
|
12
|
+
prevStep: () => {
|
|
13
|
+
},
|
|
14
|
+
goToStep: () => {
|
|
15
|
+
},
|
|
16
|
+
submitStep: () => {
|
|
17
|
+
},
|
|
18
|
+
reset: () => {
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const WizardContext = React.createContext(defaultValue);
|
|
22
|
+
const WizardProvider = ({
|
|
23
|
+
totalSteps,
|
|
24
|
+
initialStep = 0,
|
|
25
|
+
onSubmit,
|
|
26
|
+
onStepChange,
|
|
27
|
+
children
|
|
28
|
+
}) => {
|
|
29
|
+
const [currentStep, setCurrentStep] = React.useState(initialStep);
|
|
30
|
+
const [completed, setCompleted] = React.useState(false);
|
|
31
|
+
const changeStep = React.useCallback(
|
|
32
|
+
(newStep) => {
|
|
33
|
+
setCurrentStep((prev) => {
|
|
34
|
+
if (newStep === prev) return prev;
|
|
35
|
+
if (newStep < 0 || newStep >= totalSteps) return prev;
|
|
36
|
+
onStepChange == null ? void 0 : onStepChange(newStep, prev);
|
|
37
|
+
return newStep;
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
[totalSteps, onStepChange]
|
|
41
|
+
);
|
|
42
|
+
const nextStep = React.useCallback(() => {
|
|
43
|
+
changeStep(currentStep + 1);
|
|
44
|
+
}, [changeStep, currentStep]);
|
|
45
|
+
const prevStep = React.useCallback(() => {
|
|
46
|
+
changeStep(currentStep - 1);
|
|
47
|
+
}, [changeStep, currentStep]);
|
|
48
|
+
const goToStep = React.useCallback(
|
|
49
|
+
(stepNumber) => {
|
|
50
|
+
changeStep(stepNumber);
|
|
51
|
+
},
|
|
52
|
+
[changeStep]
|
|
53
|
+
);
|
|
54
|
+
const submitStep = React.useCallback(() => {
|
|
55
|
+
setCompleted(true);
|
|
56
|
+
onSubmit == null ? void 0 : onSubmit(currentStep);
|
|
57
|
+
}, [currentStep, onSubmit]);
|
|
58
|
+
const reset = React.useCallback(() => {
|
|
59
|
+
setCurrentStep(initialStep);
|
|
60
|
+
setCompleted(false);
|
|
61
|
+
}, [initialStep]);
|
|
62
|
+
const value = React.useMemo(
|
|
63
|
+
() => ({
|
|
64
|
+
currentStep,
|
|
65
|
+
totalSteps,
|
|
66
|
+
isFirst: currentStep === 0,
|
|
67
|
+
isLast: currentStep === totalSteps - 1,
|
|
68
|
+
completed,
|
|
69
|
+
nextStep,
|
|
70
|
+
prevStep,
|
|
71
|
+
goToStep,
|
|
72
|
+
submitStep,
|
|
73
|
+
reset
|
|
74
|
+
}),
|
|
75
|
+
[
|
|
76
|
+
currentStep,
|
|
77
|
+
totalSteps,
|
|
78
|
+
completed,
|
|
79
|
+
nextStep,
|
|
80
|
+
prevStep,
|
|
81
|
+
goToStep,
|
|
82
|
+
submitStep,
|
|
83
|
+
reset
|
|
84
|
+
]
|
|
85
|
+
);
|
|
86
|
+
return /* @__PURE__ */ jsxRuntime.jsx(WizardContext.Provider, { value, children });
|
|
87
|
+
};
|
|
88
|
+
function useWizard() {
|
|
89
|
+
return React.useContext(WizardContext);
|
|
90
|
+
}
|
|
91
|
+
exports.WizardContext = WizardContext;
|
|
92
|
+
exports.WizardProvider = WizardProvider;
|
|
93
|
+
exports.useWizard = useWizard;
|
|
94
|
+
//# sourceMappingURL=useWizard-CWdIxZzX.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWizard-CWdIxZzX.cjs","sources":["../src/hooks/Wizard/WizardContext.tsx","../src/hooks/Wizard/useWizard.ts"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useMemo,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\n\n/**\n * API expuesta por `useWizard()`.\n *\n * Nota de retro-compatibilidad: los nombres `submitStep`, `nextStep`,\n * `prevStep`, `goToStep` se mantienen idénticos al `WizardContext` de\n * `@soyfri/fri-web-components` para que consumers migrando no tengan que\n * cambiar sus llamadas. Se agregan campos extra opcionales que antes no\n * existían (`currentStep`, `totalSteps`, `isFirst`, `isLast`, `completed`).\n */\nexport interface WizardContextValue {\n /** Índice del paso actual (0-based). */\n currentStep: number;\n /** Total de pasos del wizard. */\n totalSteps: number;\n /** True si `currentStep === 0`. */\n isFirst: boolean;\n /** True si `currentStep === totalSteps - 1`. */\n isLast: boolean;\n /** True tras ejecutar `submitStep()` desde el último paso. */\n completed: boolean;\n /** Avanza al siguiente paso (no pasa de `totalSteps - 1`). */\n nextStep: () => void;\n /** Retrocede al paso anterior (no baja de 0). */\n prevStep: () => void;\n /** Salta a un paso específico (0-based). No-op si fuera de rango. */\n goToStep: (stepNumber: number) => void;\n /**\n * Envía el wizard. Marca `completed = true` y dispara el callback\n * `onSubmit` del provider. En el último paso suele reemplazar a `nextStep`.\n */\n submitStep: () => void;\n /** Resetea el wizard al paso inicial y limpia `completed`. */\n reset: () => void;\n}\n\nconst defaultValue: WizardContextValue = {\n currentStep: 0,\n totalSteps: 0,\n isFirst: true,\n isLast: true,\n completed: false,\n nextStep: () => {},\n prevStep: () => {},\n goToStep: () => {},\n submitStep: () => {},\n reset: () => {},\n};\n\nexport const WizardContext = createContext<WizardContextValue>(defaultValue);\n\nexport interface WizardProviderProps {\n /** Número total de pasos del wizard. Requerido. */\n totalSteps: number;\n /** Paso inicial (0-based). Default: 0. */\n initialStep?: number;\n /**\n * Callback disparado cuando se llama `submitStep()`. Recibe el paso actual.\n * El paquete NO ejecuta ninguna petición; queda a cargo del consumer.\n */\n onSubmit?: (currentStep: number) => void;\n /**\n * Callback disparado en cada cambio de paso (next/prev/goTo).\n * Útil para tracking o validaciones externas.\n */\n onStepChange?: (newStep: number, prevStep: number) => void;\n children?: ReactNode;\n}\n\n/**\n * Provider del wizard. Administra el `currentStep` internamente. El consumer\n * no necesita gestionar estado — sólo consumirlo con `useWizard()` desde\n * cualquier descendiente.\n *\n * ```tsx\n * <WizardProvider totalSteps={3} onSubmit={handleFinalSubmit}>\n * <Stepper ... />\n * <StepContent />\n * <WizardControls />\n * </WizardProvider>\n * ```\n */\nexport const WizardProvider: FC<WizardProviderProps> = ({\n totalSteps,\n initialStep = 0,\n onSubmit,\n onStepChange,\n children,\n}) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [completed, setCompleted] = useState(false);\n\n const changeStep = useCallback(\n (newStep: number) => {\n setCurrentStep((prev) => {\n if (newStep === prev) return prev;\n if (newStep < 0 || newStep >= totalSteps) return prev;\n onStepChange?.(newStep, prev);\n return newStep;\n });\n },\n [totalSteps, onStepChange],\n );\n\n const nextStep = useCallback(() => {\n changeStep(currentStep + 1);\n }, [changeStep, currentStep]);\n\n const prevStep = useCallback(() => {\n changeStep(currentStep - 1);\n }, [changeStep, currentStep]);\n\n const goToStep = useCallback(\n (stepNumber: number) => {\n changeStep(stepNumber);\n },\n [changeStep],\n );\n\n const submitStep = useCallback(() => {\n setCompleted(true);\n onSubmit?.(currentStep);\n }, [currentStep, onSubmit]);\n\n const reset = useCallback(() => {\n setCurrentStep(initialStep);\n setCompleted(false);\n }, [initialStep]);\n\n const value = useMemo<WizardContextValue>(\n () => ({\n currentStep,\n totalSteps,\n isFirst: currentStep === 0,\n isLast: currentStep === totalSteps - 1,\n completed,\n nextStep,\n prevStep,\n goToStep,\n submitStep,\n reset,\n }),\n [\n currentStep,\n totalSteps,\n completed,\n nextStep,\n prevStep,\n goToStep,\n submitStep,\n reset,\n ],\n );\n\n return (\n <WizardContext.Provider value={value}>{children}</WizardContext.Provider>\n );\n};\n","import { useContext } from 'react';\nimport { WizardContext, type WizardContextValue } from './WizardContext';\n\n/**\n * Hook para consumir el `WizardContext` desde cualquier descendiente de\n * `<WizardProvider>`.\n *\n * Si se llama fuera de un provider, devuelve los valores por defecto (no-op)\n * para mantener compatibilidad con el hook original de fri-web-components.\n */\nexport function useWizard(): WizardContextValue {\n return useContext(WizardContext);\n}\n"],"names":["createContext","useState","useCallback","useMemo","jsx","useContext"],"mappings":";;;AA4CA,MAAM,eAAmC;AAAA,EACvC,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,OAAO,MAAM;AAAA,EAAC;AAChB;AAEO,MAAM,gBAAgBA,MAAAA,cAAkC,YAAY;AAiCpE,MAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIC,MAAAA,SAAS,WAAW;AAC1D,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,KAAK;AAEhD,QAAM,aAAaC,MAAAA;AAAAA,IACjB,CAAC,YAAoB;AACnB,qBAAe,CAAC,SAAS;AACvB,YAAI,YAAY,KAAM,QAAO;AAC7B,YAAI,UAAU,KAAK,WAAW,WAAY,QAAO;AACjD,qDAAe,SAAS;AACxB,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,YAAY,YAAY;AAAA,EAAA;AAG3B,QAAM,WAAWA,MAAAA,YAAY,MAAM;AACjC,eAAW,cAAc,CAAC;AAAA,EAC5B,GAAG,CAAC,YAAY,WAAW,CAAC;AAE5B,QAAM,WAAWA,MAAAA,YAAY,MAAM;AACjC,eAAW,cAAc,CAAC;AAAA,EAC5B,GAAG,CAAC,YAAY,WAAW,CAAC;AAE5B,QAAM,WAAWA,MAAAA;AAAAA,IACf,CAAC,eAAuB;AACtB,iBAAW,UAAU;AAAA,IACvB;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAGb,QAAM,aAAaA,MAAAA,YAAY,MAAM;AACnC,iBAAa,IAAI;AACjB,yCAAW;AAAA,EACb,GAAG,CAAC,aAAa,QAAQ,CAAC;AAE1B,QAAM,QAAQA,MAAAA,YAAY,MAAM;AAC9B,mBAAe,WAAW;AAC1B,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,QAAQC,MAAAA;AAAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,gBAAgB;AAAA,MACzB,QAAQ,gBAAgB,aAAa;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAGF,SACEC,2BAAAA,IAAC,cAAc,UAAd,EAAuB,OAAe,SAAA,CAAS;AAEpD;AC3JO,SAAS,YAAgC;AAC9C,SAAOC,MAAAA,WAAW,aAAa;AACjC;;;;"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createContext, useState, useCallback, useMemo, useContext } from "react";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
const defaultValue = {
|
|
4
|
+
currentStep: 0,
|
|
5
|
+
totalSteps: 0,
|
|
6
|
+
isFirst: true,
|
|
7
|
+
isLast: true,
|
|
8
|
+
completed: false,
|
|
9
|
+
nextStep: () => {
|
|
10
|
+
},
|
|
11
|
+
prevStep: () => {
|
|
12
|
+
},
|
|
13
|
+
goToStep: () => {
|
|
14
|
+
},
|
|
15
|
+
submitStep: () => {
|
|
16
|
+
},
|
|
17
|
+
reset: () => {
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const WizardContext = createContext(defaultValue);
|
|
21
|
+
const WizardProvider = ({
|
|
22
|
+
totalSteps,
|
|
23
|
+
initialStep = 0,
|
|
24
|
+
onSubmit,
|
|
25
|
+
onStepChange,
|
|
26
|
+
children
|
|
27
|
+
}) => {
|
|
28
|
+
const [currentStep, setCurrentStep] = useState(initialStep);
|
|
29
|
+
const [completed, setCompleted] = useState(false);
|
|
30
|
+
const changeStep = useCallback(
|
|
31
|
+
(newStep) => {
|
|
32
|
+
setCurrentStep((prev) => {
|
|
33
|
+
if (newStep === prev) return prev;
|
|
34
|
+
if (newStep < 0 || newStep >= totalSteps) return prev;
|
|
35
|
+
onStepChange == null ? void 0 : onStepChange(newStep, prev);
|
|
36
|
+
return newStep;
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
[totalSteps, onStepChange]
|
|
40
|
+
);
|
|
41
|
+
const nextStep = useCallback(() => {
|
|
42
|
+
changeStep(currentStep + 1);
|
|
43
|
+
}, [changeStep, currentStep]);
|
|
44
|
+
const prevStep = useCallback(() => {
|
|
45
|
+
changeStep(currentStep - 1);
|
|
46
|
+
}, [changeStep, currentStep]);
|
|
47
|
+
const goToStep = useCallback(
|
|
48
|
+
(stepNumber) => {
|
|
49
|
+
changeStep(stepNumber);
|
|
50
|
+
},
|
|
51
|
+
[changeStep]
|
|
52
|
+
);
|
|
53
|
+
const submitStep = useCallback(() => {
|
|
54
|
+
setCompleted(true);
|
|
55
|
+
onSubmit == null ? void 0 : onSubmit(currentStep);
|
|
56
|
+
}, [currentStep, onSubmit]);
|
|
57
|
+
const reset = useCallback(() => {
|
|
58
|
+
setCurrentStep(initialStep);
|
|
59
|
+
setCompleted(false);
|
|
60
|
+
}, [initialStep]);
|
|
61
|
+
const value = useMemo(
|
|
62
|
+
() => ({
|
|
63
|
+
currentStep,
|
|
64
|
+
totalSteps,
|
|
65
|
+
isFirst: currentStep === 0,
|
|
66
|
+
isLast: currentStep === totalSteps - 1,
|
|
67
|
+
completed,
|
|
68
|
+
nextStep,
|
|
69
|
+
prevStep,
|
|
70
|
+
goToStep,
|
|
71
|
+
submitStep,
|
|
72
|
+
reset
|
|
73
|
+
}),
|
|
74
|
+
[
|
|
75
|
+
currentStep,
|
|
76
|
+
totalSteps,
|
|
77
|
+
completed,
|
|
78
|
+
nextStep,
|
|
79
|
+
prevStep,
|
|
80
|
+
goToStep,
|
|
81
|
+
submitStep,
|
|
82
|
+
reset
|
|
83
|
+
]
|
|
84
|
+
);
|
|
85
|
+
return /* @__PURE__ */ jsx(WizardContext.Provider, { value, children });
|
|
86
|
+
};
|
|
87
|
+
function useWizard() {
|
|
88
|
+
return useContext(WizardContext);
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
WizardProvider as W,
|
|
92
|
+
WizardContext as a,
|
|
93
|
+
useWizard as u
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=useWizard-CWq--C3o.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWizard-CWq--C3o.js","sources":["../src/hooks/Wizard/WizardContext.tsx","../src/hooks/Wizard/useWizard.ts"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useMemo,\n useState,\n type FC,\n type ReactNode,\n} from 'react';\n\n/**\n * API expuesta por `useWizard()`.\n *\n * Nota de retro-compatibilidad: los nombres `submitStep`, `nextStep`,\n * `prevStep`, `goToStep` se mantienen idénticos al `WizardContext` de\n * `@soyfri/fri-web-components` para que consumers migrando no tengan que\n * cambiar sus llamadas. Se agregan campos extra opcionales que antes no\n * existían (`currentStep`, `totalSteps`, `isFirst`, `isLast`, `completed`).\n */\nexport interface WizardContextValue {\n /** Índice del paso actual (0-based). */\n currentStep: number;\n /** Total de pasos del wizard. */\n totalSteps: number;\n /** True si `currentStep === 0`. */\n isFirst: boolean;\n /** True si `currentStep === totalSteps - 1`. */\n isLast: boolean;\n /** True tras ejecutar `submitStep()` desde el último paso. */\n completed: boolean;\n /** Avanza al siguiente paso (no pasa de `totalSteps - 1`). */\n nextStep: () => void;\n /** Retrocede al paso anterior (no baja de 0). */\n prevStep: () => void;\n /** Salta a un paso específico (0-based). No-op si fuera de rango. */\n goToStep: (stepNumber: number) => void;\n /**\n * Envía el wizard. Marca `completed = true` y dispara el callback\n * `onSubmit` del provider. En el último paso suele reemplazar a `nextStep`.\n */\n submitStep: () => void;\n /** Resetea el wizard al paso inicial y limpia `completed`. */\n reset: () => void;\n}\n\nconst defaultValue: WizardContextValue = {\n currentStep: 0,\n totalSteps: 0,\n isFirst: true,\n isLast: true,\n completed: false,\n nextStep: () => {},\n prevStep: () => {},\n goToStep: () => {},\n submitStep: () => {},\n reset: () => {},\n};\n\nexport const WizardContext = createContext<WizardContextValue>(defaultValue);\n\nexport interface WizardProviderProps {\n /** Número total de pasos del wizard. Requerido. */\n totalSteps: number;\n /** Paso inicial (0-based). Default: 0. */\n initialStep?: number;\n /**\n * Callback disparado cuando se llama `submitStep()`. Recibe el paso actual.\n * El paquete NO ejecuta ninguna petición; queda a cargo del consumer.\n */\n onSubmit?: (currentStep: number) => void;\n /**\n * Callback disparado en cada cambio de paso (next/prev/goTo).\n * Útil para tracking o validaciones externas.\n */\n onStepChange?: (newStep: number, prevStep: number) => void;\n children?: ReactNode;\n}\n\n/**\n * Provider del wizard. Administra el `currentStep` internamente. El consumer\n * no necesita gestionar estado — sólo consumirlo con `useWizard()` desde\n * cualquier descendiente.\n *\n * ```tsx\n * <WizardProvider totalSteps={3} onSubmit={handleFinalSubmit}>\n * <Stepper ... />\n * <StepContent />\n * <WizardControls />\n * </WizardProvider>\n * ```\n */\nexport const WizardProvider: FC<WizardProviderProps> = ({\n totalSteps,\n initialStep = 0,\n onSubmit,\n onStepChange,\n children,\n}) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [completed, setCompleted] = useState(false);\n\n const changeStep = useCallback(\n (newStep: number) => {\n setCurrentStep((prev) => {\n if (newStep === prev) return prev;\n if (newStep < 0 || newStep >= totalSteps) return prev;\n onStepChange?.(newStep, prev);\n return newStep;\n });\n },\n [totalSteps, onStepChange],\n );\n\n const nextStep = useCallback(() => {\n changeStep(currentStep + 1);\n }, [changeStep, currentStep]);\n\n const prevStep = useCallback(() => {\n changeStep(currentStep - 1);\n }, [changeStep, currentStep]);\n\n const goToStep = useCallback(\n (stepNumber: number) => {\n changeStep(stepNumber);\n },\n [changeStep],\n );\n\n const submitStep = useCallback(() => {\n setCompleted(true);\n onSubmit?.(currentStep);\n }, [currentStep, onSubmit]);\n\n const reset = useCallback(() => {\n setCurrentStep(initialStep);\n setCompleted(false);\n }, [initialStep]);\n\n const value = useMemo<WizardContextValue>(\n () => ({\n currentStep,\n totalSteps,\n isFirst: currentStep === 0,\n isLast: currentStep === totalSteps - 1,\n completed,\n nextStep,\n prevStep,\n goToStep,\n submitStep,\n reset,\n }),\n [\n currentStep,\n totalSteps,\n completed,\n nextStep,\n prevStep,\n goToStep,\n submitStep,\n reset,\n ],\n );\n\n return (\n <WizardContext.Provider value={value}>{children}</WizardContext.Provider>\n );\n};\n","import { useContext } from 'react';\nimport { WizardContext, type WizardContextValue } from './WizardContext';\n\n/**\n * Hook para consumir el `WizardContext` desde cualquier descendiente de\n * `<WizardProvider>`.\n *\n * Si se llama fuera de un provider, devuelve los valores por defecto (no-op)\n * para mantener compatibilidad con el hook original de fri-web-components.\n */\nexport function useWizard(): WizardContextValue {\n return useContext(WizardContext);\n}\n"],"names":[],"mappings":";;AA4CA,MAAM,eAAmC;AAAA,EACvC,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,OAAO,MAAM;AAAA,EAAC;AAChB;AAEO,MAAM,gBAAgB,cAAkC,YAAY;AAiCpE,MAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,WAAW;AAC1D,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,QAAM,aAAa;AAAA,IACjB,CAAC,YAAoB;AACnB,qBAAe,CAAC,SAAS;AACvB,YAAI,YAAY,KAAM,QAAO;AAC7B,YAAI,UAAU,KAAK,WAAW,WAAY,QAAO;AACjD,qDAAe,SAAS;AACxB,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAAC,YAAY,YAAY;AAAA,EAAA;AAG3B,QAAM,WAAW,YAAY,MAAM;AACjC,eAAW,cAAc,CAAC;AAAA,EAC5B,GAAG,CAAC,YAAY,WAAW,CAAC;AAE5B,QAAM,WAAW,YAAY,MAAM;AACjC,eAAW,cAAc,CAAC;AAAA,EAC5B,GAAG,CAAC,YAAY,WAAW,CAAC;AAE5B,QAAM,WAAW;AAAA,IACf,CAAC,eAAuB;AACtB,iBAAW,UAAU;AAAA,IACvB;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAGb,QAAM,aAAa,YAAY,MAAM;AACnC,iBAAa,IAAI;AACjB,yCAAW;AAAA,EACb,GAAG,CAAC,aAAa,QAAQ,CAAC;AAE1B,QAAM,QAAQ,YAAY,MAAM;AAC9B,mBAAe,WAAW;AAC1B,iBAAa,KAAK;AAAA,EACpB,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,gBAAgB;AAAA,MACzB,QAAQ,gBAAgB,aAAa;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAGF,SACE,oBAAC,cAAc,UAAd,EAAuB,OAAe,SAAA,CAAS;AAEpD;AC3JO,SAAS,YAAgC;AAC9C,SAAO,WAAW,aAAa;AACjC;"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { fn } from '@storybook/test';
|
|
4
|
+
import {
|
|
5
|
+
Box,
|
|
6
|
+
Button,
|
|
7
|
+
Table,
|
|
8
|
+
TableBody,
|
|
9
|
+
TableCell,
|
|
10
|
+
TableHead,
|
|
11
|
+
TableRow,
|
|
12
|
+
Paper,
|
|
13
|
+
Chip,
|
|
14
|
+
} from '@mui/material';
|
|
15
|
+
import EditIcon from '@mui/icons-material/Edit';
|
|
16
|
+
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
|
|
17
|
+
import DeleteIcon from '@mui/icons-material/Delete';
|
|
18
|
+
import VisibilityIcon from '@mui/icons-material/Visibility';
|
|
19
|
+
import DownloadIcon from '@mui/icons-material/Download';
|
|
20
|
+
import ShareIcon from '@mui/icons-material/Share';
|
|
21
|
+
import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
|
|
22
|
+
|
|
23
|
+
import { ActionMenu } from './ActionMenu';
|
|
24
|
+
|
|
25
|
+
const meta: Meta<typeof ActionMenu> = {
|
|
26
|
+
title: 'Components/ActionMenu',
|
|
27
|
+
component: ActionMenu,
|
|
28
|
+
tags: ['autodocs'],
|
|
29
|
+
parameters: {
|
|
30
|
+
docs: {
|
|
31
|
+
description: {
|
|
32
|
+
component:
|
|
33
|
+
'Menú de acciones compacto pensado para celdas de tabla, cabeceras y cualquier lugar donde hagan falta acciones secundarias detrás de un trigger. Reemplaza los patrones `<Dropdown>` de react-bootstrap.',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export default meta;
|
|
40
|
+
type Story = StoryObj<typeof ActionMenu>;
|
|
41
|
+
|
|
42
|
+
// ── Stories ──────────────────────────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
export const Default: Story = {
|
|
45
|
+
args: {
|
|
46
|
+
items: [
|
|
47
|
+
{ label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
|
|
48
|
+
{ label: 'Duplicar', icon: <ContentCopyIcon fontSize="small" />, onClick: fn() },
|
|
49
|
+
{ label: 'Ver detalle', icon: <VisibilityIcon fontSize="small" />, onClick: fn() },
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
parameters: {
|
|
53
|
+
docs: {
|
|
54
|
+
description: {
|
|
55
|
+
story:
|
|
56
|
+
'Menú básico con trigger de 3 puntos (icono por defecto). Cada item tiene label + icono + onClick.',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const WithDangerItem: Story = {
|
|
63
|
+
args: {
|
|
64
|
+
items: [
|
|
65
|
+
{ label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
|
|
66
|
+
{ label: 'Duplicar', icon: <ContentCopyIcon fontSize="small" />, onClick: fn() },
|
|
67
|
+
{
|
|
68
|
+
label: 'Eliminar',
|
|
69
|
+
icon: <DeleteIcon fontSize="small" />,
|
|
70
|
+
onClick: fn(),
|
|
71
|
+
danger: true,
|
|
72
|
+
dividerBefore: true,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
parameters: {
|
|
77
|
+
docs: {
|
|
78
|
+
description: {
|
|
79
|
+
story:
|
|
80
|
+
'Item final marcado como `danger` (pintado en rojo) con `dividerBefore: true` para separarlo visualmente del resto. Patrón típico para acciones destructivas.',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const WithDisabledItems: Story = {
|
|
87
|
+
args: {
|
|
88
|
+
items: [
|
|
89
|
+
{ label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
|
|
90
|
+
{
|
|
91
|
+
label: 'Exportar',
|
|
92
|
+
icon: <DownloadIcon fontSize="small" />,
|
|
93
|
+
onClick: fn(),
|
|
94
|
+
disabled: true,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
label: 'Compartir',
|
|
98
|
+
icon: <ShareIcon fontSize="small" />,
|
|
99
|
+
onClick: fn(),
|
|
100
|
+
disabled: true,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
parameters: {
|
|
105
|
+
docs: {
|
|
106
|
+
description: {
|
|
107
|
+
story:
|
|
108
|
+
'Items deshabilitados condicionalmente — útil cuando una acción no aplica al estado actual del row (ej. exportar un recurso que aún no se procesó).',
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export const CustomTrigger: Story = {
|
|
115
|
+
args: {
|
|
116
|
+
items: [
|
|
117
|
+
{ label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
|
|
118
|
+
{ label: 'Duplicar', icon: <ContentCopyIcon fontSize="small" />, onClick: fn() },
|
|
119
|
+
{ label: 'Eliminar', icon: <DeleteIcon fontSize="small" />, onClick: fn(), danger: true },
|
|
120
|
+
],
|
|
121
|
+
trigger: (
|
|
122
|
+
<Button variant="outlined" startIcon={<MoreHorizIcon />}>
|
|
123
|
+
Más
|
|
124
|
+
</Button>
|
|
125
|
+
),
|
|
126
|
+
},
|
|
127
|
+
parameters: {
|
|
128
|
+
docs: {
|
|
129
|
+
description: {
|
|
130
|
+
story:
|
|
131
|
+
'El trigger por defecto es un IconButton de 3 puntos, pero podés pasar cualquier nodo (botón, chip, icono custom). El `onClick` del menú se inyecta automáticamente al trigger clonado.',
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const InsideTableCell: Story = {
|
|
138
|
+
render: () => {
|
|
139
|
+
const rows = [
|
|
140
|
+
{ id: 1, name: 'Comercio A', status: 'Activo' },
|
|
141
|
+
{ id: 2, name: 'Comercio B', status: 'Pendiente' },
|
|
142
|
+
{ id: 3, name: 'Comercio C', status: 'Suspendido' },
|
|
143
|
+
];
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<Paper sx={{ maxWidth: 720 }}>
|
|
147
|
+
<Table size="small">
|
|
148
|
+
<TableHead>
|
|
149
|
+
<TableRow>
|
|
150
|
+
<TableCell>ID</TableCell>
|
|
151
|
+
<TableCell>Comercio</TableCell>
|
|
152
|
+
<TableCell>Estado</TableCell>
|
|
153
|
+
<TableCell align="right">Acciones</TableCell>
|
|
154
|
+
</TableRow>
|
|
155
|
+
</TableHead>
|
|
156
|
+
<TableBody>
|
|
157
|
+
{rows.map((row) => (
|
|
158
|
+
<TableRow key={row.id} hover>
|
|
159
|
+
<TableCell>{row.id}</TableCell>
|
|
160
|
+
<TableCell>{row.name}</TableCell>
|
|
161
|
+
<TableCell>
|
|
162
|
+
<Chip
|
|
163
|
+
label={row.status}
|
|
164
|
+
size="small"
|
|
165
|
+
color={
|
|
166
|
+
row.status === 'Activo'
|
|
167
|
+
? 'success'
|
|
168
|
+
: row.status === 'Pendiente'
|
|
169
|
+
? 'warning'
|
|
170
|
+
: 'error'
|
|
171
|
+
}
|
|
172
|
+
/>
|
|
173
|
+
</TableCell>
|
|
174
|
+
<TableCell align="right">
|
|
175
|
+
<ActionMenu
|
|
176
|
+
items={[
|
|
177
|
+
{
|
|
178
|
+
label: 'Ver detalle',
|
|
179
|
+
icon: <VisibilityIcon fontSize="small" />,
|
|
180
|
+
onClick: fn(() => console.log('Ver', row.id)),
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
label: 'Editar',
|
|
184
|
+
icon: <EditIcon fontSize="small" />,
|
|
185
|
+
onClick: fn(() => console.log('Editar', row.id)),
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
label: 'Eliminar',
|
|
189
|
+
icon: <DeleteIcon fontSize="small" />,
|
|
190
|
+
onClick: fn(() => console.log('Eliminar', row.id)),
|
|
191
|
+
danger: true,
|
|
192
|
+
dividerBefore: true,
|
|
193
|
+
},
|
|
194
|
+
]}
|
|
195
|
+
/>
|
|
196
|
+
</TableCell>
|
|
197
|
+
</TableRow>
|
|
198
|
+
))}
|
|
199
|
+
</TableBody>
|
|
200
|
+
</Table>
|
|
201
|
+
</Paper>
|
|
202
|
+
);
|
|
203
|
+
},
|
|
204
|
+
parameters: {
|
|
205
|
+
docs: {
|
|
206
|
+
description: {
|
|
207
|
+
story:
|
|
208
|
+
'Caso de uso principal: un `ActionMenu` por cada fila de una tabla. Reemplaza exactamente el patrón `DropDownActions` + `react-bootstrap Dropdown` usado hoy en Afiliaciones.',
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
export const DisabledTrigger: Story = {
|
|
215
|
+
args: {
|
|
216
|
+
disabled: true,
|
|
217
|
+
items: [
|
|
218
|
+
{ label: 'Editar', icon: <EditIcon fontSize="small" />, onClick: fn() },
|
|
219
|
+
{ label: 'Eliminar', icon: <DeleteIcon fontSize="small" />, onClick: fn(), danger: true },
|
|
220
|
+
],
|
|
221
|
+
},
|
|
222
|
+
parameters: {
|
|
223
|
+
docs: {
|
|
224
|
+
description: {
|
|
225
|
+
story:
|
|
226
|
+
'Cuando el row o la acción no tiene permisos, se puede deshabilitar el trigger entero pasando `disabled`.',
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
};
|