flysoft-react-ui 0.1.5 → 0.1.7
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/contexts/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKvD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ThemeContext.d.ts","sourceRoot":"","sources":["../../src/contexts/ThemeContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKvD,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAiItD,CAAC;AAGF,eAAO,MAAM,QAAQ,QAAO,gBAM3B,CAAC;AAGF,eAAO,MAAM,eAAe,eAG3B,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/form-controls/Button.tsx","../src/components/form-controls/Input.tsx","../src/components/layout/Card.tsx","../src/components/utils/Badge.tsx","../src/contexts/presets.ts","../src/contexts/ThemeContext.tsx","../src/hooks/useThemeOverride.ts","../src/components/ThemeSwitcher.tsx"],"sourcesContent":["import React from \"react\";\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"outline\" | \"ghost\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n loading?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n variant = \"primary\",\r\n size = \"md\",\r\n icon,\r\n iconPosition = \"left\",\r\n loading = false,\r\n children,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}) => {\r\n const baseClasses = `\r\n inline-flex items-center justify-center font-medium rounded-sm transition-colors \r\n cursor-pointer\r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary)] text-[var(--color-primary-contrast)] \r\n hover:bg-[var(--color-primary-dark)] focus:ring-[var(--color-primary)]\r\n `,\r\n outline: `\r\n border border-[var(--color-primary)] text-[var(--color-primary)] \r\n hover:bg-[var(--color-bg-secondary)] focus:ring-[var(--color-primary)]\r\n `,\r\n ghost: `\r\n text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)] \r\n focus:ring-[var(--color-primary)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`;\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} ${\r\n iconPosition === \"right\" ? \"ml-2\" : \"mr-2\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <button className={classes} disabled={disabled || loading} {...props}>\r\n {loading && <i className=\"fa fa-spinner fa-spin mr-2\" />}\r\n {icon && iconPosition === \"left\" && !loading && renderIcon()}\r\n {children}\r\n {icon && iconPosition === \"right\" && !loading && renderIcon()}\r\n </button>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Input: React.FC<InputProps> = ({\r\n label,\r\n error,\r\n icon,\r\n iconPosition = \"left\",\r\n size = \"md\",\r\n className = \"\",\r\n id,\r\n ...props\r\n}) => {\r\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n const baseClasses = `\r\n w-full border rounded-lg transition-colors focus:outline-none focus:ring-2 \r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)] text-[var(--color-text-primary)]\r\n bg-[var(--color-bg-default)]\r\n `;\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const stateClasses = error\r\n ? `border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]`\r\n : `border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]`;\r\n\r\n const inputClasses = `${baseClasses} ${sizeClasses[size]} ${stateClasses} ${className}`;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} text-[var(--color-text-muted)] absolute top-1/2 transform -translate-y-1/2 ${\r\n iconPosition === \"left\" ? \"left-3\" : \"right-3\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <div className=\"relative\">\r\n {icon && iconPosition === \"left\" && renderIcon()}\r\n <input\r\n id={inputId}\r\n className={`${inputClasses} ${\r\n icon && iconPosition === \"left\" ? \"pl-10\" : \"\"\r\n } ${icon && iconPosition === \"right\" ? \"pr-10\" : \"\"}`}\r\n {...props}\r\n />\r\n {icon && iconPosition === \"right\" && renderIcon()}\r\n </div>\r\n {error && (\r\n <p className=\"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface CardProps {\r\n title?: string;\r\n subtitle?: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n headerActions?: React.ReactNode;\r\n footer?: React.ReactNode;\r\n variant?: \"default\" | \"elevated\" | \"outlined\";\r\n}\r\n\r\nexport const Card: React.FC<CardProps> = ({\r\n title,\r\n subtitle,\r\n children,\r\n className = \"\",\r\n headerActions,\r\n footer,\r\n variant = \"default\",\r\n}) => {\r\n const baseClasses = `\r\n bg-[var(--color-bg-default)] rounded-lg border\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n default: `border-[var(--color-border-default)]`,\r\n elevated: `border-[var(--color-border-default)] shadow-[var(--shadow-lg)]`,\r\n outlined: `border-[var(--color-gray-300)]`,\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\r\n\r\n return (\r\n <div className={classes}>\r\n {(title || subtitle || headerActions) && (\r\n <div className=\"px-6 py-4 border-b border-[var(--color-border-default)]\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n {title && (\r\n <h3 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">\r\n {title}\r\n </h3>\r\n )}\r\n {subtitle && (\r\n <p className=\"text-sm text-[var(--color-text-secondary)] mt-1\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n {headerActions && (\r\n <div className=\"flex items-center space-x-2\">{headerActions}</div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"px-6 py-4\">{children}</div>\r\n\r\n {footer && (\r\n <div className=\"px-6 py-4 border-t border-[var(--color-border-default)] bg-[var(--color-bg-secondary)] rounded-b-lg\">\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface BadgeProps {\r\n children: React.ReactNode;\r\n variant?: \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n rounded?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Badge: React.FC<BadgeProps> = ({\r\n children,\r\n variant = \"primary\",\r\n size = \"md\",\r\n rounded = false,\r\n className = \"\",\r\n}) => {\r\n const baseClasses =\r\n \"inline-flex items-center font-medium font-[var(--font-default)]\";\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary-light)] text-[var(--color-primary-dark)]\r\n hover:bg-[var(--color-primary)] hover:text-[var(--color-primary-contrast)]\r\n `,\r\n secondary: `\r\n bg-[var(--color-secondary-light)] text-[var(--color-secondary-dark)]\r\n hover:bg-[var(--color-secondary)] hover:text-[var(--color-secondary-contrast)]\r\n `,\r\n success: `\r\n bg-[var(--color-success-light)] text-[var(--color-success-dark)]\r\n hover:bg-[var(--color-success)] hover:text-[var(--color-success-contrast)]\r\n `,\r\n warning: `\r\n bg-[var(--color-warning-light)] text-[var(--color-warning-dark)]\r\n hover:bg-[var(--color-warning)] hover:text-[var(--color-warning-contrast)]\r\n `,\r\n danger: `\r\n bg-[var(--color-danger-light)] text-[var(--color-danger-dark)]\r\n hover:bg-[var(--color-danger)] hover:text-[var(--color-danger-contrast)]\r\n `,\r\n info: `\r\n bg-[var(--color-info-light)] text-[var(--color-info-dark)]\r\n hover:bg-[var(--color-info)] hover:text-[var(--color-info-contrast)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-2 py-0.5 text-xs\",\r\n md: \"px-2.5 py-0.5 text-sm\",\r\n lg: \"px-3 py-1 text-base\",\r\n };\r\n\r\n const roundedClasses = rounded ? \"rounded-full\" : \"rounded-md\";\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${roundedClasses} ${className}`;\r\n\r\n return <span className={classes}>{children}</span>;\r\n};\r\n","import type { Theme } from \"./types\";\r\n\r\nexport const lightTheme: Theme = {\r\n name: \"light\",\r\n colors: {\r\n primary: \"#007aff\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#0064d1\",\r\n primaryLight: \"#4da6ff\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#007aff\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const darkTheme: Theme = {\r\n name: \"dark\",\r\n colors: {\r\n primary: \"#3b82f6\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1d4ed8\",\r\n primaryLight: \"#60a5fa\",\r\n secondary: \"#9ca3af\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#6b7280\",\r\n secondaryLight: \"#d1d5db\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#111827\",\r\n gray100: \"#1f2937\",\r\n gray200: \"#374151\",\r\n gray300: \"#4b5563\",\r\n gray400: \"#6b7280\",\r\n gray500: \"#9ca3af\",\r\n gray600: \"#d1d5db\",\r\n gray700: \"#e5e7eb\",\r\n gray800: \"#f3f4f6\",\r\n gray900: \"#f9fafb\",\r\n borderDefault: \"#374151\",\r\n borderFocus: \"#3b82f6\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#111827\",\r\n bgSecondary: \"#1f2937\",\r\n bgDisabled: \"#374151\",\r\n textPrimary: \"#f9fafb\",\r\n textSecondary: \"#e5e7eb\",\r\n textMuted: \"#9ca3af\",\r\n textDisabled: \"#6b7280\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.3)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#f9fafb\",\r\n },\r\n};\r\n\r\nexport const blueTheme: Theme = {\r\n name: \"blue\",\r\n colors: {\r\n primary: \"#1e40af\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1e3a8a\",\r\n primaryLight: \"#3b82f6\",\r\n secondary: \"#64748b\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#475569\",\r\n secondaryLight: \"#94a3b8\",\r\n success: \"#059669\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#047857\",\r\n successLight: \"#10b981\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f8fafc\",\r\n gray100: \"#f1f5f9\",\r\n gray200: \"#e2e8f0\",\r\n gray300: \"#cbd5e1\",\r\n gray400: \"#94a3b8\",\r\n gray500: \"#64748b\",\r\n gray600: \"#475569\",\r\n gray700: \"#334155\",\r\n gray800: \"#1e293b\",\r\n gray900: \"#0f172a\",\r\n borderDefault: \"#e2e8f0\",\r\n borderFocus: \"#1e40af\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f8fafc\",\r\n bgDisabled: \"#f1f5f9\",\r\n textPrimary: \"#0f172a\",\r\n textSecondary: \"#334155\",\r\n textMuted: \"#64748b\",\r\n textDisabled: \"#94a3b8\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(30 64 175 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(30 64 175 / 0.1), 0 2px 4px -2px rgb(30 64 175 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(30 64 175 / 0.1), 0 4px 6px -4px rgb(30 64 175 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#0f172a\",\r\n },\r\n};\r\n\r\nexport const greenTheme: Theme = {\r\n name: \"green\",\r\n colors: {\r\n primary: \"#059669\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#047857\",\r\n primaryLight: \"#10b981\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#16a34a\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#15803d\",\r\n successLight: \"#22c55e\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#059669\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(5 150 105 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(5 150 105 / 0.1), 0 2px 4px -2px rgb(5 150 105 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(5 150 105 / 0.1), 0 4px 6px -4px rgb(5 150 105 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const defaultTheme = lightTheme;\r\n\r\nexport const themes: Record<string, Theme> = {\r\n light: lightTheme,\r\n dark: darkTheme,\r\n blue: blueTheme,\r\n green: greenTheme,\r\n};\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useState,\r\n type ReactNode,\r\n} from \"react\";\r\nimport type { Theme, ThemeContextType } from \"./types\";\r\nimport { themes, defaultTheme } from \"./presets\";\r\n\r\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\r\n\r\ninterface ThemeProviderProps {\r\n children: ReactNode;\r\n initialTheme?: string | Theme;\r\n storageKey?: string;\r\n}\r\n\r\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\r\n children,\r\n initialTheme = \"light\",\r\n storageKey = \"flysoft-theme\",\r\n}) => {\r\n const [currentTheme, setCurrentTheme] = useState<Theme>(() => {\r\n // Try to get theme from localStorage\r\n if (typeof window !== \"undefined\") {\r\n const savedTheme = localStorage.getItem(storageKey);\r\n if (savedTheme) {\r\n if (themes[savedTheme]) {\r\n return themes[savedTheme];\r\n }\r\n // Try to parse as custom theme\r\n try {\r\n const parsed = JSON.parse(savedTheme);\r\n if (parsed.name && parsed.colors) {\r\n return parsed;\r\n }\r\n } catch {\r\n // Invalid JSON, fallback to default\r\n }\r\n }\r\n }\r\n\r\n // Handle initialTheme prop\r\n if (typeof initialTheme === \"string\") {\r\n return themes[initialTheme] || defaultTheme;\r\n }\r\n return initialTheme;\r\n });\r\n\r\n const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);\r\n\r\n // Function to apply theme to CSS variables\r\n const applyThemeToCSS = (theme: Theme) => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n const root = document.documentElement;\r\n\r\n // Apply color variables\r\n Object.entries(theme.colors).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply shadow variables\r\n Object.entries(theme.shadows).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-shadow-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply radius variables\r\n Object.entries(theme.radius).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-radius-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply spacing variables\r\n Object.entries(theme.spacing).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-spacing-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply font variables\r\n Object.entries(theme.fonts).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-font-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Set theme name as data attribute for CSS targeting\r\n root.setAttribute(\"data-theme\", theme.name);\r\n };\r\n\r\n // Function to set theme\r\n const setTheme = (theme: Theme | string) => {\r\n let newTheme: Theme;\r\n\r\n if (typeof theme === \"string\") {\r\n if (themes[theme]) {\r\n newTheme = themes[theme];\r\n } else {\r\n console.warn(`Theme \"${theme}\" not found, falling back to default`);\r\n newTheme = defaultTheme;\r\n }\r\n } else {\r\n newTheme = theme;\r\n }\r\n\r\n setCurrentTheme(newTheme);\r\n setCurrentThemeName(newTheme.name);\r\n\r\n // Save to localStorage\r\n if (typeof window !== \"undefined\") {\r\n localStorage.setItem(storageKey, JSON.stringify(newTheme));\r\n }\r\n\r\n // Apply to CSS\r\n applyThemeToCSS(newTheme);\r\n };\r\n\r\n // Function to reset to default theme\r\n const resetToDefault = () => {\r\n setTheme(defaultTheme);\r\n };\r\n\r\n // Apply theme on mount and when theme changes\r\n useEffect(() => {\r\n applyThemeToCSS(currentTheme);\r\n }, [currentTheme]);\r\n\r\n // Check if current theme is dark\r\n const isDark = currentTheme.name === \"dark\";\r\n\r\n const value: ThemeContextType = {\r\n theme: currentTheme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes: Object.keys(themes),\r\n resetToDefault,\r\n isDark,\r\n };\r\n\r\n return (\r\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\r\n );\r\n};\r\n\r\n// Hook to use theme context\r\nexport const useTheme = (): ThemeContextType => {\r\n const context = useContext(ThemeContext);\r\n if (context === undefined) {\r\n throw new Error(\"useTheme must be used within a ThemeProvider\");\r\n }\r\n return context;\r\n};\r\n\r\n// Hook to check if theme context is available\r\nexport const useThemeContext = () => {\r\n const context = useContext(ThemeContext);\r\n return context !== undefined;\r\n};\r\n","import { useCallback, useEffect, useRef } from \"react\";\r\nimport type { ThemeOverride } from \"../contexts/types\";\r\n\r\ninterface UseThemeOverrideOptions {\r\n scope?: \"global\" | \"local\";\r\n element?: HTMLElement | null;\r\n prefix?: string;\r\n}\r\n\r\n/**\r\n * Hook para aplicar overrides directos a variables CSS del tema\r\n * Permite personalización granular sin cambiar el tema completo\r\n */\r\nexport const useThemeOverride = (options: UseThemeOverrideOptions = {}) => {\r\n const { scope = \"global\", element = null, prefix = \"flysoft\" } = options;\r\n\r\n const appliedOverrides = useRef<Set<string>>(new Set());\r\n\r\n // Función para aplicar override\r\n const applyOverride = useCallback(\r\n (overrides: ThemeOverride) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) {\r\n console.warn(\"useThemeOverride: No target element available\");\r\n return;\r\n }\r\n\r\n Object.entries(overrides).forEach(([key, value]) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n // Aplicar el override\r\n targetElement.style.setProperty(cssVarName, String(value));\r\n\r\n // Registrar para poder revertir después\r\n appliedOverrides.current.add(cssVarName);\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir overrides específicos\r\n const revertOverride = useCallback(\r\n (keys: string[]) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n keys.forEach((key) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n if (appliedOverrides.current.has(cssVarName)) {\r\n targetElement.style.removeProperty(cssVarName);\r\n appliedOverrides.current.delete(cssVarName);\r\n }\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir todos los overrides aplicados\r\n const revertAllOverrides = useCallback(() => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n appliedOverrides.current.forEach((cssVarName) => {\r\n targetElement.style.removeProperty(cssVarName);\r\n });\r\n\r\n appliedOverrides.current.clear();\r\n }, [scope, element]);\r\n\r\n // Función para obtener el valor actual de una variable CSS\r\n const getCSSVariable = useCallback(\r\n (key: string): string | null => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return null;\r\n\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return (\r\n getComputedStyle(targetElement).getPropertyValue(cssVarName) || null\r\n );\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para verificar si un override está aplicado\r\n const isOverrideApplied = useCallback(\r\n (key: string): boolean => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return appliedOverrides.current.has(cssVarName);\r\n },\r\n [prefix]\r\n );\r\n\r\n // Cleanup al desmontar\r\n useEffect(() => {\r\n return () => {\r\n revertAllOverrides();\r\n };\r\n }, [revertAllOverrides]);\r\n\r\n return {\r\n applyOverride,\r\n revertOverride,\r\n revertAllOverrides,\r\n getCSSVariable,\r\n isOverrideApplied,\r\n appliedOverridesCount: appliedOverrides.current.size,\r\n };\r\n};\r\n\r\n/**\r\n * Hook para aplicar overrides temporales que se revierten automáticamente\r\n */\r\nexport const useTemporaryOverride = (\r\n overrides: ThemeOverride,\r\n duration: number = 3000,\r\n options: UseThemeOverrideOptions = {}\r\n) => {\r\n const { applyOverride, revertOverride } = useThemeOverride(options);\r\n\r\n const applyTemporaryOverride = useCallback(() => {\r\n applyOverride(overrides);\r\n\r\n const timeoutId = setTimeout(() => {\r\n revertOverride(Object.keys(overrides));\r\n }, duration);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n revertOverride(Object.keys(overrides));\r\n };\r\n }, [applyOverride, revertOverride, overrides, duration]);\r\n\r\n return { applyTemporaryOverride };\r\n};\r\n","import React from \"react\";\r\nimport { useTheme } from \"../contexts/ThemeContext\";\r\nimport { Button } from \"./form-controls/Button\";\r\nimport { Card } from \"./layout/Card\";\r\n\r\nexport const ThemeSwitcher: React.FC = () => {\r\n const {\r\n theme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes,\r\n resetToDefault,\r\n isDark,\r\n } = useTheme();\r\n\r\n return (\r\n <Card className=\"p-6 max-w-md mx-auto\">\r\n <h3\r\n className=\"text-lg font-semibold mb-4\"\r\n style={{ color: \"var(--flysoft-text-primary)\" }}\r\n >\r\n Theme Switcher\r\n </h3>\r\n\r\n <div className=\"space-y-3\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {availableThemes.map((themeName) => (\r\n <Button\r\n key={themeName}\r\n variant={currentThemeName === themeName ? \"primary\" : \"ghost\"}\r\n size=\"sm\"\r\n onClick={() => setTheme(themeName)}\r\n >\r\n {themeName}\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={resetToDefault}\r\n className=\"w-full\"\r\n >\r\n Reset to Default\r\n </Button>\r\n\r\n <div\r\n className=\"text-sm space-y-2\"\r\n style={{ color: \"var(--flysoft-text-secondary)\" }}\r\n >\r\n <p>\r\n <strong>Current Theme:</strong> {currentThemeName}\r\n </p>\r\n <p>\r\n <strong>Mode:</strong> {isDark ? \"Dark\" : \"Light\"}\r\n </p>\r\n <p>\r\n <strong>Primary Color:</strong> {theme.colors.primary}\r\n </p>\r\n </div>\r\n\r\n <div\r\n className=\"w-full h-8 rounded border-2\"\r\n style={{\r\n backgroundColor: theme.colors.primary,\r\n borderColor: theme.colors.borderDefault,\r\n }}\r\n />\r\n </div>\r\n </Card>\r\n );\r\n};\r\n"],"names":["Button","variant","size","icon","iconPosition","loading","children","className","disabled","props","baseClasses","variantClasses","sizeClasses","classes","renderIcon","jsx","jsxs","Input","label","error","id","inputId","stateClasses","inputClasses","iconClasses","Card","title","subtitle","headerActions","footer","Badge","rounded","roundedClasses","lightTheme","darkTheme","blueTheme","greenTheme","defaultTheme","themes","ThemeContext","createContext","ThemeProvider","initialTheme","storageKey","currentTheme","setCurrentTheme","useState","savedTheme","parsed","currentThemeName","setCurrentThemeName","applyThemeToCSS","theme","root","key","value","cssVarName","setTheme","newTheme","resetToDefault","useEffect","isDark","useTheme","context","useContext","useThemeContext","useThemeOverride","options","scope","element","prefix","appliedOverrides","useRef","applyOverride","useCallback","overrides","targetElement","revertOverride","keys","revertAllOverrides","getCSSVariable","isOverrideApplied","useTemporaryOverride","duration","timeoutId","ThemeSwitcher","availableThemes","themeName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/form-controls/Button.tsx","../src/components/form-controls/Input.tsx","../src/components/layout/Card.tsx","../src/components/utils/Badge.tsx","../src/contexts/presets.ts","../src/contexts/ThemeContext.tsx","../src/hooks/useThemeOverride.ts","../src/components/ThemeSwitcher.tsx"],"sourcesContent":["import React from \"react\";\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: \"primary\" | \"outline\" | \"ghost\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n loading?: boolean;\r\n children: React.ReactNode;\r\n}\r\n\r\nexport const Button: React.FC<ButtonProps> = ({\r\n variant = \"primary\",\r\n size = \"md\",\r\n icon,\r\n iconPosition = \"left\",\r\n loading = false,\r\n children,\r\n className = \"\",\r\n disabled,\r\n ...props\r\n}) => {\r\n const baseClasses = `\r\n inline-flex items-center justify-center font-medium rounded-sm transition-colors \r\n cursor-pointer\r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary)] text-[var(--color-primary-contrast)] \r\n hover:bg-[var(--color-primary-dark)] focus:ring-[var(--color-primary)]\r\n `,\r\n outline: `\r\n border border-[var(--color-primary)] text-[var(--color-primary)] \r\n hover:bg-[var(--color-bg-secondary)] focus:ring-[var(--color-primary)]\r\n `,\r\n ghost: `\r\n text-[var(--color-primary)] hover:bg-[var(--color-bg-secondary)] \r\n focus:ring-[var(--color-primary)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${className}`;\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} ${\r\n iconPosition === \"right\" ? \"ml-2\" : \"mr-2\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <button className={classes} disabled={disabled || loading} {...props}>\r\n {loading && <i className=\"fa fa-spinner fa-spin mr-2\" />}\r\n {icon && iconPosition === \"left\" && !loading && renderIcon()}\r\n {children}\r\n {icon && iconPosition === \"right\" && !loading && renderIcon()}\r\n </button>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface InputProps\r\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\"> {\r\n label?: string;\r\n error?: string;\r\n icon?: string;\r\n iconPosition?: \"left\" | \"right\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport const Input: React.FC<InputProps> = ({\r\n label,\r\n error,\r\n icon,\r\n iconPosition = \"left\",\r\n size = \"md\",\r\n className = \"\",\r\n id,\r\n ...props\r\n}) => {\r\n const inputId = id || `input-${Math.random().toString(36).substr(2, 9)}`;\r\n\r\n const baseClasses = `\r\n w-full border rounded-lg transition-colors focus:outline-none focus:ring-2 \r\n disabled:opacity-50 disabled:cursor-not-allowed\r\n font-[var(--font-default)] text-[var(--color-text-primary)]\r\n bg-[var(--color-bg-default)]\r\n `;\r\n\r\n const sizeClasses = {\r\n sm: \"px-3 py-1.5 text-sm\",\r\n md: \"px-4 py-2 text-base\",\r\n lg: \"px-6 py-3 text-lg\",\r\n };\r\n\r\n const stateClasses = error\r\n ? `border-[var(--color-border-error)] focus:border-[var(--color-border-error)] focus:ring-[var(--color-border-error)]`\r\n : `border-[var(--color-border-default)] focus:border-[var(--color-border-focus)] focus:ring-[var(--color-border-focus)]`;\r\n\r\n const inputClasses = `${baseClasses} ${sizeClasses[size]} ${stateClasses} ${className}`;\r\n\r\n const iconClasses =\r\n size === \"sm\" ? \"w-4 h-4\" : size === \"md\" ? \"w-5 h-5\" : \"w-6 h-6\";\r\n\r\n const renderIcon = () => {\r\n if (!icon) return null;\r\n\r\n return (\r\n <i\r\n className={`fa ${icon} ${iconClasses} text-[var(--color-text-muted)] absolute top-1/2 transform -translate-y-1/2 ${\r\n iconPosition === \"left\" ? \"left-3\" : \"right-3\"\r\n }`}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {label && (\r\n <label\r\n htmlFor={inputId}\r\n className=\"block text-sm font-medium text-[var(--color-text-primary)] mb-1 font-[var(--font-default)]\"\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <div className=\"relative\">\r\n {icon && iconPosition === \"left\" && renderIcon()}\r\n <input\r\n id={inputId}\r\n className={`${inputClasses} ${\r\n icon && iconPosition === \"left\" ? \"pl-10\" : \"\"\r\n } ${icon && iconPosition === \"right\" ? \"pr-10\" : \"\"}`}\r\n {...props}\r\n />\r\n {icon && iconPosition === \"right\" && renderIcon()}\r\n </div>\r\n {error && (\r\n <p className=\"mt-1 text-sm text-[var(--color-danger)] font-[var(--font-default)]\">\r\n {error}\r\n </p>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface CardProps {\r\n title?: string;\r\n subtitle?: string;\r\n children: React.ReactNode;\r\n className?: string;\r\n headerActions?: React.ReactNode;\r\n footer?: React.ReactNode;\r\n variant?: \"default\" | \"elevated\" | \"outlined\";\r\n}\r\n\r\nexport const Card: React.FC<CardProps> = ({\r\n title,\r\n subtitle,\r\n children,\r\n className = \"\",\r\n headerActions,\r\n footer,\r\n variant = \"default\",\r\n}) => {\r\n const baseClasses = `\r\n bg-[var(--color-bg-default)] rounded-lg border\r\n font-[var(--font-default)]\r\n `;\r\n\r\n const variantClasses = {\r\n default: `border-[var(--color-border-default)]`,\r\n elevated: `border-[var(--color-border-default)] shadow-[var(--shadow-lg)]`,\r\n outlined: `border-[var(--color-gray-300)]`,\r\n };\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\r\n\r\n return (\r\n <div className={classes}>\r\n {(title || subtitle || headerActions) && (\r\n <div className=\"px-6 py-4 border-b border-[var(--color-border-default)]\">\r\n <div className=\"flex items-center justify-between\">\r\n <div>\r\n {title && (\r\n <h3 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">\r\n {title}\r\n </h3>\r\n )}\r\n {subtitle && (\r\n <p className=\"text-sm text-[var(--color-text-secondary)] mt-1\">\r\n {subtitle}\r\n </p>\r\n )}\r\n </div>\r\n {headerActions && (\r\n <div className=\"flex items-center space-x-2\">{headerActions}</div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <div className=\"px-6 py-4\">{children}</div>\r\n\r\n {footer && (\r\n <div className=\"px-6 py-4 border-t border-[var(--color-border-default)] bg-[var(--color-bg-secondary)] rounded-b-lg\">\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from \"react\";\r\n\r\nexport interface BadgeProps {\r\n children: React.ReactNode;\r\n variant?: \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n rounded?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const Badge: React.FC<BadgeProps> = ({\r\n children,\r\n variant = \"primary\",\r\n size = \"md\",\r\n rounded = false,\r\n className = \"\",\r\n}) => {\r\n const baseClasses =\r\n \"inline-flex items-center font-medium font-[var(--font-default)]\";\r\n\r\n const variantClasses = {\r\n primary: `\r\n bg-[var(--color-primary-light)] text-[var(--color-primary-dark)]\r\n hover:bg-[var(--color-primary)] hover:text-[var(--color-primary-contrast)]\r\n `,\r\n secondary: `\r\n bg-[var(--color-secondary-light)] text-[var(--color-secondary-dark)]\r\n hover:bg-[var(--color-secondary)] hover:text-[var(--color-secondary-contrast)]\r\n `,\r\n success: `\r\n bg-[var(--color-success-light)] text-[var(--color-success-dark)]\r\n hover:bg-[var(--color-success)] hover:text-[var(--color-success-contrast)]\r\n `,\r\n warning: `\r\n bg-[var(--color-warning-light)] text-[var(--color-warning-dark)]\r\n hover:bg-[var(--color-warning)] hover:text-[var(--color-warning-contrast)]\r\n `,\r\n danger: `\r\n bg-[var(--color-danger-light)] text-[var(--color-danger-dark)]\r\n hover:bg-[var(--color-danger)] hover:text-[var(--color-danger-contrast)]\r\n `,\r\n info: `\r\n bg-[var(--color-info-light)] text-[var(--color-info-dark)]\r\n hover:bg-[var(--color-info)] hover:text-[var(--color-info-contrast)]\r\n `,\r\n };\r\n\r\n const sizeClasses = {\r\n sm: \"px-2 py-0.5 text-xs\",\r\n md: \"px-2.5 py-0.5 text-sm\",\r\n lg: \"px-3 py-1 text-base\",\r\n };\r\n\r\n const roundedClasses = rounded ? \"rounded-full\" : \"rounded-md\";\r\n\r\n const classes = `${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${roundedClasses} ${className}`;\r\n\r\n return <span className={classes}>{children}</span>;\r\n};\r\n","import type { Theme } from \"./types\";\r\n\r\nexport const lightTheme: Theme = {\r\n name: \"light\",\r\n colors: {\r\n primary: \"#007aff\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#0064d1\",\r\n primaryLight: \"#4da6ff\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#007aff\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const darkTheme: Theme = {\r\n name: \"dark\",\r\n colors: {\r\n primary: \"#3b82f6\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1d4ed8\",\r\n primaryLight: \"#60a5fa\",\r\n secondary: \"#9ca3af\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#6b7280\",\r\n secondaryLight: \"#d1d5db\",\r\n success: \"#10b981\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#059669\",\r\n successLight: \"#34d399\",\r\n warning: \"#f59e0b\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#d97706\",\r\n warningLight: \"#fbbf24\",\r\n danger: \"#ef4444\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#dc2626\",\r\n dangerLight: \"#f87171\",\r\n info: \"#06b6d4\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0891b2\",\r\n infoLight: \"#22d3ee\",\r\n gray50: \"#111827\",\r\n gray100: \"#1f2937\",\r\n gray200: \"#374151\",\r\n gray300: \"#4b5563\",\r\n gray400: \"#6b7280\",\r\n gray500: \"#9ca3af\",\r\n gray600: \"#d1d5db\",\r\n gray700: \"#e5e7eb\",\r\n gray800: \"#f3f4f6\",\r\n gray900: \"#f9fafb\",\r\n borderDefault: \"#374151\",\r\n borderFocus: \"#3b82f6\",\r\n borderError: \"#ef4444\",\r\n bgDefault: \"#111827\",\r\n bgSecondary: \"#1f2937\",\r\n bgDisabled: \"#374151\",\r\n textPrimary: \"#f9fafb\",\r\n textSecondary: \"#e5e7eb\",\r\n textMuted: \"#9ca3af\",\r\n textDisabled: \"#6b7280\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(0 0 0 / 0.3)\",\r\n md: \"0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.4)\",\r\n lg: \"0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.4)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#f9fafb\",\r\n },\r\n};\r\n\r\nexport const blueTheme: Theme = {\r\n name: \"blue\",\r\n colors: {\r\n primary: \"#1e40af\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#1e3a8a\",\r\n primaryLight: \"#3b82f6\",\r\n secondary: \"#64748b\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#475569\",\r\n secondaryLight: \"#94a3b8\",\r\n success: \"#059669\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#047857\",\r\n successLight: \"#10b981\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f8fafc\",\r\n gray100: \"#f1f5f9\",\r\n gray200: \"#e2e8f0\",\r\n gray300: \"#cbd5e1\",\r\n gray400: \"#94a3b8\",\r\n gray500: \"#64748b\",\r\n gray600: \"#475569\",\r\n gray700: \"#334155\",\r\n gray800: \"#1e293b\",\r\n gray900: \"#0f172a\",\r\n borderDefault: \"#e2e8f0\",\r\n borderFocus: \"#1e40af\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f8fafc\",\r\n bgDisabled: \"#f1f5f9\",\r\n textPrimary: \"#0f172a\",\r\n textSecondary: \"#334155\",\r\n textMuted: \"#64748b\",\r\n textDisabled: \"#94a3b8\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(30 64 175 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(30 64 175 / 0.1), 0 2px 4px -2px rgb(30 64 175 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(30 64 175 / 0.1), 0 4px 6px -4px rgb(30 64 175 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#0f172a\",\r\n },\r\n};\r\n\r\nexport const greenTheme: Theme = {\r\n name: \"green\",\r\n colors: {\r\n primary: \"#059669\",\r\n primaryContrast: \"#ffffff\",\r\n primaryDark: \"#047857\",\r\n primaryLight: \"#10b981\",\r\n secondary: \"#6b7280\",\r\n secondaryContrast: \"#ffffff\",\r\n secondaryDark: \"#4b5563\",\r\n secondaryLight: \"#9ca3af\",\r\n success: \"#16a34a\",\r\n successContrast: \"#ffffff\",\r\n successDark: \"#15803d\",\r\n successLight: \"#22c55e\",\r\n warning: \"#d97706\",\r\n warningContrast: \"#ffffff\",\r\n warningDark: \"#b45309\",\r\n warningLight: \"#f59e0b\",\r\n danger: \"#dc2626\",\r\n dangerContrast: \"#ffffff\",\r\n dangerDark: \"#b91c1c\",\r\n dangerLight: \"#ef4444\",\r\n info: \"#0891b2\",\r\n infoContrast: \"#ffffff\",\r\n infoDark: \"#0e7490\",\r\n infoLight: \"#06b6d4\",\r\n gray50: \"#f9fafb\",\r\n gray100: \"#f3f4f6\",\r\n gray200: \"#e5e7eb\",\r\n gray300: \"#d1d5db\",\r\n gray400: \"#9ca3af\",\r\n gray500: \"#6b7280\",\r\n gray600: \"#4b5563\",\r\n gray700: \"#374151\",\r\n gray800: \"#1f2937\",\r\n gray900: \"#111827\",\r\n borderDefault: \"#e5e7eb\",\r\n borderFocus: \"#059669\",\r\n borderError: \"#dc2626\",\r\n bgDefault: \"#ffffff\",\r\n bgSecondary: \"#f9fafb\",\r\n bgDisabled: \"#f3f4f6\",\r\n textPrimary: \"#111827\",\r\n textSecondary: \"#374151\",\r\n textMuted: \"#6b7280\",\r\n textDisabled: \"#9ca3af\",\r\n },\r\n shadows: {\r\n sm: \"0 1px 2px 0 rgb(5 150 105 / 0.05)\",\r\n md: \"0 4px 6px -1px rgb(5 150 105 / 0.1), 0 2px 4px -2px rgb(5 150 105 / 0.1)\",\r\n lg: \"0 10px 15px -3px rgb(5 150 105 / 0.1), 0 4px 6px -4px rgb(5 150 105 / 0.1)\",\r\n },\r\n radius: {\r\n sm: \"0.375rem\",\r\n md: \"0.5rem\",\r\n lg: \"0.75rem\",\r\n full: \"9999px\",\r\n },\r\n spacing: {\r\n xs: \"0.25rem\",\r\n sm: \"0.5rem\",\r\n md: \"1rem\",\r\n lg: \"1.5rem\",\r\n xl: \"2rem\",\r\n },\r\n fonts: {\r\n default: '\"Instrument Sans\", sans-serif',\r\n sizeDefault: \"16px\",\r\n colorDefault: \"#111827\",\r\n },\r\n};\r\n\r\nexport const defaultTheme = lightTheme;\r\n\r\nexport const themes: Record<string, Theme> = {\r\n light: lightTheme,\r\n dark: darkTheme,\r\n blue: blueTheme,\r\n green: greenTheme,\r\n};\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useEffect,\r\n useState,\r\n type ReactNode,\r\n} from \"react\";\r\nimport type { Theme, ThemeContextType } from \"./types\";\r\nimport { themes, defaultTheme } from \"./presets\";\r\n\r\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\r\n\r\ninterface ThemeProviderProps {\r\n children: ReactNode;\r\n initialTheme?: string | Theme;\r\n storageKey?: string;\r\n}\r\n\r\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\r\n children,\r\n initialTheme = \"light\",\r\n storageKey = \"flysoft-theme\",\r\n}) => {\r\n const [currentTheme, setCurrentTheme] = useState<Theme>(() => {\r\n // Try to get theme from localStorage\r\n if (typeof window !== \"undefined\") {\r\n const savedTheme = localStorage.getItem(storageKey);\r\n if (savedTheme) {\r\n if (themes[savedTheme]) {\r\n return themes[savedTheme];\r\n }\r\n // Try to parse as custom theme\r\n try {\r\n const parsed = JSON.parse(savedTheme);\r\n if (parsed.name && parsed.colors) {\r\n return parsed;\r\n }\r\n } catch {\r\n // Invalid JSON, fallback to default\r\n }\r\n }\r\n }\r\n\r\n // Handle initialTheme prop\r\n if (typeof initialTheme === \"string\") {\r\n return themes[initialTheme] || defaultTheme;\r\n }\r\n return initialTheme;\r\n });\r\n\r\n const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);\r\n\r\n // Function to apply theme to CSS variables\r\n const applyThemeToCSS = (theme: Theme) => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n const root = document.documentElement;\r\n\r\n // Apply color variables\r\n Object.entries(theme.colors).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply shadow variables\r\n Object.entries(theme.shadows).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-shadow-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply radius variables\r\n Object.entries(theme.radius).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-radius-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply spacing variables\r\n Object.entries(theme.spacing).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-spacing-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Apply font variables\r\n Object.entries(theme.fonts).forEach(([key, value]) => {\r\n const cssVarName = `--flysoft-font-${key}`;\r\n root.style.setProperty(cssVarName, value);\r\n });\r\n\r\n // Set theme name as data attribute for CSS targeting\r\n root.setAttribute(\"data-theme\", theme.name);\r\n };\r\n\r\n // Function to set theme\r\n const setTheme = (theme: Theme | string) => {\r\n let newTheme: Theme;\r\n\r\n if (typeof theme === \"string\") {\r\n if (themes[theme]) {\r\n newTheme = themes[theme];\r\n } else {\r\n console.warn(`Theme \"${theme}\" not found, falling back to default`);\r\n newTheme = defaultTheme;\r\n }\r\n } else {\r\n newTheme = theme;\r\n }\r\n\r\n setCurrentTheme(newTheme);\r\n setCurrentThemeName(newTheme.name);\r\n\r\n // Save to localStorage\r\n if (typeof window !== \"undefined\") {\r\n localStorage.setItem(storageKey, JSON.stringify(newTheme));\r\n }\r\n\r\n // Apply to CSS\r\n applyThemeToCSS(newTheme);\r\n };\r\n\r\n // Function to reset to default theme\r\n const resetToDefault = () => {\r\n setTheme(defaultTheme);\r\n };\r\n\r\n\r\n // Apply theme on mount and when theme changes\r\n useEffect(() => {\r\n applyThemeToCSS(currentTheme);\r\n }, [currentTheme]);\r\n\r\n // Check if current theme is dark\r\n const isDark = currentTheme.name === \"dark\";\r\n\r\n const value: ThemeContextType = {\r\n theme: currentTheme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes: Object.keys(themes),\r\n resetToDefault,\r\n isDark,\r\n };\r\n\r\n return (\r\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\r\n );\r\n};\r\n\r\n// Hook to use theme context\r\nexport const useTheme = (): ThemeContextType => {\r\n const context = useContext(ThemeContext);\r\n if (context === undefined) {\r\n throw new Error(\"useTheme must be used within a ThemeProvider\");\r\n }\r\n return context;\r\n};\r\n\r\n// Hook to check if theme context is available\r\nexport const useThemeContext = () => {\r\n const context = useContext(ThemeContext);\r\n return context !== undefined;\r\n};\r\n","import { useCallback, useEffect, useRef } from \"react\";\r\nimport type { ThemeOverride } from \"../contexts/types\";\r\n\r\ninterface UseThemeOverrideOptions {\r\n scope?: \"global\" | \"local\";\r\n element?: HTMLElement | null;\r\n prefix?: string;\r\n}\r\n\r\n/**\r\n * Hook para aplicar overrides directos a variables CSS del tema\r\n * Permite personalización granular sin cambiar el tema completo\r\n */\r\nexport const useThemeOverride = (options: UseThemeOverrideOptions = {}) => {\r\n const { scope = \"global\", element = null, prefix = \"flysoft\" } = options;\r\n\r\n const appliedOverrides = useRef<Set<string>>(new Set());\r\n\r\n // Función para aplicar override\r\n const applyOverride = useCallback(\r\n (overrides: ThemeOverride) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) {\r\n console.warn(\"useThemeOverride: No target element available\");\r\n return;\r\n }\r\n\r\n Object.entries(overrides).forEach(([key, value]) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n // Aplicar el override\r\n targetElement.style.setProperty(cssVarName, String(value));\r\n\r\n // Registrar para poder revertir después\r\n appliedOverrides.current.add(cssVarName);\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir overrides específicos\r\n const revertOverride = useCallback(\r\n (keys: string[]) => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n keys.forEach((key) => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n\r\n if (appliedOverrides.current.has(cssVarName)) {\r\n targetElement.style.removeProperty(cssVarName);\r\n appliedOverrides.current.delete(cssVarName);\r\n }\r\n });\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para revertir todos los overrides aplicados\r\n const revertAllOverrides = useCallback(() => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return;\r\n\r\n appliedOverrides.current.forEach((cssVarName) => {\r\n targetElement.style.removeProperty(cssVarName);\r\n });\r\n\r\n appliedOverrides.current.clear();\r\n }, [scope, element]);\r\n\r\n // Función para obtener el valor actual de una variable CSS\r\n const getCSSVariable = useCallback(\r\n (key: string): string | null => {\r\n const targetElement =\r\n scope === \"global\" ? document.documentElement : element;\r\n\r\n if (!targetElement) return null;\r\n\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return (\r\n getComputedStyle(targetElement).getPropertyValue(cssVarName) || null\r\n );\r\n },\r\n [scope, element, prefix]\r\n );\r\n\r\n // Función para verificar si un override está aplicado\r\n const isOverrideApplied = useCallback(\r\n (key: string): boolean => {\r\n const cssVarName = `--${prefix}-${key\r\n .replace(/([A-Z])/g, \"-$1\")\r\n .toLowerCase()}`;\r\n return appliedOverrides.current.has(cssVarName);\r\n },\r\n [prefix]\r\n );\r\n\r\n // Cleanup al desmontar\r\n useEffect(() => {\r\n return () => {\r\n revertAllOverrides();\r\n };\r\n }, [revertAllOverrides]);\r\n\r\n return {\r\n applyOverride,\r\n revertOverride,\r\n revertAllOverrides,\r\n getCSSVariable,\r\n isOverrideApplied,\r\n appliedOverridesCount: appliedOverrides.current.size,\r\n };\r\n};\r\n\r\n/**\r\n * Hook para aplicar overrides temporales que se revierten automáticamente\r\n */\r\nexport const useTemporaryOverride = (\r\n overrides: ThemeOverride,\r\n duration: number = 3000,\r\n options: UseThemeOverrideOptions = {}\r\n) => {\r\n const { applyOverride, revertOverride } = useThemeOverride(options);\r\n\r\n const applyTemporaryOverride = useCallback(() => {\r\n applyOverride(overrides);\r\n\r\n const timeoutId = setTimeout(() => {\r\n revertOverride(Object.keys(overrides));\r\n }, duration);\r\n\r\n return () => {\r\n clearTimeout(timeoutId);\r\n revertOverride(Object.keys(overrides));\r\n };\r\n }, [applyOverride, revertOverride, overrides, duration]);\r\n\r\n return { applyTemporaryOverride };\r\n};\r\n","import React from \"react\";\r\nimport { useTheme } from \"../contexts/ThemeContext\";\r\nimport { Button } from \"./form-controls/Button\";\r\nimport { Card } from \"./layout/Card\";\r\n\r\nexport const ThemeSwitcher: React.FC = () => {\r\n const {\r\n theme,\r\n setTheme,\r\n currentThemeName,\r\n availableThemes,\r\n resetToDefault,\r\n isDark,\r\n } = useTheme();\r\n\r\n return (\r\n <Card className=\"p-6 max-w-md mx-auto\">\r\n <h3\r\n className=\"text-lg font-semibold mb-4\"\r\n style={{ color: \"var(--flysoft-text-primary)\" }}\r\n >\r\n Theme Switcher\r\n </h3>\r\n\r\n <div className=\"space-y-3\">\r\n <div className=\"flex flex-wrap gap-2\">\r\n {availableThemes.map((themeName) => (\r\n <Button\r\n key={themeName}\r\n variant={currentThemeName === themeName ? \"primary\" : \"ghost\"}\r\n size=\"sm\"\r\n onClick={() => setTheme(themeName)}\r\n >\r\n {themeName}\r\n </Button>\r\n ))}\r\n </div>\r\n\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={resetToDefault}\r\n className=\"w-full\"\r\n >\r\n Reset to Default\r\n </Button>\r\n\r\n <div\r\n className=\"text-sm space-y-2\"\r\n style={{ color: \"var(--flysoft-text-secondary)\" }}\r\n >\r\n <p>\r\n <strong>Current Theme:</strong> {currentThemeName}\r\n </p>\r\n <p>\r\n <strong>Mode:</strong> {isDark ? \"Dark\" : \"Light\"}\r\n </p>\r\n <p>\r\n <strong>Primary Color:</strong> {theme.colors.primary}\r\n </p>\r\n </div>\r\n\r\n <div\r\n className=\"w-full h-8 rounded border-2\"\r\n style={{\r\n backgroundColor: theme.colors.primary,\r\n borderColor: theme.colors.borderDefault,\r\n }}\r\n />\r\n </div>\r\n </Card>\r\n );\r\n};\r\n"],"names":["Button","variant","size","icon","iconPosition","loading","children","className","disabled","props","baseClasses","variantClasses","sizeClasses","classes","renderIcon","jsx","jsxs","Input","label","error","id","inputId","stateClasses","inputClasses","iconClasses","Card","title","subtitle","headerActions","footer","Badge","rounded","roundedClasses","lightTheme","darkTheme","blueTheme","greenTheme","defaultTheme","themes","ThemeContext","createContext","ThemeProvider","initialTheme","storageKey","currentTheme","setCurrentTheme","useState","savedTheme","parsed","currentThemeName","setCurrentThemeName","applyThemeToCSS","theme","root","key","value","cssVarName","setTheme","newTheme","resetToDefault","useEffect","isDark","useTheme","context","useContext","useThemeContext","useThemeOverride","options","scope","element","prefix","appliedOverrides","useRef","applyOverride","useCallback","overrides","targetElement","revertOverride","keys","revertAllOverrides","getCSSVariable","isOverrideApplied","useTemporaryOverride","duration","timeoutId","ThemeSwitcher","availableThemes","themeName"],"mappings":"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"}
|