diff --git a/src/components/ui/MultiSelectAutocomplete.tsx b/src/components/ui/MultiSelectAutocomplete.tsx index a1c9250..d870ae1 100644 --- a/src/components/ui/MultiSelectAutocomplete.tsx +++ b/src/components/ui/MultiSelectAutocomplete.tsx @@ -83,6 +83,7 @@ export const MultiSelectAutocomplete: React.FC = ( {/* Selected Items Display */}
= ( )}
+ {isOpen && !disabled && ( = ( key={option.id} className={` px-3 py-2 cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-700 - ${selectedValues.includes(option.id) ? 'bg-primary-50 dark:bg-primary-900/20' : ''} + ${selectedValues.includes(option.id) ? 'bg-primary-50 dark:bg-primary-900/80' : ''} `} onClick={() => handleToggleOption(option.id)} > diff --git a/src/components/ui/Typography.tsx b/src/components/ui/Typography.tsx new file mode 100644 index 0000000..fde16f8 --- /dev/null +++ b/src/components/ui/Typography.tsx @@ -0,0 +1,121 @@ +import React from 'react'; + +interface TypographyProps { + children: React.ReactNode; + className?: string; +} + +interface LabelProps extends TypographyProps { + htmlFor?: string; +} + +// Page Headers +export const PageTitle = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +export const PageSubtitle = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +// Section Headers +export const SectionTitle = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +export const SectionSubtitle = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +// Card Headers +export const CardTitle = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +export const CardSubtitle = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +// Stats and Values +export const StatValue = ({ children, className = '' }: TypographyProps) => ( +
+ {children} +
+); + +export const StatLabel = ({ children, className = '' }: TypographyProps) => ( +
+ {children} +
+); + +// Body Text +export const BodyText = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +export const SmallText = ({ children, className = '' }: TypographyProps) => ( +

+ {children} +

+); + +// Labels +export const Label = ({ children, htmlFor, className = '' }: LabelProps) => ( + +); + +// Form Headers with Mobile Support +interface FormHeaderProps { + title: string; + subtitle?: string; + backButton?: React.ReactNode; + className?: string; +} + +export const FormHeader = ({ title, subtitle, backButton, className = '' }: FormHeaderProps) => ( +
+ {/* Mobile: Stack vertically, Desktop: Side by side */} +
+ {backButton && ( +
+ {backButton} +
+ )} +
+ {title} + {subtitle && {subtitle}} +
+
+
+); + +// Page Container with consistent mobile spacing +export const PageContainer = ({ children, className = '' }: TypographyProps) => ( +
+ {children} +
+); + +// Mobile-friendly card container +export const MobileCard = ({ children, className = '' }: TypographyProps) => ( +
+ {children} +
+); \ No newline at end of file