flysoft-react-ui 1.2.3 → 1.2.5

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 (270) hide show
  1. package/AI_CONTEXT.md +1400 -217
  2. package/AI_INTEGRATION_GUIDE.md +343 -0
  3. package/INTEGRATION_GUIDE.md +60 -0
  4. package/README.md +5 -3
  5. package/dist/components/form-controls/Input.d.ts.map +1 -1
  6. package/dist/components/form-controls/index.d.ts +2 -2
  7. package/dist/components/form-controls/index.d.ts.map +1 -1
  8. package/dist/components/layout/Accordion.d.ts +1 -0
  9. package/dist/components/layout/Accordion.d.ts.map +1 -1
  10. package/dist/components/layout/DataTable.d.ts.map +1 -1
  11. package/dist/components/layout/DropdownMenu.d.ts +2 -1
  12. package/dist/components/layout/DropdownMenu.d.ts.map +1 -1
  13. package/dist/components/layout/DropdownPanel.d.ts +2 -1
  14. package/dist/components/layout/DropdownPanel.d.ts.map +1 -1
  15. package/dist/components/layout/Filter.d.ts +1 -0
  16. package/dist/components/layout/Filter.d.ts.map +1 -1
  17. package/dist/components/layout/Menu.d.ts +2 -1
  18. package/dist/components/layout/Menu.d.ts.map +1 -1
  19. package/dist/components/layout/TabsGroup.d.ts +1 -0
  20. package/dist/components/layout/TabsGroup.d.ts.map +1 -1
  21. package/dist/index.css +1 -1
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +11889 -24
  25. package/dist/index.js.map +1 -1
  26. package/dist/templates/forms/ContactForm.d.ts +1 -0
  27. package/dist/templates/forms/ContactForm.d.ts.map +1 -1
  28. package/dist/templates/forms/LoginForm.d.ts +1 -0
  29. package/dist/templates/forms/LoginForm.d.ts.map +1 -1
  30. package/dist/templates/forms/RegistrationForm.d.ts +1 -0
  31. package/dist/templates/forms/RegistrationForm.d.ts.map +1 -1
  32. package/dist/templates/layouts/DashboardLayout.d.ts +1 -0
  33. package/dist/templates/layouts/DashboardLayout.d.ts.map +1 -1
  34. package/dist/templates/layouts/SidebarLayout.d.ts +1 -0
  35. package/dist/templates/layouts/SidebarLayout.d.ts.map +1 -1
  36. package/dist/templates/patterns/FormPattern.d.ts +1 -0
  37. package/dist/templates/patterns/FormPattern.d.ts.map +1 -1
  38. package/dist/templates/patterns/ListPattern.d.ts +77 -0
  39. package/dist/templates/patterns/ListPattern.d.ts.map +1 -0
  40. package/package.json +6 -3
  41. package/dist/App.d.ts +0 -4
  42. package/dist/App.d.ts.map +0 -1
  43. package/dist/App.js +0 -30
  44. package/dist/components/ThemeSwitcher.js +0 -12
  45. package/dist/components/form-controls/AutocompleteInput.js +0 -680
  46. package/dist/components/form-controls/Button.js +0 -211
  47. package/dist/components/form-controls/Checkbox.js +0 -79
  48. package/dist/components/form-controls/CurrencyInput.js +0 -106
  49. package/dist/components/form-controls/DateInput.js +0 -578
  50. package/dist/components/form-controls/DatePicker.js +0 -144
  51. package/dist/components/form-controls/Input.js +0 -35
  52. package/dist/components/form-controls/LinkButton.js +0 -248
  53. package/dist/components/form-controls/Pagination.js +0 -23
  54. package/dist/components/form-controls/RadioButtonGroup.js +0 -220
  55. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts +0 -68
  56. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts.map +0 -1
  57. package/dist/components/form-controls/SearchSelectInput-OLD.js +0 -962
  58. package/dist/components/form-controls/SearchSelectInput.js +0 -336
  59. package/dist/components/form-controls/index.js +0 -11
  60. package/dist/components/index.js +0 -7
  61. package/dist/components/layout/Accordion.js +0 -67
  62. package/dist/components/layout/AppLayout.js +0 -230
  63. package/dist/components/layout/Card.js +0 -54
  64. package/dist/components/layout/Collection.js +0 -18
  65. package/dist/components/layout/DataField.js +0 -38
  66. package/dist/components/layout/DataTable.js +0 -164
  67. package/dist/components/layout/DropdownMenu.js +0 -176
  68. package/dist/components/layout/DropdownPanel.js +0 -162
  69. package/dist/components/layout/Filter.js +0 -629
  70. package/dist/components/layout/Menu.js +0 -21
  71. package/dist/components/layout/TabPanel.js +0 -11
  72. package/dist/components/layout/TabsGroup.js +0 -52
  73. package/dist/components/layout/index.js +0 -12
  74. package/dist/components/utils/Avatar.js +0 -77
  75. package/dist/components/utils/Badge.js +0 -151
  76. package/dist/components/utils/Dialog.js +0 -44
  77. package/dist/components/utils/FiltersDialog.js +0 -104
  78. package/dist/components/utils/Loader.js +0 -44
  79. package/dist/components/utils/RoadMap.js +0 -139
  80. package/dist/components/utils/Skeleton.js +0 -10
  81. package/dist/components/utils/Snackbar.js +0 -136
  82. package/dist/components/utils/SnackbarContainer.js +0 -26
  83. package/dist/components/utils/iconUtils.js +0 -40
  84. package/dist/components/utils/index.js +0 -9
  85. package/dist/contexts/AppLayoutContext.js +0 -104
  86. package/dist/contexts/AuthContext.js +0 -224
  87. package/dist/contexts/CrudContext.js +0 -333
  88. package/dist/contexts/SnackbarContext.js +0 -41
  89. package/dist/contexts/ThemeContext.js +0 -197
  90. package/dist/contexts/index.js +0 -13
  91. package/dist/contexts/presets.js +0 -311
  92. package/dist/contexts/types.js +0 -1
  93. package/dist/docs/AccordionDocs.d.ts +0 -4
  94. package/dist/docs/AccordionDocs.d.ts.map +0 -1
  95. package/dist/docs/AccordionDocs.js +0 -21
  96. package/dist/docs/AuthDocs.tsx/AuthDocs.d.ts +0 -13
  97. package/dist/docs/AuthDocs.tsx/AuthDocs.d.ts.map +0 -1
  98. package/dist/docs/AuthDocs.tsx/AuthDocs.js +0 -18
  99. package/dist/docs/AuthDocs.tsx/AuthDocsContent.d.ts +0 -2
  100. package/dist/docs/AuthDocs.tsx/AuthDocsContent.d.ts.map +0 -1
  101. package/dist/docs/AuthDocs.tsx/AuthDocsContent.js +0 -22
  102. package/dist/docs/AuthDocs.tsx/mockAuthService.d.ts +0 -24
  103. package/dist/docs/AuthDocs.tsx/mockAuthService.d.ts.map +0 -1
  104. package/dist/docs/AuthDocs.tsx/mockAuthService.js +0 -78
  105. package/dist/docs/AutocompleteInputDocs.d.ts +0 -4
  106. package/dist/docs/AutocompleteInputDocs.d.ts.map +0 -1
  107. package/dist/docs/AutocompleteInputDocs.js +0 -84
  108. package/dist/docs/AvatarDocs.d.ts +0 -4
  109. package/dist/docs/AvatarDocs.d.ts.map +0 -1
  110. package/dist/docs/AvatarDocs.js +0 -7
  111. package/dist/docs/BadgeDocs.d.ts +0 -4
  112. package/dist/docs/BadgeDocs.d.ts.map +0 -1
  113. package/dist/docs/BadgeDocs.js +0 -9
  114. package/dist/docs/ButtonDocs.d.ts +0 -4
  115. package/dist/docs/ButtonDocs.d.ts.map +0 -1
  116. package/dist/docs/ButtonDocs.js +0 -7
  117. package/dist/docs/CardDocs.d.ts +0 -4
  118. package/dist/docs/CardDocs.d.ts.map +0 -1
  119. package/dist/docs/CardDocs.js +0 -22
  120. package/dist/docs/CheckboxDocs.d.ts +0 -4
  121. package/dist/docs/CheckboxDocs.d.ts.map +0 -1
  122. package/dist/docs/CheckboxDocs.js +0 -7
  123. package/dist/docs/CurrencyInputDocs.d.ts +0 -4
  124. package/dist/docs/CurrencyInputDocs.d.ts.map +0 -1
  125. package/dist/docs/CurrencyInputDocs.js +0 -22
  126. package/dist/docs/DataFieldDocs.d.ts +0 -4
  127. package/dist/docs/DataFieldDocs.d.ts.map +0 -1
  128. package/dist/docs/DataFieldDocs.js +0 -7
  129. package/dist/docs/DataTableDocs.d.ts +0 -4
  130. package/dist/docs/DataTableDocs.d.ts.map +0 -1
  131. package/dist/docs/DataTableDocs.js +0 -244
  132. package/dist/docs/DateInputDocs.d.ts +0 -5
  133. package/dist/docs/DateInputDocs.d.ts.map +0 -1
  134. package/dist/docs/DateInputDocs.js +0 -19
  135. package/dist/docs/DatePickerDocs.d.ts +0 -5
  136. package/dist/docs/DatePickerDocs.d.ts.map +0 -1
  137. package/dist/docs/DatePickerDocs.js +0 -16
  138. package/dist/docs/DialogDocs.d.ts +0 -4
  139. package/dist/docs/DialogDocs.d.ts.map +0 -1
  140. package/dist/docs/DialogDocs.js +0 -13
  141. package/dist/docs/DocAdmin.d.ts +0 -4
  142. package/dist/docs/DocAdmin.d.ts.map +0 -1
  143. package/dist/docs/DocAdmin.js +0 -68
  144. package/dist/docs/DocsMenu.d.ts +0 -2
  145. package/dist/docs/DocsMenu.d.ts.map +0 -1
  146. package/dist/docs/DocsMenu.js +0 -5
  147. package/dist/docs/DocsRouter.d.ts +0 -4
  148. package/dist/docs/DocsRouter.d.ts.map +0 -1
  149. package/dist/docs/DocsRouter.js +0 -39
  150. package/dist/docs/DropdownMenuDocs.d.ts +0 -4
  151. package/dist/docs/DropdownMenuDocs.d.ts.map +0 -1
  152. package/dist/docs/DropdownMenuDocs.js +0 -66
  153. package/dist/docs/DropdownPanelDocs.d.ts +0 -4
  154. package/dist/docs/DropdownPanelDocs.d.ts.map +0 -1
  155. package/dist/docs/DropdownPanelDocs.js +0 -7
  156. package/dist/docs/ExampleFormDocs.d.ts +0 -4
  157. package/dist/docs/ExampleFormDocs.d.ts.map +0 -1
  158. package/dist/docs/ExampleFormDocs.js +0 -153
  159. package/dist/docs/FilterDocs.d.ts +0 -4
  160. package/dist/docs/FilterDocs.d.ts.map +0 -1
  161. package/dist/docs/FilterDocs.js +0 -130
  162. package/dist/docs/InputDocs.d.ts +0 -4
  163. package/dist/docs/InputDocs.d.ts.map +0 -1
  164. package/dist/docs/InputDocs.js +0 -17
  165. package/dist/docs/LinkButtonDocs.d.ts +0 -4
  166. package/dist/docs/LinkButtonDocs.d.ts.map +0 -1
  167. package/dist/docs/LinkButtonDocs.js +0 -7
  168. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts +0 -2
  169. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts.map +0 -1
  170. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.js +0 -47
  171. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts +0 -2
  172. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts.map +0 -1
  173. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.js +0 -34
  174. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts +0 -2
  175. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts.map +0 -1
  176. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.js +0 -66
  177. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts +0 -2
  178. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts.map +0 -1
  179. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.js +0 -7
  180. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts +0 -10
  181. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts.map +0 -1
  182. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.js +0 -39
  183. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts +0 -2
  184. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts.map +0 -1
  185. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.js +0 -57
  186. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts +0 -9
  187. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts.map +0 -1
  188. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.js +0 -30
  189. package/dist/docs/LoaderDocs.d.ts +0 -4
  190. package/dist/docs/LoaderDocs.d.ts.map +0 -1
  191. package/dist/docs/LoaderDocs.js +0 -33
  192. package/dist/docs/MenuDocs.d.ts +0 -4
  193. package/dist/docs/MenuDocs.d.ts.map +0 -1
  194. package/dist/docs/MenuDocs.js +0 -26
  195. package/dist/docs/PaginationDocs.d.ts +0 -4
  196. package/dist/docs/PaginationDocs.d.ts.map +0 -1
  197. package/dist/docs/PaginationDocs.js +0 -38
  198. package/dist/docs/RadioButtonGroupDocs.d.ts +0 -4
  199. package/dist/docs/RadioButtonGroupDocs.d.ts.map +0 -1
  200. package/dist/docs/RadioButtonGroupDocs.js +0 -46
  201. package/dist/docs/RoadMapDocs.d.ts +0 -4
  202. package/dist/docs/RoadMapDocs.d.ts.map +0 -1
  203. package/dist/docs/RoadMapDocs.js +0 -171
  204. package/dist/docs/SearchSelectInputDocs.d.ts +0 -4
  205. package/dist/docs/SearchSelectInputDocs.d.ts.map +0 -1
  206. package/dist/docs/SearchSelectInputDocs.js +0 -168
  207. package/dist/docs/SkeletonDocs.d.ts +0 -4
  208. package/dist/docs/SkeletonDocs.d.ts.map +0 -1
  209. package/dist/docs/SkeletonDocs.js +0 -7
  210. package/dist/docs/SnackbarDocs.d.ts +0 -4
  211. package/dist/docs/SnackbarDocs.d.ts.map +0 -1
  212. package/dist/docs/SnackbarDocs.js +0 -69
  213. package/dist/docs/TabsGroupDocs.d.ts +0 -4
  214. package/dist/docs/TabsGroupDocs.d.ts.map +0 -1
  215. package/dist/docs/TabsGroupDocs.js +0 -38
  216. package/dist/docs/ThemeSwitcherDocs.d.ts +0 -4
  217. package/dist/docs/ThemeSwitcherDocs.d.ts.map +0 -1
  218. package/dist/docs/ThemeSwitcherDocs.js +0 -11
  219. package/dist/docs/docMockServices/empresaService.d.ts +0 -38
  220. package/dist/docs/docMockServices/empresaService.d.ts.map +0 -1
  221. package/dist/docs/docMockServices/empresaService.js +0 -125
  222. package/dist/docs/docMockServices/index.d.ts +0 -9
  223. package/dist/docs/docMockServices/index.d.ts.map +0 -1
  224. package/dist/docs/docMockServices/index.js +0 -8
  225. package/dist/docs/docMockServices/initialData.d.ts +0 -6
  226. package/dist/docs/docMockServices/initialData.d.ts.map +0 -1
  227. package/dist/docs/docMockServices/initialData.js +0 -132
  228. package/dist/docs/docMockServices/interfaces.d.ts +0 -38
  229. package/dist/docs/docMockServices/interfaces.d.ts.map +0 -1
  230. package/dist/docs/docMockServices/interfaces.js +0 -1
  231. package/dist/docs/docMockServices/personaEmpresaService.d.ts +0 -43
  232. package/dist/docs/docMockServices/personaEmpresaService.d.ts.map +0 -1
  233. package/dist/docs/docMockServices/personaEmpresaService.js +0 -151
  234. package/dist/docs/docMockServices/personaService.d.ts +0 -39
  235. package/dist/docs/docMockServices/personaService.d.ts.map +0 -1
  236. package/dist/docs/docMockServices/personaService.js +0 -190
  237. package/dist/helpers/currencyFormat.js +0 -3
  238. package/dist/helpers/getErrorMessage.js +0 -13
  239. package/dist/helpers/getInitialLetters.js +0 -5
  240. package/dist/helpers/getQueryString.js +0 -13
  241. package/dist/helpers/index.js +0 -9
  242. package/dist/helpers/mappers.js +0 -27
  243. package/dist/helpers/nameValueArrayToObject.js +0 -3
  244. package/dist/helpers/objectToQueryString.js +0 -3
  245. package/dist/helpers/queryStringToObject.js +0 -13
  246. package/dist/helpers/regularExpressions.js +0 -5
  247. package/dist/hooks/index.js +0 -6
  248. package/dist/hooks/useAsyncRequest.js +0 -53
  249. package/dist/hooks/useBreakpoint.js +0 -59
  250. package/dist/hooks/useElementScroll.js +0 -58
  251. package/dist/hooks/useEnum.js +0 -21
  252. package/dist/hooks/useGlobalThemeStyles.js +0 -40
  253. package/dist/hooks/useThemeOverride.js +0 -99
  254. package/dist/interfaces/index.js +0 -1
  255. package/dist/interfaces/name-value.interface.js +0 -1
  256. package/dist/interfaces/pagination.interface.js +0 -1
  257. package/dist/main.d.ts +0 -2
  258. package/dist/main.d.ts.map +0 -1
  259. package/dist/main.js +0 -6
  260. package/dist/services/apiClient.js +0 -216
  261. package/dist/services/index.js +0 -1
  262. package/dist/styles.d.ts +0 -2
  263. package/dist/styles.d.ts.map +0 -1
  264. package/dist/styles.js +0 -3
  265. package/dist/templates/forms/ContactForm.js +0 -58
  266. package/dist/templates/forms/LoginForm.js +0 -36
  267. package/dist/templates/forms/RegistrationForm.js +0 -54
  268. package/dist/templates/layouts/DashboardLayout.js +0 -26
  269. package/dist/templates/layouts/SidebarLayout.js +0 -28
  270. package/dist/templates/patterns/FormPattern.js +0 -68
@@ -1,211 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import React from "react";
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 }) => {
31
- const buttonRef = React.useRef(null);
32
- const [ripples, setRipples] = React.useState([]);
33
- const baseClasses = `
34
- inline-flex items-center justify-center font-medium rounded-sm transition-colors
35
- cursor-pointer relative overflow-hidden
36
- disabled:opacity-50 disabled:cursor-not-allowed
37
- font-[var(--font-default)]
38
- flysoft-button-reset
39
- `;
40
- // Mapeo de clases para variant primary con color primary (usa Tailwind)
41
- const getVariantClasses = (variantType, colorType) => {
42
- // Solo usar clases Tailwind para primary con color primary
43
- if (colorType === "primary") {
44
- if (variantType === "primary") {
45
- return `
46
- bg-primary text-primary-contrast
47
- hover:bg-primary-dark focus:ring-primary
48
- `;
49
- }
50
- if (variantType === "secondary") {
51
- return `
52
- bg-primary-light/10 text-primary border border-primary/20
53
- hover:bg-primary-light/20 focus:ring-primary
54
- `;
55
- }
56
- if (variantType === "outline") {
57
- return `
58
- border border-primary text-primary bg-transparent
59
- hover:bg-primary hover:text-primary-contrast focus:ring-primary
60
- `;
61
- }
62
- if (variantType === "ghost") {
63
- return `
64
- text-primary bg-transparent
65
- hover:bg-primary/10 focus:ring-primary
66
- `;
67
- }
68
- // Default for primary colorType if variantType not matched
69
- return `focus:ring-2 focus:ring-offset-2`;
70
- }
71
- // Para otros colores, retornar clases base sin color (se aplicarán con estilos inline)
72
- if (variantType === "primary") {
73
- return `focus:ring-2 focus:ring-offset-2`;
74
- }
75
- else if (variantType === "outline") {
76
- return `border bg-transparent hover:bg-[var(--color-bg-secondary)] focus:ring-2 focus:ring-offset-2`;
77
- }
78
- else {
79
- return `bg-transparent border-none hover:bg-[var(--color-bg-secondary)] focus:ring-2 focus:ring-offset-2`;
80
- }
81
- };
82
- // Si se proporciona bg personalizado, no usar las clases de variante
83
- const variantClasses = bg ? "" : getVariantClasses(variant, color);
84
- // Determinar si necesitamos usar estilos inline para colores del sistema
85
- const needsInlineStyles = !bg && color !== "primary";
86
- const sizeClasses = {
87
- sm: `${children ? "px-3 py-1.5" : "p-1.5"} text-sm`,
88
- md: `${children ? "px-4 py-2" : "p-2"} text-base`,
89
- lg: `${children ? "px-6 py-3" : "p-3"} text-lg`,
90
- };
91
- // Clases adicionales para variant outline cuando hay bg personalizado
92
- const outlineClasses = bg && variant === "outline" ? "border" : "";
93
- const classes = `${baseClasses} ${variantClasses} ${sizeClasses[size]} ${outlineClasses} ${className}`;
94
- // Función para obtener el valor de una variable CSS
95
- const getCSSVariable = (varName) => {
96
- if (typeof window !== "undefined") {
97
- const value = getComputedStyle(document.documentElement)
98
- .getPropertyValue(varName)
99
- .trim();
100
- // Si no se encuentra la variable, intentar con el prefijo flysoft
101
- if (!value && varName.startsWith("--color-")) {
102
- const flysoftVarName = varName.replace("--color-", "--flysoft-");
103
- return (getComputedStyle(document.documentElement)
104
- .getPropertyValue(flysoftVarName)
105
- .trim() || value);
106
- }
107
- return value;
108
- }
109
- return "";
110
- };
111
- // Estilos inline para colores personalizados o colores del sistema (no primary)
112
- const inlineStyles = bg
113
- ? {
114
- backgroundColor: variant === "primary" ? getColorValue(bg) || bg : undefined,
115
- color: getColorValue(textColor) ||
116
- textColor ||
117
- (variant === "primary" ? "#ffffff" : getColorValue(bg) || bg),
118
- borderColor: variant === "outline" ? getColorValue(bg) || bg : undefined,
119
- ...(variant === "ghost" && {
120
- color: getColorValue(textColor) || textColor || getColorValue(bg) || bg,
121
- }),
122
- }
123
- : needsInlineStyles
124
- ? {
125
- ...(variant === "primary" && {
126
- backgroundColor: getCSSVariable(`--color-${color}`),
127
- color: getCSSVariable(`--color-${color}-contrast`) || "#ffffff",
128
- }),
129
- ...(variant === "outline" && {
130
- borderColor: getCSSVariable(`--color-${color}`),
131
- color: getCSSVariable(`--color-${color}`),
132
- }),
133
- ...(variant === "ghost" && {
134
- color: getCSSVariable(`--color-${color}`),
135
- }),
136
- }
137
- : {};
138
- // Función para oscurecer un color (para hover en variant primary con bg personalizado)
139
- const darkenColor = (color, percent) => {
140
- const hex = color.replace("#", "");
141
- const num = parseInt(hex, 16);
142
- const r = Math.max(0, Math.floor((num >> 16) * (1 - percent / 100)));
143
- const g = Math.max(0, Math.floor(((num >> 8) & 0x00ff) * (1 - percent / 100)));
144
- const b = Math.max(0, Math.floor((num & 0x0000ff) * (1 - percent / 100)));
145
- return `#${((r << 16) | (g << 8) | b).toString(16).padStart(6, "0")}`;
146
- };
147
- // Agregar hover style cuando hay bg personalizado y variant es primary
148
- const hoverStyle = bg && variant === "primary" && !disabled && !loading
149
- ? {
150
- "--hover-bg": darkenColor(getColorValue(bg) || bg, 15),
151
- }
152
- : {};
153
- const renderIcon = () => {
154
- if (!icon)
155
- return null;
156
- const iconClasses = size === "sm" ? "w-4 h-4" : size === "md" ? "w-5 h-5" : "w-6 h-6";
157
- return (_jsx("i", { className: `${normalizeIconClass(icon)} ${iconClasses} flex items-center justify-center ${children ? (iconPosition === "right" ? "ml-2" : "mr-2") : ""}` }));
158
- };
159
- // Determinar el color del ripple basado en el variant y si hay bg personalizado
160
- const rippleColor = bg
161
- ? variant === "primary"
162
- ? "rgba(255, 255, 255, 0.45)"
163
- : "rgba(0, 0, 0, 0.15)"
164
- : variant === "primary"
165
- ? "rgba(255, 255, 255, 0.45)"
166
- : "rgba(0, 0, 0, 0.15)";
167
- const handleClick = (event) => {
168
- if (!disabled && !loading && buttonRef.current) {
169
- const rect = buttonRef.current.getBoundingClientRect();
170
- const size = Math.max(rect.width, rect.height) * 1.2;
171
- const x = event.clientX - rect.left;
172
- const y = event.clientY - rect.top;
173
- const id = window.performance.now();
174
- const newRipple = { id, x, y, size };
175
- setRipples((prev) => [...prev, newRipple]);
176
- window.setTimeout(() => {
177
- setRipples((prev) => prev.filter((ripple) => ripple.id !== id));
178
- }, 600);
179
- }
180
- onClick?.(event);
181
- };
182
- // Combinar estilos inline
183
- const combinedStyles = { ...inlineStyles, ...hoverStyle };
184
- return (_jsxs("button", { ref: buttonRef, className: classes, style: combinedStyles, disabled: disabled || loading, onClick: handleClick, onMouseEnter: (e) => {
185
- if (variant === "primary" && !disabled && !loading) {
186
- if (bg) {
187
- const hoverBg = darkenColor(getColorValue(bg) || bg, 15);
188
- e.currentTarget.style.backgroundColor = hoverBg;
189
- }
190
- else if (needsInlineStyles) {
191
- const hoverBg = getCSSVariable(`--color-${color}-dark`);
192
- e.currentTarget.style.backgroundColor = hoverBg;
193
- }
194
- }
195
- }, onMouseLeave: (e) => {
196
- if (variant === "primary") {
197
- if (bg) {
198
- e.currentTarget.style.backgroundColor = getColorValue(bg) || bg;
199
- }
200
- else if (needsInlineStyles) {
201
- e.currentTarget.style.backgroundColor = getCSSVariable(`--color-${color}`);
202
- }
203
- }
204
- }, ...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: {
205
- top: ripple.y,
206
- left: ripple.x,
207
- width: ripple.size,
208
- height: ripple.size,
209
- backgroundColor: rippleColor,
210
- } }, 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()] })] }));
211
- };
@@ -1,79 +0,0 @@
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", { 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,106 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import React, { useState, useEffect, useCallback, useMemo } from "react";
3
- import { Input } from "./Input";
4
- import { useFormContext } from "react-hook-form";
5
- /**
6
- * Componente de entrada para valores monetarios.
7
- * Muestra el valor formateado con separadores de miles (puntos) y decimales (comas).
8
- * Al recibir el foco, quita los puntos para facilitar la edición.
9
- */
10
- export const CurrencyInput = React.forwardRef(({ value, onChange, onFocus, onBlur, ...props }, ref) => {
11
- const [isFocused, setIsFocused] = useState(false);
12
- const [displayValue, setDisplayValue] = useState("");
13
- // Detectar si estamos en modo register (si viene 'name')
14
- const isRegisterMode = useMemo(() => {
15
- return "name" in props && props.name !== undefined;
16
- }, [props]);
17
- const fieldName = props.name;
18
- // Obtener el contexto de react-hook-form si existe
19
- const formContext = useFormContext();
20
- const setValue = formContext?.setValue;
21
- // Formateador para mostrar el valor final (con puntos y comas)
22
- const formatToCurrency = useCallback((val) => {
23
- if (val === null || val === undefined || isNaN(val))
24
- return "";
25
- return new Intl.NumberFormat("es-AR", {
26
- minimumFractionDigits: 2,
27
- maximumFractionDigits: 2,
28
- }).format(val);
29
- }, []);
30
- // Formateador para cuando tiene el foco (sin puntos de miles)
31
- const formatToFocus = useCallback((val) => {
32
- if (val === null || val === undefined || isNaN(val))
33
- return "";
34
- return new Intl.NumberFormat("es-AR", {
35
- minimumFractionDigits: 2,
36
- maximumFractionDigits: 2,
37
- useGrouping: false,
38
- }).format(val);
39
- }, []);
40
- // Función para parsear el string de vuelta a número
41
- const parseToNumeric = useCallback((val) => {
42
- if (!val || val.trim() === "")
43
- return null;
44
- // Reemplazamos la coma por punto para que parseFloat funcione correctamente
45
- const cleanValue = val.replace(/\./g, "").replace(",", ".");
46
- const numeric = parseFloat(cleanValue);
47
- return isNaN(numeric) ? null : numeric;
48
- }, []);
49
- // Valor actual a usar (del prop value o del formulario)
50
- const numericValue = useMemo(() => {
51
- if (isRegisterMode && formContext && fieldName) {
52
- return formContext.watch(fieldName);
53
- }
54
- return value;
55
- }, [isRegisterMode, formContext, fieldName, value]);
56
- // Sincronizar el valor externo con el estado interno cuando no hay foco
57
- useEffect(() => {
58
- if (!isFocused) {
59
- setDisplayValue(formatToCurrency(numericValue));
60
- }
61
- }, [numericValue, isFocused, formatToCurrency]);
62
- const handleFocus = (e) => {
63
- setIsFocused(true);
64
- // Al ganar foco, mostramos el valor sin separadores de miles
65
- setDisplayValue(formatToFocus(numericValue));
66
- if (onFocus)
67
- onFocus(e);
68
- };
69
- const handleBlur = (e) => {
70
- setIsFocused(false);
71
- const numericVal = parseToNumeric(displayValue);
72
- // Notificamos el cambio
73
- if (isRegisterMode && setValue && fieldName) {
74
- // Si estamos en modo register con FormProvider, usamos setValue para guardar el número
75
- setValue(fieldName, numericVal, {
76
- shouldValidate: true,
77
- shouldDirty: true,
78
- shouldTouch: true,
79
- });
80
- }
81
- else if (onChange) {
82
- // Si no, llamamos al onChange tradicional
83
- onChange(numericVal);
84
- }
85
- // Formateamos el valor final para mostrarlo al perder el foco
86
- setDisplayValue(formatToCurrency(numericVal));
87
- if (onBlur)
88
- onBlur(e);
89
- };
90
- const handleChange = (e) => {
91
- let val = e.target.value;
92
- // Solo permitimos números y una sola coma
93
- // Si el usuario presiona punto, lo convertimos a coma para facilitar la entrada
94
- val = val.replace(/\./g, ",");
95
- // Limpiamos caracteres no permitidos
96
- val = val.replace(/[^0-9,]/g, "");
97
- // Aseguramos que solo haya una coma
98
- const parts = val.split(",");
99
- if (parts.length > 2) {
100
- val = parts[0] + "," + parts.slice(1).join("");
101
- }
102
- setDisplayValue(val);
103
- };
104
- return (_jsx(Input, { ...props, ref: ref, type: "text", value: displayValue, onChange: handleChange, onFocus: handleFocus, onBlur: handleBlur }));
105
- });
106
- CurrencyInput.displayName = "CurrencyInput";