@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
package/build.js
CHANGED
|
@@ -15,79 +15,117 @@ const readmePath = join(projectRoot, 'README.md');
|
|
|
15
15
|
// Leer el package.json original
|
|
16
16
|
const originalPackageJson = JSON.parse(readFileSync(originalPackageJsonPath, 'utf8'));
|
|
17
17
|
|
|
18
|
-
// Inicializar el nuevo objeto exports
|
|
19
|
-
|
|
18
|
+
// Inicializar el nuevo objeto exports.
|
|
19
|
+
// IMPORTANTE: el workflow publica con `working-directory: dist`, por lo que
|
|
20
|
+
// `dist/` es la RAÍZ del paquete publicado. Todos los paths acá son relativos
|
|
21
|
+
// a dist/ (es decir, sin el prefijo "./dist/").
|
|
22
|
+
const newExports = {
|
|
20
23
|
".": {
|
|
24
|
+
"types": "./index.d.ts",
|
|
21
25
|
"import": "./index.js",
|
|
22
|
-
"require": "./index.cjs"
|
|
23
|
-
|
|
26
|
+
"require": "./index.cjs"
|
|
27
|
+
},
|
|
28
|
+
"./styles.css": "./styles.css",
|
|
29
|
+
"./mui": {
|
|
30
|
+
"types": "./mui.d.ts"
|
|
24
31
|
},
|
|
25
32
|
"./package.json": "./package.json"
|
|
26
33
|
};
|
|
27
34
|
|
|
28
|
-
// Función para procesar directorios
|
|
29
|
-
|
|
35
|
+
// Función para procesar directorios y crear entradas en exports.
|
|
36
|
+
//
|
|
37
|
+
// Nota sobre los archivos generados por vite (según `vite.config.js`):
|
|
38
|
+
// - Runtime: components/<Name>/<Name>.js y .cjs
|
|
39
|
+
// - Types barrel components/<Name>/index.d.ts (el archivo barrel de src/components/<Name>/index.ts)
|
|
40
|
+
// - Types comp.: components/<Name>/<Name>.d.ts (el archivo del componente src/components/<Name>/<Name>.tsx)
|
|
41
|
+
//
|
|
42
|
+
// Para el consumer, el import `@soyfri/shared-library/components/<Name>` debe
|
|
43
|
+
// resolver al BARREL, por lo tanto:
|
|
44
|
+
// - types → ./components/<Name>/index.d.ts (barrel types)
|
|
45
|
+
// - import → ./components/<Name>/<Name>.js (barrel runtime)
|
|
46
|
+
// - require→ ./components/<Name>/<Name>.cjs (barrel runtime)
|
|
47
|
+
const processDirectories = (sourceDir, distSubDir, exportPrefix) => {
|
|
30
48
|
if (!existsSync(sourceDir)) {
|
|
31
49
|
console.log(`Directorio no encontrado: ${sourceDir}. Saltando.`);
|
|
32
50
|
return;
|
|
33
51
|
}
|
|
34
|
-
|
|
35
|
-
if (!existsSync(
|
|
36
|
-
mkdirSync(
|
|
52
|
+
|
|
53
|
+
if (!existsSync(distSubDir)) {
|
|
54
|
+
mkdirSync(distSubDir, { recursive: true });
|
|
37
55
|
}
|
|
38
56
|
|
|
39
|
-
const
|
|
40
|
-
|
|
57
|
+
const moduleDirs = sync(`${sourceDir}/*/`);
|
|
58
|
+
|
|
41
59
|
console.log(`Buscando módulos en: ${sourceDir}`);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
//
|
|
47
|
-
if (!/^[A-Z]/.test(
|
|
48
|
-
console.log(` - Saltando '${
|
|
49
|
-
return;
|
|
60
|
+
|
|
61
|
+
moduleDirs.forEach(moduleDirPath => {
|
|
62
|
+
const moduleName = basename(moduleDirPath);
|
|
63
|
+
|
|
64
|
+
// Saltar módulos privados (_shared, _utils, etc.) y los que no empiezan con mayúscula.
|
|
65
|
+
if (!/^[A-Z]/.test(moduleName)) {
|
|
66
|
+
console.log(` - Saltando '${moduleName}' porque no empieza con mayúscula.`);
|
|
67
|
+
return;
|
|
50
68
|
}
|
|
51
69
|
|
|
52
|
-
console.log(` - Módulo encontrado: ${
|
|
53
|
-
|
|
54
|
-
//
|
|
55
|
-
|
|
70
|
+
console.log(` - Módulo encontrado: ${moduleName}`);
|
|
71
|
+
|
|
72
|
+
// Asegurar que exista la carpeta en dist (vite ya la debería haber creado,
|
|
73
|
+
// pero esto es idempotente).
|
|
74
|
+
const distModuleFolder = join(distSubDir, moduleName);
|
|
56
75
|
if (!existsSync(distModuleFolder)) {
|
|
57
76
|
mkdirSync(distModuleFolder, { recursive: true });
|
|
58
77
|
}
|
|
59
78
|
|
|
60
|
-
|
|
61
|
-
const exportPath = `./${exportPrefix}/${componentName}`;
|
|
79
|
+
const exportPath = `./${exportPrefix}/${moduleName}`;
|
|
62
80
|
newExports[exportPath] = {
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
81
|
+
"types": `./${exportPrefix}/${moduleName}/index.d.ts`,
|
|
82
|
+
"import": `./${exportPrefix}/${moduleName}/${moduleName}.js`,
|
|
83
|
+
"require": `./${exportPrefix}/${moduleName}/${moduleName}.cjs`
|
|
66
84
|
};
|
|
67
85
|
});
|
|
68
86
|
};
|
|
69
87
|
|
|
70
|
-
// Procesar componentes
|
|
88
|
+
// Procesar componentes y hooks.
|
|
71
89
|
processDirectories(srcComponentsDir, distComponentsDir, 'components');
|
|
72
|
-
|
|
73
|
-
// Procesar hooks
|
|
74
90
|
processDirectories(srcHooksDir, distHooksDir, 'hooks');
|
|
75
91
|
|
|
76
|
-
//
|
|
77
|
-
|
|
78
|
-
|
|
92
|
+
// Construir el package.json de dist/ partiendo del original, pero corrigiendo
|
|
93
|
+
// los paths de `main`, `module` y `types` para que sean flat (sin prefijo "dist/")
|
|
94
|
+
// porque dist/ ES la raíz del paquete publicado.
|
|
95
|
+
const distPackageJson = {
|
|
96
|
+
...originalPackageJson,
|
|
97
|
+
main: "./index.cjs",
|
|
98
|
+
module: "./index.js",
|
|
99
|
+
types: "./index.d.ts",
|
|
100
|
+
exports: newExports,
|
|
101
|
+
// Declarar qué archivos forman parte del tarball.
|
|
102
|
+
files: [
|
|
103
|
+
"index.js",
|
|
104
|
+
"index.cjs",
|
|
105
|
+
"index.d.ts",
|
|
106
|
+
"index.js.map",
|
|
107
|
+
"index.cjs.map",
|
|
108
|
+
"mui.d.ts",
|
|
109
|
+
"styles.css",
|
|
110
|
+
"components",
|
|
111
|
+
"hooks",
|
|
112
|
+
"theme"
|
|
113
|
+
],
|
|
114
|
+
// Side effects: el CSS tiene side effects, el resto es tree-shakeable.
|
|
115
|
+
sideEffects: ["**/*.css"]
|
|
116
|
+
};
|
|
79
117
|
|
|
80
|
-
// Eliminar propiedades innecesarias
|
|
118
|
+
// Eliminar propiedades innecesarias para el paquete publicado.
|
|
81
119
|
delete distPackageJson.scripts;
|
|
82
120
|
delete distPackageJson.devDependencies;
|
|
83
121
|
delete distPackageJson.private;
|
|
122
|
+
delete distPackageJson.overrides;
|
|
84
123
|
|
|
85
|
-
// Asegurarse de que el directorio 'dist' exista
|
|
86
124
|
if (!existsSync(distDir)) {
|
|
87
125
|
mkdirSync(distDir, { recursive: true });
|
|
88
126
|
}
|
|
89
127
|
|
|
90
|
-
// Copiar README.md a la carpeta dist
|
|
128
|
+
// Copiar README.md a la carpeta dist.
|
|
91
129
|
if (existsSync(readmePath)) {
|
|
92
130
|
copyFileSync(readmePath, join(distDir, 'README.md'));
|
|
93
131
|
console.log('Copiando README.md a la carpeta dist.');
|
|
@@ -95,7 +133,6 @@ if (existsSync(readmePath)) {
|
|
|
95
133
|
console.log('No se encontró README.md en la raíz del proyecto. Saltando.');
|
|
96
134
|
}
|
|
97
135
|
|
|
98
|
-
// Escribir el nuevo package.json en dist/
|
|
99
136
|
writeFileSync(distPackageJsonPath, JSON.stringify(distPackageJson, null, 2), 'utf8');
|
|
100
137
|
|
|
101
138
|
console.log(`\n'package.json' generado exitosamente en: ${distPackageJsonPath}`);
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
6
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
+
var __spreadValues = (a, b) => {
|
|
8
|
+
for (var prop in b || (b = {}))
|
|
9
|
+
if (__hasOwnProp.call(b, prop))
|
|
10
|
+
__defNormalProp(a, prop, b[prop]);
|
|
11
|
+
if (__getOwnPropSymbols)
|
|
12
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
13
|
+
if (__propIsEnum.call(b, prop))
|
|
14
|
+
__defNormalProp(a, prop, b[prop]);
|
|
15
|
+
}
|
|
16
|
+
return a;
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
19
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
20
|
+
const React = require("react");
|
|
21
|
+
const material = require("@mui/material");
|
|
22
|
+
const MoreVertIcon = require("@mui/icons-material/MoreVert");
|
|
23
|
+
function ActionMenu({
|
|
24
|
+
items,
|
|
25
|
+
trigger,
|
|
26
|
+
triggerTooltip = "Acciones",
|
|
27
|
+
anchorOrigin = { vertical: "bottom", horizontal: "right" },
|
|
28
|
+
transformOrigin = { vertical: "top", horizontal: "right" },
|
|
29
|
+
menuSx,
|
|
30
|
+
disabled = false,
|
|
31
|
+
className
|
|
32
|
+
}) {
|
|
33
|
+
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
34
|
+
const open = Boolean(anchorEl);
|
|
35
|
+
const handleOpen = (event) => {
|
|
36
|
+
if (disabled) return;
|
|
37
|
+
event.stopPropagation();
|
|
38
|
+
setAnchorEl(event.currentTarget);
|
|
39
|
+
};
|
|
40
|
+
const handleClose = () => setAnchorEl(null);
|
|
41
|
+
const handleItemClick = (event, item) => {
|
|
42
|
+
var _a;
|
|
43
|
+
event.stopPropagation();
|
|
44
|
+
(_a = item.onClick) == null ? void 0 : _a.call(item, event);
|
|
45
|
+
handleClose();
|
|
46
|
+
};
|
|
47
|
+
const triggerElement = trigger ? React.isValidElement(trigger) ? React.cloneElement(trigger, {
|
|
48
|
+
onClick: handleOpen,
|
|
49
|
+
disabled
|
|
50
|
+
}) : /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: handleOpen, children: trigger }) : /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: triggerTooltip, arrow: true, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
51
|
+
material.IconButton,
|
|
52
|
+
{
|
|
53
|
+
size: "small",
|
|
54
|
+
onClick: handleOpen,
|
|
55
|
+
disabled,
|
|
56
|
+
"aria-label": triggerTooltip,
|
|
57
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(MoreVertIcon, { fontSize: "small" })
|
|
58
|
+
}
|
|
59
|
+
) }) });
|
|
60
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("span", { className, children: [
|
|
61
|
+
triggerElement,
|
|
62
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
63
|
+
material.Menu,
|
|
64
|
+
{
|
|
65
|
+
anchorEl,
|
|
66
|
+
open,
|
|
67
|
+
onClose: handleClose,
|
|
68
|
+
anchorOrigin,
|
|
69
|
+
transformOrigin,
|
|
70
|
+
slotProps: { paper: { sx: __spreadValues({ minWidth: 180 }, menuSx) } },
|
|
71
|
+
children: items.map((item, idx) => {
|
|
72
|
+
var _a;
|
|
73
|
+
const key = (_a = item.key) != null ? _a : `${String(item.label)}-${idx}`;
|
|
74
|
+
const node = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
75
|
+
material.MenuItem,
|
|
76
|
+
{
|
|
77
|
+
disabled: item.disabled,
|
|
78
|
+
onClick: (event) => handleItemClick(event, item),
|
|
79
|
+
sx: (theme) => ({
|
|
80
|
+
color: item.danger ? theme.palette.error.main : "inherit",
|
|
81
|
+
"& .MuiListItemIcon-root": {
|
|
82
|
+
color: item.danger ? theme.palette.error.main : "inherit",
|
|
83
|
+
minWidth: 32
|
|
84
|
+
}
|
|
85
|
+
}),
|
|
86
|
+
children: [
|
|
87
|
+
item.icon && /* @__PURE__ */ jsxRuntime.jsx(material.ListItemIcon, { children: item.icon }),
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.ListItemText, { primary: item.label })
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
key
|
|
92
|
+
);
|
|
93
|
+
if (item.dividerBefore && idx > 0) {
|
|
94
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
|
|
95
|
+
/* @__PURE__ */ jsxRuntime.jsx(material.Divider, {}),
|
|
96
|
+
node
|
|
97
|
+
] }, `${key}-frag`);
|
|
98
|
+
}
|
|
99
|
+
return node;
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
] });
|
|
104
|
+
}
|
|
105
|
+
exports.ActionMenu = ActionMenu;
|
|
106
|
+
exports.default = ActionMenu;
|
|
107
|
+
//# sourceMappingURL=ActionMenu.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionMenu.cjs","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["import React, { useState, type ReactNode, type MouseEvent } from 'react';\nimport {\n IconButton,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n Divider,\n Tooltip,\n} from '@mui/material';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface ActionMenuItem {\n /** Key única para React. Si no se provee, se usa el label. */\n key?: string;\n /** Texto del item. */\n label: ReactNode;\n /** Icono opcional a la izquierda. */\n icon?: ReactNode;\n /** Handler de click. Recibe el evento del MenuItem. */\n onClick?: (event: MouseEvent<HTMLLIElement>) => void;\n /** Deshabilita el item. */\n disabled?: boolean;\n /** Marca el item como destructivo (pinta color error). */\n danger?: boolean;\n /** Inserta un `<Divider />` ANTES de este item. */\n dividerBefore?: boolean;\n}\n\nexport interface ActionMenuProps {\n /** Lista de items del menú. */\n items: ActionMenuItem[];\n /**\n * Elemento trigger. Si no se provee, se renderiza un IconButton con icono\n * de tres puntos (MoreVertIcon) — el patrón típico de celda de tabla.\n */\n trigger?: ReactNode;\n /** Texto de tooltip sobre el trigger default. Default: \"Acciones\". */\n triggerTooltip?: string;\n /** Anchor origin del menu. Default: { vertical: 'bottom', horizontal: 'right' }. */\n anchorOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** Transform origin del menu. Default: { vertical: 'top', horizontal: 'right' }. */\n transformOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** sx del Menu (Paper interno). */\n menuSx?: SxProps<Theme>;\n /** Deshabilita el trigger entero. */\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Menú de acciones compacto, pensado para celdas de tabla y cabeceras.\n * Reemplaza los patrones `<Dropdown>` de react-bootstrap.\n *\n * ```tsx\n * <ActionMenu\n * items={[\n * { label: 'Editar', icon: <EditIcon />, onClick: handleEdit },\n * { label: 'Duplicar', icon: <CopyIcon />, onClick: handleDup },\n * { label: 'Eliminar', icon: <TrashIcon />, onClick: handleDel, danger: true, dividerBefore: true },\n * ]}\n * />\n * ```\n */\nexport function ActionMenu({\n items,\n trigger,\n triggerTooltip = 'Acciones',\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n menuSx,\n disabled = false,\n className,\n}: ActionMenuProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = (event: MouseEvent<HTMLElement>) => {\n if (disabled) return;\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => setAnchorEl(null);\n\n const handleItemClick = (\n event: MouseEvent<HTMLLIElement>,\n item: ActionMenuItem,\n ) => {\n event.stopPropagation();\n item.onClick?.(event);\n handleClose();\n };\n\n const triggerElement = trigger ? (\n React.isValidElement(trigger) ? (\n React.cloneElement(trigger as React.ReactElement<any>, {\n onClick: handleOpen,\n disabled,\n })\n ) : (\n <span onClick={handleOpen}>{trigger}</span>\n )\n ) : (\n <Tooltip title={triggerTooltip} arrow>\n <span>\n <IconButton\n size=\"small\"\n onClick={handleOpen}\n disabled={disabled}\n aria-label={triggerTooltip}\n >\n <MoreVertIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n );\n\n return (\n <span className={className}>\n {triggerElement}\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{ paper: { sx: { minWidth: 180, ...(menuSx as any) } } }}\n >\n {items.map((item, idx) => {\n const key = item.key ?? `${String(item.label)}-${idx}`;\n const node = (\n <MenuItem\n key={key}\n disabled={item.disabled}\n onClick={(event) => handleItemClick(event, item)}\n sx={(theme) => ({\n color: item.danger ? theme.palette.error.main : 'inherit',\n '& .MuiListItemIcon-root': {\n color: item.danger\n ? theme.palette.error.main\n : 'inherit',\n minWidth: 32,\n },\n })}\n >\n {item.icon && <ListItemIcon>{item.icon}</ListItemIcon>}\n <ListItemText primary={item.label} />\n </MenuItem>\n );\n\n if (item.dividerBefore && idx > 0) {\n return (\n <React.Fragment key={`${key}-frag`}>\n <Divider />\n {node}\n </React.Fragment>\n );\n }\n return node;\n })}\n </Menu>\n </span>\n );\n}\n\nexport default ActionMenu;\n"],"names":["useState","jsx","Tooltip","IconButton","jsxs","Menu","MenuItem","ListItemIcon","ListItemText","Divider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,eAAe,EAAE,UAAU,UAAU,YAAY,QAAA;AAAA,EACjD,kBAAkB,EAAE,UAAU,OAAO,YAAY,QAAA;AAAA,EACjD;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAAoB;AAClB,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAA6B,IAAI;AACjE,QAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAM,aAAa,CAAC,UAAmC;AACrD,QAAI,SAAU;AACd,UAAM,gBAAA;AACN,gBAAY,MAAM,aAAa;AAAA,EACjC;AAEA,QAAM,cAAc,MAAM,YAAY,IAAI;AAE1C,QAAM,kBAAkB,CACtB,OACA,SACG;;AACH,UAAM,gBAAA;AACN,eAAK,YAAL,8BAAe;AACf,gBAAA;AAAA,EACF;AAEA,QAAM,iBAAiB,UACrB,MAAM,eAAe,OAAO,IAC1B,MAAM,aAAa,SAAoC;AAAA,IACrD,SAAS;AAAA,IACT;AAAA,EAAA,CACD,IAEDC,2BAAAA,IAAC,QAAA,EAAK,SAAS,YAAa,UAAA,QAAA,CAAQ,IAGtCA,2BAAAA,IAACC,SAAAA,WAAQ,OAAO,gBAAgB,OAAK,MACnC,yCAAC,QAAA,EACC,UAAAD,2BAAAA;AAAAA,IAACE,SAAAA;AAAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,cAAY;AAAA,MAEZ,UAAAF,2BAAAA,IAAC,cAAA,EAAa,UAAS,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA,GAEnC,EAAA,CACF;AAGF,SACEG,gCAAC,UAAK,WACH,UAAA;AAAA,IAAA;AAAA,IACDH,2BAAAA;AAAAA,MAACI,SAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,WAAW,EAAE,OAAO,EAAE,IAAI,iBAAE,UAAU,OAAS,UAAiB;AAAA,QAE/D,UAAA,MAAM,IAAI,CAAC,MAAM,QAAQ;;AACxB,gBAAM,OAAM,UAAK,QAAL,YAAY,GAAG,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG;AACpD,gBAAM,OACJD,2BAAAA;AAAAA,YAACE,SAAAA;AAAAA,YAAA;AAAA,cAEC,UAAU,KAAK;AAAA,cACf,SAAS,CAAC,UAAU,gBAAgB,OAAO,IAAI;AAAA,cAC/C,IAAI,CAAC,WAAW;AAAA,gBACd,OAAO,KAAK,SAAS,MAAM,QAAQ,MAAM,OAAO;AAAA,gBAChD,2BAA2B;AAAA,kBACzB,OAAO,KAAK,SACR,MAAM,QAAQ,MAAM,OACpB;AAAA,kBACJ,UAAU;AAAA,gBAAA;AAAA,cACZ;AAAA,cAGD,UAAA;AAAA,gBAAA,KAAK,QAAQL,+BAACM,SAAAA,cAAA,EAAc,UAAA,KAAK,MAAK;AAAA,gBACvCN,2BAAAA,IAACO,SAAAA,cAAA,EAAa,SAAS,KAAK,MAAA,CAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAd9B;AAAA,UAAA;AAkBT,cAAI,KAAK,iBAAiB,MAAM,GAAG;AACjC,mBACEJ,gCAAC,MAAM,UAAN,EACC,UAAA;AAAA,cAAAH,2BAAAA,IAACQ,SAAAA,SAAA,EAAQ;AAAA,cACR;AAAA,YAAA,EAAA,GAFkB,GAAG,GAAG,OAG3B;AAAA,UAEJ;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;;;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { ReactNode, MouseEvent } from 'react';
|
|
2
|
+
import { SxProps, Theme } from '@mui/material/styles';
|
|
3
|
+
export interface ActionMenuItem {
|
|
4
|
+
/** Key única para React. Si no se provee, se usa el label. */
|
|
5
|
+
key?: string;
|
|
6
|
+
/** Texto del item. */
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
/** Icono opcional a la izquierda. */
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
/** Handler de click. Recibe el evento del MenuItem. */
|
|
11
|
+
onClick?: (event: MouseEvent<HTMLLIElement>) => void;
|
|
12
|
+
/** Deshabilita el item. */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
/** Marca el item como destructivo (pinta color error). */
|
|
15
|
+
danger?: boolean;
|
|
16
|
+
/** Inserta un `<Divider />` ANTES de este item. */
|
|
17
|
+
dividerBefore?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ActionMenuProps {
|
|
20
|
+
/** Lista de items del menú. */
|
|
21
|
+
items: ActionMenuItem[];
|
|
22
|
+
/**
|
|
23
|
+
* Elemento trigger. Si no se provee, se renderiza un IconButton con icono
|
|
24
|
+
* de tres puntos (MoreVertIcon) — el patrón típico de celda de tabla.
|
|
25
|
+
*/
|
|
26
|
+
trigger?: ReactNode;
|
|
27
|
+
/** Texto de tooltip sobre el trigger default. Default: "Acciones". */
|
|
28
|
+
triggerTooltip?: string;
|
|
29
|
+
/** Anchor origin del menu. Default: { vertical: 'bottom', horizontal: 'right' }. */
|
|
30
|
+
anchorOrigin?: {
|
|
31
|
+
vertical: 'top' | 'center' | 'bottom';
|
|
32
|
+
horizontal: 'left' | 'center' | 'right';
|
|
33
|
+
};
|
|
34
|
+
/** Transform origin del menu. Default: { vertical: 'top', horizontal: 'right' }. */
|
|
35
|
+
transformOrigin?: {
|
|
36
|
+
vertical: 'top' | 'center' | 'bottom';
|
|
37
|
+
horizontal: 'left' | 'center' | 'right';
|
|
38
|
+
};
|
|
39
|
+
/** sx del Menu (Paper interno). */
|
|
40
|
+
menuSx?: SxProps<Theme>;
|
|
41
|
+
/** Deshabilita el trigger entero. */
|
|
42
|
+
disabled?: boolean;
|
|
43
|
+
className?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Menú de acciones compacto, pensado para celdas de tabla y cabeceras.
|
|
47
|
+
* Reemplaza los patrones `<Dropdown>` de react-bootstrap.
|
|
48
|
+
*
|
|
49
|
+
* ```tsx
|
|
50
|
+
* <ActionMenu
|
|
51
|
+
* items={[
|
|
52
|
+
* { label: 'Editar', icon: <EditIcon />, onClick: handleEdit },
|
|
53
|
+
* { label: 'Duplicar', icon: <CopyIcon />, onClick: handleDup },
|
|
54
|
+
* { label: 'Eliminar', icon: <TrashIcon />, onClick: handleDel, danger: true, dividerBefore: true },
|
|
55
|
+
* ]}
|
|
56
|
+
* />
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function ActionMenu({ items, trigger, triggerTooltip, anchorOrigin, transformOrigin, menuSx, disabled, className, }: ActionMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
export default ActionMenu;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
+
import React__default, { useState } from "react";
|
|
19
|
+
import { Tooltip, IconButton, Menu, MenuItem, ListItemIcon, ListItemText, Divider } from "@mui/material";
|
|
20
|
+
import MoreVertIcon from "@mui/icons-material/MoreVert";
|
|
21
|
+
function ActionMenu({
|
|
22
|
+
items,
|
|
23
|
+
trigger,
|
|
24
|
+
triggerTooltip = "Acciones",
|
|
25
|
+
anchorOrigin = { vertical: "bottom", horizontal: "right" },
|
|
26
|
+
transformOrigin = { vertical: "top", horizontal: "right" },
|
|
27
|
+
menuSx,
|
|
28
|
+
disabled = false,
|
|
29
|
+
className
|
|
30
|
+
}) {
|
|
31
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
32
|
+
const open = Boolean(anchorEl);
|
|
33
|
+
const handleOpen = (event) => {
|
|
34
|
+
if (disabled) return;
|
|
35
|
+
event.stopPropagation();
|
|
36
|
+
setAnchorEl(event.currentTarget);
|
|
37
|
+
};
|
|
38
|
+
const handleClose = () => setAnchorEl(null);
|
|
39
|
+
const handleItemClick = (event, item) => {
|
|
40
|
+
var _a;
|
|
41
|
+
event.stopPropagation();
|
|
42
|
+
(_a = item.onClick) == null ? void 0 : _a.call(item, event);
|
|
43
|
+
handleClose();
|
|
44
|
+
};
|
|
45
|
+
const triggerElement = trigger ? React__default.isValidElement(trigger) ? React__default.cloneElement(trigger, {
|
|
46
|
+
onClick: handleOpen,
|
|
47
|
+
disabled
|
|
48
|
+
}) : /* @__PURE__ */ jsx("span", { onClick: handleOpen, children: trigger }) : /* @__PURE__ */ jsx(Tooltip, { title: triggerTooltip, arrow: true, children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(
|
|
49
|
+
IconButton,
|
|
50
|
+
{
|
|
51
|
+
size: "small",
|
|
52
|
+
onClick: handleOpen,
|
|
53
|
+
disabled,
|
|
54
|
+
"aria-label": triggerTooltip,
|
|
55
|
+
children: /* @__PURE__ */ jsx(MoreVertIcon, { fontSize: "small" })
|
|
56
|
+
}
|
|
57
|
+
) }) });
|
|
58
|
+
return /* @__PURE__ */ jsxs("span", { className, children: [
|
|
59
|
+
triggerElement,
|
|
60
|
+
/* @__PURE__ */ jsx(
|
|
61
|
+
Menu,
|
|
62
|
+
{
|
|
63
|
+
anchorEl,
|
|
64
|
+
open,
|
|
65
|
+
onClose: handleClose,
|
|
66
|
+
anchorOrigin,
|
|
67
|
+
transformOrigin,
|
|
68
|
+
slotProps: { paper: { sx: __spreadValues({ minWidth: 180 }, menuSx) } },
|
|
69
|
+
children: items.map((item, idx) => {
|
|
70
|
+
var _a;
|
|
71
|
+
const key = (_a = item.key) != null ? _a : `${String(item.label)}-${idx}`;
|
|
72
|
+
const node = /* @__PURE__ */ jsxs(
|
|
73
|
+
MenuItem,
|
|
74
|
+
{
|
|
75
|
+
disabled: item.disabled,
|
|
76
|
+
onClick: (event) => handleItemClick(event, item),
|
|
77
|
+
sx: (theme) => ({
|
|
78
|
+
color: item.danger ? theme.palette.error.main : "inherit",
|
|
79
|
+
"& .MuiListItemIcon-root": {
|
|
80
|
+
color: item.danger ? theme.palette.error.main : "inherit",
|
|
81
|
+
minWidth: 32
|
|
82
|
+
}
|
|
83
|
+
}),
|
|
84
|
+
children: [
|
|
85
|
+
item.icon && /* @__PURE__ */ jsx(ListItemIcon, { children: item.icon }),
|
|
86
|
+
/* @__PURE__ */ jsx(ListItemText, { primary: item.label })
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
key
|
|
90
|
+
);
|
|
91
|
+
if (item.dividerBefore && idx > 0) {
|
|
92
|
+
return /* @__PURE__ */ jsxs(React__default.Fragment, { children: [
|
|
93
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
94
|
+
node
|
|
95
|
+
] }, `${key}-frag`);
|
|
96
|
+
}
|
|
97
|
+
return node;
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
] });
|
|
102
|
+
}
|
|
103
|
+
export {
|
|
104
|
+
ActionMenu,
|
|
105
|
+
ActionMenu as default
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=ActionMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionMenu.js","sources":["../../../src/components/ActionMenu/ActionMenu.tsx"],"sourcesContent":["import React, { useState, type ReactNode, type MouseEvent } from 'react';\nimport {\n IconButton,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n Divider,\n Tooltip,\n} from '@mui/material';\nimport MoreVertIcon from '@mui/icons-material/MoreVert';\nimport type { SxProps, Theme } from '@mui/material/styles';\n\nexport interface ActionMenuItem {\n /** Key única para React. Si no se provee, se usa el label. */\n key?: string;\n /** Texto del item. */\n label: ReactNode;\n /** Icono opcional a la izquierda. */\n icon?: ReactNode;\n /** Handler de click. Recibe el evento del MenuItem. */\n onClick?: (event: MouseEvent<HTMLLIElement>) => void;\n /** Deshabilita el item. */\n disabled?: boolean;\n /** Marca el item como destructivo (pinta color error). */\n danger?: boolean;\n /** Inserta un `<Divider />` ANTES de este item. */\n dividerBefore?: boolean;\n}\n\nexport interface ActionMenuProps {\n /** Lista de items del menú. */\n items: ActionMenuItem[];\n /**\n * Elemento trigger. Si no se provee, se renderiza un IconButton con icono\n * de tres puntos (MoreVertIcon) — el patrón típico de celda de tabla.\n */\n trigger?: ReactNode;\n /** Texto de tooltip sobre el trigger default. Default: \"Acciones\". */\n triggerTooltip?: string;\n /** Anchor origin del menu. Default: { vertical: 'bottom', horizontal: 'right' }. */\n anchorOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** Transform origin del menu. Default: { vertical: 'top', horizontal: 'right' }. */\n transformOrigin?: {\n vertical: 'top' | 'center' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n /** sx del Menu (Paper interno). */\n menuSx?: SxProps<Theme>;\n /** Deshabilita el trigger entero. */\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * Menú de acciones compacto, pensado para celdas de tabla y cabeceras.\n * Reemplaza los patrones `<Dropdown>` de react-bootstrap.\n *\n * ```tsx\n * <ActionMenu\n * items={[\n * { label: 'Editar', icon: <EditIcon />, onClick: handleEdit },\n * { label: 'Duplicar', icon: <CopyIcon />, onClick: handleDup },\n * { label: 'Eliminar', icon: <TrashIcon />, onClick: handleDel, danger: true, dividerBefore: true },\n * ]}\n * />\n * ```\n */\nexport function ActionMenu({\n items,\n trigger,\n triggerTooltip = 'Acciones',\n anchorOrigin = { vertical: 'bottom', horizontal: 'right' },\n transformOrigin = { vertical: 'top', horizontal: 'right' },\n menuSx,\n disabled = false,\n className,\n}: ActionMenuProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = (event: MouseEvent<HTMLElement>) => {\n if (disabled) return;\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => setAnchorEl(null);\n\n const handleItemClick = (\n event: MouseEvent<HTMLLIElement>,\n item: ActionMenuItem,\n ) => {\n event.stopPropagation();\n item.onClick?.(event);\n handleClose();\n };\n\n const triggerElement = trigger ? (\n React.isValidElement(trigger) ? (\n React.cloneElement(trigger as React.ReactElement<any>, {\n onClick: handleOpen,\n disabled,\n })\n ) : (\n <span onClick={handleOpen}>{trigger}</span>\n )\n ) : (\n <Tooltip title={triggerTooltip} arrow>\n <span>\n <IconButton\n size=\"small\"\n onClick={handleOpen}\n disabled={disabled}\n aria-label={triggerTooltip}\n >\n <MoreVertIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n );\n\n return (\n <span className={className}>\n {triggerElement}\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n slotProps={{ paper: { sx: { minWidth: 180, ...(menuSx as any) } } }}\n >\n {items.map((item, idx) => {\n const key = item.key ?? `${String(item.label)}-${idx}`;\n const node = (\n <MenuItem\n key={key}\n disabled={item.disabled}\n onClick={(event) => handleItemClick(event, item)}\n sx={(theme) => ({\n color: item.danger ? theme.palette.error.main : 'inherit',\n '& .MuiListItemIcon-root': {\n color: item.danger\n ? theme.palette.error.main\n : 'inherit',\n minWidth: 32,\n },\n })}\n >\n {item.icon && <ListItemIcon>{item.icon}</ListItemIcon>}\n <ListItemText primary={item.label} />\n </MenuItem>\n );\n\n if (item.dividerBefore && idx > 0) {\n return (\n <React.Fragment key={`${key}-frag`}>\n <Divider />\n {node}\n </React.Fragment>\n );\n }\n return node;\n })}\n </Menu>\n </span>\n );\n}\n\nexport default ActionMenu;\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuEO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,eAAe,EAAE,UAAU,UAAU,YAAY,QAAA;AAAA,EACjD,kBAAkB,EAAE,UAAU,OAAO,YAAY,QAAA;AAAA,EACjD;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAAoB;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAA6B,IAAI;AACjE,QAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAM,aAAa,CAAC,UAAmC;AACrD,QAAI,SAAU;AACd,UAAM,gBAAA;AACN,gBAAY,MAAM,aAAa;AAAA,EACjC;AAEA,QAAM,cAAc,MAAM,YAAY,IAAI;AAE1C,QAAM,kBAAkB,CACtB,OACA,SACG;;AACH,UAAM,gBAAA;AACN,eAAK,YAAL,8BAAe;AACf,gBAAA;AAAA,EACF;AAEA,QAAM,iBAAiB,UACrBA,eAAM,eAAe,OAAO,IAC1BA,eAAM,aAAa,SAAoC;AAAA,IACrD,SAAS;AAAA,IACT;AAAA,EAAA,CACD,IAED,oBAAC,QAAA,EAAK,SAAS,YAAa,UAAA,QAAA,CAAQ,IAGtC,oBAAC,WAAQ,OAAO,gBAAgB,OAAK,MACnC,8BAAC,QAAA,EACC,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,cAAY;AAAA,MAEZ,UAAA,oBAAC,cAAA,EAAa,UAAS,QAAA,CAAQ;AAAA,IAAA;AAAA,EAAA,GAEnC,EAAA,CACF;AAGF,SACE,qBAAC,UAAK,WACH,UAAA;AAAA,IAAA;AAAA,IACD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA,WAAW,EAAE,OAAO,EAAE,IAAI,iBAAE,UAAU,OAAS,UAAiB;AAAA,QAE/D,UAAA,MAAM,IAAI,CAAC,MAAM,QAAQ;;AACxB,gBAAM,OAAM,UAAK,QAAL,YAAY,GAAG,OAAO,KAAK,KAAK,CAAC,IAAI,GAAG;AACpD,gBAAM,OACJ;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,UAAU,KAAK;AAAA,cACf,SAAS,CAAC,UAAU,gBAAgB,OAAO,IAAI;AAAA,cAC/C,IAAI,CAAC,WAAW;AAAA,gBACd,OAAO,KAAK,SAAS,MAAM,QAAQ,MAAM,OAAO;AAAA,gBAChD,2BAA2B;AAAA,kBACzB,OAAO,KAAK,SACR,MAAM,QAAQ,MAAM,OACpB;AAAA,kBACJ,UAAU;AAAA,gBAAA;AAAA,cACZ;AAAA,cAGD,UAAA;AAAA,gBAAA,KAAK,QAAQ,oBAAC,cAAA,EAAc,UAAA,KAAK,MAAK;AAAA,gBACvC,oBAAC,cAAA,EAAa,SAAS,KAAK,MAAA,CAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAd9B;AAAA,UAAA;AAkBT,cAAI,KAAK,iBAAiB,MAAM,GAAG;AACjC,mBACE,qBAACA,eAAM,UAAN,EACC,UAAA;AAAA,cAAA,oBAAC,SAAA,EAAQ;AAAA,cACR;AAAA,YAAA,EAAA,GAFkB,GAAG,GAAG,OAG3B;AAAA,UAEJ;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ;"}
|