@soyfri/shared-library 3.0.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ActionMenu-BXRVKopM.js +106 -0
- package/ActionMenu-BXRVKopM.js.map +1 -0
- package/ActionMenu-wNWkDZWh.cjs +105 -0
- package/ActionMenu-wNWkDZWh.cjs.map +1 -0
- package/AppBarMenuToggle-BpXBMeca.js +128 -0
- package/AppBarMenuToggle-BpXBMeca.js.map +1 -0
- package/AppBarMenuToggle-D_RJGtHO.cjs +127 -0
- package/AppBarMenuToggle-D_RJGtHO.cjs.map +1 -0
- package/{Autocomplete-CejWztBY.cjs → Autocomplete-Bd3bN4Cw.cjs} +16 -11
- package/Autocomplete-Bd3bN4Cw.cjs.map +1 -0
- package/{Autocomplete-C_lW1VER.js → Autocomplete-E5aSUGVK.js} +16 -11
- package/Autocomplete-E5aSUGVK.js.map +1 -0
- package/{Avatar-Dw5rzayR.cjs → Avatar-BjyfSNvP.cjs} +3 -7
- package/Avatar-BjyfSNvP.cjs.map +1 -0
- package/{Avatar-H8akSege.js → Avatar-C_C4bcb9.js} +3 -7
- package/Avatar-C_C4bcb9.js.map +1 -0
- package/{Checkbox-gB5YKkVo.js → Checkbox-BL4kvHFB.js} +3 -2
- package/Checkbox-BL4kvHFB.js.map +1 -0
- package/{Checkbox-BCqMFWt4.cjs → Checkbox-Bx4Asmg7.cjs} +3 -2
- package/Checkbox-Bx4Asmg7.cjs.map +1 -0
- package/{DatePicker-t7uDTZMl.cjs → DatePicker-CMcQddi1.cjs} +45 -42
- package/DatePicker-CMcQddi1.cjs.map +1 -0
- package/{DatePicker-_IGWc3I5.js → DatePicker-D__RSgs-.js} +45 -42
- package/DatePicker-D__RSgs-.js.map +1 -0
- package/{DateTimePicker-BxQyjTCY.cjs → DateTimePicker-BVJGq1A0.cjs} +7 -15
- package/DateTimePicker-BVJGq1A0.cjs.map +1 -0
- package/{DateTimePicker-CrmWav_j.js → DateTimePicker-LeaE716a.js} +7 -15
- package/DateTimePicker-LeaE716a.js.map +1 -0
- package/DrawerItem--OTb3X9v.cjs +270 -0
- package/DrawerItem--OTb3X9v.cjs.map +1 -0
- package/DrawerItem-DKlMQ-xs.js +271 -0
- package/DrawerItem-DKlMQ-xs.js.map +1 -0
- package/Flyout-DCcDBYKT.js +117 -0
- package/Flyout-DCcDBYKT.js.map +1 -0
- package/Flyout-fycujUVf.cjs +116 -0
- package/Flyout-fycujUVf.cjs.map +1 -0
- package/Gallery-ClBJxCMc.js +491 -0
- package/Gallery-ClBJxCMc.js.map +1 -0
- package/Gallery-Cn1Bj_ao.cjs +490 -0
- package/Gallery-Cn1Bj_ao.cjs.map +1 -0
- package/Icon-CUwK2c8z.js +108 -0
- package/Icon-CUwK2c8z.js.map +1 -0
- package/Icon-ChnAivGo.cjs +107 -0
- package/Icon-ChnAivGo.cjs.map +1 -0
- package/{Input-DP_fKl38.js → Input-BibHlnGN.js} +18 -11
- package/Input-BibHlnGN.js.map +1 -0
- package/{Input-CScC87J5.cjs → Input-Bpjw7qwq.cjs} +18 -11
- package/Input-Bpjw7qwq.cjs.map +1 -0
- package/InputGroup-BZ7cmAcg.cjs +140 -0
- package/InputGroup-BZ7cmAcg.cjs.map +1 -0
- package/InputGroup-D5pXKGjZ.js +141 -0
- package/InputGroup-D5pXKGjZ.js.map +1 -0
- package/MenuButton-C4s8rG05.cjs +79 -0
- package/MenuButton-C4s8rG05.cjs.map +1 -0
- package/MenuButton-CZRN4P6x.js +80 -0
- package/MenuButton-CZRN4P6x.js.map +1 -0
- package/README.md +0 -8
- package/{RadioGroup-Dd0rHXSX.cjs → RadioGroup-DVvmmDs3.cjs} +3 -2
- package/RadioGroup-DVvmmDs3.cjs.map +1 -0
- package/{RadioGroup-bO-ahP9T.js → RadioGroup-cKCpag8W.js} +3 -2
- package/RadioGroup-cKCpag8W.js.map +1 -0
- package/{Select-BY5Y0qZ1.js → Select-BaY3zJhq.js} +4 -3
- package/Select-BaY3zJhq.js.map +1 -0
- package/{Select-CURrHSyl.cjs → Select-WpHNCHHz.cjs} +4 -3
- package/Select-WpHNCHHz.cjs.map +1 -0
- package/{Switch-CQFOopYy.cjs → Switch-B4ex7yKR.cjs} +3 -2
- package/Switch-B4ex7yKR.cjs.map +1 -0
- package/{Switch-D72dpkH2.js → Switch-CY1Dd2ff.js} +3 -2
- package/Switch-CY1Dd2ff.js.map +1 -0
- package/{Table-C4OM6rrC.cjs → Table-DaNgX7PO.cjs} +8 -11
- package/{Table-C4OM6rrC.cjs.map → Table-DaNgX7PO.cjs.map} +1 -1
- package/{Table-C2LbW0B1.js → Table-aNFAOuQk.js} +8 -11
- package/{Table-C2LbW0B1.js.map → Table-aNFAOuQk.js.map} +1 -1
- package/TimelineItem-0jRPFT11.js +68 -0
- package/TimelineItem-0jRPFT11.js.map +1 -0
- package/TimelineItem-BbhUWJhU.cjs +84 -0
- package/TimelineItem-BbhUWJhU.cjs.map +1 -0
- package/Tooltip-BB77JBcg.js +42 -0
- package/Tooltip-BB77JBcg.js.map +1 -0
- package/Tooltip-DpAsWGpN.cjs +41 -0
- package/Tooltip-DpAsWGpN.cjs.map +1 -0
- package/components/ActionMenu/ActionMenu.cjs +4 -104
- package/components/ActionMenu/ActionMenu.cjs.map +1 -1
- package/components/ActionMenu/ActionMenu.js +4 -104
- package/components/ActionMenu/ActionMenu.js.map +1 -1
- package/components/AppBar/AppBar.cjs +6 -126
- package/components/AppBar/AppBar.cjs.map +1 -1
- package/components/AppBar/AppBar.js +6 -126
- package/components/AppBar/AppBar.js.map +1 -1
- package/components/Autocomplete/Autocomplete.cjs +1 -1
- package/components/Autocomplete/Autocomplete.js +1 -1
- package/components/Avatar/Avatar.cjs +1 -1
- package/components/Avatar/Avatar.js +1 -1
- package/components/Checkbox/Checkbox.cjs +1 -1
- package/components/Checkbox/Checkbox.js +1 -1
- package/components/DatePicker/DatePicker.cjs +1 -1
- package/components/DatePicker/DatePicker.js +1 -1
- package/components/DateTimePicker/DateTimePicker.cjs +1 -1
- package/components/DateTimePicker/DateTimePicker.js +1 -1
- package/components/Drawer/Drawer.cjs +5 -269
- package/components/Drawer/Drawer.cjs.map +1 -1
- package/components/Drawer/Drawer.js +5 -269
- package/components/Drawer/Drawer.js.map +1 -1
- package/components/Flyout/Flyout.cjs +2 -114
- package/components/Flyout/Flyout.cjs.map +1 -1
- package/components/Flyout/Flyout.js +2 -114
- package/components/Flyout/Flyout.js.map +1 -1
- package/components/Gallery/Gallery.cjs +3 -489
- package/components/Gallery/Gallery.cjs.map +1 -1
- package/components/Gallery/Gallery.js +3 -489
- package/components/Gallery/Gallery.js.map +1 -1
- package/components/Icon/Icon.cjs +3 -106
- package/components/Icon/Icon.cjs.map +1 -1
- package/components/Icon/Icon.js +3 -106
- package/components/Icon/Icon.js.map +1 -1
- package/components/Input/Input.cjs +1 -1
- package/components/Input/Input.d.ts +4 -0
- package/components/Input/Input.helpers.d.ts +2 -2
- package/components/Input/Input.js +1 -1
- package/components/InputGroup/InputGroup.cjs +3 -137
- package/components/InputGroup/InputGroup.cjs.map +1 -1
- package/components/InputGroup/InputGroup.js +3 -137
- package/components/InputGroup/InputGroup.js.map +1 -1
- package/components/MenuButton/MenuButton.cjs +2 -75
- package/components/MenuButton/MenuButton.cjs.map +1 -1
- package/components/MenuButton/MenuButton.d.ts +6 -0
- package/components/MenuButton/MenuButton.js +2 -75
- package/components/MenuButton/MenuButton.js.map +1 -1
- package/components/RadioGroup/RadioGroup.cjs +1 -1
- package/components/RadioGroup/RadioGroup.js +1 -1
- package/components/Select/Select.cjs +1 -1
- package/components/Select/Select.js +1 -1
- package/components/Switch/Switch.cjs +1 -1
- package/components/Switch/Switch.js +1 -1
- package/components/Table/Table.cjs +1 -1
- package/components/Table/Table.js +1 -1
- package/components/Timeline/Timeline.cjs +4 -83
- package/components/Timeline/Timeline.cjs.map +1 -1
- package/components/Timeline/Timeline.js +4 -66
- package/components/Timeline/Timeline.js.map +1 -1
- package/components/Tooltip/Tooltip.cjs +2 -39
- package/components/Tooltip/Tooltip.cjs.map +1 -1
- package/components/Tooltip/Tooltip.js +2 -39
- package/components/Tooltip/Tooltip.js.map +1 -1
- package/{formField.sx-BAX7KwMR.cjs → formField.sx-BZj7TaMa.cjs} +29 -4
- package/formField.sx-BZj7TaMa.cjs.map +1 -0
- package/{formField.sx-8_QRnKxv.js → formField.sx-DD1sxwWH.js} +29 -4
- package/formField.sx-DD1sxwWH.js.map +1 -0
- package/index.cjs +36 -10
- package/index.cjs.map +1 -1
- package/index.d.ts +11 -0
- package/index.js +36 -10
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/styles.css +375 -0
- package/theme/tokens.d.ts +12 -2
- package/{tokens-jaWWNk39.cjs → tokens-BGPazVFO.cjs} +4 -2
- package/tokens-BGPazVFO.cjs.map +1 -0
- package/{tokens-BRrcP_p_.js → tokens-DE2fV3a9.js} +12 -10
- package/tokens-DE2fV3a9.js.map +1 -0
- package/Autocomplete-C_lW1VER.js.map +0 -1
- package/Autocomplete-CejWztBY.cjs.map +0 -1
- package/Avatar-Dw5rzayR.cjs.map +0 -1
- package/Avatar-H8akSege.js.map +0 -1
- package/Checkbox-BCqMFWt4.cjs.map +0 -1
- package/Checkbox-gB5YKkVo.js.map +0 -1
- package/DatePicker-_IGWc3I5.js.map +0 -1
- package/DatePicker-t7uDTZMl.cjs.map +0 -1
- package/DateTimePicker-BxQyjTCY.cjs.map +0 -1
- package/DateTimePicker-CrmWav_j.js.map +0 -1
- package/Input-CScC87J5.cjs.map +0 -1
- package/Input-DP_fKl38.js.map +0 -1
- package/RadioGroup-Dd0rHXSX.cjs.map +0 -1
- package/RadioGroup-bO-ahP9T.js.map +0 -1
- package/Select-BY5Y0qZ1.js.map +0 -1
- package/Select-CURrHSyl.cjs.map +0 -1
- package/Switch-CQFOopYy.cjs.map +0 -1
- package/Switch-D72dpkH2.js.map +0 -1
- package/formField.sx-8_QRnKxv.js.map +0 -1
- package/formField.sx-BAX7KwMR.cjs.map +0 -1
- package/tokens-BRrcP_p_.js.map +0 -1
- package/tokens-jaWWNk39.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table-C2LbW0B1.js","sources":["../src/components/Table/exportsUtils.ts","../src/components/Table/EmptyTable.png","../src/components/Table/Table.tsx"],"sourcesContent":["import React from 'react';\nimport { AlertProps } from '@mui/material/Alert';\nimport { ColumnProps } from '../Column/Column'; // Importa ColumnProps y FieldName desde Column.tsx\n\n// Define las propiedades comunes para las funciones de exportación\ninterface ExportOptions<T> {\n data: T[]; // Los datos a exportar\n columns: React.ReactElement<ColumnProps<T>>[]; // Las definiciones de las columnas\n fileName: string; // El nombre del archivo a descargar\n exportColumns?: string[]; // Nombres de columnas específicas para exportar\n setSnackbarOpen: React.Dispatch<React.SetStateAction<boolean>>; // Setter para abrir/cerrar el Snackbar\n setSnackbarMessage: React.Dispatch<React.SetStateAction<string>>; // Setter para el mensaje del Snackbar\n setSnackbarSeverity: React.Dispatch<React.SetStateAction<AlertProps['severity']>>; // Setter para la severidad del Snackbar\n}\n\n/**\n * Función para exportar datos a un archivo CSV.\n * @param options Opciones de exportación, incluyendo datos, columnas, nombre de archivo y setters de Snackbar.\n */\nexport const exportToCSV = <T>(options: ExportOptions<T>) => {\n const { data, columns, fileName, exportColumns, setSnackbarOpen, setSnackbarMessage, setSnackbarSeverity } = options;\n\n if (!data || data.length === 0) {\n setSnackbarMessage(\"No hay datos para exportar a CSV.\");\n setSnackbarSeverity('warning');\n setSnackbarOpen(true);\n return;\n }\n\n setSnackbarMessage(\"Exportando datos a CSV...\");\n setSnackbarSeverity('info');\n setSnackbarOpen(true);\n\n try {\n // Filtra las columnas si se especifican columnas para exportar, de lo contrario, usa todas las columnas definidas.\n const columnsToExport = exportColumns\n ? columns.filter(col => exportColumns.includes(col.props.name))\n : columns;\n\n // Obtiene los encabezados (nombres de las columnas) y los escapa para CSV.\n const headers = columnsToExport.map(col => `\"${col.props.name.replace(/\"/g, '\"\"')}\"`).join(',');\n\n // Mapea los datos a filas CSV.\n const csvRows = data.map(row => {\n const values = columnsToExport.map(col => {\n const field = col.props.field;\n let cellValue: any;\n\n // Si 'field' es un array, toma el valor del primer campo para la exportación.\n if (Array.isArray(field)) {\n cellValue = (row as any)[field[0]];\n } else {\n cellValue = (row as any)[field];\n }\n\n // Convierte a string y maneja comas, comillas dobles y saltos de línea para CSV.\n let formattedValue = String(cellValue || '');\n if (formattedValue.includes(',') || formattedValue.includes('\"') || formattedValue.includes('\\n')) {\n formattedValue = `\"${formattedValue.replace(/\"/g, '\"\"')}\"`;\n }\n return formattedValue;\n });\n return values.join(',');\n });\n\n const csvContent = [headers, ...csvRows].join('\\n'); // Une los encabezados y las filas.\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', fileName + '.csv');\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n\n setSnackbarMessage(\"¡Exportación a CSV completada!\");\n setSnackbarSeverity('success');\n } else {\n setSnackbarMessage(\"Tu navegador no soporta la descarga directa para CSV. Por favor, copia el contenido manualmente.\");\n setSnackbarSeverity('error');\n }\n } catch (error) {\n console.error(\"Error al exportar los datos a CSV:\", error);\n setSnackbarMessage(\"Error al exportar los datos a CSV.\");\n setSnackbarSeverity('error');\n } finally {\n setSnackbarOpen(true);\n }\n};\n\n/**\n * Función para exportar datos a un archivo Excel (formato XLSX).\n * Genera una tabla HTML que luego se descarga como un archivo .xlsx.\n * @param options Opciones de exportación, incluyendo datos, columnas, nombre de archivo y setters de Snackbar.\n */\nexport const exportToExcel = <T>(options: ExportOptions<T>) => {\n const { data, columns, fileName, exportColumns, setSnackbarOpen, setSnackbarMessage, setSnackbarSeverity } = options;\n\n if (!data || data.length === 0) {\n setSnackbarMessage(\"No hay datos para exportar a Excel.\");\n setSnackbarSeverity('warning');\n setSnackbarOpen(true);\n return;\n }\n\n setSnackbarMessage(\"Exportando datos a Excel (XLSX)...\");\n setSnackbarSeverity('info');\n setSnackbarOpen(true);\n\n try {\n const columnsToExport = exportColumns\n ? columns.filter(col => exportColumns.includes(col.props.name))\n : columns;\n\n // Construye el contenido HTML de la tabla.\n let tableHTML = `\n <html xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\n xmlns=\"http://www.w3.org/TR/REC-html40\">\n <head>\n <meta charset=\"utf-8\" />\n <!--[if gte mso 9]><xml>\n <x:ExcelWorkbook>\n <x:ExcelWorksheets>\n <x:ExcelWorksheet>\n <x:Name>Hoja1</x:Name>\n <x:WorksheetOptions>\n <x:DisplayGridlines/>\n </x:WorksheetOptions>\n </x:ExcelWorksheet>\n </x:ExcelWorksheets>\n </x:ExcelWorkbook>\n </xml><![endif]-->\n </head>\n <body>\n <table>\n <thead>\n <tr>\n ${columnsToExport.map(col => `<th>${col.props.name}</th>`).join('')}\n </tr>\n </thead>\n <tbody>\n ${data.map(row => `\n <tr>\n ${columnsToExport.map(col => {\n const field = col.props.field;\n let cellValue: any;\n if (Array.isArray(field)) {\n cellValue = (row as any)[field[0]];\n } else {\n cellValue = (row as any)[field];\n }\n // Escapa caracteres HTML para el contenido de la celda.\n return `<td>${String(cellValue || '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</td>`;\n }).join('')}\n </tr>\n `).join('')}\n </tbody>\n </table>\n </body>\n </html>\n `;\n\n // Crea un Blob con el contenido HTML y el tipo MIME de XLSX.\n const blob = new Blob([tableHTML], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8;' }); \n\n const link = document.createElement('a');\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', fileName + '.xlsx'); // Usa la extensión .xlsx\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n\n setSnackbarMessage(\"¡Exportación a Excel (XLSX) completada!\");\n setSnackbarSeverity('success');\n } else {\n setSnackbarMessage(\"Tu navegador no soporta la descarga directa para Excel (XLSX). Por favor, copia el contenido manualmente.\");\n setSnackbarSeverity('error');\n }\n } catch (error) {\n console.error(\"Error al exportar los datos a Excel (XLSX):\", error);\n setSnackbarMessage(\"Error al exportar los datos a Excel (XLSX).\");\n setSnackbarSeverity('error');\n } finally {\n setSnackbarOpen(true);\n }\n};\n","export default \"data:image/png;base64,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\"","import React, { Children, isValidElement, useState, useEffect } from 'react';\nimport {\n TableContainer,\n Table as MuiTable,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n Typography,\n Select,\n MenuItem,\n Box,\n Button,\n Snackbar,\n IconButton,\n Checkbox,\n} from '@mui/material';\nimport MuiAlert, { AlertProps } from '@mui/material/Alert';\nimport { ColumnProps } from '../Column/Column'; // Asegúrate de que esta ruta sea correcta\nimport DownloadOutlinedIcon from '@mui/icons-material/DownloadOutlined';\nimport FirstPageIcon from '@mui/icons-material/FirstPage';\nimport LastPageIcon from '@mui/icons-material/LastPage';\nimport KeyboardArrowLeftIcon from '@mui/icons-material/KeyboardArrowLeft';\nimport KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\n\nimport { exportToCSV, exportToExcel } from './exportsUtils';\n\n// @ts-ignore\nimport EmptyImage from './EmptyTable.png';\n\nexport type FieldName<T> = keyof T | Array<keyof T>;\n\ninterface TableProps<T> {\n data: T[];\n children: React.ReactNode;\n\n currentPage?: number;\n pageSize?: number;\n totalPages?: number;\n previousPage?: number;\n nextPage?: number;\n pageSizeSelectorValue?: number;\n onPageChange?: (newPage: number) => void;\n onPageSizeChange?: (newSize: number) => void;\n visiblePageNumbers?: number;\n\n enableCSVExport?: boolean;\n csvExportFileName?: string;\n csvExportButtonText?: string;\n csvExportColumns?: string[];\n\n enableExcelExport?: boolean;\n excelExportFileName?: string;\n excelExportButtonText?: string;\n excelExportColumns?: string[];\n\n enableRowSelection?: boolean;\n rowIdentifier?: keyof T;\n onSelectionChange?: (selectedItems: T[]) => void;\n showPageSizeSelector?: boolean;\n emptyTitle?: string;\n emptyMessage?: string;\n emptyImageSrc?: React.ReactNode;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(\n props,\n ref,\n) {\n return <MuiAlert elevation={6} ref={ref} variant=\"filled\" {...props} />;\n});\n\nexport function Table<T>({\n data,\n children,\n currentPage,\n pageSize,\n totalPages,\n previousPage: _previousPage,\n nextPage: _nextPage,\n pageSizeSelectorValue = 10,\n onPageChange,\n onPageSizeChange,\n visiblePageNumbers = 5,\n enableCSVExport = false,\n csvExportFileName = 'data.csv',\n csvExportButtonText = 'Exportar CSV',\n csvExportColumns,\n enableExcelExport = false,\n excelExportFileName = 'data.xlsx',\n excelExportButtonText = 'Exportar Excel',\n excelExportColumns,\n enableRowSelection = false,\n rowIdentifier,\n onSelectionChange,\n showPageSizeSelector = true,\n emptyTitle = 'No hay datos disponibles',\n emptyMessage,\n emptyImageSrc = <Box mb={2}>\n <img src={EmptyImage} alt=\"No data\" style={{ maxWidth: '150px', opacity: 0.6 }} />\n </Box>,\n}: TableProps<T>) {\n const columns = Children.toArray(children).filter(\n (child): child is React.ReactElement<ColumnProps<T>> =>\n isValidElement(child) && (child.type as any).displayName === 'Column'\n );\n\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState(\"\");\n const [snackbarSeverity, setSnackbarSeverity] = useState<AlertProps['severity']>('info');\n\n const [selectedRows, setSelectedRows] = useState<T[]>([]);\n\n useEffect(() => {\n setSelectedRows([]);\n }, [data, currentPage, pageSize]);\n\n useEffect(() => {\n onSelectionChange?.(selectedRows);\n }, [selectedRows, onSelectionChange]);\n\n const handleSnackbarClose = (_event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setSnackbarOpen(false);\n };\n\n const isControlled = typeof onPageChange === 'function' && typeof currentPage === 'number';\n const [internalPage, setInternalPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(pageSizeSelectorValue);\n\n const activePage = isControlled ? currentPage! : internalPage;\n const activePageSize = isControlled ? pageSize! : internalPageSize;\n\n const paginatedData = isControlled ? data : data.slice((activePage - 1) * activePageSize, activePage * activePageSize);\n\n const effectiveTotalPages = isControlled\n ? totalPages!\n : Math.ceil(data.length / activePageSize);\n\n const handlePageChange = (newPage: number) => {\n if (newPage < 1 || newPage > effectiveTotalPages) return;\n if (isControlled) onPageChange?.(newPage);\n else setInternalPage(newPage);\n };\n\n const handlePageSizeChange = (newSize: number) => {\n if (isControlled) {\n onPageSizeChange?.(newSize);\n onPageChange?.(1);\n } else {\n setInternalPageSize(newSize);\n setInternalPage(1);\n }\n };\n\n const getPageNumbers = () => {\n const pages = [];\n const maxPages = effectiveTotalPages;\n const current = activePage;\n const half = Math.floor(visiblePageNumbers / 2);\n\n let startPage = Math.max(1, current - half);\n let endPage = Math.min(maxPages, current + half);\n\n if (endPage - startPage + 1 < visiblePageNumbers) {\n if (startPage === 1) {\n endPage = Math.min(maxPages, startPage + visiblePageNumbers - 1);\n } else if (endPage === maxPages) {\n startPage = Math.max(1, maxPages - visiblePageNumbers + 1);\n }\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n };\n\n const pageNumbers = getPageNumbers();\n\n const handleSelectAllClick = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!rowIdentifier) {\n console.warn(\"`rowIdentifier` prop is required for row selection.\");\n return;\n }\n\n if (event.target.checked) {\n const newSelecteds = [...selectedRows];\n paginatedData.forEach(row => {\n const rowId = row[rowIdentifier] as any;\n if (!newSelecteds.some(selectedRow => (selectedRow as any)[rowIdentifier] === rowId)) {\n newSelecteds.push(row);\n }\n });\n setSelectedRows(newSelecteds);\n } else {\n const newSelecteds = selectedRows.filter(selectedRow =>\n !paginatedData.some(row => (row as any)[rowIdentifier] === (selectedRow as any)[rowIdentifier])\n );\n setSelectedRows(newSelecteds);\n }\n };\n\n const handleRowClick = (_event: React.MouseEvent<unknown>, row: T) => {\n if (!rowIdentifier) {\n console.warn(\"`rowIdentifier` prop is required for row selection.\");\n return;\n }\n\n const rowId = row[rowIdentifier] as any;\n const selectedIndex = selectedRows.findIndex(selectedRow => (selectedRow as any)[rowIdentifier] === rowId);\n let newSelected: T[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(selectedRows, row);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(selectedRows.slice(1));\n } else if (selectedIndex === selectedRows.length - 1) {\n newSelected = newSelected.concat(selectedRows.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(\n selectedRows.slice(0, selectedIndex),\n selectedRows.slice(selectedIndex + 1),\n );\n }\n setSelectedRows(newSelected);\n };\n\n const isSelected = (row: T) => {\n if (!rowIdentifier) return false;\n return selectedRows.some(selectedRow => (selectedRow as any)[rowIdentifier] === (row as any)[rowIdentifier]);\n };\n\n const numSelectedOnPage = paginatedData.filter(isSelected).length;\n const isAllSelectedOnPage = paginatedData.length > 0 && numSelectedOnPage === paginatedData.length;\n const isIndeterminateOnPage = numSelectedOnPage > 0 && numSelectedOnPage < paginatedData.length;\n\n return (\n <TableContainer >\n\n <MuiTable sx={{ minWidth: 650 }} aria-label=\"custom table\" style={ paginatedData.length === 0 ? { display: 'none' } : {} }>\n {/* Table Header */}\n <TableHead sx={{ backgroundColor: '#fff' }}>\n <TableRow>\n {enableRowSelection && (\n <TableCell padding=\"checkbox\" sx={{ width: '50px' }}> {/* Puedes ajustar este ancho fijo si lo deseas */}\n <Checkbox\n color=\"primary\"\n indeterminate={isIndeterminateOnPage}\n checked={isAllSelectedOnPage}\n onChange={handleSelectAllClick}\n inputProps={{ 'aria-label': 'select all desserts' }}\n />\n </TableCell>\n )}\n {columns.map((column, index) => (\n <TableCell\n key={index}\n sx={{\n\n fontSize: '12px',\n color: (theme) => theme.palette.text.secondary,\n width: column.props.width || 'auto', // APLICA EL ANCHO AQUÍ\n whiteSpace: 'nowrap', // Evita que el texto se ajuste si la columna es pequeña\n \n }}\n >\n <Typography sx={{ fontSize: '12px' }}>\n {column.props.name}\n </Typography>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n {/* Table Body */}\n <TableBody sx={{ borderRadius: '10px', overflow: 'hidden' }}>\n {paginatedData.map((row, rowIndex) => {\n const isRowSelected = enableRowSelection && isSelected(row);\n return (\n <TableRow\n key={rowIndex}\n sx={{ backgroundColor: '#F8F8F8', '&:last-child td, &:last-child th': { border: 0 }, '&:hover': { backgroundColor: () => '#FFF' } }}\n selected={isRowSelected}\n >\n {enableRowSelection && (\n <TableCell padding=\"checkbox\" sx={{ width: '50px' }}> {/* Mismo ancho para la celda de la fila */}\n <Checkbox\n color=\"primary\"\n checked={isRowSelected}\n onClick={(event) => handleRowClick(event, row)}\n inputProps={{ 'aria-labelledby': `table-checkbox-${rowIndex}` }}\n />\n </TableCell>\n )}\n {columns.map((column, colIndex) => {\n const { field, children: cellRenderer } = column.props;\n\n let fieldData: Partial<T>;\n\n if (Array.isArray(field)) {\n if(field.length === 0){\n fieldData = {...row};\n }else{\n fieldData = (field as Array<keyof T>).reduce((acc, currentField) => {\n (acc as any)[currentField] = (row as any)[currentField];\n return acc;\n }, {} as Partial<T>);\n }\n\n } else {\n fieldData = { [field]: (row as any)[field] } as Partial<T>;\n }\n\n return (\n <TableCell\n key={colIndex}\n sx={{\n fontSize: '14px',\n width: column.props.width || 'auto', // APLICA EL ANCHO AQUÍ TAMBIÉN\n whiteSpace: 'nowrap', // Asegura que el contenido no se rompa prematuramente\n padding: '12px 16px', // Asegura un padding consistente\n borderBottom: 'none'\n }}\n >\n {cellRenderer(fieldData)}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n {/* Empty table message */}\n \n </TableBody>\n </MuiTable>\n\n { paginatedData.length === 0 && (\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" p={4} > \n { emptyImageSrc }\n\n <Typography variant=\"body2\" color=\"#878E9A\" fontSize=\"18px\" fontWeight=\"600\">\n {emptyTitle || 'No hay datos disponibles para mostrar.'}\n </Typography>\n <Typography variant=\"body2\" color=\"#878E9A\" fontSize=\"14px\" mt={1}> \n {emptyMessage || 'Intente ajustar sus filtros o agregar nuevos datos.'}\n </Typography>\n\n </Box>\n )\n }\n\n {/* Pagination and Export Controls */}\n {(effectiveTotalPages > 0 || enableCSVExport || enableExcelExport || (enableRowSelection && selectedRows.length > 0)) && (\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" p={2}>\n {/* Page Size Selector (Left) */}\n {(effectiveTotalPages > 0 && showPageSizeSelector) && (\n <Select\n size=\"small\"\n value={activePageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n >\n {[1, 2, 3, 5, 10, 20, 50, 100].map((size) => (\n <MenuItem key={size} value={size}>\n Mostrar {size}\n </MenuItem>\n ))}\n </Select>\n )}\n\n {/* Pagination Controls (Center) */}\n {effectiveTotalPages > 0 && (\n <Box\n display=\"flex\"\n alignItems=\"center\"\n gap={0.5}\n sx={{ flexGrow: 1, justifyContent: 'center' }}\n >\n <IconButton\n onClick={() => handlePageChange(1)}\n disabled={activePage <= 1}\n size=\"small\"\n color=\"primary\"\n >\n <FirstPageIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton\n onClick={() => handlePageChange(activePage - 1)}\n disabled={activePage <= 1}\n size=\"small\"\n color=\"primary\"\n >\n <KeyboardArrowLeftIcon fontSize=\"small\" />\n </IconButton>\n\n {pageNumbers.map((pageNumber) => (\n <Button\n key={pageNumber}\n onClick={() => handlePageChange(pageNumber)}\n variant={activePage === pageNumber ? 'contained' : 'text'}\n size=\"small\"\n sx={{ minWidth: '32px', height: '32px' }}\n >\n {pageNumber}\n </Button>\n ))}\n\n <IconButton\n onClick={() => handlePageChange(activePage + 1)}\n disabled={activePage >= effectiveTotalPages}\n size=\"small\"\n color=\"primary\"\n >\n <KeyboardArrowRightIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton\n onClick={() => handlePageChange(effectiveTotalPages)}\n disabled={activePage >= effectiveTotalPages}\n size=\"small\"\n color=\"primary\"\n >\n <LastPageIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n )}\n\n {enableRowSelection && selectedRows.length > 0 && (\n <Typography variant=\"subtitle2\" sx={{ mr: 2 }}>\n {selectedRows.length} seleccionados\n </Typography>\n )}\n\n {(enableCSVExport || enableExcelExport) && (\n <Box display=\"flex\" alignItems=\"center\" gap={1}>\n {enableCSVExport && (\n <Button\n variant=\"text\"\n color=\"primary\"\n onClick={() =>\n exportToCSV({\n data,\n columns,\n fileName: csvExportFileName,\n exportColumns: csvExportColumns,\n setSnackbarOpen,\n setSnackbarMessage,\n setSnackbarSeverity,\n })\n }\n size=\"small\"\n startIcon={<DownloadOutlinedIcon />}\n >\n {csvExportButtonText}\n </Button>\n )}\n {enableExcelExport && (\n <Button\n variant=\"text\"\n color=\"primary\"\n onClick={() =>\n exportToExcel({\n data,\n columns,\n fileName: excelExportFileName,\n exportColumns: excelExportColumns,\n setSnackbarOpen,\n setSnackbarMessage,\n setSnackbarSeverity,\n })\n }\n size=\"small\"\n startIcon={<DownloadOutlinedIcon />}\n >\n {excelExportButtonText}\n </Button>\n )}\n </Box>\n )}\n </Box>\n )}\n\n <Snackbar open={snackbarOpen} autoHideDuration={3000} onClose={handleSnackbarClose} anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}>\n <Alert onClose={handleSnackbarClose} severity={snackbarSeverity} sx={{ width: '100%' }}>\n {snackbarMessage}\n </Alert>\n </Snackbar>\n </TableContainer>\n );\n}\n\nexport default Table;"],"names":["React","Alert","MuiTable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table-aNFAOuQk.js","sources":["../src/components/Table/exportsUtils.ts","../src/components/Table/EmptyTable.png","../src/components/Table/Table.tsx"],"sourcesContent":["import React from 'react';\nimport { AlertProps } from '@mui/material/Alert';\nimport { ColumnProps } from '../Column/Column'; // Importa ColumnProps y FieldName desde Column.tsx\n\n// Define las propiedades comunes para las funciones de exportación\ninterface ExportOptions<T> {\n data: T[]; // Los datos a exportar\n columns: React.ReactElement<ColumnProps<T>>[]; // Las definiciones de las columnas\n fileName: string; // El nombre del archivo a descargar\n exportColumns?: string[]; // Nombres de columnas específicas para exportar\n setSnackbarOpen: React.Dispatch<React.SetStateAction<boolean>>; // Setter para abrir/cerrar el Snackbar\n setSnackbarMessage: React.Dispatch<React.SetStateAction<string>>; // Setter para el mensaje del Snackbar\n setSnackbarSeverity: React.Dispatch<React.SetStateAction<AlertProps['severity']>>; // Setter para la severidad del Snackbar\n}\n\n/**\n * Función para exportar datos a un archivo CSV.\n * @param options Opciones de exportación, incluyendo datos, columnas, nombre de archivo y setters de Snackbar.\n */\nexport const exportToCSV = <T>(options: ExportOptions<T>) => {\n const { data, columns, fileName, exportColumns, setSnackbarOpen, setSnackbarMessage, setSnackbarSeverity } = options;\n\n if (!data || data.length === 0) {\n setSnackbarMessage(\"No hay datos para exportar a CSV.\");\n setSnackbarSeverity('warning');\n setSnackbarOpen(true);\n return;\n }\n\n setSnackbarMessage(\"Exportando datos a CSV...\");\n setSnackbarSeverity('info');\n setSnackbarOpen(true);\n\n try {\n // Filtra las columnas si se especifican columnas para exportar, de lo contrario, usa todas las columnas definidas.\n const columnsToExport = exportColumns\n ? columns.filter(col => exportColumns.includes(col.props.name))\n : columns;\n\n // Obtiene los encabezados (nombres de las columnas) y los escapa para CSV.\n const headers = columnsToExport.map(col => `\"${col.props.name.replace(/\"/g, '\"\"')}\"`).join(',');\n\n // Mapea los datos a filas CSV.\n const csvRows = data.map(row => {\n const values = columnsToExport.map(col => {\n const field = col.props.field;\n let cellValue: any;\n\n // Si 'field' es un array, toma el valor del primer campo para la exportación.\n if (Array.isArray(field)) {\n cellValue = (row as any)[field[0]];\n } else {\n cellValue = (row as any)[field];\n }\n\n // Convierte a string y maneja comas, comillas dobles y saltos de línea para CSV.\n let formattedValue = String(cellValue || '');\n if (formattedValue.includes(',') || formattedValue.includes('\"') || formattedValue.includes('\\n')) {\n formattedValue = `\"${formattedValue.replace(/\"/g, '\"\"')}\"`;\n }\n return formattedValue;\n });\n return values.join(',');\n });\n\n const csvContent = [headers, ...csvRows].join('\\n'); // Une los encabezados y las filas.\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const link = document.createElement('a');\n\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', fileName + '.csv');\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n\n setSnackbarMessage(\"¡Exportación a CSV completada!\");\n setSnackbarSeverity('success');\n } else {\n setSnackbarMessage(\"Tu navegador no soporta la descarga directa para CSV. Por favor, copia el contenido manualmente.\");\n setSnackbarSeverity('error');\n }\n } catch (error) {\n console.error(\"Error al exportar los datos a CSV:\", error);\n setSnackbarMessage(\"Error al exportar los datos a CSV.\");\n setSnackbarSeverity('error');\n } finally {\n setSnackbarOpen(true);\n }\n};\n\n/**\n * Función para exportar datos a un archivo Excel (formato XLSX).\n * Genera una tabla HTML que luego se descarga como un archivo .xlsx.\n * @param options Opciones de exportación, incluyendo datos, columnas, nombre de archivo y setters de Snackbar.\n */\nexport const exportToExcel = <T>(options: ExportOptions<T>) => {\n const { data, columns, fileName, exportColumns, setSnackbarOpen, setSnackbarMessage, setSnackbarSeverity } = options;\n\n if (!data || data.length === 0) {\n setSnackbarMessage(\"No hay datos para exportar a Excel.\");\n setSnackbarSeverity('warning');\n setSnackbarOpen(true);\n return;\n }\n\n setSnackbarMessage(\"Exportando datos a Excel (XLSX)...\");\n setSnackbarSeverity('info');\n setSnackbarOpen(true);\n\n try {\n const columnsToExport = exportColumns\n ? columns.filter(col => exportColumns.includes(col.props.name))\n : columns;\n\n // Construye el contenido HTML de la tabla.\n let tableHTML = `\n <html xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n xmlns:x=\"urn:schemas-microsoft-com:office:excel\"\n xmlns=\"http://www.w3.org/TR/REC-html40\">\n <head>\n <meta charset=\"utf-8\" />\n <!--[if gte mso 9]><xml>\n <x:ExcelWorkbook>\n <x:ExcelWorksheets>\n <x:ExcelWorksheet>\n <x:Name>Hoja1</x:Name>\n <x:WorksheetOptions>\n <x:DisplayGridlines/>\n </x:WorksheetOptions>\n </x:ExcelWorksheet>\n </x:ExcelWorksheets>\n </x:ExcelWorkbook>\n </xml><![endif]-->\n </head>\n <body>\n <table>\n <thead>\n <tr>\n ${columnsToExport.map(col => `<th>${col.props.name}</th>`).join('')}\n </tr>\n </thead>\n <tbody>\n ${data.map(row => `\n <tr>\n ${columnsToExport.map(col => {\n const field = col.props.field;\n let cellValue: any;\n if (Array.isArray(field)) {\n cellValue = (row as any)[field[0]];\n } else {\n cellValue = (row as any)[field];\n }\n // Escapa caracteres HTML para el contenido de la celda.\n return `<td>${String(cellValue || '').replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')}</td>`;\n }).join('')}\n </tr>\n `).join('')}\n </tbody>\n </table>\n </body>\n </html>\n `;\n\n // Crea un Blob con el contenido HTML y el tipo MIME de XLSX.\n const blob = new Blob([tableHTML], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8;' }); \n\n const link = document.createElement('a');\n if (link.download !== undefined) {\n const url = URL.createObjectURL(blob);\n link.setAttribute('href', url);\n link.setAttribute('download', fileName + '.xlsx'); // Usa la extensión .xlsx\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n\n setSnackbarMessage(\"¡Exportación a Excel (XLSX) completada!\");\n setSnackbarSeverity('success');\n } else {\n setSnackbarMessage(\"Tu navegador no soporta la descarga directa para Excel (XLSX). Por favor, copia el contenido manualmente.\");\n setSnackbarSeverity('error');\n }\n } catch (error) {\n console.error(\"Error al exportar los datos a Excel (XLSX):\", error);\n setSnackbarMessage(\"Error al exportar los datos a Excel (XLSX).\");\n setSnackbarSeverity('error');\n } finally {\n setSnackbarOpen(true);\n }\n};\n","export default \"data:image/png;base64,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\"","import React, { Children, isValidElement, useState, useEffect } from 'react';\nimport {\n TableContainer,\n Table as MuiTable,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n Typography,\n Select,\n MenuItem,\n Box,\n Button,\n Snackbar,\n IconButton,\n Checkbox,\n} from '@mui/material';\nimport MuiAlert, { AlertProps } from '@mui/material/Alert';\nimport { ColumnProps } from '../Column/Column'; // Asegúrate de que esta ruta sea correcta\nimport DownloadOutlinedIcon from '@mui/icons-material/DownloadOutlined';\nimport FirstPageIcon from '@mui/icons-material/FirstPage';\nimport LastPageIcon from '@mui/icons-material/LastPage';\nimport KeyboardArrowLeftIcon from '@mui/icons-material/KeyboardArrowLeft';\nimport KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight';\n\nimport { exportToCSV, exportToExcel } from './exportsUtils';\n\n// @ts-ignore\nimport EmptyImage from './EmptyTable.png';\n\nexport type FieldName<T> = keyof T | Array<keyof T>;\n\ninterface TableProps<T> {\n data: T[];\n children: React.ReactNode;\n\n currentPage?: number;\n pageSize?: number;\n totalPages?: number;\n previousPage?: number;\n nextPage?: number;\n pageSizeSelectorValue?: number;\n onPageChange?: (newPage: number) => void;\n onPageSizeChange?: (newSize: number) => void;\n visiblePageNumbers?: number;\n\n enableCSVExport?: boolean;\n csvExportFileName?: string;\n csvExportButtonText?: string;\n csvExportColumns?: string[];\n\n enableExcelExport?: boolean;\n excelExportFileName?: string;\n excelExportButtonText?: string;\n excelExportColumns?: string[];\n\n enableRowSelection?: boolean;\n rowIdentifier?: keyof T;\n onSelectionChange?: (selectedItems: T[]) => void;\n showPageSizeSelector?: boolean;\n emptyTitle?: string;\n emptyMessage?: string;\n emptyImageSrc?: React.ReactNode;\n}\n\nconst Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(\n props,\n ref,\n) {\n return <MuiAlert elevation={6} ref={ref} variant=\"filled\" {...props} />;\n});\n\nexport function Table<T>({\n data,\n children,\n currentPage,\n pageSize,\n totalPages,\n previousPage: _previousPage,\n nextPage: _nextPage,\n pageSizeSelectorValue = 10,\n onPageChange,\n onPageSizeChange,\n visiblePageNumbers = 5,\n enableCSVExport = false,\n csvExportFileName = 'data.csv',\n csvExportButtonText = 'Exportar CSV',\n csvExportColumns,\n enableExcelExport = false,\n excelExportFileName = 'data.xlsx',\n excelExportButtonText = 'Exportar Excel',\n excelExportColumns,\n enableRowSelection = false,\n rowIdentifier,\n onSelectionChange,\n showPageSizeSelector = true,\n emptyTitle = 'No hay datos disponibles',\n emptyMessage,\n emptyImageSrc = <Box mb={2}>\n <img src={EmptyImage} alt=\"No data\" style={{ maxWidth: '150px', opacity: 0.6 }} />\n </Box>,\n}: TableProps<T>) {\n const columns = Children.toArray(children).filter(\n (child): child is React.ReactElement<ColumnProps<T>> =>\n isValidElement(child) && (child.type as any).displayName === 'Column'\n );\n\n const [snackbarOpen, setSnackbarOpen] = useState(false);\n const [snackbarMessage, setSnackbarMessage] = useState(\"\");\n const [snackbarSeverity, setSnackbarSeverity] = useState<AlertProps['severity']>('info');\n\n const [selectedRows, setSelectedRows] = useState<T[]>([]);\n\n useEffect(() => {\n setSelectedRows([]);\n }, [data, currentPage, pageSize]);\n\n useEffect(() => {\n onSelectionChange?.(selectedRows);\n }, [selectedRows, onSelectionChange]);\n\n const handleSnackbarClose = (_event?: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n setSnackbarOpen(false);\n };\n\n const isControlled = typeof onPageChange === 'function' && typeof currentPage === 'number';\n const [internalPage, setInternalPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(pageSizeSelectorValue);\n\n const activePage = isControlled ? currentPage! : internalPage;\n const activePageSize = isControlled ? pageSize! : internalPageSize;\n\n const paginatedData = isControlled ? data : data.slice((activePage - 1) * activePageSize, activePage * activePageSize);\n\n const effectiveTotalPages = isControlled\n ? totalPages!\n : Math.ceil(data.length / activePageSize);\n\n const handlePageChange = (newPage: number) => {\n if (newPage < 1 || newPage > effectiveTotalPages) return;\n if (isControlled) onPageChange?.(newPage);\n else setInternalPage(newPage);\n };\n\n const handlePageSizeChange = (newSize: number) => {\n if (isControlled) {\n onPageSizeChange?.(newSize);\n onPageChange?.(1);\n } else {\n setInternalPageSize(newSize);\n setInternalPage(1);\n }\n };\n\n const getPageNumbers = () => {\n const pages = [];\n const maxPages = effectiveTotalPages;\n const current = activePage;\n const half = Math.floor(visiblePageNumbers / 2);\n\n let startPage = Math.max(1, current - half);\n let endPage = Math.min(maxPages, current + half);\n\n if (endPage - startPage + 1 < visiblePageNumbers) {\n if (startPage === 1) {\n endPage = Math.min(maxPages, startPage + visiblePageNumbers - 1);\n } else if (endPage === maxPages) {\n startPage = Math.max(1, maxPages - visiblePageNumbers + 1);\n }\n }\n\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n };\n\n const pageNumbers = getPageNumbers();\n\n const handleSelectAllClick = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (!rowIdentifier) {\n console.warn(\"`rowIdentifier` prop is required for row selection.\");\n return;\n }\n\n if (event.target.checked) {\n const newSelecteds = [...selectedRows];\n paginatedData.forEach(row => {\n const rowId = row[rowIdentifier] as any;\n if (!newSelecteds.some(selectedRow => (selectedRow as any)[rowIdentifier] === rowId)) {\n newSelecteds.push(row);\n }\n });\n setSelectedRows(newSelecteds);\n } else {\n const newSelecteds = selectedRows.filter(selectedRow =>\n !paginatedData.some(row => (row as any)[rowIdentifier] === (selectedRow as any)[rowIdentifier])\n );\n setSelectedRows(newSelecteds);\n }\n };\n\n const handleRowClick = (_event: React.MouseEvent<unknown>, row: T) => {\n if (!rowIdentifier) {\n console.warn(\"`rowIdentifier` prop is required for row selection.\");\n return;\n }\n\n const rowId = row[rowIdentifier] as any;\n const selectedIndex = selectedRows.findIndex(selectedRow => (selectedRow as any)[rowIdentifier] === rowId);\n let newSelected: T[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(selectedRows, row);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(selectedRows.slice(1));\n } else if (selectedIndex === selectedRows.length - 1) {\n newSelected = newSelected.concat(selectedRows.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(\n selectedRows.slice(0, selectedIndex),\n selectedRows.slice(selectedIndex + 1),\n );\n }\n setSelectedRows(newSelected);\n };\n\n const isSelected = (row: T) => {\n if (!rowIdentifier) return false;\n return selectedRows.some(selectedRow => (selectedRow as any)[rowIdentifier] === (row as any)[rowIdentifier]);\n };\n\n const numSelectedOnPage = paginatedData.filter(isSelected).length;\n const isAllSelectedOnPage = paginatedData.length > 0 && numSelectedOnPage === paginatedData.length;\n const isIndeterminateOnPage = numSelectedOnPage > 0 && numSelectedOnPage < paginatedData.length;\n\n return (\n <TableContainer >\n\n <MuiTable sx={{ minWidth: 650 }} aria-label=\"custom table\" style={ paginatedData.length === 0 ? { display: 'none' } : {} }>\n {/* Table Header */}\n {/* Sin colores propios: la cabecera y las filas las pinta el theme del\n consumidor (MuiTableCell.head / MuiTableRow), que es donde vive el\n sistema visual. Hardcodear acá le ganaba al theme por ser `sx`. */}\n <TableHead>\n <TableRow>\n {enableRowSelection && (\n <TableCell padding=\"checkbox\" sx={{ width: '50px' }}> {/* Puedes ajustar este ancho fijo si lo deseas */}\n <Checkbox\n color=\"primary\"\n indeterminate={isIndeterminateOnPage}\n checked={isAllSelectedOnPage}\n onChange={handleSelectAllClick}\n inputProps={{ 'aria-label': 'select all desserts' }}\n />\n </TableCell>\n )}\n {columns.map((column, index) => (\n <TableCell\n key={index}\n sx={{\n width: column.props.width || 'auto', // APLICA EL ANCHO AQUÍ\n whiteSpace: 'nowrap', // Evita que el texto se ajuste si la columna es pequeña\n }}\n >\n <Typography variant=\"inherit\" component=\"span\">\n {column.props.name}\n </Typography>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n {/* Table Body */}\n <TableBody sx={{ borderRadius: '10px', overflow: 'hidden' }}>\n {paginatedData.map((row, rowIndex) => {\n const isRowSelected = enableRowSelection && isSelected(row);\n return (\n <TableRow\n key={rowIndex}\n hover\n sx={{ '&:last-child td, &:last-child th': { border: 0 } }}\n selected={isRowSelected}\n >\n {enableRowSelection && (\n <TableCell padding=\"checkbox\" sx={{ width: '50px' }}> {/* Mismo ancho para la celda de la fila */}\n <Checkbox\n color=\"primary\"\n checked={isRowSelected}\n onClick={(event) => handleRowClick(event, row)}\n inputProps={{ 'aria-labelledby': `table-checkbox-${rowIndex}` }}\n />\n </TableCell>\n )}\n {columns.map((column, colIndex) => {\n const { field, children: cellRenderer } = column.props;\n\n let fieldData: Partial<T>;\n\n if (Array.isArray(field)) {\n if(field.length === 0){\n fieldData = {...row};\n }else{\n fieldData = (field as Array<keyof T>).reduce((acc, currentField) => {\n (acc as any)[currentField] = (row as any)[currentField];\n return acc;\n }, {} as Partial<T>);\n }\n\n } else {\n fieldData = { [field]: (row as any)[field] } as Partial<T>;\n }\n\n return (\n <TableCell\n key={colIndex}\n sx={{\n // Solo layout de columna. Tamaño, padding y regla de fila\n // son del theme del consumidor (MuiTableCell).\n width: column.props.width || 'auto', // APLICA EL ANCHO AQUÍ TAMBIÉN\n whiteSpace: 'nowrap', // Asegura que el contenido no se rompa prematuramente\n }}\n >\n {cellRenderer(fieldData)}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n {/* Empty table message */}\n \n </TableBody>\n </MuiTable>\n\n { paginatedData.length === 0 && (\n <Box display=\"flex\" flexDirection=\"column\" alignItems=\"center\" justifyContent=\"center\" p={4} > \n { emptyImageSrc }\n\n <Typography variant=\"body2\" color=\"#878E9A\" fontSize=\"18px\" fontWeight=\"600\">\n {emptyTitle || 'No hay datos disponibles para mostrar.'}\n </Typography>\n <Typography variant=\"body2\" color=\"#878E9A\" fontSize=\"14px\" mt={1}> \n {emptyMessage || 'Intente ajustar sus filtros o agregar nuevos datos.'}\n </Typography>\n\n </Box>\n )\n }\n\n {/* Pagination and Export Controls */}\n {(effectiveTotalPages > 0 || enableCSVExport || enableExcelExport || (enableRowSelection && selectedRows.length > 0)) && (\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" p={2}>\n {/* Page Size Selector (Left) */}\n {(effectiveTotalPages > 0 && showPageSizeSelector) && (\n <Select\n size=\"small\"\n value={activePageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n >\n {[1, 2, 3, 5, 10, 20, 50, 100].map((size) => (\n <MenuItem key={size} value={size}>\n Mostrar {size}\n </MenuItem>\n ))}\n </Select>\n )}\n\n {/* Pagination Controls (Center) */}\n {effectiveTotalPages > 0 && (\n <Box\n display=\"flex\"\n alignItems=\"center\"\n gap={0.5}\n sx={{ flexGrow: 1, justifyContent: 'center' }}\n >\n <IconButton\n onClick={() => handlePageChange(1)}\n disabled={activePage <= 1}\n size=\"small\"\n color=\"primary\"\n >\n <FirstPageIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton\n onClick={() => handlePageChange(activePage - 1)}\n disabled={activePage <= 1}\n size=\"small\"\n color=\"primary\"\n >\n <KeyboardArrowLeftIcon fontSize=\"small\" />\n </IconButton>\n\n {pageNumbers.map((pageNumber) => (\n <Button\n key={pageNumber}\n onClick={() => handlePageChange(pageNumber)}\n variant={activePage === pageNumber ? 'contained' : 'text'}\n size=\"small\"\n sx={{ minWidth: '32px', height: '32px' }}\n >\n {pageNumber}\n </Button>\n ))}\n\n <IconButton\n onClick={() => handlePageChange(activePage + 1)}\n disabled={activePage >= effectiveTotalPages}\n size=\"small\"\n color=\"primary\"\n >\n <KeyboardArrowRightIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton\n onClick={() => handlePageChange(effectiveTotalPages)}\n disabled={activePage >= effectiveTotalPages}\n size=\"small\"\n color=\"primary\"\n >\n <LastPageIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n )}\n\n {enableRowSelection && selectedRows.length > 0 && (\n <Typography variant=\"subtitle2\" sx={{ mr: 2 }}>\n {selectedRows.length} seleccionados\n </Typography>\n )}\n\n {(enableCSVExport || enableExcelExport) && (\n <Box display=\"flex\" alignItems=\"center\" gap={1}>\n {enableCSVExport && (\n <Button\n variant=\"text\"\n color=\"primary\"\n onClick={() =>\n exportToCSV({\n data,\n columns,\n fileName: csvExportFileName,\n exportColumns: csvExportColumns,\n setSnackbarOpen,\n setSnackbarMessage,\n setSnackbarSeverity,\n })\n }\n size=\"small\"\n startIcon={<DownloadOutlinedIcon />}\n >\n {csvExportButtonText}\n </Button>\n )}\n {enableExcelExport && (\n <Button\n variant=\"text\"\n color=\"primary\"\n onClick={() =>\n exportToExcel({\n data,\n columns,\n fileName: excelExportFileName,\n exportColumns: excelExportColumns,\n setSnackbarOpen,\n setSnackbarMessage,\n setSnackbarSeverity,\n })\n }\n size=\"small\"\n startIcon={<DownloadOutlinedIcon />}\n >\n {excelExportButtonText}\n </Button>\n )}\n </Box>\n )}\n </Box>\n )}\n\n <Snackbar open={snackbarOpen} autoHideDuration={3000} onClose={handleSnackbarClose} anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}>\n <Alert onClose={handleSnackbarClose} severity={snackbarSeverity} sx={{ width: '100%' }}>\n {snackbarMessage}\n </Alert>\n </Snackbar>\n </TableContainer>\n );\n}\n\nexport default Table;"],"names":["React","Alert","MuiTable"],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 * as React from "react";
|
|
19
|
+
import MuiTimeline from "@mui/lab/Timeline";
|
|
20
|
+
import MuiTimelineItem, { timelineItemClasses } from "@mui/lab/TimelineItem";
|
|
21
|
+
import MuiTimelineSeparator from "@mui/lab/TimelineSeparator";
|
|
22
|
+
import MuiTimelineConnector from "@mui/lab/TimelineConnector";
|
|
23
|
+
import MuiTimelineContent from "@mui/lab/TimelineContent";
|
|
24
|
+
import MuiTimelineDot from "@mui/lab/TimelineDot";
|
|
25
|
+
const Timeline = ({ children, position = "right", sx }) => {
|
|
26
|
+
const count = React.Children.count(children);
|
|
27
|
+
const customSx = position === "left" || position === "right" ? __spreadValues({
|
|
28
|
+
[`& .${timelineItemClasses.root}:before`]: {
|
|
29
|
+
flex: 0,
|
|
30
|
+
padding: 0
|
|
31
|
+
}
|
|
32
|
+
}, sx) : sx;
|
|
33
|
+
return /* @__PURE__ */ jsx(
|
|
34
|
+
MuiTimeline,
|
|
35
|
+
{
|
|
36
|
+
position,
|
|
37
|
+
sx: __spreadValues({}, customSx),
|
|
38
|
+
children: React.Children.map(
|
|
39
|
+
children,
|
|
40
|
+
(child, idx) => {
|
|
41
|
+
var _a;
|
|
42
|
+
return React.isValidElement(child) ? React.cloneElement(child, {
|
|
43
|
+
connectorColor: idx < count - 1 ? (_a = child.props.connectorColor) != null ? _a : "grey" : void 0
|
|
44
|
+
}) : null;
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
const TimelineItem = ({
|
|
51
|
+
dotColor = "grey",
|
|
52
|
+
connectorColor,
|
|
53
|
+
children
|
|
54
|
+
}) => {
|
|
55
|
+
const color = connectorColor ? `${connectorColor}.main` : "secondary.main";
|
|
56
|
+
return /* @__PURE__ */ jsxs(MuiTimelineItem, { children: [
|
|
57
|
+
/* @__PURE__ */ jsxs(MuiTimelineSeparator, { children: [
|
|
58
|
+
/* @__PURE__ */ jsx(MuiTimelineDot, { color: dotColor }),
|
|
59
|
+
connectorColor !== void 0 && /* @__PURE__ */ jsx(MuiTimelineConnector, { sx: { bgcolor: color } })
|
|
60
|
+
] }),
|
|
61
|
+
/* @__PURE__ */ jsx(MuiTimelineContent, { children })
|
|
62
|
+
] });
|
|
63
|
+
};
|
|
64
|
+
export {
|
|
65
|
+
Timeline as T,
|
|
66
|
+
TimelineItem as a
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=TimelineItem-0jRPFT11.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineItem-0jRPFT11.js","sources":["../src/components/Timeline/Timeline.tsx","../src/components/Timeline/TimelineItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport MuiTimeline from '@mui/lab/Timeline';\nimport { timelineItemClasses } from '@mui/lab/TimelineItem';\n\nimport type { TimelineItemProps } from './TimelineItem';\n\nexport interface TimelineProps {\n children: React.ReactElement<TimelineItemProps>[];\n position?: 'left' | 'right' | 'alternate' | 'alternate-reverse';\n sx?: object;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ children, position = \"right\", sx }) => {\n const count = React.Children.count(children);\n\n const customSx = (position === \"left\" || position === \"right\")\n ? {\n [`& .${timelineItemClasses.root}:before`]: {\n flex: 0,\n padding: 0,\n },\n ...sx,\n }\n : sx;\n \n return (\n <MuiTimeline position={position}\n sx={{...customSx}}\n >\n {React.Children.map(children, (child, idx) =>\n React.isValidElement(child)\n ? React.cloneElement(child, {\n connectorColor: idx < count - 1\n ? child.props.connectorColor ?? 'grey'\n : undefined,\n })\n : null\n )}\n </MuiTimeline>\n\n );\n};\n\nexport default Timeline;","\nimport MuiTimelineItem from \"@mui/lab/TimelineItem\";\nimport MuiTimelineSeparator from \"@mui/lab/TimelineSeparator\";\nimport MuiTimelineConnector from \"@mui/lab/TimelineConnector\";\nimport MuiTimelineContent from \"@mui/lab/TimelineContent\";\nimport MuiTimelineDot from \"@mui/lab/TimelineDot\";\n\nexport interface TimelineItemProps {\n dotColor?: 'primary' | 'secondary' | 'grey' | 'inherit' | 'success' | 'error' | 'info' | 'warning';\n connectorColor?: 'success' | 'error' | 'info' | 'warning' | 'primary' | 'secondary' | 'grey';\n children: React.ReactNode;\n}\n\nexport const TimelineItem: React.FC<TimelineItemProps> = ({\n dotColor = 'grey',\n connectorColor,\n children\n}) => {\n const color = connectorColor ? `${connectorColor}.main` : 'secondary.main';\n return (\n <MuiTimelineItem>\n <MuiTimelineSeparator>\n <MuiTimelineDot color={dotColor} />\n {connectorColor !== undefined && <MuiTimelineConnector sx={{ bgcolor: color }} />}\n </MuiTimelineSeparator>\n <MuiTimelineContent>{children}</MuiTimelineContent>\n </MuiTimelineItem>\n );\n};\n\nexport default TimelineItem"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAoC,CAAC,EAAE,UAAU,WAAW,SAAS,SAAS;AACzF,QAAM,QAAQ,MAAM,SAAS,MAAM,QAAQ;AAEzC,QAAM,WAAY,aAAa,UAAU,aAAa,UACpD;AAAA,IACE,CAAC,MAAM,oBAAoB,IAAI,SAAS,GAAG;AAAA,MACzC,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,KAER,MAEL;AAEJ,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MAAY;AAAA,MACX,IAAI,mBAAI;AAAA,MAEP,gBAAM,SAAS;AAAA,QAAI;AAAA,QAAU,CAAC,OAAO,QAAA;;AACpC,uBAAM,eAAe,KAAK,IACtB,MAAM,aAAa,OAAO;AAAA,YAC1B,gBAAgB,MAAM,QAAQ,KAC1B,WAAM,MAAM,mBAAZ,YAA8B,SAC9B;AAAA,UAAA,CACL,IACC;AAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAIN;AC5BO,MAAM,eAA4C,CAAC;AAAA,EACxD,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,iBAAiB,GAAG,cAAc,UAAU;AAC1D,8BACG,iBAAA,EACC,UAAA;AAAA,IAAA,qBAAC,sBAAA,EACC,UAAA;AAAA,MAAA,oBAAC,gBAAA,EAAe,OAAO,SAAA,CAAU;AAAA,MAChC,mBAAmB,UAAa,oBAAC,sBAAA,EAAqB,IAAI,EAAE,SAAS,QAAM,CAAG;AAAA,IAAA,GACjF;AAAA,IACA,oBAAC,sBAAoB,SAAA,CAAS;AAAA,EAAA,GAChC;AAEJ;"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
const React = require("react");
|
|
20
|
+
const MuiTimeline = require("@mui/lab/Timeline");
|
|
21
|
+
const MuiTimelineItem = require("@mui/lab/TimelineItem");
|
|
22
|
+
const MuiTimelineSeparator = require("@mui/lab/TimelineSeparator");
|
|
23
|
+
const MuiTimelineConnector = require("@mui/lab/TimelineConnector");
|
|
24
|
+
const MuiTimelineContent = require("@mui/lab/TimelineContent");
|
|
25
|
+
const MuiTimelineDot = require("@mui/lab/TimelineDot");
|
|
26
|
+
function _interopNamespaceDefault(e) {
|
|
27
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
28
|
+
if (e) {
|
|
29
|
+
for (const k in e) {
|
|
30
|
+
if (k !== "default") {
|
|
31
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
32
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: () => e[k]
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
n.default = e;
|
|
40
|
+
return Object.freeze(n);
|
|
41
|
+
}
|
|
42
|
+
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
|
|
43
|
+
const Timeline = ({ children, position = "right", sx }) => {
|
|
44
|
+
const count = React__namespace.Children.count(children);
|
|
45
|
+
const customSx = position === "left" || position === "right" ? __spreadValues({
|
|
46
|
+
[`& .${MuiTimelineItem.timelineItemClasses.root}:before`]: {
|
|
47
|
+
flex: 0,
|
|
48
|
+
padding: 0
|
|
49
|
+
}
|
|
50
|
+
}, sx) : sx;
|
|
51
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
52
|
+
MuiTimeline,
|
|
53
|
+
{
|
|
54
|
+
position,
|
|
55
|
+
sx: __spreadValues({}, customSx),
|
|
56
|
+
children: React__namespace.Children.map(
|
|
57
|
+
children,
|
|
58
|
+
(child, idx) => {
|
|
59
|
+
var _a;
|
|
60
|
+
return React__namespace.isValidElement(child) ? React__namespace.cloneElement(child, {
|
|
61
|
+
connectorColor: idx < count - 1 ? (_a = child.props.connectorColor) != null ? _a : "grey" : void 0
|
|
62
|
+
}) : null;
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
const TimelineItem = ({
|
|
69
|
+
dotColor = "grey",
|
|
70
|
+
connectorColor,
|
|
71
|
+
children
|
|
72
|
+
}) => {
|
|
73
|
+
const color = connectorColor ? `${connectorColor}.main` : "secondary.main";
|
|
74
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(MuiTimelineItem, { children: [
|
|
75
|
+
/* @__PURE__ */ jsxRuntime.jsxs(MuiTimelineSeparator, { children: [
|
|
76
|
+
/* @__PURE__ */ jsxRuntime.jsx(MuiTimelineDot, { color: dotColor }),
|
|
77
|
+
connectorColor !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(MuiTimelineConnector, { sx: { bgcolor: color } })
|
|
78
|
+
] }),
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsx(MuiTimelineContent, { children })
|
|
80
|
+
] });
|
|
81
|
+
};
|
|
82
|
+
exports.Timeline = Timeline;
|
|
83
|
+
exports.TimelineItem = TimelineItem;
|
|
84
|
+
//# sourceMappingURL=TimelineItem-BbhUWJhU.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineItem-BbhUWJhU.cjs","sources":["../src/components/Timeline/Timeline.tsx","../src/components/Timeline/TimelineItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport MuiTimeline from '@mui/lab/Timeline';\nimport { timelineItemClasses } from '@mui/lab/TimelineItem';\n\nimport type { TimelineItemProps } from './TimelineItem';\n\nexport interface TimelineProps {\n children: React.ReactElement<TimelineItemProps>[];\n position?: 'left' | 'right' | 'alternate' | 'alternate-reverse';\n sx?: object;\n}\n\nexport const Timeline: React.FC<TimelineProps> = ({ children, position = \"right\", sx }) => {\n const count = React.Children.count(children);\n\n const customSx = (position === \"left\" || position === \"right\")\n ? {\n [`& .${timelineItemClasses.root}:before`]: {\n flex: 0,\n padding: 0,\n },\n ...sx,\n }\n : sx;\n \n return (\n <MuiTimeline position={position}\n sx={{...customSx}}\n >\n {React.Children.map(children, (child, idx) =>\n React.isValidElement(child)\n ? React.cloneElement(child, {\n connectorColor: idx < count - 1\n ? child.props.connectorColor ?? 'grey'\n : undefined,\n })\n : null\n )}\n </MuiTimeline>\n\n );\n};\n\nexport default Timeline;","\nimport MuiTimelineItem from \"@mui/lab/TimelineItem\";\nimport MuiTimelineSeparator from \"@mui/lab/TimelineSeparator\";\nimport MuiTimelineConnector from \"@mui/lab/TimelineConnector\";\nimport MuiTimelineContent from \"@mui/lab/TimelineContent\";\nimport MuiTimelineDot from \"@mui/lab/TimelineDot\";\n\nexport interface TimelineItemProps {\n dotColor?: 'primary' | 'secondary' | 'grey' | 'inherit' | 'success' | 'error' | 'info' | 'warning';\n connectorColor?: 'success' | 'error' | 'info' | 'warning' | 'primary' | 'secondary' | 'grey';\n children: React.ReactNode;\n}\n\nexport const TimelineItem: React.FC<TimelineItemProps> = ({\n dotColor = 'grey',\n connectorColor,\n children\n}) => {\n const color = connectorColor ? `${connectorColor}.main` : 'secondary.main';\n return (\n <MuiTimelineItem>\n <MuiTimelineSeparator>\n <MuiTimelineDot color={dotColor} />\n {connectorColor !== undefined && <MuiTimelineConnector sx={{ bgcolor: color }} />}\n </MuiTimelineSeparator>\n <MuiTimelineContent>{children}</MuiTimelineContent>\n </MuiTimelineItem>\n );\n};\n\nexport default TimelineItem"],"names":["React","timelineItemClasses","jsx","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAoC,CAAC,EAAE,UAAU,WAAW,SAAS,SAAS;AACzF,QAAM,QAAQA,iBAAM,SAAS,MAAM,QAAQ;AAEzC,QAAM,WAAY,aAAa,UAAU,aAAa,UACpD;AAAA,IACE,CAAC,MAAMC,gBAAAA,oBAAoB,IAAI,SAAS,GAAG;AAAA,MACzC,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,KAER,MAEL;AAEJ,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MAAY;AAAA,MACX,IAAI,mBAAI;AAAA,MAEP,2BAAM,SAAS;AAAA,QAAI;AAAA,QAAU,CAAC,OAAO,QAAA;;AACpCF,kCAAM,eAAe,KAAK,IACtBA,iBAAM,aAAa,OAAO;AAAA,YAC1B,gBAAgB,MAAM,QAAQ,KAC1B,WAAM,MAAM,mBAAZ,YAA8B,SAC9B;AAAA,UAAA,CACL,IACC;AAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAIN;AC5BO,MAAM,eAA4C,CAAC;AAAA,EACxD,WAAW;AAAA,EACX;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,iBAAiB,GAAG,cAAc,UAAU;AAC1D,yCACG,iBAAA,EACC,UAAA;AAAA,IAAAG,gCAAC,sBAAA,EACC,UAAA;AAAA,MAAAD,2BAAAA,IAAC,gBAAA,EAAe,OAAO,SAAA,CAAU;AAAA,MAChC,mBAAmB,UAAaA,2BAAAA,IAAC,sBAAA,EAAqB,IAAI,EAAE,SAAS,QAAM,CAAG;AAAA,IAAA,GACjF;AAAA,IACAA,+BAAC,sBAAoB,SAAA,CAAS;AAAA,EAAA,GAChC;AAEJ;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
import { jsx } from "react/jsx-runtime";
|
|
21
|
+
import MuiTooltip from "@mui/material/Tooltip";
|
|
22
|
+
import Typography from "@mui/material/Typography";
|
|
23
|
+
import Box from "@mui/material/Box";
|
|
24
|
+
const Tooltip = ({ text, maxWidth, children, sx }) => {
|
|
25
|
+
const tooltipContentStyle = __spreadProps(__spreadValues({}, maxWidth && { maxWidth }), {
|
|
26
|
+
padding: "4px 8px",
|
|
27
|
+
textAlign: "center"
|
|
28
|
+
});
|
|
29
|
+
return /* @__PURE__ */ jsx(
|
|
30
|
+
MuiTooltip,
|
|
31
|
+
{
|
|
32
|
+
title: /* @__PURE__ */ jsx(Typography, { variant: "caption", component: "span", sx: tooltipContentStyle, children: text }),
|
|
33
|
+
placement: "top",
|
|
34
|
+
arrow: true,
|
|
35
|
+
children: /* @__PURE__ */ jsx(Box, { component: "span", sx: __spreadValues({ display: "inline-block" }, sx), children })
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
Tooltip as T
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=Tooltip-BB77JBcg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip-BB77JBcg.js","sources":["../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React from 'react';\nimport MuiTooltip from '@mui/material/Tooltip'; \nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { SxProps, Theme } from '@mui/material';\n\n/**\n * Propiedades del componente Tooltip.\n * @param {string} text - El texto a mostrar dentro del Tooltip.\n * @param {number} [maxWidth] - El ancho máximo opcional del Tooltip en píxeles.\n * @param {React.ReactNode} children - El elemento al que se le aplicará el Tooltip.\n * @param {SxProps<Theme>} [sx] - Estilos opcionales para el Box contenedor.\n */\ninterface TooltipProps {\n text: string;\n maxWidth?: number;\n children: React.ReactNode;\n sx?: SxProps<Theme>;\n}\n\n/**\n * Componente Tooltip reutilizable.\n * Muestra un texto al pasar el ratón sobre su elemento hijo, \n * permitiendo un ancho máximo configurable.\n * * @param {TooltipProps} props - Propiedades del Tooltip.\n */\nconst Tooltip: React.FC<TooltipProps> = ({ text, maxWidth, children, sx }) => {\n \n const tooltipContentStyle: SxProps<Theme> = {\n \n ...(maxWidth && { maxWidth: maxWidth }), \n padding: '4px 8px', \n textAlign: 'center',\n \n };\n\n return (\n \n <MuiTooltip\n title={\n \n <Typography variant=\"caption\" component=\"span\" sx={tooltipContentStyle}>\n {text}\n </Typography>\n }\n \n placement=\"top\" \n arrow \n >\n \n <Box component=\"span\" sx={{ display: 'inline-block', ...sx }}>\n {children}\n </Box>\n </MuiTooltip>\n );\n};\n\nexport default Tooltip;"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,UAAkC,CAAC,EAAE,MAAM,UAAU,UAAU,SAAS;AAE5E,QAAM,sBAAsC,iCAEtC,YAAY,EAAE,SAAA,IAFwB;AAAA,IAG1C,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAIb,SAEE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,2BAEG,YAAA,EAAW,SAAQ,WAAU,WAAU,QAAO,IAAI,qBAChD,UAAA,KAAA,CACH;AAAA,MAGF,WAAU;AAAA,MACV,OAAK;AAAA,MAGL,UAAA,oBAAC,KAAA,EAAI,WAAU,QAAO,IAAI,iBAAE,SAAS,kBAAmB,KACrD,SAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defProps = Object.defineProperties;
|
|
4
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __spreadValues = (a, b) => {
|
|
10
|
+
for (var prop in b || (b = {}))
|
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
|
13
|
+
if (__getOwnPropSymbols)
|
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
+
if (__propIsEnum.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
18
|
+
return a;
|
|
19
|
+
};
|
|
20
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
22
|
+
const MuiTooltip = require("@mui/material/Tooltip");
|
|
23
|
+
const Typography = require("@mui/material/Typography");
|
|
24
|
+
const Box = require("@mui/material/Box");
|
|
25
|
+
const Tooltip = ({ text, maxWidth, children, sx }) => {
|
|
26
|
+
const tooltipContentStyle = __spreadProps(__spreadValues({}, maxWidth && { maxWidth }), {
|
|
27
|
+
padding: "4px 8px",
|
|
28
|
+
textAlign: "center"
|
|
29
|
+
});
|
|
30
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
31
|
+
MuiTooltip,
|
|
32
|
+
{
|
|
33
|
+
title: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", component: "span", sx: tooltipContentStyle, children: text }),
|
|
34
|
+
placement: "top",
|
|
35
|
+
arrow: true,
|
|
36
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Box, { component: "span", sx: __spreadValues({ display: "inline-block" }, sx), children })
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
exports.Tooltip = Tooltip;
|
|
41
|
+
//# sourceMappingURL=Tooltip-DpAsWGpN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip-DpAsWGpN.cjs","sources":["../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React from 'react';\nimport MuiTooltip from '@mui/material/Tooltip'; \nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { SxProps, Theme } from '@mui/material';\n\n/**\n * Propiedades del componente Tooltip.\n * @param {string} text - El texto a mostrar dentro del Tooltip.\n * @param {number} [maxWidth] - El ancho máximo opcional del Tooltip en píxeles.\n * @param {React.ReactNode} children - El elemento al que se le aplicará el Tooltip.\n * @param {SxProps<Theme>} [sx] - Estilos opcionales para el Box contenedor.\n */\ninterface TooltipProps {\n text: string;\n maxWidth?: number;\n children: React.ReactNode;\n sx?: SxProps<Theme>;\n}\n\n/**\n * Componente Tooltip reutilizable.\n * Muestra un texto al pasar el ratón sobre su elemento hijo, \n * permitiendo un ancho máximo configurable.\n * * @param {TooltipProps} props - Propiedades del Tooltip.\n */\nconst Tooltip: React.FC<TooltipProps> = ({ text, maxWidth, children, sx }) => {\n \n const tooltipContentStyle: SxProps<Theme> = {\n \n ...(maxWidth && { maxWidth: maxWidth }), \n padding: '4px 8px', \n textAlign: 'center',\n \n };\n\n return (\n \n <MuiTooltip\n title={\n \n <Typography variant=\"caption\" component=\"span\" sx={tooltipContentStyle}>\n {text}\n </Typography>\n }\n \n placement=\"top\" \n arrow \n >\n \n <Box component=\"span\" sx={{ display: 'inline-block', ...sx }}>\n {children}\n </Box>\n </MuiTooltip>\n );\n};\n\nexport default Tooltip;"],"names":["jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,UAAkC,CAAC,EAAE,MAAM,UAAU,UAAU,SAAS;AAE5E,QAAM,sBAAsC,iCAEtC,YAAY,EAAE,SAAA,IAFwB;AAAA,IAG1C,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAIb,SAEEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,sCAEG,YAAA,EAAW,SAAQ,WAAU,WAAU,QAAO,IAAI,qBAChD,UAAA,KAAA,CACH;AAAA,MAGF,WAAU;AAAA,MACV,OAAK;AAAA,MAGL,UAAAA,2BAAAA,IAAC,KAAA,EAAI,WAAU,QAAO,IAAI,iBAAE,SAAS,kBAAmB,KACrD,SAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;;"}
|
|
@@ -1,107 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __defProps = Object.defineProperties;
|
|
4
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
-
var __spreadValues = (a, b) => {
|
|
10
|
-
for (var prop in b || (b = {}))
|
|
11
|
-
if (__hasOwnProp.call(b, prop))
|
|
12
|
-
__defNormalProp(a, prop, b[prop]);
|
|
13
|
-
if (__getOwnPropSymbols)
|
|
14
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
-
if (__propIsEnum.call(b, prop))
|
|
16
|
-
__defNormalProp(a, prop, b[prop]);
|
|
17
|
-
}
|
|
18
|
-
return a;
|
|
19
|
-
};
|
|
20
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
21
|
-
var __objRest = (source, exclude) => {
|
|
22
|
-
var target = {};
|
|
23
|
-
for (var prop in source)
|
|
24
|
-
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
25
|
-
target[prop] = source[prop];
|
|
26
|
-
if (source != null && __getOwnPropSymbols)
|
|
27
|
-
for (var prop of __getOwnPropSymbols(source)) {
|
|
28
|
-
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
29
|
-
target[prop] = source[prop];
|
|
30
|
-
}
|
|
31
|
-
return target;
|
|
32
|
-
};
|
|
33
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const ActionMenuContext = React.createContext(null);
|
|
39
|
-
const ActionMenu = ({
|
|
40
|
-
children,
|
|
41
|
-
trigger,
|
|
42
|
-
triggerTooltip,
|
|
43
|
-
anchorOrigin = { vertical: "bottom", horizontal: "right" },
|
|
44
|
-
transformOrigin = { vertical: "top", horizontal: "right" },
|
|
45
|
-
menuSx,
|
|
46
|
-
disabled = false
|
|
47
|
-
}) => {
|
|
48
|
-
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
49
|
-
const open = Boolean(anchorEl);
|
|
50
|
-
const handleClose = () => setAnchorEl(null);
|
|
51
|
-
const openMenu = (event) => {
|
|
52
|
-
if (disabled) return;
|
|
53
|
-
event.stopPropagation();
|
|
54
|
-
setAnchorEl(event.currentTarget);
|
|
55
|
-
};
|
|
56
|
-
const triggerElement = trigger ? React.cloneElement(trigger, {
|
|
57
|
-
onClick: openMenu,
|
|
58
|
-
disabled
|
|
59
|
-
}) : /* @__PURE__ */ jsxRuntime.jsx(material.Tooltip, { title: triggerTooltip, arrow: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
60
|
-
material.IconButton,
|
|
61
|
-
{
|
|
62
|
-
size: "small",
|
|
63
|
-
onClick: openMenu,
|
|
64
|
-
disabled,
|
|
65
|
-
"aria-label": triggerTooltip,
|
|
66
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(MoreVertIcon, { fontSize: "small" })
|
|
67
|
-
}
|
|
68
|
-
) });
|
|
69
|
-
const paperSx = [
|
|
70
|
-
{ minWidth: 180 },
|
|
71
|
-
...Array.isArray(menuSx) ? menuSx : menuSx ? [menuSx] : []
|
|
72
|
-
];
|
|
73
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
74
|
-
triggerElement,
|
|
75
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
-
material.Menu,
|
|
77
|
-
{
|
|
78
|
-
anchorEl,
|
|
79
|
-
open,
|
|
80
|
-
onClose: handleClose,
|
|
81
|
-
anchorOrigin,
|
|
82
|
-
transformOrigin,
|
|
83
|
-
slotProps: { paper: { sx: paperSx } },
|
|
84
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(ActionMenuContext.Provider, { value: { close: handleClose }, children })
|
|
85
|
-
}
|
|
86
|
-
)
|
|
87
|
-
] });
|
|
88
|
-
};
|
|
89
|
-
const ActionMenuItem = React.forwardRef(
|
|
90
|
-
function ActionMenuItem2(_a, ref) {
|
|
91
|
-
var _b = _a, { icon, children, onClick } = _b, rest = __objRest(_b, ["icon", "children", "onClick"]);
|
|
92
|
-
const ctx = React.useContext(ActionMenuContext);
|
|
93
|
-
const handleClick = (event) => {
|
|
94
|
-
event.stopPropagation();
|
|
95
|
-
onClick == null ? void 0 : onClick(event);
|
|
96
|
-
ctx == null ? void 0 : ctx.close();
|
|
97
|
-
};
|
|
98
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(material.MenuItem, __spreadProps(__spreadValues({ ref, onClick: handleClick }, rest), { children: [
|
|
99
|
-
icon && /* @__PURE__ */ jsxRuntime.jsx(material.ListItemIcon, { sx: { minWidth: 32 }, children: icon }),
|
|
100
|
-
/* @__PURE__ */ jsxRuntime.jsx(material.ListItemText, { primary: children })
|
|
101
|
-
] }));
|
|
102
|
-
}
|
|
103
|
-
);
|
|
104
|
-
exports.ActionMenu = ActionMenu;
|
|
105
|
-
exports.ActionMenuItem = ActionMenuItem;
|
|
106
|
-
exports.default = ActionMenu;
|
|
3
|
+
const ActionMenu = require("../../ActionMenu-wNWkDZWh.cjs");
|
|
4
|
+
exports.ActionMenu = ActionMenu.ActionMenu;
|
|
5
|
+
exports.ActionMenuItem = ActionMenu.ActionMenuItem;
|
|
6
|
+
exports.default = ActionMenu.ActionMenu;
|
|
107
7
|
//# sourceMappingURL=ActionMenu.cjs.map
|