@m4l/components 9.3.34 → 9.3.35-JT27112025.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.
Files changed (133) hide show
  1. package/@types/export.d.ts +3 -0
  2. package/@types/types.d.ts +11 -0
  3. package/components/DataGrid/Datagrid.styles.js +1 -0
  4. package/components/DataGrid/contexts/DataGridContext/index.js +39 -268
  5. package/components/DataGrid/contexts/DataGridContext/types.d.ts +3 -20
  6. package/components/DataGrid/formatters/ColumnImageFormatter/ImageFormatterCell.d.ts +13 -0
  7. package/components/DataGrid/formatters/ColumnImageFormatter/ImageFormatterCell.js +33 -0
  8. package/components/DataGrid/formatters/ColumnImageFormatter/constants.d.ts +6 -0
  9. package/components/DataGrid/formatters/ColumnImageFormatter/constants.js +6 -0
  10. package/components/DataGrid/formatters/ColumnImageFormatter/formatter.d.ts +8 -0
  11. package/components/DataGrid/formatters/ColumnImageFormatter/formatter.js +25 -0
  12. package/components/DataGrid/formatters/ColumnImageFormatter/index.d.ts +3 -0
  13. package/components/DataGrid/formatters/ColumnImageFormatter/index.js +1 -0
  14. package/components/DataGrid/formatters/ColumnImageFormatter/tests/ColumnImageFormatter.test.d.ts +1 -0
  15. package/components/DataGrid/formatters/ColumnImageFormatter/types.d.ts +44 -0
  16. package/components/DataGrid/formatters/ColumnImageFormatter/types.js +1 -0
  17. package/components/DataGrid/formatters/ColumnImageFormatter/useColumnImage.d.ts +9 -0
  18. package/components/DataGrid/formatters/ColumnImageFormatter/useColumnImage.js +22 -0
  19. package/components/DataGrid/formatters/index.d.ts +1 -0
  20. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.d.ts +19 -0
  21. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.js +6 -0
  22. package/components/DataGrid/helpers/getAllViewModes/getAllViewModes.test.d.ts +1 -0
  23. package/components/DataGrid/helpers/getAllViewModes/index.d.ts +1 -0
  24. package/components/DataGrid/helpers/getAllViewModes/index.js +1 -0
  25. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.d.ts +47 -0
  26. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.js +32 -0
  27. package/components/DataGrid/helpers/getColumnsWidth/getColumnsWidth.test.d.ts +1 -0
  28. package/components/DataGrid/helpers/getColumnsWidth/index.d.ts +1 -0
  29. package/components/DataGrid/helpers/getColumnsWidth/index.js +1 -0
  30. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.d.ts +24 -0
  31. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.js +12 -0
  32. package/components/DataGrid/helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.test.d.ts +1 -0
  33. package/components/DataGrid/helpers/getIndexRowHeightVariant/index.d.ts +1 -0
  34. package/components/DataGrid/helpers/getIndexRowHeightVariant/index.js +1 -0
  35. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.d.ts +48 -0
  36. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.js +35 -0
  37. package/components/DataGrid/helpers/getInitialColumnsConfig/getInitialColumnsConfig.test.d.ts +1 -0
  38. package/components/DataGrid/helpers/getInitialColumnsConfig/index.d.ts +1 -0
  39. package/components/DataGrid/helpers/getInitialColumnsConfig/index.js +1 -0
  40. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.d.ts +28 -0
  41. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.js +22 -0
  42. package/components/DataGrid/helpers/getViewSpecificConfig/getViewSpecificConfig.test.d.ts +1 -0
  43. package/components/DataGrid/helpers/getViewSpecificConfig/index.d.ts +1 -0
  44. package/components/DataGrid/helpers/getViewSpecificConfig/index.js +1 -0
  45. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.d.ts +24 -0
  46. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.js +9 -0
  47. package/components/DataGrid/helpers/getViewSuffix/getViewSuffix.test.d.ts +1 -0
  48. package/components/DataGrid/helpers/getViewSuffix/index.d.ts +1 -0
  49. package/components/DataGrid/helpers/getViewSuffix/index.js +1 -0
  50. package/components/DataGrid/helpers/index.d.ts +12 -0
  51. package/components/DataGrid/helpers/index.js +1 -0
  52. package/components/DataGrid/helpers/loadViewConfig/index.d.ts +1 -0
  53. package/components/DataGrid/helpers/loadViewConfig/index.js +1 -0
  54. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.d.ts +23 -0
  55. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.js +12 -0
  56. package/components/DataGrid/helpers/loadViewConfig/loadViewConfig.test.d.ts +1 -0
  57. package/components/DataGrid/helpers/saveColumnsWidth/index.d.ts +1 -0
  58. package/components/DataGrid/helpers/saveColumnsWidth/index.js +1 -0
  59. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.d.ts +52 -0
  60. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.js +18 -0
  61. package/components/DataGrid/helpers/saveColumnsWidth/saveColumnsWidth.test.d.ts +1 -0
  62. package/components/DataGrid/helpers/saveViewConfig/index.d.ts +1 -0
  63. package/components/DataGrid/helpers/saveViewConfig/index.js +1 -0
  64. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.d.ts +35 -0
  65. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.js +15 -0
  66. package/components/DataGrid/helpers/saveViewConfig/saveViewConfig.test.d.ts +1 -0
  67. package/components/DataGrid/helpers/saveViewMode/index.d.ts +1 -0
  68. package/components/DataGrid/helpers/saveViewMode/index.js +1 -0
  69. package/components/DataGrid/helpers/saveViewMode/saveViewMode.d.ts +33 -0
  70. package/components/DataGrid/helpers/saveViewMode/saveViewMode.js +13 -0
  71. package/components/DataGrid/helpers/saveViewMode/saveViewMode.test.d.ts +1 -0
  72. package/components/DataGrid/hooks/index.d.ts +6 -0
  73. package/components/DataGrid/hooks/index.js +1 -0
  74. package/components/DataGrid/hooks/useChangeColumnsConfig/index.d.ts +1 -0
  75. package/components/DataGrid/hooks/useChangeColumnsConfig/index.js +1 -0
  76. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.d.ts +9 -0
  77. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.js +27 -0
  78. package/components/DataGrid/hooks/useChangeColumnsConfig/useChangeColumnsConfig.test.d.ts +1 -0
  79. package/components/DataGrid/hooks/useChangeColumnsOrder/index.d.ts +1 -0
  80. package/components/DataGrid/hooks/useChangeColumnsOrder/index.js +1 -0
  81. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.d.ts +10 -0
  82. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.js +34 -0
  83. package/components/DataGrid/hooks/useChangeColumnsOrder/useChangeColumnsOrder.test.d.ts +1 -0
  84. package/components/DataGrid/hooks/useColumnsWidth/index.d.ts +1 -0
  85. package/components/DataGrid/hooks/useColumnsWidth/index.js +1 -0
  86. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.d.ts +11 -0
  87. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.js +29 -0
  88. package/components/DataGrid/hooks/useColumnsWidth/useColumnsWidth.test.d.ts +1 -0
  89. package/components/DataGrid/hooks/useRowHeight/index.d.ts +1 -0
  90. package/components/DataGrid/hooks/useRowHeight/index.js +1 -0
  91. package/components/DataGrid/hooks/useRowHeight/useRowHeight.d.ts +28 -0
  92. package/components/DataGrid/hooks/useRowHeight/useRowHeight.js +51 -0
  93. package/components/DataGrid/hooks/useRowHeight/useRowHeight.test.d.ts +1 -0
  94. package/components/DataGrid/hooks/useViewConfig/index.d.ts +1 -0
  95. package/components/DataGrid/hooks/useViewConfig/index.js +1 -0
  96. package/components/DataGrid/hooks/useViewConfig/useViewConfig.d.ts +9 -0
  97. package/components/DataGrid/hooks/useViewConfig/useViewConfig.js +30 -0
  98. package/components/DataGrid/hooks/useViewConfig/useViewConfig.test.d.ts +1 -0
  99. package/components/DataGrid/hooks/useViewMode/index.d.ts +1 -0
  100. package/components/DataGrid/hooks/useViewMode/index.js +1 -0
  101. package/components/DataGrid/hooks/useViewMode/useViewMode.d.ts +44 -0
  102. package/components/DataGrid/hooks/useViewMode/useViewMode.js +48 -0
  103. package/components/DataGrid/hooks/useViewMode/useViewMode.test.d.ts +1 -0
  104. package/components/DataGrid/index.d.ts +5 -4
  105. package/components/DataGrid/subcomponents/Cards/helpers/scrollToCardElement.js +2 -2
  106. package/components/DataGrid/subcomponents/Cards/index.js +16 -3
  107. package/components/DataGrid/subcomponents/Cards/subcomponents/CardRow/index.js +1 -0
  108. package/components/DataGrid/subcomponents/Table/index.js +10 -1
  109. package/components/DataGrid/tests/helpers/types.d.ts +10 -0
  110. package/components/DataGrid/types.helpers.d.ts +55 -0
  111. package/components/DataGrid/types.helpers.js +1 -0
  112. package/components/DataGrid/types.hooks.d.ts +79 -0
  113. package/components/formatters/ImageFormatter/ImageFormatter.d.ts +10 -0
  114. package/components/formatters/ImageFormatter/ImageFormatter.js +72 -0
  115. package/components/formatters/ImageFormatter/ImageFormatter.styles.d.ts +2 -0
  116. package/components/formatters/ImageFormatter/ImageFormatter.styles.js +42 -0
  117. package/components/formatters/ImageFormatter/constants.d.ts +5 -0
  118. package/components/formatters/ImageFormatter/constants.js +10 -0
  119. package/components/formatters/ImageFormatter/index.d.ts +2 -0
  120. package/components/formatters/ImageFormatter/index.js +1 -0
  121. package/components/formatters/ImageFormatter/slots/ImageFormatterEnum.d.ts +5 -0
  122. package/components/formatters/ImageFormatter/slots/ImageFormatterEnum.js +9 -0
  123. package/components/formatters/ImageFormatter/slots/ImageFormatterSlots.d.ts +9 -0
  124. package/components/formatters/ImageFormatter/slots/ImageFormatterSlots.js +23 -0
  125. package/components/formatters/ImageFormatter/tests/ImageFormatter.test.d.ts +1 -0
  126. package/components/formatters/ImageFormatter/types.d.ts +51 -0
  127. package/components/formatters/ImageFormatter/types.js +1 -0
  128. package/components/formatters/index.d.ts +1 -0
  129. package/hooks/useDataGridPersistence/constants.d.ts +1 -0
  130. package/hooks/useDataGridPersistence/constants.js +4 -2
  131. package/hooks/useDataGridPersistence/useDataGridPersistence.js +5 -2
  132. package/index.js +68 -62
  133. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import { UseChangeColumnsConfigParams, UseChangeColumnsConfigReturn } from '../../types.hooks';
2
+ /**
3
+ * Hook para manejar el cambio de configuración de columnas.
4
+ *
5
+ * Guarda la configuración en localStorage y actualiza el estado.
6
+ * @param params - Parámetros del hook
7
+ * @returns Función para cambiar la configuración de columnas
8
+ */
9
+ export declare const useChangeColumnsConfig: ({ id, onChangeUserColumns, updateConfigColumns, }: UseChangeColumnsConfigParams) => UseChangeColumnsConfigReturn;
@@ -0,0 +1,27 @@
1
+ import { useCallback } from "react";
2
+ import { s as saveViewConfig } from "../../helpers/saveViewConfig/saveViewConfig.js";
3
+ import { g as getViewSuffix } from "../../helpers/getViewSuffix/getViewSuffix.js";
4
+ const useChangeColumnsConfig = ({
5
+ id,
6
+ onChangeUserColumns,
7
+ updateConfigColumns
8
+ }) => {
9
+ const onChangeColumnsConfig = useCallback(
10
+ (viewModeParam, newConfig) => {
11
+ saveViewConfig(
12
+ id,
13
+ getViewSuffix(viewModeParam),
14
+ newConfig,
15
+ onChangeUserColumns
16
+ );
17
+ updateConfigColumns(viewModeParam, newConfig);
18
+ },
19
+ [id, onChangeUserColumns, updateConfigColumns]
20
+ );
21
+ return {
22
+ onChangeColumnsConfig
23
+ };
24
+ };
25
+ export {
26
+ useChangeColumnsConfig as u
27
+ };
@@ -0,0 +1 @@
1
+ export { useChangeColumnsOrder } from './useChangeColumnsOrder';
@@ -0,0 +1,10 @@
1
+ import { UseChangeColumnsOrderParams, UseChangeColumnsOrderReturn } from '../../types.hooks';
2
+ /**
3
+ * Hook para manejar el cambio de orden de columnas.
4
+ *
5
+ * Reordena las columnas y llama a onChangeColumnsConfig para persistir.
6
+ * @param getConfigColumns Función para obtener la configuración de columnas
7
+ * @param onChangeColumnsConfig Función para cambiar la configuración de columnas
8
+ * @returns Función para cambiar el orden de columnas
9
+ */
10
+ export declare const useChangeColumnsOrder: ({ getConfigColumns, onChangeColumnsConfig, }: UseChangeColumnsOrderParams) => UseChangeColumnsOrderReturn;
@@ -0,0 +1,34 @@
1
+ import { useCallback } from "react";
2
+ const useChangeColumnsOrder = ({
3
+ getConfigColumns,
4
+ onChangeColumnsConfig
5
+ }) => {
6
+ const onChangeColumnsOrder = useCallback(
7
+ (viewModeParam, sourceKey, targetKey) => {
8
+ if (sourceKey === targetKey) {
9
+ return;
10
+ }
11
+ const currentConfig = getConfigColumns(viewModeParam);
12
+ const sourceColumnIndex = currentConfig.findIndex(
13
+ (c) => c.key === sourceKey
14
+ );
15
+ const targetColumnIndex = currentConfig.findIndex(
16
+ (c) => c.key === targetKey
17
+ );
18
+ const reorderedConfig = [...currentConfig];
19
+ reorderedConfig.splice(
20
+ targetColumnIndex,
21
+ 0,
22
+ reorderedConfig.splice(sourceColumnIndex, 1)[0]
23
+ );
24
+ onChangeColumnsConfig(viewModeParam, reorderedConfig);
25
+ },
26
+ [getConfigColumns, onChangeColumnsConfig]
27
+ );
28
+ return {
29
+ onChangeColumnsOrder
30
+ };
31
+ };
32
+ export {
33
+ useChangeColumnsOrder as u
34
+ };
@@ -0,0 +1 @@
1
+ export { useColumnsWidth } from './useColumnsWidth';
@@ -0,0 +1,11 @@
1
+ import { UseColumnsWidthParams, UseColumnsWidthReturn } from '../../types.hooks';
2
+ /**
3
+ * Hook para manejar el estado del ancho de las columnas del DataGrid.
4
+ *
5
+ * Maneja:
6
+ * - Estado del ancho de cada columna
7
+ * - Guardado con debounce de 500ms al cambiar el ancho
8
+ * @param params - Parámetros del hook
9
+ * @returns Estado y función para cambiar el ancho de columnas
10
+ */
11
+ export declare const useColumnsWidth: ({ id, onChangeUserColumns, }: UseColumnsWidthParams) => UseColumnsWidthReturn;
@@ -0,0 +1,29 @@
1
+ import { useState, useRef, useCallback } from "react";
2
+ import { s as saveColumnsWidth } from "../../helpers/saveColumnsWidth/saveColumnsWidth.js";
3
+ const useColumnsWidth = ({
4
+ id,
5
+ onChangeUserColumns
6
+ }) => {
7
+ const [columnsWidths, setColumnsWidths] = useState(/* @__PURE__ */ new Map());
8
+ const timerRef = useRef(null);
9
+ const onChangeColumnWidth = useCallback(
10
+ (columnKey, width) => {
11
+ columnsWidths.set(columnKey, Math.round(width));
12
+ if (timerRef.current) {
13
+ clearTimeout(timerRef.current);
14
+ }
15
+ timerRef.current = setTimeout(() => {
16
+ saveColumnsWidth(id, columnsWidths, onChangeUserColumns);
17
+ }, 500);
18
+ },
19
+ [id, columnsWidths, onChangeUserColumns]
20
+ );
21
+ return {
22
+ columnsWidths,
23
+ setColumnsWidths,
24
+ onChangeColumnWidth
25
+ };
26
+ };
27
+ export {
28
+ useColumnsWidth as u
29
+ };
@@ -0,0 +1 @@
1
+ export { useRowHeight } from './useRowHeight';
@@ -0,0 +1,28 @@
1
+ import { UseRowHeightParams, UseRowHeightReturn } from '../../types.hooks';
2
+ /**
3
+ * Hook para manejar el estado de la altura de las filas del DataGrid.
4
+ *
5
+ * Soporta dos modos:
6
+ * - **Modo fijo**: rowHeights y rowHeaderHeights son números fijos
7
+ * - **Modo variable**: rowHeights y rowHeaderHeights son arrays de 3 elementos [compact, standard, confortable]
8
+ * @param params - Parámetros del hook
9
+ * @returns Estado actual y función para cambiar el variant
10
+ * @throws Error si rowHeights y rowHeaderHeights no son del mismo tipo
11
+ * @throws Error si los arrays no tienen exactamente 3 elementos
12
+ * @throws Error si se intenta cambiar el variant en modo fijo
13
+ * @example
14
+ * // Modo variable (permite cambiar variant)
15
+ * const { currentRowHeightVariant, setRowHeightVariant } = useRowHeight({
16
+ * rowHeights: [32, 40, 48],
17
+ * rowHeaderHeights: [36, 44, 52],
18
+ * initialRowHeightVariant: 'standard',
19
+ * });
20
+ *
21
+ * // Modo fijo (altura constante)
22
+ * const { currentRowHeightVariant } = useRowHeight({
23
+ * rowHeights: 40,
24
+ * rowHeaderHeights: 44,
25
+ * initialRowHeightVariant: 'standard',
26
+ * });
27
+ */
28
+ export declare const useRowHeight: ({ rowHeights, rowHeaderHeights, initialRowHeightVariant, }: UseRowHeightParams) => UseRowHeightReturn;
@@ -0,0 +1,51 @@
1
+ import { useState, useCallback } from "react";
2
+ import { g as getIndexRowHeightVariant } from "../../helpers/getIndexRowHeightVariant/getIndexRowHeightVariant.js";
3
+ const useRowHeight = ({
4
+ rowHeights,
5
+ rowHeaderHeights,
6
+ initialRowHeightVariant
7
+ }) => {
8
+ const [currentRowHeightVariant, setCurrentRowHeightVariant] = useState(() => {
9
+ if (typeof rowHeights !== typeof rowHeaderHeights) {
10
+ throw new Error("Must be same type rowheights and rowHeaderTypes");
11
+ }
12
+ if (typeof rowHeights === "number" && typeof rowHeaderHeights === "number") {
13
+ return {
14
+ rowHVariant: "compact",
15
+ rowHeight: rowHeights,
16
+ rowHeaderHeight: rowHeaderHeights
17
+ };
18
+ }
19
+ if (typeof rowHeights !== "number" && rowHeights.length !== 3) {
20
+ throw new Error("Must be 3 heights");
21
+ }
22
+ if (typeof rowHeaderHeights !== "number" && rowHeaderHeights.length !== 3) {
23
+ throw new Error("Must be 3 HeaderHeights");
24
+ }
25
+ return {
26
+ rowHVariant: initialRowHeightVariant,
27
+ rowHeight: typeof rowHeights !== "number" ? rowHeights[getIndexRowHeightVariant(initialRowHeightVariant)] : rowHeights,
28
+ rowHeaderHeight: typeof rowHeaderHeights !== "number" ? rowHeaderHeights[getIndexRowHeightVariant(initialRowHeightVariant)] : rowHeaderHeights
29
+ };
30
+ });
31
+ const setRowHeightVariant = useCallback(
32
+ (newVariant) => {
33
+ if (typeof rowHeights === "number" || typeof rowHeaderHeights === "number") {
34
+ throw new Error("Only use setCurrentRowHeight with vector rowHeights");
35
+ }
36
+ setCurrentRowHeightVariant({
37
+ rowHVariant: newVariant,
38
+ rowHeight: rowHeights[getIndexRowHeightVariant(newVariant)],
39
+ rowHeaderHeight: rowHeaderHeights[getIndexRowHeightVariant(newVariant)]
40
+ });
41
+ },
42
+ [rowHeights, rowHeaderHeights]
43
+ );
44
+ return {
45
+ currentRowHeightVariant,
46
+ setRowHeightVariant
47
+ };
48
+ };
49
+ export {
50
+ useRowHeight as u
51
+ };
@@ -0,0 +1 @@
1
+ export { useViewConfig } from './useViewConfig';
@@ -0,0 +1,9 @@
1
+ import { UseViewConfigReturn } from '../../types.hooks';
2
+ /**
3
+ * Hook para manejar el estado de la configuración de columnas por vista.
4
+ *
5
+ * Maneja un estado genérico unificado para las configuraciones de TODAS las vistas
6
+ * (table, cards, etc).
7
+ * @returns Estado y funciones para manejar la configuración de vistas
8
+ */
9
+ export declare const useViewConfig: () => UseViewConfigReturn;
@@ -0,0 +1,30 @@
1
+ import { useState, useCallback } from "react";
2
+ const useViewConfig = () => {
3
+ const [viewConfig, setViewConfig] = useState(() => ({
4
+ table: [],
5
+ cards: []
6
+ }));
7
+ const getConfigColumns = useCallback(
8
+ (viewModeParam) => {
9
+ return viewConfig[viewModeParam];
10
+ },
11
+ [viewConfig]
12
+ );
13
+ const updateConfigColumns = useCallback(
14
+ (viewModeParam, config) => {
15
+ setViewConfig((prev) => ({
16
+ ...prev,
17
+ [viewModeParam]: config
18
+ }));
19
+ },
20
+ []
21
+ );
22
+ return {
23
+ viewConfig,
24
+ getConfigColumns,
25
+ updateConfigColumns
26
+ };
27
+ };
28
+ export {
29
+ useViewConfig as u
30
+ };
@@ -0,0 +1 @@
1
+ export { useViewMode } from './useViewMode';
@@ -0,0 +1,44 @@
1
+ import { UseViewModeParams, UseViewModeReturn } from '../../types.hooks';
2
+ /**
3
+ * Hook para manejar el estado del modo de visualización (table/cards).
4
+ *
5
+ * ## Precedencia para determinar el viewMode inicial
6
+ *
7
+ * 1. `viewMode` prop - Modo controlado (el padre controla completamente el estado)
8
+ * 2. localStorage - Preferencia del usuario guardada previamente
9
+ * 3. `defaultViewMode` prop - Valor inicial establecido por el desarrollador
10
+ * 4. `useIsMobile()` - Fallback automático según el dispositivo:
11
+ * - Móvil: 'cards'
12
+ * - Escritorio: 'table'
13
+ *
14
+ * ## Persistencia del viewMode
15
+ *
16
+ * - Si `onChangeUserColumns` está definido → Guarda en backend (cookies de red)
17
+ * - Si no está definido → Fallback a localStorage
18
+ *
19
+ * ## Modo controlado vs no controlado
20
+ *
21
+ * - **Controlado**: Cuando se pasa `viewMode` prop, el padre controla el estado
22
+ * - **No controlado**: El hook maneja internamente el estado y persiste
23
+ * @param id - Identificador único del DataGrid
24
+ * @param viewMode - ViewMode controlado por el padre (opcional)
25
+ * @param defaultViewMode - ViewMode por defecto cuando no hay valor guardado (opcional)
26
+ * @param onViewModeChange - Callback cuando cambia el viewMode (opcional)
27
+ * @param onChangeUserColumns - Callback para guardar en backend (opcional)
28
+ * @returns viewModeState - Estado actual del viewMode
29
+ * @returns handleViewModeChange - Función para cambiar el viewMode
30
+ * @example
31
+ * // Con persistencia en backend
32
+ * const { viewModeState, handleViewModeChange } = useViewMode({
33
+ * id: 'my-grid',
34
+ * defaultViewMode: 'table',
35
+ * onChangeUserColumns, // Guarda en backend
36
+ * });
37
+ *
38
+ * // Sin backend (solo localStorage)
39
+ * const { viewModeState, handleViewModeChange } = useViewMode({
40
+ * id: 'my-grid',
41
+ * defaultViewMode: 'table',
42
+ * });
43
+ */
44
+ export declare const useViewMode: ({ id, viewMode, defaultViewMode, onViewModeChange, onChangeUserColumns, }: UseViewModeParams) => UseViewModeReturn;
@@ -0,0 +1,48 @@
1
+ import { useState, useCallback, useEffect } from "react";
2
+ import { useIsMobile } from "@m4l/graphics";
3
+ import { s as saveViewMode } from "../../helpers/saveViewMode/saveViewMode.js";
4
+ const useViewMode = ({
5
+ id,
6
+ viewMode,
7
+ defaultViewMode,
8
+ onViewModeChange,
9
+ onChangeUserColumns
10
+ }) => {
11
+ const isMobile = useIsMobile();
12
+ const [viewModeState, setViewModeState] = useState(() => {
13
+ if (viewMode) {
14
+ return viewMode;
15
+ }
16
+ try {
17
+ const savedViewMode = localStorage.getItem(`${id}_view_mode`);
18
+ if (savedViewMode === "cards" || savedViewMode === "table") {
19
+ return savedViewMode;
20
+ }
21
+ } catch (_e) {
22
+ }
23
+ if (defaultViewMode) {
24
+ return defaultViewMode;
25
+ }
26
+ return isMobile ? "cards" : "table";
27
+ });
28
+ const handleViewModeChange = useCallback(
29
+ (newViewMode) => {
30
+ setViewModeState(newViewMode);
31
+ saveViewMode(id, newViewMode, onChangeUserColumns);
32
+ onViewModeChange?.(newViewMode);
33
+ },
34
+ [id, onViewModeChange, onChangeUserColumns]
35
+ );
36
+ useEffect(() => {
37
+ if (viewMode !== void 0) {
38
+ setViewModeState(viewMode);
39
+ }
40
+ }, [viewMode]);
41
+ return {
42
+ viewModeState,
43
+ handleViewModeChange
44
+ };
45
+ };
46
+ export {
47
+ useViewMode as u
48
+ };
@@ -1,9 +1,10 @@
1
1
  export { DataGrid } from './DataGrid';
2
2
  export * from './formatters';
3
- export type { Column, RenderEditCellProps, RenderCellProps } from 'react-data-grid';
4
- export type { RowKey, ChangeUserColumn, RowActionsGetter, RowKeyGetter } from './types';
3
+ export type { Column, RenderEditCellProps, RenderCellProps, } from 'react-data-grid';
4
+ export type { RowKey, ChangeUserColumn, RowActionsGetter, RowKeyGetter, } from './types';
5
5
  export { getDataGridComponentsDictionary } from './dictionary';
6
6
  export { TextEditor, NumberEditor } from './subcomponents/editors/TextEditor';
7
7
  export { getDataGridRowsFromSet } from './utils/getDataGridRowsFromSet';
8
- export type { IGridConfig, IGridConfigExtended, BaseConfigColumn } from './contexts/DataGridContext/types';
9
- export { DATAGRID_SEMANTIC_WIDTHS, DATAGRID_ROW_HEADER_HEIGHTS, DATAGRID_ROW_HEIGHTS } from './constants';
8
+ export type { IGridConfigExtended, BaseConfigColumn, } from './contexts/DataGridContext/types';
9
+ export { DATAGRID_SEMANTIC_WIDTHS, DATAGRID_ROW_HEADER_HEIGHTS, DATAGRID_ROW_HEIGHTS, } from './constants';
10
+ export * from './types.helpers';
@@ -13,8 +13,8 @@ function scrollToCardElement(containerElement, rowKey, selectorType = "data-attr
13
13
  return;
14
14
  }
15
15
  foundElement.scrollIntoView({
16
- behavior: "auto",
17
- block: "center"
16
+ behavior: "smooth",
17
+ block: "end"
18
18
  });
19
19
  } catch (error) {
20
20
  console.error("scrollToCardElement: Error al hacer scroll", error);
@@ -21,6 +21,7 @@ function Cards(props) {
21
21
  onCheckedRowsChange
22
22
  } = props;
23
23
  const containerRef = useRef(null);
24
+ const hasScrolledToFocusRow = useRef(false);
24
25
  const processedColumns = useProcessedColumns(columns);
25
26
  const allProcessedColumns = useProcessedColumns(columns, {
26
27
  applyVisibilityFilter: false
@@ -31,13 +32,21 @@ function Cards(props) {
31
32
  onRowsChange
32
33
  });
33
34
  const cardHeight = useMemo(() => {
35
+ const imageHeight = processedColumns.reduce((totalHeight, col) => {
36
+ const formatterHeight = col.renderCell?.__imageFormatterHeight;
37
+ return formatterHeight ? totalHeight + formatterHeight : totalHeight;
38
+ }, 0);
34
39
  return calculateCardHeight({
35
40
  visibleColumnsCount: processedColumns.length,
36
41
  customMinHeight: cardsViewConfig?.customRender?.minHeight
37
- });
38
- }, [processedColumns.length, cardsViewConfig]);
42
+ }) + imageHeight;
43
+ }, [processedColumns, cardsViewConfig]);
39
44
  useEffect(() => {
40
45
  if (!focusOnRowKey) {
46
+ hasScrolledToFocusRow.current = false;
47
+ return;
48
+ }
49
+ if (hasScrolledToFocusRow.current) {
41
50
  return;
42
51
  }
43
52
  const rowIndex = rows.findIndex(
@@ -58,9 +67,13 @@ function Cards(props) {
58
67
  "data-attribute",
59
68
  "data-row-key"
60
69
  );
70
+ if (onSelectedRowsChange) {
71
+ onSelectedRowsChange(/* @__PURE__ */ new Set([focusOnRowKey]));
72
+ }
73
+ hasScrolledToFocusRow.current = true;
61
74
  }, 300);
62
75
  return () => clearTimeout(timer);
63
- }, [focusOnRowKey, rows, rowKeyGetter, cardHeight]);
76
+ }, [focusOnRowKey, rows, rowKeyGetter, cardHeight, onSelectedRowsChange]);
64
77
  if (processedColumns.length === 0) {
65
78
  return null;
66
79
  }
@@ -88,6 +88,7 @@ function CardRowComponent({
88
88
  },
89
89
  onClick: onCardClick,
90
90
  "data-testid": "data-grid-card",
91
+ "data-row-key": rowKeyGetter(row),
91
92
  children: content
92
93
  }
93
94
  )
@@ -68,6 +68,7 @@ function Table(props) {
68
68
  anchorEl: null,
69
69
  columnKey: null
70
70
  });
71
+ const hasScrolledToFocusRow = useRef(false);
71
72
  const [allowSortChange, setAllowSortChange] = useState(false);
72
73
  const handleSortColumnsChange = (newSortColumns) => {
73
74
  if (allowSortChange) {
@@ -113,6 +114,10 @@ function Table(props) {
113
114
  }, [finalRows]);
114
115
  useEffect(() => {
115
116
  if (!focusOnRowKey) {
117
+ hasScrolledToFocusRow.current = false;
118
+ return;
119
+ }
120
+ if (hasScrolledToFocusRow.current) {
116
121
  return;
117
122
  }
118
123
  const rowIndex = finalRows.findIndex(
@@ -120,8 +125,12 @@ function Table(props) {
120
125
  );
121
126
  if (rowIndex !== -1) {
122
127
  ref_data_grid.current?.scrollToCell({ rowIdx: rowIndex });
128
+ if (onSelectedRowsChange) {
129
+ onSelectedRowsChange(/* @__PURE__ */ new Set([focusOnRowKey]));
130
+ }
131
+ hasScrolledToFocusRow.current = true;
123
132
  }
124
- }, [focusOnRowKey, finalRows, rowKeyGetter]);
133
+ }, [focusOnRowKey, finalRows, rowKeyGetter, onSelectedRowsChange]);
125
134
  const onColumnResize = (idx, width) => {
126
135
  onChangeColumnWidth(finalColumns[idx].key, width);
127
136
  };
@@ -20,6 +20,12 @@ export interface SeedProps {
20
20
  withCesar?: boolean;
21
21
  withChipStatus?: boolean;
22
22
  withTags?: boolean;
23
+ withImage?: boolean;
24
+ withImageCustomSize?: {
25
+ width: number;
26
+ height: number;
27
+ };
28
+ withImageWithoutText?: boolean;
23
29
  withActions?: boolean;
24
30
  withActionsUser?: boolean;
25
31
  withBooleanStatus?: boolean;
@@ -69,6 +75,10 @@ export interface RowType {
69
75
  currentStatus: 'superadmin' | 'admin' | 'user';
70
76
  };
71
77
  color?: string;
78
+ image?: {
79
+ url: string;
80
+ text?: string;
81
+ };
72
82
  }
73
83
  interface RangesUncertainty {
74
84
  cmcMin: number;
@@ -0,0 +1,55 @@
1
+ import { RowKey } from './types';
2
+ import { BaseConfigColumn } from './contexts/DataGridContext/types';
3
+ /**
4
+ * Configuración base genérica que puede extenderse con propiedades específicas de cualquier vista.
5
+ *
6
+ * USO INTERNO: El sistema usa esto para manejar genéricamente las configuraciones
7
+ * de columnas sin importar el tipo de vista (table, cards, etc).
8
+ * @example
9
+ * // Para vista table
10
+ * BaseViewConfig<{ frozen: boolean }>
11
+ *
12
+ * // Para vista cards
13
+ * BaseViewConfig<{ showTitle: boolean }>
14
+ */
15
+ export type BaseViewConfig<TViewSpecific = object> = TViewSpecific & {
16
+ key: string;
17
+ visible: boolean;
18
+ index: number;
19
+ name?: string;
20
+ };
21
+ /**
22
+ *
23
+ *Este tipo define la estructura de configuración que el usuario puede
24
+ *pasar al DataGrid para personalizar columnas y sus anchos.
25
+ *
26
+ *- `columnsConfig`: Configuración de visibilidad y orden de columnas para vista table
27
+ *- `columnsWidths`: Anchos personalizados de columnas
28
+ * @example
29
+ * ```typescript
30
+ * const userConfig: IGridConfig = {
31
+ * columnsConfig: [
32
+ * { key: 'name', visible: true, index: 0, frozen: false },
33
+ * { key: 'email', visible: true, index: 1, frozen: false },
34
+ * ],
35
+ * columnsWidths: { name: 200, email: 300 }
36
+ * };
37
+ * ```
38
+ */
39
+ export interface IGridConfig {
40
+ /** Configuración de columnas para vista table (visibilidad, orden, frozen) */
41
+ columnsConfig: BaseConfigColumn[];
42
+ /** Anchos de columnas en píxeles */
43
+ columnsWidths: Record<RowKey, number>;
44
+ }
45
+ /**
46
+ * Configuración específica retornada por getViewSpecificConfig
47
+ */
48
+ export interface ViewSpecificConfig {
49
+ /** Valores por defecto para propiedades específicas de la vista */
50
+ defaults: Record<string, unknown>;
51
+ /** Valores originales por defecto para tracking de cambios */
52
+ originalDefaults: Record<string, unknown>;
53
+ /** Función para obtener propiedades originales dinámicas de un item */
54
+ dynamicOriginalProperty: (item: unknown) => Record<string, unknown>;
55
+ }