flysoft-react-ui 0.1.12 → 0.1.13
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/components/form-controls/Button.d.ts.map +1 -1
- package/dist/components/form-controls/Button.js +27 -3
- package/dist/docs/DocsMenu.d.ts.map +1 -1
- package/dist/docs/DocsMenu.js +1 -1
- package/dist/docs/DocsRouter.d.ts.map +1 -1
- package/dist/docs/DocsRouter.js +2 -1
- package/dist/docs/InputDocs.d.ts +4 -0
- package/dist/docs/InputDocs.d.ts.map +1 -0
- package/dist/docs/InputDocs.js +7 -0
- package/dist/hooks/useElementScroll.d.ts.map +1 -1
- package/dist/hooks/useElementScroll.js +3 -2
- package/dist/index.css +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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/hooks/useThemeOverride.ts","../src/contexts/presets.ts","../src/contexts/ThemeContext.tsx","../src/hooks/useGlobalThemeStyles.ts","../src/hooks/useBreakpoint.ts","../src/hooks/useElementScroll.ts","../src/components/layout/AppLayout.tsx","../src/components/utils/Badge.tsx","../src/components/ThemeSwitcher.tsx","components/form-controls/Button.js","components/form-controls/Input.js","components/layout/Card.js","contexts/ThemeContext.js","components/utils/Badge.js","../src/templates/forms/LoginForm.js","../src/templates/forms/RegistrationForm.js","../src/templates/forms/ContactForm.js","../src/templates/layouts/DashboardLayout.js","../src/templates/layouts/SidebarLayout.js","../src/templates/patterns/FormPattern.js"],"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: `${children ? \"px-3 py-1.5\" : \"p-1.5\"} text-sm`,\r\n md: `${children ? \"px-4 py-2\" : \"p-2\"} text-base`,\r\n lg: `${children ? \"px-6 py-3\" : \"p-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 children ? (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 { 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 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 { 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 { useState, useEffect } from \"react\";\r\n\r\nexport type Breakpoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\r\n\r\nexport interface WindowSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface BreakpointInfo {\r\n breakpoint: Breakpoint;\r\n windowSize: WindowSize;\r\n isMobile: boolean;\r\n isTablet: boolean;\r\n isDesktop: boolean;\r\n}\r\n\r\n// Breakpoints basados en Tailwind CSS\r\nconst breakpoints = {\r\n xs: 0,\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n \"2xl\": 1536,\r\n} as const;\r\n\r\nexport const useBreakpoint = (): BreakpointInfo => {\r\n const [windowSize, setWindowSize] = useState<WindowSize>({\r\n width: typeof window !== \"undefined\" ? window.innerWidth : 1024,\r\n height: typeof window !== \"undefined\" ? window.innerHeight : 768,\r\n });\r\n\r\n const [breakpoint, setBreakpoint] = useState<Breakpoint>(\"lg\");\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n\r\n setWindowSize({ width, height });\r\n\r\n // Determinar el breakpoint actual\r\n if (width >= breakpoints[\"2xl\"]) {\r\n setBreakpoint(\"2xl\");\r\n } else if (width >= breakpoints.xl) {\r\n setBreakpoint(\"xl\");\r\n } else if (width >= breakpoints.lg) {\r\n setBreakpoint(\"lg\");\r\n } else if (width >= breakpoints.md) {\r\n setBreakpoint(\"md\");\r\n } else if (width >= breakpoints.sm) {\r\n setBreakpoint(\"sm\");\r\n } else {\r\n setBreakpoint(\"xs\");\r\n }\r\n };\r\n\r\n // Ejecutar una vez al montar\r\n handleResize();\r\n\r\n // Agregar listener para cambios de tamaño\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n // Cleanup\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n const isMobile = breakpoint === \"xs\" || breakpoint === \"sm\";\r\n const isTablet = breakpoint === \"md\";\r\n const isDesktop =\r\n breakpoint === \"lg\" || breakpoint === \"xl\" || breakpoint === \"2xl\";\r\n\r\n return {\r\n breakpoint,\r\n windowSize,\r\n isMobile,\r\n isTablet,\r\n isDesktop,\r\n };\r\n};\r\n","import { useState, useEffect } from \"react\";\r\n\r\nexport const useElementScroll = (\r\n elementRef: React.RefObject<HTMLElement | null>\r\n) => {\r\n const [scrollY, setScrollY] = useState(0);\r\n const [scrollDirection, setScrollDirection] = useState<\"up\" | \"down\" | null>(\r\n null\r\n );\r\n\r\n useEffect(() => {\r\n if (!elementRef.current) return;\r\n\r\n const element = elementRef.current;\r\n let lastScrollY = element.scrollTop;\r\n let lastDirection: \"up\" | \"down\" | null = null;\r\n\r\n const handleScroll = () => {\r\n const currentScrollY = element.scrollTop;\r\n let newDirection: \"up\" | \"down\" | null = lastDirection;\r\n\r\n if (currentScrollY > lastScrollY && currentScrollY > 10) {\r\n newDirection = \"down\";\r\n } else if (currentScrollY < lastScrollY && currentScrollY > 0) {\r\n newDirection = \"up\";\r\n }\r\n\r\n setScrollY(currentScrollY);\r\n\r\n // Solo actualizar la dirección si cambió\r\n if (newDirection !== lastDirection) {\r\n setScrollDirection(newDirection);\r\n lastDirection = newDirection;\r\n }\r\n\r\n lastScrollY = currentScrollY;\r\n };\r\n\r\n // Agregar el listener al elemento\r\n element.addEventListener(\"scroll\", handleScroll, { passive: true });\r\n\r\n return () => {\r\n element.removeEventListener(\"scroll\", handleScroll);\r\n };\r\n }, [elementRef]);\r\n\r\n return { scrollY, scrollDirection };\r\n};\r\n","import React, { useState, useRef } from \"react\";\r\nimport { useBreakpoint } from \"../../hooks\";\r\nimport { useElementScroll } from \"../../hooks/useElementScroll\";\r\nimport { Button } from \"../form-controls\";\r\n\r\nexport interface AppLayoutProps {\r\n navBarDrawer?: React.ReactNode;\r\n leftDrawer?: React.ReactNode;\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const AppLayout: React.FC<AppLayoutProps> = ({\r\n navBarDrawer,\r\n leftDrawer,\r\n children,\r\n className = \"\",\r\n}) => {\r\n const { isMobile, isTablet } = useBreakpoint();\r\n const contentRef = useRef<HTMLElement | null>(null);\r\n const { scrollY, scrollDirection } = useElementScroll(contentRef);\r\n const [isMobileDrawerOpen, setIsMobileDrawerOpen] = useState(false);\r\n const [isNavbarVisible, setIsNavbarVisible] = useState(true);\r\n const isNavbarVisibleRef = useRef(isNavbarVisible);\r\n\r\n const shouldShowMobileDrawer = isMobile || isTablet;\r\n const shouldShowDesktopDrawer = !shouldShowMobileDrawer && leftDrawer;\r\n\r\n // Mantener el ref sincronizado con el estado\r\n React.useEffect(() => {\r\n isNavbarVisibleRef.current = isNavbarVisible;\r\n }, [isNavbarVisible]);\r\n\r\n // Controlar visibilidad del navbar basado en scroll\r\n React.useEffect(() => {\r\n let shouldBeVisible: boolean;\r\n\r\n if (scrollY < 100) {\r\n // Siempre mostrar navbar cerca del top\r\n shouldBeVisible = true;\r\n } else if (scrollDirection === \"down\" && scrollY > 100) {\r\n // Ocultar navbar al hacer scroll hacia abajo\r\n shouldBeVisible = false;\r\n } else if (scrollDirection === \"up\" && scrollY > 100) {\r\n // Mostrar navbar al hacer scroll hacia arriba\r\n shouldBeVisible = true;\r\n } else {\r\n // No cambiar el estado si scrollDirection es null o no se cumple ninguna condición\r\n return;\r\n }\r\n\r\n // Solo actualizar el estado si hay un cambio real\r\n if (shouldBeVisible !== isNavbarVisibleRef.current) {\r\n setIsNavbarVisible(shouldBeVisible);\r\n }\r\n }, [scrollDirection, scrollY]);\r\n\r\n const handleMobileDrawerToggle = () => {\r\n setIsMobileDrawerOpen(!isMobileDrawerOpen);\r\n };\r\n\r\n const handleOverlayClick = () => {\r\n setIsMobileDrawerOpen(false);\r\n };\r\n\r\n // Clases base del layout\r\n const layoutClasses = `\r\n flex flex-col h-screen w-full\r\n font-[var(--font-default)]\r\n ${className}\r\n `;\r\n\r\n // Clases del navbar\r\n const navbarClasses = `\r\n bg-[var(--color-bg-default)] border-b border-[var(--color-border-default)]\r\n z-[1000] fixed top-0 left-0 right-0\r\n transform transition-transform duration-300 ease-in-out\r\n ${isNavbarVisible ? \"translate-y-0\" : \"-translate-y-full\"}\r\n `;\r\n\r\n // Estilos inline para debug\r\n const navbarStyle = {\r\n transform: isNavbarVisible ? \"translateY(0)\" : \"translateY(-100%)\",\r\n transition: \"transform 300ms ease-in-out\",\r\n };\r\n\r\n const navbarContentClasses = `\r\n flex items-center pr-4 lg:px-4 h-16 gap-2\r\n md:px-3\r\n `;\r\n\r\n const navbarDrawerClasses = `flex-1`;\r\n\r\n // Clases del contenido principal\r\n const mainClasses = `\r\n flex flex-1 overflow-hidden\r\n transition-all duration-300 ease-in-out\r\n ${navBarDrawer && isNavbarVisible ? \"pt-16\" : \"\"}\r\n `;\r\n\r\n const leftDrawerClasses = `\r\n w-64 bg-[var(--color-bg-default)]\r\n overflow-y-auto flex-shrink-0 p-4\r\n transition-all duration-300 ease-in-out\r\n ${navBarDrawer && isNavbarVisible ? \"pt-20\" : \"pt-4\"}\r\n `;\r\n\r\n const contentClasses = `\r\n flex-1 overflow-y-auto px-2 py-4 lg:px-6\r\n `;\r\n\r\n // Clases del overlay móvil\r\n const overlayClasses = `\r\n fixed inset-0 bg-black/50 backdrop-blur-sm z-[1998]\r\n `;\r\n\r\n // Clases del drawer móvil\r\n const mobileDrawerBaseClasses = `\r\n fixed top-0 left-0 h-screen w-64 max-w-[80vw]\r\n bg-[var(--color-bg-default)] shadow-[var(--shadow-xl)]\r\n transform -translate-x-full transition-transform duration-300 ease-in-out\r\n z-[1999] flex flex-col\r\n `;\r\n\r\n const mobileDrawerOpenClasses = `translate-x-0`;\r\n\r\n const mobileDrawerContentClasses = `\r\n flex-1 overflow-y-auto p-4\r\n `;\r\n\r\n return (\r\n <div className={layoutClasses}>\r\n {/* NavBar */}\r\n {navBarDrawer && (\r\n <nav className={navbarClasses} style={navbarStyle}>\r\n <div className={navbarContentClasses}>\r\n {/* Botón de menú para móvil/tablet */}\r\n {shouldShowMobileDrawer && leftDrawer && (\r\n <Button\r\n variant=\"ghost\"\r\n icon=\"fa-bars\"\r\n onClick={handleMobileDrawerToggle}\r\n aria-label=\"Abrir menú\"\r\n />\r\n )}\r\n\r\n {/* Contenido del navbar */}\r\n <div className={navbarDrawerClasses}>{navBarDrawer}</div>\r\n </div>\r\n </nav>\r\n )}\r\n\r\n {/* Contenido principal */}\r\n <div className={mainClasses}>\r\n {/* Left Drawer - Desktop */}\r\n {shouldShowDesktopDrawer && (\r\n <aside className={leftDrawerClasses}>{leftDrawer}</aside>\r\n )}\r\n\r\n {/* Contenido principal */}\r\n <main ref={contentRef} className={contentClasses}>\r\n {children}\r\n </main>\r\n </div>\r\n\r\n {/* Mobile Drawer Overlay */}\r\n {shouldShowMobileDrawer && leftDrawer && isMobileDrawerOpen && (\r\n <div className={overlayClasses} onClick={handleOverlayClick} />\r\n )}\r\n\r\n {/* Mobile Drawer */}\r\n {shouldShowMobileDrawer && leftDrawer && (\r\n <aside\r\n className={`${mobileDrawerBaseClasses} ${\r\n isMobileDrawerOpen ? mobileDrawerOpenClasses : \"\"\r\n }`}\r\n >\r\n {/* Botón de cerrar */}\r\n <div className=\"text-right\">\r\n <Button\r\n variant=\"ghost\"\r\n icon=\"fa-times\"\r\n onClick={handleMobileDrawerToggle}\r\n aria-label=\"Cerrar menú\"\r\n />\r\n </div>\r\n {/* Contenido del drawer */}\r\n <div className={mobileDrawerContentClasses}>{leftDrawer}</div>\r\n </aside>\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 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","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Button = ({ variant = \"primary\", size = \"md\", icon, iconPosition = \"left\", loading = false, children, className = \"\", disabled, ...props }) => {\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 `;\n const variantClasses = {\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 `,\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 `,\n ghost: `\r\n text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)] \r\n focus:ring-[var(--color-primary)]\r\n `,\n };\n const sizeClasses = {\n sm: `${children ? \"px-3 py-1.5\" : \"p-1.5\"} text-sm`,\n md: `${children ? \"px-4 py-2\" : \"p-2\"} text-base`,\n lg: `${children ? \"px-6 py-3\" : \"p-3\"} text-lg`,\n };\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`;\n const renderIcon = () => {\n if (!icon)\n return null;\n const iconClasses = size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\n return (_jsx(\"i\", { className: `fa ${icon} ${iconClasses} ${children ? (iconPosition === \"right\" ? \"ml-2\" : \"mr-2\") : \"\"}` }));\n };\n return (_jsxs(\"button\", { className: classes, disabled: disabled || loading, ...props, children: [loading && _jsx(\"i\", { className: \"fa fa-spinner fa-spin mr-2\" }), icon && iconPosition === \"left\" && !loading && renderIcon(), children, icon && iconPosition === \"right\" && !loading && renderIcon()] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Input = ({ label, error, icon, iconPosition = \"left\", size = \"md\", className = \"\", id, ...props }) => {\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\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 `;\n const sizeClasses = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n };\n const stateClasses = error\n ? `border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]`\n : `border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]`;\n const inputClasses = `${baseClasses} ${sizeClasses[size]} ${stateClasses} ${className}`;\n const iconClasses = size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\n const renderIcon = () => {\n if (!icon)\n return null;\n return (_jsx(\"i\", { className: `fa ${icon} ${iconClasses} text-[var(--color-text-muted)] absolute top-1/2 transform -translate-y-1/2 ${iconPosition === \"left\" ? \"left-3\" : \"right-3\"}` }));\n };\n return (_jsxs(\"div\", { className: \"w-full\", children: [label && (_jsx(\"label\", { htmlFor: inputId, className: \"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\", children: label })), _jsxs(\"div\", { className: \"relative\", children: [icon && iconPosition === \"left\" && renderIcon(), _jsx(\"input\", { id: inputId, className: `${inputClasses} ${icon && iconPosition === \"left\" ? \"pl-10\" : \"\"} ${icon && iconPosition === \"right\" ? \"pr-10\" : \"\"}`, ...props }), icon && iconPosition === \"right\" && renderIcon()] }), error && (_jsx(\"p\", { className: \"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\", children: error }))] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Card = ({ title, subtitle, children, className = \"\", headerActions, footer, variant = \"default\", }) => {\n const baseClasses = `\r\n bg-[var(--color-bg-default)] rounded-lg border\r\n font-[var(--font-default)]\r\n `;\n const variantClasses = {\n default: `border-[var(--color-border-default)]`,\n elevated: `border-[var(--color-border-default)] shadow-[var(--shadow-lg)]`,\n outlined: `border-[var(--color-gray-300)]`,\n };\n const classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\n return (_jsxs(\"div\", { className: classes, children: [(title || subtitle || headerActions) && (_jsx(\"div\", { className: \"px-6 py-4 border-b border-[var(--color-border-default)]\", children: _jsxs(\"div\", { className: \"flex items-center justify-between\", children: [_jsxs(\"div\", { children: [title && (_jsx(\"h3\", { className: \"text-lg font-semibold text-[var(--color-text-primary)]\", children: title })), subtitle && (_jsx(\"p\", { className: \"text-sm text-[var(--color-text-secondary)] mt-1\", children: subtitle }))] }), headerActions && (_jsx(\"div\", { className: \"flex items-center space-x-2\", children: headerActions }))] }) })), _jsx(\"div\", { className: \"px-6 py-4\", children: children }), footer && (_jsx(\"div\", { className: \"px-6 py-4 border-t border-[var(--color-border-default)] bg-[var(--color-bg-secondary)] rounded-b-lg\", children: footer }))] }));\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React, { createContext, useContext, useEffect, useState, } from \"react\";\nimport { themes, defaultTheme } from \"./presets\";\nconst ThemeContext = createContext(undefined);\nexport const ThemeProvider = ({ children, initialTheme = \"light\", storageKey = \"flysoft-theme\", forceInitialTheme = false, }) => {\n // Almacenar el tema inicial para poder resetear a él\n const getInitialTheme = () => {\n if (typeof initialTheme === \"string\") {\n return themes[initialTheme] || defaultTheme;\n }\n return initialTheme;\n };\n const [currentTheme, setCurrentTheme] = useState(() => {\n // Si forceInitialTheme es true, usar siempre el initialTheme\n if (forceInitialTheme) {\n return getInitialTheme();\n }\n // Try to get theme from localStorage\n if (typeof window !== \"undefined\") {\n const savedTheme = localStorage.getItem(storageKey);\n if (savedTheme) {\n if (themes[savedTheme]) {\n return themes[savedTheme];\n }\n // Try to parse as custom theme\n try {\n const parsed = JSON.parse(savedTheme);\n if (parsed.name && parsed.colors) {\n return parsed;\n }\n }\n catch {\n // Invalid JSON, fallback to default\n }\n }\n }\n // Handle initialTheme prop\n return getInitialTheme();\n });\n const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);\n // Function to apply theme to CSS variables\n const applyThemeToCSS = (theme) => {\n if (typeof document === \"undefined\")\n return;\n const root = document.documentElement;\n // Apply color variables\n Object.entries(theme.colors).forEach(([key, value]) => {\n const cssVarName = `--flysoft-${key\n .replace(/([A-Z])/g, \"-$1\")\n .toLowerCase()}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply shadow variables\n Object.entries(theme.shadows).forEach(([key, value]) => {\n const cssVarName = `--flysoft-shadow-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply radius variables\n Object.entries(theme.radius).forEach(([key, value]) => {\n const cssVarName = `--flysoft-radius-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply spacing variables\n Object.entries(theme.spacing).forEach(([key, value]) => {\n const cssVarName = `--flysoft-spacing-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply font variables\n Object.entries(theme.fonts).forEach(([key, value]) => {\n const cssVarName = `--flysoft-font-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Set theme name as data attribute for CSS targeting\n root.setAttribute(\"data-theme\", theme.name);\n // Apply background and text colors to body for better integration\n const body = document.body;\n if (body) {\n body.style.backgroundColor = theme.colors.bgDefault;\n body.style.color = theme.colors.textPrimary;\n body.style.fontFamily = theme.fonts.default;\n }\n };\n // Function to set theme\n const setTheme = (theme) => {\n let newTheme;\n if (typeof theme === \"string\") {\n if (themes[theme]) {\n newTheme = themes[theme];\n }\n else {\n console.warn(`Theme \"${theme}\" not found, falling back to default`);\n newTheme = defaultTheme;\n }\n }\n else {\n newTheme = theme;\n }\n setCurrentTheme(newTheme);\n setCurrentThemeName(newTheme.name);\n // Save to localStorage\n if (typeof window !== \"undefined\") {\n localStorage.setItem(storageKey, JSON.stringify(newTheme));\n }\n // Apply to CSS\n applyThemeToCSS(newTheme);\n };\n // Function to reset to initial theme (the one passed as initialTheme prop)\n const resetToDefault = () => {\n setTheme(getInitialTheme());\n };\n // Apply theme on mount and when theme changes\n useEffect(() => {\n applyThemeToCSS(currentTheme);\n }, [currentTheme]);\n // Check if current theme is dark\n const isDark = currentTheme.name === \"dark\";\n const value = {\n theme: currentTheme,\n setTheme,\n currentThemeName,\n availableThemes: Object.keys(themes),\n resetToDefault,\n isDark,\n };\n return (_jsx(ThemeContext.Provider, { value: value, children: children }));\n};\n// Hook to use theme context\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\n// Hook to check if theme context is available\nexport const useThemeContext = () => {\n const context = useContext(ThemeContext);\n return context !== undefined;\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Badge = ({ children, variant = \"primary\", size = \"md\", rounded = false, className = \"\", }) => {\n const baseClasses = \"inline-flex items-center font-medium font-[var(--font-default)]\";\n const variantClasses = {\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 `,\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 `,\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 `,\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 `,\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 `,\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 `,\n };\n const sizeClasses = {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-0.5 text-sm\",\n lg: \"px-3 py-1 text-base\",\n };\n const roundedClasses = rounded ? \"rounded-full\" : \"rounded-md\";\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${roundedClasses} ${className}`;\n return _jsx(\"span\", { className: classes, children: children });\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const LoginForm = ({ onSubmit, loading = false, error, className = \"\", }) => {\n const [formData, setFormData] = useState({\n email: \"\",\n password: \"\",\n });\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación básica\n const newErrors = {};\n if (!formData.email) {\n newErrors.email = \"El email es requerido\";\n }\n else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = \"El email no es válido\";\n }\n if (!formData.password) {\n newErrors.password = \"La contraseña es requerida\";\n }\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit?.(formData);\n }\n };\n const handleChange = (field) => (e) => {\n setFormData((prev) => ({ ...prev, [field]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[field]) {\n setErrors((prev) => ({ ...prev, [field]: undefined }));\n }\n };\n return (_jsxs(Card, { title: \"Iniciar Sesi\\u00F3n\", subtitle: \"Ingresa tus credenciales para acceder\", className: className, children: [_jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsx(Input, { label: \"Email\", type: \"email\", placeholder: \"tu@email.com\", icon: \"fa-envelope\", value: formData.email, onChange: handleChange(\"email\"), error: errors.email, disabled: loading }), _jsx(Input, { label: \"Contrase\\u00F1a\", type: \"password\", placeholder: \"Tu contrase\\u00F1a\", icon: \"fa-lock\", value: formData.password, onChange: handleChange(\"password\"), error: errors.password, disabled: loading }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: \"fa-sign-in-alt\", loading: loading, className: \"w-full\", children: \"Iniciar Sesi\\u00F3n\" })] }), _jsx(\"div\", { className: \"mt-4 text-center\", children: _jsxs(\"p\", { className: \"text-sm text-gray-600\", children: [\"\\u00BFNo tienes cuenta?\", \" \", _jsx(\"a\", { href: \"#\", className: \"text-blue-600 hover:text-blue-800 font-medium\", children: \"Reg\\u00EDstrate aqu\\u00ED\" })] }) })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const RegistrationForm = ({ onSubmit, loading = false, error, className = \"\", }) => {\n const [formData, setFormData] = useState({\n firstName: \"\",\n lastName: \"\",\n email: \"\",\n password: \"\",\n confirmPassword: \"\",\n });\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación\n const newErrors = {};\n if (!formData.firstName.trim()) {\n newErrors.firstName = \"El nombre es requerido\";\n }\n if (!formData.lastName.trim()) {\n newErrors.lastName = \"El apellido es requerido\";\n }\n if (!formData.email) {\n newErrors.email = \"El email es requerido\";\n }\n else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = \"El email no es válido\";\n }\n if (!formData.password) {\n newErrors.password = \"La contraseña es requerida\";\n }\n else if (formData.password.length < 6) {\n newErrors.password = \"La contraseña debe tener al menos 6 caracteres\";\n }\n if (!formData.confirmPassword) {\n newErrors.confirmPassword = \"Confirma tu contraseña\";\n }\n else if (formData.password !== formData.confirmPassword) {\n newErrors.confirmPassword = \"Las contraseñas no coinciden\";\n }\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit?.(formData);\n }\n };\n const handleChange = (field) => (e) => {\n setFormData((prev) => ({ ...prev, [field]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[field]) {\n setErrors((prev) => ({ ...prev, [field]: undefined }));\n }\n };\n return (_jsxs(Card, { title: \"Crear Cuenta\", subtitle: \"Completa los datos para registrarte\", className: className, children: [_jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsxs(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 gap-4\", children: [_jsx(Input, { label: \"Nombre\", placeholder: \"Tu nombre\", icon: \"fa-user\", value: formData.firstName, onChange: handleChange(\"firstName\"), error: errors.firstName, disabled: loading }), _jsx(Input, { label: \"Apellido\", placeholder: \"Tu apellido\", icon: \"fa-user\", value: formData.lastName, onChange: handleChange(\"lastName\"), error: errors.lastName, disabled: loading })] }), _jsx(Input, { label: \"Email\", type: \"email\", placeholder: \"tu@email.com\", icon: \"fa-envelope\", value: formData.email, onChange: handleChange(\"email\"), error: errors.email, disabled: loading }), _jsx(Input, { label: \"Contrase\\u00F1a\", type: \"password\", placeholder: \"M\\u00EDnimo 6 caracteres\", icon: \"fa-lock\", value: formData.password, onChange: handleChange(\"password\"), error: errors.password, disabled: loading }), _jsx(Input, { label: \"Confirmar Contrase\\u00F1a\", type: \"password\", placeholder: \"Repite tu contrase\\u00F1a\", icon: \"fa-lock\", value: formData.confirmPassword, onChange: handleChange(\"confirmPassword\"), error: errors.confirmPassword, disabled: loading }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: \"fa-user-plus\", loading: loading, className: \"w-full\", children: \"Crear Cuenta\" })] }), _jsx(\"div\", { className: \"mt-4 text-center\", children: _jsxs(\"p\", { className: \"text-sm text-gray-600\", children: [\"\\u00BFYa tienes cuenta?\", \" \", _jsx(\"a\", { href: \"#\", className: \"text-blue-600 hover:text-blue-800 font-medium\", children: \"Inicia sesi\\u00F3n aqu\\u00ED\" })] }) })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const ContactForm = ({ onSubmit, loading = false, success = false, error, className = \"\", }) => {\n const [formData, setFormData] = useState({\n name: \"\",\n email: \"\",\n subject: \"\",\n message: \"\",\n });\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación\n const newErrors = {};\n if (!formData.name.trim()) {\n newErrors.name = \"El nombre es requerido\";\n }\n if (!formData.email) {\n newErrors.email = \"El email es requerido\";\n }\n else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = \"El email no es válido\";\n }\n if (!formData.subject.trim()) {\n newErrors.subject = \"El asunto es requerido\";\n }\n if (!formData.message.trim()) {\n newErrors.message = \"El mensaje es requerido\";\n }\n else if (formData.message.trim().length < 10) {\n newErrors.message = \"El mensaje debe tener al menos 10 caracteres\";\n }\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit?.(formData);\n }\n };\n const handleChange = (field) => (e) => {\n setFormData((prev) => ({ ...prev, [field]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[field]) {\n setErrors((prev) => ({ ...prev, [field]: undefined }));\n }\n };\n if (success) {\n return (_jsx(Card, { title: \"Mensaje Enviado\", subtitle: \"Gracias por contactarnos\", className: className, children: _jsxs(\"div\", { className: \"text-center py-8\", children: [_jsx(\"div\", { className: \"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4\", children: _jsx(\"i\", { className: \"fa fa-check text-green-600 text-2xl\" }) }), _jsx(\"h3\", { className: \"text-lg font-semibold text-gray-900 mb-2\", children: \"\\u00A1Mensaje enviado con \\u00E9xito!\" }), _jsx(\"p\", { className: \"text-gray-600 mb-4\", children: \"Hemos recibido tu mensaje y te responderemos pronto.\" }), _jsx(Button, { variant: \"outline\", onClick: () => window.location.reload(), icon: \"fa-refresh\", children: \"Enviar otro mensaje\" })] }) }));\n }\n return (_jsx(Card, { title: \"Cont\\u00E1ctanos\", subtitle: \"Env\\u00EDanos un mensaje y te responderemos pronto\", className: className, children: _jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsxs(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 gap-4\", children: [_jsx(Input, { label: \"Nombre Completo\", placeholder: \"Tu nombre completo\", icon: \"fa-user\", value: formData.name, onChange: handleChange(\"name\"), error: errors.name, disabled: loading }), _jsx(Input, { label: \"Email\", type: \"email\", placeholder: \"tu@email.com\", icon: \"fa-envelope\", value: formData.email, onChange: handleChange(\"email\"), error: errors.email, disabled: loading })] }), _jsx(Input, { label: \"Asunto\", placeholder: \"\\u00BFEn qu\\u00E9 podemos ayudarte?\", icon: \"fa-tag\", value: formData.subject, onChange: handleChange(\"subject\"), error: errors.subject, disabled: loading }), _jsxs(\"div\", { className: \"w-full\", children: [_jsx(\"label\", { className: \"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\", children: \"Mensaje\" }), _jsxs(\"div\", { className: \"relative\", children: [_jsx(\"i\", { className: \"fa fa-comment text-[var(--color-text-muted)] absolute top-3 left-3 w-5 h-5\" }), _jsx(\"textarea\", { placeholder: \"Escribe tu mensaje aqu\\u00ED...\", className: `\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)] pl-10 pr-4 py-3 text-base\r\n ${errors.message\n ? \"border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]\"\n : \"border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]\"}\r\n `, rows: 5, value: formData.message, onChange: handleChange(\"message\"), disabled: loading })] }), errors.message && (_jsx(\"p\", { className: \"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\", children: errors.message }))] }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: \"fa-paper-plane\", loading: loading, className: \"w-full\", children: \"Enviar Mensaje\" })] }) }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport { Card, Badge, Button } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const DashboardLayout = ({ title, subtitle, stats = [], actions, children, className = \"\", }) => {\n const getChangeColor = (changeType) => {\n switch (changeType) {\n case \"positive\":\n return \"text-green-600\";\n case \"negative\":\n return \"text-red-600\";\n default:\n return \"text-gray-600\";\n }\n };\n const getChangeIcon = (changeType) => {\n switch (changeType) {\n case \"positive\":\n return \"fa-arrow-up\";\n case \"negative\":\n return \"fa-arrow-down\";\n default:\n return \"fa-minus\";\n }\n };\n return (_jsxs(\"div\", { className: `min-h-screen bg-gray-50 ${className}`, children: [_jsx(\"div\", { className: \"bg-white shadow-sm border-b\", children: _jsx(\"div\", { className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\", children: _jsxs(\"div\", { className: \"flex justify-between items-center py-6\", children: [_jsxs(\"div\", { children: [_jsx(\"h1\", { className: \"text-2xl font-bold text-gray-900\", children: title }), subtitle && (_jsx(\"p\", { className: \"mt-1 text-sm text-gray-600\", children: subtitle }))] }), actions && (_jsx(\"div\", { className: \"flex items-center space-x-3\", children: actions }))] }) }) }), stats.length > 0 && (_jsx(\"div\", { className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6\", children: _jsx(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\", children: stats.map((stat, index) => (_jsx(Card, { variant: \"elevated\", className: \"p-6\", children: _jsxs(\"div\", { className: \"flex items-center\", children: [_jsx(\"div\", { className: \"flex-shrink-0\", children: stat.icon && (_jsx(\"div\", { className: \"w-8 h-8 bg-blue-100 rounded-lg flex items-center justify-center\", children: _jsx(\"i\", { className: `fa ${stat.icon} text-blue-600` }) })) }), _jsxs(\"div\", { className: \"ml-4 flex-1\", children: [_jsx(\"p\", { className: \"text-sm font-medium text-gray-600\", children: stat.title }), _jsx(\"p\", { className: \"text-2xl font-semibold text-gray-900\", children: stat.value }), stat.change && (_jsxs(\"div\", { className: \"flex items-center mt-1\", children: [_jsx(\"i\", { className: `fa ${getChangeIcon(stat.changeType)} text-xs mr-1 ${getChangeColor(stat.changeType)}` }), _jsx(\"span\", { className: `text-sm ${getChangeColor(stat.changeType)}`, children: stat.change })] }))] })] }) }, index))) }) })), _jsx(\"div\", { className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6\", children: children })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Badge } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const SidebarLayout = ({ title, menuItems, user, children, className = \"\", onLogout, }) => {\n const [sidebarOpen, setSidebarOpen] = useState(false);\n const [activeItem, setActiveItem] = useState(menuItems[0]?.href || \"\");\n const toggleSidebar = () => {\n setSidebarOpen(!sidebarOpen);\n };\n const handleMenuClick = (href) => {\n setActiveItem(href);\n setSidebarOpen(false); // Cerrar sidebar en móvil\n };\n return (_jsxs(\"div\", { className: `min-h-screen bg-gray-50 ${className}`, children: [sidebarOpen && (_jsx(\"div\", { className: \"fixed inset-0 z-40 bg-gray-600 bg-opacity-75 lg:hidden\", onClick: () => setSidebarOpen(false) })), _jsxs(\"div\", { className: `\r\n fixed inset-y-0 left-0 z-50 w-64 bg-white shadow-lg transform transition-transform duration-300 ease-in-out\r\n ${sidebarOpen ? \"translate-x-0\" : \"-translate-x-full\"}\r\n lg:translate-x-0 lg:static lg:inset-0\r\n `, children: [_jsxs(\"div\", { className: \"flex items-center justify-between h-16 px-6 border-b\", children: [_jsx(\"h1\", { className: \"text-xl font-bold text-gray-900\", children: title }), _jsx(\"button\", { onClick: toggleSidebar, className: \"lg:hidden p-2 rounded-md text-gray-400 hover:text-gray-600\", children: _jsx(\"i\", { className: \"fa fa-times\" }) })] }), _jsx(\"nav\", { className: \"mt-6 px-3\", children: _jsx(\"div\", { className: \"space-y-1\", children: menuItems.map((item) => (_jsxs(\"a\", { href: item.href, onClick: (e) => {\n e.preventDefault();\n handleMenuClick(item.href);\n }, className: `\r\n group flex items-center px-3 py-2 text-sm font-medium rounded-md transition-colors\r\n ${activeItem === item.href\n ? \"bg-blue-100 text-blue-700\"\n : \"text-gray-600 hover:bg-gray-50 hover:text-gray-900\"}\r\n `, children: [_jsx(\"i\", { className: `fa ${item.icon} mr-3 flex-shrink-0` }), _jsx(\"span\", { className: \"flex-1\", children: item.label }), item.badge && (_jsx(Badge, { variant: \"primary\", size: \"sm\", className: \"ml-2\", children: item.badge }))] }, item.href))) }) }), _jsx(\"div\", { className: \"absolute bottom-0 left-0 right-0 p-4 border-t\", children: _jsxs(\"div\", { className: \"flex items-center\", children: [_jsx(\"div\", { className: \"flex-shrink-0\", children: _jsx(\"div\", { className: \"w-8 h-8 bg-gray-300 rounded-full flex items-center justify-center\", children: _jsx(\"i\", { className: `fa ${user.avatar || \"fa-user\"} text-gray-600` }) }) }), _jsxs(\"div\", { className: \"ml-3 flex-1\", children: [_jsx(\"p\", { className: \"text-sm font-medium text-gray-900\", children: user.name }), user.email && (_jsx(\"p\", { className: \"text-xs text-gray-500\", children: user.email }))] }), onLogout && (_jsx(\"button\", { onClick: onLogout, className: \"ml-2 p-1 text-gray-400 hover:text-gray-600\", title: \"Cerrar sesi\\u00F3n\", children: _jsx(\"i\", { className: \"fa fa-sign-out-alt\" }) }))] }) })] }), _jsxs(\"div\", { className: \"lg:pl-64\", children: [_jsx(\"div\", { className: \"sticky top-0 z-10 bg-white shadow-sm border-b\", children: _jsxs(\"div\", { className: \"flex items-center justify-between h-16 px-4 sm:px-6 lg:px-8\", children: [_jsx(\"button\", { onClick: toggleSidebar, className: \"lg:hidden p-2 rounded-md text-gray-400 hover:text-gray-600\", children: _jsx(\"i\", { className: \"fa fa-bars\" }) }), _jsxs(\"div\", { className: \"flex items-center space-x-4\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", icon: \"fa-bell\", children: \"Notificaciones\" }), _jsx(Button, { variant: \"ghost\", size: \"sm\", icon: \"fa-cog\", children: \"Configuraci\\u00F3n\" })] })] }) }), _jsx(\"main\", { className: \"p-4 sm:p-6 lg:p-8\", children: children })] })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const FormPattern = ({ title, subtitle, fields, onSubmit, submitText = \"Enviar\", submitIcon = \"fa-paper-plane\", loading = false, error, success = false, className = \"\", gridCols = 1, }) => {\n const [formData, setFormData] = useState(fields.reduce((acc, field) => ({ ...acc, [field.name]: \"\" }), {}));\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación\n const newErrors = {};\n fields.forEach((field) => {\n const value = formData[field.name] || \"\";\n if (field.required && !value.trim()) {\n newErrors[field.name] = `${field.label} es requerido`;\n }\n else if (field.validation) {\n const validationError = field.validation(value);\n if (validationError) {\n newErrors[field.name] = validationError;\n }\n }\n });\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit(formData);\n }\n };\n const handleChange = (fieldName) => (e) => {\n setFormData((prev) => ({ ...prev, [fieldName]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[fieldName]) {\n setErrors((prev) => ({ ...prev, [fieldName]: undefined }));\n }\n };\n const renderField = (field) => {\n const commonProps = {\n label: field.label,\n placeholder: field.placeholder,\n icon: field.icon,\n value: formData[field.name] || \"\",\n onChange: handleChange(field.name),\n error: errors[field.name],\n disabled: loading,\n };\n if (field.multiline) {\n return (_jsxs(\"div\", { className: \"w-full\", children: [_jsxs(\"label\", { className: \"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\", children: [field.label, field.required && _jsx(\"span\", { className: \"text-red-500 ml-1\", children: \"*\" })] }), _jsxs(\"div\", { className: \"relative\", children: [field.icon && (_jsx(\"i\", { className: `fa ${field.icon} text-[var(--color-text-muted)] absolute top-3 left-3 w-5 h-5` })), _jsx(\"textarea\", { placeholder: field.placeholder, className: `\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)] px-4 py-3 text-base\r\n ${field.icon ? \"pl-10\" : \"pl-4\"}\r\n ${errors[field.name]\n ? \"border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]\"\n : \"border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]\"}\r\n `, rows: field.rows || 4, value: formData[field.name] || \"\", onChange: handleChange(field.name), disabled: loading })] }), errors[field.name] && (_jsx(\"p\", { className: \"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\", children: errors[field.name] }))] }, field.name));\n }\n return (_jsx(Input, { type: field.type || \"text\", ...commonProps }, field.name));\n };\n if (success) {\n return (_jsx(Card, { title: \"\\u00A1\\u00C9xito!\", subtitle: \"La operaci\\u00F3n se complet\\u00F3 correctamente\", className: className, children: _jsxs(\"div\", { className: \"text-center py-8\", children: [_jsx(\"div\", { className: \"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4\", children: _jsx(\"i\", { className: \"fa fa-check text-green-600 text-2xl\" }) }), _jsx(\"h3\", { className: \"text-lg font-semibold text-gray-900 mb-2\", children: \"\\u00A1Operaci\\u00F3n exitosa!\" }), _jsx(\"p\", { className: \"text-gray-600 mb-4\", children: \"Los datos se han procesado correctamente.\" }), _jsx(Button, { variant: \"outline\", onClick: () => window.location.reload(), icon: \"fa-refresh\", children: \"Continuar\" })] }) }));\n }\n return (_jsx(Card, { title: title, subtitle: subtitle, className: className, children: _jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsx(\"div\", { className: `grid grid-cols-1 ${gridCols === 2 ? \"md:grid-cols-2\" : \"\"} gap-4`, children: fields.map(renderField) }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: submitIcon, loading: loading, className: \"w-full\", children: submitText })] }) }));\n};\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","useThemeOverride","options","scope","element","prefix","appliedOverrides","useRef","applyOverride","useCallback","overrides","targetElement","key","value","cssVarName","revertOverride","keys","revertAllOverrides","getCSSVariable","isOverrideApplied","useEffect","useTemporaryOverride","duration","timeoutId","lightTheme","darkTheme","blueTheme","greenTheme","defaultTheme","themes","ThemeContext","createContext","ThemeProvider","initialTheme","storageKey","forceInitialTheme","getInitialTheme","currentTheme","setCurrentTheme","useState","savedTheme","parsed","currentThemeName","setCurrentThemeName","applyThemeToCSS","theme","root","body","setTheme","newTheme","resetToDefault","isDark","useTheme","context","useContext","useThemeContext","useGlobalThemeStyles","html","breakpoints","useBreakpoint","windowSize","setWindowSize","breakpoint","setBreakpoint","handleResize","width","height","useElementScroll","elementRef","scrollY","setScrollY","scrollDirection","setScrollDirection","lastScrollY","lastDirection","handleScroll","currentScrollY","newDirection","AppLayout","navBarDrawer","leftDrawer","isMobile","isTablet","contentRef","isMobileDrawerOpen","setIsMobileDrawerOpen","isNavbarVisible","setIsNavbarVisible","isNavbarVisibleRef","shouldShowMobileDrawer","shouldShowDesktopDrawer","React","shouldBeVisible","handleMobileDrawerToggle","handleOverlayClick","layoutClasses","Badge","rounded","roundedClasses","ThemeSwitcher","availableThemes","themeName","_jsx","_jsxs","LoginForm","onSubmit","formData","setFormData","errors","setErrors","handleSubmit","e","newErrors","handleChange","field","prev","RegistrationForm","ContactForm","success","DashboardLayout","stats","actions","getChangeColor","changeType","getChangeIcon","stat","index","SidebarLayout","menuItems","user","onLogout","sidebarOpen","setSidebarOpen","activeItem","setActiveItem","toggleSidebar","handleMenuClick","href","item","FormPattern","fields","submitText","submitIcon","gridCols","acc","validationError","fieldName","renderField","commonProps"],"mappings":";;;AAYO,MAAMA,IAAgC,CAAC;AAAA,EAC5C,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,MAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,SAAAC,IAAU;AAAA,EACV,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAc;AAAA;AAAA;AAAA;AAAA;AAAA,KAOdC,IAAiB;AAAA,IACrB,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,OAAO;AAAA;AAAA;AAAA;AAAA,EAAA,GAMHC,IAAc;AAAA,IAClB,IAAI,GAAGN,IAAW,gBAAgB,OAAO;AAAA,IACzC,IAAI,GAAGA,IAAW,cAAc,KAAK;AAAA,IACrC,IAAI,GAAGA,IAAW,cAAc,KAAK;AAAA,EAAA,GAGjCO,IAAU,GAAGH,CAAW,IAAIC,EAAeV,CAAO,CAAC,IAAIW,EAAYV,CAAI,CAAC,IAAIK,CAAS,IAErFO,IAAa,MACZX,IAMH,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,MAAMZ,CAAI,IAJvBD,MAAS,OAAO,YAAYA,MAAS,OAAO,YAAY,SAIlB,IAClCI,IAAYF,MAAiB,UAAU,SAAS,SAAU,EAC5D;AAAA,IAAA;AAAA,EAAA,IATc;AAcpB,SACE,gBAAAY,EAAC,YAAO,WAAWH,GAAS,UAAUL,KAAYH,GAAU,GAAGI,GAC5D,UAAA;AAAA,IAAAJ,KAAW,gBAAAU,EAAC,KAAA,EAAE,WAAU,6BAAA,CAA6B;AAAA,IACrDZ,KAAQC,MAAiB,UAAU,CAACC,KAAWS,EAAA;AAAA,IAC/CR;AAAA,IACAH,KAAQC,MAAiB,WAAW,CAACC,KAAWS,EAAA;AAAA,EAAW,GAC9D;AAEJ,GChEaG,KAA8B,CAAC;AAAA,EAC1C,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAhB;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,MAAAF,IAAO;AAAA,EACP,WAAAK,IAAY;AAAA,EACZ,IAAAa;AAAA,EACA,GAAGX;AACL,MAAM;AACJ,QAAMY,IAAUD,KAAM,SAAS,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,IAEhEV,IAAc;AAAA;AAAA;AAAA;AAAA;AAAA,KAOdE,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAU,IAAeH,IACjB,uHACA,wHAEEI,IAAe,GAAGb,CAAW,IAAIE,EAAYV,CAAI,CAAC,IAAIoB,CAAY,IAAIf,CAAS,IAE/EiB,IACJtB,MAAS,OAAO,YAAYA,MAAS,OAAO,YAAY,WAEpDY,IAAa,MACZX,IAGH,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,MAAMZ,CAAI,IAAIqB,CAAW,+EAClCpB,MAAiB,SAAS,WAAW,SACvC;AAAA,IAAA;AAAA,EAAA,IANc;AAWpB,SACE,gBAAAY,EAAC,OAAA,EAAI,WAAU,UACZ,UAAA;AAAA,IAAAE,KACC,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASM;AAAA,QACT,WAAU;AAAA,QAET,UAAAH;AAAA,MAAA;AAAA,IAAA;AAAA,IAGL,gBAAAF,EAAC,OAAA,EAAI,WAAU,YACZ,UAAA;AAAA,MAAAb,KAAQC,MAAiB,UAAUU,EAAA;AAAA,MACpC,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,IAAIM;AAAA,UACJ,WAAW,GAAGE,CAAY,IACxBpB,KAAQC,MAAiB,SAAS,UAAU,EAC9C,IAAID,KAAQC,MAAiB,UAAU,UAAU,EAAE;AAAA,UAClD,GAAGK;AAAA,QAAA;AAAA,MAAA;AAAA,MAELN,KAAQC,MAAiB,WAAWU,EAAA;AAAA,IAAW,GAClD;AAAA,IACCK,KACC,gBAAAJ,EAAC,KAAA,EAAE,WAAU,sEACV,UAAAI,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ,GC1EaM,IAA4B,CAAC;AAAA,EACxC,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAArB;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,eAAAqB;AAAA,EACA,QAAAC;AAAA,EACA,SAAA5B,IAAU;AACZ,MAAM;AAYJ,QAAMY,IAAU;AAAA;AAAA;AAAA,KANO;AAAA,IACrB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EAAA,EAGqCZ,CAAO,CAAC,IAAIM,CAAS;AAEtE,SACE,gBAAAS,EAAC,OAAA,EAAI,WAAWH,GACZ,UAAA;AAAA,KAAAa,KAASC,KAAYC,MACrB,gBAAAb,EAAC,OAAA,EAAI,WAAU,2DACb,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EACE,UAAA;AAAA,QAAAU,KACC,gBAAAX,EAAC,MAAA,EAAG,WAAU,0DACX,UAAAW,GACH;AAAA,QAEDC,KACC,gBAAAZ,EAAC,KAAA,EAAE,WAAU,mDACV,UAAAY,EAAA,CACH;AAAA,MAAA,GAEJ;AAAA,MACCC,KACC,gBAAAb,EAAC,OAAA,EAAI,WAAU,+BAA+B,UAAAa,EAAA,CAAc;AAAA,IAAA,EAAA,CAEhE,EAAA,CACF;AAAA,IAGF,gBAAAb,EAAC,OAAA,EAAI,WAAU,aAAa,UAAAT,EAAA,CAAS;AAAA,IAEpCuB,KACC,gBAAAd,EAAC,OAAA,EAAI,WAAU,uGACZ,UAAAc,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ,GCtDaC,IAAmB,CAACC,IAAmC,OAAO;AACzE,QAAM,EAAE,OAAAC,IAAQ,UAAU,SAAAC,IAAU,MAAM,QAAAC,IAAS,cAAcH,GAE3DI,IAAmBC,EAAoB,oBAAI,KAAK,GAGhDC,IAAgBC;AAAA,IACpB,CAACC,MAA6B;AAC5B,YAAMC,IACJR,MAAU,WAAW,SAAS,kBAAkBC;AAElD,UAAI,CAACO,GAAe;AAClB,gBAAQ,KAAK,+CAA+C;AAC5D;AAAA,MACF;AAEA,aAAO,QAAQD,CAAS,EAAE,QAAQ,CAAC,CAACE,GAAKC,CAAK,MAAM;AAClD,cAAMC,IAAa,KAAKT,CAAM,IAAIO,EAC/B,QAAQ,YAAY,KAAK,EACzB,YAAA,CAAa;AAGhB,QAAAD,EAAc,MAAM,YAAYG,GAAY,OAAOD,CAAK,CAAC,GAGzDP,EAAiB,QAAQ,IAAIQ,CAAU;AAAA,MACzC,CAAC;AAAA,IACH;AAAA,IACA,CAACX,GAAOC,GAASC,CAAM;AAAA,EAAA,GAInBU,IAAiBN;AAAA,IACrB,CAACO,MAAmB;AAClB,YAAML,IACJR,MAAU,WAAW,SAAS,kBAAkBC;AAElD,MAAKO,KAELK,EAAK,QAAQ,CAACJ,MAAQ;AACpB,cAAME,IAAa,KAAKT,CAAM,IAAIO,EAC/B,QAAQ,YAAY,KAAK,EACzB,YAAA,CAAa;AAEhB,QAAIN,EAAiB,QAAQ,IAAIQ,CAAU,MACzCH,EAAc,MAAM,eAAeG,CAAU,GAC7CR,EAAiB,QAAQ,OAAOQ,CAAU;AAAA,MAE9C,CAAC;AAAA,IACH;AAAA,IACA,CAACX,GAAOC,GAASC,CAAM;AAAA,EAAA,GAInBY,IAAqBR,EAAY,MAAM;AAC3C,UAAME,IACJR,MAAU,WAAW,SAAS,kBAAkBC;AAElD,IAAKO,MAELL,EAAiB,QAAQ,QAAQ,CAACQ,MAAe;AAC/C,MAAAH,EAAc,MAAM,eAAeG,CAAU;AAAA,IAC/C,CAAC,GAEDR,EAAiB,QAAQ,MAAA;AAAA,EAC3B,GAAG,CAACH,GAAOC,CAAO,CAAC,GAGbc,IAAiBT;AAAA,IACrB,CAACG,MAA+B;AAC9B,YAAMD,IACJR,MAAU,WAAW,SAAS,kBAAkBC;AAElD,UAAI,CAACO,EAAe,QAAO;AAE3B,YAAMG,IAAa,KAAKT,CAAM,IAAIO,EAC/B,QAAQ,YAAY,KAAK,EACzB,YAAA,CAAa;AAChB,aACE,iBAAiBD,CAAa,EAAE,iBAAiBG,CAAU,KAAK;AAAA,IAEpE;AAAA,IACA,CAACX,GAAOC,GAASC,CAAM;AAAA,EAAA,GAInBc,IAAoBV;AAAA,IACxB,CAACG,MAAyB;AACxB,YAAME,IAAa,KAAKT,CAAM,IAAIO,EAC/B,QAAQ,YAAY,KAAK,EACzB,YAAA,CAAa;AAChB,aAAON,EAAiB,QAAQ,IAAIQ,CAAU;AAAA,IAChD;AAAA,IACA,CAACT,CAAM;AAAA,EAAA;AAIT,SAAAe,EAAU,MACD,MAAM;AACX,IAAAH,EAAA;AAAA,EACF,GACC,CAACA,CAAkB,CAAC,GAEhB;AAAA,IACL,eAAAT;AAAA,IACA,gBAAAO;AAAA,IACA,oBAAAE;AAAA,IACA,gBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,uBAAuBb,EAAiB,QAAQ;AAAA,EAAA;AAEpD,GAKae,KAAuB,CAClCX,GACAY,IAAmB,KACnBpB,IAAmC,CAAA,MAChC;AACH,QAAM,EAAE,eAAAM,GAAe,gBAAAO,MAAmBd,EAAiBC,CAAO;AAelE,SAAO,EAAE,wBAbsBO,EAAY,MAAM;AAC/C,IAAAD,EAAcE,CAAS;AAEvB,UAAMa,IAAY,WAAW,MAAM;AACjC,MAAAR,EAAe,OAAO,KAAKL,CAAS,CAAC;AAAA,IACvC,GAAGY,CAAQ;AAEX,WAAO,MAAM;AACX,mBAAaC,CAAS,GACtBR,EAAe,OAAO,KAAKL,CAAS,CAAC;AAAA,IACvC;AAAA,EACF,GAAG,CAACF,GAAeO,GAAgBL,GAAWY,CAAQ,CAAC,EAE9C;AACX,GCpJaE,IAAoB;AAAA,EAC/B,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,eAAe;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,WAAW;AAAA,IACX,cAAc;AAAA,EAAA;AAAA,EAEhB,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,EAAA;AAElB,GAEaC,IAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,eAAe;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,WAAW;AAAA,IACX,cAAc;AAAA,EAAA;AAAA,EAEhB,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,EAAA;AAElB,GAEaC,IAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,eAAe;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,WAAW;AAAA,IACX,cAAc;AAAA,EAAA;AAAA,EAEhB,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,EAAA;AAElB,GAEaC,IAAoB;AAAA,EAC/B,MAAM;AAAA,EACN,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,MAAM;AAAA,IACN,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,eAAe;AAAA,IACf,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,WAAW;AAAA,IACX,cAAc;AAAA,EAAA;AAAA,EAEhB,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAAA,EAEN,OAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,cAAc;AAAA,EAAA;AAElB,GAEaC,IAAeJ,GAEfK,IAAgC;AAAA,EAC3C,OAAOL;AAAA,EACP,MAAMC;AAAA,EACN,MAAMC;AAAA,EACN,OAAOC;AACT,GCnSMG,IAAeC,EAA4C,MAAS,GAS7DC,KAA8C,CAAC;AAAA,EAC1D,UAAAvD;AAAA,EACA,cAAAwD,IAAe;AAAA,EACf,YAAAC,IAAa;AAAA,EACb,mBAAAC,IAAoB;AACtB,MAAM;AAEJ,QAAMC,IAAkB,MAClB,OAAOH,KAAiB,WACnBJ,EAAOI,CAAY,KAAKL,IAE1BK,GAGH,CAACI,GAAcC,CAAe,IAAIC,EAAgB,MAAM;AAE5D,QAAIJ;AACF,aAAOC,EAAA;AAIT,QAAI,OAAO,SAAW,KAAa;AACjC,YAAMI,IAAa,aAAa,QAAQN,CAAU;AAClD,UAAIM,GAAY;AACd,YAAIX,EAAOW,CAAU;AACnB,iBAAOX,EAAOW,CAAU;AAG1B,YAAI;AACF,gBAAMC,IAAS,KAAK,MAAMD,CAAU;AACpC,cAAIC,EAAO,QAAQA,EAAO;AACxB,mBAAOA;AAAA,QAEX,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAGA,WAAOL,EAAA;AAAA,EACT,CAAC,GAEK,CAACM,GAAkBC,CAAmB,IAAIJ,EAASF,EAAa,IAAI,GAGpEO,IAAkB,CAACC,MAAiB;AACxC,QAAI,OAAO,WAAa,IAAa;AAErC,UAAMC,IAAO,SAAS;AAGtB,WAAO,QAAQD,EAAM,MAAM,EAAE,QAAQ,CAAC,CAACjC,GAAKC,CAAK,MAAM;AACrD,YAAMC,IAAa,aAAaF,EAC7B,QAAQ,YAAY,KAAK,EACzB,aAAa;AAChB,MAAAkC,EAAK,MAAM,YAAYhC,GAAYD,CAAK;AAAA,IAC1C,CAAC,GAGD,OAAO,QAAQgC,EAAM,OAAO,EAAE,QAAQ,CAAC,CAACjC,GAAKC,CAAK,MAAM;AACtD,YAAMC,IAAa,oBAAoBF,CAAG;AAC1C,MAAAkC,EAAK,MAAM,YAAYhC,GAAYD,CAAK;AAAA,IAC1C,CAAC,GAGD,OAAO,QAAQgC,EAAM,MAAM,EAAE,QAAQ,CAAC,CAACjC,GAAKC,CAAK,MAAM;AACrD,YAAMC,IAAa,oBAAoBF,CAAG;AAC1C,MAAAkC,EAAK,MAAM,YAAYhC,GAAYD,CAAK;AAAA,IAC1C,CAAC,GAGD,OAAO,QAAQgC,EAAM,OAAO,EAAE,QAAQ,CAAC,CAACjC,GAAKC,CAAK,MAAM;AACtD,YAAMC,IAAa,qBAAqBF,CAAG;AAC3C,MAAAkC,EAAK,MAAM,YAAYhC,GAAYD,CAAK;AAAA,IAC1C,CAAC,GAGD,OAAO,QAAQgC,EAAM,KAAK,EAAE,QAAQ,CAAC,CAACjC,GAAKC,CAAK,MAAM;AACpD,YAAMC,IAAa,kBAAkBF,CAAG;AACxC,MAAAkC,EAAK,MAAM,YAAYhC,GAAYD,CAAK;AAAA,IAC1C,CAAC,GAGDiC,EAAK,aAAa,cAAcD,EAAM,IAAI;AAG1C,UAAME,IAAO,SAAS;AACtB,IAAIA,MACFA,EAAK,MAAM,kBAAkBF,EAAM,OAAO,WAC1CE,EAAK,MAAM,QAAQF,EAAM,OAAO,aAChCE,EAAK,MAAM,aAAaF,EAAM,MAAM;AAAA,EAExC,GAGMG,IAAW,CAACH,MAA0B;AAC1C,QAAII;AAEJ,IAAI,OAAOJ,KAAU,WACfhB,EAAOgB,CAAK,IACdI,IAAWpB,EAAOgB,CAAK,KAEvB,QAAQ,KAAK,UAAUA,CAAK,sCAAsC,GAClEI,IAAWrB,KAGbqB,IAAWJ,GAGbP,EAAgBW,CAAQ,GACxBN,EAAoBM,EAAS,IAAI,GAG7B,OAAO,SAAW,OACpB,aAAa,QAAQf,GAAY,KAAK,UAAUe,CAAQ,CAAC,GAI3DL,EAAgBK,CAAQ;AAAA,EAC1B,GAGMC,IAAiB,MAAM;AAC3B,IAAAF,EAASZ,GAAiB;AAAA,EAC5B;AAGA,EAAAhB,EAAU,MAAM;AACd,IAAAwB,EAAgBP,CAAY;AAAA,EAC9B,GAAG,CAACA,CAAY,CAAC;AAGjB,QAAMc,IAASd,EAAa,SAAS,QAE/BxB,IAA0B;AAAA,IAC9B,OAAOwB;AAAA,IACP,UAAAW;AAAA,IACA,kBAAAN;AAAA,IACA,iBAAiB,OAAO,KAAKb,CAAM;AAAA,IACnC,gBAAAqB;AAAA,IACA,QAAAC;AAAA,EAAA;AAGF,SACE,gBAAAjE,EAAC4C,EAAa,UAAb,EAAsB,OAAAjB,GAAe,UAAApC,EAAA,CAAS;AAEnD,GAGa2E,IAAW,MAAwB;AAC9C,QAAMC,IAAUC,EAAWxB,CAAY;AACvC,MAAIuB,MAAY;AACd,UAAM,IAAI,MAAM,8CAA8C;AAEhE,SAAOA;AACT,GAGaE,KAAkB,MACbD,EAAWxB,CAAY,MACpB,QC7KR0B,KAAuB,MAAM;AACxC,QAAM,EAAE,OAAAX,EAAA,IAAUO,EAAA;AAElB,EAAAhC,EAAU,MAAM;AACd,UAAM2B,IAAO,SAAS,MAChBU,IAAO,SAAS;AAEtB,WAAIV,MAEFA,EAAK,MAAM,kBAAkBF,EAAM,OAAO,WAC1CE,EAAK,MAAM,QAAQF,EAAM,OAAO,aAChCE,EAAK,MAAM,aAAaF,EAAM,MAAM,SACpCE,EAAK,MAAM,SAAS,KACpBA,EAAK,MAAM,UAAU,MAGnBU,MAEFA,EAAK,MAAM,kBAAkBZ,EAAM,OAAO,WAC1CY,EAAK,MAAM,QAAQZ,EAAM,OAAO,cAI3B,MAAM;AACX,MAAIE,MACFA,EAAK,MAAM,kBAAkB,IAC7BA,EAAK,MAAM,QAAQ,IACnBA,EAAK,MAAM,aAAa,IACxBA,EAAK,MAAM,SAAS,IACpBA,EAAK,MAAM,UAAU,KAEnBU,MACFA,EAAK,MAAM,kBAAkB,IAC7BA,EAAK,MAAM,QAAQ;AAAA,IAEvB;AAAA,EACF,GAAG,CAACZ,CAAK,CAAC;AACZ,GC1BMa,IAAc;AAAA,EAElB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT,GAEaC,IAAgB,MAAsB;AACjD,QAAM,CAACC,GAAYC,CAAa,IAAItB,EAAqB;AAAA,IACvD,OAAO,OAAO,SAAW,MAAc,OAAO,aAAa;AAAA,IAC3D,QAAQ,OAAO,SAAW,MAAc,OAAO,cAAc;AAAA,EAAA,CAC9D,GAEK,CAACuB,GAAYC,CAAa,IAAIxB,EAAqB,IAAI;AAE7D,SAAAnB,EAAU,MAAM;AACd,UAAM4C,IAAe,MAAM;AACzB,YAAMC,IAAQ,OAAO,YACfC,IAAS,OAAO;AAEtB,MAAAL,EAAc,EAAE,OAAAI,GAAO,QAAAC,GAAQ,GAG3BD,KAASP,EAAY,KAAK,IAC5BK,EAAc,KAAK,IACVE,KAASP,EAAY,KAC9BK,EAAc,IAAI,IACTE,KAASP,EAAY,KAC9BK,EAAc,IAAI,IACTE,KAASP,EAAY,KAC9BK,EAAc,IAAI,IACTE,KAASP,EAAY,KAC9BK,EAAc,IAAI,IAElBA,EAAc,IAAI;AAAA,IAEtB;AAGA,WAAAC,EAAA,GAGA,OAAO,iBAAiB,UAAUA,CAAY,GAGvC,MAAM,OAAO,oBAAoB,UAAUA,CAAY;AAAA,EAChE,GAAG,CAAA,CAAE,GAOE;AAAA,IACL,YAAAF;AAAA,IACA,YAAAF;AAAA,IACA,UAReE,MAAe,QAAQA,MAAe;AAAA,IASrD,UAReA,MAAe;AAAA,IAS9B,WAPAA,MAAe,QAAQA,MAAe,QAAQA,MAAe;AAAA,EAO7D;AAEJ,GC9EaK,IAAmB,CAC9BC,MACG;AACH,QAAM,CAACC,GAASC,CAAU,IAAI/B,EAAS,CAAC,GAClC,CAACgC,GAAiBC,CAAkB,IAAIjC;AAAA,IAC5C;AAAA,EAAA;AAGF,SAAAnB,EAAU,MAAM;AACd,QAAI,CAACgD,EAAW,QAAS;AAEzB,UAAMhE,IAAUgE,EAAW;AAC3B,QAAIK,IAAcrE,EAAQ,WACtBsE,IAAsC;AAE1C,UAAMC,IAAe,MAAM;AACzB,YAAMC,IAAiBxE,EAAQ;AAC/B,UAAIyE,IAAqCH;AAEzC,MAAIE,IAAiBH,KAAeG,IAAiB,KACnDC,IAAe,SACND,IAAiBH,KAAeG,IAAiB,MAC1DC,IAAe,OAGjBP,EAAWM,CAAc,GAGrBC,MAAiBH,MACnBF,EAAmBK,CAAY,GAC/BH,IAAgBG,IAGlBJ,IAAcG;AAAA,IAChB;AAGA,WAAAxE,EAAQ,iBAAiB,UAAUuE,GAAc,EAAE,SAAS,IAAM,GAE3D,MAAM;AACX,MAAAvE,EAAQ,oBAAoB,UAAUuE,CAAY;AAAA,IACpD;AAAA,EACF,GAAG,CAACP,CAAU,CAAC,GAER,EAAE,SAAAC,GAAS,iBAAAE,EAAA;AACpB,GCnCaO,KAAsC,CAAC;AAAA,EAClD,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAvG;AAAA,EACA,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,UAAAuG,GAAU,UAAAC,EAAA,IAAavB,EAAA,GACzBwB,IAAa5E,EAA2B,IAAI,GAC5C,EAAE,SAAA8D,GAAS,iBAAAE,MAAoBJ,EAAiBgB,CAAU,GAC1D,CAACC,GAAoBC,CAAqB,IAAI9C,EAAS,EAAK,GAC5D,CAAC+C,GAAiBC,CAAkB,IAAIhD,EAAS,EAAI,GACrDiD,IAAqBjF,EAAO+E,CAAe,GAE3CG,IAAyBR,KAAYC,GACrCQ,IAA0B,CAACD,KAA0BT;AAG3D,EAAAW,EAAM,UAAU,MAAM;AACpB,IAAAH,EAAmB,UAAUF;AAAA,EAC/B,GAAG,CAACA,CAAe,CAAC,GAGpBK,EAAM,UAAU,MAAM;AACpB,QAAIC;AAEJ,QAAIvB,IAAU;AAEZ,MAAAuB,IAAkB;AAAA,aACTrB,MAAoB,UAAUF,IAAU;AAEjD,MAAAuB,IAAkB;AAAA,aACTrB,MAAoB,QAAQF,IAAU;AAE/C,MAAAuB,IAAkB;AAAA;AAGlB;AAIF,IAAIA,MAAoBJ,EAAmB,WACzCD,EAAmBK,CAAe;AAAA,EAEtC,GAAG,CAACrB,GAAiBF,CAAO,CAAC;AAE7B,QAAMwB,IAA2B,MAAM;AACrC,IAAAR,EAAsB,CAACD,CAAkB;AAAA,EAC3C,GAEMU,IAAqB,MAAM;AAC/B,IAAAT,EAAsB,EAAK;AAAA,EAC7B,GAGMU,IAAgB;AAAA;AAAA;AAAA,MAGlBrH,CAAS;AAAA;AA6Db,SACE,gBAAAS,EAAC,OAAA,EAAI,WAAW4G,GAEb,UAAA;AAAA,IAAAhB,KACC,gBAAA7F,EAAC,SAAI,WA7DW;AAAA;AAAA;AAAA;AAAA,MAIlBoG,IAAkB,kBAAkB,mBAAmB;AAAA,KAyDtB,OArDjB;AAAA,MAClB,WAAWA,IAAkB,kBAAkB;AAAA,MAC/C,YAAY;AAAA,IAAA,GAoDN,UAAA,gBAAAnG,EAAC,OAAA,EAAI,WAjDgB;AAAA;AAAA;AAAA,KAmDlB,UAAA;AAAA,MAAAsG,KAA0BT,KACzB,gBAAA9F;AAAA,QAACf;AAAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS0H;AAAA,UACT,cAAW;AAAA,QAAA;AAAA,MAAA;AAAA,MAKf,gBAAA3G,EAAC,OAAA,EAAI,WAxDa,UAwDoB,UAAA6F,EAAA,CAAa;AAAA,IAAA,EAAA,CACrD,EAAA,CACF;AAAA,IAIF,gBAAA5F,EAAC,OAAA,EAAI,WA3DW;AAAA;AAAA;AAAA,MAGhB4F,KAAgBO,IAAkB,UAAU,EAAE;AAAA,KA0D3C,UAAA;AAAA,MAAAI,KACC,gBAAAxG,EAAC,SAAA,EAAM,WAxDW;AAAA;AAAA;AAAA;AAAA,MAItB6F,KAAgBO,IAAkB,UAAU,MAAM;AAAA,KAoDR,UAAAN,GAAW;AAAA,wBAIlD,QAAA,EAAK,KAAKG,GAAY,WArDN;AAAA;AAAA,KAsDd,UAAA1G,EAAA,CACH;AAAA,IAAA,GACF;AAAA,IAGCgH,KAA0BT,KAAcI,KACvC,gBAAAlG,EAAC,SAAI,WAvDY;AAAA;AAAA,KAuDe,SAAS4G,GAAoB;AAAA,IAI9DL,KAA0BT,KACzB,gBAAA7F;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,KACTiG,IAlDsB,kBAkDyB,EACjD;AAAA,QAGA,UAAA;AAAA,UAAA,gBAAAlG,EAAC,OAAA,EAAI,WAAU,cACb,UAAA,gBAAAA;AAAA,YAACf;AAAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS0H;AAAA,cACT,cAAW;AAAA,YAAA;AAAA,UAAA,GAEf;AAAA,UAEA,gBAAA3G,EAAC,OAAA,EAAI,WA7DsB;AAAA;AAAA,KA6DkB,UAAA8F,EAAA,CAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1D,GAEJ;AAEJ,GCtLagB,KAA8B,CAAC;AAAA,EAC1C,UAAAvH;AAAA,EACA,SAAAL,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,SAAA4H,IAAU;AAAA,EACV,WAAAvH,IAAY;AACd,MAAM;AACJ,QAAMG,IACJ,mEAEIC,IAAiB;AAAA,IACrB,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,WAAW;AAAA;AAAA;AAAA;AAAA,IAIX,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIR,MAAM;AAAA;AAAA;AAAA;AAAA,EAAA,GAMFC,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAmH,IAAiBD,IAAU,iBAAiB,cAE5CjH,IAAU,GAAGH,CAAW,IAAIC,EAAeV,CAAO,CAAC,IAAIW,EAAYV,CAAI,CAAC,IAAI6H,CAAc,IAAIxH,CAAS;AAE7G,SAAO,gBAAAQ,EAAC,QAAA,EAAK,WAAWF,GAAU,UAAAP,EAAA,CAAS;AAC7C,GCrDa0H,KAA0B,MAAM;AAC3C,QAAM;AAAA,IACJ,OAAAtD;AAAA,IACA,UAAAG;AAAA,IACA,kBAAAN;AAAA,IACA,iBAAA0D;AAAA,IACA,gBAAAlD;AAAA,IACA,QAAAC;AAAA,EAAA,IACEC,EAAA;AAEJ,SACE,gBAAAjE,EAACS,GAAA,EAAK,WAAU,wBACd,UAAA;AAAA,IAAA,gBAAAV;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,OAAO,8BAAA;AAAA,QACjB,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAID,gBAAAC,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,MAAA,gBAAAD,EAAC,SAAI,WAAU,wBACZ,UAAAkH,EAAgB,IAAI,CAACC,MACpB,gBAAAnH;AAAA,QAACf;AAAAA,QAAA;AAAA,UAEC,SAASuE,MAAqB2D,IAAY,YAAY;AAAA,UACtD,MAAK;AAAA,UACL,SAAS,MAAMrD,EAASqD,CAAS;AAAA,UAEhC,UAAAA;AAAA,QAAA;AAAA,QALIA;AAAA,MAAA,CAOR,GACH;AAAA,MAEA,gBAAAnH;AAAA,QAACf;AAAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS+E;AAAA,UACT,WAAU;AAAA,UACX,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAID,gBAAA/D;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,gCAAA;AAAA,UAEhB,UAAA;AAAA,YAAA,gBAAAA,EAAC,KAAA,EACC,UAAA;AAAA,cAAA,gBAAAD,EAAC,YAAO,UAAA,iBAAA,CAAc;AAAA,cAAS;AAAA,cAAEwD;AAAA,YAAA,GACnC;AAAA,8BACC,KAAA,EACC,UAAA;AAAA,cAAA,gBAAAxD,EAAC,YAAO,UAAA,QAAA,CAAK;AAAA,cAAS;AAAA,cAAEiE,IAAS,SAAS;AAAA,YAAA,GAC5C;AAAA,8BACC,KAAA,EACC,UAAA;AAAA,cAAA,gBAAAjE,EAAC,YAAO,UAAA,iBAAA,CAAc;AAAA,cAAS;AAAA,cAAE2D,EAAM,OAAO;AAAA,YAAA,EAAA,CAChD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGF,gBAAA3D;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,iBAAiB2D,EAAM,OAAO;AAAA,YAC9B,aAAaA,EAAM,OAAO;AAAA,UAAA;AAAA,QAC5B;AAAA,MAAA;AAAA,IACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GCtEa1E,IAAS,CAAC,EAAE,SAAAC,IAAU,WAAW,MAAAC,IAAO,MAAM,MAAAC,GAAM,cAAAC,IAAe,QAAQ,SAAAC,IAAU,IAAO,UAAAC,GAAU,WAAAC,IAAY,IAAI,UAAAC,GAAU,GAAGC,QAAY;AACxJ,QAAMC,IAAc;AAAA;AAAA;AAAA;AAAA;AAAA,KAMdC,IAAiB;AAAA,IACnB,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,OAAO;AAAA;AAAA;AAAA;AAAA,EAIf,GACUC,IAAc;AAAA,IAChB,IAAI,GAAGN,IAAW,gBAAgB,OAAO;AAAA,IACzC,IAAI,GAAGA,IAAW,cAAc,KAAK;AAAA,IACrC,IAAI,GAAGA,IAAW,cAAc,KAAK;AAAA,EAC7C,GACUO,IAAU,GAAGH,CAAW,IAAIC,EAAeV,CAAO,CAAC,IAAIW,EAAYV,CAAI,CAAC,IAAIK,CAAS,IACrFO,IAAa,MACVX,IAGGgI,EAAK,KAAK,EAAE,WAAW,MAAMhI,CAAI,IADrBD,MAAS,OAAO,YAAYA,MAAS,OAAO,YAAY,SACpB,IAAII,IAAYF,MAAiB,UAAU,SAAS,SAAU,EAAE,IAAI,IAFjH;AAIf,SAAQgI,EAAM,UAAU,EAAE,WAAWvH,GAAS,UAAUL,KAAYH,GAAS,GAAGI,GAAO,UAAU,CAACJ,KAAW8H,EAAK,KAAK,EAAE,WAAW,6BAA4B,CAAE,GAAGhI,KAAQC,MAAiB,UAAU,CAACC,KAAWS,EAAU,GAAIR,GAAUH,KAAQC,MAAiB,WAAW,CAACC,KAAWS,EAAU,CAAE,GAAG;AAC/S,GClCaG,IAAQ,CAAC,EAAE,OAAAC,GAAO,OAAAC,GAAO,MAAAhB,GAAM,cAAAC,IAAe,QAAQ,MAAAF,IAAO,MAAM,WAAAK,IAAY,IAAI,IAAAa,GAAI,GAAGX,EAAK,MAAO;AAC/G,QAAMY,IAAUD,KAAM,SAAS,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,IAChEV,IAAc;AAAA;AAAA;AAAA;AAAA;AAAA,KAMdE,IAAc;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACZ,GACUU,IAAeH,IACf,uHACA,wHACAI,IAAe,GAAGb,CAAW,IAAIE,EAAYV,CAAI,CAAC,IAAIoB,CAAY,IAAIf,CAAS,IAC/EiB,IAActB,MAAS,OAAO,YAAYA,MAAS,OAAO,YAAY,WACtEY,IAAa,MACVX,IAEGgI,EAAK,KAAK,EAAE,WAAW,MAAMhI,CAAI,IAAIqB,CAAW,+EAA+EpB,MAAiB,SAAS,WAAW,SAAS,IAAI,IAD9K;AAGf,SAAQgI,EAAM,OAAO,EAAE,WAAW,UAAU,UAAU,CAAClH,KAAUiH,EAAK,SAAS,EAAE,SAAS9G,GAAS,WAAW,8FAA8F,UAAUH,EAAK,CAAE,GAAIkH,EAAM,OAAO,EAAE,WAAW,YAAY,UAAU,CAACjI,KAAQC,MAAiB,UAAUU,EAAU,GAAIqH,EAAK,SAAS,EAAE,IAAI9G,GAAS,WAAW,GAAGE,CAAY,IAAIpB,KAAQC,MAAiB,SAAS,UAAU,EAAE,IAAID,KAAQC,MAAiB,UAAU,UAAU,EAAE,IAAI,GAAGK,EAAK,CAAE,GAAGN,KAAQC,MAAiB,WAAWU,EAAU,CAAE,EAAC,CAAE,GAAGK,KAAUgH,EAAK,KAAK,EAAE,WAAW,sEAAsE,UAAUhH,EAAK,CAAE,CAAE,GAAG;AACvqB,GCxBaM,IAAO,CAAC,EAAE,OAAAC,GAAO,UAAAC,GAAU,UAAArB,GAAU,WAAAC,IAAY,IAAI,eAAAqB,GAAe,QAAAC,GAAQ,SAAA5B,IAAU,UAAS,MAAQ;AAUhH,QAAMY,IAAU;AAAA;AAAA;AAAA,KALO;AAAA,IACnB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EAClB,EACqDZ,CAAO,CAAC,IAAIM,CAAS;AACtE,SAAQ6H,EAAM,OAAO,EAAE,WAAWvH,GAAS,UAAU,EAAEa,KAASC,KAAYC,MAAmBuG,EAAK,OAAO,EAAE,WAAW,2DAA2D,UAAUC,EAAM,OAAO,EAAE,WAAW,qCAAqC,UAAU,CAACA,EAAM,OAAO,EAAE,UAAU,CAAC1G,KAAUyG,EAAK,MAAM,EAAE,WAAW,0DAA0D,UAAUzG,EAAK,CAAE,GAAIC,KAAawG,EAAK,KAAK,EAAE,WAAW,mDAAmD,UAAUxG,EAAQ,CAAE,CAAE,EAAC,CAAE,GAAGC,KAAkBuG,EAAK,OAAO,EAAE,WAAW,+BAA+B,UAAUvG,GAAe,CAAE,EAAC,CAAE,EAAC,CAAE,GAAIuG,EAAK,OAAO,EAAE,WAAW,aAAa,UAAU7H,EAAQ,CAAE,GAAGuB,KAAWsG,EAAK,OAAO,EAAE,WAAW,uGAAuG,UAAUtG,EAAM,CAAE,CAAE,GAAG;AACv1B;ACXqB+B,EAAc,MAAS;ACDrC,MAAMiE,IAAQ,CAAC,EAAE,UAAAvH,GAAU,SAAAL,IAAU,WAAW,MAAAC,IAAO,MAAM,SAAA4H,IAAU,IAAO,WAAAvH,IAAY,GAAE,MAAQ;AACvG,QAAMG,IAAc,mEACdC,IAAiB;AAAA,IACnB,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,WAAW;AAAA;AAAA;AAAA;AAAA,IAIX,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,SAAS;AAAA;AAAA;AAAA;AAAA,IAIT,QAAQ;AAAA;AAAA;AAAA;AAAA,IAIR,MAAM;AAAA;AAAA;AAAA;AAAA,EAId,GACUC,IAAc;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACZ,GACUmH,IAAiBD,IAAU,iBAAiB,cAC5CjH,IAAU,GAAGH,CAAW,IAAIC,EAAeV,CAAO,CAAC,IAAIW,EAAYV,CAAI,CAAC,IAAI6H,CAAc,IAAIxH,CAAS;AAC7G,SAAO4H,EAAK,QAAQ,EAAE,WAAWtH,GAAS,UAAUP,GAAU;AAClE,GClCa+H,KAAY,CAAC,EAAE,UAAAC,GAAU,SAAAjI,IAAU,IAAO,OAAAc,GAAO,WAAAZ,IAAY,SAAU;AAChF,QAAM,CAACgI,GAAUC,CAAW,IAAIpE,EAAS;AAAA,IACrC,OAAO;AAAA,IACP,UAAU;AAAA,EAClB,CAAK,GACK,CAACqE,GAAQC,CAAS,IAAItE,EAAS,CAAA,CAAE,GACjCuE,IAAe,CAACC,MAAM;AACxB,IAAAA,EAAE,eAAc;AAEhB,UAAMC,IAAY,CAAA;AAClB,IAAKN,EAAS,QAGJ,eAAe,KAAKA,EAAS,KAAK,MACxCM,EAAU,QAAQ,2BAHlBA,EAAU,QAAQ,yBAKjBN,EAAS,aACVM,EAAU,WAAW,+BAEzBH,EAAUG,CAAS,GACf,OAAO,KAAKA,CAAS,EAAE,WAAW,KAClCP,IAAWC,CAAQ;AAAA,EAE3B,GACMO,IAAe,CAACC,MAAU,CAACH,MAAM;AACnC,IAAAJ,EAAY,CAACQ,OAAU,EAAE,GAAGA,GAAM,CAACD,CAAK,GAAGH,EAAE,OAAO,MAAK,EAAG,GAExDH,EAAOM,CAAK,KACZL,EAAU,CAACM,OAAU,EAAE,GAAGA,GAAM,CAACD,CAAK,GAAG,OAAS,EAAG;AAAA,EAE7D;AACA,SAAQX,EAAM3G,GAAM,EAAE,OAAO,kBAAuB,UAAU,yCAAyC,WAAWlB,GAAW,UAAU,CAAC6H,EAAM,QAAQ,EAAE,UAAUO,GAAc,WAAW,aAAa,UAAU,CAACxH,KAAUgH,EAAK,OAAO,EAAE,WAAW,kDAAkD,UAAUC,EAAM,KAAK,EAAE,WAAW,wBAAwB,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,kCAAiC,CAAE,GAAGhH,CAAK,EAAC,CAAE,EAAC,CAAE,GAAIgH,EAAKlH,GAAO,EAAE,OAAO,SAAS,MAAM,SAAS,aAAa,gBAAgB,MAAM,eAAe,OAAOsH,EAAS,OAAO,UAAUO,EAAa,OAAO,GAAG,OAAOL,EAAO,OAAO,UAAUpI,EAAO,CAAE,GAAG8H,EAAKlH,GAAO,EAAE,OAAO,cAAmB,MAAM,YAAY,aAAa,iBAAsB,MAAM,WAAW,OAAOsH,EAAS,UAAU,UAAUO,EAAa,UAAU,GAAG,OAAOL,EAAO,UAAU,UAAUpI,EAAO,CAAE,GAAG8H,EAAKnI,GAAQ,EAAE,MAAM,UAAU,SAAS,WAAW,MAAM,MAAM,MAAM,kBAAkB,SAASK,GAAS,WAAW,UAAU,UAAU,iBAAqB,CAAE,CAAC,EAAC,CAAE,GAAG8H,EAAK,OAAO,EAAE,WAAW,oBAAoB,UAAUC,EAAM,KAAK,EAAE,WAAW,yBAAyB,UAAU,CAAC,sBAA2B,KAAKD,EAAK,KAAK,EAAE,MAAM,KAAK,WAAW,iDAAiD,UAAU,kBAA2B,CAAE,CAAC,EAAC,CAAE,EAAC,CAAE,CAAC,GAAG;AACvxC,GChCac,KAAmB,CAAC,EAAE,UAAAX,GAAU,SAAAjI,IAAU,IAAO,OAAAc,GAAO,WAAAZ,IAAY,SAAU;AACvF,QAAM,CAACgI,GAAUC,CAAW,IAAIpE,EAAS;AAAA,IACrC,WAAW;AAAA,IACX,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,iBAAiB;AAAA,EACzB,CAAK,GACK,CAACqE,GAAQC,CAAS,IAAItE,EAAS,CAAA,CAAE,GACjCuE,IAAe,CAACC,MAAM;AACxB,IAAAA,EAAE,eAAc;AAEhB,UAAMC,IAAY,CAAA;AAClB,IAAKN,EAAS,UAAU,WACpBM,EAAU,YAAY,2BAErBN,EAAS,SAAS,WACnBM,EAAU,WAAW,6BAEpBN,EAAS,QAGJ,eAAe,KAAKA,EAAS,KAAK,MACxCM,EAAU,QAAQ,2BAHlBA,EAAU,QAAQ,yBAKjBN,EAAS,WAGLA,EAAS,SAAS,SAAS,MAChCM,EAAU,WAAW,oDAHrBA,EAAU,WAAW,8BAKpBN,EAAS,kBAGLA,EAAS,aAAaA,EAAS,oBACpCM,EAAU,kBAAkB,kCAH5BA,EAAU,kBAAkB,0BAKhCH,EAAUG,CAAS,GACf,OAAO,KAAKA,CAAS,EAAE,WAAW,KAClCP,IAAWC,CAAQ;AAAA,EAE3B,GACMO,IAAe,CAACC,MAAU,CAACH,MAAM;AACnC,IAAAJ,EAAY,CAACQ,OAAU,EAAE,GAAGA,GAAM,CAACD,CAAK,GAAGH,EAAE,OAAO,MAAK,EAAG,GAExDH,EAAOM,CAAK,KACZL,EAAU,CAACM,OAAU,EAAE,GAAGA,GAAM,CAACD,CAAK,GAAG,OAAS,EAAG;AAAA,EAE7D;AACA,SAAQX,EAAM3G,GAAM,EAAE,OAAO,gBAAgB,UAAU,uCAAuC,WAAWlB,GAAW,UAAU,CAAC6H,EAAM,QAAQ,EAAE,UAAUO,GAAc,WAAW,aAAa,UAAU,CAACxH,KAAUgH,EAAK,OAAO,EAAE,WAAW,kDAAkD,UAAUC,EAAM,KAAK,EAAE,WAAW,wBAAwB,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,kCAAiC,CAAE,GAAGhH,CAAK,GAAG,EAAC,CAAE,GAAIiH,EAAM,OAAO,EAAE,WAAW,yCAAyC,UAAU,CAACD,EAAKlH,GAAO,EAAE,OAAO,UAAU,aAAa,aAAa,MAAM,WAAW,OAAOsH,EAAS,WAAW,UAAUO,EAAa,WAAW,GAAG,OAAOL,EAAO,WAAW,UAAUpI,GAAS,GAAG8H,EAAKlH,GAAO,EAAE,OAAO,YAAY,aAAa,eAAe,MAAM,WAAW,OAAOsH,EAAS,UAAU,UAAUO,EAAa,UAAU,GAAG,OAAOL,EAAO,UAAU,UAAUpI,EAAO,CAAE,CAAC,EAAC,CAAE,GAAG8H,EAAKlH,GAAO,EAAE,OAAO,SAAS,MAAM,SAAS,aAAa,gBAAgB,MAAM,eAAe,OAAOsH,EAAS,OAAO,UAAUO,EAAa,OAAO,GAAG,OAAOL,EAAO,OAAO,UAAUpI,EAAO,CAAE,GAAG8H,EAAKlH,GAAO,EAAE,OAAO,cAAmB,MAAM,YAAY,aAAa,uBAA4B,MAAM,WAAW,OAAOsH,EAAS,UAAU,UAAUO,EAAa,UAAU,GAAG,OAAOL,EAAO,UAAU,UAAUpI,EAAO,CAAE,GAAG8H,EAAKlH,GAAO,EAAE,OAAO,wBAA6B,MAAM,YAAY,aAAa,wBAA6B,MAAM,WAAW,OAAOsH,EAAS,iBAAiB,UAAUO,EAAa,iBAAiB,GAAG,OAAOL,EAAO,iBAAiB,UAAUpI,EAAO,CAAE,GAAG8H,EAAKnI,GAAQ,EAAE,MAAM,UAAU,SAAS,WAAW,MAAM,MAAM,MAAM,gBAAgB,SAASK,GAAS,WAAW,UAAU,UAAU,eAAc,CAAE,CAAC,EAAC,CAAE,GAAG8H,EAAK,OAAO,EAAE,WAAW,oBAAoB,UAAUC,EAAM,KAAK,EAAE,WAAW,yBAAyB,UAAU,CAAC,sBAA2B,KAAKD,EAAK,KAAK,EAAE,MAAM,KAAK,WAAW,iDAAiD,UAAU,qBAA8B,CAAE,CAAC,EAAC,CAAE,EAAC,CAAE,CAAC,EAAC,CAAE;AACn9D,GClDae,KAAc,CAAC,EAAE,UAAAZ,GAAU,SAAAjI,IAAU,IAAO,SAAA8I,IAAU,IAAO,OAAAhI,GAAO,WAAAZ,IAAY,SAAU;AACnG,QAAM,CAACgI,GAAUC,CAAW,IAAIpE,EAAS;AAAA,IACrC,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,EACjB,CAAK,GACK,CAACqE,GAAQC,CAAS,IAAItE,EAAS,CAAA,CAAE,GACjCuE,IAAe,CAACC,MAAM;AACxB,IAAAA,EAAE,eAAc;AAEhB,UAAMC,IAAY,CAAA;AAClB,IAAKN,EAAS,KAAK,WACfM,EAAU,OAAO,2BAEhBN,EAAS,QAGJ,eAAe,KAAKA,EAAS,KAAK,MACxCM,EAAU,QAAQ,2BAHlBA,EAAU,QAAQ,yBAKjBN,EAAS,QAAQ,WAClBM,EAAU,UAAU,2BAEnBN,EAAS,QAAQ,SAGbA,EAAS,QAAQ,KAAI,EAAG,SAAS,OACtCM,EAAU,UAAU,kDAHpBA,EAAU,UAAU,2BAKxBH,EAAUG,CAAS,GACf,OAAO,KAAKA,CAAS,EAAE,WAAW,KAClCP,IAAWC,CAAQ;AAAA,EAE3B,GACMO,IAAe,CAACC,MAAU,CAACH,MAAM;AACnC,IAAAJ,EAAY,CAACQ,OAAU,EAAE,GAAGA,GAAM,CAACD,CAAK,GAAGH,EAAE,OAAO,MAAK,EAAG,GAExDH,EAAOM,CAAK,KACZL,EAAU,CAACM,OAAU,EAAE,GAAGA,GAAM,CAACD,CAAK,GAAG,OAAS,EAAG;AAAA,EAE7D;AACA,SAAII,IACQhB,EAAK1G,GAAM,EAAE,OAAO,mBAAmB,UAAU,4BAA4B,WAAWlB,GAAW,UAAU6H,EAAM,OAAO,EAAE,WAAW,oBAAoB,UAAU,CAACD,EAAK,OAAO,EAAE,WAAW,qFAAqF,UAAUA,EAAK,KAAK,EAAE,WAAW,sCAAqC,CAAE,EAAC,CAAE,GAAGA,EAAK,MAAM,EAAE,WAAW,4CAA4C,UAAU,8BAAuC,CAAE,GAAGA,EAAK,KAAK,EAAE,WAAW,sBAAsB,UAAU,uDAAsD,CAAE,GAAGA,EAAKnI,GAAQ,EAAE,SAAS,WAAW,SAAS,MAAM,OAAO,SAAS,OAAM,GAAI,MAAM,cAAc,UAAU,sBAAqB,CAAE,CAAC,EAAC,CAAE,EAAC,CAAE,IAE1tBmI,EAAK1G,GAAM,EAAE,OAAO,eAAoB,UAAU,iDAAsD,WAAWlB,GAAW,UAAU6H,EAAM,QAAQ,EAAE,UAAUO,GAAc,WAAW,aAAa,UAAU,CAACxH,KAAUgH,EAAK,OAAO,EAAE,WAAW,kDAAkD,UAAUC,EAAM,KAAK,EAAE,WAAW,wBAAwB,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,kCAAiC,CAAE,GAAGhH,CAAK,EAAC,CAAE,GAAG,GAAIiH,EAAM,OAAO,EAAE,WAAW,yCAAyC,UAAU,CAACD,EAAKlH,GAAO,EAAE,OAAO,mBAAmB,aAAa,sBAAsB,MAAM,WAAW,OAAOsH,EAAS,MAAM,UAAUO,EAAa,MAAM,GAAG,OAAOL,EAAO,MAAM,UAAUpI,EAAO,CAAE,GAAG8H,EAAKlH,GAAO,EAAE,OAAO,SAAS,MAAM,SAAS,aAAa,gBAAgB,MAAM,eAAe,OAAOsH,EAAS,OAAO,UAAUO,EAAa,OAAO,GAAG,OAAOL,EAAO,OAAO,UAAUpI,EAAO,CAAE,CAAC,EAAC,CAAE,GAAG8H,EAAKlH,GAAO,EAAE,OAAO,UAAU,aAAa,6BAAuC,MAAM,UAAU,OAAOsH,EAAS,SAAS,UAAUO,EAAa,SAAS,GAAG,OAAOL,EAAO,SAAS,UAAUpI,EAAO,CAAE,GAAG+H,EAAM,OAAO,EAAE,WAAW,UAAU,UAAU,CAACD,EAAK,SAAS,EAAE,WAAW,8FAA8F,UAAU,UAAS,CAAE,GAAGC,EAAM,OAAO,EAAE,WAAW,YAAY,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,6EAA4E,CAAE,GAAGA,EAAK,YAAY,EAAE,aAAa,8BAAmC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKt/CM,EAAO,UACiB,uHACA,sHAAsH;AAAA,iBAC/I,MAAM,GAAG,OAAOF,EAAS,SAAS,UAAUO,EAAa,SAAS,GAAG,UAAUzI,EAAO,CAAE,CAAC,EAAC,CAAE,GAAGoI,EAAO,WAAYN,EAAK,KAAK,EAAE,WAAW,sEAAsE,UAAUM,EAAO,QAAO,CAAE,CAAE,EAAC,CAAE,GAAGN,EAAKnI,GAAQ,EAAE,MAAM,UAAU,SAAS,WAAW,MAAM,MAAM,MAAM,kBAAkB,SAASK,GAAS,WAAW,UAAU,UAAU,iBAAgB,CAAE,CAAC,EAAC,CAAE,GAAG;AACna,GCtDa+I,KAAkB,CAAC,EAAE,OAAA1H,GAAO,UAAAC,GAAU,OAAA0H,IAAQ,IAAI,SAAAC,GAAS,UAAAhJ,GAAU,WAAAC,IAAY,SAAU;AACpG,QAAMgJ,IAAiB,CAACC,MAAe;AACnC,YAAQA,GAAU;AAAA,MACd,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACvB;AAAA,EACI,GACMC,IAAgB,CAACD,MAAe;AAClC,YAAQA,GAAU;AAAA,MACd,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACvB;AAAA,EACI;AACA,SAAQpB,EAAM,OAAO,EAAE,WAAW,2BAA2B7H,CAAS,IAAI,UAAU,CAAC4H,EAAK,OAAO,EAAE,WAAW,+BAA+B,UAAUA,EAAK,OAAO,EAAE,WAAW,0CAA0C,UAAUC,EAAM,OAAO,EAAE,WAAW,0CAA0C,UAAU,CAACA,EAAM,OAAO,EAAE,UAAU,CAACD,EAAK,MAAM,EAAE,WAAW,oCAAoC,UAAUzG,EAAK,CAAE,GAAGC,KAAawG,EAAK,KAAK,EAAE,WAAW,8BAA8B,UAAUxG,GAAU,CAAE,EAAC,CAAE,GAAG2H,KAAYnB,EAAK,OAAO,EAAE,WAAW,+BAA+B,UAAUmB,EAAO,CAAE,CAAE,GAAG,EAAC,CAAE,EAAC,CAAE,GAAGD,EAAM,SAAS,KAAMlB,EAAK,OAAO,EAAE,WAAW,+CAA+C,UAAUA,EAAK,OAAO,EAAE,WAAW,wDAAwD,UAAUkB,EAAM,IAAI,CAACK,GAAMC,MAAWxB,EAAK1G,GAAM,EAAE,SAAS,YAAY,WAAW,OAAO,UAAU2G,EAAM,OAAO,EAAE,WAAW,qBAAqB,UAAU,CAACD,EAAK,OAAO,EAAE,WAAW,iBAAiB,UAAUuB,EAAK,QAASvB,EAAK,OAAO,EAAE,WAAW,mEAAmE,UAAUA,EAAK,KAAK,EAAE,WAAW,MAAMuB,EAAK,IAAI,iBAAgB,CAAE,EAAC,CAAE,EAAE,CAAE,GAAGtB,EAAM,OAAO,EAAE,WAAW,eAAe,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,qCAAqC,UAAUuB,EAAK,MAAK,CAAE,GAAGvB,EAAK,KAAK,EAAE,WAAW,wCAAwC,UAAUuB,EAAK,OAAO,GAAGA,EAAK,UAAWtB,EAAM,OAAO,EAAE,WAAW,0BAA0B,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,MAAMsB,EAAcC,EAAK,UAAU,CAAC,iBAAiBH,EAAeG,EAAK,UAAU,CAAC,IAAI,GAAGvB,EAAK,QAAQ,EAAE,WAAW,WAAWoB,EAAeG,EAAK,UAAU,CAAC,IAAI,UAAUA,EAAK,OAAM,CAAE,CAAC,EAAC,CAAE,CAAE,GAAG,CAAC,GAAG,EAAC,GAAIC,CAAK,CAAE,EAAC,CAAE,GAAG,GAAIxB,EAAK,OAAO,EAAE,WAAW,+CAA+C,UAAU7H,EAAQ,CAAE,CAAC,EAAC,CAAE;AACxyD,GCtBasJ,KAAgB,CAAC,EAAE,OAAAlI,GAAO,WAAAmI,GAAW,MAAAC,GAAM,UAAAxJ,GAAU,WAAAC,IAAY,IAAI,UAAAwJ,QAAgB;AAC9F,QAAM,CAACC,GAAaC,CAAc,IAAI7F,EAAS,EAAK,GAC9C,CAAC8F,GAAYC,CAAa,IAAI/F,EAASyF,EAAU,CAAC,GAAG,QAAQ,EAAE,GAC/DO,IAAgB,MAAM;AACxB,IAAAH,EAAe,CAACD,CAAW;AAAA,EAC/B,GACMK,IAAkB,CAACC,MAAS;AAC9B,IAAAH,EAAcG,CAAI,GAClBL,EAAe,EAAK;AAAA,EACxB;AACA,SAAQ7B,EAAM,OAAO,EAAE,WAAW,2BAA2B7H,CAAS,IAAI,UAAU,CAACyJ,KAAgB7B,EAAK,OAAO,EAAE,WAAW,0DAA0D,SAAS,MAAM8B,EAAe,EAAK,GAAG,GAAI7B,EAAM,OAAO,EAAE,WAAW;AAAA;AAAA,UAEtP4B,IAAc,kBAAkB,mBAAmB;AAAA;AAAA,SAEpD,UAAU,CAAC5B,EAAM,OAAO,EAAE,WAAW,wDAAwD,UAAU,CAACD,EAAK,MAAM,EAAE,WAAW,mCAAmC,UAAUzG,EAAK,CAAE,GAAGyG,EAAK,UAAU,EAAE,SAASiC,GAAe,WAAW,8DAA8D,UAAUjC,EAAK,KAAK,EAAE,WAAW,cAAa,CAAE,EAAC,CAAE,CAAC,GAAG,GAAGA,EAAK,OAAO,EAAE,WAAW,aAAa,UAAUA,EAAK,OAAO,EAAE,WAAW,aAAa,UAAU0B,EAAU,IAAI,CAACU,MAAUnC,EAAM,KAAK,EAAE,MAAMmC,EAAK,MAAM,SAAS,CAAC3B,MAAM;AAC/e,IAAAA,EAAE,eAAc,GAChByB,EAAgBE,EAAK,IAAI;AAAA,EAC7B,GAAG,WAAW;AAAA;AAAA,oBAE1BL,MAAeK,EAAK,OACF,8BACA,oDAAoD;AAAA,mBACvE,UAAU,CAACpC,EAAK,KAAK,EAAE,WAAW,MAAMoC,EAAK,IAAI,sBAAqB,CAAE,GAAGpC,EAAK,QAAQ,EAAE,WAAW,UAAU,UAAUoC,EAAK,OAAO,GAAGA,EAAK,SAAUpC,EAAKN,GAAO,EAAE,SAAS,WAAW,MAAM,MAAM,WAAW,QAAQ,UAAU0C,EAAK,MAAK,CAAE,CAAE,EAAC,GAAIA,EAAK,IAAI,CAAE,GAAG,EAAC,CAAE,GAAGpC,EAAK,OAAO,EAAE,WAAW,iDAAiD,UAAUC,EAAM,OAAO,EAAE,WAAW,qBAAqB,UAAU,CAACD,EAAK,OAAO,EAAE,WAAW,iBAAiB,UAAUA,EAAK,OAAO,EAAE,WAAW,qEAAqE,UAAUA,EAAK,KAAK,EAAE,WAAW,MAAM2B,EAAK,UAAU,SAAS,iBAAgB,CAAE,EAAC,CAAE,GAAG,GAAG1B,EAAM,OAAO,EAAE,WAAW,eAAe,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,qCAAqC,UAAU2B,EAAK,KAAI,CAAE,GAAGA,EAAK,SAAU3B,EAAK,KAAK,EAAE,WAAW,yBAAyB,UAAU2B,EAAK,MAAK,CAAE,CAAE,GAAG,GAAGC,KAAa5B,EAAK,UAAU,EAAE,SAAS4B,GAAU,WAAW,8CAA8C,OAAO,iBAAsB,UAAU5B,EAAK,KAAK,EAAE,WAAW,qBAAoB,CAAE,GAAG,CAAE,EAAC,CAAE,EAAC,CAAE,CAAC,EAAC,CAAE,GAAGC,EAAM,OAAO,EAAE,WAAW,YAAY,UAAU,CAACD,EAAK,OAAO,EAAE,WAAW,iDAAiD,UAAUC,EAAM,OAAO,EAAE,WAAW,+DAA+D,UAAU,CAACD,EAAK,UAAU,EAAE,SAASiC,GAAe,WAAW,8DAA8D,UAAUjC,EAAK,KAAK,EAAE,WAAW,cAAc,EAAC,CAAE,GAAGC,EAAM,OAAO,EAAE,WAAW,+BAA+B,UAAU,CAACD,EAAKnI,GAAQ,EAAE,SAAS,SAAS,MAAM,MAAM,MAAM,WAAW,UAAU,iBAAgB,CAAE,GAAGmI,EAAKnI,GAAQ,EAAE,SAAS,SAAS,MAAM,MAAM,MAAM,UAAU,UAAU,gBAAoB,CAAE,CAAC,EAAC,CAAE,CAAC,GAAG,EAAC,CAAE,GAAGmI,EAAK,QAAQ,EAAE,WAAW,qBAAqB,UAAU7H,EAAQ,CAAE,CAAC,EAAC,CAAE,CAAC,EAAC,CAAE;AAClzD,GCvBakK,KAAc,CAAC,EAAE,OAAA9I,GAAO,UAAAC,GAAU,QAAA8I,GAAQ,UAAAnC,GAAU,YAAAoC,IAAa,UAAU,YAAAC,IAAa,kBAAkB,SAAAtK,IAAU,IAAO,OAAAc,GAAO,SAAAgI,IAAU,IAAO,WAAA5I,IAAY,IAAI,UAAAqK,IAAW,QAAS;AAChM,QAAM,CAACrC,GAAUC,CAAW,IAAIpE,EAASqG,EAAO,OAAO,CAACI,GAAK9B,OAAW,EAAE,GAAG8B,GAAK,CAAC9B,EAAM,IAAI,GAAG,GAAE,IAAK,CAAA,CAAE,CAAC,GACpG,CAACN,GAAQC,CAAS,IAAItE,EAAS,CAAA,CAAE,GACjCuE,IAAe,CAACC,MAAM;AACxB,IAAAA,EAAE,eAAc;AAEhB,UAAMC,IAAY,CAAA;AAClB,IAAA4B,EAAO,QAAQ,CAAC1B,MAAU;AACtB,YAAMrG,IAAQ6F,EAASQ,EAAM,IAAI,KAAK;AACtC,UAAIA,EAAM,YAAY,CAACrG,EAAM,KAAI;AAC7B,QAAAmG,EAAUE,EAAM,IAAI,IAAI,GAAGA,EAAM,KAAK;AAAA,eAEjCA,EAAM,YAAY;AACvB,cAAM+B,IAAkB/B,EAAM,WAAWrG,CAAK;AAC9C,QAAIoI,MACAjC,EAAUE,EAAM,IAAI,IAAI+B;AAAA,MAEhC;AAAA,IACJ,CAAC,GACDpC,EAAUG,CAAS,GACf,OAAO,KAAKA,CAAS,EAAE,WAAW,KAClCP,EAASC,CAAQ;AAAA,EAEzB,GACMO,IAAe,CAACiC,MAAc,CAACnC,MAAM;AACvC,IAAAJ,EAAY,CAACQ,OAAU,EAAE,GAAGA,GAAM,CAAC+B,CAAS,GAAGnC,EAAE,OAAO,MAAK,EAAG,GAE5DH,EAAOsC,CAAS,KAChBrC,EAAU,CAACM,OAAU,EAAE,GAAGA,GAAM,CAAC+B,CAAS,GAAG,OAAS,EAAG;AAAA,EAEjE,GACMC,IAAc,CAACjC,MAAU;AAC3B,UAAMkC,IAAc;AAAA,MAChB,OAAOlC,EAAM;AAAA,MACb,aAAaA,EAAM;AAAA,MACnB,MAAMA,EAAM;AAAA,MACZ,OAAOR,EAASQ,EAAM,IAAI,KAAK;AAAA,MAC/B,UAAUD,EAAaC,EAAM,IAAI;AAAA,MACjC,OAAON,EAAOM,EAAM,IAAI;AAAA,MACxB,UAAU1I;AAAA,IACtB;AACQ,WAAI0I,EAAM,YACEX,EAAM,OAAO,EAAE,WAAW,UAAU,UAAU,CAACA,EAAM,SAAS,EAAE,WAAW,8FAA8F,UAAU,CAACW,EAAM,OAAOA,EAAM,YAAYZ,EAAK,QAAQ,EAAE,WAAW,qBAAqB,UAAU,IAAG,CAAE,CAAC,EAAC,CAAE,GAAGC,EAAM,OAAO,EAAE,WAAW,YAAY,UAAU,CAACW,EAAM,QAASZ,EAAK,KAAK,EAAE,WAAW,MAAMY,EAAM,IAAI,gEAA+D,CAAE,GAAIZ,EAAK,YAAY,EAAE,aAAaY,EAAM,aAAa,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKpgBA,EAAM,OAAO,UAAU,MAAM;AAAA,kBAC7BN,EAAOM,EAAM,IAAI,IACG,uHACA,sHAAsH;AAAA,iBAC3I,MAAMA,EAAM,QAAQ,GAAG,OAAOR,EAASQ,EAAM,IAAI,KAAK,IAAI,UAAUD,EAAaC,EAAM,IAAI,GAAG,UAAU1I,GAAS,CAAC,EAAC,CAAE,GAAGoI,EAAOM,EAAM,IAAI,KAAMZ,EAAK,KAAK,EAAE,WAAW,sEAAsE,UAAUM,EAAOM,EAAM,IAAI,EAAC,CAAE,CAAE,EAAC,GAAIA,EAAM,IAAI,IAE5RZ,EAAKlH,GAAO,EAAE,MAAM8H,EAAM,QAAQ,QAAQ,GAAGkC,KAAelC,EAAM,IAAI;AAAA,EAClF;AACA,SAAII,IACQhB,EAAK1G,GAAM,EAAE,OAAO,WAAqB,UAAU,0CAAoD,WAAWlB,GAAW,UAAU6H,EAAM,OAAO,EAAE,WAAW,oBAAoB,UAAU,CAACD,EAAK,OAAO,EAAE,WAAW,qFAAqF,UAAUA,EAAK,KAAK,EAAE,WAAW,sCAAqC,CAAE,EAAC,CAAE,GAAGA,EAAK,MAAM,EAAE,WAAW,4CAA4C,UAAU,sBAA+B,CAAE,GAAGA,EAAK,KAAK,EAAE,WAAW,sBAAsB,UAAU,4CAA2C,CAAE,GAAGA,EAAKnI,GAAQ,EAAE,SAAS,WAAW,SAAS,MAAM,OAAO,SAAS,OAAM,GAAI,MAAM,cAAc,UAAU,YAAW,CAAE,CAAC,EAAC,CAAE,EAAC,CAAE,IAEvtBmI,EAAK1G,GAAM,EAAE,OAAOC,GAAO,UAAUC,GAAU,WAAWpB,GAAW,UAAU6H,EAAM,QAAQ,EAAE,UAAUO,GAAc,WAAW,aAAa,UAAU,CAACxH,KAAUgH,EAAK,OAAO,EAAE,WAAW,kDAAkD,UAAUC,EAAM,KAAK,EAAE,WAAW,wBAAwB,UAAU,CAACD,EAAK,KAAK,EAAE,WAAW,kCAAiC,CAAE,GAAGhH,CAAK,EAAC,CAAE,EAAC,CAAE,GAAIgH,EAAK,OAAO,EAAE,WAAW,oBAAoByC,MAAa,IAAI,mBAAmB,EAAE,UAAU,UAAUH,EAAO,IAAIO,CAAW,EAAC,CAAE,GAAG7C,EAAKnI,GAAQ,EAAE,MAAM,UAAU,SAAS,WAAW,MAAM,MAAM,MAAM2K,GAAY,SAAStK,GAAS,WAAW,UAAU,UAAUqK,GAAY,CAAC,EAAC,CAAE,GAAG;AACpqB;"}
|
|
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/hooks/useThemeOverride.ts","../src/contexts/presets.ts","../src/contexts/ThemeContext.tsx","../src/hooks/useGlobalThemeStyles.ts","../src/hooks/useBreakpoint.ts","../src/hooks/useElementScroll.ts","../src/components/layout/AppLayout.tsx","../src/components/utils/Badge.tsx","../src/components/ThemeSwitcher.tsx","components/form-controls/Button.js","components/form-controls/Input.js","components/layout/Card.js","contexts/ThemeContext.js","components/utils/Badge.js","../src/templates/forms/LoginForm.js","../src/templates/forms/RegistrationForm.js","../src/templates/forms/ContactForm.js","../src/templates/layouts/DashboardLayout.js","../src/templates/layouts/SidebarLayout.js","../src/templates/patterns/FormPattern.js"],"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\ntype Ripple = {\r\n id: number;\r\n x: number;\r\n y: number;\r\n size: number;\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 onClick,\r\n ...props\r\n}) => {\r\n const buttonRef = React.useRef<HTMLButtonElement | null>(null);\r\n const [ripples, setRipples] = React.useState<Ripple[]>([]);\r\n\r\n const baseClasses = `\r\n inline-flex items-center justify-center font-medium rounded-sm transition-colors \r\n cursor-pointer relative overflow-hidden\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: `${children ? \"px-3 py-1.5\" : \"p-1.5\"} text-sm`,\r\n md: `${children ? \"px-4 py-2\" : \"p-2\"} text-base`,\r\n lg: `${children ? \"px-6 py-3\" : \"p-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 children ? (iconPosition === \"right\" ? \"ml-2\" : \"mr-2\") : \"\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n const rippleColor =\r\n variant === \"primary\" ? \"rgba(255, 255, 255, 0.45)\" : \"rgba(0, 0, 0, 0.15)\";\r\n\r\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {\r\n if (!disabled && !loading && buttonRef.current) {\r\n const rect = buttonRef.current.getBoundingClientRect();\r\n const size = Math.max(rect.width, rect.height) * 1.2;\r\n const x = event.clientX - rect.left;\r\n const y = event.clientY - rect.top;\r\n const id = window.performance.now();\r\n\r\n const newRipple: Ripple = { id, x, y, size };\r\n setRipples((prev) => [...prev, newRipple]);\r\n\r\n window.setTimeout(() => {\r\n setRipples((prev) => prev.filter((ripple) => ripple.id !== id));\r\n }, 600);\r\n }\r\n\r\n onClick?.(event);\r\n };\r\n\r\n return (\r\n <button\r\n ref={buttonRef}\r\n className={classes}\r\n disabled={disabled || loading}\r\n onClick={handleClick}\r\n {...props}\r\n >\r\n <span className=\"absolute inset-0 pointer-events-none\">\r\n {ripples.map((ripple) => (\r\n <span\r\n key={ripple.id}\r\n className=\"absolute rounded-full opacity-40 flysoft-button-ripple\"\r\n style={{\r\n top: ripple.y,\r\n left: ripple.x,\r\n width: ripple.size,\r\n height: ripple.size,\r\n backgroundColor: rippleColor,\r\n }}\r\n />\r\n ))}\r\n </span>\r\n <span className=\"relative inline-flex items-center justify-center\">\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 </span>\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 { 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 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 { 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 { useState, useEffect } from \"react\";\r\n\r\nexport type Breakpoint = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\r\n\r\nexport interface WindowSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface BreakpointInfo {\r\n breakpoint: Breakpoint;\r\n windowSize: WindowSize;\r\n isMobile: boolean;\r\n isTablet: boolean;\r\n isDesktop: boolean;\r\n}\r\n\r\n// Breakpoints basados en Tailwind CSS\r\nconst breakpoints = {\r\n xs: 0,\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n \"2xl\": 1536,\r\n} as const;\r\n\r\nexport const useBreakpoint = (): BreakpointInfo => {\r\n const [windowSize, setWindowSize] = useState<WindowSize>({\r\n width: typeof window !== \"undefined\" ? window.innerWidth : 1024,\r\n height: typeof window !== \"undefined\" ? window.innerHeight : 768,\r\n });\r\n\r\n const [breakpoint, setBreakpoint] = useState<Breakpoint>(\"lg\");\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n const width = window.innerWidth;\r\n const height = window.innerHeight;\r\n\r\n setWindowSize({ width, height });\r\n\r\n // Determinar el breakpoint actual\r\n if (width >= breakpoints[\"2xl\"]) {\r\n setBreakpoint(\"2xl\");\r\n } else if (width >= breakpoints.xl) {\r\n setBreakpoint(\"xl\");\r\n } else if (width >= breakpoints.lg) {\r\n setBreakpoint(\"lg\");\r\n } else if (width >= breakpoints.md) {\r\n setBreakpoint(\"md\");\r\n } else if (width >= breakpoints.sm) {\r\n setBreakpoint(\"sm\");\r\n } else {\r\n setBreakpoint(\"xs\");\r\n }\r\n };\r\n\r\n // Ejecutar una vez al montar\r\n handleResize();\r\n\r\n // Agregar listener para cambios de tamaño\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n // Cleanup\r\n return () => window.removeEventListener(\"resize\", handleResize);\r\n }, []);\r\n\r\n const isMobile = breakpoint === \"xs\" || breakpoint === \"sm\";\r\n const isTablet = breakpoint === \"md\";\r\n const isDesktop =\r\n breakpoint === \"lg\" || breakpoint === \"xl\" || breakpoint === \"2xl\";\r\n\r\n return {\r\n breakpoint,\r\n windowSize,\r\n isMobile,\r\n isTablet,\r\n isDesktop,\r\n };\r\n};\r\n","import { useState, useEffect } from \"react\";\r\n\r\nexport const useElementScroll = (\r\n elementRef: React.RefObject<HTMLElement | null>\r\n) => {\r\n const [scrollY, setScrollY] = useState(0);\r\n const [scrollDirection, setScrollDirection] = useState<\"up\" | \"down\" | null>(\r\n null\r\n );\r\n\r\n useEffect(() => {\r\n if (!elementRef.current) return;\r\n\r\n const element = elementRef.current;\r\n let lastScrollY = element.scrollTop;\r\n let lastDirection: \"up\" | \"down\" | null = null;\r\n\r\n const handleScroll = () => {\r\n const currentScrollY = element.scrollTop;\r\n const delta = currentScrollY - lastScrollY;\r\n let newDirection: \"up\" | \"down\" | null = lastDirection;\r\n\r\n if (delta > 4 && currentScrollY > 10) {\r\n newDirection = \"down\";\r\n } else if (delta < -4 && currentScrollY > 0) {\r\n newDirection = \"up\";\r\n }\r\n\r\n setScrollY(currentScrollY);\r\n\r\n // Solo actualizar la dirección si cambió\r\n if (newDirection !== lastDirection) {\r\n setScrollDirection(newDirection);\r\n lastDirection = newDirection;\r\n }\r\n\r\n lastScrollY = currentScrollY;\r\n };\r\n\r\n // Agregar el listener al elemento\r\n element.addEventListener(\"scroll\", handleScroll, { passive: true });\r\n\r\n return () => {\r\n element.removeEventListener(\"scroll\", handleScroll);\r\n };\r\n }, [elementRef]);\r\n\r\n return { scrollY, scrollDirection };\r\n};\r\n","import React, { useState, useRef } from \"react\";\r\nimport { useBreakpoint } from \"../../hooks\";\r\nimport { useElementScroll } from \"../../hooks/useElementScroll\";\r\nimport { Button } from \"../form-controls\";\r\n\r\nexport interface AppLayoutProps {\r\n navBarDrawer?: React.ReactNode;\r\n leftDrawer?: React.ReactNode;\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nexport const AppLayout: React.FC<AppLayoutProps> = ({\r\n navBarDrawer,\r\n leftDrawer,\r\n children,\r\n className = \"\",\r\n}) => {\r\n const { isMobile, isTablet } = useBreakpoint();\r\n const contentRef = useRef<HTMLElement | null>(null);\r\n const { scrollY, scrollDirection } = useElementScroll(contentRef);\r\n const [isMobileDrawerOpen, setIsMobileDrawerOpen] = useState(false);\r\n const [isNavbarVisible, setIsNavbarVisible] = useState(true);\r\n const isNavbarVisibleRef = useRef(isNavbarVisible);\r\n\r\n const shouldShowMobileDrawer = isMobile || isTablet;\r\n const shouldShowDesktopDrawer = !shouldShowMobileDrawer && leftDrawer;\r\n\r\n // Mantener el ref sincronizado con el estado\r\n React.useEffect(() => {\r\n isNavbarVisibleRef.current = isNavbarVisible;\r\n }, [isNavbarVisible]);\r\n\r\n // Controlar visibilidad del navbar basado en scroll\r\n React.useEffect(() => {\r\n let shouldBeVisible: boolean;\r\n\r\n if (scrollY < 100) {\r\n // Siempre mostrar navbar cerca del top\r\n shouldBeVisible = true;\r\n } else if (scrollDirection === \"down\" && scrollY > 100) {\r\n // Ocultar navbar al hacer scroll hacia abajo\r\n shouldBeVisible = false;\r\n } else if (scrollDirection === \"up\" && scrollY > 100) {\r\n // Mostrar navbar al hacer scroll hacia arriba\r\n shouldBeVisible = true;\r\n } else {\r\n // No cambiar el estado si scrollDirection es null o no se cumple ninguna condición\r\n return;\r\n }\r\n\r\n // Solo actualizar el estado si hay un cambio real\r\n if (shouldBeVisible !== isNavbarVisibleRef.current) {\r\n setIsNavbarVisible(shouldBeVisible);\r\n }\r\n }, [scrollDirection, scrollY]);\r\n\r\n const handleMobileDrawerToggle = () => {\r\n setIsMobileDrawerOpen(!isMobileDrawerOpen);\r\n };\r\n\r\n const handleOverlayClick = () => {\r\n setIsMobileDrawerOpen(false);\r\n };\r\n\r\n // Clases base del layout\r\n const layoutClasses = `\r\n flex flex-col h-screen w-full\r\n font-[var(--font-default)]\r\n ${className}\r\n `;\r\n\r\n // Clases del navbar\r\n const navbarClasses = `\r\n bg-[var(--color-bg-default)] border-b border-[var(--color-border-default)]\r\n z-[1000] fixed top-0 left-0 right-0\r\n transform transition-transform duration-300 ease-in-out\r\n ${isNavbarVisible ? \"translate-y-0\" : \"-translate-y-full\"}\r\n `;\r\n\r\n // Estilos inline para debug\r\n const navbarStyle = {\r\n transform: isNavbarVisible ? \"translateY(0)\" : \"translateY(-100%)\",\r\n transition: \"transform 300ms ease-in-out\",\r\n };\r\n\r\n const navbarContentClasses = `\r\n flex items-center pr-4 lg:px-4 h-16 gap-2\r\n md:px-3\r\n `;\r\n\r\n const navbarDrawerClasses = `flex-1`;\r\n\r\n // Clases del contenido principal\r\n const mainClasses = `\r\n flex flex-1 overflow-hidden\r\n transition-all duration-300 ease-in-out\r\n ${navBarDrawer && isNavbarVisible ? \"pt-16\" : \"\"}\r\n `;\r\n\r\n const leftDrawerClasses = `\r\n w-64 bg-[var(--color-bg-default)]\r\n overflow-y-auto flex-shrink-0 p-4\r\n transition-all duration-300 ease-in-out\r\n ${navBarDrawer && isNavbarVisible ? \"pt-20\" : \"pt-4\"}\r\n `;\r\n\r\n const contentClasses = `\r\n flex-1 overflow-y-auto px-2 py-4 lg:px-6\r\n `;\r\n\r\n // Clases del overlay móvil\r\n const overlayClasses = `\r\n fixed inset-0 bg-black/50 backdrop-blur-sm z-[1998]\r\n `;\r\n\r\n // Clases del drawer móvil\r\n const mobileDrawerBaseClasses = `\r\n fixed top-0 left-0 h-screen w-64 max-w-[80vw]\r\n bg-[var(--color-bg-default)] shadow-[var(--shadow-xl)]\r\n transform -translate-x-full transition-transform duration-300 ease-in-out\r\n z-[1999] flex flex-col\r\n `;\r\n\r\n const mobileDrawerOpenClasses = `translate-x-0`;\r\n\r\n const mobileDrawerContentClasses = `\r\n flex-1 overflow-y-auto p-4\r\n `;\r\n\r\n return (\r\n <div className={layoutClasses}>\r\n {/* NavBar */}\r\n {navBarDrawer && (\r\n <nav className={navbarClasses} style={navbarStyle}>\r\n <div className={navbarContentClasses}>\r\n {/* Botón de menú para móvil/tablet */}\r\n {shouldShowMobileDrawer && leftDrawer && (\r\n <Button\r\n variant=\"ghost\"\r\n icon=\"fa-bars\"\r\n onClick={handleMobileDrawerToggle}\r\n aria-label=\"Abrir menú\"\r\n />\r\n )}\r\n\r\n {/* Contenido del navbar */}\r\n <div className={navbarDrawerClasses}>{navBarDrawer}</div>\r\n </div>\r\n </nav>\r\n )}\r\n\r\n {/* Contenido principal */}\r\n <div className={mainClasses}>\r\n {/* Left Drawer - Desktop */}\r\n {shouldShowDesktopDrawer && (\r\n <aside className={leftDrawerClasses}>{leftDrawer}</aside>\r\n )}\r\n\r\n {/* Contenido principal */}\r\n <main ref={contentRef} className={contentClasses}>\r\n {children}\r\n </main>\r\n </div>\r\n\r\n {/* Mobile Drawer Overlay */}\r\n {shouldShowMobileDrawer && leftDrawer && isMobileDrawerOpen && (\r\n <div className={overlayClasses} onClick={handleOverlayClick} />\r\n )}\r\n\r\n {/* Mobile Drawer */}\r\n {shouldShowMobileDrawer && leftDrawer && (\r\n <aside\r\n className={`${mobileDrawerBaseClasses} ${\r\n isMobileDrawerOpen ? mobileDrawerOpenClasses : \"\"\r\n }`}\r\n >\r\n {/* Botón de cerrar */}\r\n <div className=\"text-right\">\r\n <Button\r\n variant=\"ghost\"\r\n icon=\"fa-times\"\r\n onClick={handleMobileDrawerToggle}\r\n aria-label=\"Cerrar menú\"\r\n />\r\n </div>\r\n {/* Contenido del drawer */}\r\n <div className={mobileDrawerContentClasses}>{leftDrawer}</div>\r\n </aside>\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 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","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Button = ({ variant = \"primary\", size = \"md\", icon, iconPosition = \"left\", loading = false, children, className = \"\", disabled, ...props }) => {\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 `;\n const variantClasses = {\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 `,\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 `,\n ghost: `\r\n text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)] \r\n focus:ring-[var(--color-primary)]\r\n `,\n };\n const sizeClasses = {\n sm: `${children ? \"px-3 py-1.5\" : \"p-1.5\"} text-sm`,\n md: `${children ? \"px-4 py-2\" : \"p-2\"} text-base`,\n lg: `${children ? \"px-6 py-3\" : \"p-3\"} text-lg`,\n };\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`;\n const renderIcon = () => {\n if (!icon)\n return null;\n const iconClasses = size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\n return (_jsx(\"i\", { className: `fa ${icon} ${iconClasses} ${children ? (iconPosition === \"right\" ? \"ml-2\" : \"mr-2\") : \"\"}` }));\n };\n return (_jsxs(\"button\", { className: classes, disabled: disabled || loading, ...props, children: [loading && _jsx(\"i\", { className: \"fa fa-spinner fa-spin mr-2\" }), icon && iconPosition === \"left\" && !loading && renderIcon(), children, icon && iconPosition === \"right\" && !loading && renderIcon()] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Input = ({ label, error, icon, iconPosition = \"left\", size = \"md\", className = \"\", id, ...props }) => {\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\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 `;\n const sizeClasses = {\n sm: \"px-3 py-1.5 text-sm\",\n md: \"px-4 py-2 text-base\",\n lg: \"px-6 py-3 text-lg\",\n };\n const stateClasses = error\n ? `border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]`\n : `border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]`;\n const inputClasses = `${baseClasses} ${sizeClasses[size]} ${stateClasses} ${className}`;\n const iconClasses = size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\n const renderIcon = () => {\n if (!icon)\n return null;\n return (_jsx(\"i\", { className: `fa ${icon} ${iconClasses} text-[var(--color-text-muted)] absolute top-1/2 transform -translate-y-1/2 ${iconPosition === \"left\" ? \"left-3\" : \"right-3\"}` }));\n };\n return (_jsxs(\"div\", { className: \"w-full\", children: [label && (_jsx(\"label\", { htmlFor: inputId, className: \"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\", children: label })), _jsxs(\"div\", { className: \"relative\", children: [icon && iconPosition === \"left\" && renderIcon(), _jsx(\"input\", { id: inputId, className: `${inputClasses} ${icon && iconPosition === \"left\" ? \"pl-10\" : \"\"} ${icon && iconPosition === \"right\" ? \"pr-10\" : \"\"}`, ...props }), icon && iconPosition === \"right\" && renderIcon()] }), error && (_jsx(\"p\", { className: \"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\", children: error }))] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Card = ({ title, subtitle, children, className = \"\", headerActions, footer, variant = \"default\", }) => {\n const baseClasses = `\r\n bg-[var(--color-bg-default)] rounded-lg border\r\n font-[var(--font-default)]\r\n `;\n const variantClasses = {\n default: `border-[var(--color-border-default)]`,\n elevated: `border-[var(--color-border-default)] shadow-[var(--shadow-lg)]`,\n outlined: `border-[var(--color-gray-300)]`,\n };\n const classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\n return (_jsxs(\"div\", { className: classes, children: [(title || subtitle || headerActions) && (_jsx(\"div\", { className: \"px-6 py-4 border-b border-[var(--color-border-default)]\", children: _jsxs(\"div\", { className: \"flex items-center justify-between\", children: [_jsxs(\"div\", { children: [title && (_jsx(\"h3\", { className: \"text-lg font-semibold text-[var(--color-text-primary)]\", children: title })), subtitle && (_jsx(\"p\", { className: \"text-sm text-[var(--color-text-secondary)] mt-1\", children: subtitle }))] }), headerActions && (_jsx(\"div\", { className: \"flex items-center space-x-2\", children: headerActions }))] }) })), _jsx(\"div\", { className: \"px-6 py-4\", children: children }), footer && (_jsx(\"div\", { className: \"px-6 py-4 border-t border-[var(--color-border-default)] bg-[var(--color-bg-secondary)] rounded-b-lg\", children: footer }))] }));\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React, { createContext, useContext, useEffect, useState, } from \"react\";\nimport { themes, defaultTheme } from \"./presets\";\nconst ThemeContext = createContext(undefined);\nexport const ThemeProvider = ({ children, initialTheme = \"light\", storageKey = \"flysoft-theme\", forceInitialTheme = false, }) => {\n // Almacenar el tema inicial para poder resetear a él\n const getInitialTheme = () => {\n if (typeof initialTheme === \"string\") {\n return themes[initialTheme] || defaultTheme;\n }\n return initialTheme;\n };\n const [currentTheme, setCurrentTheme] = useState(() => {\n // Si forceInitialTheme es true, usar siempre el initialTheme\n if (forceInitialTheme) {\n return getInitialTheme();\n }\n // Try to get theme from localStorage\n if (typeof window !== \"undefined\") {\n const savedTheme = localStorage.getItem(storageKey);\n if (savedTheme) {\n if (themes[savedTheme]) {\n return themes[savedTheme];\n }\n // Try to parse as custom theme\n try {\n const parsed = JSON.parse(savedTheme);\n if (parsed.name && parsed.colors) {\n return parsed;\n }\n }\n catch {\n // Invalid JSON, fallback to default\n }\n }\n }\n // Handle initialTheme prop\n return getInitialTheme();\n });\n const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);\n // Function to apply theme to CSS variables\n const applyThemeToCSS = (theme) => {\n if (typeof document === \"undefined\")\n return;\n const root = document.documentElement;\n // Apply color variables\n Object.entries(theme.colors).forEach(([key, value]) => {\n const cssVarName = `--flysoft-${key\n .replace(/([A-Z])/g, \"-$1\")\n .toLowerCase()}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply shadow variables\n Object.entries(theme.shadows).forEach(([key, value]) => {\n const cssVarName = `--flysoft-shadow-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply radius variables\n Object.entries(theme.radius).forEach(([key, value]) => {\n const cssVarName = `--flysoft-radius-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply spacing variables\n Object.entries(theme.spacing).forEach(([key, value]) => {\n const cssVarName = `--flysoft-spacing-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Apply font variables\n Object.entries(theme.fonts).forEach(([key, value]) => {\n const cssVarName = `--flysoft-font-${key}`;\n root.style.setProperty(cssVarName, value);\n });\n // Set theme name as data attribute for CSS targeting\n root.setAttribute(\"data-theme\", theme.name);\n // Apply background and text colors to body for better integration\n const body = document.body;\n if (body) {\n body.style.backgroundColor = theme.colors.bgDefault;\n body.style.color = theme.colors.textPrimary;\n body.style.fontFamily = theme.fonts.default;\n }\n };\n // Function to set theme\n const setTheme = (theme) => {\n let newTheme;\n if (typeof theme === \"string\") {\n if (themes[theme]) {\n newTheme = themes[theme];\n }\n else {\n console.warn(`Theme \"${theme}\" not found, falling back to default`);\n newTheme = defaultTheme;\n }\n }\n else {\n newTheme = theme;\n }\n setCurrentTheme(newTheme);\n setCurrentThemeName(newTheme.name);\n // Save to localStorage\n if (typeof window !== \"undefined\") {\n localStorage.setItem(storageKey, JSON.stringify(newTheme));\n }\n // Apply to CSS\n applyThemeToCSS(newTheme);\n };\n // Function to reset to initial theme (the one passed as initialTheme prop)\n const resetToDefault = () => {\n setTheme(getInitialTheme());\n };\n // Apply theme on mount and when theme changes\n useEffect(() => {\n applyThemeToCSS(currentTheme);\n }, [currentTheme]);\n // Check if current theme is dark\n const isDark = currentTheme.name === \"dark\";\n const value = {\n theme: currentTheme,\n setTheme,\n currentThemeName,\n availableThemes: Object.keys(themes),\n resetToDefault,\n isDark,\n };\n return (_jsx(ThemeContext.Provider, { value: value, children: children }));\n};\n// Hook to use theme context\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\n// Hook to check if theme context is available\nexport const useThemeContext = () => {\n const context = useContext(ThemeContext);\n return context !== undefined;\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport React from \"react\";\nexport const Badge = ({ children, variant = \"primary\", size = \"md\", rounded = false, className = \"\", }) => {\n const baseClasses = \"inline-flex items-center font-medium font-[var(--font-default)]\";\n const variantClasses = {\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 `,\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 `,\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 `,\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 `,\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 `,\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 `,\n };\n const sizeClasses = {\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-0.5 text-sm\",\n lg: \"px-3 py-1 text-base\",\n };\n const roundedClasses = rounded ? \"rounded-full\" : \"rounded-md\";\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${roundedClasses} ${className}`;\n return _jsx(\"span\", { className: classes, children: children });\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const LoginForm = ({ onSubmit, loading = false, error, className = \"\", }) => {\n const [formData, setFormData] = useState({\n email: \"\",\n password: \"\",\n });\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación básica\n const newErrors = {};\n if (!formData.email) {\n newErrors.email = \"El email es requerido\";\n }\n else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = \"El email no es válido\";\n }\n if (!formData.password) {\n newErrors.password = \"La contraseña es requerida\";\n }\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit?.(formData);\n }\n };\n const handleChange = (field) => (e) => {\n setFormData((prev) => ({ ...prev, [field]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[field]) {\n setErrors((prev) => ({ ...prev, [field]: undefined }));\n }\n };\n return (_jsxs(Card, { title: \"Iniciar Sesi\\u00F3n\", subtitle: \"Ingresa tus credenciales para acceder\", className: className, children: [_jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsx(Input, { label: \"Email\", type: \"email\", placeholder: \"tu@email.com\", icon: \"fa-envelope\", value: formData.email, onChange: handleChange(\"email\"), error: errors.email, disabled: loading }), _jsx(Input, { label: \"Contrase\\u00F1a\", type: \"password\", placeholder: \"Tu contrase\\u00F1a\", icon: \"fa-lock\", value: formData.password, onChange: handleChange(\"password\"), error: errors.password, disabled: loading }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: \"fa-sign-in-alt\", loading: loading, className: \"w-full\", children: \"Iniciar Sesi\\u00F3n\" })] }), _jsx(\"div\", { className: \"mt-4 text-center\", children: _jsxs(\"p\", { className: \"text-sm text-gray-600\", children: [\"\\u00BFNo tienes cuenta?\", \" \", _jsx(\"a\", { href: \"#\", className: \"text-blue-600 hover:text-blue-800 font-medium\", children: \"Reg\\u00EDstrate aqu\\u00ED\" })] }) })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const RegistrationForm = ({ onSubmit, loading = false, error, className = \"\", }) => {\n const [formData, setFormData] = useState({\n firstName: \"\",\n lastName: \"\",\n email: \"\",\n password: \"\",\n confirmPassword: \"\",\n });\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación\n const newErrors = {};\n if (!formData.firstName.trim()) {\n newErrors.firstName = \"El nombre es requerido\";\n }\n if (!formData.lastName.trim()) {\n newErrors.lastName = \"El apellido es requerido\";\n }\n if (!formData.email) {\n newErrors.email = \"El email es requerido\";\n }\n else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = \"El email no es válido\";\n }\n if (!formData.password) {\n newErrors.password = \"La contraseña es requerida\";\n }\n else if (formData.password.length < 6) {\n newErrors.password = \"La contraseña debe tener al menos 6 caracteres\";\n }\n if (!formData.confirmPassword) {\n newErrors.confirmPassword = \"Confirma tu contraseña\";\n }\n else if (formData.password !== formData.confirmPassword) {\n newErrors.confirmPassword = \"Las contraseñas no coinciden\";\n }\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit?.(formData);\n }\n };\n const handleChange = (field) => (e) => {\n setFormData((prev) => ({ ...prev, [field]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[field]) {\n setErrors((prev) => ({ ...prev, [field]: undefined }));\n }\n };\n return (_jsxs(Card, { title: \"Crear Cuenta\", subtitle: \"Completa los datos para registrarte\", className: className, children: [_jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsxs(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 gap-4\", children: [_jsx(Input, { label: \"Nombre\", placeholder: \"Tu nombre\", icon: \"fa-user\", value: formData.firstName, onChange: handleChange(\"firstName\"), error: errors.firstName, disabled: loading }), _jsx(Input, { label: \"Apellido\", placeholder: \"Tu apellido\", icon: \"fa-user\", value: formData.lastName, onChange: handleChange(\"lastName\"), error: errors.lastName, disabled: loading })] }), _jsx(Input, { label: \"Email\", type: \"email\", placeholder: \"tu@email.com\", icon: \"fa-envelope\", value: formData.email, onChange: handleChange(\"email\"), error: errors.email, disabled: loading }), _jsx(Input, { label: \"Contrase\\u00F1a\", type: \"password\", placeholder: \"M\\u00EDnimo 6 caracteres\", icon: \"fa-lock\", value: formData.password, onChange: handleChange(\"password\"), error: errors.password, disabled: loading }), _jsx(Input, { label: \"Confirmar Contrase\\u00F1a\", type: \"password\", placeholder: \"Repite tu contrase\\u00F1a\", icon: \"fa-lock\", value: formData.confirmPassword, onChange: handleChange(\"confirmPassword\"), error: errors.confirmPassword, disabled: loading }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: \"fa-user-plus\", loading: loading, className: \"w-full\", children: \"Crear Cuenta\" })] }), _jsx(\"div\", { className: \"mt-4 text-center\", children: _jsxs(\"p\", { className: \"text-sm text-gray-600\", children: [\"\\u00BFYa tienes cuenta?\", \" \", _jsx(\"a\", { href: \"#\", className: \"text-blue-600 hover:text-blue-800 font-medium\", children: \"Inicia sesi\\u00F3n aqu\\u00ED\" })] }) })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const ContactForm = ({ onSubmit, loading = false, success = false, error, className = \"\", }) => {\n const [formData, setFormData] = useState({\n name: \"\",\n email: \"\",\n subject: \"\",\n message: \"\",\n });\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación\n const newErrors = {};\n if (!formData.name.trim()) {\n newErrors.name = \"El nombre es requerido\";\n }\n if (!formData.email) {\n newErrors.email = \"El email es requerido\";\n }\n else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = \"El email no es válido\";\n }\n if (!formData.subject.trim()) {\n newErrors.subject = \"El asunto es requerido\";\n }\n if (!formData.message.trim()) {\n newErrors.message = \"El mensaje es requerido\";\n }\n else if (formData.message.trim().length < 10) {\n newErrors.message = \"El mensaje debe tener al menos 10 caracteres\";\n }\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit?.(formData);\n }\n };\n const handleChange = (field) => (e) => {\n setFormData((prev) => ({ ...prev, [field]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[field]) {\n setErrors((prev) => ({ ...prev, [field]: undefined }));\n }\n };\n if (success) {\n return (_jsx(Card, { title: \"Mensaje Enviado\", subtitle: \"Gracias por contactarnos\", className: className, children: _jsxs(\"div\", { className: \"text-center py-8\", children: [_jsx(\"div\", { className: \"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4\", children: _jsx(\"i\", { className: \"fa fa-check text-green-600 text-2xl\" }) }), _jsx(\"h3\", { className: \"text-lg font-semibold text-gray-900 mb-2\", children: \"\\u00A1Mensaje enviado con \\u00E9xito!\" }), _jsx(\"p\", { className: \"text-gray-600 mb-4\", children: \"Hemos recibido tu mensaje y te responderemos pronto.\" }), _jsx(Button, { variant: \"outline\", onClick: () => window.location.reload(), icon: \"fa-refresh\", children: \"Enviar otro mensaje\" })] }) }));\n }\n return (_jsx(Card, { title: \"Cont\\u00E1ctanos\", subtitle: \"Env\\u00EDanos un mensaje y te responderemos pronto\", className: className, children: _jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsxs(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 gap-4\", children: [_jsx(Input, { label: \"Nombre Completo\", placeholder: \"Tu nombre completo\", icon: \"fa-user\", value: formData.name, onChange: handleChange(\"name\"), error: errors.name, disabled: loading }), _jsx(Input, { label: \"Email\", type: \"email\", placeholder: \"tu@email.com\", icon: \"fa-envelope\", value: formData.email, onChange: handleChange(\"email\"), error: errors.email, disabled: loading })] }), _jsx(Input, { label: \"Asunto\", placeholder: \"\\u00BFEn qu\\u00E9 podemos ayudarte?\", icon: \"fa-tag\", value: formData.subject, onChange: handleChange(\"subject\"), error: errors.subject, disabled: loading }), _jsxs(\"div\", { className: \"w-full\", children: [_jsx(\"label\", { className: \"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\", children: \"Mensaje\" }), _jsxs(\"div\", { className: \"relative\", children: [_jsx(\"i\", { className: \"fa fa-comment text-[var(--color-text-muted)] absolute top-3 left-3 w-5 h-5\" }), _jsx(\"textarea\", { placeholder: \"Escribe tu mensaje aqu\\u00ED...\", className: `\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)] pl-10 pr-4 py-3 text-base\r\n ${errors.message\n ? \"border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]\"\n : \"border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]\"}\r\n `, rows: 5, value: formData.message, onChange: handleChange(\"message\"), disabled: loading })] }), errors.message && (_jsx(\"p\", { className: \"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\", children: errors.message }))] }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: \"fa-paper-plane\", loading: loading, className: \"w-full\", children: \"Enviar Mensaje\" })] }) }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React from \"react\";\nimport { Card, Badge, Button } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const DashboardLayout = ({ title, subtitle, stats = [], actions, children, className = \"\", }) => {\n const getChangeColor = (changeType) => {\n switch (changeType) {\n case \"positive\":\n return \"text-green-600\";\n case \"negative\":\n return \"text-red-600\";\n default:\n return \"text-gray-600\";\n }\n };\n const getChangeIcon = (changeType) => {\n switch (changeType) {\n case \"positive\":\n return \"fa-arrow-up\";\n case \"negative\":\n return \"fa-arrow-down\";\n default:\n return \"fa-minus\";\n }\n };\n return (_jsxs(\"div\", { className: `min-h-screen bg-gray-50 ${className}`, children: [_jsx(\"div\", { className: \"bg-white shadow-sm border-b\", children: _jsx(\"div\", { className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\", children: _jsxs(\"div\", { className: \"flex justify-between items-center py-6\", children: [_jsxs(\"div\", { children: [_jsx(\"h1\", { className: \"text-2xl font-bold text-gray-900\", children: title }), subtitle && (_jsx(\"p\", { className: \"mt-1 text-sm text-gray-600\", children: subtitle }))] }), actions && (_jsx(\"div\", { className: \"flex items-center space-x-3\", children: actions }))] }) }) }), stats.length > 0 && (_jsx(\"div\", { className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6\", children: _jsx(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6\", children: stats.map((stat, index) => (_jsx(Card, { variant: \"elevated\", className: \"p-6\", children: _jsxs(\"div\", { className: \"flex items-center\", children: [_jsx(\"div\", { className: \"flex-shrink-0\", children: stat.icon && (_jsx(\"div\", { className: \"w-8 h-8 bg-blue-100 rounded-lg flex items-center justify-center\", children: _jsx(\"i\", { className: `fa ${stat.icon} text-blue-600` }) })) }), _jsxs(\"div\", { className: \"ml-4 flex-1\", children: [_jsx(\"p\", { className: \"text-sm font-medium text-gray-600\", children: stat.title }), _jsx(\"p\", { className: \"text-2xl font-semibold text-gray-900\", children: stat.value }), stat.change && (_jsxs(\"div\", { className: \"flex items-center mt-1\", children: [_jsx(\"i\", { className: `fa ${getChangeIcon(stat.changeType)} text-xs mr-1 ${getChangeColor(stat.changeType)}` }), _jsx(\"span\", { className: `text-sm ${getChangeColor(stat.changeType)}`, children: stat.change })] }))] })] }) }, index))) }) })), _jsx(\"div\", { className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6\", children: children })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Badge } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const SidebarLayout = ({ title, menuItems, user, children, className = \"\", onLogout, }) => {\n const [sidebarOpen, setSidebarOpen] = useState(false);\n const [activeItem, setActiveItem] = useState(menuItems[0]?.href || \"\");\n const toggleSidebar = () => {\n setSidebarOpen(!sidebarOpen);\n };\n const handleMenuClick = (href) => {\n setActiveItem(href);\n setSidebarOpen(false); // Cerrar sidebar en móvil\n };\n return (_jsxs(\"div\", { className: `min-h-screen bg-gray-50 ${className}`, children: [sidebarOpen && (_jsx(\"div\", { className: \"fixed inset-0 z-40 bg-gray-600 bg-opacity-75 lg:hidden\", onClick: () => setSidebarOpen(false) })), _jsxs(\"div\", { className: `\r\n fixed inset-y-0 left-0 z-50 w-64 bg-white shadow-lg transform transition-transform duration-300 ease-in-out\r\n ${sidebarOpen ? \"translate-x-0\" : \"-translate-x-full\"}\r\n lg:translate-x-0 lg:static lg:inset-0\r\n `, children: [_jsxs(\"div\", { className: \"flex items-center justify-between h-16 px-6 border-b\", children: [_jsx(\"h1\", { className: \"text-xl font-bold text-gray-900\", children: title }), _jsx(\"button\", { onClick: toggleSidebar, className: \"lg:hidden p-2 rounded-md text-gray-400 hover:text-gray-600\", children: _jsx(\"i\", { className: \"fa fa-times\" }) })] }), _jsx(\"nav\", { className: \"mt-6 px-3\", children: _jsx(\"div\", { className: \"space-y-1\", children: menuItems.map((item) => (_jsxs(\"a\", { href: item.href, onClick: (e) => {\n e.preventDefault();\n handleMenuClick(item.href);\n }, className: `\r\n group flex items-center px-3 py-2 text-sm font-medium rounded-md transition-colors\r\n ${activeItem === item.href\n ? \"bg-blue-100 text-blue-700\"\n : \"text-gray-600 hover:bg-gray-50 hover:text-gray-900\"}\r\n `, children: [_jsx(\"i\", { className: `fa ${item.icon} mr-3 flex-shrink-0` }), _jsx(\"span\", { className: \"flex-1\", children: item.label }), item.badge && (_jsx(Badge, { variant: \"primary\", size: \"sm\", className: \"ml-2\", children: item.badge }))] }, item.href))) }) }), _jsx(\"div\", { className: \"absolute bottom-0 left-0 right-0 p-4 border-t\", children: _jsxs(\"div\", { className: \"flex items-center\", children: [_jsx(\"div\", { className: \"flex-shrink-0\", children: _jsx(\"div\", { className: \"w-8 h-8 bg-gray-300 rounded-full flex items-center justify-center\", children: _jsx(\"i\", { className: `fa ${user.avatar || \"fa-user\"} text-gray-600` }) }) }), _jsxs(\"div\", { className: \"ml-3 flex-1\", children: [_jsx(\"p\", { className: \"text-sm font-medium text-gray-900\", children: user.name }), user.email && (_jsx(\"p\", { className: \"text-xs text-gray-500\", children: user.email }))] }), onLogout && (_jsx(\"button\", { onClick: onLogout, className: \"ml-2 p-1 text-gray-400 hover:text-gray-600\", title: \"Cerrar sesi\\u00F3n\", children: _jsx(\"i\", { className: \"fa fa-sign-out-alt\" }) }))] }) })] }), _jsxs(\"div\", { className: \"lg:pl-64\", children: [_jsx(\"div\", { className: \"sticky top-0 z-10 bg-white shadow-sm border-b\", children: _jsxs(\"div\", { className: \"flex items-center justify-between h-16 px-4 sm:px-6 lg:px-8\", children: [_jsx(\"button\", { onClick: toggleSidebar, className: \"lg:hidden p-2 rounded-md text-gray-400 hover:text-gray-600\", children: _jsx(\"i\", { className: \"fa fa-bars\" }) }), _jsxs(\"div\", { className: \"flex items-center space-x-4\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", icon: \"fa-bell\", children: \"Notificaciones\" }), _jsx(Button, { variant: \"ghost\", size: \"sm\", icon: \"fa-cog\", children: \"Configuraci\\u00F3n\" })] })] }) }), _jsx(\"main\", { className: \"p-4 sm:p-6 lg:p-8\", children: children })] })] }));\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport React, { useState } from \"react\";\nimport { Button, Input, Card } from \"flysoft-react-ui\";\nimport \"flysoft-react-ui/styles\";\nexport const FormPattern = ({ title, subtitle, fields, onSubmit, submitText = \"Enviar\", submitIcon = \"fa-paper-plane\", loading = false, error, success = false, className = \"\", gridCols = 1, }) => {\n const [formData, setFormData] = useState(fields.reduce((acc, field) => ({ ...acc, [field.name]: \"\" }), {}));\n const [errors, setErrors] = useState({});\n const handleSubmit = (e) => {\n e.preventDefault();\n // Validación\n const newErrors = {};\n fields.forEach((field) => {\n const value = formData[field.name] || \"\";\n if (field.required && !value.trim()) {\n newErrors[field.name] = `${field.label} es requerido`;\n }\n else if (field.validation) {\n const validationError = field.validation(value);\n if (validationError) {\n newErrors[field.name] = validationError;\n }\n }\n });\n setErrors(newErrors);\n if (Object.keys(newErrors).length === 0) {\n onSubmit(formData);\n }\n };\n const handleChange = (fieldName) => (e) => {\n setFormData((prev) => ({ ...prev, [fieldName]: e.target.value }));\n // Limpiar error cuando el usuario empiece a escribir\n if (errors[fieldName]) {\n setErrors((prev) => ({ ...prev, [fieldName]: undefined }));\n }\n };\n const renderField = (field) => {\n const commonProps = {\n label: field.label,\n placeholder: field.placeholder,\n icon: field.icon,\n value: formData[field.name] || \"\",\n onChange: handleChange(field.name),\n error: errors[field.name],\n disabled: loading,\n };\n if (field.multiline) {\n return (_jsxs(\"div\", { className: \"w-full\", children: [_jsxs(\"label\", { className: \"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\", children: [field.label, field.required && _jsx(\"span\", { className: \"text-red-500 ml-1\", children: \"*\" })] }), _jsxs(\"div\", { className: \"relative\", children: [field.icon && (_jsx(\"i\", { className: `fa ${field.icon} text-[var(--color-text-muted)] absolute top-3 left-3 w-5 h-5` })), _jsx(\"textarea\", { placeholder: field.placeholder, className: `\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)] px-4 py-3 text-base\r\n ${field.icon ? \"pl-10\" : \"pl-4\"}\r\n ${errors[field.name]\n ? \"border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]\"\n : \"border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]\"}\r\n `, rows: field.rows || 4, value: formData[field.name] || \"\", onChange: handleChange(field.name), disabled: loading })] }), errors[field.name] && (_jsx(\"p\", { className: \"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\", children: errors[field.name] }))] }, field.name));\n }\n return (_jsx(Input, { type: field.type || \"text\", ...commonProps }, field.name));\n };\n if (success) {\n return (_jsx(Card, { title: \"\\u00A1\\u00C9xito!\", subtitle: \"La operaci\\u00F3n se complet\\u00F3 correctamente\", className: className, children: _jsxs(\"div\", { className: \"text-center py-8\", children: [_jsx(\"div\", { className: \"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4\", children: _jsx(\"i\", { className: \"fa fa-check text-green-600 text-2xl\" }) }), _jsx(\"h3\", { className: \"text-lg font-semibold text-gray-900 mb-2\", children: \"\\u00A1Operaci\\u00F3n exitosa!\" }), _jsx(\"p\", { className: \"text-gray-600 mb-4\", children: \"Los datos se han procesado correctamente.\" }), _jsx(Button, { variant: \"outline\", onClick: () => window.location.reload(), icon: \"fa-refresh\", children: \"Continuar\" })] }) }));\n }\n return (_jsx(Card, { title: title, subtitle: subtitle, className: className, children: _jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-4\", children: [error && (_jsx(\"div\", { className: \"p-3 bg-red-50 border border-red-200 rounded-lg\", children: _jsxs(\"p\", { className: \"text-sm text-red-600\", children: [_jsx(\"i\", { className: \"fa fa-exclamation-triangle mr-2\" }), error] }) })), _jsx(\"div\", { className: `grid grid-cols-1 ${gridCols === 2 ? \"md:grid-cols-2\" : \"\"} gap-4`, children: fields.map(renderField) }), _jsx(Button, { type: \"submit\", variant: \"primary\", size: \"lg\", icon: submitIcon, loading: loading, className: \"w-full\", children: submitText })] }) }));\n};\n"],"names":["Button","variant","size","icon","iconPosition","loading","children","className","disabled","onClick","props","buttonRef","React","ripples","setRipples","baseClasses","variantClasses","sizeClasses","classes","renderIcon","jsx","rippleColor","jsxs","event","rect","x","y","id","newRipple","prev","ripple","Input","label","error","inputId","stateClasses","inputClasses","iconClasses","Card","title","subtitle","headerActions","footer","useThemeOverride","options","scope","element","prefix","appliedOverrides","useRef","applyOverride","useCallback","overrides","targetElement","key","value","cssVarName","revertOverride","keys","revertAllOverrides","getCSSVariable","isOverrideApplied","useEffect","useTemporaryOverride","duration","timeoutId","lightTheme","darkTheme","blueTheme","greenTheme","defaultTheme","themes","ThemeContext","createContext","ThemeProvider","initialTheme","storageKey","forceInitialTheme","getInitialTheme","currentTheme","setCurrentTheme","useState","savedTheme","parsed","currentThemeName","setCurrentThemeName","applyThemeToCSS","theme","root","body","setTheme","newTheme","resetToDefault","isDark","useTheme","context","useContext","useThemeContext","useGlobalThemeStyles","html","breakpoints","useBreakpoint","windowSize","setWindowSize","breakpoint","setBreakpoint","handleResize","width","height","useElementScroll","elementRef","scrollY","setScrollY","scrollDirection","setScrollDirection","lastScrollY","lastDirection","handleScroll","currentScrollY","delta","newDirection","AppLayout","navBarDrawer","leftDrawer","isMobile","isTablet","contentRef","isMobileDrawerOpen","setIsMobileDrawerOpen","isNavbarVisible","setIsNavbarVisible","isNavbarVisibleRef","shouldShowMobileDrawer","shouldShowDesktopDrawer","shouldBeVisible","handleMobileDrawerToggle","handleOverlayClick","layoutClasses","Badge","rounded","roundedClasses","ThemeSwitcher","availableThemes","themeName","_jsx","_jsxs","LoginForm","onSubmit","formData","setFormData","errors","setErrors","handleSubmit","e","newErrors","handleChange","field","RegistrationForm","ContactForm","success","DashboardLayout","stats","actions","getChangeColor","changeType","getChangeIcon","stat","index","SidebarLayout","menuItems","user","onLogout","sidebarOpen","setSidebarOpen","activeItem","setActiveItem","toggleSidebar","handleMenuClick","href","item","FormPattern","fields","submitText","submitIcon","gridCols","acc","validationError","fieldName","renderField","commonProps"],"mappings":"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"}
|