@m4l/components 9.3.24 → 9.3.25
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/@types/export.d.ts +6 -0
- package/@types/types.d.ts +26 -1
- package/components/DataGrid/DataGrid.js +6 -2
- package/components/DataGrid/Datagrid.styles.js +67 -18
- package/components/DataGrid/constants.d.ts +19 -0
- package/components/DataGrid/formatters/ColumnIconFormatter/formatter.d.ts +1 -2
- package/components/DataGrid/formatters/ColumnIconFormatter/formatter.js +3 -6
- package/components/DataGrid/formatters/ColumnIconFormatter/types.d.ts +2 -4
- package/components/DataGrid/formatters/ColumnSetCheckFormatter/formatter.js +7 -1
- package/components/DataGrid/formatters/ColumnSetCheckFormatter/types.d.ts +1 -0
- package/components/DataGrid/formatters/ColumnTagsFormatter/formatter.d.ts +8 -0
- package/components/DataGrid/formatters/ColumnTagsFormatter/formatter.js +16 -0
- package/components/DataGrid/formatters/ColumnTagsFormatter/index.d.ts +3 -0
- package/components/DataGrid/formatters/ColumnTagsFormatter/index.js +1 -0
- package/components/DataGrid/formatters/ColumnTagsFormatter/types.d.ts +4 -0
- package/components/DataGrid/formatters/ColumnTagsFormatter/useColumnTags.d.ts +9 -0
- package/components/DataGrid/formatters/ColumnTagsFormatter/useColumnTags.js +60 -0
- package/components/DataGrid/formatters/index.d.ts +1 -0
- package/components/DataGrid/hooks/useModalCardDetail.d.ts +2 -2
- package/components/DataGrid/hooks/useModalCardDetail.js +49 -48
- package/components/DataGrid/slots/DataGridEnum.d.ts +2 -0
- package/components/DataGrid/slots/DataGridEnum.js +2 -0
- package/components/DataGrid/slots/DataGridSlot.d.ts +3 -1
- package/components/DataGrid/slots/DataGridSlot.js +45 -37
- package/components/DataGrid/subcomponents/Cards/helpers/calculateCardHeight.d.ts +18 -0
- package/components/DataGrid/subcomponents/Cards/helpers/calculateCardHeight.js +10 -0
- package/components/DataGrid/subcomponents/Cards/helpers/scrollToCardElement.d.ts +9 -0
- package/components/DataGrid/subcomponents/Cards/helpers/scrollToCardElement.js +25 -0
- package/components/DataGrid/subcomponents/Cards/hooks/useCardContent.d.ts +1 -2
- package/components/DataGrid/subcomponents/Cards/hooks/useCardContent.js +62 -73
- package/components/DataGrid/subcomponents/Cards/index.js +71 -16
- package/components/DataGrid/subcomponents/Cards/subcomponents/CardDetails/index.js +36 -18
- package/components/DataGrid/subcomponents/Cards/subcomponents/CardHeader/index.d.ts +1 -1
- package/components/DataGrid/subcomponents/Cards/subcomponents/CardHeader/index.js +13 -20
- package/components/DataGrid/subcomponents/Cards/subcomponents/CardRow/index.d.ts +6 -1
- package/components/DataGrid/subcomponents/Cards/subcomponents/CardRow/index.js +67 -36
- package/components/DataGrid/subcomponents/Cards/subcomponents/IntersectCard/index.js +9 -2
- package/components/DataGrid/subcomponents/Cards/subcomponents/LazyLoadCard/index.js +4 -2
- package/components/DataGrid/subcomponents/Cards/types.d.ts +50 -1
- package/components/DataGrid/subcomponents/CheckboxCellAdapter/index.js +5 -2
- package/components/DataGrid/subcomponents/ControlNavigate/ControlNavigate.js +1 -1
- package/components/DataGrid/subcomponents/HeaderActions/index.js +1 -1
- package/components/DataGrid/subcomponents/HeaderActions/subcomponents/RowsCount/index.js +1 -1
- package/components/DataGrid/subcomponents/HeaderActions/subcomponents/Settings/subcomponents/ColumnsConfig/index.js +1 -1
- package/components/DataGrid/subcomponents/HeaderActions/subcomponents/Settings/subcomponents/ColumnsConfigCards/index.js +1 -1
- package/components/DataGrid/subcomponents/HeaderActions/subcomponents/ViewMode/index.js +1 -1
- package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettings/index.js +1 -1
- package/components/DataGrid/subcomponents/HeaderActions/subcomponents/hooks/useModalSettingsCards/index.js +1 -1
- package/components/DataGrid/subcomponents/Table/index.js +60 -41
- package/components/DataGrid/subcomponents/Table/subcomponents/CheckboxFormatter.js +16 -18
- package/components/DataGrid/subcomponents/Table/subcomponents/DraggableHeaderRenderer.js +3 -3
- package/components/DataGrid/subcomponents/Table/subcomponents/HeaderRenderClick/HeaderRenderClick.js +1 -1
- package/components/DataGrid/subcomponents/editors/TextEditor/index.js +1 -1
- package/components/DataGrid/tests/helpers/types.d.ts +3 -0
- package/components/DataGrid/types.d.ts +17 -2
- package/components/ObjectLogs/slots/ObjectLogsSlots.js +3 -5
- package/components/formatters/IconsFormatter/IconsFormatter.d.ts +6 -0
- package/components/formatters/IconsFormatter/IconsFormatter.js +22 -0
- package/components/formatters/IconsFormatter/IconsFormatter.styles.d.ts +2 -0
- package/components/formatters/IconsFormatter/IconsFormatter.styles.js +29 -0
- package/components/formatters/IconsFormatter/constants.d.ts +1 -0
- package/components/formatters/IconsFormatter/constants.js +4 -0
- package/components/{DataGrid/formatters/ColumnIconFormatter → formatters/IconsFormatter}/helpers/renderIcon.d.ts +2 -2
- package/components/formatters/IconsFormatter/helpers/renderIcon.js +24 -0
- package/components/formatters/IconsFormatter/helpers/renderMultipleIcons.d.ts +7 -0
- package/components/formatters/IconsFormatter/helpers/renderMultipleIcons.js +16 -0
- package/components/formatters/IconsFormatter/index.d.ts +3 -0
- package/components/formatters/IconsFormatter/index.js +1 -0
- package/components/formatters/IconsFormatter/slots/IconsFormatterEnum.d.ts +5 -0
- package/components/formatters/IconsFormatter/slots/IconsFormatterEnum.js +9 -0
- package/components/formatters/IconsFormatter/slots/IconsFormatterSlots.d.ts +9 -0
- package/components/formatters/IconsFormatter/slots/IconsFormatterSlots.js +22 -0
- package/components/formatters/IconsFormatter/types.d.ts +57 -0
- package/components/formatters/IconsFormatter/types.js +1 -0
- package/components/formatters/TagsFormatter/TagsFormatter.d.ts +5 -0
- package/components/formatters/TagsFormatter/TagsFormatter.js +28 -0
- package/components/formatters/TagsFormatter/TagsFormatter.styles.d.ts +2 -0
- package/components/formatters/TagsFormatter/TagsFormatter.styles.js +41 -0
- package/components/formatters/TagsFormatter/constants.d.ts +5 -0
- package/components/formatters/TagsFormatter/constants.js +11 -0
- package/components/formatters/TagsFormatter/helpers/renderMultipleTag.d.ts +8 -0
- package/components/formatters/TagsFormatter/helpers/renderMultipleTag.js +19 -0
- package/components/formatters/TagsFormatter/helpers/renderTag.d.ts +7 -0
- package/components/formatters/TagsFormatter/helpers/renderTag.js +9 -0
- package/components/formatters/TagsFormatter/helpers/validateHexColor.d.ts +8 -0
- package/components/formatters/TagsFormatter/helpers/validateHexColor.js +9 -0
- package/components/formatters/TagsFormatter/index.d.ts +2 -0
- package/components/formatters/TagsFormatter/index.js +1 -0
- package/components/formatters/TagsFormatter/slots/TagsFormatterEnum.d.ts +5 -0
- package/components/formatters/TagsFormatter/slots/TagsFormatterEnum.js +9 -0
- package/components/formatters/TagsFormatter/slots/TagsFormatterSlots.d.ts +6 -0
- package/components/formatters/TagsFormatter/slots/TagsFormatterSlots.js +16 -0
- package/components/formatters/TagsFormatter/subcomponents/Tag/Tag.d.ts +5 -0
- package/components/formatters/TagsFormatter/subcomponents/Tag/Tag.js +35 -0
- package/components/formatters/TagsFormatter/subcomponents/Tag/index.d.ts +1 -0
- package/components/formatters/TagsFormatter/subcomponents/Tag/index.js +1 -0
- package/components/formatters/TagsFormatter/types.d.ts +47 -0
- package/components/formatters/index.d.ts +6 -5
- package/contexts/ModalContext/index.js +5 -5
- package/index.js +62 -56
- package/package.json +1 -1
- package/components/DataGrid/formatters/ColumnIconFormatter/constants.js +0 -4
- package/components/DataGrid/formatters/ColumnIconFormatter/helpers/renderIcon.js +0 -58
- package/components/DataGrid/formatters/ColumnIconFormatter/helpers/renderMultipleIcons.d.ts +0 -7
- package/components/DataGrid/formatters/ColumnIconFormatter/helpers/renderMultipleIcons.js +0 -19
|
@@ -41,11 +41,11 @@ styled(IconButton, {
|
|
|
41
41
|
name: OBJECT_LOGS_KEY_COMPONENT,
|
|
42
42
|
slot: ObjectLogsSlots.iconButtonStyled
|
|
43
43
|
})(objectLogsStyles?.iconButtonStyled);
|
|
44
|
-
|
|
44
|
+
styled(Icon, {
|
|
45
45
|
name: OBJECT_LOGS_KEY_COMPONENT,
|
|
46
46
|
slot: ObjectLogsSlots.iconStyled
|
|
47
47
|
})(objectLogsStyles?.iconStyled);
|
|
48
|
-
|
|
48
|
+
styled(Icon, {
|
|
49
49
|
name: OBJECT_LOGS_KEY_COMPONENT,
|
|
50
50
|
slot: ObjectLogsSlots.iconClickeableStyled
|
|
51
51
|
})(objectLogsStyles?.iconClickeableStyled);
|
|
@@ -57,8 +57,6 @@ export {
|
|
|
57
57
|
ContainerWrapperStyled as C,
|
|
58
58
|
DetailDialogComponent as D,
|
|
59
59
|
GridWrapperStyled as G,
|
|
60
|
-
IconClickeableStyled as I,
|
|
61
60
|
StackStyled as S,
|
|
62
|
-
WindowBaseStyled as W
|
|
63
|
-
IconStyled as a
|
|
61
|
+
WindowBaseStyled as W
|
|
64
62
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { r as renderIcon } from "./helpers/renderIcon.js";
|
|
3
|
+
import { r as renderMultipleIcons } from "./helpers/renderMultipleIcons.js";
|
|
4
|
+
const IconsFormatter = (props) => {
|
|
5
|
+
const { icons } = props;
|
|
6
|
+
const iconsArray = useMemo(() => {
|
|
7
|
+
if (!icons) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
return Array.isArray(icons) ? icons : [icons];
|
|
11
|
+
}, [icons]);
|
|
12
|
+
if (!iconsArray || iconsArray.length === 0) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
if (iconsArray.length === 1) {
|
|
16
|
+
return renderIcon(iconsArray[0]);
|
|
17
|
+
}
|
|
18
|
+
return renderMultipleIcons(iconsArray);
|
|
19
|
+
};
|
|
20
|
+
export {
|
|
21
|
+
IconsFormatter as I
|
|
22
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const iconsFormatterStyles = {
|
|
2
|
+
/**
|
|
3
|
+
* Estilo del contenedor de array de iconos
|
|
4
|
+
*/
|
|
5
|
+
iconsContainer: ({ theme }) => ({
|
|
6
|
+
display: "flex",
|
|
7
|
+
alignItems: "center",
|
|
8
|
+
flexWrap: "wrap",
|
|
9
|
+
gap: theme.vars.size.baseSpacings.sp1,
|
|
10
|
+
maxHeight: "100%",
|
|
11
|
+
overflow: "hidden"
|
|
12
|
+
}),
|
|
13
|
+
/**
|
|
14
|
+
* Estilo del icono
|
|
15
|
+
*/
|
|
16
|
+
icon: () => ({
|
|
17
|
+
flexShrink: 0
|
|
18
|
+
}),
|
|
19
|
+
/**
|
|
20
|
+
* Estilo del icono clickeable
|
|
21
|
+
*/
|
|
22
|
+
iconClickeable: () => ({
|
|
23
|
+
cursor: "pointer",
|
|
24
|
+
flexShrink: 0
|
|
25
|
+
})
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
iconsFormatterStyles as i
|
|
29
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ICONS_FORMATTER_KEY_COMPONENT = "M4LIconsFormatter";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IconConfig } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Helper que renderiza un único icono
|
|
4
4
|
* @param iconConfig - Configuración del icono
|
|
5
5
|
* @param key - Clave opcional para listas
|
|
6
6
|
* @returns Componente de icono renderizado
|
|
7
7
|
*/
|
|
8
|
-
export declare function renderIcon(iconConfig:
|
|
8
|
+
export declare function renderIcon(iconConfig: IconConfig, key?: number): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { I as IconClickeableStyled, a as IconStyled } from "../slots/IconsFormatterSlots.js";
|
|
3
|
+
function renderIcon(iconConfig, key) {
|
|
4
|
+
const { iconUrl, onClick, tooltip, dataTestId, color, visible, size } = iconConfig;
|
|
5
|
+
if (visible === false) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const IconComponent = onClick ? IconClickeableStyled : IconStyled;
|
|
9
|
+
return /* @__PURE__ */ jsx(
|
|
10
|
+
IconComponent,
|
|
11
|
+
{
|
|
12
|
+
src: iconUrl,
|
|
13
|
+
onClick,
|
|
14
|
+
tooltipContent: tooltip,
|
|
15
|
+
instaceDataTestId: dataTestId,
|
|
16
|
+
color,
|
|
17
|
+
size
|
|
18
|
+
},
|
|
19
|
+
key
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
renderIcon as r
|
|
24
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IconConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Helper que renderiza múltiples iconos
|
|
4
|
+
* @param icons - Array de configuraciones de iconos
|
|
5
|
+
* @returns Componente contenedor con múltiples iconos
|
|
6
|
+
*/
|
|
7
|
+
export declare function renderMultipleIcons(icons: IconConfig[]): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { b as IconsContainerStyled } from "../slots/IconsFormatterSlots.js";
|
|
3
|
+
import { r as renderIcon } from "./renderIcon.js";
|
|
4
|
+
function renderMultipleIcons(icons) {
|
|
5
|
+
const visibleIcons = icons.filter((icon) => icon.visible !== false);
|
|
6
|
+
if (visibleIcons.length === 0) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
if (visibleIcons.length === 1) {
|
|
10
|
+
return renderIcon(visibleIcons[0]);
|
|
11
|
+
}
|
|
12
|
+
return /* @__PURE__ */ jsx(IconsContainerStyled, { children: visibleIcons.map((icon, index) => renderIcon(icon, index)) });
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
renderMultipleIcons as r
|
|
16
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var IconsFormatterSlots = /* @__PURE__ */ ((IconsFormatterSlots2) => {
|
|
2
|
+
IconsFormatterSlots2["iconsContainer"] = "iconsContainer";
|
|
3
|
+
IconsFormatterSlots2["icon"] = "icon";
|
|
4
|
+
IconsFormatterSlots2["iconClickeable"] = "iconClickeable";
|
|
5
|
+
return IconsFormatterSlots2;
|
|
6
|
+
})(IconsFormatterSlots || {});
|
|
7
|
+
export {
|
|
8
|
+
IconsFormatterSlots as I
|
|
9
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const IconsContainerStyled: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & Record<string, unknown> & {
|
|
2
|
+
ownerState?: any;
|
|
3
|
+
}, Pick<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('react').ClassAttributes<HTMLDivElement> | keyof import('react').HTMLAttributes<HTMLDivElement>>, {}>;
|
|
4
|
+
export declare const IconStyled: import('@emotion/styled').StyledComponent<Pick<import('../../../Icon').IconProps, keyof import('../../../Icon').IconProps> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & Record<string, unknown> & {
|
|
5
|
+
ownerState?: any;
|
|
6
|
+
}, {}, {}>;
|
|
7
|
+
export declare const IconClickeableStyled: import('@emotion/styled').StyledComponent<Pick<import('../../../Icon').IconProps, keyof import('../../../Icon').IconProps> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & Record<string, unknown> & {
|
|
8
|
+
ownerState?: any;
|
|
9
|
+
}, {}, {}>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { styled } from "@mui/material";
|
|
2
|
+
import { I as ICONS_FORMATTER_KEY_COMPONENT } from "../constants.js";
|
|
3
|
+
import { I as IconsFormatterSlots } from "./IconsFormatterEnum.js";
|
|
4
|
+
import { i as iconsFormatterStyles } from "../IconsFormatter.styles.js";
|
|
5
|
+
import { I as Icon } from "../../../Icon/Icon.js";
|
|
6
|
+
const IconsContainerStyled = styled("div", {
|
|
7
|
+
name: ICONS_FORMATTER_KEY_COMPONENT,
|
|
8
|
+
slot: IconsFormatterSlots.iconsContainer
|
|
9
|
+
})(iconsFormatterStyles.iconsContainer);
|
|
10
|
+
const IconStyled = styled(Icon, {
|
|
11
|
+
name: ICONS_FORMATTER_KEY_COMPONENT,
|
|
12
|
+
slot: IconsFormatterSlots.icon
|
|
13
|
+
})(iconsFormatterStyles.icon);
|
|
14
|
+
const IconClickeableStyled = styled(Icon, {
|
|
15
|
+
name: ICONS_FORMATTER_KEY_COMPONENT,
|
|
16
|
+
slot: IconsFormatterSlots.iconClickeable
|
|
17
|
+
})(iconsFormatterStyles.iconClickeable);
|
|
18
|
+
export {
|
|
19
|
+
IconClickeableStyled as I,
|
|
20
|
+
IconStyled as a,
|
|
21
|
+
IconsContainerStyled as b
|
|
22
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Theme } from '@mui/material';
|
|
2
|
+
import { DeepKeyOf } from '../../../utils/types';
|
|
3
|
+
import { Sizes } from '@m4l/styles';
|
|
4
|
+
import { IconsFormatterSlots } from './slots/IconsFormatterEnum';
|
|
5
|
+
import { M4LOverridesStyleRules } from '../../../@types/augmentations';
|
|
6
|
+
import { ICONS_FORMATTER_KEY_COMPONENT } from './constants';
|
|
7
|
+
export type IconColorDeep = DeepKeyOf<Theme['vars']['palette']> | string;
|
|
8
|
+
/**
|
|
9
|
+
* Configuración para un solo icono
|
|
10
|
+
*/
|
|
11
|
+
export interface IconConfig {
|
|
12
|
+
/**
|
|
13
|
+
* URL o ruta de la imagen del icono
|
|
14
|
+
*/
|
|
15
|
+
iconUrl: string;
|
|
16
|
+
/**
|
|
17
|
+
* Tooltip que se mostrará al pasar el cursor sobre el icono
|
|
18
|
+
*/
|
|
19
|
+
tooltip?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Función que se ejecuta al hacer clic en el icono
|
|
22
|
+
*/
|
|
23
|
+
onClick?: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* Data test id para testing
|
|
26
|
+
*/
|
|
27
|
+
dataTestId?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Controla la visibilidad del icono
|
|
30
|
+
*/
|
|
31
|
+
visible?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Color del icono
|
|
34
|
+
*/
|
|
35
|
+
color?: IconColorDeep;
|
|
36
|
+
/**
|
|
37
|
+
* Tamaño del icono
|
|
38
|
+
*/
|
|
39
|
+
size?: Extract<Sizes, 'small' | 'medium'>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Props para el IconsFormatter
|
|
43
|
+
*/
|
|
44
|
+
export interface IconsFormatterProps {
|
|
45
|
+
/**
|
|
46
|
+
* Array de configuraciones de iconos (puede ser uno o varios)
|
|
47
|
+
*/
|
|
48
|
+
icons: IconConfig | IconConfig[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Tipos de slots disponibles para el TagFormatter
|
|
52
|
+
*/
|
|
53
|
+
export type IconsFormatterSlotsType = IconsFormatterSlots;
|
|
54
|
+
/**
|
|
55
|
+
* Estilos aplicables al TagFormatter
|
|
56
|
+
*/
|
|
57
|
+
export type IconsFormatterStyles = M4LOverridesStyleRules<IconsFormatterSlotsType, typeof ICONS_FORMATTER_KEY_COMPONENT, Theme>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { r as renderTag } from "./helpers/renderTag.js";
|
|
3
|
+
import { r as renderMultipleTags } from "./helpers/renderMultipleTag.js";
|
|
4
|
+
import { u as useComponentSize } from "../../../hooks/useComponentSize/useComponentSize.js";
|
|
5
|
+
const TagsFormatter = (props) => {
|
|
6
|
+
const { tags, className, size } = props;
|
|
7
|
+
const { currentSize } = useComponentSize(size);
|
|
8
|
+
const tagsArray = useMemo(() => {
|
|
9
|
+
if (!tags) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return Array.isArray(tags) ? tags : [tags];
|
|
13
|
+
}, [tags]);
|
|
14
|
+
if (!tagsArray || tagsArray.length === 0) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (tagsArray.length === 1) {
|
|
18
|
+
return renderTag({
|
|
19
|
+
tag: tagsArray[0],
|
|
20
|
+
size: currentSize,
|
|
21
|
+
className
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return renderMultipleTags(tagsArray, currentSize, className);
|
|
25
|
+
};
|
|
26
|
+
export {
|
|
27
|
+
TagsFormatter as T
|
|
28
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { g as getSizeStyles } from "../../../utils/getSizeStyles/getSizeStyles.js";
|
|
2
|
+
import { getContrastTextColor } from "@m4l/graphics";
|
|
3
|
+
const tagsFormatterStyles = {
|
|
4
|
+
/**
|
|
5
|
+
* Contenedor de multiple tags
|
|
6
|
+
*/
|
|
7
|
+
tagsContainer: ({ theme }) => ({
|
|
8
|
+
display: "flex",
|
|
9
|
+
flexWrap: "wrap",
|
|
10
|
+
gap: theme.vars.size.baseSpacings.sp1,
|
|
11
|
+
maxHeight: "100%",
|
|
12
|
+
overflow: "hidden"
|
|
13
|
+
}),
|
|
14
|
+
/**
|
|
15
|
+
* Estilos del tag individual
|
|
16
|
+
*/
|
|
17
|
+
tag: ({ theme, ownerState }) => {
|
|
18
|
+
const backgroundColor = ownerState?.backgroundColor || "#000000";
|
|
19
|
+
const textColor = getContrastTextColor(backgroundColor);
|
|
20
|
+
return {
|
|
21
|
+
display: "inline-block",
|
|
22
|
+
paddingLeft: theme.vars.size.baseSpacings.sp2,
|
|
23
|
+
paddingRight: theme.vars.size.baseSpacings.sp2,
|
|
24
|
+
borderRadius: theme.vars.size.borderRadius.r1,
|
|
25
|
+
cursor: "default",
|
|
26
|
+
maxWidth: "200px",
|
|
27
|
+
whiteSpace: "nowrap",
|
|
28
|
+
overflowY: "hidden",
|
|
29
|
+
overflowX: "auto",
|
|
30
|
+
verticalAlign: "middle",
|
|
31
|
+
...getSizeStyles(theme, ownerState?.size || "medium", "base"),
|
|
32
|
+
...theme.typography.body,
|
|
33
|
+
lineHeight: getSizeStyles(theme, ownerState?.size || "medium", "base").height,
|
|
34
|
+
backgroundColor,
|
|
35
|
+
color: textColor
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
tagsFormatterStyles as t
|
|
41
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { g as getComponentClasses } from "../../../utils/getComponentSlotRoot.js";
|
|
2
|
+
import { T as TagsFormatterSlots } from "./slots/TagsFormatterEnum.js";
|
|
3
|
+
const TAGS_FORMATTER_KEY_COMPONENT = "M4LTagsFormatter";
|
|
4
|
+
const TAGS_FORMATTER_CLASSES = getComponentClasses(
|
|
5
|
+
TAGS_FORMATTER_KEY_COMPONENT,
|
|
6
|
+
TagsFormatterSlots
|
|
7
|
+
);
|
|
8
|
+
export {
|
|
9
|
+
TAGS_FORMATTER_KEY_COMPONENT as T,
|
|
10
|
+
TAGS_FORMATTER_CLASSES as a
|
|
11
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TagConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Helper que renderiza múltiples tags
|
|
4
|
+
* @param tags - Array de tags
|
|
5
|
+
* @param size - Tamaño de los chips
|
|
6
|
+
* @returns Array de componentes de tags renderizados
|
|
7
|
+
*/
|
|
8
|
+
export declare const renderMultipleTags: (tags: TagConfig[], size: "small" | "medium", className?: string) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { T as TagsContainerStyled } from "../slots/TagsFormatterSlots.js";
|
|
3
|
+
import { r as renderTag } from "./renderTag.js";
|
|
4
|
+
const renderMultipleTags = (tags, size, className) => {
|
|
5
|
+
return /* @__PURE__ */ jsx(TagsContainerStyled, { children: tags.map((tag, index) => {
|
|
6
|
+
const tagWithKey = {
|
|
7
|
+
...tag,
|
|
8
|
+
key: tag.key || `${tag.label}-${index}`
|
|
9
|
+
};
|
|
10
|
+
return renderTag({
|
|
11
|
+
tag: tagWithKey,
|
|
12
|
+
size,
|
|
13
|
+
className
|
|
14
|
+
});
|
|
15
|
+
}) });
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
renderMultipleTags as r
|
|
19
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { T as Tag } from "../subcomponents/Tag/Tag.js";
|
|
3
|
+
const renderTag = (props) => {
|
|
4
|
+
const { tag, size, className } = props;
|
|
5
|
+
return /* @__PURE__ */ jsx(Tag, { ...tag, size, className });
|
|
6
|
+
};
|
|
7
|
+
export {
|
|
8
|
+
renderTag as r
|
|
9
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Valida que un color sea hexadecimal válido
|
|
3
|
+
* - Debe existir
|
|
4
|
+
* - Debe empezar con #
|
|
5
|
+
* @param backgroundColor - Color a validar
|
|
6
|
+
* @returns true si el color es válido, false en caso contrario
|
|
7
|
+
*/
|
|
8
|
+
export declare const validateHexColor: (backgroundColor: string) => boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var TagsFormatterSlots = /* @__PURE__ */ ((TagsFormatterSlots2) => {
|
|
2
|
+
TagsFormatterSlots2["root"] = "root";
|
|
3
|
+
TagsFormatterSlots2["tagsContainer"] = "tagsContainer";
|
|
4
|
+
TagsFormatterSlots2["tag"] = "tag";
|
|
5
|
+
return TagsFormatterSlots2;
|
|
6
|
+
})(TagsFormatterSlots || {});
|
|
7
|
+
export {
|
|
8
|
+
TagsFormatterSlots as T
|
|
9
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const TagsContainerStyled: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & Record<string, unknown> & {
|
|
2
|
+
ownerState?: any;
|
|
3
|
+
}, Pick<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('react').ClassAttributes<HTMLDivElement> | keyof import('react').HTMLAttributes<HTMLDivElement>>, {}>;
|
|
4
|
+
export declare const TagStyled: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme> & Record<string, unknown> & {
|
|
5
|
+
ownerState?: any;
|
|
6
|
+
}, Pick<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('react').ClassAttributes<HTMLDivElement> | keyof import('react').HTMLAttributes<HTMLDivElement>>, {}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { styled } from "@mui/material";
|
|
2
|
+
import { T as TAGS_FORMATTER_KEY_COMPONENT } from "../constants.js";
|
|
3
|
+
import { T as TagsFormatterSlots } from "./TagsFormatterEnum.js";
|
|
4
|
+
import { t as tagsFormatterStyles } from "../TagsFormatter.styles.js";
|
|
5
|
+
const TagsContainerStyled = styled("div", {
|
|
6
|
+
name: TAGS_FORMATTER_KEY_COMPONENT,
|
|
7
|
+
slot: TagsFormatterSlots.tagsContainer
|
|
8
|
+
})(tagsFormatterStyles.tagsContainer);
|
|
9
|
+
const TagStyled = styled("div", {
|
|
10
|
+
name: TAGS_FORMATTER_KEY_COMPONENT,
|
|
11
|
+
slot: TagsFormatterSlots.tag
|
|
12
|
+
})(tagsFormatterStyles.tag);
|
|
13
|
+
export {
|
|
14
|
+
TagsContainerStyled as T,
|
|
15
|
+
TagStyled as a
|
|
16
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { v as validateHexColor } from "../../helpers/validateHexColor.js";
|
|
4
|
+
import { a as TagStyled } from "../../slots/TagsFormatterSlots.js";
|
|
5
|
+
import clsx from "clsx";
|
|
6
|
+
import { a as TAGS_FORMATTER_CLASSES } from "../../constants.js";
|
|
7
|
+
import { u as useComponentSize } from "../../../../../hooks/useComponentSize/useComponentSize.js";
|
|
8
|
+
const Tag = (props) => {
|
|
9
|
+
const { label, backgroundColor, size, className } = props;
|
|
10
|
+
const { currentSize } = useComponentSize(size);
|
|
11
|
+
const ownerState = useMemo(
|
|
12
|
+
() => ({
|
|
13
|
+
size: currentSize,
|
|
14
|
+
backgroundColor
|
|
15
|
+
}),
|
|
16
|
+
[currentSize, backgroundColor]
|
|
17
|
+
);
|
|
18
|
+
if (!validateHexColor(backgroundColor)) {
|
|
19
|
+
console.error(
|
|
20
|
+
`backgroundColor no válido: "${backgroundColor}". backgroundColor debe ser un color hexadecimal.`
|
|
21
|
+
);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return /* @__PURE__ */ jsx(
|
|
25
|
+
TagStyled,
|
|
26
|
+
{
|
|
27
|
+
ownerState,
|
|
28
|
+
className: clsx(className, TAGS_FORMATTER_CLASSES.root),
|
|
29
|
+
children: label
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
Tag as T
|
|
35
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Tag } from './Tag';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Maybe } from '@m4l/core';
|
|
2
|
+
import { Sizes } from '@m4l/styles';
|
|
3
|
+
import { M4LOverridesStyleRules } from '../../../@types/augmentations';
|
|
4
|
+
import { Theme } from '@mui/material';
|
|
5
|
+
import { TAGS_FORMATTER_KEY_COMPONENT } from './constants';
|
|
6
|
+
import { TagsFormatterSlots } from './slots/TagsFormatterEnum';
|
|
7
|
+
/**
|
|
8
|
+
* Props de configuración de un tag
|
|
9
|
+
*/
|
|
10
|
+
export interface TagConfig {
|
|
11
|
+
key?: number | string;
|
|
12
|
+
label: string;
|
|
13
|
+
backgroundColor: string;
|
|
14
|
+
size?: Extract<Sizes, 'small' | 'medium'>;
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Props del TagFormatter
|
|
19
|
+
*/
|
|
20
|
+
export interface TagsFormatterProps {
|
|
21
|
+
tags: Maybe<TagConfig | TagConfig[]>;
|
|
22
|
+
className?: string;
|
|
23
|
+
dataTestId?: string;
|
|
24
|
+
size?: Extract<Sizes, 'small' | 'medium'>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Props del renderTag
|
|
28
|
+
*/
|
|
29
|
+
export interface RenderTagProps {
|
|
30
|
+
tag: TagConfig;
|
|
31
|
+
size?: Extract<Sizes, 'small' | 'medium'>;
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Owner state del TagFormatter
|
|
36
|
+
*/
|
|
37
|
+
export interface TagFormatterOwnerState extends Pick<TagConfig, 'size'> {
|
|
38
|
+
backgroundColor?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Tipos de slots disponibles para el TagFormatter
|
|
42
|
+
*/
|
|
43
|
+
export type TagsFormatterSlotsType = TagsFormatterSlots;
|
|
44
|
+
/**
|
|
45
|
+
* Estilos aplicables al TagFormatter
|
|
46
|
+
*/
|
|
47
|
+
export type TagsFormatterStyles = M4LOverridesStyleRules<TagsFormatterSlotsType, typeof TAGS_FORMATTER_KEY_COMPONENT, Theme>;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { BooleanFormatter } from './BooleanFormatter/BooleanFormatter';
|
|
2
2
|
export * from './ChipStatusFormatter';
|
|
3
3
|
export { getFormatDate, DateFormatter } from './DateFormatter/DateFormatter';
|
|
4
|
-
export { UncertaintyFormatter, getUncertaintyFormat } from './UncertaintyFormatter/UncertaintyFormatter';
|
|
5
|
-
export { PointsFormatter, getFormatPoints } from './PointsFormatter/PointsFormatter';
|
|
6
|
-
export { getFormatConcatenated, ConcatenatedFormatter } from './ConcatenatedFormatter/ConcatenatedFormatter';
|
|
7
|
-
export { useFormatPeriod, PeriodFormatter } from './PeriodFormatter/PeriodFormatter';
|
|
8
|
-
export { PriceFormatter, getFormatPrice } from './PriceFormatter/PriceFormatter';
|
|
4
|
+
export { UncertaintyFormatter, getUncertaintyFormat, } from './UncertaintyFormatter/UncertaintyFormatter';
|
|
5
|
+
export { PointsFormatter, getFormatPoints, } from './PointsFormatter/PointsFormatter';
|
|
6
|
+
export { getFormatConcatenated, ConcatenatedFormatter, } from './ConcatenatedFormatter/ConcatenatedFormatter';
|
|
7
|
+
export { useFormatPeriod, PeriodFormatter, } from './PeriodFormatter/PeriodFormatter';
|
|
8
|
+
export { PriceFormatter, getFormatPrice, } from './PriceFormatter/PriceFormatter';
|
|
9
9
|
export * from './DistanceToNowFormatter';
|
|
10
10
|
export type { UncertaintyRange } from './UncertaintyFormatter/types';
|
|
11
|
+
export { TagsFormatter } from './TagsFormatter';
|