flysoft-react-ui 0.5.0 → 0.5.3

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 (206) hide show
  1. package/dist/App.d.ts.map +1 -1
  2. package/dist/App.js +19 -7
  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 +411 -31
  6. package/dist/components/form-controls/Button.d.ts +3 -0
  7. package/dist/components/form-controls/Button.d.ts.map +1 -1
  8. package/dist/components/form-controls/Button.js +160 -19
  9. package/dist/components/form-controls/Checkbox.d.ts +14 -0
  10. package/dist/components/form-controls/Checkbox.d.ts.map +1 -0
  11. package/dist/components/form-controls/Checkbox.js +79 -0
  12. package/dist/components/form-controls/DateInput.d.ts +24 -4
  13. package/dist/components/form-controls/DateInput.d.ts.map +1 -1
  14. package/dist/components/form-controls/DateInput.js +492 -70
  15. package/dist/components/form-controls/DatePicker.d.ts +4 -3
  16. package/dist/components/form-controls/DatePicker.d.ts.map +1 -1
  17. package/dist/components/form-controls/DatePicker.js +26 -30
  18. package/dist/components/form-controls/Input.d.ts +10 -1
  19. package/dist/components/form-controls/Input.d.ts.map +1 -1
  20. package/dist/components/form-controls/Input.js +17 -10
  21. package/dist/components/form-controls/LinkButton.d.ts +15 -0
  22. package/dist/components/form-controls/LinkButton.d.ts.map +1 -0
  23. package/dist/components/form-controls/LinkButton.js +248 -0
  24. package/dist/components/form-controls/Pagination.d.ts +1 -0
  25. package/dist/components/form-controls/Pagination.d.ts.map +1 -1
  26. package/dist/components/form-controls/Pagination.js +3 -40
  27. package/dist/components/form-controls/RadioButtonGroup.d.ts +62 -0
  28. package/dist/components/form-controls/RadioButtonGroup.d.ts.map +1 -0
  29. package/dist/components/form-controls/RadioButtonGroup.js +220 -0
  30. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts +68 -0
  31. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts.map +1 -0
  32. package/dist/components/form-controls/SearchSelectInput-OLD.js +963 -0
  33. package/dist/components/form-controls/SearchSelectInput.d.ts +70 -0
  34. package/dist/components/form-controls/SearchSelectInput.d.ts.map +1 -0
  35. package/dist/components/form-controls/SearchSelectInput.js +336 -0
  36. package/dist/components/form-controls/index.d.ts +9 -1
  37. package/dist/components/form-controls/index.d.ts.map +1 -1
  38. package/dist/components/form-controls/index.js +4 -0
  39. package/dist/components/layout/Accordion.d.ts +13 -0
  40. package/dist/components/layout/Accordion.d.ts.map +1 -0
  41. package/dist/components/layout/Accordion.js +67 -0
  42. package/dist/components/layout/AppLayout.d.ts +3 -2
  43. package/dist/components/layout/AppLayout.d.ts.map +1 -1
  44. package/dist/components/layout/AppLayout.js +104 -31
  45. package/dist/components/layout/Card.d.ts +8 -3
  46. package/dist/components/layout/Card.d.ts.map +1 -1
  47. package/dist/components/layout/Card.js +18 -19
  48. package/dist/components/layout/Collection.js +1 -1
  49. package/dist/components/layout/DataTable.d.ts +3 -1
  50. package/dist/components/layout/DataTable.d.ts.map +1 -1
  51. package/dist/components/layout/DataTable.js +34 -29
  52. package/dist/components/layout/index.d.ts +2 -0
  53. package/dist/components/layout/index.d.ts.map +1 -1
  54. package/dist/components/layout/index.js +1 -0
  55. package/dist/components/utils/Avatar.d.ts +49 -0
  56. package/dist/components/utils/Avatar.d.ts.map +1 -0
  57. package/dist/components/utils/Avatar.js +93 -0
  58. package/dist/components/utils/Badge.d.ts +3 -0
  59. package/dist/components/utils/Badge.d.ts.map +1 -1
  60. package/dist/components/utils/Badge.js +131 -26
  61. package/dist/components/utils/Dialog.d.ts.map +1 -1
  62. package/dist/components/utils/Dialog.js +6 -1
  63. package/dist/components/utils/Filter.d.ts +57 -0
  64. package/dist/components/utils/Filter.d.ts.map +1 -0
  65. package/dist/components/utils/Filter.js +581 -0
  66. package/dist/components/utils/FiltersDialog.d.ts +21 -0
  67. package/dist/components/utils/FiltersDialog.d.ts.map +1 -0
  68. package/dist/components/utils/FiltersDialog.js +104 -0
  69. package/dist/components/utils/Loader.js +2 -2
  70. package/dist/components/utils/RoadMap.d.ts +59 -0
  71. package/dist/components/utils/RoadMap.d.ts.map +1 -0
  72. package/dist/components/utils/RoadMap.js +139 -0
  73. package/dist/components/utils/Snackbar.d.ts +13 -0
  74. package/dist/components/utils/Snackbar.d.ts.map +1 -0
  75. package/dist/components/utils/Snackbar.js +122 -0
  76. package/dist/components/utils/SnackbarContainer.d.ts +7 -0
  77. package/dist/components/utils/SnackbarContainer.d.ts.map +1 -0
  78. package/dist/components/utils/SnackbarContainer.js +25 -0
  79. package/dist/components/utils/iconUtils.d.ts +16 -0
  80. package/dist/components/utils/iconUtils.d.ts.map +1 -0
  81. package/dist/components/utils/iconUtils.js +40 -0
  82. package/dist/components/utils/index.d.ts +12 -0
  83. package/dist/components/utils/index.d.ts.map +1 -1
  84. package/dist/components/utils/index.js +6 -0
  85. package/dist/contexts/AppLayoutContext.d.ts +40 -0
  86. package/dist/contexts/AppLayoutContext.d.ts.map +1 -0
  87. package/dist/contexts/AppLayoutContext.js +98 -0
  88. package/dist/contexts/ListCrudContext.d.ts +50 -0
  89. package/dist/contexts/ListCrudContext.d.ts.map +1 -0
  90. package/dist/contexts/ListCrudContext.js +253 -0
  91. package/dist/contexts/SnackbarContext.d.ts +26 -0
  92. package/dist/contexts/SnackbarContext.d.ts.map +1 -0
  93. package/dist/contexts/SnackbarContext.js +34 -0
  94. package/dist/contexts/index.d.ts +6 -0
  95. package/dist/contexts/index.d.ts.map +1 -1
  96. package/dist/contexts/index.js +6 -0
  97. package/dist/contexts/presets.js +6 -6
  98. package/dist/docs/AccordionDocs.d.ts +4 -0
  99. package/dist/docs/AccordionDocs.d.ts.map +1 -0
  100. package/dist/docs/AccordionDocs.js +21 -0
  101. package/dist/docs/AuthDocs.tsx/AuthDocsContent.js +3 -5
  102. package/dist/docs/AutocompleteInputDocs.js +1 -1
  103. package/dist/docs/AvatarDocs.d.ts +4 -0
  104. package/dist/docs/AvatarDocs.d.ts.map +1 -0
  105. package/dist/docs/AvatarDocs.js +7 -0
  106. package/dist/docs/BadgeDocs.d.ts.map +1 -1
  107. package/dist/docs/BadgeDocs.js +4 -2
  108. package/dist/docs/ButtonDocs.d.ts.map +1 -1
  109. package/dist/docs/ButtonDocs.js +1 -1
  110. package/dist/docs/CardDocs.d.ts.map +1 -1
  111. package/dist/docs/CardDocs.js +17 -8
  112. package/dist/docs/CheckboxDocs.d.ts +4 -0
  113. package/dist/docs/CheckboxDocs.d.ts.map +1 -0
  114. package/dist/docs/CheckboxDocs.js +7 -0
  115. package/dist/docs/DataTableDocs.d.ts.map +1 -1
  116. package/dist/docs/DataTableDocs.js +9 -5
  117. package/dist/docs/DateInputDocs.d.ts +1 -0
  118. package/dist/docs/DateInputDocs.d.ts.map +1 -1
  119. package/dist/docs/DateInputDocs.js +7 -9
  120. package/dist/docs/DatePickerDocs.d.ts +1 -0
  121. package/dist/docs/DatePickerDocs.d.ts.map +1 -1
  122. package/dist/docs/DatePickerDocs.js +6 -8
  123. package/dist/docs/DialogDocs.js +1 -1
  124. package/dist/docs/DocAdmin.d.ts +4 -0
  125. package/dist/docs/DocAdmin.d.ts.map +1 -0
  126. package/dist/docs/DocAdmin.js +68 -0
  127. package/dist/docs/DocsMenu.d.ts.map +1 -1
  128. package/dist/docs/DocsMenu.js +3 -3
  129. package/dist/docs/DocsRouter.d.ts.map +1 -1
  130. package/dist/docs/DocsRouter.js +13 -1
  131. package/dist/docs/DropdownMenuDocs.js +1 -1
  132. package/dist/docs/ExampleFormDocs.d.ts +4 -0
  133. package/dist/docs/ExampleFormDocs.d.ts.map +1 -0
  134. package/dist/docs/ExampleFormDocs.js +148 -0
  135. package/dist/docs/FilterDocs.d.ts +4 -0
  136. package/dist/docs/FilterDocs.d.ts.map +1 -0
  137. package/dist/docs/FilterDocs.js +112 -0
  138. package/dist/docs/InputDocs.d.ts.map +1 -1
  139. package/dist/docs/InputDocs.js +11 -1
  140. package/dist/docs/LinkButtonDocs.d.ts +4 -0
  141. package/dist/docs/LinkButtonDocs.d.ts.map +1 -0
  142. package/dist/docs/LinkButtonDocs.js +7 -0
  143. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts +2 -0
  144. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts.map +1 -0
  145. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.js +29 -0
  146. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts +2 -0
  147. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts.map +1 -0
  148. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.js +7 -0
  149. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts +2 -0
  150. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts.map +1 -0
  151. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.js +57 -0
  152. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts +9 -0
  153. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts.map +1 -0
  154. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.js +30 -0
  155. package/dist/docs/PaginationDocs.js +6 -6
  156. package/dist/docs/RadioButtonGroupDocs.d.ts +4 -0
  157. package/dist/docs/RadioButtonGroupDocs.d.ts.map +1 -0
  158. package/dist/docs/RadioButtonGroupDocs.js +46 -0
  159. package/dist/docs/RoadMapDocs.d.ts +4 -0
  160. package/dist/docs/RoadMapDocs.d.ts.map +1 -0
  161. package/dist/docs/RoadMapDocs.js +171 -0
  162. package/dist/docs/SearchSelectInputDocs.d.ts +4 -0
  163. package/dist/docs/SearchSelectInputDocs.d.ts.map +1 -0
  164. package/dist/docs/SearchSelectInputDocs.js +168 -0
  165. package/dist/docs/SnackbarDocs.d.ts +4 -0
  166. package/dist/docs/SnackbarDocs.d.ts.map +1 -0
  167. package/dist/docs/SnackbarDocs.js +50 -0
  168. package/dist/docs/TabsGroupDocs.d.ts.map +1 -1
  169. package/dist/docs/TabsGroupDocs.js +12 -1
  170. package/dist/docs/docMockServices/empresaService.d.ts +38 -0
  171. package/dist/docs/docMockServices/empresaService.d.ts.map +1 -0
  172. package/dist/docs/docMockServices/empresaService.js +117 -0
  173. package/dist/docs/docMockServices/index.d.ts +9 -0
  174. package/dist/docs/docMockServices/index.d.ts.map +1 -0
  175. package/dist/docs/docMockServices/index.js +8 -0
  176. package/dist/docs/docMockServices/initialData.d.ts +6 -0
  177. package/dist/docs/docMockServices/initialData.d.ts.map +1 -0
  178. package/dist/docs/docMockServices/initialData.js +132 -0
  179. package/dist/docs/docMockServices/interfaces.d.ts +26 -0
  180. package/dist/docs/docMockServices/interfaces.d.ts.map +1 -0
  181. package/dist/docs/docMockServices/interfaces.js +1 -0
  182. package/dist/docs/docMockServices/personaEmpresaService.d.ts +43 -0
  183. package/dist/docs/docMockServices/personaEmpresaService.d.ts.map +1 -0
  184. package/dist/docs/docMockServices/personaEmpresaService.js +113 -0
  185. package/dist/docs/docMockServices/personaService.d.ts +39 -0
  186. package/dist/docs/docMockServices/personaService.d.ts.map +1 -0
  187. package/dist/docs/docMockServices/personaService.js +181 -0
  188. package/dist/hooks/index.d.ts +2 -0
  189. package/dist/hooks/index.d.ts.map +1 -1
  190. package/dist/hooks/index.js +1 -0
  191. package/dist/hooks/useAsyncRequest.d.ts +17 -0
  192. package/dist/hooks/useAsyncRequest.d.ts.map +1 -0
  193. package/dist/hooks/useAsyncRequest.js +70 -0
  194. package/dist/index.css +1 -1
  195. package/dist/index.d.ts +23 -1
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +11 -0
  198. package/dist/index.js.map +1 -1
  199. package/dist/templates/forms/ContactForm.js +2 -2
  200. package/dist/templates/forms/LoginForm.js +1 -1
  201. package/dist/templates/forms/RegistrationForm.js +1 -1
  202. package/dist/templates/layouts/SidebarLayout.d.ts.map +1 -1
  203. package/dist/templates/layouts/SidebarLayout.js +3 -2
  204. package/dist/templates/patterns/FormPattern.d.ts.map +1 -1
  205. package/dist/templates/patterns/FormPattern.js +4 -3
  206. package/package.json +5 -2
@@ -1,6 +1,33 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React from "react";
3
- export const Button = ({ variant = "primary", size = "md", icon, iconPosition = "left", loading = false, children, className = "", disabled, onClick, ...props }) => {
3
+ import { normalizeIconClass } from "../utils/iconUtils";
4
+ // Función helper para convertir nombres de colores comunes a valores CSS válidos
5
+ const getColorValue = (color) => {
6
+ if (!color)
7
+ return undefined;
8
+ // Si ya es un valor CSS válido (hex, rgb, rgba, hsl, etc.), retornarlo
9
+ if (color.startsWith("#") ||
10
+ color.startsWith("rgb") ||
11
+ color.startsWith("hsl")) {
12
+ return color;
13
+ }
14
+ // Mapeo de nombres de colores comunes
15
+ const colorMap = {
16
+ white: "#ffffff",
17
+ black: "#000000",
18
+ "gray-800": "#1f2937",
19
+ "gray-700": "#374151",
20
+ "gray-600": "#4b5563",
21
+ "gray-500": "#6b7280",
22
+ "gray-400": "#9ca3af",
23
+ "gray-300": "#d1d5db",
24
+ "gray-200": "#e5e7eb",
25
+ "gray-100": "#f3f4f6",
26
+ "gray-50": "#f9fafb",
27
+ };
28
+ return colorMap[color.toLowerCase()] || color;
29
+ };
30
+ export const Button = ({ variant = "primary", size = "md", color = "primary", bg, textColor, icon, iconPosition = "left", loading = false, children, className = "", disabled, onClick, ...props }) => {
4
31
  const buttonRef = React.useRef(null);
5
32
  const [ripples, setRipples] = React.useState([]);
6
33
  const baseClasses = `
@@ -9,33 +36,125 @@ export const Button = ({ variant = "primary", size = "md", icon, iconPosition =
9
36
  disabled:opacity-50 disabled:cursor-not-allowed
10
37
  font-[var(--font-default)]
11
38
  `;
12
- const variantClasses = {
13
- primary: `
14
- bg-[var(--color-primary)] text-[var(--color-primary-contrast)]
15
- hover:bg-[var(--color-primary-dark)] focus:ring-[var(--color-primary)]
16
- `,
17
- outline: `
18
- border border-[var(--color-primary)] text-[var(--color-primary)]
19
- hover:bg-[var(--color-bg-secondary)] focus:ring-[var(--color-primary)]
20
- `,
21
- ghost: `
22
- text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)]
23
- focus:ring-[var(--color-primary)]
24
- `,
39
+ // Mapeo de clases para variant primary con color primary (usa Tailwind)
40
+ const getVariantClasses = (variantType, colorType) => {
41
+ // Solo usar clases Tailwind para primary con color primary
42
+ if (colorType === "primary") {
43
+ if (variantType === "primary") {
44
+ return `
45
+ bg-[var(--color-primary)] text-[var(--color-primary-contrast)]
46
+ hover:bg-[var(--color-primary-dark)] focus:ring-[var(--color-primary)]
47
+ `;
48
+ }
49
+ else if (variantType === "outline") {
50
+ return `
51
+ border border-[var(--color-primary)] text-[var(--color-primary)]
52
+ hover:bg-[var(--color-bg-secondary)] focus:ring-[var(--color-primary)]
53
+ `;
54
+ }
55
+ else {
56
+ return `
57
+ text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)]
58
+ focus:ring-[var(--color-primary)]
59
+ `;
60
+ }
61
+ }
62
+ // Para otros colores, retornar clases base sin color (se aplicarán con estilos inline)
63
+ if (variantType === "primary") {
64
+ return `focus:ring-2 focus:ring-offset-2`;
65
+ }
66
+ else if (variantType === "outline") {
67
+ return `border hover:bg-[var(--color-bg-secondary)] focus:ring-2 focus:ring-offset-2`;
68
+ }
69
+ else {
70
+ return `hover:bg-[var(--color-bg-secondary)] focus:ring-2 focus:ring-offset-2`;
71
+ }
25
72
  };
73
+ // Si se proporciona bg personalizado, no usar las clases de variante
74
+ const variantClasses = bg ? "" : getVariantClasses(variant, color);
75
+ // Determinar si necesitamos usar estilos inline para colores del sistema
76
+ const needsInlineStyles = !bg && color !== "primary";
26
77
  const sizeClasses = {
27
78
  sm: `${children ? "px-3 py-1.5" : "p-1.5"} text-sm`,
28
79
  md: `${children ? "px-4 py-2" : "p-2"} text-base`,
29
80
  lg: `${children ? "px-6 py-3" : "p-3"} text-lg`,
30
81
  };
31
- const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`;
82
+ // Clases adicionales para variant outline cuando hay bg personalizado
83
+ const outlineClasses = bg && variant === "outline" ? "border" : "";
84
+ const classes = `${baseClasses} ${variantClasses} ${sizeClasses[size]} ${outlineClasses} ${className}`;
85
+ // Función para obtener el valor de una variable CSS
86
+ const getCSSVariable = (varName) => {
87
+ if (typeof window !== "undefined") {
88
+ const value = getComputedStyle(document.documentElement)
89
+ .getPropertyValue(varName)
90
+ .trim();
91
+ // Si no se encuentra la variable, intentar con el prefijo flysoft
92
+ if (!value && varName.startsWith("--color-")) {
93
+ const flysoftVarName = varName.replace("--color-", "--flysoft-");
94
+ return (getComputedStyle(document.documentElement)
95
+ .getPropertyValue(flysoftVarName)
96
+ .trim() || value);
97
+ }
98
+ return value;
99
+ }
100
+ return "";
101
+ };
102
+ // Estilos inline para colores personalizados o colores del sistema (no primary)
103
+ const inlineStyles = bg
104
+ ? {
105
+ backgroundColor: variant === "primary" ? getColorValue(bg) || bg : undefined,
106
+ color: getColorValue(textColor) ||
107
+ textColor ||
108
+ (variant === "primary" ? "#ffffff" : getColorValue(bg) || bg),
109
+ borderColor: variant === "outline" ? getColorValue(bg) || bg : undefined,
110
+ ...(variant === "ghost" && {
111
+ color: getColorValue(textColor) || textColor || getColorValue(bg) || bg,
112
+ }),
113
+ }
114
+ : needsInlineStyles
115
+ ? {
116
+ ...(variant === "primary" && {
117
+ backgroundColor: getCSSVariable(`--color-${color}`),
118
+ color: getCSSVariable(`--color-${color}-contrast`) || "#ffffff",
119
+ }),
120
+ ...(variant === "outline" && {
121
+ borderColor: getCSSVariable(`--color-${color}`),
122
+ color: getCSSVariable(`--color-${color}`),
123
+ }),
124
+ ...(variant === "ghost" && {
125
+ color: getCSSVariable(`--color-${color}`),
126
+ }),
127
+ }
128
+ : {};
129
+ // Función para oscurecer un color (para hover en variant primary con bg personalizado)
130
+ const darkenColor = (color, percent) => {
131
+ const hex = color.replace("#", "");
132
+ const num = parseInt(hex, 16);
133
+ const r = Math.max(0, Math.floor((num >> 16) * (1 - percent / 100)));
134
+ const g = Math.max(0, Math.floor(((num >> 8) & 0x00ff) * (1 - percent / 100)));
135
+ const b = Math.max(0, Math.floor((num & 0x0000ff) * (1 - percent / 100)));
136
+ return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, "0")}`;
137
+ };
138
+ // Agregar hover style cuando hay bg personalizado y variant es primary
139
+ const hoverStyle = bg && variant === "primary" && !disabled && !loading
140
+ ? {
141
+ "--hover-bg": darkenColor(getColorValue(bg) || bg, 15),
142
+ }
143
+ : {};
32
144
  const renderIcon = () => {
33
145
  if (!icon)
34
146
  return null;
35
147
  const iconClasses = size === "sm" ? "w-4 h-4" : size === "md" ? "w-5 h-5" : "w-6 h-6";
36
- return (_jsx("i", { className: `fa ${icon} ${iconClasses} ${children ? (iconPosition === "right" ? "ml-2" : "mr-2") : ""}` }));
148
+ return (_jsx("i", { className: `${normalizeIconClass(icon)} ${iconClasses} ${children ? (iconPosition === "right" ? "ml-2" : "mr-2") : ""} mt-0.5` }));
37
149
  };
38
- const rippleColor = variant === "primary" ? "rgba(255, 255, 255, 0.45)" : "rgba(0, 0, 0, 0.15)";
150
+ // Determinar el color del ripple basado en el variant y si hay bg personalizado
151
+ const rippleColor = bg
152
+ ? variant === "primary"
153
+ ? "rgba(255, 255, 255, 0.45)"
154
+ : "rgba(0, 0, 0, 0.15)"
155
+ : variant === "primary"
156
+ ? "rgba(255, 255, 255, 0.45)"
157
+ : "rgba(0, 0, 0, 0.15)";
39
158
  const handleClick = (event) => {
40
159
  if (!disabled && !loading && buttonRef.current) {
41
160
  const rect = buttonRef.current.getBoundingClientRect();
@@ -51,11 +170,33 @@ export const Button = ({ variant = "primary", size = "md", icon, iconPosition =
51
170
  }
52
171
  onClick?.(event);
53
172
  };
54
- return (_jsxs("button", { ref: buttonRef, className: classes, disabled: disabled || loading, onClick: handleClick, ...props, children: [_jsx("span", { className: "absolute inset-0 pointer-events-none", children: ripples.map((ripple) => (_jsx("span", { className: "absolute rounded-full opacity-40 flysoft-button-ripple", style: {
173
+ // Combinar estilos inline
174
+ const combinedStyles = { ...inlineStyles, ...hoverStyle };
175
+ return (_jsxs("button", { ref: buttonRef, className: classes, style: combinedStyles, disabled: disabled || loading, onClick: handleClick, onMouseEnter: (e) => {
176
+ if (variant === "primary" && !disabled && !loading) {
177
+ if (bg) {
178
+ const hoverBg = darkenColor(getColorValue(bg) || bg, 15);
179
+ e.currentTarget.style.backgroundColor = hoverBg;
180
+ }
181
+ else if (needsInlineStyles) {
182
+ const hoverBg = getCSSVariable(`--color-${color}-dark`);
183
+ e.currentTarget.style.backgroundColor = hoverBg;
184
+ }
185
+ }
186
+ }, onMouseLeave: (e) => {
187
+ if (variant === "primary") {
188
+ if (bg) {
189
+ e.currentTarget.style.backgroundColor = getColorValue(bg) || bg;
190
+ }
191
+ else if (needsInlineStyles) {
192
+ e.currentTarget.style.backgroundColor = getCSSVariable(`--color-${color}`);
193
+ }
194
+ }
195
+ }, ...props, children: [_jsx("span", { className: "absolute inset-0 pointer-events-none", children: ripples.map((ripple) => (_jsx("span", { className: "absolute rounded-full opacity-40 flysoft-button-ripple", style: {
55
196
  top: ripple.y,
56
197
  left: ripple.x,
57
198
  width: ripple.size,
58
199
  height: ripple.size,
59
200
  backgroundColor: rippleColor,
60
- } }, ripple.id))) }), _jsxs("span", { className: "relative inline-flex items-center justify-center", children: [loading && _jsx("i", { className: "fa fa-spinner fa-spin mr-2" }), icon && iconPosition === "left" && !loading && renderIcon(), children, icon && iconPosition === "right" && !loading && renderIcon()] })] }));
201
+ } }, ripple.id))) }), _jsxs("span", { className: "relative inline-flex items-center justify-center", children: [loading && (_jsx("i", { className: `${normalizeIconClass("fa-spinner fa-spin")} mr-2` })), icon && iconPosition === "left" && !loading && renderIcon(), children, icon && iconPosition === "right" && !loading && renderIcon()] })] }));
61
202
  };
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type" | "size"> {
3
+ label?: string;
4
+ labelPosition?: "left" | "right";
5
+ error?: string;
6
+ size?: "sm" | "md" | "lg";
7
+ /**
8
+ * Si es true, el checkbox será de solo lectura. No se podrá modificar pero se verá igual visualmente.
9
+ * Por defecto es false.
10
+ */
11
+ readOnly?: boolean;
12
+ }
13
+ export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
14
+ //# sourceMappingURL=Checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/form-controls/Checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,QAAQ,wFA0IpB,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ export const Checkbox = React.forwardRef(({ label, labelPosition = "right", error, size = "md", className = "", id, readOnly = false, onClick, onChange, ...props }, ref) => {
4
+ const checkboxId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
5
+ const sizeClasses = {
6
+ sm: "w-4 h-4",
7
+ md: "w-5 h-5",
8
+ lg: "w-6 h-6",
9
+ };
10
+ const labelSizeClasses = {
11
+ sm: "text-sm",
12
+ md: "text-base",
13
+ lg: "text-lg",
14
+ };
15
+ const checkboxClasses = `
16
+ ${sizeClasses[size]}
17
+ rounded border transition-colors focus:outline-none focus:ring-2 focus:ring-offset-0
18
+ cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed
19
+ border-[var(--color-border-default)]
20
+ checked:bg-[var(--color-primary)] checked:border-[var(--color-primary)]
21
+ focus:ring-[var(--color-primary)]
22
+ ${error
23
+ ? "border-[var(--color-border-error)] checked:border-[var(--color-border-error)] checked:bg-[var(--color-danger)]"
24
+ : ""}
25
+ ${className}
26
+ `;
27
+ const checkboxStyle = error
28
+ ? { accentColor: "var(--color-danger)" }
29
+ : { accentColor: "var(--color-primary)" };
30
+ const labelClasses = `
31
+ ${labelSizeClasses[size]}
32
+ font-[var(--font-default)] cursor-pointer select-none
33
+ ${props.disabled ? "opacity-50 cursor-not-allowed" : ""}
34
+ ${error
35
+ ? "text-[var(--color-danger)]"
36
+ : "text-[var(--color-text-primary)]"}
37
+ `;
38
+ const containerClasses = `
39
+ flex items-center gap-2
40
+ ${labelPosition === "left" ? "flex-row-reverse" : "flex-row"}
41
+ `;
42
+ // Prevenir cambios cuando está en modo readOnly
43
+ const handleClick = (e) => {
44
+ if (readOnly) {
45
+ e.preventDefault();
46
+ return false;
47
+ }
48
+ // Llamar al onClick original si existe
49
+ if (onClick) {
50
+ onClick(e);
51
+ }
52
+ };
53
+ const handleChange = (e) => {
54
+ if (readOnly) {
55
+ e.preventDefault();
56
+ return;
57
+ }
58
+ // Llamar al onChange original si existe
59
+ if (onChange) {
60
+ onChange(e);
61
+ }
62
+ };
63
+ const handleLabelClick = (e) => {
64
+ if (readOnly) {
65
+ e.preventDefault();
66
+ e.stopPropagation();
67
+ return false;
68
+ }
69
+ };
70
+ const handleLabelMouseDown = (e) => {
71
+ if (readOnly) {
72
+ e.preventDefault();
73
+ e.stopPropagation();
74
+ return false;
75
+ }
76
+ };
77
+ return (_jsxs("div", { className: "w-full", children: [_jsxs("div", { className: containerClasses, children: [_jsx("input", { ref: ref, type: "checkbox", id: checkboxId, className: checkboxClasses, style: checkboxStyle, readOnly: readOnly, onClick: handleClick, onChange: handleChange, ...props }), label && (_jsx("label", { htmlFor: readOnly ? undefined : checkboxId, className: labelClasses, onClick: handleLabelClick, onMouseDown: handleLabelMouseDown, children: label }))] }), error && (_jsx("p", { className: "mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]", children: error }))] }));
78
+ });
79
+ Checkbox.displayName = "Checkbox";
@@ -1,12 +1,32 @@
1
1
  import React from "react";
2
+ import { type Dayjs } from "dayjs";
2
3
  import type { InputProps } from "./Input";
3
4
  import type { DatePickerProps } from "./DatePicker";
4
5
  export type DateInputFormat = "dd/mm/yyyy" | "mm/dd/yyyy";
5
- export interface DateInputProps extends Omit<InputProps, "type" | "value" | "onChange"> {
6
- value?: Date | null;
7
- onChange?: (date: Date | null) => void;
6
+ export interface DateInputProps extends Omit<InputProps, "type" | "value" | "onChange" | "ref"> {
7
+ /**
8
+ * Valor de la fecha.
9
+ * En modo register con FormProvider: Dayjs | null (se guarda como Dayjs en el formulario)
10
+ * En modo register sin FormProvider: string ISO (se guarda como ISO string, se puede parsear a Dayjs)
11
+ * En modo Controller: Dayjs | null
12
+ */
13
+ value?: Dayjs | null | string;
14
+ /**
15
+ * Callback cuando cambia la fecha.
16
+ * En modo register: ChangeEventHandler (de register)
17
+ * En modo Controller: (date: Dayjs | null) => void
18
+ *
19
+ * NOTA: Para usar Dayjs directamente con register, el formulario debe estar envuelto en FormProvider.
20
+ * Sin FormProvider, el valor se guarda como ISO string y se puede parsear de vuelta a Dayjs usando normalizeToDayjs.
21
+ */
22
+ onChange?: ((date: Dayjs | null) => void) | React.ChangeEventHandler<HTMLInputElement>;
8
23
  format?: DateInputFormat;
9
24
  datePickerProps?: Omit<DatePickerProps, "value" | "onChange">;
25
+ /**
26
+ * Si es true, el input será de solo lectura. No se podrá modificar ni desplegar el DatePicker.
27
+ * Por defecto es false.
28
+ */
29
+ readOnly?: boolean;
10
30
  }
11
- export declare const DateInput: React.FC<DateInputProps>;
31
+ export declare const DateInput: React.ForwardRefExoticComponent<DateInputProps & React.RefAttributes<HTMLInputElement>>;
12
32
  //# sourceMappingURL=DateInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/components/form-controls/DateInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,YAAY,CAAC;AAE1D,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACvD,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;CAC/D;AAsFD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAuK9C,CAAC"}
1
+ {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/components/form-controls/DateInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAc,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,YAAY,CAAC;AAE1D,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CAAC;IAC/D;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,EACL,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,GAC9B,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC;IAC9D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA2HD,eAAO,MAAM,SAAS,yFAgmBrB,CAAC"}