flysoft-react-ui 0.1.7 → 0.1.9
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/dist/App.d.ts +1 -1
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +17 -3
- package/dist/contexts/ThemeContext.d.ts +1 -0
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/contexts/ThemeContext.js +22 -7
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +2 -0
- package/dist/hooks/useGlobalThemeStyles.d.ts +6 -0
- package/dist/hooks/useGlobalThemeStyles.d.ts.map +1 -0
- package/dist/hooks/useGlobalThemeStyles.js +40 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/App.d.ts
CHANGED
package/dist/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.tsx"],"names":[],"mappings":"AAUA,OAAO,aAAa,CAAC;AA6CrB,iBAAS,GAAG,4CAqNX;AAED,eAAe,GAAG,CAAC"}
|
package/dist/App.js
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Button, Input, Card, Badge, ThemeProvider, ThemeSwitcher, } from "./index";
|
|
3
|
-
import "./
|
|
2
|
+
import { Button, Input, Card, Badge, ThemeProvider, ThemeSwitcher, useTheme, useGlobalThemeStyles, } from "./index";
|
|
3
|
+
import "./index.css";
|
|
4
|
+
// Componente para probar la funcionalidad de resetToDefault
|
|
5
|
+
const ResetToDefaultButton = () => {
|
|
6
|
+
const { resetToDefault, theme } = useTheme();
|
|
7
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsxs("p", { className: "text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: ["Tema actual: ", _jsx("strong", { children: theme.name })] }), _jsx(Button, { onClick: resetToDefault, variant: "outline", icon: "fa-undo", children: "Resetear al Tema Inicial" })] }));
|
|
8
|
+
};
|
|
9
|
+
// Componente que demuestra el uso de useGlobalThemeStyles
|
|
10
|
+
const GlobalThemeDemo = () => {
|
|
11
|
+
// Este hook aplica automáticamente los estilos del tema al body/html
|
|
12
|
+
useGlobalThemeStyles();
|
|
13
|
+
return (_jsxs("div", { className: "p-4 rounded-lg border", style: {
|
|
14
|
+
borderColor: "var(--flysoft-border-default)",
|
|
15
|
+
backgroundColor: "var(--flysoft-bg-secondary)",
|
|
16
|
+
}, children: [_jsx("h3", { className: "text-lg font-semibold mb-2", style: { color: "var(--flysoft-text-primary)" }, children: "Hook useGlobalThemeStyles" }), _jsx("p", { className: "text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Este componente usa el hook useGlobalThemeStyles que aplica autom\u00E1ticamente los colores del tema al body y html de la p\u00E1gina." })] }));
|
|
17
|
+
};
|
|
4
18
|
function App() {
|
|
5
|
-
return (_jsx(ThemeProvider, { initialTheme: "light", children: _jsx("div", { className: "min-h-screen p-8", style: { backgroundColor: "var(--flysoft-bg-secondary)" }, children: _jsxs("div", { className: "max-w-4xl mx-auto", children: [_jsxs("div", { className: "text-center mb-12", children: [_jsx("h1", { className: "text-4xl font-bold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Flysoft React UI" }), _jsx("p", { className: "text-xl", style: { color: "var(--flysoft-text-secondary)" }, children: "Biblioteca de componentes React moderna con Tailwind CSS, FontAwesome y sistema de temas personalizable" })] }), _jsx("div", { className: "mb-8", children: _jsx(ThemeSwitcher, {}) }), _jsx(Card, { title: "Botones", subtitle: "Diferentes variantes y tama\u00F1os de botones", className: "mb-8", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx(Button, { variant: "primary", icon: "fa-heart", children: "Bot\u00F3n Primario" }), _jsx(Button, { variant: "outline", icon: "fa-download", children: "Bot\u00F3n Outline" }), _jsx(Button, { variant: "ghost", icon: "fa-edit", children: "Bot\u00F3n Ghost" })] }), _jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx(Button, { size: "sm", icon: "fa-plus", children: "Peque\u00F1o" }), _jsx(Button, { size: "md", icon: "fa-check", children: "Mediano" }), _jsx(Button, { size: "lg", icon: "fa-arrow-right", children: "Grande" })] }), _jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx(Button, { loading: true, children: "Cargando..." }), _jsx(Button, { disabled: true, children: "Deshabilitado" }), _jsx(Button, { icon: "fa-arrow-right", iconPosition: "right", children: "Con Icono Derecha" })] })] }) }), _jsx(Card, { title: "Campos de Entrada", subtitle: "Diferentes tipos de inputs con iconos", className: "mb-8", children: _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [_jsx(Input, { label: "Nombre completo", placeholder: "Ingresa tu nombre", icon: "fa-user" }), _jsx(Input, { label: "Email", type: "email", placeholder: "tu@email.com", icon: "fa-envelope" }), _jsx(Input, { label: "Contrase\u00F1a", type: "password", placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022", icon: "fa-lock" }), _jsx(Input, { label: "B\u00FAsqueda", placeholder: "Buscar...", icon: "fa-search", iconPosition: "right" }), _jsx(Input, { label: "Con error", placeholder: "Campo con error", error: "Este campo es requerido", icon: "fa-exclamation-triangle" })] }) }), _jsx(Card, { title: "Badges", subtitle: "Diferentes variantes de badges", className: "mb-8", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Badge, { variant: "primary", children: "Primary" }), _jsx(Badge, { variant: "secondary", children: "Secondary" }), _jsx(Badge, { variant: "success", children: "Success" }), _jsx(Badge, { variant: "warning", children: "Warning" }), _jsx(Badge, { variant: "danger", children: "Danger" }), _jsx(Badge, { variant: "info", children: "Info" })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Badge, { size: "sm", children: "Small" }), _jsx(Badge, { size: "md", children: "Medium" }), _jsx(Badge, { size: "lg", children: "Large" })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Badge, { rounded: true, children: "Rounded" }), _jsx(Badge, { variant: "success", rounded: true, children: "Success Rounded" }), _jsx(Badge, { variant: "warning", rounded: true, children: "Warning Rounded" })] })] }) }), _jsx(Card, { title: "Tarjetas", subtitle: "Diferentes variantes de tarjetas", className: "mb-8", children: _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [_jsx(Card, { title: "Tarjeta Simple", subtitle: "Sin acciones ni footer", variant: "default", children: _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Esta es una tarjeta simple con contenido b\u00E1sico." }) }), _jsx(Card, { title: "Con Acciones", subtitle: "Incluye botones en el header", variant: "elevated", headerActions: _jsx(Button, { size: "sm", variant: "outline", icon: "fa-edit", children: "Editar" }), children: _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Tarjeta con botones de acci\u00F3n en el header." }) }), _jsx(Card, { title: "Con Footer", subtitle: "Incluye secci\u00F3n de footer", variant: "outlined", footer: _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm", style: { color: "var(--flysoft-text-muted)" }, children: "\u00DAltima actualizaci\u00F3n: hoy" }), _jsx(Button, { size: "sm", variant: "primary", icon: "fa-save", children: "Guardar" })] }), children: _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Tarjeta con footer personalizado y botones." }) })] }) })] }) }) }));
|
|
19
|
+
return (_jsx(ThemeProvider, { initialTheme: "light", forceInitialTheme: false, children: _jsx("div", { className: "min-h-screen p-8", style: { backgroundColor: "var(--flysoft-bg-secondary)" }, children: _jsxs("div", { className: "max-w-4xl mx-auto", children: [_jsxs("div", { className: "text-center mb-12", children: [_jsx("h1", { className: "text-4xl font-bold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Flysoft React UI" }), _jsx("p", { className: "text-xl", style: { color: "var(--flysoft-text-secondary)" }, children: "Biblioteca de componentes React moderna con Tailwind CSS, FontAwesome y sistema de temas personalizable" })] }), _jsx("div", { className: "mb-8", children: _jsx(ThemeSwitcher, {}) }), _jsx("div", { className: "mb-8 text-center", children: _jsx(ResetToDefaultButton, {}) }), _jsx("div", { className: "mb-8", children: _jsx(GlobalThemeDemo, {}) }), _jsx(Card, { title: "Botones", subtitle: "Diferentes variantes y tama\u00F1os de botones", className: "mb-8", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx(Button, { variant: "primary", icon: "fa-heart", children: "Bot\u00F3n Primario" }), _jsx(Button, { variant: "outline", icon: "fa-download", children: "Bot\u00F3n Outline" }), _jsx(Button, { variant: "ghost", icon: "fa-edit", children: "Bot\u00F3n Ghost" })] }), _jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx(Button, { size: "sm", icon: "fa-plus", children: "Peque\u00F1o" }), _jsx(Button, { size: "md", icon: "fa-check", children: "Mediano" }), _jsx(Button, { size: "lg", icon: "fa-arrow-right", children: "Grande" })] }), _jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx(Button, { loading: true, children: "Cargando..." }), _jsx(Button, { disabled: true, children: "Deshabilitado" }), _jsx(Button, { icon: "fa-arrow-right", iconPosition: "right", children: "Con Icono Derecha" })] })] }) }), _jsx(Card, { title: "Campos de Entrada", subtitle: "Diferentes tipos de inputs con iconos", className: "mb-8", children: _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [_jsx(Input, { label: "Nombre completo", placeholder: "Ingresa tu nombre", icon: "fa-user" }), _jsx(Input, { label: "Email", type: "email", placeholder: "tu@email.com", icon: "fa-envelope" }), _jsx(Input, { label: "Contrase\u00F1a", type: "password", placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022", icon: "fa-lock" }), _jsx(Input, { label: "B\u00FAsqueda", placeholder: "Buscar...", icon: "fa-search", iconPosition: "right" }), _jsx(Input, { label: "Con error", placeholder: "Campo con error", error: "Este campo es requerido", icon: "fa-exclamation-triangle" })] }) }), _jsx(Card, { title: "Badges", subtitle: "Diferentes variantes de badges", className: "mb-8", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Badge, { variant: "primary", children: "Primary" }), _jsx(Badge, { variant: "secondary", children: "Secondary" }), _jsx(Badge, { variant: "success", children: "Success" }), _jsx(Badge, { variant: "warning", children: "Warning" }), _jsx(Badge, { variant: "danger", children: "Danger" }), _jsx(Badge, { variant: "info", children: "Info" })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Badge, { size: "sm", children: "Small" }), _jsx(Badge, { size: "md", children: "Medium" }), _jsx(Badge, { size: "lg", children: "Large" })] }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Badge, { rounded: true, children: "Rounded" }), _jsx(Badge, { variant: "success", rounded: true, children: "Success Rounded" }), _jsx(Badge, { variant: "warning", rounded: true, children: "Warning Rounded" })] })] }) }), _jsx(Card, { title: "Tarjetas", subtitle: "Diferentes variantes de tarjetas", className: "mb-8", children: _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [_jsx(Card, { title: "Tarjeta Simple", subtitle: "Sin acciones ni footer", variant: "default", children: _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Esta es una tarjeta simple con contenido b\u00E1sico." }) }), _jsx(Card, { title: "Con Acciones", subtitle: "Incluye botones en el header", variant: "elevated", headerActions: _jsx(Button, { size: "sm", variant: "outline", icon: "fa-edit", children: "Editar" }), children: _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Tarjeta con botones de acci\u00F3n en el header." }) }), _jsx(Card, { title: "Con Footer", subtitle: "Incluye secci\u00F3n de footer", variant: "outlined", footer: _jsxs("div", { className: "flex justify-between items-center", children: [_jsx("span", { className: "text-sm", style: { color: "var(--flysoft-text-muted)" }, children: "\u00DAltima actualizaci\u00F3n: hoy" }), _jsx(Button, { size: "sm", variant: "primary", icon: "fa-save", children: "Guardar" })] }), children: _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Tarjeta con footer personalizado y botones." }) })] }) })] }) }) }));
|
|
6
20
|
}
|
|
7
21
|
export default App;
|
|
@@ -4,6 +4,7 @@ interface ThemeProviderProps {
|
|
|
4
4
|
children: ReactNode;
|
|
5
5
|
initialTheme?: string | Theme;
|
|
6
6
|
storageKey?: string;
|
|
7
|
+
forceInitialTheme?: boolean;
|
|
7
8
|
}
|
|
8
9
|
export declare const ThemeProvider: React.FC<ThemeProviderProps>;
|
|
9
10
|
export declare const useTheme: () => ThemeContextType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/contexts/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKvD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/contexts/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKvD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAmJtD,CAAC;AAGF,eAAO,MAAM,QAAQ,QAAO,gBAM3B,CAAC;AAGF,eAAO,MAAM,eAAe,eAG3B,CAAC"}
|
|
@@ -2,8 +2,19 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import React, { createContext, useContext, useEffect, useState, } from "react";
|
|
3
3
|
import { themes, defaultTheme } from "./presets";
|
|
4
4
|
const ThemeContext = createContext(undefined);
|
|
5
|
-
export const ThemeProvider = ({ children, initialTheme = "light", storageKey = "flysoft-theme", }) => {
|
|
5
|
+
export const ThemeProvider = ({ children, initialTheme = "light", storageKey = "flysoft-theme", forceInitialTheme = false, }) => {
|
|
6
|
+
// Almacenar el tema inicial para poder resetear a él
|
|
7
|
+
const getInitialTheme = () => {
|
|
8
|
+
if (typeof initialTheme === "string") {
|
|
9
|
+
return themes[initialTheme] || defaultTheme;
|
|
10
|
+
}
|
|
11
|
+
return initialTheme;
|
|
12
|
+
};
|
|
6
13
|
const [currentTheme, setCurrentTheme] = useState(() => {
|
|
14
|
+
// Si forceInitialTheme es true, usar siempre el initialTheme
|
|
15
|
+
if (forceInitialTheme) {
|
|
16
|
+
return getInitialTheme();
|
|
17
|
+
}
|
|
7
18
|
// Try to get theme from localStorage
|
|
8
19
|
if (typeof window !== "undefined") {
|
|
9
20
|
const savedTheme = localStorage.getItem(storageKey);
|
|
@@ -24,10 +35,7 @@ export const ThemeProvider = ({ children, initialTheme = "light", storageKey = "
|
|
|
24
35
|
}
|
|
25
36
|
}
|
|
26
37
|
// Handle initialTheme prop
|
|
27
|
-
|
|
28
|
-
return themes[initialTheme] || defaultTheme;
|
|
29
|
-
}
|
|
30
|
-
return initialTheme;
|
|
38
|
+
return getInitialTheme();
|
|
31
39
|
});
|
|
32
40
|
const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);
|
|
33
41
|
// Function to apply theme to CSS variables
|
|
@@ -64,6 +72,13 @@ export const ThemeProvider = ({ children, initialTheme = "light", storageKey = "
|
|
|
64
72
|
});
|
|
65
73
|
// Set theme name as data attribute for CSS targeting
|
|
66
74
|
root.setAttribute("data-theme", theme.name);
|
|
75
|
+
// Apply background and text colors to body for better integration
|
|
76
|
+
const body = document.body;
|
|
77
|
+
if (body) {
|
|
78
|
+
body.style.backgroundColor = theme.colors.bgDefault;
|
|
79
|
+
body.style.color = theme.colors.textPrimary;
|
|
80
|
+
body.style.fontFamily = theme.fonts.default;
|
|
81
|
+
}
|
|
67
82
|
};
|
|
68
83
|
// Function to set theme
|
|
69
84
|
const setTheme = (theme) => {
|
|
@@ -89,9 +104,9 @@ export const ThemeProvider = ({ children, initialTheme = "light", storageKey = "
|
|
|
89
104
|
// Apply to CSS
|
|
90
105
|
applyThemeToCSS(newTheme);
|
|
91
106
|
};
|
|
92
|
-
// Function to reset to
|
|
107
|
+
// Function to reset to initial theme (the one passed as initialTheme prop)
|
|
93
108
|
const resetToDefault = () => {
|
|
94
|
-
setTheme(
|
|
109
|
+
setTheme(getInitialTheme());
|
|
95
110
|
};
|
|
96
111
|
// Apply theme on mount and when theme changes
|
|
97
112
|
useEffect(() => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGlobalThemeStyles.d.ts","sourceRoot":"","sources":["../../src/hooks/useGlobalThemeStyles.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAqChC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useTheme } from "../contexts/ThemeContext";
|
|
3
|
+
/**
|
|
4
|
+
* Hook que aplica estilos globales del tema al body y html
|
|
5
|
+
* Útil para aplicaciones host que quieren que el tema afecte toda la página
|
|
6
|
+
*/
|
|
7
|
+
export const useGlobalThemeStyles = () => {
|
|
8
|
+
const { theme } = useTheme();
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
const body = document.body;
|
|
11
|
+
const html = document.documentElement;
|
|
12
|
+
if (body) {
|
|
13
|
+
// Aplicar estilos al body
|
|
14
|
+
body.style.backgroundColor = theme.colors.bgDefault;
|
|
15
|
+
body.style.color = theme.colors.textPrimary;
|
|
16
|
+
body.style.fontFamily = theme.fonts.default;
|
|
17
|
+
body.style.margin = "0";
|
|
18
|
+
body.style.padding = "0";
|
|
19
|
+
}
|
|
20
|
+
if (html) {
|
|
21
|
+
// Aplicar estilos al html
|
|
22
|
+
html.style.backgroundColor = theme.colors.bgDefault;
|
|
23
|
+
html.style.color = theme.colors.textPrimary;
|
|
24
|
+
}
|
|
25
|
+
// Cleanup function para restaurar estilos originales
|
|
26
|
+
return () => {
|
|
27
|
+
if (body) {
|
|
28
|
+
body.style.backgroundColor = "";
|
|
29
|
+
body.style.color = "";
|
|
30
|
+
body.style.fontFamily = "";
|
|
31
|
+
body.style.margin = "";
|
|
32
|
+
body.style.padding = "";
|
|
33
|
+
}
|
|
34
|
+
if (html) {
|
|
35
|
+
html.style.backgroundColor = "";
|
|
36
|
+
html.style.color = "";
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}, [theme]);
|
|
40
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export type { CardProps } from "./components/layout/Card";
|
|
|
8
8
|
export { Badge } from "./components/utils/Badge";
|
|
9
9
|
export type { BadgeProps } from "./components/utils/Badge";
|
|
10
10
|
export * from "./contexts";
|
|
11
|
+
export * from "./hooks";
|
|
11
12
|
export { ThemeSwitcher } from "./components/ThemeSwitcher";
|
|
12
13
|
export { default as React } from "react";
|
|
13
14
|
export type { ReactElement, ReactNode, FC, ComponentProps } from "react";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,8 @@ export { Card } from "./components/layout/Card";
|
|
|
7
7
|
export { Badge } from "./components/utils/Badge";
|
|
8
8
|
// Theme system exports
|
|
9
9
|
export * from "./contexts";
|
|
10
|
+
// Hooks exports
|
|
11
|
+
export * from "./hooks";
|
|
10
12
|
// Theme Switcher component
|
|
11
13
|
export { ThemeSwitcher } from "./components/ThemeSwitcher";
|
|
12
14
|
// Styles are available via package exports: import 'flysoft-react-ui/styles'
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/form-controls/Button.tsx","../src/components/form-controls/Input.tsx","../src/components/layout/Card.tsx","../src/components/utils/Badge.tsx","../src/contexts/presets.ts","../src/contexts/ThemeContext.tsx","../src/hooks/useThemeOverride.ts","../src/components/ThemeSwitcher.tsx"],"sourcesContent":["import React from \"react\";\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"outline\" | \"ghost\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n loading?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n variant = \"primary\",\r\n size = \"md\",\r\n icon,\r\n iconPosition = \"left\",\r\n loading = false,\r\n children,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}) => {\r\n const baseClasses = `\r\n inline-flex items-center justify-center font-medium rounded-sm transition-colors \r\n cursor-pointer\r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary)] text-[var(--color-primary-contrast)] \r\n hover:bg-[var(--color-primary-dark)] focus:ring-[var(--color-primary)]\r\n `,\r\n outline: `\r\n border border-[var(--color-primary)] text-[var(--color-primary)] \r\n hover:bg-[var(--color-bg-secondary)] focus:ring-[var(--color-primary)]\r\n `,\r\n ghost: `\r\n text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)] \r\n focus:ring-[var(--color-primary)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`;\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} ${\r\n iconPosition === \"right\" ? \"ml-2\" : \"mr-2\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <button className={classes} disabled={disabled || loading} {...props}>\r\n {loading && <i className=\"fa fa-spinner fa-spin mr-2\" />}\r\n {icon && iconPosition === \"left\" && !loading && renderIcon()}\r\n {children}\r\n {icon && iconPosition === \"right\" && !loading && renderIcon()}\r\n </button>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Input: React.FC<InputProps> = ({\r\n label,\r\n error,\r\n icon,\r\n iconPosition = \"left\",\r\n size = \"md\",\r\n className = \"\",\r\n id,\r\n ...props\r\n}) => {\r\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n const baseClasses = `\r\n w-full border rounded-lg transition-colors focus:outline-none focus:ring-2 \r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)] text-[var(--color-text-primary)]\r\n bg-[var(--color-bg-default)]\r\n `;\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const stateClasses = error\r\n ? `border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]`\r\n : `border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]`;\r\n\r\n const inputClasses = `${baseClasses} ${sizeClasses[size]} ${stateClasses} ${className}`;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} text-[var(--color-text-muted)] absolute top-1/2 transform -translate-y-1/2 ${\r\n iconPosition === \"left\" ? \"left-3\" : \"right-3\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <div className=\"relative\">\r\n {icon && iconPosition === \"left\" && renderIcon()}\r\n <input\r\n id={inputId}\r\n className={`${inputClasses} ${\r\n icon && iconPosition === \"left\" ? \"pl-10\" : \"\"\r\n } ${icon && iconPosition === \"right\" ? \"pr-10\" : \"\"}`}\r\n {...props}\r\n />\r\n {icon && iconPosition === \"right\" && renderIcon()}\r\n </div>\r\n {error && (\r\n <p className=\"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface CardProps {\r\n title?: string;\r\n subtitle?: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n headerActions?: React.ReactNode;\r\n footer?: React.ReactNode;\r\n variant?: \"default\" | \"elevated\" | \"outlined\";\r\n}\r\n\r\nexport const Card: React.FC<CardProps> = ({\r\n title,\r\n subtitle,\r\n children,\r\n className = \"\",\r\n headerActions,\r\n footer,\r\n variant = \"default\",\r\n}) => {\r\n const baseClasses = `\r\n bg-[var(--color-bg-default)] rounded-lg border\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n default: `border-[var(--color-border-default)]`,\r\n elevated: `border-[var(--color-border-default)] shadow-[var(--shadow-lg)]`,\r\n outlined: `border-[var(--color-gray-300)]`,\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\r\n\r\n return (\r\n <div className={classes}>\r\n {(title || subtitle || headerActions) && (\r\n <div className=\"px-6 py-4 border-b border-[var(--color-border-default)]\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n {title && (\r\n <h3 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">\r\n {title}\r\n </h3>\r\n )}\r\n {subtitle && (\r\n <p className=\"text-sm text-[var(--color-text-secondary)] mt-1\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n {headerActions && (\r\n <div className=\"flex items-center space-x-2\">{headerActions}</div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"px-6 py-4\">{children}</div>\r\n\r\n {footer && (\r\n <div className=\"px-6 py-4 border-t border-[var(--color-border-default)] bg-[var(--color-bg-secondary)] rounded-b-lg\">\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface BadgeProps {\r\n children: React.ReactNode;\r\n variant?: \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n rounded?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Badge: React.FC<BadgeProps> = ({\r\n children,\r\n variant = \"primary\",\r\n size = \"md\",\r\n rounded = false,\r\n className = \"\",\r\n}) => {\r\n const baseClasses =\r\n \"inline-flex items-center font-medium font-[var(--font-default)]\";\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary-light)] text-[var(--color-primary-dark)]\r\n hover:bg-[var(--color-primary)] hover:text-[var(--color-primary-contrast)]\r\n `,\r\n secondary: `\r\n bg-[var(--color-secondary-light)] text-[var(--color-secondary-dark)]\r\n hover:bg-[var(--color-secondary)] hover:text-[var(--color-secondary-contrast)]\r\n `,\r\n success: `\r\n bg-[var(--color-success-light)] text-[var(--color-success-dark)]\r\n hover:bg-[var(--color-success)] hover:text-[var(--color-success-contrast)]\r\n `,\r\n warning: `\r\n bg-[var(--color-warning-light)] text-[var(--color-warning-dark)]\r\n hover:bg-[var(--color-warning)] hover:text-[var(--color-warning-contrast)]\r\n `,\r\n danger: `\r\n bg-[var(--color-danger-light)] text-[var(--color-danger-dark)]\r\n hover:bg-[var(--color-danger)] hover:text-[var(--color-danger-contrast)]\r\n `,\r\n info: `\r\n bg-[var(--color-info-light)] text-[var(--color-info-dark)]\r\n hover:bg-[var(--color-info)] hover:text-[var(--color-info-contrast)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-2 py-0.5 text-xs\",\r\n md: \"px-2.5 py-0.5 text-sm\",\r\n lg: \"px-3 py-1 text-base\",\r\n };\r\n\r\n const roundedClasses = rounded ? \"rounded-full\" : \"rounded-md\";\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${roundedClasses} ${className}`;\r\n\r\n return <span className={classes}>{children}</span>;\r\n};\r\n","import type { Theme } from \"./types\";\r\n\r\nexport const lightTheme: Theme = {\r\n name: \"light\",\r\n colors: {\r\n primary: \"#007aff\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#0064d1\",\r\n primaryLight: \"#4da6ff\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#007aff\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const darkTheme: Theme = {\r\n name: \"dark\",\r\n colors: {\r\n primary: \"#3b82f6\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1d4ed8\",\r\n primaryLight: \"#60a5fa\",\r\n secondary: \"#9ca3af\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#6b7280\",\r\n secondaryLight: \"#d1d5db\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#111827\",\r\n gray100: \"#1f2937\",\r\n gray200: \"#374151\",\r\n gray300: \"#4b5563\",\r\n gray400: \"#6b7280\",\r\n gray500: \"#9ca3af\",\r\n gray600: \"#d1d5db\",\r\n gray700: \"#e5e7eb\",\r\n gray800: \"#f3f4f6\",\r\n gray900: \"#f9fafb\",\r\n borderDefault: \"#374151\",\r\n borderFocus: \"#3b82f6\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#111827\",\r\n bgSecondary: \"#1f2937\",\r\n bgDisabled: \"#374151\",\r\n textPrimary: \"#f9fafb\",\r\n textSecondary: \"#e5e7eb\",\r\n textMuted: \"#9ca3af\",\r\n textDisabled: \"#6b7280\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.3)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#f9fafb\",\r\n },\r\n};\r\n\r\nexport const blueTheme: Theme = {\r\n name: \"blue\",\r\n colors: {\r\n primary: \"#1e40af\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1e3a8a\",\r\n primaryLight: \"#3b82f6\",\r\n secondary: \"#64748b\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#475569\",\r\n secondaryLight: \"#94a3b8\",\r\n success: \"#059669\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#047857\",\r\n successLight: \"#10b981\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f8fafc\",\r\n gray100: \"#f1f5f9\",\r\n gray200: \"#e2e8f0\",\r\n gray300: \"#cbd5e1\",\r\n gray400: \"#94a3b8\",\r\n gray500: \"#64748b\",\r\n gray600: \"#475569\",\r\n gray700: \"#334155\",\r\n gray800: \"#1e293b\",\r\n gray900: \"#0f172a\",\r\n borderDefault: \"#e2e8f0\",\r\n borderFocus: \"#1e40af\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f8fafc\",\r\n bgDisabled: \"#f1f5f9\",\r\n textPrimary: \"#0f172a\",\r\n textSecondary: \"#334155\",\r\n textMuted: \"#64748b\",\r\n textDisabled: \"#94a3b8\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(30 64 175 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(30 64 175 / 0.1), 0 2px 4px -2px rgb(30 64 175 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(30 64 175 / 0.1), 0 4px 6px -4px rgb(30 64 175 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#0f172a\",\r\n },\r\n};\r\n\r\nexport const greenTheme: Theme = {\r\n name: \"green\",\r\n colors: {\r\n primary: \"#059669\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#047857\",\r\n primaryLight: \"#10b981\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#16a34a\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#15803d\",\r\n successLight: \"#22c55e\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#059669\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(5 150 105 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(5 150 105 / 0.1), 0 2px 4px -2px rgb(5 150 105 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(5 150 105 / 0.1), 0 4px 6px -4px rgb(5 150 105 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const defaultTheme = lightTheme;\r\n\r\nexport const themes: Record<string, Theme> = {\r\n light: lightTheme,\r\n dark: darkTheme,\r\n blue: blueTheme,\r\n green: greenTheme,\r\n};\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useState,\r\n type ReactNode,\r\n} from \"react\";\r\nimport type { Theme, ThemeContextType } from \"./types\";\r\nimport { themes, defaultTheme } from \"./presets\";\r\n\r\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\r\n\r\ninterface ThemeProviderProps {\r\n children: ReactNode;\r\n initialTheme?: string | Theme;\r\n storageKey?: string;\r\n}\r\n\r\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\r\n children,\r\n initialTheme = \"light\",\r\n storageKey = \"flysoft-theme\",\r\n}) => {\r\n const [currentTheme, setCurrentTheme] = useState<Theme>(() => {\r\n // Try to get theme from localStorage\r\n if (typeof window !== \"undefined\") {\r\n const savedTheme = localStorage.getItem(storageKey);\r\n if (savedTheme) {\r\n if (themes[savedTheme]) {\r\n return themes[savedTheme];\r\n }\r\n // Try to parse as custom theme\r\n try {\r\n const parsed = JSON.parse(savedTheme);\r\n if (parsed.name && parsed.colors) {\r\n return parsed;\r\n }\r\n } catch {\r\n // Invalid JSON, fallback to default\r\n }\r\n }\r\n }\r\n\r\n // Handle initialTheme prop\r\n if (typeof initialTheme === \"string\") {\r\n return themes[initialTheme] || defaultTheme;\r\n }\r\n return initialTheme;\r\n });\r\n\r\n const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);\r\n\r\n // Function to apply theme to CSS variables\r\n const applyThemeToCSS = (theme: Theme) => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n const root = document.documentElement;\r\n\r\n // Apply color variables\r\n Object.entries(theme.colors).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply shadow variables\r\n Object.entries(theme.shadows).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-shadow-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply radius variables\r\n Object.entries(theme.radius).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-radius-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply spacing variables\r\n Object.entries(theme.spacing).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-spacing-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply font variables\r\n Object.entries(theme.fonts).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-font-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Set theme name as data attribute for CSS targeting\r\n root.setAttribute(\"data-theme\", theme.name);\r\n };\r\n\r\n // Function to set theme\r\n const setTheme = (theme: Theme | string) => {\r\n let newTheme: Theme;\r\n\r\n if (typeof theme === \"string\") {\r\n if (themes[theme]) {\r\n newTheme = themes[theme];\r\n } else {\r\n console.warn(`Theme \"${theme}\" not found, falling back to default`);\r\n newTheme = defaultTheme;\r\n }\r\n } else {\r\n newTheme = theme;\r\n }\r\n\r\n setCurrentTheme(newTheme);\r\n setCurrentThemeName(newTheme.name);\r\n\r\n // Save to localStorage\r\n if (typeof window !== \"undefined\") {\r\n localStorage.setItem(storageKey, JSON.stringify(newTheme));\r\n }\r\n\r\n // Apply to CSS\r\n applyThemeToCSS(newTheme);\r\n };\r\n\r\n // Function to reset to default theme\r\n const resetToDefault = () => {\r\n setTheme(defaultTheme);\r\n };\r\n\r\n\r\n // Apply theme on mount and when theme changes\r\n useEffect(() => {\r\n applyThemeToCSS(currentTheme);\r\n }, [currentTheme]);\r\n\r\n // Check if current theme is dark\r\n const isDark = currentTheme.name === \"dark\";\r\n\r\n const value: ThemeContextType = {\r\n theme: currentTheme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes: Object.keys(themes),\r\n resetToDefault,\r\n isDark,\r\n };\r\n\r\n return (\r\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\r\n );\r\n};\r\n\r\n// Hook to use theme context\r\nexport const useTheme = (): ThemeContextType => {\r\n const context = useContext(ThemeContext);\r\n if (context === undefined) {\r\n throw new Error(\"useTheme must be used within a ThemeProvider\");\r\n }\r\n return context;\r\n};\r\n\r\n// Hook to check if theme context is available\r\nexport const useThemeContext = () => {\r\n const context = useContext(ThemeContext);\r\n return context !== undefined;\r\n};\r\n","import { useCallback, useEffect, useRef } from \"react\";\r\nimport type { ThemeOverride } from \"../contexts/types\";\r\n\r\ninterface UseThemeOverrideOptions {\r\n scope?: \"global\" | \"local\";\r\n element?: HTMLElement | null;\r\n prefix?: string;\r\n}\r\n\r\n/**\r\n * Hook para aplicar overrides directos a variables CSS del tema\r\n * Permite personalización granular sin cambiar el tema completo\r\n */\r\nexport const useThemeOverride = (options: UseThemeOverrideOptions = {}) => {\r\n const { scope = \"global\", element = null, prefix = \"flysoft\" } = options;\r\n\r\n const appliedOverrides = useRef<Set<string>>(new Set());\r\n\r\n // Función para aplicar override\r\n const applyOverride = useCallback(\r\n (overrides: ThemeOverride) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) {\r\n console.warn(\"useThemeOverride: No target element available\");\r\n return;\r\n }\r\n\r\n Object.entries(overrides).forEach(([key, value]) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n // Aplicar el override\r\n targetElement.style.setProperty(cssVarName, String(value));\r\n\r\n // Registrar para poder revertir después\r\n appliedOverrides.current.add(cssVarName);\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir overrides específicos\r\n const revertOverride = useCallback(\r\n (keys: string[]) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n keys.forEach((key) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n if (appliedOverrides.current.has(cssVarName)) {\r\n targetElement.style.removeProperty(cssVarName);\r\n appliedOverrides.current.delete(cssVarName);\r\n }\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir todos los overrides aplicados\r\n const revertAllOverrides = useCallback(() => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n appliedOverrides.current.forEach((cssVarName) => {\r\n targetElement.style.removeProperty(cssVarName);\r\n });\r\n\r\n appliedOverrides.current.clear();\r\n }, [scope, element]);\r\n\r\n // Función para obtener el valor actual de una variable CSS\r\n const getCSSVariable = useCallback(\r\n (key: string): string | null => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return null;\r\n\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return (\r\n getComputedStyle(targetElement).getPropertyValue(cssVarName) || null\r\n );\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para verificar si un override está aplicado\r\n const isOverrideApplied = useCallback(\r\n (key: string): boolean => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return appliedOverrides.current.has(cssVarName);\r\n },\r\n [prefix]\r\n );\r\n\r\n // Cleanup al desmontar\r\n useEffect(() => {\r\n return () => {\r\n revertAllOverrides();\r\n };\r\n }, [revertAllOverrides]);\r\n\r\n return {\r\n applyOverride,\r\n revertOverride,\r\n revertAllOverrides,\r\n getCSSVariable,\r\n isOverrideApplied,\r\n appliedOverridesCount: appliedOverrides.current.size,\r\n };\r\n};\r\n\r\n/**\r\n * Hook para aplicar overrides temporales que se revierten automáticamente\r\n */\r\nexport const useTemporaryOverride = (\r\n overrides: ThemeOverride,\r\n duration: number = 3000,\r\n options: UseThemeOverrideOptions = {}\r\n) => {\r\n const { applyOverride, revertOverride } = useThemeOverride(options);\r\n\r\n const applyTemporaryOverride = useCallback(() => {\r\n applyOverride(overrides);\r\n\r\n const timeoutId = setTimeout(() => {\r\n revertOverride(Object.keys(overrides));\r\n }, duration);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n revertOverride(Object.keys(overrides));\r\n };\r\n }, [applyOverride, revertOverride, overrides, duration]);\r\n\r\n return { applyTemporaryOverride };\r\n};\r\n","import React from \"react\";\r\nimport { useTheme } from \"../contexts/ThemeContext\";\r\nimport { Button } from \"./form-controls/Button\";\r\nimport { Card } from \"./layout/Card\";\r\n\r\nexport const ThemeSwitcher: React.FC = () => {\r\n const {\r\n theme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes,\r\n resetToDefault,\r\n isDark,\r\n } = useTheme();\r\n\r\n return (\r\n <Card className=\"p-6 max-w-md mx-auto\">\r\n <h3\r\n className=\"text-lg font-semibold mb-4\"\r\n style={{ color: \"var(--flysoft-text-primary)\" }}\r\n >\r\n Theme Switcher\r\n </h3>\r\n\r\n <div className=\"space-y-3\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {availableThemes.map((themeName) => (\r\n <Button\r\n key={themeName}\r\n variant={currentThemeName === themeName ? \"primary\" : \"ghost\"}\r\n size=\"sm\"\r\n onClick={() => setTheme(themeName)}\r\n >\r\n {themeName}\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={resetToDefault}\r\n className=\"w-full\"\r\n >\r\n Reset to Default\r\n </Button>\r\n\r\n <div\r\n className=\"text-sm space-y-2\"\r\n style={{ color: \"var(--flysoft-text-secondary)\" }}\r\n >\r\n <p>\r\n <strong>Current Theme:</strong> {currentThemeName}\r\n </p>\r\n <p>\r\n <strong>Mode:</strong> {isDark ? \"Dark\" : \"Light\"}\r\n </p>\r\n <p>\r\n <strong>Primary Color:</strong> {theme.colors.primary}\r\n </p>\r\n </div>\r\n\r\n <div\r\n className=\"w-full h-8 rounded border-2\"\r\n style={{\r\n backgroundColor: theme.colors.primary,\r\n borderColor: theme.colors.borderDefault,\r\n }}\r\n />\r\n </div>\r\n </Card>\r\n );\r\n};\r\n"],"names":["Button","variant","size","icon","iconPosition","loading","children","className","disabled","props","baseClasses","variantClasses","sizeClasses","classes","renderIcon","jsx","jsxs","Input","label","error","id","inputId","stateClasses","inputClasses","iconClasses","Card","title","subtitle","headerActions","footer","Badge","rounded","roundedClasses","lightTheme","darkTheme","blueTheme","greenTheme","defaultTheme","themes","ThemeContext","createContext","ThemeProvider","initialTheme","storageKey","currentTheme","setCurrentTheme","useState","savedTheme","parsed","currentThemeName","setCurrentThemeName","applyThemeToCSS","theme","root","key","value","cssVarName","setTheme","newTheme","resetToDefault","useEffect","isDark","useTheme","context","useContext","useThemeContext","useThemeOverride","options","scope","element","prefix","appliedOverrides","useRef","applyOverride","useCallback","overrides","targetElement","revertOverride","keys","revertAllOverrides","getCSSVariable","isOverrideApplied","useTemporaryOverride","duration","timeoutId","ThemeSwitcher","availableThemes","themeName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/form-controls/Button.tsx","../src/components/form-controls/Input.tsx","../src/components/layout/Card.tsx","../src/components/utils/Badge.tsx","../src/contexts/presets.ts","../src/contexts/ThemeContext.tsx","../src/hooks/useThemeOverride.ts","../src/hooks/useGlobalThemeStyles.ts","../src/components/ThemeSwitcher.tsx"],"sourcesContent":["import React from \"react\";\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"outline\" | \"ghost\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n loading?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n variant = \"primary\",\r\n size = \"md\",\r\n icon,\r\n iconPosition = \"left\",\r\n loading = false,\r\n children,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}) => {\r\n const baseClasses = `\r\n inline-flex items-center justify-center font-medium rounded-sm transition-colors \r\n cursor-pointer\r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary)] text-[var(--color-primary-contrast)] \r\n hover:bg-[var(--color-primary-dark)] focus:ring-[var(--color-primary)]\r\n `,\r\n outline: `\r\n border border-[var(--color-primary)] text-[var(--color-primary)] \r\n hover:bg-[var(--color-bg-secondary)] focus:ring-[var(--color-primary)]\r\n `,\r\n ghost: `\r\n text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)] \r\n focus:ring-[var(--color-primary)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`;\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} ${\r\n iconPosition === \"right\" ? \"ml-2\" : \"mr-2\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <button className={classes} disabled={disabled || loading} {...props}>\r\n {loading && <i className=\"fa fa-spinner fa-spin mr-2\" />}\r\n {icon && iconPosition === \"left\" && !loading && renderIcon()}\r\n {children}\r\n {icon && iconPosition === \"right\" && !loading && renderIcon()}\r\n </button>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Input: React.FC<InputProps> = ({\r\n label,\r\n error,\r\n icon,\r\n iconPosition = \"left\",\r\n size = \"md\",\r\n className = \"\",\r\n id,\r\n ...props\r\n}) => {\r\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n const baseClasses = `\r\n w-full border rounded-lg transition-colors focus:outline-none focus:ring-2 \r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)] text-[var(--color-text-primary)]\r\n bg-[var(--color-bg-default)]\r\n `;\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const stateClasses = error\r\n ? `border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]`\r\n : `border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]`;\r\n\r\n const inputClasses = `${baseClasses} ${sizeClasses[size]} ${stateClasses} ${className}`;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} text-[var(--color-text-muted)] absolute top-1/2 transform -translate-y-1/2 ${\r\n iconPosition === \"left\" ? \"left-3\" : \"right-3\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <div className=\"relative\">\r\n {icon && iconPosition === \"left\" && renderIcon()}\r\n <input\r\n id={inputId}\r\n className={`${inputClasses} ${\r\n icon && iconPosition === \"left\" ? \"pl-10\" : \"\"\r\n } ${icon && iconPosition === \"right\" ? \"pr-10\" : \"\"}`}\r\n {...props}\r\n />\r\n {icon && iconPosition === \"right\" && renderIcon()}\r\n </div>\r\n {error && (\r\n <p className=\"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface CardProps {\r\n title?: string;\r\n subtitle?: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n headerActions?: React.ReactNode;\r\n footer?: React.ReactNode;\r\n variant?: \"default\" | \"elevated\" | \"outlined\";\r\n}\r\n\r\nexport const Card: React.FC<CardProps> = ({\r\n title,\r\n subtitle,\r\n children,\r\n className = \"\",\r\n headerActions,\r\n footer,\r\n variant = \"default\",\r\n}) => {\r\n const baseClasses = `\r\n bg-[var(--color-bg-default)] rounded-lg border\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n default: `border-[var(--color-border-default)]`,\r\n elevated: `border-[var(--color-border-default)] shadow-[var(--shadow-lg)]`,\r\n outlined: `border-[var(--color-gray-300)]`,\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\r\n\r\n return (\r\n <div className={classes}>\r\n {(title || subtitle || headerActions) && (\r\n <div className=\"px-6 py-4 border-b border-[var(--color-border-default)]\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n {title && (\r\n <h3 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">\r\n {title}\r\n </h3>\r\n )}\r\n {subtitle && (\r\n <p className=\"text-sm text-[var(--color-text-secondary)] mt-1\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n {headerActions && (\r\n <div className=\"flex items-center space-x-2\">{headerActions}</div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"px-6 py-4\">{children}</div>\r\n\r\n {footer && (\r\n <div className=\"px-6 py-4 border-t border-[var(--color-border-default)] bg-[var(--color-bg-secondary)] rounded-b-lg\">\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface BadgeProps {\r\n children: React.ReactNode;\r\n variant?: \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n rounded?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Badge: React.FC<BadgeProps> = ({\r\n children,\r\n variant = \"primary\",\r\n size = \"md\",\r\n rounded = false,\r\n className = \"\",\r\n}) => {\r\n const baseClasses =\r\n \"inline-flex items-center font-medium font-[var(--font-default)]\";\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary-light)] text-[var(--color-primary-dark)]\r\n hover:bg-[var(--color-primary)] hover:text-[var(--color-primary-contrast)]\r\n `,\r\n secondary: `\r\n bg-[var(--color-secondary-light)] text-[var(--color-secondary-dark)]\r\n hover:bg-[var(--color-secondary)] hover:text-[var(--color-secondary-contrast)]\r\n `,\r\n success: `\r\n bg-[var(--color-success-light)] text-[var(--color-success-dark)]\r\n hover:bg-[var(--color-success)] hover:text-[var(--color-success-contrast)]\r\n `,\r\n warning: `\r\n bg-[var(--color-warning-light)] text-[var(--color-warning-dark)]\r\n hover:bg-[var(--color-warning)] hover:text-[var(--color-warning-contrast)]\r\n `,\r\n danger: `\r\n bg-[var(--color-danger-light)] text-[var(--color-danger-dark)]\r\n hover:bg-[var(--color-danger)] hover:text-[var(--color-danger-contrast)]\r\n `,\r\n info: `\r\n bg-[var(--color-info-light)] text-[var(--color-info-dark)]\r\n hover:bg-[var(--color-info)] hover:text-[var(--color-info-contrast)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-2 py-0.5 text-xs\",\r\n md: \"px-2.5 py-0.5 text-sm\",\r\n lg: \"px-3 py-1 text-base\",\r\n };\r\n\r\n const roundedClasses = rounded ? \"rounded-full\" : \"rounded-md\";\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${roundedClasses} ${className}`;\r\n\r\n return <span className={classes}>{children}</span>;\r\n};\r\n","import type { Theme } from \"./types\";\r\n\r\nexport const lightTheme: Theme = {\r\n name: \"light\",\r\n colors: {\r\n primary: \"#007aff\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#0064d1\",\r\n primaryLight: \"#4da6ff\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#007aff\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const darkTheme: Theme = {\r\n name: \"dark\",\r\n colors: {\r\n primary: \"#3b82f6\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1d4ed8\",\r\n primaryLight: \"#60a5fa\",\r\n secondary: \"#9ca3af\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#6b7280\",\r\n secondaryLight: \"#d1d5db\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#111827\",\r\n gray100: \"#1f2937\",\r\n gray200: \"#374151\",\r\n gray300: \"#4b5563\",\r\n gray400: \"#6b7280\",\r\n gray500: \"#9ca3af\",\r\n gray600: \"#d1d5db\",\r\n gray700: \"#e5e7eb\",\r\n gray800: \"#f3f4f6\",\r\n gray900: \"#f9fafb\",\r\n borderDefault: \"#374151\",\r\n borderFocus: \"#3b82f6\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#111827\",\r\n bgSecondary: \"#1f2937\",\r\n bgDisabled: \"#374151\",\r\n textPrimary: \"#f9fafb\",\r\n textSecondary: \"#e5e7eb\",\r\n textMuted: \"#9ca3af\",\r\n textDisabled: \"#6b7280\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.3)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#f9fafb\",\r\n },\r\n};\r\n\r\nexport const blueTheme: Theme = {\r\n name: \"blue\",\r\n colors: {\r\n primary: \"#1e40af\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1e3a8a\",\r\n primaryLight: \"#3b82f6\",\r\n secondary: \"#64748b\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#475569\",\r\n secondaryLight: \"#94a3b8\",\r\n success: \"#059669\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#047857\",\r\n successLight: \"#10b981\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f8fafc\",\r\n gray100: \"#f1f5f9\",\r\n gray200: \"#e2e8f0\",\r\n gray300: \"#cbd5e1\",\r\n gray400: \"#94a3b8\",\r\n gray500: \"#64748b\",\r\n gray600: \"#475569\",\r\n gray700: \"#334155\",\r\n gray800: \"#1e293b\",\r\n gray900: \"#0f172a\",\r\n borderDefault: \"#e2e8f0\",\r\n borderFocus: \"#1e40af\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f8fafc\",\r\n bgDisabled: \"#f1f5f9\",\r\n textPrimary: \"#0f172a\",\r\n textSecondary: \"#334155\",\r\n textMuted: \"#64748b\",\r\n textDisabled: \"#94a3b8\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(30 64 175 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(30 64 175 / 0.1), 0 2px 4px -2px rgb(30 64 175 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(30 64 175 / 0.1), 0 4px 6px -4px rgb(30 64 175 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#0f172a\",\r\n },\r\n};\r\n\r\nexport const greenTheme: Theme = {\r\n name: \"green\",\r\n colors: {\r\n primary: \"#059669\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#047857\",\r\n primaryLight: \"#10b981\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#16a34a\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#15803d\",\r\n successLight: \"#22c55e\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#059669\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(5 150 105 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(5 150 105 / 0.1), 0 2px 4px -2px rgb(5 150 105 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(5 150 105 / 0.1), 0 4px 6px -4px rgb(5 150 105 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const defaultTheme = lightTheme;\r\n\r\nexport const themes: Record<string, Theme> = {\r\n light: lightTheme,\r\n dark: darkTheme,\r\n blue: blueTheme,\r\n green: greenTheme,\r\n};\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useState,\r\n type ReactNode,\r\n} from \"react\";\r\nimport type { Theme, ThemeContextType } from \"./types\";\r\nimport { themes, defaultTheme } from \"./presets\";\r\n\r\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\r\n\r\ninterface ThemeProviderProps {\r\n children: ReactNode;\r\n initialTheme?: string | Theme;\r\n storageKey?: string;\r\n forceInitialTheme?: boolean; // Nueva prop para forzar el tema inicial\r\n}\r\n\r\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\r\n children,\r\n initialTheme = \"light\",\r\n storageKey = \"flysoft-theme\",\r\n forceInitialTheme = false,\r\n}) => {\r\n // Almacenar el tema inicial para poder resetear a él\r\n const getInitialTheme = (): Theme => {\r\n if (typeof initialTheme === \"string\") {\r\n return themes[initialTheme] || defaultTheme;\r\n }\r\n return initialTheme;\r\n };\r\n\r\n const [currentTheme, setCurrentTheme] = useState<Theme>(() => {\r\n // Si forceInitialTheme es true, usar siempre el initialTheme\r\n if (forceInitialTheme) {\r\n return getInitialTheme();\r\n }\r\n\r\n // Try to get theme from localStorage\r\n if (typeof window !== \"undefined\") {\r\n const savedTheme = localStorage.getItem(storageKey);\r\n if (savedTheme) {\r\n if (themes[savedTheme]) {\r\n return themes[savedTheme];\r\n }\r\n // Try to parse as custom theme\r\n try {\r\n const parsed = JSON.parse(savedTheme);\r\n if (parsed.name && parsed.colors) {\r\n return parsed;\r\n }\r\n } catch {\r\n // Invalid JSON, fallback to default\r\n }\r\n }\r\n }\r\n\r\n // Handle initialTheme prop\r\n return getInitialTheme();\r\n });\r\n\r\n const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);\r\n\r\n // Function to apply theme to CSS variables\r\n const applyThemeToCSS = (theme: Theme) => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n const root = document.documentElement;\r\n\r\n // Apply color variables\r\n Object.entries(theme.colors).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply shadow variables\r\n Object.entries(theme.shadows).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-shadow-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply radius variables\r\n Object.entries(theme.radius).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-radius-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply spacing variables\r\n Object.entries(theme.spacing).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-spacing-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply font variables\r\n Object.entries(theme.fonts).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-font-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Set theme name as data attribute for CSS targeting\r\n root.setAttribute(\"data-theme\", theme.name);\r\n\r\n // Apply background and text colors to body for better integration\r\n const body = document.body;\r\n if (body) {\r\n body.style.backgroundColor = theme.colors.bgDefault;\r\n body.style.color = theme.colors.textPrimary;\r\n body.style.fontFamily = theme.fonts.default;\r\n }\r\n };\r\n\r\n // Function to set theme\r\n const setTheme = (theme: Theme | string) => {\r\n let newTheme: Theme;\r\n\r\n if (typeof theme === \"string\") {\r\n if (themes[theme]) {\r\n newTheme = themes[theme];\r\n } else {\r\n console.warn(`Theme \"${theme}\" not found, falling back to default`);\r\n newTheme = defaultTheme;\r\n }\r\n } else {\r\n newTheme = theme;\r\n }\r\n\r\n setCurrentTheme(newTheme);\r\n setCurrentThemeName(newTheme.name);\r\n\r\n // Save to localStorage\r\n if (typeof window !== \"undefined\") {\r\n localStorage.setItem(storageKey, JSON.stringify(newTheme));\r\n }\r\n\r\n // Apply to CSS\r\n applyThemeToCSS(newTheme);\r\n };\r\n\r\n // Function to reset to initial theme (the one passed as initialTheme prop)\r\n const resetToDefault = () => {\r\n setTheme(getInitialTheme());\r\n };\r\n\r\n // Apply theme on mount and when theme changes\r\n useEffect(() => {\r\n applyThemeToCSS(currentTheme);\r\n }, [currentTheme]);\r\n\r\n // Check if current theme is dark\r\n const isDark = currentTheme.name === \"dark\";\r\n\r\n const value: ThemeContextType = {\r\n theme: currentTheme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes: Object.keys(themes),\r\n resetToDefault,\r\n isDark,\r\n };\r\n\r\n return (\r\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\r\n );\r\n};\r\n\r\n// Hook to use theme context\r\nexport const useTheme = (): ThemeContextType => {\r\n const context = useContext(ThemeContext);\r\n if (context === undefined) {\r\n throw new Error(\"useTheme must be used within a ThemeProvider\");\r\n }\r\n return context;\r\n};\r\n\r\n// Hook to check if theme context is available\r\nexport const useThemeContext = () => {\r\n const context = useContext(ThemeContext);\r\n return context !== undefined;\r\n};\r\n","import { useCallback, useEffect, useRef } from \"react\";\r\nimport type { ThemeOverride } from \"../contexts/types\";\r\n\r\ninterface UseThemeOverrideOptions {\r\n scope?: \"global\" | \"local\";\r\n element?: HTMLElement | null;\r\n prefix?: string;\r\n}\r\n\r\n/**\r\n * Hook para aplicar overrides directos a variables CSS del tema\r\n * Permite personalización granular sin cambiar el tema completo\r\n */\r\nexport const useThemeOverride = (options: UseThemeOverrideOptions = {}) => {\r\n const { scope = \"global\", element = null, prefix = \"flysoft\" } = options;\r\n\r\n const appliedOverrides = useRef<Set<string>>(new Set());\r\n\r\n // Función para aplicar override\r\n const applyOverride = useCallback(\r\n (overrides: ThemeOverride) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) {\r\n console.warn(\"useThemeOverride: No target element available\");\r\n return;\r\n }\r\n\r\n Object.entries(overrides).forEach(([key, value]) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n // Aplicar el override\r\n targetElement.style.setProperty(cssVarName, String(value));\r\n\r\n // Registrar para poder revertir después\r\n appliedOverrides.current.add(cssVarName);\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir overrides específicos\r\n const revertOverride = useCallback(\r\n (keys: string[]) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n keys.forEach((key) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n if (appliedOverrides.current.has(cssVarName)) {\r\n targetElement.style.removeProperty(cssVarName);\r\n appliedOverrides.current.delete(cssVarName);\r\n }\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir todos los overrides aplicados\r\n const revertAllOverrides = useCallback(() => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n appliedOverrides.current.forEach((cssVarName) => {\r\n targetElement.style.removeProperty(cssVarName);\r\n });\r\n\r\n appliedOverrides.current.clear();\r\n }, [scope, element]);\r\n\r\n // Función para obtener el valor actual de una variable CSS\r\n const getCSSVariable = useCallback(\r\n (key: string): string | null => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return null;\r\n\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return (\r\n getComputedStyle(targetElement).getPropertyValue(cssVarName) || null\r\n );\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para verificar si un override está aplicado\r\n const isOverrideApplied = useCallback(\r\n (key: string): boolean => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return appliedOverrides.current.has(cssVarName);\r\n },\r\n [prefix]\r\n );\r\n\r\n // Cleanup al desmontar\r\n useEffect(() => {\r\n return () => {\r\n revertAllOverrides();\r\n };\r\n }, [revertAllOverrides]);\r\n\r\n return {\r\n applyOverride,\r\n revertOverride,\r\n revertAllOverrides,\r\n getCSSVariable,\r\n isOverrideApplied,\r\n appliedOverridesCount: appliedOverrides.current.size,\r\n };\r\n};\r\n\r\n/**\r\n * Hook para aplicar overrides temporales que se revierten automáticamente\r\n */\r\nexport const useTemporaryOverride = (\r\n overrides: ThemeOverride,\r\n duration: number = 3000,\r\n options: UseThemeOverrideOptions = {}\r\n) => {\r\n const { applyOverride, revertOverride } = useThemeOverride(options);\r\n\r\n const applyTemporaryOverride = useCallback(() => {\r\n applyOverride(overrides);\r\n\r\n const timeoutId = setTimeout(() => {\r\n revertOverride(Object.keys(overrides));\r\n }, duration);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n revertOverride(Object.keys(overrides));\r\n };\r\n }, [applyOverride, revertOverride, overrides, duration]);\r\n\r\n return { applyTemporaryOverride };\r\n};\r\n","import { useEffect } from \"react\";\r\nimport { useTheme } from \"../contexts/ThemeContext\";\r\n\r\n/**\r\n * Hook que aplica estilos globales del tema al body y html\r\n * Útil para aplicaciones host que quieren que el tema afecte toda la página\r\n */\r\nexport const useGlobalThemeStyles = () => {\r\n const { theme } = useTheme();\r\n\r\n useEffect(() => {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n if (body) {\r\n // Aplicar estilos al body\r\n body.style.backgroundColor = theme.colors.bgDefault;\r\n body.style.color = theme.colors.textPrimary;\r\n body.style.fontFamily = theme.fonts.default;\r\n body.style.margin = \"0\";\r\n body.style.padding = \"0\";\r\n }\r\n\r\n if (html) {\r\n // Aplicar estilos al html\r\n html.style.backgroundColor = theme.colors.bgDefault;\r\n html.style.color = theme.colors.textPrimary;\r\n }\r\n\r\n // Cleanup function para restaurar estilos originales\r\n return () => {\r\n if (body) {\r\n body.style.backgroundColor = \"\";\r\n body.style.color = \"\";\r\n body.style.fontFamily = \"\";\r\n body.style.margin = \"\";\r\n body.style.padding = \"\";\r\n }\r\n if (html) {\r\n html.style.backgroundColor = \"\";\r\n html.style.color = \"\";\r\n }\r\n };\r\n }, [theme]);\r\n};\r\n","import React from \"react\";\r\nimport { useTheme } from \"../contexts/ThemeContext\";\r\nimport { Button } from \"./form-controls/Button\";\r\nimport { Card } from \"./layout/Card\";\r\n\r\nexport const ThemeSwitcher: React.FC = () => {\r\n const {\r\n theme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes,\r\n resetToDefault,\r\n isDark,\r\n } = useTheme();\r\n\r\n return (\r\n <Card className=\"p-6 max-w-md mx-auto\">\r\n <h3\r\n className=\"text-lg font-semibold mb-4\"\r\n style={{ color: \"var(--flysoft-text-primary)\" }}\r\n >\r\n Theme Switcher\r\n </h3>\r\n\r\n <div className=\"space-y-3\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {availableThemes.map((themeName) => (\r\n <Button\r\n key={themeName}\r\n variant={currentThemeName === themeName ? \"primary\" : \"ghost\"}\r\n size=\"sm\"\r\n onClick={() => setTheme(themeName)}\r\n >\r\n {themeName}\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={resetToDefault}\r\n className=\"w-full\"\r\n >\r\n Reset to Default\r\n </Button>\r\n\r\n <div\r\n className=\"text-sm space-y-2\"\r\n style={{ color: \"var(--flysoft-text-secondary)\" }}\r\n >\r\n <p>\r\n <strong>Current Theme:</strong> {currentThemeName}\r\n </p>\r\n <p>\r\n <strong>Mode:</strong> {isDark ? \"Dark\" : \"Light\"}\r\n </p>\r\n <p>\r\n <strong>Primary Color:</strong> {theme.colors.primary}\r\n </p>\r\n </div>\r\n\r\n <div\r\n className=\"w-full h-8 rounded border-2\"\r\n style={{\r\n backgroundColor: theme.colors.primary,\r\n borderColor: theme.colors.borderDefault,\r\n }}\r\n />\r\n </div>\r\n </Card>\r\n );\r\n};\r\n"],"names":["Button","variant","size","icon","iconPosition","loading","children","className","disabled","props","baseClasses","variantClasses","sizeClasses","classes","renderIcon","jsx","jsxs","Input","label","error","id","inputId","stateClasses","inputClasses","iconClasses","Card","title","subtitle","headerActions","footer","Badge","rounded","roundedClasses","lightTheme","darkTheme","blueTheme","greenTheme","defaultTheme","themes","ThemeContext","createContext","ThemeProvider","initialTheme","storageKey","forceInitialTheme","getInitialTheme","currentTheme","setCurrentTheme","useState","savedTheme","parsed","currentThemeName","setCurrentThemeName","applyThemeToCSS","theme","root","key","value","cssVarName","body","setTheme","newTheme","resetToDefault","useEffect","isDark","useTheme","context","useContext","useThemeContext","useThemeOverride","options","scope","element","prefix","appliedOverrides","useRef","applyOverride","useCallback","overrides","targetElement","revertOverride","keys","revertAllOverrides","getCSSVariable","isOverrideApplied","useTemporaryOverride","duration","timeoutId","useGlobalThemeStyles","html","ThemeSwitcher","availableThemes","themeName"],"mappings":"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"}
|