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.
- package/AI_CONTEXT.md +1400 -217
- package/AI_INTEGRATION_GUIDE.md +343 -0
- package/INTEGRATION_GUIDE.md +60 -0
- package/README.md +5 -3
- package/dist/components/form-controls/Input.d.ts.map +1 -1
- package/dist/components/form-controls/index.d.ts +2 -2
- package/dist/components/form-controls/index.d.ts.map +1 -1
- package/dist/components/layout/Accordion.d.ts +1 -0
- package/dist/components/layout/Accordion.d.ts.map +1 -1
- package/dist/components/layout/DataTable.d.ts.map +1 -1
- package/dist/components/layout/DropdownMenu.d.ts +2 -1
- package/dist/components/layout/DropdownMenu.d.ts.map +1 -1
- package/dist/components/layout/DropdownPanel.d.ts +2 -1
- package/dist/components/layout/DropdownPanel.d.ts.map +1 -1
- package/dist/components/layout/Filter.d.ts +1 -0
- package/dist/components/layout/Filter.d.ts.map +1 -1
- package/dist/components/layout/Menu.d.ts +2 -1
- package/dist/components/layout/Menu.d.ts.map +1 -1
- package/dist/components/layout/TabsGroup.d.ts +1 -0
- package/dist/components/layout/TabsGroup.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11889 -24
- package/dist/index.js.map +1 -1
- package/dist/templates/forms/ContactForm.d.ts +1 -0
- package/dist/templates/forms/ContactForm.d.ts.map +1 -1
- package/dist/templates/forms/LoginForm.d.ts +1 -0
- package/dist/templates/forms/LoginForm.d.ts.map +1 -1
- package/dist/templates/forms/RegistrationForm.d.ts +1 -0
- package/dist/templates/forms/RegistrationForm.d.ts.map +1 -1
- package/dist/templates/layouts/DashboardLayout.d.ts +1 -0
- package/dist/templates/layouts/DashboardLayout.d.ts.map +1 -1
- package/dist/templates/layouts/SidebarLayout.d.ts +1 -0
- package/dist/templates/layouts/SidebarLayout.d.ts.map +1 -1
- package/dist/templates/patterns/FormPattern.d.ts +1 -0
- package/dist/templates/patterns/FormPattern.d.ts.map +1 -1
- package/dist/templates/patterns/ListPattern.d.ts +77 -0
- package/dist/templates/patterns/ListPattern.d.ts.map +1 -0
- package/package.json +6 -3
- package/dist/App.d.ts +0 -4
- package/dist/App.d.ts.map +0 -1
- package/dist/App.js +0 -30
- package/dist/components/ThemeSwitcher.js +0 -12
- package/dist/components/form-controls/AutocompleteInput.js +0 -680
- package/dist/components/form-controls/Button.js +0 -211
- package/dist/components/form-controls/Checkbox.js +0 -79
- package/dist/components/form-controls/CurrencyInput.js +0 -106
- package/dist/components/form-controls/DateInput.js +0 -578
- package/dist/components/form-controls/DatePicker.js +0 -144
- package/dist/components/form-controls/Input.js +0 -35
- package/dist/components/form-controls/LinkButton.js +0 -248
- package/dist/components/form-controls/Pagination.js +0 -23
- package/dist/components/form-controls/RadioButtonGroup.js +0 -220
- package/dist/components/form-controls/SearchSelectInput-OLD.d.ts +0 -68
- package/dist/components/form-controls/SearchSelectInput-OLD.d.ts.map +0 -1
- package/dist/components/form-controls/SearchSelectInput-OLD.js +0 -962
- package/dist/components/form-controls/SearchSelectInput.js +0 -336
- package/dist/components/form-controls/index.js +0 -11
- package/dist/components/index.js +0 -7
- package/dist/components/layout/Accordion.js +0 -67
- package/dist/components/layout/AppLayout.js +0 -230
- package/dist/components/layout/Card.js +0 -54
- package/dist/components/layout/Collection.js +0 -18
- package/dist/components/layout/DataField.js +0 -38
- package/dist/components/layout/DataTable.js +0 -164
- package/dist/components/layout/DropdownMenu.js +0 -176
- package/dist/components/layout/DropdownPanel.js +0 -162
- package/dist/components/layout/Filter.js +0 -629
- package/dist/components/layout/Menu.js +0 -21
- package/dist/components/layout/TabPanel.js +0 -11
- package/dist/components/layout/TabsGroup.js +0 -52
- package/dist/components/layout/index.js +0 -12
- package/dist/components/utils/Avatar.js +0 -77
- package/dist/components/utils/Badge.js +0 -151
- package/dist/components/utils/Dialog.js +0 -44
- package/dist/components/utils/FiltersDialog.js +0 -104
- package/dist/components/utils/Loader.js +0 -44
- package/dist/components/utils/RoadMap.js +0 -139
- package/dist/components/utils/Skeleton.js +0 -10
- package/dist/components/utils/Snackbar.js +0 -136
- package/dist/components/utils/SnackbarContainer.js +0 -26
- package/dist/components/utils/iconUtils.js +0 -40
- package/dist/components/utils/index.js +0 -9
- package/dist/contexts/AppLayoutContext.js +0 -104
- package/dist/contexts/AuthContext.js +0 -224
- package/dist/contexts/CrudContext.js +0 -333
- package/dist/contexts/SnackbarContext.js +0 -41
- package/dist/contexts/ThemeContext.js +0 -197
- package/dist/contexts/index.js +0 -13
- package/dist/contexts/presets.js +0 -311
- package/dist/contexts/types.js +0 -1
- package/dist/docs/AccordionDocs.d.ts +0 -4
- package/dist/docs/AccordionDocs.d.ts.map +0 -1
- package/dist/docs/AccordionDocs.js +0 -21
- package/dist/docs/AuthDocs.tsx/AuthDocs.d.ts +0 -13
- package/dist/docs/AuthDocs.tsx/AuthDocs.d.ts.map +0 -1
- package/dist/docs/AuthDocs.tsx/AuthDocs.js +0 -18
- package/dist/docs/AuthDocs.tsx/AuthDocsContent.d.ts +0 -2
- package/dist/docs/AuthDocs.tsx/AuthDocsContent.d.ts.map +0 -1
- package/dist/docs/AuthDocs.tsx/AuthDocsContent.js +0 -22
- package/dist/docs/AuthDocs.tsx/mockAuthService.d.ts +0 -24
- package/dist/docs/AuthDocs.tsx/mockAuthService.d.ts.map +0 -1
- package/dist/docs/AuthDocs.tsx/mockAuthService.js +0 -78
- package/dist/docs/AutocompleteInputDocs.d.ts +0 -4
- package/dist/docs/AutocompleteInputDocs.d.ts.map +0 -1
- package/dist/docs/AutocompleteInputDocs.js +0 -84
- package/dist/docs/AvatarDocs.d.ts +0 -4
- package/dist/docs/AvatarDocs.d.ts.map +0 -1
- package/dist/docs/AvatarDocs.js +0 -7
- package/dist/docs/BadgeDocs.d.ts +0 -4
- package/dist/docs/BadgeDocs.d.ts.map +0 -1
- package/dist/docs/BadgeDocs.js +0 -9
- package/dist/docs/ButtonDocs.d.ts +0 -4
- package/dist/docs/ButtonDocs.d.ts.map +0 -1
- package/dist/docs/ButtonDocs.js +0 -7
- package/dist/docs/CardDocs.d.ts +0 -4
- package/dist/docs/CardDocs.d.ts.map +0 -1
- package/dist/docs/CardDocs.js +0 -22
- package/dist/docs/CheckboxDocs.d.ts +0 -4
- package/dist/docs/CheckboxDocs.d.ts.map +0 -1
- package/dist/docs/CheckboxDocs.js +0 -7
- package/dist/docs/CurrencyInputDocs.d.ts +0 -4
- package/dist/docs/CurrencyInputDocs.d.ts.map +0 -1
- package/dist/docs/CurrencyInputDocs.js +0 -22
- package/dist/docs/DataFieldDocs.d.ts +0 -4
- package/dist/docs/DataFieldDocs.d.ts.map +0 -1
- package/dist/docs/DataFieldDocs.js +0 -7
- package/dist/docs/DataTableDocs.d.ts +0 -4
- package/dist/docs/DataTableDocs.d.ts.map +0 -1
- package/dist/docs/DataTableDocs.js +0 -244
- package/dist/docs/DateInputDocs.d.ts +0 -5
- package/dist/docs/DateInputDocs.d.ts.map +0 -1
- package/dist/docs/DateInputDocs.js +0 -19
- package/dist/docs/DatePickerDocs.d.ts +0 -5
- package/dist/docs/DatePickerDocs.d.ts.map +0 -1
- package/dist/docs/DatePickerDocs.js +0 -16
- package/dist/docs/DialogDocs.d.ts +0 -4
- package/dist/docs/DialogDocs.d.ts.map +0 -1
- package/dist/docs/DialogDocs.js +0 -13
- package/dist/docs/DocAdmin.d.ts +0 -4
- package/dist/docs/DocAdmin.d.ts.map +0 -1
- package/dist/docs/DocAdmin.js +0 -68
- package/dist/docs/DocsMenu.d.ts +0 -2
- package/dist/docs/DocsMenu.d.ts.map +0 -1
- package/dist/docs/DocsMenu.js +0 -5
- package/dist/docs/DocsRouter.d.ts +0 -4
- package/dist/docs/DocsRouter.d.ts.map +0 -1
- package/dist/docs/DocsRouter.js +0 -39
- package/dist/docs/DropdownMenuDocs.d.ts +0 -4
- package/dist/docs/DropdownMenuDocs.d.ts.map +0 -1
- package/dist/docs/DropdownMenuDocs.js +0 -66
- package/dist/docs/DropdownPanelDocs.d.ts +0 -4
- package/dist/docs/DropdownPanelDocs.d.ts.map +0 -1
- package/dist/docs/DropdownPanelDocs.js +0 -7
- package/dist/docs/ExampleFormDocs.d.ts +0 -4
- package/dist/docs/ExampleFormDocs.d.ts.map +0 -1
- package/dist/docs/ExampleFormDocs.js +0 -153
- package/dist/docs/FilterDocs.d.ts +0 -4
- package/dist/docs/FilterDocs.d.ts.map +0 -1
- package/dist/docs/FilterDocs.js +0 -130
- package/dist/docs/InputDocs.d.ts +0 -4
- package/dist/docs/InputDocs.d.ts.map +0 -1
- package/dist/docs/InputDocs.js +0 -17
- package/dist/docs/LinkButtonDocs.d.ts +0 -4
- package/dist/docs/LinkButtonDocs.d.ts.map +0 -1
- package/dist/docs/LinkButtonDocs.js +0 -7
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts +0 -2
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts.map +0 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.js +0 -47
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts +0 -2
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts.map +0 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.js +0 -34
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts +0 -2
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts.map +0 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.js +0 -66
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts +0 -2
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts.map +0 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.js +0 -7
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts +0 -10
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts.map +0 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.js +0 -39
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts +0 -2
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts.map +0 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.js +0 -57
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts +0 -9
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts.map +0 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.js +0 -30
- package/dist/docs/LoaderDocs.d.ts +0 -4
- package/dist/docs/LoaderDocs.d.ts.map +0 -1
- package/dist/docs/LoaderDocs.js +0 -33
- package/dist/docs/MenuDocs.d.ts +0 -4
- package/dist/docs/MenuDocs.d.ts.map +0 -1
- package/dist/docs/MenuDocs.js +0 -26
- package/dist/docs/PaginationDocs.d.ts +0 -4
- package/dist/docs/PaginationDocs.d.ts.map +0 -1
- package/dist/docs/PaginationDocs.js +0 -38
- package/dist/docs/RadioButtonGroupDocs.d.ts +0 -4
- package/dist/docs/RadioButtonGroupDocs.d.ts.map +0 -1
- package/dist/docs/RadioButtonGroupDocs.js +0 -46
- package/dist/docs/RoadMapDocs.d.ts +0 -4
- package/dist/docs/RoadMapDocs.d.ts.map +0 -1
- package/dist/docs/RoadMapDocs.js +0 -171
- package/dist/docs/SearchSelectInputDocs.d.ts +0 -4
- package/dist/docs/SearchSelectInputDocs.d.ts.map +0 -1
- package/dist/docs/SearchSelectInputDocs.js +0 -168
- package/dist/docs/SkeletonDocs.d.ts +0 -4
- package/dist/docs/SkeletonDocs.d.ts.map +0 -1
- package/dist/docs/SkeletonDocs.js +0 -7
- package/dist/docs/SnackbarDocs.d.ts +0 -4
- package/dist/docs/SnackbarDocs.d.ts.map +0 -1
- package/dist/docs/SnackbarDocs.js +0 -69
- package/dist/docs/TabsGroupDocs.d.ts +0 -4
- package/dist/docs/TabsGroupDocs.d.ts.map +0 -1
- package/dist/docs/TabsGroupDocs.js +0 -38
- package/dist/docs/ThemeSwitcherDocs.d.ts +0 -4
- package/dist/docs/ThemeSwitcherDocs.d.ts.map +0 -1
- package/dist/docs/ThemeSwitcherDocs.js +0 -11
- package/dist/docs/docMockServices/empresaService.d.ts +0 -38
- package/dist/docs/docMockServices/empresaService.d.ts.map +0 -1
- package/dist/docs/docMockServices/empresaService.js +0 -125
- package/dist/docs/docMockServices/index.d.ts +0 -9
- package/dist/docs/docMockServices/index.d.ts.map +0 -1
- package/dist/docs/docMockServices/index.js +0 -8
- package/dist/docs/docMockServices/initialData.d.ts +0 -6
- package/dist/docs/docMockServices/initialData.d.ts.map +0 -1
- package/dist/docs/docMockServices/initialData.js +0 -132
- package/dist/docs/docMockServices/interfaces.d.ts +0 -38
- package/dist/docs/docMockServices/interfaces.d.ts.map +0 -1
- package/dist/docs/docMockServices/interfaces.js +0 -1
- package/dist/docs/docMockServices/personaEmpresaService.d.ts +0 -43
- package/dist/docs/docMockServices/personaEmpresaService.d.ts.map +0 -1
- package/dist/docs/docMockServices/personaEmpresaService.js +0 -151
- package/dist/docs/docMockServices/personaService.d.ts +0 -39
- package/dist/docs/docMockServices/personaService.d.ts.map +0 -1
- package/dist/docs/docMockServices/personaService.js +0 -190
- package/dist/helpers/currencyFormat.js +0 -3
- package/dist/helpers/getErrorMessage.js +0 -13
- package/dist/helpers/getInitialLetters.js +0 -5
- package/dist/helpers/getQueryString.js +0 -13
- package/dist/helpers/index.js +0 -9
- package/dist/helpers/mappers.js +0 -27
- package/dist/helpers/nameValueArrayToObject.js +0 -3
- package/dist/helpers/objectToQueryString.js +0 -3
- package/dist/helpers/queryStringToObject.js +0 -13
- package/dist/helpers/regularExpressions.js +0 -5
- package/dist/hooks/index.js +0 -6
- package/dist/hooks/useAsyncRequest.js +0 -53
- package/dist/hooks/useBreakpoint.js +0 -59
- package/dist/hooks/useElementScroll.js +0 -58
- package/dist/hooks/useEnum.js +0 -21
- package/dist/hooks/useGlobalThemeStyles.js +0 -40
- package/dist/hooks/useThemeOverride.js +0 -99
- package/dist/interfaces/index.js +0 -1
- package/dist/interfaces/name-value.interface.js +0 -1
- package/dist/interfaces/pagination.interface.js +0 -1
- package/dist/main.d.ts +0 -2
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -6
- package/dist/services/apiClient.js +0 -216
- package/dist/services/index.js +0 -1
- package/dist/styles.d.ts +0 -2
- package/dist/styles.d.ts.map +0 -1
- package/dist/styles.js +0 -3
- package/dist/templates/forms/ContactForm.js +0 -58
- package/dist/templates/forms/LoginForm.js +0 -36
- package/dist/templates/forms/RegistrationForm.js +0 -54
- package/dist/templates/layouts/DashboardLayout.js +0 -26
- package/dist/templates/layouts/SidebarLayout.js +0 -28
- 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";
|