flysoft-react-ui 0.5.0 → 0.5.2

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 (162) hide show
  1. package/dist/App.d.ts.map +1 -1
  2. package/dist/App.js +16 -3
  3. package/dist/components/form-controls/AutocompleteInput.d.ts +11 -3
  4. package/dist/components/form-controls/AutocompleteInput.d.ts.map +1 -1
  5. package/dist/components/form-controls/AutocompleteInput.js +410 -31
  6. package/dist/components/form-controls/Button.js +1 -1
  7. package/dist/components/form-controls/Checkbox.d.ts +14 -0
  8. package/dist/components/form-controls/Checkbox.d.ts.map +1 -0
  9. package/dist/components/form-controls/Checkbox.js +77 -0
  10. package/dist/components/form-controls/DateInput.d.ts +20 -4
  11. package/dist/components/form-controls/DateInput.d.ts.map +1 -1
  12. package/dist/components/form-controls/DateInput.js +425 -70
  13. package/dist/components/form-controls/DatePicker.d.ts +4 -3
  14. package/dist/components/form-controls/DatePicker.d.ts.map +1 -1
  15. package/dist/components/form-controls/DatePicker.js +26 -30
  16. package/dist/components/form-controls/Input.d.ts +10 -1
  17. package/dist/components/form-controls/Input.d.ts.map +1 -1
  18. package/dist/components/form-controls/Input.js +16 -10
  19. package/dist/components/form-controls/Pagination.d.ts +1 -0
  20. package/dist/components/form-controls/Pagination.d.ts.map +1 -1
  21. package/dist/components/form-controls/Pagination.js +3 -40
  22. package/dist/components/form-controls/RadioButtonGroup.d.ts +62 -0
  23. package/dist/components/form-controls/RadioButtonGroup.d.ts.map +1 -0
  24. package/dist/components/form-controls/RadioButtonGroup.js +220 -0
  25. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts +68 -0
  26. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts.map +1 -0
  27. package/dist/components/form-controls/SearchSelectInput-OLD.js +962 -0
  28. package/dist/components/form-controls/SearchSelectInput.d.ts +70 -0
  29. package/dist/components/form-controls/SearchSelectInput.d.ts.map +1 -0
  30. package/dist/components/form-controls/SearchSelectInput.js +335 -0
  31. package/dist/components/form-controls/index.d.ts +7 -1
  32. package/dist/components/form-controls/index.d.ts.map +1 -1
  33. package/dist/components/form-controls/index.js +3 -0
  34. package/dist/components/layout/AppLayout.d.ts +3 -2
  35. package/dist/components/layout/AppLayout.d.ts.map +1 -1
  36. package/dist/components/layout/AppLayout.js +104 -31
  37. package/dist/components/layout/Collection.js +1 -1
  38. package/dist/components/layout/DataTable.d.ts +3 -1
  39. package/dist/components/layout/DataTable.d.ts.map +1 -1
  40. package/dist/components/layout/DataTable.js +34 -29
  41. package/dist/components/utils/Avatar.d.ts +49 -0
  42. package/dist/components/utils/Avatar.d.ts.map +1 -0
  43. package/dist/components/utils/Avatar.js +93 -0
  44. package/dist/components/utils/Badge.d.ts +3 -0
  45. package/dist/components/utils/Badge.d.ts.map +1 -1
  46. package/dist/components/utils/Badge.js +130 -26
  47. package/dist/components/utils/Dialog.d.ts.map +1 -1
  48. package/dist/components/utils/Dialog.js +5 -1
  49. package/dist/components/utils/Filter.d.ts +57 -0
  50. package/dist/components/utils/Filter.d.ts.map +1 -0
  51. package/dist/components/utils/Filter.js +580 -0
  52. package/dist/components/utils/FiltersDialog.d.ts +21 -0
  53. package/dist/components/utils/FiltersDialog.d.ts.map +1 -0
  54. package/dist/components/utils/FiltersDialog.js +104 -0
  55. package/dist/components/utils/Loader.js +1 -1
  56. package/dist/components/utils/RoadMap.d.ts +59 -0
  57. package/dist/components/utils/RoadMap.d.ts.map +1 -0
  58. package/dist/components/utils/RoadMap.js +138 -0
  59. package/dist/components/utils/Snackbar.d.ts +13 -0
  60. package/dist/components/utils/Snackbar.d.ts.map +1 -0
  61. package/dist/components/utils/Snackbar.js +121 -0
  62. package/dist/components/utils/SnackbarContainer.d.ts +7 -0
  63. package/dist/components/utils/SnackbarContainer.d.ts.map +1 -0
  64. package/dist/components/utils/SnackbarContainer.js +25 -0
  65. package/dist/components/utils/index.d.ts +12 -0
  66. package/dist/components/utils/index.d.ts.map +1 -1
  67. package/dist/components/utils/index.js +6 -0
  68. package/dist/contexts/AppLayoutContext.d.ts +40 -0
  69. package/dist/contexts/AppLayoutContext.d.ts.map +1 -0
  70. package/dist/contexts/AppLayoutContext.js +98 -0
  71. package/dist/contexts/ListCrudContext.d.ts +29 -0
  72. package/dist/contexts/ListCrudContext.d.ts.map +1 -0
  73. package/dist/contexts/ListCrudContext.js +209 -0
  74. package/dist/contexts/SnackbarContext.d.ts +26 -0
  75. package/dist/contexts/SnackbarContext.d.ts.map +1 -0
  76. package/dist/contexts/SnackbarContext.js +34 -0
  77. package/dist/contexts/index.d.ts +6 -0
  78. package/dist/contexts/index.d.ts.map +1 -1
  79. package/dist/contexts/index.js +6 -0
  80. package/dist/contexts/presets.js +6 -6
  81. package/dist/docs/AvatarDocs.d.ts +4 -0
  82. package/dist/docs/AvatarDocs.d.ts.map +1 -0
  83. package/dist/docs/AvatarDocs.js +7 -0
  84. package/dist/docs/BadgeDocs.d.ts.map +1 -1
  85. package/dist/docs/BadgeDocs.js +4 -2
  86. package/dist/docs/CheckboxDocs.d.ts +4 -0
  87. package/dist/docs/CheckboxDocs.d.ts.map +1 -0
  88. package/dist/docs/CheckboxDocs.js +7 -0
  89. package/dist/docs/DataTableDocs.d.ts.map +1 -1
  90. package/dist/docs/DataTableDocs.js +6 -2
  91. package/dist/docs/DateInputDocs.d.ts +1 -0
  92. package/dist/docs/DateInputDocs.d.ts.map +1 -1
  93. package/dist/docs/DateInputDocs.js +7 -9
  94. package/dist/docs/DatePickerDocs.d.ts +1 -0
  95. package/dist/docs/DatePickerDocs.d.ts.map +1 -1
  96. package/dist/docs/DatePickerDocs.js +6 -8
  97. package/dist/docs/DocAdmin.d.ts +4 -0
  98. package/dist/docs/DocAdmin.d.ts.map +1 -0
  99. package/dist/docs/DocAdmin.js +68 -0
  100. package/dist/docs/DocsMenu.d.ts.map +1 -1
  101. package/dist/docs/DocsMenu.js +1 -1
  102. package/dist/docs/DocsRouter.d.ts.map +1 -1
  103. package/dist/docs/DocsRouter.js +11 -1
  104. package/dist/docs/ExampleFormDocs.d.ts +4 -0
  105. package/dist/docs/ExampleFormDocs.d.ts.map +1 -0
  106. package/dist/docs/ExampleFormDocs.js +148 -0
  107. package/dist/docs/FilterDocs.d.ts +4 -0
  108. package/dist/docs/FilterDocs.d.ts.map +1 -0
  109. package/dist/docs/FilterDocs.js +112 -0
  110. package/dist/docs/InputDocs.d.ts.map +1 -1
  111. package/dist/docs/InputDocs.js +11 -1
  112. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts +11 -0
  113. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts.map +1 -0
  114. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.js +25 -0
  115. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts +2 -0
  116. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts.map +1 -0
  117. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.js +51 -0
  118. package/dist/docs/PaginationDocs.js +6 -6
  119. package/dist/docs/RadioButtonGroupDocs.d.ts +4 -0
  120. package/dist/docs/RadioButtonGroupDocs.d.ts.map +1 -0
  121. package/dist/docs/RadioButtonGroupDocs.js +46 -0
  122. package/dist/docs/RoadMapDocs.d.ts +4 -0
  123. package/dist/docs/RoadMapDocs.d.ts.map +1 -0
  124. package/dist/docs/RoadMapDocs.js +171 -0
  125. package/dist/docs/SearchSelectInputDocs.d.ts +4 -0
  126. package/dist/docs/SearchSelectInputDocs.d.ts.map +1 -0
  127. package/dist/docs/SearchSelectInputDocs.js +168 -0
  128. package/dist/docs/SnackbarDocs.d.ts +4 -0
  129. package/dist/docs/SnackbarDocs.d.ts.map +1 -0
  130. package/dist/docs/SnackbarDocs.js +50 -0
  131. package/dist/docs/TabsGroupDocs.d.ts.map +1 -1
  132. package/dist/docs/TabsGroupDocs.js +12 -1
  133. package/dist/docs/docMockServices/empresaService.d.ts +38 -0
  134. package/dist/docs/docMockServices/empresaService.d.ts.map +1 -0
  135. package/dist/docs/docMockServices/empresaService.js +116 -0
  136. package/dist/docs/docMockServices/index.d.ts +9 -0
  137. package/dist/docs/docMockServices/index.d.ts.map +1 -0
  138. package/dist/docs/docMockServices/index.js +8 -0
  139. package/dist/docs/docMockServices/initialData.d.ts +6 -0
  140. package/dist/docs/docMockServices/initialData.d.ts.map +1 -0
  141. package/dist/docs/docMockServices/initialData.js +132 -0
  142. package/dist/docs/docMockServices/interfaces.d.ts +26 -0
  143. package/dist/docs/docMockServices/interfaces.d.ts.map +1 -0
  144. package/dist/docs/docMockServices/interfaces.js +1 -0
  145. package/dist/docs/docMockServices/personaEmpresaService.d.ts +43 -0
  146. package/dist/docs/docMockServices/personaEmpresaService.d.ts.map +1 -0
  147. package/dist/docs/docMockServices/personaEmpresaService.js +113 -0
  148. package/dist/docs/docMockServices/personaService.d.ts +39 -0
  149. package/dist/docs/docMockServices/personaService.d.ts.map +1 -0
  150. package/dist/docs/docMockServices/personaService.js +180 -0
  151. package/dist/hooks/index.d.ts +2 -0
  152. package/dist/hooks/index.d.ts.map +1 -1
  153. package/dist/hooks/index.js +1 -0
  154. package/dist/hooks/useAsyncRequest.d.ts +17 -0
  155. package/dist/hooks/useAsyncRequest.d.ts.map +1 -0
  156. package/dist/hooks/useAsyncRequest.js +70 -0
  157. package/dist/index.css +1 -1
  158. package/dist/index.d.ts +19 -1
  159. package/dist/index.d.ts.map +1 -1
  160. package/dist/index.js +9 -0
  161. package/dist/index.js.map +1 -1
  162. package/package.json +5 -2
@@ -1,46 +1,150 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React from "react";
3
- export const Badge = ({ children, variant = "primary", size = "md", rounded = false, className = "", icon, iconPosition = "left", iconLabel, }) => {
3
+ // Función helper para convertir nombres de colores comunes a valores CSS válidos
4
+ const getColorValue = (color) => {
5
+ if (!color)
6
+ return undefined;
7
+ // Si ya es un valor CSS válido (hex, rgb, rgba, hsl, etc.), retornarlo
8
+ if (color.startsWith("#") ||
9
+ color.startsWith("rgb") ||
10
+ color.startsWith("hsl")) {
11
+ return color;
12
+ }
13
+ // Mapeo de nombres de colores comunes
14
+ const colorMap = {
15
+ white: "#ffffff",
16
+ black: "#000000",
17
+ "gray-800": "#1f2937",
18
+ "gray-700": "#374151",
19
+ "gray-600": "#4b5563",
20
+ "gray-500": "#6b7280",
21
+ "gray-400": "#9ca3af",
22
+ "gray-300": "#d1d5db",
23
+ "gray-200": "#e5e7eb",
24
+ "gray-100": "#f3f4f6",
25
+ "gray-50": "#f9fafb",
26
+ };
27
+ return colorMap[color.toLowerCase()] || color;
28
+ };
29
+ export const Badge = ({ children, variant = "primary", size = "md", rounded = false, className = "", icon, iconPosition = "left", iconLabel, bg, textColor, onClick, }) => {
4
30
  const baseClasses = "inline-flex items-center font-medium font-[var(--font-default)]";
5
31
  const variantClasses = {
6
- primary: `
7
- bg-[var(--color-primary-light)] text-[var(--color-primary-dark)]
8
- hover:bg-[var(--color-primary)] hover:text-[var(--color-primary-contrast)]
32
+ primary: `
33
+ bg-[var(--color-primary-light)] text-gray-800
9
34
  `,
10
- secondary: `
11
- bg-[var(--color-secondary-light)] text-[var(--color-secondary-dark)]
12
- hover:bg-[var(--color-secondary)] hover:text-[var(--color-secondary-contrast)]
35
+ secondary: `
36
+ bg-[var(--color-secondary-light)] text-gray-800
13
37
  `,
14
- success: `
15
- bg-[var(--color-success-light)] text-[var(--color-success-dark)]
16
- hover:bg-[var(--color-success)] hover:text-[var(--color-success-contrast)]
38
+ success: `
39
+ bg-[var(--color-success-light)] text-gray-800
17
40
  `,
18
- warning: `
19
- bg-[var(--color-warning-light)] text-[var(--color-warning-dark)]
20
- hover:bg-[var(--color-warning)] hover:text-[var(--color-warning-contrast)]
41
+ warning: `
42
+ bg-[var(--color-warning-light)] text-gray-800
21
43
  `,
22
- danger: `
23
- bg-[var(--color-danger-light)] text-[var(--color-danger-dark)]
24
- hover:bg-[var(--color-danger)] hover:text-[var(--color-danger-contrast)]
44
+ danger: `
45
+ bg-[var(--color-danger-light)] text-gray-800
25
46
  `,
26
- info: `
27
- bg-[var(--color-info-light)] text-[var(--color-info-dark)]
28
- hover:bg-[var(--color-info)] hover:text-[var(--color-info-contrast)]
47
+ info: `
48
+ bg-[var(--color-info-light)] text-gray-800
29
49
  `,
30
50
  };
31
51
  const sizeClasses = {
32
- sm: "px-2 py-0.5 text-xs",
33
- md: "px-2.5 py-0.5 text-sm",
34
- lg: "px-3 py-1 text-base",
52
+ sm: "py-0.5 text-xs",
53
+ md: "py-0.5 text-sm",
54
+ lg: "py-1 text-base",
35
55
  };
56
+ // Padding horizontal: si hay icono, el badge no tiene padding, se aplica a los elementos internos
57
+ const horizontalPaddingClasses = icon
58
+ ? "" // Sin padding horizontal en el badge cuando hay icono
59
+ : size === "sm"
60
+ ? "px-2"
61
+ : size === "md"
62
+ ? "px-2.5"
63
+ : "px-3";
64
+ // Padding para el texto: flex-1 para ocupar el espacio, padding solo en el lado opuesto al icono
65
+ const textPaddingClasses = icon
66
+ ? iconPosition === "left"
67
+ ? size === "sm"
68
+ ? "flex-1 pr-2"
69
+ : size === "md"
70
+ ? "flex-1 pr-2.5"
71
+ : "flex-1 pr-3"
72
+ : size === "sm"
73
+ ? "flex-1 pl-2"
74
+ : size === "md"
75
+ ? "flex-1 pl-2.5"
76
+ : "flex-1 pl-3"
77
+ : "";
78
+ // Padding para el icono: solo en el lado del borde
79
+ const iconPaddingClasses = icon
80
+ ? iconPosition === "left"
81
+ ? size === "sm"
82
+ ? "pl-2"
83
+ : size === "md"
84
+ ? "pl-2.5"
85
+ : "pl-3"
86
+ : size === "sm"
87
+ ? "pr-2"
88
+ : size === "md"
89
+ ? "pr-2.5"
90
+ : "pr-3"
91
+ : "";
36
92
  const roundedClasses = rounded ? "rounded-full" : "rounded-md";
37
- const gapClasses = icon ? "gap-2" : "";
93
+ const gapClasses = icon ? "gap-2" : ""; // Gap entre icono y texto cuando hay icono
38
94
  const iconSizeClasses = size === "sm" ? "text-xs" : size === "md" ? "text-sm" : "text-base";
39
- const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${roundedClasses} ${gapClasses} ${className}`;
95
+ // Si se proporciona bg personalizado, usar estilos inline; si no, usar las clases de variante
96
+ const backgroundClasses = bg ? "" : variantClasses[variant];
97
+ // Estilos inline para colores personalizados
98
+ const inlineStyles = bg
99
+ ? {
100
+ backgroundColor: getColorValue(bg) || bg,
101
+ color: getColorValue(textColor) || textColor || "#1f2937", // gray-800 por defecto
102
+ }
103
+ : {};
104
+ // Si hay onClick y no hay iconos, agregar cursor-pointer al badge completo
105
+ const cursorClasses = onClick && !icon ? "cursor-pointer" : "";
106
+ const classes = `${baseClasses} ${backgroundClasses} ${sizeClasses[size]} ${horizontalPaddingClasses} ${roundedClasses} ${gapClasses} ${cursorClasses} ${className}`;
40
107
  const renderIcon = () => {
41
108
  if (!icon)
42
109
  return null;
43
- return (_jsx("i", { className: `fa ${icon} ${iconSizeClasses}`, "aria-hidden": !iconLabel, "aria-label": iconLabel }));
110
+ // Si hay onClick y hay iconos, el onClick se aplica solo a los iconos
111
+ const iconClasses = onClick
112
+ ? `fa ${icon} ${iconSizeClasses} cursor-pointer`
113
+ : `fa ${icon} ${iconSizeClasses}`;
114
+ return (_jsx("span", { className: iconPaddingClasses, children: _jsx("i", { className: iconClasses, "aria-hidden": !iconLabel, "aria-label": iconLabel, onClick: onClick, role: onClick ? "button" : undefined, tabIndex: onClick ? 0 : undefined, onKeyDown: onClick
115
+ ? (e) => {
116
+ if (e.key === "Enter" || e.key === " ") {
117
+ e.preventDefault();
118
+ // Crear un evento sintético compatible con MouseEvent
119
+ const syntheticEvent = {
120
+ ...e,
121
+ currentTarget: e.currentTarget,
122
+ target: e.target,
123
+ };
124
+ onClick(syntheticEvent);
125
+ }
126
+ }
127
+ : undefined }) }));
44
128
  };
45
- return (_jsxs("span", { className: classes, children: [icon && iconPosition === "left" && renderIcon(), _jsx("span", { children: children }), icon && iconPosition === "right" && renderIcon()] }));
129
+ // Si hay onClick y no hay iconos, aplicar onClick al badge completo
130
+ const badgeProps = onClick && !icon
131
+ ? {
132
+ onClick,
133
+ role: "button",
134
+ tabIndex: 0,
135
+ onKeyDown: (e) => {
136
+ if (e.key === "Enter" || e.key === " ") {
137
+ e.preventDefault();
138
+ // Crear un evento sintético compatible con MouseEvent
139
+ const syntheticEvent = {
140
+ ...e,
141
+ currentTarget: e.currentTarget,
142
+ target: e.target,
143
+ };
144
+ onClick(syntheticEvent);
145
+ }
146
+ },
147
+ }
148
+ : {};
149
+ return (_jsxs("span", { className: classes, style: inlineStyles, ...badgeProps, children: [icon && iconPosition === "left" && renderIcon(), _jsx("span", { className: textPaddingClasses, children: children }), icon && iconPosition === "right" && renderIcon()] }));
46
150
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/utils/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAiGxC,CAAC"}
1
+ {"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../../src/components/utils/Dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,aAAa,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAyGxC,CAAC"}
@@ -35,5 +35,9 @@ export const Dialog = ({ isOpen, title, dialogBody, dialogActions, onClose, clos
35
35
  onClose();
36
36
  }
37
37
  };
38
- return (_jsxs("div", { className: "fixed inset-0 z-[2000] flex items-center justify-center p-4", role: "dialog", "aria-modal": "true", "aria-labelledby": "dialog-title", children: [_jsx("div", { className: "absolute inset-0 bg-black/50 backdrop-blur-sm", onClick: handleOverlayClick }), _jsxs("div", { className: "relative w-auto max-w-lg min-w-[400px] bg-[var(--color-bg-default)] rounded-lg shadow-[var(--shadow-xl)] border border-[var(--color-border-default)] font-[var(--font-default)] max-h-[90vh] flex flex-col", onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "flex items-center justify-between px-6 py-4 border-b border-[var(--color-border-default)]", children: [_jsx("h2", { id: "dialog-title", className: "text-lg font-semibold text-[var(--color-text-primary)]", children: title }), onClose && (_jsx("button", { onClick: onClose, className: "ml-4 p-1 rounded-md text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-bg-hover)] transition-colors cursor-pointer", "aria-label": "Cerrar dialog", children: _jsx("i", { className: "fa fa-times" }) }))] }), _jsx("div", { className: "px-6 py-4 overflow-y-auto flex-1 text-[var(--color-text-primary)] min-w-0", children: dialogBody }), _jsx("div", { className: "px-6 py-4 border-t border-[var(--color-border-default)] flex items-center justify-end gap-2 flex-shrink-0 flex-wrap", children: dialogActions })] })] }));
38
+ return (_jsxs("div", { className: "fixed inset-0 z-[2000] flex items-center justify-center p-4", role: "dialog", "aria-modal": "true", "aria-labelledby": "dialog-title", children: [_jsx("div", { className: "absolute inset-0 bg-black/50 backdrop-blur-sm", onClick: handleOverlayClick }), _jsxs("div", { className: "relative w-auto max-w-lg min-w-[400px] bg-[var(--color-bg-default)] rounded-lg shadow-[var(--shadow-xl)] border border-[var(--color-border-default)] font-[var(--font-default)] max-h-[90vh] flex flex-col", onClick: (e) => e.stopPropagation(), style: { overflow: "visible" }, children: [_jsxs("div", { className: "flex items-center justify-between px-6 py-4 border-b border-[var(--color-border-default)] flex-shrink-0", children: [_jsx("h2", { id: "dialog-title", className: "text-lg font-semibold text-[var(--color-text-primary)]", children: title }), onClose && (_jsx("button", { onClick: onClose, className: "ml-4 p-1 rounded-md text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-bg-hover)] transition-colors cursor-pointer", "aria-label": "Cerrar dialog", children: _jsx("i", { className: "fa fa-times" }) }))] }), _jsx("div", { className: "px-6 py-4 flex-1 text-[var(--color-text-primary)] min-w-0", style: {
39
+ overflowY: "auto",
40
+ overflowX: "visible",
41
+ maxHeight: "calc(90vh - 200px)"
42
+ }, children: dialogBody }), _jsx("div", { className: "px-6 py-4 border-t border-[var(--color-border-default)] flex items-center justify-end gap-2 flex-shrink-0 flex-wrap", children: dialogActions })] })] }));
39
43
  };
@@ -0,0 +1,57 @@
1
+ import React from "react";
2
+ import type { AutocompleteOption } from "../form-controls/AutocompleteInput";
3
+ import type { SearchSelectOption } from "../form-controls/SearchSelectInput";
4
+ import type { PaginationInterface } from "../form-controls/Pagination";
5
+ export interface StaticOption {
6
+ text: string;
7
+ value: string;
8
+ }
9
+ interface BaseFilterProps {
10
+ paramName?: string;
11
+ label?: string;
12
+ staticOptions?: StaticOption[];
13
+ inputWidth?: string;
14
+ value?: string;
15
+ onChange?: (value: string | undefined) => void;
16
+ /**
17
+ * Si es true, el componente solo se renderiza si tiene un valor o existe el queryParam asociado con un valor.
18
+ * Por defecto es false.
19
+ */
20
+ hideEmpty?: boolean;
21
+ }
22
+ export interface TextFilterProps extends BaseFilterProps {
23
+ filterType?: "text";
24
+ }
25
+ export interface NumberFilterProps extends BaseFilterProps {
26
+ filterType: "number";
27
+ min?: number;
28
+ max?: number;
29
+ }
30
+ export interface DateFilterProps extends BaseFilterProps {
31
+ filterType: "date";
32
+ }
33
+ export interface AutocompleteFilterProps<T = AutocompleteOption, K = string> extends BaseFilterProps {
34
+ filterType: "autocomplete";
35
+ options: T[];
36
+ getOptionLabel?: (item: T) => string;
37
+ getOptionValue?: (item: T) => K;
38
+ renderOption?: (item: T) => React.ReactNode;
39
+ noResultsText?: string;
40
+ }
41
+ export interface SearchFilterProps extends BaseFilterProps {
42
+ filterType: "search";
43
+ }
44
+ export interface SearchSelectFilterProps<T = SearchSelectOption, K = string> extends BaseFilterProps {
45
+ filterType: "searchSelect";
46
+ onSearchPromiseFn: (text: string) => Promise<Array<T> | PaginationInterface<T>>;
47
+ onSingleSearchPromiseFn: (value: K) => Promise<T | undefined>;
48
+ getOptionLabel?: (item: T) => string;
49
+ getOptionValue?: (item: T) => K;
50
+ renderOption?: (item: T) => React.ReactNode;
51
+ dialogTitle?: string;
52
+ noResultsText?: string;
53
+ }
54
+ export type FilterProps = TextFilterProps | NumberFilterProps | DateFilterProps | AutocompleteFilterProps | SearchFilterProps | SearchSelectFilterProps;
55
+ export declare const Filter: React.FC<FilterProps>;
56
+ export {};
57
+ //# sourceMappingURL=Filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../../../src/components/utils/Filter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAQ3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAGD,UAAU,eAAe;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC/C;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,UAAU,EAAE,QAAQ,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,eAAe;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,kBAAkB,EAAE,CAAC,GAAG,MAAM,CACzE,SAAQ,eAAe;IACvB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,UAAU,EAAE,QAAQ,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,kBAAkB,EAAE,CAAC,GAAG,MAAM,CACzE,SAAQ,eAAe;IACvB,UAAU,EAAE,cAAc,CAAC;IAC3B,iBAAiB,EAAE,CACjB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,uBAAuB,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9D,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACrC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,uBAAuB,GACvB,iBAAiB,GACjB,uBAAuB,CAAC;AAE5B,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAu8BxC,CAAC"}