@sudobility/building_blocks 0.0.18 → 0.0.21

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/index.ts","../src/constants/languages.ts","../src/components/topbar/language-selector.tsx","../src/components/topbar/app-topbar.tsx","../src/components/topbar/app-topbar-with-firebase-auth.tsx","../src/components/topbar/app-topbar-with-wallet.tsx","../src/components/breadcrumbs/app-breadcrumbs.tsx","../src/components/footer/app-footer.tsx","../src/components/footer/app-footer-for-home-page.tsx","../src/components/layout/app-page-layout.tsx","../src/components/settings/appearance-settings.tsx","../src/components/settings/global-settings-page.tsx","../node_modules/@sudobility/subscription-components/dist/index.esm.js","../src/components/subscription/AppSubscriptionsPage.tsx","../src/components/subscription/AppPricingPage.tsx","../src/components/pages/app-sitemap-page.tsx","../src/components/pages/app-privacy-policy-page.tsx","../src/components/pages/app-terms-of-service-page.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge class names with Tailwind CSS classes.\n * Combines clsx for conditional classes and tailwind-merge for deduplication.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","export interface LanguageConfig {\n code: string;\n name: string;\n flag: string;\n}\n\n/**\n * Default set of 16 supported languages with their flags.\n * Apps can override this list by passing their own languages prop.\n */\nexport const DEFAULT_LANGUAGES: LanguageConfig[] = [\n { code: 'en', name: 'English', flag: '🇺🇸' },\n { code: 'ar', name: 'العربية', flag: '🇸🇦' },\n { code: 'de', name: 'Deutsch', flag: '🇩🇪' },\n { code: 'es', name: 'Español', flag: '🇪🇸' },\n { code: 'fr', name: 'Français', flag: '🇫🇷' },\n { code: 'it', name: 'Italiano', flag: '🇮🇹' },\n { code: 'ja', name: '日本語', flag: '🇯🇵' },\n { code: 'ko', name: '한국어', flag: '🇰🇷' },\n { code: 'pt', name: 'Português', flag: '🇵🇹' },\n { code: 'ru', name: 'Русский', flag: '🇷🇺' },\n { code: 'sv', name: 'Svenska', flag: '🇸🇪' },\n { code: 'th', name: 'ไทย', flag: '🇹🇭' },\n { code: 'uk', name: 'Українська', flag: '🇺🇦' },\n { code: 'vi', name: 'Tiếng Việt', flag: '🇻🇳' },\n { code: 'zh', name: '简体中文', flag: '🇨🇳' },\n { code: 'zh-hant', name: '繁體中文', flag: '🇹🇼' },\n];\n\n/**\n * Languages that use right-to-left text direction.\n */\nexport const RTL_LANGUAGES = ['ar'];\n\n/**\n * Check if a language code is RTL.\n */\nexport function isRTL(languageCode: string): boolean {\n return RTL_LANGUAGES.includes(languageCode);\n}\n","import React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from 'react';\nimport { ChevronDownIcon } from '@heroicons/react/24/outline';\nimport { cn } from '../../utils';\nimport {\n DEFAULT_LANGUAGES,\n type LanguageConfig,\n} from '../../constants/languages';\n\nexport interface LanguageSelectorProps {\n /** Available languages (defaults to 16 built-in languages) */\n languages?: LanguageConfig[];\n /** Current language code */\n currentLanguage?: string;\n /** Language change handler */\n onLanguageChange?: (languageCode: string) => void;\n /** Variant: 'compact' for topbar, 'full' for settings */\n variant?: 'compact' | 'full';\n /** Custom className */\n className?: string;\n /** Label text for full variant */\n label?: string;\n /** Helper text for full variant */\n helperText?: string;\n}\n\n/**\n * LanguageSelector component with dropdown for switching languages.\n * Uses default 16 languages if none provided.\n */\nexport const LanguageSelector: React.FC<LanguageSelectorProps> = ({\n languages = DEFAULT_LANGUAGES,\n currentLanguage = 'en',\n onLanguageChange,\n variant = 'compact',\n className,\n label = 'Language',\n helperText = 'Select your preferred language',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Sort languages alphabetically by name\n const sortedLanguages = useMemo(\n () => [...languages].sort((a, b) => a.name.localeCompare(b.name)),\n [languages]\n );\n\n const currentLang = useMemo(\n () => languages.find(lang => lang.code === currentLanguage) || languages[0],\n [languages, currentLanguage]\n );\n\n const handleLanguageChange = useCallback(\n (langCode: string) => {\n if (langCode !== currentLanguage) {\n onLanguageChange?.(langCode);\n }\n setIsOpen(false);\n },\n [currentLanguage, onLanguageChange]\n );\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n // Close dropdown on escape\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen]);\n\n if (variant === 'compact') {\n return (\n <div ref={dropdownRef} className={cn('relative', className)}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'flex items-center gap-2 px-3 py-2 h-10 rounded-lg',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n 'transition-colors'\n )}\n aria-label='Select language'\n aria-expanded={isOpen}\n aria-haspopup='listbox'\n >\n <span className='text-lg leading-none'>{currentLang?.flag}</span>\n <span className='hidden sm:block text-sm font-medium text-gray-700 dark:text-gray-300'>\n {currentLang?.name}\n </span>\n <ChevronDownIcon\n className={cn(\n 'h-4 w-4 text-gray-500 dark:text-gray-400 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {isOpen && (\n <div\n className={cn(\n 'absolute right-0 mt-2 w-48 py-1 z-50',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-200 dark:border-gray-700',\n 'rounded-lg shadow-lg'\n )}\n role='listbox'\n aria-label='Languages'\n >\n {sortedLanguages.map(lang => (\n <button\n key={lang.code}\n onClick={() => handleLanguageChange(lang.code)}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 text-left',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n 'transition-colors',\n lang.code === currentLanguage &&\n 'bg-gray-100 dark:bg-gray-700 font-medium'\n )}\n role='option'\n aria-selected={lang.code === currentLanguage}\n >\n <span className='text-lg leading-none'>{lang.flag}</span>\n <span className='text-sm text-gray-700 dark:text-gray-300'>\n {lang.name}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n // Full variant for settings pages\n return (\n <div ref={dropdownRef} className={cn('space-y-2', className)}>\n <label className='text-sm font-medium text-gray-700 dark:text-gray-300 flex items-center gap-2'>\n <span>{label}</span>\n </label>\n\n <div className='relative'>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'flex items-center justify-between w-full px-3 py-2 text-left',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-md',\n 'hover:bg-gray-50 dark:hover:bg-gray-700',\n 'transition-colors'\n )}\n aria-expanded={isOpen}\n aria-haspopup='listbox'\n >\n <div className='flex items-center gap-2'>\n <span className='text-lg leading-none'>{currentLang?.flag}</span>\n <span className='text-sm text-gray-700 dark:text-gray-300'>\n {currentLang?.name}\n </span>\n </div>\n <ChevronDownIcon\n className={cn(\n 'h-4 w-4 text-gray-500 dark:text-gray-400 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {isOpen && (\n <div\n className={cn(\n 'absolute left-0 right-0 mt-1 py-1 z-50',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-200 dark:border-gray-700',\n 'rounded-md shadow-lg'\n )}\n role='listbox'\n aria-label='Languages'\n >\n {sortedLanguages.map(lang => (\n <button\n key={lang.code}\n onClick={() => handleLanguageChange(lang.code)}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 text-left',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n 'transition-colors',\n lang.code === currentLanguage &&\n 'bg-gray-100 dark:bg-gray-700 font-medium'\n )}\n role='option'\n aria-selected={lang.code === currentLanguage}\n >\n <span className='text-lg leading-none'>{lang.flag}</span>\n <span className='text-sm text-gray-700 dark:text-gray-300'>\n {lang.name}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {helperText && (\n <p className='text-xs text-gray-500 dark:text-gray-400'>{helperText}</p>\n )}\n </div>\n );\n};\n\nexport default LanguageSelector;\n","import React, { useMemo, type ComponentType, type ReactNode } from 'react';\nimport {\n Topbar,\n TopbarProvider,\n TopbarLeft,\n TopbarCenter,\n TopbarRight,\n TopbarLogo,\n TopbarNavigation,\n TopbarActions,\n TopbarMobileContent,\n Logo,\n type TopbarNavItem,\n} from '@sudobility/components';\nimport { cn } from '../../utils';\nimport {\n LanguageSelector,\n type LanguageSelectorProps,\n} from './language-selector';\nimport type {\n MenuItemConfig,\n LogoConfig,\n LanguageConfig,\n LinkComponentProps,\n} from '../../types';\nimport { DEFAULT_LANGUAGES } from '../../constants/languages';\n\nexport interface AppTopBarProps {\n /** Logo configuration */\n logo: LogoConfig;\n\n /** Navigation menu items */\n menuItems: MenuItemConfig[];\n\n /** Available languages for selector (defaults to 16 built-in languages) */\n languages?: LanguageConfig[];\n\n /** Current language code */\n currentLanguage?: string;\n\n /** Language change handler */\n onLanguageChange?: (languageCode: string) => void;\n\n /** Hide language selector */\n hideLanguageSelector?: boolean;\n\n /** Language selector props override */\n languageSelectorProps?: Partial<LanguageSelectorProps>;\n\n /** Breakpoint to collapse navigation to hamburger menu */\n collapseBelow?: 'sm' | 'md' | 'lg' | 'xl';\n\n /** Render prop for account/auth section (right side of topbar) */\n renderAccountSection?: () => ReactNode;\n\n /** Render prop for center section (e.g., search bar) - shown on desktop */\n renderCenterSection?: () => ReactNode;\n\n /** Render prop for mobile-specific content (e.g., mobile search) - shown below main topbar on mobile */\n renderMobileContent?: () => ReactNode;\n\n /** Custom Link component for navigation (for react-router-dom, Next.js, etc.) */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Optional sticky positioning */\n sticky?: boolean;\n\n /** Optional variant */\n variant?: 'default' | 'app';\n\n /** Mobile menu label for accessibility */\n mobileMenuLabel?: string;\n\n /** Custom className for topbar */\n className?: string;\n\n /** z-index level */\n zIndex?: 'default' | 'highest' | 'high';\n\n /** Aria label for navigation */\n ariaLabel?: string;\n}\n\n/**\n * Default Link component that renders a plain anchor tag.\n * Apps should provide their own LinkComponent for router integration.\n */\nconst DefaultLinkComponent: ComponentType<LinkComponentProps> = ({\n href,\n className,\n children,\n onClick,\n}) => (\n <a href={href} className={className} onClick={onClick}>\n {children}\n </a>\n);\n\n/**\n * AppTopBar - Base topbar component for Sudobility apps.\n *\n * Features:\n * - Logo with app name on the left\n * - Navigation menu items with icons\n * - Language selector\n * - Render prop for center section (e.g., search bar)\n * - Render prop for account/auth section\n * - Render prop for mobile-specific content\n * - Responsive with hamburger menu on mobile\n * - Dark mode support\n */\nexport const AppTopBar: React.FC<AppTopBarProps> = ({\n logo,\n menuItems,\n languages = DEFAULT_LANGUAGES,\n currentLanguage = 'en',\n onLanguageChange,\n hideLanguageSelector = false,\n languageSelectorProps,\n collapseBelow = 'lg',\n renderAccountSection,\n renderCenterSection,\n renderMobileContent,\n LinkComponent = DefaultLinkComponent,\n sticky = true,\n variant = 'default',\n mobileMenuLabel = 'Menu',\n className,\n zIndex = 'highest',\n ariaLabel = 'Main navigation',\n}) => {\n // Filter menu items that should be shown\n const visibleMenuItems = useMemo(\n () => menuItems.filter(item => item.show !== false),\n [menuItems]\n );\n\n // Convert MenuItemConfig to TopbarNavItem\n const navItems: TopbarNavItem[] = useMemo(\n () =>\n visibleMenuItems.map(item => ({\n id: item.id,\n label: item.label,\n icon: item.icon,\n href: item.href,\n })),\n [visibleMenuItems]\n );\n\n // Wrapper to adapt LinkComponent to TopbarNavigation expected interface\n const LinkWrapper: ComponentType<{\n href: string;\n className?: string;\n children: ReactNode;\n }> = useMemo(\n () =>\n ({ href, className, children }) => (\n <LinkComponent href={href} className={className}>\n {children}\n </LinkComponent>\n ),\n [LinkComponent]\n );\n\n const handleLogoClick = () => {\n logo.onClick?.();\n };\n\n return (\n <TopbarProvider variant={variant} sticky={sticky}>\n <Topbar\n variant={variant}\n sticky={sticky}\n zIndex={zIndex}\n aria-label={ariaLabel}\n className={cn(className)}\n >\n <TopbarLeft>\n <TopbarNavigation\n items={navItems}\n collapseBelow={collapseBelow}\n LinkComponent={LinkWrapper}\n mobileMenuLabel={mobileMenuLabel}\n >\n <TopbarLogo onClick={handleLogoClick} size='md'>\n <Logo\n size='md'\n logoSrc={logo.src}\n logoText={logo.appName}\n logoAlt={logo.alt || logo.appName}\n showText={true}\n />\n </TopbarLogo>\n </TopbarNavigation>\n </TopbarLeft>\n\n {renderCenterSection && (\n <TopbarCenter>{renderCenterSection()}</TopbarCenter>\n )}\n\n <TopbarRight>\n <TopbarActions gap='md'>\n {!hideLanguageSelector && (\n <LanguageSelector\n languages={languages}\n currentLanguage={currentLanguage}\n onLanguageChange={onLanguageChange}\n variant='compact'\n {...languageSelectorProps}\n />\n )}\n {renderAccountSection?.()}\n </TopbarActions>\n </TopbarRight>\n\n {renderMobileContent && (\n <TopbarMobileContent>{renderMobileContent()}</TopbarMobileContent>\n )}\n </Topbar>\n </TopbarProvider>\n );\n};\n\nexport default AppTopBar;\n","import React, { type ReactNode, type ComponentType } from 'react';\nimport { AppTopBar, type AppTopBarProps } from './app-topbar';\nimport { cn } from '../../utils';\nimport { GRADIENT_CLASSES } from '@sudobility/design';\n\n/**\n * Auth menu item for the authenticated user dropdown.\n * This matches the AuthMenuItem interface from @sudobility/auth-components.\n */\nexport interface AuthMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon element (typically a small SVG) */\n icon?: ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Show divider after this item */\n dividerAfter?: boolean;\n}\n\n/**\n * Props for the AuthAction component from @sudobility/auth-components.\n */\nexport interface AuthActionProps {\n /** Avatar size in pixels */\n avatarSize?: number;\n /** Dropdown alignment */\n dropdownAlign?: 'left' | 'right';\n /** Login button click handler */\n onLoginClick?: () => void;\n /** Menu items for authenticated user dropdown */\n menuItems?: AuthMenuItem[];\n /** Custom login button text */\n loginButtonText?: string;\n /** Custom className for login button */\n loginButtonClassName?: string;\n}\n\nexport interface AppTopBarWithFirebaseAuthProps extends Omit<\n AppTopBarProps,\n 'renderAccountSection'\n> {\n /**\n * AuthAction component from @sudobility/auth-components.\n * This is passed as a prop to avoid hard dependency on auth-components.\n */\n AuthActionComponent: ComponentType<AuthActionProps>;\n\n /** Additional menu items for authenticated users */\n authenticatedMenuItems?: AuthMenuItem[];\n\n /** Login button click handler */\n onLoginClick?: () => void;\n\n /** Avatar size in pixels */\n avatarSize?: number;\n\n /** Dropdown alignment */\n dropdownAlign?: 'left' | 'right';\n\n /** Custom login button text */\n loginButtonText?: string;\n\n /** Custom login button className */\n loginButtonClassName?: string;\n}\n\n/**\n * AppTopBarWithFirebaseAuth - TopBar with Firebase authentication integration.\n *\n * This component wraps AppTopBar and provides the AuthAction component\n * from @sudobility/auth-components for the account section.\n *\n * Note: The AuthAction component must be passed as a prop to avoid\n * hard dependency on @sudobility/auth-components.\n *\n * @example\n * ```tsx\n * import { AuthAction } from '@sudobility/auth-components';\n *\n * <AppTopBarWithFirebaseAuth\n * logo={{ src: '/logo.png', appName: 'My App' }}\n * menuItems={[...]}\n * AuthActionComponent={AuthAction}\n * onLoginClick={() => navigate('/login')}\n * authenticatedMenuItems={[\n * { id: 'dashboard', label: 'Dashboard', onClick: () => navigate('/dashboard') },\n * ]}\n * />\n * ```\n */\nexport const AppTopBarWithFirebaseAuth: React.FC<\n AppTopBarWithFirebaseAuthProps\n> = ({\n AuthActionComponent,\n authenticatedMenuItems = [],\n onLoginClick,\n avatarSize = 32,\n dropdownAlign = 'right',\n loginButtonText,\n loginButtonClassName,\n ...topBarProps\n}) => {\n const renderAccountSection = () => (\n <AuthActionComponent\n avatarSize={avatarSize}\n dropdownAlign={dropdownAlign}\n onLoginClick={onLoginClick}\n menuItems={authenticatedMenuItems}\n loginButtonText={loginButtonText}\n loginButtonClassName={cn(\n GRADIENT_CLASSES.headerButton,\n loginButtonClassName\n )}\n />\n );\n\n return (\n <AppTopBar {...topBarProps} renderAccountSection={renderAccountSection} />\n );\n};\n\nexport default AppTopBarWithFirebaseAuth;\n","import React, { type ReactNode, type ComponentType } from 'react';\nimport { AppTopBar, type AppTopBarProps } from './app-topbar';\nimport { cn } from '../../utils';\nimport { GRADIENT_CLASSES } from '@sudobility/design';\n\n/**\n * Wallet menu item for the connected wallet dropdown.\n */\nexport interface WalletMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component */\n icon?: ComponentType<{ className?: string }>;\n /** Click handler */\n onClick: () => void;\n /** Whether this is a separator */\n separator?: boolean;\n}\n\n/**\n * Auth status enum matching @sudobility/types.\n */\nexport enum AuthStatus {\n DISCONNECTED = 'disconnected',\n CONNECTED = 'connected',\n VERIFIED = 'verified',\n}\n\n/**\n * Chain type enum matching @sudobility/types.\n */\nexport enum ChainType {\n EVM = 'evm',\n SOLANA = 'solana',\n}\n\n/**\n * Props for the WalletDropdownMenu component from @sudobility/web3-components.\n */\nexport interface WalletDropdownMenuProps {\n walletAddress: string;\n authStatus: AuthStatus | string;\n chainType: ChainType | string | 'unknown';\n menuItems: WalletMenuItem[];\n avatar?: string;\n displayName?: string;\n statusLabels?: {\n verified?: string;\n connected?: string;\n disconnected?: string;\n };\n}\n\nexport interface AppTopBarWithWalletProps extends Omit<\n AppTopBarProps,\n 'renderAccountSection'\n> {\n /**\n * WalletDropdownMenu component from @sudobility/web3-components.\n * This is passed as a prop to avoid hard dependency on web3-components.\n */\n WalletDropdownMenuComponent?: ComponentType<WalletDropdownMenuProps>;\n\n /** Whether wallet is connected */\n isConnected: boolean;\n\n /** Connected wallet address */\n walletAddress?: string;\n\n /** Authentication status */\n authStatus?: AuthStatus | string;\n\n /** Chain type (EVM, Solana, etc.) */\n chainType?: ChainType | string | 'unknown';\n\n /** Connect button click handler */\n onConnect: () => void;\n\n /** Disconnect handler */\n onDisconnect: () => Promise<void>;\n\n /** Custom menu items for wallet dropdown */\n walletMenuItems?: WalletMenuItem[];\n\n /** Connect button content (default: \"Connect Wallet\") */\n connectButtonContent?: ReactNode;\n\n /** Connect button className (supports gradient classes from @sudobility/design) */\n connectButtonClassName?: string;\n\n /** Use gradient styling for connect button */\n useGradientButton?: boolean;\n\n /** Optional user avatar */\n avatar?: string;\n\n /** Optional display name */\n displayName?: string;\n\n /** Custom status labels */\n statusLabels?: {\n verified?: string;\n connected?: string;\n disconnected?: string;\n };\n}\n\n/**\n * Default connect button when WalletDropdownMenuComponent is not provided\n * or when wallet is not connected.\n */\nconst DefaultConnectButton: React.FC<{\n onClick: () => void;\n content?: ReactNode;\n className?: string;\n useGradient?: boolean;\n}> = ({ onClick, content = 'Connect Wallet', className, useGradient }) => (\n <button\n onClick={onClick}\n className={cn(\n useGradient\n ? GRADIENT_CLASSES.headerButton\n : 'px-4 py-2 text-sm font-medium rounded-lg bg-blue-600 text-white hover:bg-blue-700 transition-colors',\n className\n )}\n >\n {content}\n </button>\n);\n\n/**\n * Simple fallback wallet display when WalletDropdownMenuComponent is not provided.\n */\nconst FallbackWalletDisplay: React.FC<{\n walletAddress: string;\n onDisconnect: () => Promise<void>;\n}> = ({ walletAddress, onDisconnect }) => {\n const truncatedAddress = `${walletAddress.slice(0, 6)}...${walletAddress.slice(-4)}`;\n\n return (\n <div className='flex items-center gap-2'>\n <span className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n {truncatedAddress}\n </span>\n <button\n onClick={() => onDisconnect()}\n className='text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200'\n >\n Disconnect\n </button>\n </div>\n );\n};\n\n/**\n * AppTopBarWithWallet - TopBar with wallet connection integration.\n *\n * This component wraps AppTopBar and provides wallet connection UI\n * for the account section. Uses WalletDropdownMenu from @sudobility/web3-components\n * when provided.\n *\n * @example\n * ```tsx\n * import { WalletDropdownMenu } from '@sudobility/web3-components';\n *\n * <AppTopBarWithWallet\n * logo={{ src: '/logo.png', appName: 'My App' }}\n * menuItems={[...]}\n * WalletDropdownMenuComponent={WalletDropdownMenu}\n * isConnected={isConnected}\n * walletAddress={walletAddress}\n * authStatus={authStatus}\n * chainType={chainType}\n * onConnect={() => navigate('/connect')}\n * onDisconnect={handleDisconnect}\n * walletMenuItems={[\n * { id: 'copy', label: 'Copy Address', icon: ClipboardIcon, onClick: handleCopy },\n * { id: 'disconnect', label: 'Disconnect', icon: LogoutIcon, onClick: handleDisconnect },\n * ]}\n * />\n * ```\n */\nexport const AppTopBarWithWallet: React.FC<AppTopBarWithWalletProps> = ({\n WalletDropdownMenuComponent,\n isConnected,\n walletAddress,\n authStatus = AuthStatus.DISCONNECTED,\n chainType = 'unknown',\n onConnect,\n onDisconnect,\n walletMenuItems = [],\n connectButtonContent,\n connectButtonClassName,\n useGradientButton = true,\n avatar,\n displayName,\n statusLabels,\n ...topBarProps\n}) => {\n const renderAccountSection = () => {\n // Not connected - show connect button\n if (!isConnected || !walletAddress) {\n return (\n <DefaultConnectButton\n onClick={onConnect}\n content={connectButtonContent}\n className={connectButtonClassName}\n useGradient={useGradientButton}\n />\n );\n }\n\n // Connected with WalletDropdownMenu component\n if (WalletDropdownMenuComponent) {\n return (\n <WalletDropdownMenuComponent\n walletAddress={walletAddress}\n authStatus={authStatus}\n chainType={chainType}\n menuItems={walletMenuItems}\n avatar={avatar}\n displayName={displayName}\n statusLabels={statusLabels}\n />\n );\n }\n\n // Connected without WalletDropdownMenu - fallback display\n return (\n <FallbackWalletDisplay\n walletAddress={walletAddress}\n onDisconnect={onDisconnect}\n />\n );\n };\n\n return (\n <AppTopBar {...topBarProps} renderAccountSection={renderAccountSection} />\n );\n};\n\nexport default AppTopBarWithWallet;\n","import React, { type ComponentType } from 'react';\nimport { BreadcrumbSection } from '@sudobility/components';\nimport { CalendarDaysIcon } from '@heroicons/react/24/outline';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils';\nimport type {\n BreadcrumbItem,\n ShareConfig,\n TalkToFounderConfig,\n LinkComponentProps,\n} from '../../types';\n\nconst breadcrumbContainerVariants = cva('border-b', {\n variants: {\n variant: {\n default: 'bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700',\n transparent: 'bg-transparent border-transparent',\n subtle:\n 'bg-gray-50 dark:bg-gray-900/50 border-gray-200 dark:border-gray-700',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface AppBreadcrumbsProps extends VariantProps<\n typeof breadcrumbContainerVariants\n> {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n\n /** Share configuration (shows social share buttons on right) */\n shareConfig?: ShareConfig;\n\n /** Talk to founder button configuration */\n talkToFounder?: TalkToFounderConfig;\n\n /** Custom Link component */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Custom className for the container */\n className?: string;\n\n /** Custom className for the inner content */\n contentClassName?: string;\n}\n\n/**\n * Default Talk to Founder button.\n */\nconst TalkToFounderButton: React.FC<{\n config: TalkToFounderConfig;\n}> = ({ config }) => {\n const IconComponent = config.icon || CalendarDaysIcon;\n const buttonText = config.buttonText || 'Talk to Founder';\n\n return (\n <a\n href={config.meetingUrl}\n target='_blank'\n rel='noopener noreferrer'\n className={cn(\n 'inline-flex items-center gap-2 px-3 py-1.5',\n 'text-sm font-medium',\n 'text-blue-600 dark:text-blue-400',\n 'hover:text-blue-700 dark:hover:text-blue-300',\n 'bg-blue-50 dark:bg-blue-900/20',\n 'hover:bg-blue-100 dark:hover:bg-blue-900/30',\n 'rounded-full',\n 'border border-blue-200 dark:border-blue-800',\n 'transition-colors'\n )}\n >\n <IconComponent className='h-4 w-4' />\n <span>{buttonText}</span>\n </a>\n );\n};\n\n/**\n * AppBreadcrumbs - Breadcrumb navigation with social share and \"Talk to Founder\" button.\n *\n * Features:\n * - Breadcrumb trail with links\n * - Social share buttons on the right\n * - Optional \"Talk to Founder\" meeting button\n * - Always renders at max-w-7xl width\n * - Dark mode support\n *\n * @example\n * ```tsx\n * <AppBreadcrumbs\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Products', href: '/products' },\n * { label: 'Widget', current: true },\n * ]}\n * shareConfig={{\n * title: 'Check out this widget',\n * description: 'Amazing widget for your needs',\n * hashtags: ['widget', 'product'],\n * }}\n * talkToFounder={{\n * meetingUrl: 'https://calendly.com/founder/30min',\n * buttonText: 'Book a call',\n * }}\n * />\n * ```\n */\nexport const AppBreadcrumbs: React.FC<AppBreadcrumbsProps> = ({\n items,\n shareConfig,\n talkToFounder,\n variant = 'default',\n className,\n contentClassName,\n}) => {\n // Don't render if no items or only home\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <div className={cn(breadcrumbContainerVariants({ variant }), className)}>\n <div className={cn('max-w-7xl mx-auto px-4 py-3', contentClassName)}>\n <div className='flex items-center justify-between gap-4'>\n {/* Breadcrumb trail */}\n <div className='flex-1 min-w-0'>\n <BreadcrumbSection items={items} shareConfig={shareConfig} />\n </div>\n\n {/* Right side: Talk to Founder + Share (if shareConfig, share is handled by BreadcrumbSection) */}\n {talkToFounder && (\n <div className='flex items-center gap-3 flex-shrink-0'>\n <TalkToFounderButton config={talkToFounder} />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default AppBreadcrumbs;\n","import React, { type ComponentType } from 'react';\nimport {\n Footer as FooterContainer,\n FooterCompact,\n FooterCompactLeft,\n FooterCompactRight,\n FooterVersion,\n FooterCopyright,\n} from '@sudobility/components';\nimport { cn } from '../../utils';\nimport type {\n StatusIndicatorConfig,\n LinkComponentProps,\n FooterLinkItem,\n} from '../../types';\n\n/**\n * Props for the SystemStatusIndicator component from @sudobility/devops-components.\n */\nexport interface SystemStatusIndicatorProps {\n statusPageUrl: string;\n apiEndpoint?: string;\n refreshInterval?: number;\n size?: 'sm' | 'md' | 'lg';\n version?: string;\n isNetworkOnline?: boolean;\n}\n\nexport interface AppFooterProps {\n /** App version string */\n version?: string;\n\n /** Copyright year or range (e.g., \"2025\" or \"2025-2026\") */\n copyrightYear?: string;\n\n /** Company name */\n companyName: string;\n\n /** Company URL (optional - creates a link if provided) */\n companyUrl?: string;\n\n /** Rights text (e.g., \"All rights reserved\") */\n rightsText?: string;\n\n /** Status indicator config (optional) */\n statusIndicator?: StatusIndicatorConfig;\n\n /**\n * SystemStatusIndicator component from @sudobility/devops-components.\n * Pass this to enable status indicator functionality.\n */\n StatusIndicatorComponent?: ComponentType<SystemStatusIndicatorProps>;\n\n /** Right-side links (e.g., Privacy, Terms) */\n links?: FooterLinkItem[];\n\n /** Custom Link component */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Sticky positioning (sticks to bottom of viewport) */\n sticky?: boolean;\n\n /** Network online status (for status indicator) */\n isNetworkOnline?: boolean;\n\n /** Custom className */\n className?: string;\n}\n\n/**\n * Default link component that renders a plain anchor.\n */\nconst DefaultLinkComponent: ComponentType<LinkComponentProps> = ({\n href,\n className,\n children,\n onClick,\n}) => (\n <a href={href} className={className} onClick={onClick}>\n {children}\n </a>\n);\n\n/**\n * Helper to get copyright year or range.\n */\nfunction getCopyrightYear(startYear = 2025): string {\n const currentYear = new Date().getFullYear();\n if (currentYear === startYear) {\n return String(startYear);\n } else if (currentYear > startYear) {\n return `${startYear}-${currentYear}`;\n }\n return String(startYear);\n}\n\n/**\n * AppFooter - Compact footer for app pages.\n *\n * Features:\n * - Version display\n * - Copyright with company name\n * - System status indicator (optional)\n * - Right-side links (Privacy, Terms, etc.)\n * - Sticky positioning option\n * - Dark mode support\n *\n * @example\n * ```tsx\n * import { SystemStatusIndicator } from '@sudobility/devops-components';\n *\n * <AppFooter\n * version=\"1.0.0\"\n * companyName=\"Sudobility Inc.\"\n * companyUrl=\"/\"\n * rightsText=\"All rights reserved\"\n * statusIndicator={{\n * statusPageUrl: 'https://status.example.com',\n * apiEndpoint: 'https://status.example.com/api/v1/status',\n * }}\n * StatusIndicatorComponent={SystemStatusIndicator}\n * links={[\n * { label: 'Privacy', href: '/privacy' },\n * { label: 'Terms', href: '/terms' },\n * ]}\n * sticky\n * />\n * ```\n */\nexport const AppFooter: React.FC<AppFooterProps> = ({\n version,\n copyrightYear,\n companyName,\n companyUrl,\n rightsText = 'All rights reserved',\n statusIndicator,\n StatusIndicatorComponent,\n links = [],\n LinkComponent = DefaultLinkComponent,\n sticky = true,\n isNetworkOnline = true,\n className,\n}) => {\n const year = copyrightYear || getCopyrightYear();\n\n const companyLink = companyUrl ? (\n <LinkComponent\n href={companyUrl}\n className='text-blue-400 hover:text-blue-300 transition-colors'\n >\n {companyName}\n </LinkComponent>\n ) : undefined;\n\n return (\n <FooterContainer\n variant='compact'\n sticky={sticky}\n className={cn(className)}\n >\n <FooterCompact>\n <FooterCompactLeft>\n {version && <FooterVersion version={version} />}\n <FooterCopyright\n year={year}\n companyName={companyName}\n rightsText={rightsText}\n companyLink={companyLink}\n />\n {statusIndicator && StatusIndicatorComponent && (\n <StatusIndicatorComponent\n statusPageUrl={statusIndicator.statusPageUrl}\n apiEndpoint={statusIndicator.apiEndpoint}\n refreshInterval={statusIndicator.refreshInterval || 60000}\n size='sm'\n version={version}\n isNetworkOnline={isNetworkOnline}\n />\n )}\n </FooterCompactLeft>\n <FooterCompactRight>\n {links.map((link, index) => (\n <React.Fragment key={link.href || index}>\n {link.onClick ? (\n <button\n onClick={link.onClick}\n className='text-gray-400 hover:text-white transition-colors'\n >\n {link.label}\n </button>\n ) : (\n <LinkComponent\n href={link.href}\n className='text-gray-400 hover:text-white transition-colors'\n >\n {link.label}\n </LinkComponent>\n )}\n </React.Fragment>\n ))}\n </FooterCompactRight>\n </FooterCompact>\n </FooterContainer>\n );\n};\n\nexport default AppFooter;\n","import React, { type ComponentType } from 'react';\nimport {\n Logo,\n Footer as FooterContainer,\n FooterGrid,\n FooterBrand,\n FooterLinkSection,\n FooterLink,\n FooterBottom,\n FooterVersion,\n FooterCopyright,\n FooterSocialLinks,\n} from '@sudobility/components';\nimport { cn } from '../../utils';\nimport type {\n StatusIndicatorConfig,\n LinkComponentProps,\n FooterLinkSection as FooterLinkSectionConfig,\n SocialLinksConfig,\n} from '../../types';\nimport type { SystemStatusIndicatorProps } from './app-footer';\n\nexport interface AppFooterForHomePageProps {\n /** App logo configuration */\n logo: {\n /** Logo image src (optional - if not provided, uses Logo component) */\n src?: string;\n /** App name */\n appName: string;\n };\n\n /** Footer link sections (columns of links) */\n linkSections: FooterLinkSectionConfig[];\n\n /** Social media links */\n socialLinks?: SocialLinksConfig;\n\n /** System status indicator configuration */\n statusIndicator?: StatusIndicatorConfig;\n\n /**\n * SystemStatusIndicator component from @sudobility/devops-components.\n * Pass this to enable status indicator functionality.\n */\n StatusIndicatorComponent?: ComponentType<SystemStatusIndicatorProps>;\n\n /** App version string */\n version?: string;\n\n /** Copyright year or range */\n copyrightYear?: string;\n\n /** Company name for copyright */\n companyName: string;\n\n /** Company link URL (optional) */\n companyUrl?: string;\n\n /** Footer description text (below logo) */\n description?: string;\n\n /** Rights text (e.g., \"All rights reserved\") */\n rightsText?: string;\n\n /** Custom Link component */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Network online status (for status indicator) */\n isNetworkOnline?: boolean;\n\n /** Custom className */\n className?: string;\n\n /** Number of columns for link grid (default: auto based on section count) */\n gridColumns?: 2 | 3 | 4 | 5;\n}\n\n/**\n * Default link component that renders a plain anchor.\n */\nconst DefaultLinkComponent: ComponentType<LinkComponentProps> = ({\n href,\n className,\n children,\n onClick,\n}) => (\n <a href={href} className={className} onClick={onClick}>\n {children}\n </a>\n);\n\n/**\n * Helper to get copyright year or range.\n */\nfunction getCopyrightYear(startYear = 2025): string {\n const currentYear = new Date().getFullYear();\n if (currentYear === startYear) {\n return String(startYear);\n } else if (currentYear > startYear) {\n return `${startYear}-${currentYear}`;\n }\n return String(startYear);\n}\n\n/**\n * Get grid columns class based on section count.\n */\nfunction getGridColumnsClass(sectionCount: number, explicit?: number): string {\n const cols = explicit || Math.min(sectionCount, 4);\n switch (cols) {\n case 2:\n return 'md:grid-cols-2';\n case 3:\n return 'md:grid-cols-3';\n case 4:\n return 'md:grid-cols-4';\n case 5:\n return 'md:grid-cols-5';\n default:\n return 'md:grid-cols-4';\n }\n}\n\n/**\n * AppFooterForHomePage - Full footer for home/landing pages.\n *\n * Features:\n * - Multiple link sections in a grid\n * - Logo and brand description\n * - Social media links\n * - System status indicator (optional)\n * - Version and copyright\n * - Dark mode support\n *\n * @example\n * ```tsx\n * import { SystemStatusIndicator } from '@sudobility/devops-components';\n *\n * <AppFooterForHomePage\n * logo={{ appName: 'My App' }}\n * linkSections={[\n * {\n * title: 'Product',\n * links: [\n * { label: 'Features', href: '/features' },\n * { label: 'Pricing', href: '/pricing' },\n * ],\n * },\n * {\n * title: 'Company',\n * links: [\n * { label: 'About', href: '/about' },\n * { label: 'Contact', href: '/contact' },\n * ],\n * },\n * ]}\n * socialLinks={{\n * twitterUrl: 'https://twitter.com/myapp',\n * discordUrl: 'https://discord.gg/myapp',\n * }}\n * statusIndicator={{\n * statusPageUrl: 'https://status.example.com',\n * }}\n * StatusIndicatorComponent={SystemStatusIndicator}\n * version=\"1.0.0\"\n * companyName=\"Sudobility Inc.\"\n * description=\"Building the future of web3 communication\"\n * />\n * ```\n */\nexport const AppFooterForHomePage: React.FC<AppFooterForHomePageProps> = ({\n logo,\n linkSections,\n socialLinks,\n statusIndicator,\n StatusIndicatorComponent,\n version,\n copyrightYear,\n companyName,\n companyUrl,\n description,\n rightsText = 'All rights reserved',\n LinkComponent = DefaultLinkComponent,\n isNetworkOnline = true,\n className,\n gridColumns,\n}) => {\n const year = copyrightYear || getCopyrightYear();\n const gridClass = getGridColumnsClass(linkSections.length, gridColumns);\n\n const companyLink = companyUrl ? (\n <LinkComponent\n href={companyUrl}\n className='text-blue-400 hover:text-blue-300 transition-colors'\n >\n {companyName}\n </LinkComponent>\n ) : undefined;\n\n return (\n <FooterContainer variant='full' className={cn(className)}>\n <FooterGrid className={gridClass}>\n {linkSections.map((section, sectionIndex) => (\n <FooterLinkSection\n key={section.title || sectionIndex}\n title={section.title}\n >\n {section.links.map((link, linkIndex) => (\n <FooterLink key={link.href || linkIndex}>\n {link.onClick ? (\n <button onClick={link.onClick} className='text-left'>\n {link.label}\n </button>\n ) : (\n <LinkComponent href={link.href}>{link.label}</LinkComponent>\n )}\n </FooterLink>\n ))}\n </FooterLinkSection>\n ))}\n </FooterGrid>\n\n <FooterBottom>\n <FooterBrand\n description={description}\n className='flex flex-col items-center'\n >\n <LinkComponent\n href='/'\n className='text-white hover:opacity-80 transition-opacity'\n >\n {logo.src ? (\n <img\n src={logo.src}\n alt={logo.appName}\n className='h-8 object-contain'\n />\n ) : (\n <Logo size='md' showText={true} logoText={logo.appName} />\n )}\n </LinkComponent>\n </FooterBrand>\n {version && <FooterVersion version={version} />}\n <FooterCopyright\n year={year}\n companyName={companyName}\n rightsText={rightsText}\n companyLink={companyLink}\n />\n {statusIndicator && StatusIndicatorComponent && (\n <StatusIndicatorComponent\n statusPageUrl={statusIndicator.statusPageUrl}\n apiEndpoint={statusIndicator.apiEndpoint}\n refreshInterval={statusIndicator.refreshInterval || 60000}\n size='sm'\n version={version}\n isNetworkOnline={isNetworkOnline}\n />\n )}\n </FooterBottom>\n\n {socialLinks && (\n <div className='flex justify-center mt-4'>\n <FooterSocialLinks\n twitterUrl={socialLinks.twitterUrl}\n discordUrl={socialLinks.discordUrl}\n linkedinUrl={socialLinks.linkedinUrl}\n githubUrl={socialLinks.githubUrl}\n redditUrl={socialLinks.redditUrl}\n farcasterUrl={socialLinks.farcasterUrl}\n telegramUrl={socialLinks.telegramUrl}\n />\n </div>\n )}\n </FooterContainer>\n );\n};\n\nexport default AppFooterForHomePage;\n","import React, { type ReactNode } from 'react';\nimport { LayoutProvider } from '@sudobility/components';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils';\nimport {\n AppBreadcrumbs,\n type AppBreadcrumbsProps,\n} from '../breadcrumbs/app-breadcrumbs';\nimport type { MaxWidth, ContentPadding, BackgroundVariant } from '../../types';\n\nconst layoutVariants = cva('min-h-screen flex flex-col', {\n variants: {\n background: {\n default: 'bg-gray-50 dark:bg-gray-900',\n white: 'bg-white dark:bg-gray-900',\n gradient:\n 'bg-gradient-to-br from-gray-50 to-blue-50 dark:from-gray-900 dark:to-gray-800',\n },\n },\n defaultVariants: {\n background: 'default',\n },\n});\n\nconst maxWidthClasses: Record<MaxWidth, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-2xl',\n '4xl': 'max-w-4xl',\n '7xl': 'max-w-7xl',\n full: 'max-w-full',\n};\n\nconst paddingClasses: Record<ContentPadding, string> = {\n none: '',\n sm: 'px-4 sm:px-6 py-6',\n md: 'px-4 py-8',\n lg: 'px-4 py-12',\n};\n\nexport interface AppPageLayoutProps extends VariantProps<\n typeof layoutVariants\n> {\n /** Page content */\n children: ReactNode;\n\n /** TopBar slot - pass an AppTopBar variant or custom component */\n topBar: ReactNode;\n\n /** Breadcrumbs configuration (optional) */\n breadcrumbs?: AppBreadcrumbsProps;\n\n /** Footer slot - pass an AppFooter variant or custom component */\n footer?: ReactNode;\n\n /** Max width for content area (default: '7xl') */\n maxWidth?: MaxWidth;\n\n /** Content padding (default: 'md') */\n contentPadding?: ContentPadding;\n\n /** Background variant */\n background?: BackgroundVariant;\n\n /** Layout mode for LayoutProvider */\n layoutMode?: 'standard';\n\n /** Custom className for the layout container */\n className?: string;\n\n /** Custom className for the content area */\n contentClassName?: string;\n\n /** Custom className for the main element */\n mainClassName?: string;\n}\n\n/**\n * AppPageLayout - Layout wrapper combining TopBar, Breadcrumbs, Content, and Footer.\n *\n * Features:\n * - Flexible slots for TopBar and Footer\n * - Optional breadcrumbs with share and \"Talk to Founder\"\n * - Configurable content max-width and padding\n * - Background variants\n * - Dark mode support\n * - Sticky footer behavior\n *\n * @example\n * ```tsx\n * <AppPageLayout\n * topBar={\n * <AppTopBarWithFirebaseAuth\n * logo={{ src: '/logo.png', appName: 'My App' }}\n * menuItems={menuItems}\n * AuthActionComponent={AuthAction}\n * onLoginClick={() => navigate('/login')}\n * />\n * }\n * breadcrumbs={{\n * items: breadcrumbItems,\n * shareConfig: { title: 'Page', description: 'Description', hashtags: [] },\n * }}\n * footer={\n * <AppFooter\n * version=\"1.0.0\"\n * companyName=\"My Company\"\n * links={[{ label: 'Privacy', href: '/privacy' }]}\n * />\n * }\n * maxWidth=\"7xl\"\n * background=\"default\"\n * >\n * <h1>Page Content</h1>\n * </AppPageLayout>\n * ```\n */\nexport const AppPageLayout: React.FC<AppPageLayoutProps> = ({\n children,\n topBar,\n breadcrumbs,\n footer,\n maxWidth = '7xl',\n contentPadding = 'md',\n background = 'default',\n layoutMode = 'standard',\n className,\n contentClassName,\n mainClassName,\n}) => {\n return (\n <LayoutProvider mode={layoutMode}>\n <div className={cn(layoutVariants({ background }), className)}>\n {/* Header Section */}\n <header>{topBar}</header>\n\n {/* Breadcrumb Section */}\n {breadcrumbs && breadcrumbs.items && breadcrumbs.items.length > 0 && (\n <AppBreadcrumbs {...breadcrumbs} />\n )}\n\n {/* Main Content */}\n <main className={cn('flex-1 overflow-auto', mainClassName)}>\n <div\n className={cn(\n 'mx-auto',\n maxWidthClasses[maxWidth],\n paddingClasses[contentPadding],\n contentClassName\n )}\n >\n {children}\n </div>\n </main>\n\n {/* Footer */}\n {footer && <footer>{footer}</footer>}\n </div>\n </LayoutProvider>\n );\n};\n\nexport default AppPageLayout;\n","import React from 'react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Label,\n} from '@sudobility/components';\nimport { textVariants } from '@sudobility/design';\n\n/**\n * Theme options for appearance settings.\n */\nexport enum Theme {\n LIGHT = 'light',\n DARK = 'dark',\n SYSTEM = 'system',\n}\n\n/**\n * Font size options for appearance settings.\n */\nexport enum FontSize {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n}\n\n/**\n * Translation keys used by AppearanceSettings.\n * Provide a translation function to customize labels.\n */\nexport interface AppearanceSettingsTranslations {\n heading: string;\n description: string;\n themeLabel: string;\n themeSelectPlaceholder: string;\n themeLight: string;\n themeDark: string;\n themeSystem: string;\n themeDescription: string;\n fontSizeLabel: string;\n fontSizeSelectPlaceholder: string;\n fontSizeSmall: string;\n fontSizeMedium: string;\n fontSizeLarge: string;\n fontSizeDescription: string;\n infoHeading: string;\n infoDescription: string;\n}\n\nconst defaultTranslations: AppearanceSettingsTranslations = {\n heading: 'Appearance',\n description: 'Customize the look and feel of the application.',\n themeLabel: 'Theme',\n themeSelectPlaceholder: 'Select theme',\n themeLight: 'Light',\n themeDark: 'Dark',\n themeSystem: 'System',\n themeDescription: 'Choose your preferred color theme.',\n fontSizeLabel: 'Font Size',\n fontSizeSelectPlaceholder: 'Select font size',\n fontSizeSmall: 'Small',\n fontSizeMedium: 'Medium',\n fontSizeLarge: 'Large',\n fontSizeDescription: 'Adjust the text size for better readability.',\n infoHeading: 'About Settings',\n infoDescription:\n 'Your appearance preferences are saved locally and will be applied automatically on your next visit.',\n};\n\nexport interface AppearanceSettingsProps {\n /** Current theme value */\n theme: Theme | string;\n\n /** Current font size value */\n fontSize: FontSize | string;\n\n /** Callback when theme changes */\n onThemeChange: (theme: Theme) => void;\n\n /** Callback when font size changes */\n onFontSizeChange: (fontSize: FontSize) => void;\n\n /**\n * Optional translation function.\n * If provided, will be called with a key from AppearanceSettingsTranslations.\n * Falls back to default English strings if not provided.\n */\n t?: (key: string, fallback?: string) => string;\n\n /** Optional className for the container */\n className?: string;\n\n /** Whether to show the information box at the bottom */\n showInfoBox?: boolean;\n}\n\n/**\n * AppearanceSettings - A reusable component for theme and font size settings.\n *\n * This component can be used across different apps to provide consistent\n * appearance customization options.\n *\n * @example\n * ```tsx\n * // Basic usage with useTheme hook\n * const { theme, fontSize, setTheme, setFontSize } = useTheme();\n *\n * <AppearanceSettings\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * />\n *\n * // With i18n translation\n * const { t } = useTranslation('settings');\n *\n * <AppearanceSettings\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * t={(key, fallback) => t(`appearance.${key}`, fallback)}\n * />\n * ```\n */\nexport const AppearanceSettings: React.FC<AppearanceSettingsProps> = ({\n theme,\n fontSize,\n onThemeChange,\n onFontSizeChange,\n t,\n className,\n showInfoBox = true,\n}) => {\n // Helper to get translated string with fallback\n const getText = (key: keyof AppearanceSettingsTranslations): string => {\n const fallback = defaultTranslations[key];\n return t ? t(key, fallback) : fallback;\n };\n\n return (\n <div className={className}>\n <div className='space-y-6'>\n <div>\n <h2 className={`${textVariants.heading.h4()} mb-2`}>\n {getText('heading')}\n </h2>\n <p\n className={`${textVariants.body.sm()} text-gray-600 dark:text-gray-400`}\n >\n {getText('description')}\n </p>\n </div>\n\n <div className='space-y-6'>\n {/* Theme Setting */}\n <div className='space-y-2'>\n <Label\n htmlFor='theme-select'\n className={textVariants.label.default()}\n >\n {getText('themeLabel')}\n </Label>\n <Select\n value={theme}\n onValueChange={(value: string) => onThemeChange(value as Theme)}\n >\n <SelectTrigger id='theme-select'>\n <SelectValue placeholder={getText('themeSelectPlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={Theme.LIGHT}>\n {getText('themeLight')}\n </SelectItem>\n <SelectItem value={Theme.DARK}>\n {getText('themeDark')}\n </SelectItem>\n <SelectItem value={Theme.SYSTEM}>\n {getText('themeSystem')}\n </SelectItem>\n </SelectContent>\n </Select>\n <p\n className={`${textVariants.body.xs()} text-gray-500 dark:text-gray-400`}\n >\n {getText('themeDescription')}\n </p>\n </div>\n\n {/* Font Size Setting */}\n <div className='space-y-2'>\n <Label\n htmlFor='font-size-select'\n className={textVariants.label.default()}\n >\n {getText('fontSizeLabel')}\n </Label>\n <Select\n value={fontSize}\n onValueChange={(value: string) =>\n onFontSizeChange(value as FontSize)\n }\n >\n <SelectTrigger id='font-size-select'>\n <SelectValue\n placeholder={getText('fontSizeSelectPlaceholder')}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={FontSize.SMALL}>\n {getText('fontSizeSmall')}\n </SelectItem>\n <SelectItem value={FontSize.MEDIUM}>\n {getText('fontSizeMedium')}\n </SelectItem>\n <SelectItem value={FontSize.LARGE}>\n {getText('fontSizeLarge')}\n </SelectItem>\n </SelectContent>\n </Select>\n <p\n className={`${textVariants.body.xs()} text-gray-500 dark:text-gray-400`}\n >\n {getText('fontSizeDescription')}\n </p>\n </div>\n </div>\n\n {/* Information Box */}\n {showInfoBox && (\n <div className='bg-blue-50 dark:bg-blue-900/20 rounded-lg p-4 border border-blue-200 dark:border-blue-800'>\n <h4 className='text-sm font-medium text-blue-900 dark:text-blue-100 mb-2'>\n {getText('infoHeading')}\n </h4>\n <p className='text-sm text-blue-700 dark:text-blue-300'>\n {getText('infoDescription')}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default AppearanceSettings;\n","import React, {\n useState,\n useMemo,\n useCallback,\n type ReactNode,\n type ComponentType,\n} from 'react';\nimport { PaintBrushIcon, ChevronLeftIcon } from '@heroicons/react/24/outline';\nimport { cn } from '../../utils';\nimport { AppearanceSettings } from './appearance-settings';\nimport { Theme, FontSize } from './appearance-settings';\n\n/**\n * Configuration for a settings section in the navigation.\n */\nexport interface SettingsSectionConfig {\n /** Unique identifier for the section */\n id: string;\n /** Icon component to display */\n icon: ComponentType<{ className?: string }>;\n /** Display label */\n label: string;\n /** Short description shown below label */\n description: string;\n /** The content to render when this section is selected */\n content: ReactNode;\n}\n\n/**\n * Translation keys used by GlobalSettingsPage.\n */\nexport interface GlobalSettingsPageTranslations {\n title: string;\n backButton: string;\n appearanceLabel: string;\n appearanceDescription: string;\n}\n\nconst defaultTranslations: GlobalSettingsPageTranslations = {\n title: 'Settings',\n backButton: 'Back',\n appearanceLabel: 'Appearance',\n appearanceDescription: 'Theme and font size settings',\n};\n\nexport interface GlobalSettingsPageProps {\n /** Current theme value */\n theme: Theme | string;\n\n /** Current font size value */\n fontSize: FontSize | string;\n\n /** Callback when theme changes */\n onThemeChange: (theme: Theme) => void;\n\n /** Callback when font size changes */\n onFontSizeChange: (fontSize: FontSize) => void;\n\n /**\n * Additional settings sections to display after Appearance.\n * Each section needs an id, icon, label, description, and content.\n */\n additionalSections?: SettingsSectionConfig[];\n\n /**\n * Optional translation function.\n * Falls back to default English strings if not provided.\n */\n t?: (key: string, fallback?: string) => string;\n\n /**\n * Translation function for AppearanceSettings.\n * If provided, will be passed to AppearanceSettings component.\n */\n appearanceT?: (key: string, fallback?: string) => string;\n\n /** Optional className for the container */\n className?: string;\n\n /** Whether to show the info box in appearance settings */\n showAppearanceInfoBox?: boolean;\n}\n\n/**\n * GlobalSettingsPage - A reusable settings page with master-detail layout.\n *\n * Features:\n * - Appearance settings built-in as the first section\n * - Extensible via additionalSections prop\n * - Responsive master-detail layout\n * - Mobile-friendly with back navigation\n *\n * @example\n * ```tsx\n * // Basic usage\n * <GlobalSettingsPage\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * />\n *\n * // With additional sections\n * <GlobalSettingsPage\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * additionalSections={[\n * {\n * id: 'notifications',\n * icon: BellIcon,\n * label: 'Notifications',\n * description: 'Manage notification preferences',\n * content: <NotificationSettings />,\n * },\n * ]}\n * />\n * ```\n */\nexport const GlobalSettingsPage: React.FC<GlobalSettingsPageProps> = ({\n theme,\n fontSize,\n onThemeChange,\n onFontSizeChange,\n additionalSections = [],\n t,\n appearanceT,\n className,\n showAppearanceInfoBox = true,\n}) => {\n const [selectedSection, setSelectedSection] = useState('appearance');\n const [mobileView, setMobileView] = useState<'navigation' | 'content'>(\n 'navigation'\n );\n\n // Helper to get translated string with fallback\n const getText = useCallback(\n (key: keyof GlobalSettingsPageTranslations): string => {\n const fallback = defaultTranslations[key];\n return t ? t(key, fallback) : fallback;\n },\n [t]\n );\n\n // Build all sections with appearance first\n const allSections: SettingsSectionConfig[] = useMemo(\n () => [\n {\n id: 'appearance',\n icon: PaintBrushIcon,\n label: getText('appearanceLabel'),\n description: getText('appearanceDescription'),\n content: (\n <AppearanceSettings\n theme={theme}\n fontSize={fontSize}\n onThemeChange={onThemeChange}\n onFontSizeChange={onFontSizeChange}\n t={appearanceT}\n showInfoBox={showAppearanceInfoBox}\n />\n ),\n },\n ...additionalSections,\n ],\n [\n additionalSections,\n getText,\n theme,\n fontSize,\n onThemeChange,\n onFontSizeChange,\n appearanceT,\n showAppearanceInfoBox,\n ]\n );\n\n const currentSection =\n allSections.find(s => s.id === selectedSection) || allSections[0];\n\n const handleSectionSelect = (sectionId: string) => {\n setSelectedSection(sectionId);\n setMobileView('content');\n };\n\n const handleBackToNavigation = () => {\n setMobileView('navigation');\n };\n\n // Navigation list\n const navigationList = (\n <div className='space-y-0'>\n {allSections.map(section => {\n const Icon = section.icon;\n const isSelected = selectedSection === section.id;\n return (\n <div\n key={section.id}\n onClick={() => handleSectionSelect(section.id)}\n className={cn(\n 'flex items-start p-4 cursor-pointer transition-colors',\n 'border-b border-gray-200 dark:border-gray-700 last:border-b-0',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400'\n : 'hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300'\n )}\n >\n <Icon className='h-5 w-5 mt-0.5 mr-3 flex-shrink-0' />\n <div>\n <div className='font-medium'>{section.label}</div>\n <div className='text-xs text-gray-500 dark:text-gray-400 mt-0.5'>\n {section.description}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n\n return (\n <div className={cn('flex-1', className)}>\n {/* Desktop Layout */}\n <div className='hidden md:flex h-full'>\n {/* Master (Navigation) */}\n <div className='w-80 flex-shrink-0 border-r border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900'>\n <div className='p-4 border-b border-gray-200 dark:border-gray-700'>\n <h1 className='text-xl font-semibold text-gray-900 dark:text-white'>\n {getText('title')}\n </h1>\n </div>\n <div className='overflow-y-auto'>{navigationList}</div>\n </div>\n\n {/* Detail (Content) */}\n <div className='flex-1 overflow-y-auto bg-gray-50 dark:bg-gray-800'>\n <div className='p-6'>\n <h2 className='text-lg font-semibold text-gray-900 dark:text-white mb-6'>\n {currentSection.label}\n </h2>\n {currentSection.content}\n </div>\n </div>\n </div>\n\n {/* Mobile Layout */}\n <div className='md:hidden'>\n {mobileView === 'navigation' ? (\n <div className='bg-white dark:bg-gray-900 min-h-full'>\n <div className='p-4 border-b border-gray-200 dark:border-gray-700'>\n <h1 className='text-xl font-semibold text-gray-900 dark:text-white'>\n {getText('title')}\n </h1>\n </div>\n {navigationList}\n </div>\n ) : (\n <div className='bg-white dark:bg-gray-900 min-h-full'>\n <div className='p-4 border-b border-gray-200 dark:border-gray-700 flex items-center'>\n <button\n onClick={handleBackToNavigation}\n className='flex items-center text-blue-600 dark:text-blue-400 mr-4'\n >\n <ChevronLeftIcon className='h-5 w-5 mr-1' />\n <span>{getText('backButton')}</span>\n </button>\n <h2 className='text-lg font-semibold text-gray-900 dark:text-white'>\n {currentSection.label}\n </h2>\n </div>\n <div className='p-4'>{currentSection.content}</div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default GlobalSettingsPage;\n","import { jsxs as G, jsx as g, Fragment as We } from \"react/jsx-runtime\";\nimport { textVariants as he } from \"@sudobility/design\";\nimport { Card as Be, CardContent as Ue, Button as ve } from \"@sudobility/components\";\nimport { createContext as Ke, useState as K, useCallback as Y, useEffect as Ye, useContext as qe } from \"react\";\nfunction Ie(e) {\n var o, r, t = \"\";\n if (typeof e == \"string\" || typeof e == \"number\") t += e;\n else if (typeof e == \"object\") if (Array.isArray(e)) {\n var n = e.length;\n for (o = 0; o < n; o++) e[o] && (r = Ie(e[o])) && (t && (t += \" \"), t += r);\n } else for (r in e) e[r] && (t && (t += \" \"), t += r);\n return t;\n}\nfunction Xe() {\n for (var e, o, r = 0, t = \"\", n = arguments.length; r < n; r++) (e = arguments[r]) && (o = Ie(e)) && (t && (t += \" \"), t += o);\n return t;\n}\nconst Je = (e, o) => {\n const r = new Array(e.length + o.length);\n for (let t = 0; t < e.length; t++)\n r[t] = e[t];\n for (let t = 0; t < o.length; t++)\n r[e.length + t] = o[t];\n return r;\n}, He = (e, o) => ({\n classGroupId: e,\n validator: o\n}), Re = (e = /* @__PURE__ */ new Map(), o = null, r) => ({\n nextPart: e,\n validators: o,\n classGroupId: r\n}), me = \"-\", Ce = [], Qe = \"arbitrary..\", Ze = (e) => {\n const o = tt(e), {\n conflictingClassGroups: r,\n conflictingClassGroupModifiers: t\n } = e;\n return {\n getClassGroupId: (a) => {\n if (a.startsWith(\"[\") && a.endsWith(\"]\"))\n return et(a);\n const p = a.split(me), c = p[0] === \"\" && p.length > 1 ? 1 : 0;\n return Me(p, c, o);\n },\n getConflictingClassGroupIds: (a, p) => {\n if (p) {\n const c = t[a], h = r[a];\n return c ? h ? Je(h, c) : c : h || Ce;\n }\n return r[a] || Ce;\n }\n };\n}, Me = (e, o, r) => {\n if (e.length - o === 0)\n return r.classGroupId;\n const n = e[o], s = r.nextPart.get(n);\n if (s) {\n const h = Me(e, o + 1, s);\n if (h) return h;\n }\n const a = r.validators;\n if (a === null)\n return;\n const p = o === 0 ? e.join(me) : e.slice(o).join(me), c = a.length;\n for (let h = 0; h < c; h++) {\n const x = a[h];\n if (x.validator(p))\n return x.classGroupId;\n }\n}, et = (e) => e.slice(1, -1).indexOf(\":\") === -1 ? void 0 : (() => {\n const o = e.slice(1, -1), r = o.indexOf(\":\"), t = o.slice(0, r);\n return t ? Qe + t : void 0;\n})(), tt = (e) => {\n const {\n theme: o,\n classGroups: r\n } = e;\n return rt(r, o);\n}, rt = (e, o) => {\n const r = Re();\n for (const t in e) {\n const n = e[t];\n we(n, r, t, o);\n }\n return r;\n}, we = (e, o, r, t) => {\n const n = e.length;\n for (let s = 0; s < n; s++) {\n const a = e[s];\n ot(a, o, r, t);\n }\n}, ot = (e, o, r, t) => {\n if (typeof e == \"string\") {\n nt(e, o, r);\n return;\n }\n if (typeof e == \"function\") {\n st(e, o, r, t);\n return;\n }\n at(e, o, r, t);\n}, nt = (e, o, r) => {\n const t = e === \"\" ? o : De(o, e);\n t.classGroupId = r;\n}, st = (e, o, r, t) => {\n if (it(e)) {\n we(e(t), o, r, t);\n return;\n }\n o.validators === null && (o.validators = []), o.validators.push(He(r, e));\n}, at = (e, o, r, t) => {\n const n = Object.entries(e), s = n.length;\n for (let a = 0; a < s; a++) {\n const [p, c] = n[a];\n we(c, De(o, p), r, t);\n }\n}, De = (e, o) => {\n let r = e;\n const t = o.split(me), n = t.length;\n for (let s = 0; s < n; s++) {\n const a = t[s];\n let p = r.nextPart.get(a);\n p || (p = Re(), r.nextPart.set(a, p)), r = p;\n }\n return r;\n}, it = (e) => \"isThemeGetter\" in e && e.isThemeGetter === !0, lt = (e) => {\n if (e < 1)\n return {\n get: () => {\n },\n set: () => {\n }\n };\n let o = 0, r = /* @__PURE__ */ Object.create(null), t = /* @__PURE__ */ Object.create(null);\n const n = (s, a) => {\n r[s] = a, o++, o > e && (o = 0, t = r, r = /* @__PURE__ */ Object.create(null));\n };\n return {\n get(s) {\n let a = r[s];\n if (a !== void 0)\n return a;\n if ((a = t[s]) !== void 0)\n return n(s, a), a;\n },\n set(s, a) {\n s in r ? r[s] = a : n(s, a);\n }\n };\n}, xe = \"!\", Pe = \":\", ct = [], ze = (e, o, r, t, n) => ({\n modifiers: e,\n hasImportantModifier: o,\n baseClassName: r,\n maybePostfixModifierPosition: t,\n isExternal: n\n}), dt = (e) => {\n const {\n prefix: o,\n experimentalParseClassName: r\n } = e;\n let t = (n) => {\n const s = [];\n let a = 0, p = 0, c = 0, h;\n const x = n.length;\n for (let z = 0; z < x; z++) {\n const k = n[z];\n if (a === 0 && p === 0) {\n if (k === Pe) {\n s.push(n.slice(c, z)), c = z + 1;\n continue;\n }\n if (k === \"/\") {\n h = z;\n continue;\n }\n }\n k === \"[\" ? a++ : k === \"]\" ? a-- : k === \"(\" ? p++ : k === \")\" && p--;\n }\n const S = s.length === 0 ? n : n.slice(c);\n let w = S, y = !1;\n S.endsWith(xe) ? (w = S.slice(0, -1), y = !0) : (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n S.startsWith(xe) && (w = S.slice(1), y = !0)\n );\n const j = h && h > c ? h - c : void 0;\n return ze(s, y, w, j);\n };\n if (o) {\n const n = o + Pe, s = t;\n t = (a) => a.startsWith(n) ? s(a.slice(n.length)) : ze(ct, !1, a, void 0, !0);\n }\n if (r) {\n const n = t;\n t = (s) => r({\n className: s,\n parseClassName: n\n });\n }\n return t;\n}, mt = (e) => {\n const o = /* @__PURE__ */ new Map();\n return e.orderSensitiveModifiers.forEach((r, t) => {\n o.set(r, 1e6 + t);\n }), (r) => {\n const t = [];\n let n = [];\n for (let s = 0; s < r.length; s++) {\n const a = r[s], p = a[0] === \"[\", c = o.has(a);\n p || c ? (n.length > 0 && (n.sort(), t.push(...n), n = []), t.push(a)) : n.push(a);\n }\n return n.length > 0 && (n.sort(), t.push(...n)), t;\n };\n}, ut = (e) => ({\n cache: lt(e.cacheSize),\n parseClassName: dt(e),\n sortModifiers: mt(e),\n ...Ze(e)\n}), ft = /\\s+/, pt = (e, o) => {\n const {\n parseClassName: r,\n getClassGroupId: t,\n getConflictingClassGroupIds: n,\n sortModifiers: s\n } = o, a = [], p = e.trim().split(ft);\n let c = \"\";\n for (let h = p.length - 1; h >= 0; h -= 1) {\n const x = p[h], {\n isExternal: S,\n modifiers: w,\n hasImportantModifier: y,\n baseClassName: j,\n maybePostfixModifierPosition: z\n } = r(x);\n if (S) {\n c = x + (c.length > 0 ? \" \" + c : c);\n continue;\n }\n let k = !!z, D = t(k ? j.substring(0, z) : j);\n if (!D) {\n if (!k) {\n c = x + (c.length > 0 ? \" \" + c : c);\n continue;\n }\n if (D = t(j), !D) {\n c = x + (c.length > 0 ? \" \" + c : c);\n continue;\n }\n k = !1;\n }\n const F = w.length === 0 ? \"\" : w.length === 1 ? w[0] : s(w).join(\":\"), M = y ? F + xe : F, L = M + D;\n if (a.indexOf(L) > -1)\n continue;\n a.push(L);\n const N = n(D, k);\n for (let C = 0; C < N.length; ++C) {\n const E = N[C];\n a.push(M + E);\n }\n c = x + (c.length > 0 ? \" \" + c : c);\n }\n return c;\n}, gt = (...e) => {\n let o = 0, r, t, n = \"\";\n for (; o < e.length; )\n (r = e[o++]) && (t = Ee(r)) && (n && (n += \" \"), n += t);\n return n;\n}, Ee = (e) => {\n if (typeof e == \"string\")\n return e;\n let o, r = \"\";\n for (let t = 0; t < e.length; t++)\n e[t] && (o = Ee(e[t])) && (r && (r += \" \"), r += o);\n return r;\n}, bt = (e, ...o) => {\n let r, t, n, s;\n const a = (c) => {\n const h = o.reduce((x, S) => S(x), e());\n return r = ut(h), t = r.cache.get, n = r.cache.set, s = p, p(c);\n }, p = (c) => {\n const h = t(c);\n if (h)\n return h;\n const x = pt(c, r);\n return n(c, x), x;\n };\n return s = a, (...c) => s(gt(...c));\n}, ht = [], A = (e) => {\n const o = (r) => r[e] || ht;\n return o.isThemeGetter = !0, o;\n}, Oe = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i, Te = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i, xt = /^\\d+\\/\\d+$/, wt = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/, yt = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/, kt = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/, vt = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/, Ct = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/, Z = (e) => xt.test(e), b = (e) => !!e && !Number.isNaN(Number(e)), q = (e) => !!e && Number.isInteger(Number(e)), fe = (e) => e.endsWith(\"%\") && b(e.slice(0, -1)), B = (e) => wt.test(e), Pt = () => !0, zt = (e) => (\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n yt.test(e) && !kt.test(e)\n), Ge = () => !1, Nt = (e) => vt.test(e), At = (e) => Ct.test(e), St = (e) => !i(e) && !l(e), It = (e) => ee(e, _e, Ge), i = (e) => Oe.test(e), X = (e) => ee(e, Fe, zt), pe = (e) => ee(e, Ot, b), Ne = (e) => ee(e, je, Ge), Rt = (e) => ee(e, Le, At), ce = (e) => ee(e, Ve, Nt), l = (e) => Te.test(e), ne = (e) => te(e, Fe), Mt = (e) => te(e, Tt), Ae = (e) => te(e, je), Dt = (e) => te(e, _e), Et = (e) => te(e, Le), de = (e) => te(e, Ve, !0), ee = (e, o, r) => {\n const t = Oe.exec(e);\n return t ? t[1] ? o(t[1]) : r(t[2]) : !1;\n}, te = (e, o, r = !1) => {\n const t = Te.exec(e);\n return t ? t[1] ? o(t[1]) : r : !1;\n}, je = (e) => e === \"position\" || e === \"percentage\", Le = (e) => e === \"image\" || e === \"url\", _e = (e) => e === \"length\" || e === \"size\" || e === \"bg-size\", Fe = (e) => e === \"length\", Ot = (e) => e === \"number\", Tt = (e) => e === \"family-name\", Ve = (e) => e === \"shadow\", Gt = () => {\n const e = A(\"color\"), o = A(\"font\"), r = A(\"text\"), t = A(\"font-weight\"), n = A(\"tracking\"), s = A(\"leading\"), a = A(\"breakpoint\"), p = A(\"container\"), c = A(\"spacing\"), h = A(\"radius\"), x = A(\"shadow\"), S = A(\"inset-shadow\"), w = A(\"text-shadow\"), y = A(\"drop-shadow\"), j = A(\"blur\"), z = A(\"perspective\"), k = A(\"aspect\"), D = A(\"ease\"), F = A(\"animate\"), M = () => [\"auto\", \"avoid\", \"all\", \"avoid-page\", \"page\", \"left\", \"right\", \"column\"], L = () => [\n \"center\",\n \"top\",\n \"bottom\",\n \"left\",\n \"right\",\n \"top-left\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"left-top\",\n \"top-right\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"right-top\",\n \"bottom-right\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"right-bottom\",\n \"bottom-left\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"left-bottom\"\n ], N = () => [...L(), l, i], C = () => [\"auto\", \"hidden\", \"clip\", \"visible\", \"scroll\"], E = () => [\"auto\", \"contain\", \"none\"], m = () => [l, i, c], V = () => [Z, \"full\", \"auto\", ...m()], J = () => [q, \"none\", \"subgrid\", l, i], H = () => [\"auto\", {\n span: [\"full\", q, l, i]\n }, q, l, i], I = () => [q, \"auto\", l, i], U = () => [\"auto\", \"min\", \"max\", \"fr\", l, i], re = () => [\"start\", \"end\", \"center\", \"between\", \"around\", \"evenly\", \"stretch\", \"baseline\", \"center-safe\", \"end-safe\"], u = () => [\"start\", \"end\", \"center\", \"stretch\", \"center-safe\", \"end-safe\"], f = () => [\"auto\", ...m()], v = () => [Z, \"auto\", \"full\", \"dvw\", \"dvh\", \"lvw\", \"lvh\", \"svw\", \"svh\", \"min\", \"max\", \"fit\", ...m()], d = () => [e, l, i], O = () => [...L(), Ae, Ne, {\n position: [l, i]\n }], W = () => [\"no-repeat\", {\n repeat: [\"\", \"x\", \"y\", \"space\", \"round\"]\n }], Q = () => [\"auto\", \"cover\", \"contain\", Dt, It, {\n size: [l, i]\n }], oe = () => [fe, ne, X], _ = () => [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n \"full\",\n h,\n l,\n i\n ], $ = () => [\"\", b, ne, X], se = () => [\"solid\", \"dashed\", \"dotted\", \"double\"], ye = () => [\"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"color-dodge\", \"color-burn\", \"hard-light\", \"soft-light\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\"], R = () => [b, fe, Ae, Ne], ke = () => [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n j,\n l,\n i\n ], ae = () => [\"none\", b, l, i], ie = () => [\"none\", b, l, i], ue = () => [b, l, i], le = () => [Z, \"full\", ...m()];\n return {\n cacheSize: 500,\n theme: {\n animate: [\"spin\", \"ping\", \"pulse\", \"bounce\"],\n aspect: [\"video\"],\n blur: [B],\n breakpoint: [B],\n color: [Pt],\n container: [B],\n \"drop-shadow\": [B],\n ease: [\"in\", \"out\", \"in-out\"],\n font: [St],\n \"font-weight\": [\"thin\", \"extralight\", \"light\", \"normal\", \"medium\", \"semibold\", \"bold\", \"extrabold\", \"black\"],\n \"inset-shadow\": [B],\n leading: [\"none\", \"tight\", \"snug\", \"normal\", \"relaxed\", \"loose\"],\n perspective: [\"dramatic\", \"near\", \"normal\", \"midrange\", \"distant\", \"none\"],\n radius: [B],\n shadow: [B],\n spacing: [\"px\", b],\n text: [B],\n \"text-shadow\": [B],\n tracking: [\"tighter\", \"tight\", \"normal\", \"wide\", \"wider\", \"widest\"]\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: [\"auto\", \"square\", Z, i, l, k]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: [\"container\"],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [b, i, l, p]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n \"break-after\": [{\n \"break-after\": M()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n \"break-before\": [{\n \"break-before\": M()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n \"break-inside\": [{\n \"break-inside\": [\"auto\", \"avoid\", \"avoid-page\", \"avoid-column\"]\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n \"box-decoration\": [{\n \"box-decoration\": [\"slice\", \"clone\"]\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: [\"border\", \"content\"]\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\"block\", \"inline-block\", \"inline\", \"flex\", \"inline-flex\", \"table\", \"inline-table\", \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row-group\", \"table-row\", \"flow-root\", \"grid\", \"inline-grid\", \"contents\", \"list-item\", \"hidden\"],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: [\"sr-only\", \"not-sr-only\"],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: [\"right\", \"left\", \"none\", \"start\", \"end\"]\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: [\"left\", \"right\", \"both\", \"none\", \"start\", \"end\"]\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: [\"isolate\", \"isolation-auto\"],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n \"object-fit\": [{\n object: [\"contain\", \"cover\", \"fill\", \"none\", \"scale-down\"]\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n \"object-position\": [{\n object: N()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: C()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n \"overflow-x\": [{\n \"overflow-x\": C()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n \"overflow-y\": [{\n \"overflow-y\": C()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: E()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n \"overscroll-x\": [{\n \"overscroll-x\": E()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n \"overscroll-y\": [{\n \"overscroll-y\": E()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: [\"static\", \"fixed\", \"absolute\", \"relative\", \"sticky\"],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: V()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n \"inset-x\": [{\n \"inset-x\": V()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n \"inset-y\": [{\n \"inset-y\": V()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: V()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: V()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: V()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: V()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: V()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: V()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: [\"visible\", \"invisible\", \"collapse\"],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [q, \"auto\", l, i]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [Z, \"full\", \"auto\", p, ...m()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n \"flex-direction\": [{\n flex: [\"row\", \"row-reverse\", \"col\", \"col-reverse\"]\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n \"flex-wrap\": [{\n flex: [\"nowrap\", \"wrap\", \"wrap-reverse\"]\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [b, Z, \"auto\", \"initial\", \"none\", i]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: [\"\", b, l, i]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: [\"\", b, l, i]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [q, \"first\", \"last\", \"none\", l, i]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n \"grid-cols\": [{\n \"grid-cols\": J()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n \"col-start-end\": [{\n col: H()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n \"col-start\": [{\n \"col-start\": I()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n \"col-end\": [{\n \"col-end\": I()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n \"grid-rows\": [{\n \"grid-rows\": J()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n \"row-start-end\": [{\n row: H()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n \"row-start\": [{\n \"row-start\": I()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n \"row-end\": [{\n \"row-end\": I()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n \"grid-flow\": [{\n \"grid-flow\": [\"row\", \"col\", \"dense\", \"row-dense\", \"col-dense\"]\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n \"auto-cols\": [{\n \"auto-cols\": U()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n \"auto-rows\": [{\n \"auto-rows\": U()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: m()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n \"gap-x\": [{\n \"gap-x\": m()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n \"gap-y\": [{\n \"gap-y\": m()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n \"justify-content\": [{\n justify: [...re(), \"normal\"]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n \"justify-items\": [{\n \"justify-items\": [...u(), \"normal\"]\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n \"justify-self\": [{\n \"justify-self\": [\"auto\", ...u()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n \"align-content\": [{\n content: [\"normal\", ...re()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n \"align-items\": [{\n items: [...u(), {\n baseline: [\"\", \"last\"]\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n \"align-self\": [{\n self: [\"auto\", ...u(), {\n baseline: [\"\", \"last\"]\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n \"place-content\": [{\n \"place-content\": re()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n \"place-items\": [{\n \"place-items\": [...u(), \"baseline\"]\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n \"place-self\": [{\n \"place-self\": [\"auto\", ...u()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: m()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: m()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: m()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: m()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: m()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: m()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: m()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: m()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: m()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: f()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: f()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: f()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: f()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: f()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: f()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: f()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: f()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: f()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-x\": [{\n \"space-x\": m()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-x-reverse\": [\"space-x-reverse\"],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-y\": [{\n \"space-y\": m()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-y-reverse\": [\"space-y-reverse\"],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: v()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [p, \"screen\", ...v()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n \"min-w\": [{\n \"min-w\": [\n p,\n \"screen\",\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n \"none\",\n ...v()\n ]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n \"max-w\": [{\n \"max-w\": [\n p,\n \"screen\",\n \"none\",\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n \"prose\",\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [a]\n },\n ...v()\n ]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [\"screen\", \"lh\", ...v()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n \"min-h\": [{\n \"min-h\": [\"screen\", \"lh\", \"none\", ...v()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n \"max-h\": [{\n \"max-h\": [\"screen\", \"lh\", ...v()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n \"font-size\": [{\n text: [\"base\", r, ne, X]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n \"font-smoothing\": [\"antialiased\", \"subpixel-antialiased\"],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n \"font-style\": [\"italic\", \"not-italic\"],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n \"font-weight\": [{\n font: [t, l, pe]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n \"font-stretch\": [{\n \"font-stretch\": [\"ultra-condensed\", \"extra-condensed\", \"condensed\", \"semi-condensed\", \"normal\", \"semi-expanded\", \"expanded\", \"extra-expanded\", \"ultra-expanded\", fe, i]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n \"font-family\": [{\n font: [Mt, i, o]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-normal\": [\"normal-nums\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-ordinal\": [\"ordinal\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-slashed-zero\": [\"slashed-zero\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-figure\": [\"lining-nums\", \"oldstyle-nums\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-spacing\": [\"proportional-nums\", \"tabular-nums\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-fraction\": [\"diagonal-fractions\", \"stacked-fractions\"],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [n, l, i]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n \"line-clamp\": [{\n \"line-clamp\": [b, \"none\", l, pe]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n s,\n ...m()\n ]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n \"list-image\": [{\n \"list-image\": [\"none\", l, i]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n \"list-style-position\": [{\n list: [\"inside\", \"outside\"]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n \"list-style-type\": [{\n list: [\"disc\", \"decimal\", \"none\", l, i]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n \"text-alignment\": [{\n text: [\"left\", \"center\", \"right\", \"justify\", \"start\", \"end\"]\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n \"placeholder-color\": [{\n placeholder: d()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n \"text-color\": [{\n text: d()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n \"text-decoration\": [\"underline\", \"overline\", \"line-through\", \"no-underline\"],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n \"text-decoration-style\": [{\n decoration: [...se(), \"wavy\"]\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n \"text-decoration-thickness\": [{\n decoration: [b, \"from-font\", \"auto\", l, X]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n \"text-decoration-color\": [{\n decoration: d()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n \"underline-offset\": [{\n \"underline-offset\": [b, \"auto\", l, i]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n \"text-transform\": [\"uppercase\", \"lowercase\", \"capitalize\", \"normal-case\"],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n \"text-overflow\": [\"truncate\", \"text-ellipsis\", \"text-clip\"],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n \"text-wrap\": [{\n text: [\"wrap\", \"nowrap\", \"balance\", \"pretty\"]\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: m()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n \"vertical-align\": [{\n align: [\"baseline\", \"top\", \"middle\", \"bottom\", \"text-top\", \"text-bottom\", \"sub\", \"super\", l, i]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: [\"normal\", \"nowrap\", \"pre\", \"pre-line\", \"pre-wrap\", \"break-spaces\"]\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: [\"normal\", \"words\", \"all\", \"keep\"]\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: [\"break-word\", \"anywhere\", \"normal\"]\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: [\"none\", \"manual\", \"auto\"]\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: [\"none\", l, i]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n \"bg-attachment\": [{\n bg: [\"fixed\", \"local\", \"scroll\"]\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n \"bg-clip\": [{\n \"bg-clip\": [\"border\", \"padding\", \"content\", \"text\"]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n \"bg-origin\": [{\n \"bg-origin\": [\"border\", \"padding\", \"content\"]\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n \"bg-position\": [{\n bg: O()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n \"bg-repeat\": [{\n bg: W()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n \"bg-size\": [{\n bg: Q()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n \"bg-image\": [{\n bg: [\"none\", {\n linear: [{\n to: [\"t\", \"tr\", \"r\", \"br\", \"b\", \"bl\", \"l\", \"tl\"]\n }, q, l, i],\n radial: [\"\", l, i],\n conic: [q, l, i]\n }, Et, Rt]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n \"bg-color\": [{\n bg: d()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-from-pos\": [{\n from: oe()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-via-pos\": [{\n via: oe()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-to-pos\": [{\n to: oe()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-from\": [{\n from: d()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-via\": [{\n via: d()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-to\": [{\n to: d()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: _()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-s\": [{\n \"rounded-s\": _()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-e\": [{\n \"rounded-e\": _()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-t\": [{\n \"rounded-t\": _()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-r\": [{\n \"rounded-r\": _()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-b\": [{\n \"rounded-b\": _()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-l\": [{\n \"rounded-l\": _()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-ss\": [{\n \"rounded-ss\": _()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-se\": [{\n \"rounded-se\": _()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-ee\": [{\n \"rounded-ee\": _()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-es\": [{\n \"rounded-es\": _()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-tl\": [{\n \"rounded-tl\": _()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-tr\": [{\n \"rounded-tr\": _()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-br\": [{\n \"rounded-br\": _()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-bl\": [{\n \"rounded-bl\": _()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w\": [{\n border: $()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-x\": [{\n \"border-x\": $()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-y\": [{\n \"border-y\": $()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-s\": [{\n \"border-s\": $()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-e\": [{\n \"border-e\": $()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-t\": [{\n \"border-t\": $()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-r\": [{\n \"border-r\": $()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-b\": [{\n \"border-b\": $()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-l\": [{\n \"border-l\": $()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-x\": [{\n \"divide-x\": $()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-x-reverse\": [\"divide-x-reverse\"],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-y\": [{\n \"divide-y\": $()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-y-reverse\": [\"divide-y-reverse\"],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n \"border-style\": [{\n border: [...se(), \"hidden\", \"none\"]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n \"divide-style\": [{\n divide: [...se(), \"hidden\", \"none\"]\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color\": [{\n border: d()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-x\": [{\n \"border-x\": d()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-y\": [{\n \"border-y\": d()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-s\": [{\n \"border-s\": d()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-e\": [{\n \"border-e\": d()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-t\": [{\n \"border-t\": d()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-r\": [{\n \"border-r\": d()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-b\": [{\n \"border-b\": d()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-l\": [{\n \"border-l\": d()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n \"divide-color\": [{\n divide: d()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n \"outline-style\": [{\n outline: [...se(), \"none\", \"hidden\"]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n \"outline-offset\": [{\n \"outline-offset\": [b, l, i]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n \"outline-w\": [{\n outline: [\"\", b, ne, X]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n \"outline-color\": [{\n outline: d()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n x,\n de,\n ce\n ]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n \"shadow-color\": [{\n shadow: d()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n \"inset-shadow\": [{\n \"inset-shadow\": [\"none\", S, de, ce]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n \"inset-shadow-color\": [{\n \"inset-shadow\": d()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n \"ring-w\": [{\n ring: $()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n \"ring-w-inset\": [\"ring-inset\"],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n \"ring-color\": [{\n ring: d()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n \"ring-offset-w\": [{\n \"ring-offset\": [b, X]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n \"ring-offset-color\": [{\n \"ring-offset\": d()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n \"inset-ring-w\": [{\n \"inset-ring\": $()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n \"inset-ring-color\": [{\n \"inset-ring\": d()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n \"text-shadow\": [{\n \"text-shadow\": [\"none\", w, de, ce]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n \"text-shadow-color\": [{\n \"text-shadow\": d()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [b, l, i]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n \"mix-blend\": [{\n \"mix-blend\": [...ye(), \"plus-darker\", \"plus-lighter\"]\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n \"bg-blend\": [{\n \"bg-blend\": ye()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n \"mask-clip\": [{\n \"mask-clip\": [\"border\", \"padding\", \"content\", \"fill\", \"stroke\", \"view\"]\n }, \"mask-no-clip\"],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n \"mask-composite\": [{\n mask: [\"add\", \"subtract\", \"intersect\", \"exclude\"]\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n \"mask-image-linear-pos\": [{\n \"mask-linear\": [b]\n }],\n \"mask-image-linear-from-pos\": [{\n \"mask-linear-from\": R()\n }],\n \"mask-image-linear-to-pos\": [{\n \"mask-linear-to\": R()\n }],\n \"mask-image-linear-from-color\": [{\n \"mask-linear-from\": d()\n }],\n \"mask-image-linear-to-color\": [{\n \"mask-linear-to\": d()\n }],\n \"mask-image-t-from-pos\": [{\n \"mask-t-from\": R()\n }],\n \"mask-image-t-to-pos\": [{\n \"mask-t-to\": R()\n }],\n \"mask-image-t-from-color\": [{\n \"mask-t-from\": d()\n }],\n \"mask-image-t-to-color\": [{\n \"mask-t-to\": d()\n }],\n \"mask-image-r-from-pos\": [{\n \"mask-r-from\": R()\n }],\n \"mask-image-r-to-pos\": [{\n \"mask-r-to\": R()\n }],\n \"mask-image-r-from-color\": [{\n \"mask-r-from\": d()\n }],\n \"mask-image-r-to-color\": [{\n \"mask-r-to\": d()\n }],\n \"mask-image-b-from-pos\": [{\n \"mask-b-from\": R()\n }],\n \"mask-image-b-to-pos\": [{\n \"mask-b-to\": R()\n }],\n \"mask-image-b-from-color\": [{\n \"mask-b-from\": d()\n }],\n \"mask-image-b-to-color\": [{\n \"mask-b-to\": d()\n }],\n \"mask-image-l-from-pos\": [{\n \"mask-l-from\": R()\n }],\n \"mask-image-l-to-pos\": [{\n \"mask-l-to\": R()\n }],\n \"mask-image-l-from-color\": [{\n \"mask-l-from\": d()\n }],\n \"mask-image-l-to-color\": [{\n \"mask-l-to\": d()\n }],\n \"mask-image-x-from-pos\": [{\n \"mask-x-from\": R()\n }],\n \"mask-image-x-to-pos\": [{\n \"mask-x-to\": R()\n }],\n \"mask-image-x-from-color\": [{\n \"mask-x-from\": d()\n }],\n \"mask-image-x-to-color\": [{\n \"mask-x-to\": d()\n }],\n \"mask-image-y-from-pos\": [{\n \"mask-y-from\": R()\n }],\n \"mask-image-y-to-pos\": [{\n \"mask-y-to\": R()\n }],\n \"mask-image-y-from-color\": [{\n \"mask-y-from\": d()\n }],\n \"mask-image-y-to-color\": [{\n \"mask-y-to\": d()\n }],\n \"mask-image-radial\": [{\n \"mask-radial\": [l, i]\n }],\n \"mask-image-radial-from-pos\": [{\n \"mask-radial-from\": R()\n }],\n \"mask-image-radial-to-pos\": [{\n \"mask-radial-to\": R()\n }],\n \"mask-image-radial-from-color\": [{\n \"mask-radial-from\": d()\n }],\n \"mask-image-radial-to-color\": [{\n \"mask-radial-to\": d()\n }],\n \"mask-image-radial-shape\": [{\n \"mask-radial\": [\"circle\", \"ellipse\"]\n }],\n \"mask-image-radial-size\": [{\n \"mask-radial\": [{\n closest: [\"side\", \"corner\"],\n farthest: [\"side\", \"corner\"]\n }]\n }],\n \"mask-image-radial-pos\": [{\n \"mask-radial-at\": L()\n }],\n \"mask-image-conic-pos\": [{\n \"mask-conic\": [b]\n }],\n \"mask-image-conic-from-pos\": [{\n \"mask-conic-from\": R()\n }],\n \"mask-image-conic-to-pos\": [{\n \"mask-conic-to\": R()\n }],\n \"mask-image-conic-from-color\": [{\n \"mask-conic-from\": d()\n }],\n \"mask-image-conic-to-color\": [{\n \"mask-conic-to\": d()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n \"mask-mode\": [{\n mask: [\"alpha\", \"luminance\", \"match\"]\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n \"mask-origin\": [{\n \"mask-origin\": [\"border\", \"padding\", \"content\", \"fill\", \"stroke\", \"view\"]\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n \"mask-position\": [{\n mask: O()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n \"mask-repeat\": [{\n mask: W()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n \"mask-size\": [{\n mask: Q()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n \"mask-type\": [{\n \"mask-type\": [\"alpha\", \"luminance\"]\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n \"mask-image\": [{\n mask: [\"none\", l, i]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n \"\",\n \"none\",\n l,\n i\n ]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: ke()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [b, l, i]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [b, l, i]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n \"drop-shadow\": [{\n \"drop-shadow\": [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n y,\n de,\n ce\n ]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n \"drop-shadow-color\": [{\n \"drop-shadow\": d()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [\"\", b, l, i]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n \"hue-rotate\": [{\n \"hue-rotate\": [b, l, i]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [\"\", b, l, i]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [b, l, i]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [\"\", b, l, i]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n \"backdrop-filter\": [{\n \"backdrop-filter\": [\n // Deprecated since Tailwind CSS v3.0.0\n \"\",\n \"none\",\n l,\n i\n ]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n \"backdrop-blur\": [{\n \"backdrop-blur\": ke()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n \"backdrop-brightness\": [{\n \"backdrop-brightness\": [b, l, i]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n \"backdrop-contrast\": [{\n \"backdrop-contrast\": [b, l, i]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n \"backdrop-grayscale\": [{\n \"backdrop-grayscale\": [\"\", b, l, i]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n \"backdrop-hue-rotate\": [{\n \"backdrop-hue-rotate\": [b, l, i]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n \"backdrop-invert\": [{\n \"backdrop-invert\": [\"\", b, l, i]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n \"backdrop-opacity\": [{\n \"backdrop-opacity\": [b, l, i]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n \"backdrop-saturate\": [{\n \"backdrop-saturate\": [b, l, i]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n \"backdrop-sepia\": [{\n \"backdrop-sepia\": [\"\", b, l, i]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n \"border-collapse\": [{\n border: [\"collapse\", \"separate\"]\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n \"border-spacing\": [{\n \"border-spacing\": m()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n \"border-spacing-x\": [{\n \"border-spacing-x\": m()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n \"border-spacing-y\": [{\n \"border-spacing-y\": m()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n \"table-layout\": [{\n table: [\"auto\", \"fixed\"]\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: [\"top\", \"bottom\"]\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: [\"\", \"all\", \"colors\", \"opacity\", \"shadow\", \"transform\", \"none\", l, i]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n \"transition-behavior\": [{\n transition: [\"normal\", \"discrete\"]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [b, \"initial\", l, i]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: [\"linear\", \"initial\", D, l, i]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [b, l, i]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: [\"none\", F, l, i]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: [\"hidden\", \"visible\"]\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [z, l, i]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n \"perspective-origin\": [{\n \"perspective-origin\": N()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: ae()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n \"rotate-x\": [{\n \"rotate-x\": ae()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n \"rotate-y\": [{\n \"rotate-y\": ae()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n \"rotate-z\": [{\n \"rotate-z\": ae()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: ie()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-x\": [{\n \"scale-x\": ie()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-y\": [{\n \"scale-y\": ie()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-z\": [{\n \"scale-z\": ie()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-3d\": [\"scale-3d\"],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: ue()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n \"skew-x\": [{\n \"skew-x\": ue()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n \"skew-y\": [{\n \"skew-y\": ue()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [l, i, \"\", \"none\", \"gpu\", \"cpu\"]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n \"transform-origin\": [{\n origin: N()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n \"transform-style\": [{\n transform: [\"3d\", \"flat\"]\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: le()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-x\": [{\n \"translate-x\": le()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-y\": [{\n \"translate-y\": le()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-z\": [{\n \"translate-z\": le()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-none\": [\"translate-none\"],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: d()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: [\"none\", \"auto\"]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n \"caret-color\": [{\n caret: d()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n \"color-scheme\": [{\n scheme: [\"normal\", \"dark\", \"light\", \"light-dark\", \"only-dark\", \"only-light\"]\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: [\"auto\", \"default\", \"pointer\", \"wait\", \"text\", \"move\", \"help\", \"not-allowed\", \"none\", \"context-menu\", \"progress\", \"cell\", \"crosshair\", \"vertical-text\", \"alias\", \"copy\", \"no-drop\", \"grab\", \"grabbing\", \"all-scroll\", \"col-resize\", \"row-resize\", \"n-resize\", \"e-resize\", \"s-resize\", \"w-resize\", \"ne-resize\", \"nw-resize\", \"se-resize\", \"sw-resize\", \"ew-resize\", \"ns-resize\", \"nesw-resize\", \"nwse-resize\", \"zoom-in\", \"zoom-out\", l, i]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n \"field-sizing\": [{\n \"field-sizing\": [\"fixed\", \"content\"]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n \"pointer-events\": [{\n \"pointer-events\": [\"auto\", \"none\"]\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: [\"none\", \"\", \"y\", \"x\"]\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n \"scroll-behavior\": [{\n scroll: [\"auto\", \"smooth\"]\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-m\": [{\n \"scroll-m\": m()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mx\": [{\n \"scroll-mx\": m()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-my\": [{\n \"scroll-my\": m()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-ms\": [{\n \"scroll-ms\": m()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-me\": [{\n \"scroll-me\": m()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mt\": [{\n \"scroll-mt\": m()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mr\": [{\n \"scroll-mr\": m()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mb\": [{\n \"scroll-mb\": m()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-ml\": [{\n \"scroll-ml\": m()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-p\": [{\n \"scroll-p\": m()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-px\": [{\n \"scroll-px\": m()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-py\": [{\n \"scroll-py\": m()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-ps\": [{\n \"scroll-ps\": m()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pe\": [{\n \"scroll-pe\": m()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pt\": [{\n \"scroll-pt\": m()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pr\": [{\n \"scroll-pr\": m()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pb\": [{\n \"scroll-pb\": m()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pl\": [{\n \"scroll-pl\": m()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n \"snap-align\": [{\n snap: [\"start\", \"end\", \"center\", \"align-none\"]\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n \"snap-stop\": [{\n snap: [\"normal\", \"always\"]\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n \"snap-type\": [{\n snap: [\"none\", \"x\", \"y\", \"both\"]\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n \"snap-strictness\": [{\n snap: [\"mandatory\", \"proximity\"]\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: [\"auto\", \"none\", \"manipulation\"]\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n \"touch-x\": [{\n \"touch-pan\": [\"x\", \"left\", \"right\"]\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n \"touch-y\": [{\n \"touch-pan\": [\"y\", \"up\", \"down\"]\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n \"touch-pz\": [\"touch-pinch-zoom\"],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: [\"none\", \"text\", \"all\", \"auto\"]\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n \"will-change\": [{\n \"will-change\": [\"auto\", \"scroll\", \"contents\", \"transform\", l, i]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [\"none\", ...d()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n \"stroke-w\": [{\n stroke: [b, ne, X, pe]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [\"none\", ...d()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n \"forced-color-adjust\": [{\n \"forced-color-adjust\": [\"auto\", \"none\"]\n }]\n },\n conflictingClassGroups: {\n overflow: [\"overflow-x\", \"overflow-y\"],\n overscroll: [\"overscroll-x\", \"overscroll-y\"],\n inset: [\"inset-x\", \"inset-y\", \"start\", \"end\", \"top\", \"right\", \"bottom\", \"left\"],\n \"inset-x\": [\"right\", \"left\"],\n \"inset-y\": [\"top\", \"bottom\"],\n flex: [\"basis\", \"grow\", \"shrink\"],\n gap: [\"gap-x\", \"gap-y\"],\n p: [\"px\", \"py\", \"ps\", \"pe\", \"pt\", \"pr\", \"pb\", \"pl\"],\n px: [\"pr\", \"pl\"],\n py: [\"pt\", \"pb\"],\n m: [\"mx\", \"my\", \"ms\", \"me\", \"mt\", \"mr\", \"mb\", \"ml\"],\n mx: [\"mr\", \"ml\"],\n my: [\"mt\", \"mb\"],\n size: [\"w\", \"h\"],\n \"font-size\": [\"leading\"],\n \"fvn-normal\": [\"fvn-ordinal\", \"fvn-slashed-zero\", \"fvn-figure\", \"fvn-spacing\", \"fvn-fraction\"],\n \"fvn-ordinal\": [\"fvn-normal\"],\n \"fvn-slashed-zero\": [\"fvn-normal\"],\n \"fvn-figure\": [\"fvn-normal\"],\n \"fvn-spacing\": [\"fvn-normal\"],\n \"fvn-fraction\": [\"fvn-normal\"],\n \"line-clamp\": [\"display\", \"overflow\"],\n rounded: [\"rounded-s\", \"rounded-e\", \"rounded-t\", \"rounded-r\", \"rounded-b\", \"rounded-l\", \"rounded-ss\", \"rounded-se\", \"rounded-ee\", \"rounded-es\", \"rounded-tl\", \"rounded-tr\", \"rounded-br\", \"rounded-bl\"],\n \"rounded-s\": [\"rounded-ss\", \"rounded-es\"],\n \"rounded-e\": [\"rounded-se\", \"rounded-ee\"],\n \"rounded-t\": [\"rounded-tl\", \"rounded-tr\"],\n \"rounded-r\": [\"rounded-tr\", \"rounded-br\"],\n \"rounded-b\": [\"rounded-br\", \"rounded-bl\"],\n \"rounded-l\": [\"rounded-tl\", \"rounded-bl\"],\n \"border-spacing\": [\"border-spacing-x\", \"border-spacing-y\"],\n \"border-w\": [\"border-w-x\", \"border-w-y\", \"border-w-s\", \"border-w-e\", \"border-w-t\", \"border-w-r\", \"border-w-b\", \"border-w-l\"],\n \"border-w-x\": [\"border-w-r\", \"border-w-l\"],\n \"border-w-y\": [\"border-w-t\", \"border-w-b\"],\n \"border-color\": [\"border-color-x\", \"border-color-y\", \"border-color-s\", \"border-color-e\", \"border-color-t\", \"border-color-r\", \"border-color-b\", \"border-color-l\"],\n \"border-color-x\": [\"border-color-r\", \"border-color-l\"],\n \"border-color-y\": [\"border-color-t\", \"border-color-b\"],\n translate: [\"translate-x\", \"translate-y\", \"translate-none\"],\n \"translate-none\": [\"translate\", \"translate-x\", \"translate-y\", \"translate-z\"],\n \"scroll-m\": [\"scroll-mx\", \"scroll-my\", \"scroll-ms\", \"scroll-me\", \"scroll-mt\", \"scroll-mr\", \"scroll-mb\", \"scroll-ml\"],\n \"scroll-mx\": [\"scroll-mr\", \"scroll-ml\"],\n \"scroll-my\": [\"scroll-mt\", \"scroll-mb\"],\n \"scroll-p\": [\"scroll-px\", \"scroll-py\", \"scroll-ps\", \"scroll-pe\", \"scroll-pt\", \"scroll-pr\", \"scroll-pb\", \"scroll-pl\"],\n \"scroll-px\": [\"scroll-pr\", \"scroll-pl\"],\n \"scroll-py\": [\"scroll-pt\", \"scroll-pb\"],\n touch: [\"touch-x\", \"touch-y\", \"touch-pz\"],\n \"touch-x\": [\"touch\"],\n \"touch-y\": [\"touch\"],\n \"touch-pz\": [\"touch\"]\n },\n conflictingClassGroupModifiers: {\n \"font-size\": [\"leading\"]\n },\n orderSensitiveModifiers: [\"*\", \"**\", \"after\", \"backdrop\", \"before\", \"details-content\", \"file\", \"first-letter\", \"first-line\", \"marker\", \"placeholder\", \"selection\"]\n };\n}, jt = /* @__PURE__ */ bt(Gt);\nfunction P(...e) {\n return jt(Xe(e));\n}\nconst Lt = {\n purple: \"bg-purple-500\",\n green: \"bg-green-500\",\n blue: \"bg-blue-500\",\n yellow: \"bg-yellow-400 !text-yellow-900\",\n red: \"bg-red-500\"\n}, _t = ({\n id: e,\n title: o,\n price: r,\n periodLabel: t,\n features: n,\n isSelected: s,\n onSelect: a,\n topBadge: p,\n discountBadge: c,\n premiumCallout: h,\n bottomNote: x,\n introPriceNote: S,\n isBestValue: w = !1,\n ctaButton: y,\n className: j,\n children: z,\n disabled: k = !1,\n ariaLabel: D,\n onTrack: F,\n trackingLabel: M,\n componentName: L = \"SubscriptionTile\",\n hideSelectionIndicator: N = !1\n}) => {\n const C = !!y, E = !N, m = s ? \"bg-blue-600 text-white ring-4 ring-blue-600 ring-offset-4 ring-offset-white dark:ring-offset-gray-900 border-transparent\" : \"bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 hover:shadow-md\", V = () => {\n !k && !C && (F?.({ action: \"select\", trackingLabel: M, componentName: L }), a());\n }, J = (I) => {\n !k && !C && (I.key === \"Enter\" || I.key === \" \") && (I.preventDefault(), F?.({ action: \"select\", trackingLabel: M, componentName: L }), a());\n }, H = (I) => {\n I.stopPropagation(), F?.({ action: \"cta_click\", trackingLabel: M, componentName: L }), y?.onClick && y.onClick();\n };\n return /* @__PURE__ */ G(\n \"div\",\n {\n className: P(\n \"relative rounded-2xl p-6 transition-all flex flex-col h-full\",\n // Add extra bottom padding for radio button or CTA button (not needed if hidden)\n E && (C ? \"pb-20\" : \"pb-14\"),\n k ? \"opacity-50 cursor-not-allowed\" : C ? \"cursor-default\" : \"cursor-pointer\",\n m,\n j\n ),\n onClick: V,\n onKeyDown: J,\n role: C ? \"article\" : \"radio\",\n \"aria-checked\": C ? void 0 : s,\n \"aria-label\": D || `${o} - ${r}${t || \"\"}`,\n \"aria-disabled\": k,\n tabIndex: C || k ? -1 : 0,\n children: [\n p && /* @__PURE__ */ g(\"div\", { className: \"absolute top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 z-10\", children: /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n Lt[p.color],\n \"text-white px-4 py-1.5 rounded-full text-sm font-semibold shadow-lg whitespace-nowrap\"\n ),\n children: p.text\n }\n ) }),\n /* @__PURE__ */ G(\"div\", { className: \"flex flex-col flex-grow\", children: [\n /* @__PURE__ */ G(\"div\", { className: P(\"text-center mb-6\", p && \"mt-2\"), children: [\n /* @__PURE__ */ g(\n \"h3\",\n {\n className: P(\n he.heading.h4(),\n \"mb-2\",\n s ? \"text-white\" : \"\"\n ),\n children: o\n }\n ),\n /* @__PURE__ */ G(\"div\", { className: \"mb-3\", children: [\n /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"text-4xl font-bold\",\n s ? \"text-white\" : \"text-gray-900 dark:text-gray-100\"\n ),\n children: r\n }\n ),\n t && /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"text-lg\",\n s ? \"text-blue-100\" : \"text-gray-500 dark:text-gray-400\"\n ),\n children: t\n }\n )\n ] }),\n c && /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"inline-flex items-center px-2 py-1 rounded-full text-sm font-semibold\",\n s ? \"bg-blue-500 text-white\" : \"bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300\"\n ),\n children: c.text\n }\n )\n ] }),\n z,\n n.length > 0 && /* @__PURE__ */ g(\"div\", { className: \"space-y-3 mb-6 flex-grow\", children: n.map((I, U) => /* @__PURE__ */ G(\"div\", { className: \"flex items-start\", children: [\n /* @__PURE__ */ g(\n \"svg\",\n {\n className: P(\n \"w-5 h-5 mr-3 flex-shrink-0\",\n s ? \"text-blue-200\" : \"text-green-500\"\n ),\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /* @__PURE__ */ g(\n \"path\",\n {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }\n )\n }\n ),\n /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"text-sm text-left\",\n s ? \"text-white\" : \"text-gray-700 dark:text-gray-300\"\n ),\n children: I.replace(/^✓\\s*/, \"\")\n }\n )\n ] }, U)) }),\n h && /* @__PURE__ */ G(\n \"div\",\n {\n className: P(\n \"rounded-lg p-4 mb-4\",\n s ? \"bg-blue-500/30\" : \"bg-gradient-to-r from-purple-50 to-blue-50 dark:from-purple-900/20 dark:to-blue-900/20\"\n ),\n children: [\n /* @__PURE__ */ g(\"div\", { className: \"flex items-center mb-2\", children: /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"font-semibold text-sm\",\n s ? \"text-white\" : \"text-purple-600 dark:text-purple-400\"\n ),\n children: h.title\n }\n ) }),\n /* @__PURE__ */ g(\n \"ul\",\n {\n className: P(\n \"text-xs space-y-1\",\n s ? \"text-blue-100\" : \"text-gray-600 dark:text-gray-400\"\n ),\n children: h.features.map((I, U) => /* @__PURE__ */ G(\"li\", { children: [\n \"• \",\n I\n ] }, U))\n }\n )\n ]\n }\n ),\n x && /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"text-center text-sm font-medium mb-4\",\n s ? \"text-blue-100\" : \"text-blue-600 dark:text-blue-400\"\n ),\n children: x\n }\n ),\n S && /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"p-3 rounded-lg mt-auto\",\n s ? \"bg-blue-500/30\" : \"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800\"\n ),\n children: /* @__PURE__ */ g(\n \"p\",\n {\n className: P(\n \"text-sm font-semibold text-center\",\n s ? \"text-white\" : \"text-yellow-700 dark:text-yellow-300\"\n ),\n children: S\n }\n )\n }\n )\n ] }),\n E && C && /* @__PURE__ */ g(\"div\", { className: \"absolute bottom-4 left-0 right-0 px-6\", children: y.href ? /* @__PURE__ */ g(\n \"a\",\n {\n href: y.href,\n className: P(\n \"block w-full py-3 font-semibold rounded-lg text-center transition-colors\",\n s ? \"bg-white text-blue-600 hover:bg-gray-100\" : \"bg-blue-600 text-white hover:bg-blue-700\"\n ),\n onClick: (I) => I.stopPropagation(),\n children: y.label\n }\n ) : /* @__PURE__ */ g(\n \"button\",\n {\n onClick: H,\n disabled: k,\n className: P(\n \"w-full py-3 font-semibold rounded-lg transition-colors\",\n s ? \"bg-white text-blue-600 hover:bg-gray-100\" : \"bg-blue-600 text-white hover:bg-blue-700\",\n k && \"opacity-50 cursor-not-allowed\"\n ),\n children: y.label\n }\n ) }),\n E && !C && /* @__PURE__ */ g(\"div\", { className: \"absolute bottom-4 left-1/2 -translate-x-1/2\", children: /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"w-5 h-5 rounded-full border-2 flex items-center justify-center\",\n s ? \"border-white bg-white\" : \"border-gray-300 dark:border-gray-600\"\n ),\n children: s && /* @__PURE__ */ g(\"div\", { className: \"w-2 h-2 rounded-full bg-blue-600\" })\n }\n ) })\n ]\n }\n );\n}, Kt = ({\n title: e,\n children: o,\n error: r,\n variant: t = \"selection\",\n currentStatus: n,\n primaryAction: s,\n secondaryAction: a,\n minTileWidth: p = 240,\n className: c,\n headerContent: h,\n aboveProducts: x,\n footerContent: S,\n currentStatusLabel: w = \"Current Status\",\n freeTileConfig: y,\n onTrack: j,\n trackingLabel: z,\n componentName: k = \"SubscriptionLayout\"\n}) => {\n const D = t === \"selection\" && s, F = () => {\n j?.({ action: \"primary_action\", trackingLabel: z, componentName: k }), s?.onClick();\n }, M = () => {\n j?.({ action: \"secondary_action\", trackingLabel: z, componentName: k }), a?.onClick();\n }, L = t === \"cta\" && y, N = {\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${p}px), 1fr))`,\n gap: \"1.5rem\"\n };\n return /* @__PURE__ */ g(Be, { className: c, children: /* @__PURE__ */ G(Ue, { className: \"pt-6\", children: [\n h,\n n && /* @__PURE__ */ G(We, { children: [\n /* @__PURE__ */ g(\"h2\", { className: P(he.heading.h3(), \"mb-4\"), children: w }),\n n.isActive ? /* @__PURE__ */ G(\"div\", { className: \"bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-4 mb-6\", children: [\n /* @__PURE__ */ G(\"div\", { className: \"flex items-center mb-2\", children: [\n /* @__PURE__ */ g(\"div\", { className: \"w-3 h-3 bg-green-500 rounded-full mr-3\" }),\n /* @__PURE__ */ g(\"span\", { className: \"font-semibold text-green-800 dark:text-green-300\", children: n.activeContent?.title || \"Active Subscription\" })\n ] }),\n n.activeContent?.fields && n.activeContent.fields.length > 0 && /* @__PURE__ */ g(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4\", children: n.activeContent.fields.map(\n (C, E) => /* @__PURE__ */ G(\"div\", { children: [\n /* @__PURE__ */ g(\"p\", { className: \"text-sm text-green-600 dark:text-green-400\", children: C.label }),\n /* @__PURE__ */ g(\"p\", { className: \"font-semibold text-green-800 dark:text-green-300\", children: C.value })\n ] }, E)\n ) })\n ] }) : /* @__PURE__ */ G(\"div\", { className: \"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4 mb-6\", children: [\n /* @__PURE__ */ G(\"div\", { className: \"flex items-center mb-2\", children: [\n /* @__PURE__ */ g(\"div\", { className: \"w-3 h-3 bg-yellow-500 rounded-full mr-3\" }),\n /* @__PURE__ */ g(\"span\", { className: \"font-semibold text-yellow-800 dark:text-yellow-300\", children: n.inactiveContent?.title || \"No Active Subscription\" })\n ] }),\n n.inactiveContent?.message && /* @__PURE__ */ g(\"p\", { className: \"text-yellow-700 dark:text-yellow-400\", children: n.inactiveContent.message })\n ] })\n ] }),\n /* @__PURE__ */ g(\"h2\", { className: P(he.heading.h3(), \"mb-4\"), children: e }),\n x,\n /* @__PURE__ */ G(\"div\", { style: N, children: [\n L && /* @__PURE__ */ g(\n _t,\n {\n id: \"free\",\n title: y.title,\n price: y.price,\n periodLabel: y.periodLabel,\n features: y.features,\n isSelected: !1,\n onSelect: () => {\n },\n topBadge: y.topBadge,\n ctaButton: y.ctaButton\n }\n ),\n o\n ] }),\n S,\n r && /* @__PURE__ */ g(\"div\", { className: \"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 mt-6\", children: /* @__PURE__ */ g(\"p\", { className: \"text-red-600 dark:text-red-400\", children: r }) }),\n D && /* @__PURE__ */ G(\"div\", { className: \"flex flex-col sm:flex-row gap-3 mt-6\", children: [\n a && /* @__PURE__ */ g(\n ve,\n {\n onClick: M,\n disabled: a.disabled || a.loading,\n variant: \"outline\",\n className: \"sm:flex-shrink-0\",\n children: a.label\n }\n ),\n /* @__PURE__ */ g(\n ve,\n {\n onClick: F,\n disabled: s.disabled || s.loading,\n className: \"flex-1\",\n children: s.label\n }\n )\n ] })\n ] }) });\n};\nfunction Yt({\n options: e,\n value: o,\n onChange: r,\n className: t,\n disabled: n = !1,\n size: s = \"md\"\n}) {\n const a = {\n sm: \"px-3 py-1.5 text-xs\",\n md: \"px-4 py-2 text-sm\",\n lg: \"px-6 py-3 text-base\"\n };\n return /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"inline-flex rounded-lg bg-gray-100 dark:bg-gray-800 p-1\",\n n && \"opacity-50\",\n t\n ),\n role: \"radiogroup\",\n children: e.map((p) => {\n const c = o === p.value;\n return /* @__PURE__ */ g(\n \"button\",\n {\n type: \"button\",\n role: \"radio\",\n \"aria-checked\": c,\n disabled: n,\n onClick: () => !n && r(p.value),\n className: P(\n a[s],\n \"font-medium rounded-md transition-all focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\",\n c ? \"bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm\" : \"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white\",\n n && \"cursor-not-allowed\"\n ),\n children: p.label\n },\n p.value\n );\n })\n }\n );\n}\nlet ge = null;\nconst Ft = async () => (ge || (ge = await import(\"@revenuecat/purchases-js\")), ge);\nlet T = null;\nconst Se = (e, o) => {\n const r = e.rcBillingProduct, t = r?.defaultSubscriptionOption, n = typeof o?.entitlement == \"string\" ? o.entitlement : void 0;\n return {\n identifier: e.identifier,\n productId: r?.identifier || void 0,\n price: r?.currentPrice?.amountMicros ? (r.currentPrice.amountMicros / 1e6).toFixed(2) : \"0\",\n priceString: r?.currentPrice?.formattedPrice || \"$0\",\n title: r?.title || e.identifier,\n description: r?.description || \"\",\n period: r?.normalPeriodDuration || void 0,\n introPrice: t?.introPrice?.price?.formattedPrice || void 0,\n introPriceAmount: t?.introPrice?.price?.amountMicros ? (t.introPrice.price.amountMicros / 1e6).toFixed(2) : void 0,\n introPricePeriod: t?.introPrice?.periodDuration || void 0,\n introPriceCycles: t?.introPrice?.cycleCount || void 0,\n freeTrialPeriod: t?.trial?.periodDuration || void 0,\n entitlement: n\n };\n}, be = (e) => {\n const o = Object.keys(e.entitlements.active);\n if (o.length > 0) {\n const r = o[0], t = e.entitlements.active[r];\n return {\n isActive: !0,\n expirationDate: t.expirationDate ? new Date(t.expirationDate) : void 0,\n purchaseDate: t.latestPurchaseDate ? new Date(t.latestPurchaseDate) : void 0,\n productIdentifier: t.productIdentifier,\n willRenew: t.willRenew,\n isSandbox: t.isSandbox,\n unsubscribeDetectedAt: t.unsubscribeDetectedAt ? new Date(t.unsubscribeDetectedAt) : void 0,\n billingIssueDetectedAt: t.billingIssueDetectedAt ? new Date(t.billingIssueDetectedAt) : void 0,\n activeEntitlements: o\n };\n }\n return { isActive: !1 };\n}, $e = Ke(\n void 0\n), qt = ({\n apiKey: e,\n userEmail: o,\n onError: r,\n onPurchaseSuccess: t,\n children: n\n}) => {\n const [s, a] = K([]), [p, c] = K(null), [h, x] = K(!1), [S, w] = K(null), [y, j] = K(!1), [z, k] = K(null), [D, F] = K(null), [M, L] = K(null), N = !e || e === \"your_revenuecat_api_key_here\", C = Y(() => {\n a([]), c(null), F(null), L(null), w(null), j(!1), k(null), T = null;\n }, []), E = Y(async () => {\n if (T)\n try {\n const u = await T.getOfferings();\n u.current && F(u.current);\n const f = u.all;\n if (f) {\n L(f);\n const v = [];\n for (const d of Object.keys(f)) {\n const O = f[d];\n if (O?.availablePackages) {\n const W = O.metadata, Q = O.availablePackages.map(\n (oe) => Se(oe, W)\n );\n v.push(...Q);\n }\n }\n a(v);\n } else if (u.current) {\n const v = u.current.metadata, d = u.current.availablePackages.map(\n (O) => Se(O, v)\n );\n a(d);\n }\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Failed to load offerings\";\n w(f), r?.(u instanceof Error ? u : new Error(f));\n }\n }, [r]), m = Y(async () => {\n if (T)\n try {\n const u = await T.getCustomerInfo(), f = be(u);\n c(f.isActive ? f : null);\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Failed to load subscription status\";\n w(f), r?.(u instanceof Error ? u : new Error(f));\n }\n }, [r]), V = Y(\n async (u, f) => {\n if (z && z !== u && C(), !(y && z === u))\n try {\n if (x(!0), w(null), N)\n console.warn(\n \"[SubscriptionProvider] RevenueCat API key not configured\"\n ), a([]), c(null);\n else {\n const v = await Ft(), d = {\n apiKey: e,\n appUserId: u\n };\n T = v.Purchases.configure(d);\n const O = f || o;\n if (O && T)\n try {\n await T.setAttributes({ email: O });\n } catch {\n }\n await Promise.all([E(), m()]);\n }\n k(u), j(!0);\n } catch (v) {\n const d = v instanceof Error ? v.message : \"Failed to initialize\";\n w(d), c(null), a([]), r?.(v instanceof Error ? v : new Error(d));\n } finally {\n x(!1);\n }\n },\n [\n z,\n y,\n N,\n e,\n o,\n E,\n m,\n r,\n C\n ]\n ), J = Y(\n async (u) => {\n try {\n if (x(!0), w(null), N) {\n await new Promise((W) => setTimeout(W, 2e3));\n const O = {\n isActive: !0,\n expirationDate: new Date(Date.now() + 365 * 24 * 60 * 60 * 1e3),\n purchaseDate: /* @__PURE__ */ new Date(),\n productIdentifier: u,\n willRenew: !0\n };\n return c(O), t?.(u), !0;\n }\n if (!T || !D && !M)\n throw new Error(\"Subscription service not initialized\");\n let f;\n if (M)\n for (const O of Object.keys(M)) {\n const W = M[O];\n if (W?.availablePackages && (f = W.availablePackages.find(\n (Q) => Q.identifier === u\n ), f))\n break;\n }\n else D && (f = D.availablePackages.find(\n (W) => W.identifier === u\n ));\n if (!f)\n throw new Error(`Package not found: ${u}`);\n const v = await T.purchase({\n rcPackage: f,\n ...o ? { customerEmail: o } : {}\n }), d = be(v.customerInfo);\n return c(d.isActive ? d : null), d.isActive && t?.(u), d.isActive;\n } catch (f) {\n const v = f instanceof Error ? f.message : \"Purchase failed\";\n return w(v), r?.(f instanceof Error ? f : new Error(v)), !1;\n } finally {\n x(!1);\n }\n },\n [\n N,\n D,\n M,\n o,\n t,\n r\n ]\n ), H = Y(async () => {\n try {\n if (x(!0), w(null), N)\n return await new Promise((v) => setTimeout(v, 1e3)), w(\"No previous purchases found\"), !1;\n if (!T)\n throw new Error(\"Subscription service not initialized\");\n const u = await T.getCustomerInfo(), f = be(u);\n return c(f.isActive ? f : null), f.isActive || w(\"No previous purchases found\"), f.isActive;\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Restore failed\";\n return w(f), r?.(u instanceof Error ? u : new Error(f)), !1;\n } finally {\n x(!1);\n }\n }, [N, r]), I = Y(async () => {\n if (!N)\n try {\n w(null), await Promise.all([m(), E()]);\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Refresh failed\";\n w(f), r?.(u instanceof Error ? u : new Error(f));\n }\n }, [N, m, E, r]), U = Y(() => {\n w(null);\n }, []);\n Ye(() => {\n if (!y || N || !T) return;\n const u = setInterval(\n () => {\n m().catch(() => {\n });\n },\n 300 * 1e3\n );\n return () => clearInterval(u);\n }, [y, N, m]);\n const re = {\n products: s,\n currentSubscription: p,\n isLoading: h,\n error: S,\n initialize: V,\n purchase: J,\n restore: H,\n refresh: I,\n clearError: U\n };\n return /* @__PURE__ */ g($e.Provider, { value: re, children: n });\n}, Xt = () => {\n const e = qe($e);\n if (!e)\n throw new Error(\n \"useSubscriptionContext must be used within a SubscriptionProvider\"\n );\n return e;\n}, Vt = () => {\n try {\n const e = [];\n for (let r = 0; r < localStorage.length; r++) {\n const t = localStorage.key(r);\n t && (t.includes(\"revenuecat\") || t.includes(\"rcb\") || t.includes(\"rc_\")) && e.push(t);\n }\n e.forEach((r) => localStorage.removeItem(r));\n const o = [];\n for (let r = 0; r < sessionStorage.length; r++) {\n const t = sessionStorage.key(r);\n t && (t.includes(\"revenuecat\") || t.includes(\"rcb\") || t.includes(\"rc_\")) && o.push(t);\n }\n o.forEach((r) => sessionStorage.removeItem(r));\n } catch {\n }\n}, Jt = () => {\n try {\n T && (T.close(), T = null), Vt();\n } catch {\n }\n};\nexport {\n Yt as SegmentedControl,\n Kt as SubscriptionLayout,\n qt as SubscriptionProvider,\n _t as SubscriptionTile,\n Vt as clearRevenueCatCheckoutSessions,\n Jt as closeRevenueCatInstance,\n P as cn,\n Xt as useSubscriptionContext\n};\n","/**\n * @fileoverview App Subscriptions Page\n * @description Page for managing app subscriptions and viewing rate limits\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n SubscriptionLayout,\n SubscriptionTile,\n SegmentedControl,\n} from '@sudobility/subscription-components';\nimport type { RateLimitsConfigData, RateLimitTier } from '@sudobility/types';\n\ntype BillingPeriod = 'monthly' | 'yearly';\n\n/** Product from subscription provider */\nexport interface SubscriptionProduct {\n identifier: string;\n title: string;\n price: string;\n priceString: string;\n period?: string;\n freeTrialPeriod?: string;\n introPrice?: string;\n}\n\n/** Current subscription state */\nexport interface CurrentSubscription {\n isActive: boolean;\n productIdentifier?: string;\n expirationDate?: Date;\n willRenew?: boolean;\n}\n\n/** Subscription context value passed from consumer */\nexport interface SubscriptionContextValue {\n products: SubscriptionProduct[];\n currentSubscription: CurrentSubscription | null;\n isLoading: boolean;\n error: string | null;\n purchase: (productId: string) => Promise<boolean>;\n restore: () => Promise<boolean>;\n clearError: () => void;\n}\n\n/** All localized labels for the subscription page */\nexport interface SubscriptionPageLabels {\n title: string;\n errorTitle: string;\n purchaseError: string;\n restoreError: string;\n restoreNoPurchases: string;\n\n // Periods\n periodYear: string;\n periodMonth: string;\n periodWeek: string;\n\n // Billing period toggle\n billingMonthly: string;\n billingYearly: string;\n\n // Rate limits\n unlimited: string;\n unlimitedRequests: string;\n\n // Current status\n currentStatusLabel: string;\n statusActive: string;\n statusInactive: string;\n statusInactiveMessage: string;\n labelPlan: string;\n labelPremium: string;\n labelExpires: string;\n labelWillRenew: string;\n labelMonthlyUsage: string;\n labelDailyUsage: string;\n yes: string;\n no: string;\n\n // Buttons\n buttonSubscribe: string;\n buttonPurchasing: string;\n buttonRestore: string;\n buttonRestoring: string;\n\n // Empty states\n noProducts: string;\n noProductsForPeriod: string;\n\n // Free tier\n freeTierTitle: string;\n freeTierPrice: string;\n freeTierFeatures: string[];\n\n // Badges\n currentPlanBadge: string;\n}\n\n/** Formatter functions for dynamic strings */\nexport interface SubscriptionPageFormatters {\n /** Format rate limit: \"1,000 requests/hour\" */\n formatHourlyLimit: (limit: string) => string;\n /** Format rate limit: \"10,000 requests/day\" */\n formatDailyLimit: (limit: string) => string;\n /** Format rate limit: \"100,000 requests/month\" */\n formatMonthlyLimit: (limit: string) => string;\n /** Format trial period: \"7 days free trial\" */\n formatTrialDays: (count: number) => string;\n /** Format trial period: \"2 weeks free trial\" */\n formatTrialWeeks: (count: number) => string;\n /** Format trial period: \"1 month free trial\" */\n formatTrialMonths: (count: number) => string;\n /** Format savings badge: \"Save 20%\" */\n formatSavePercent: (percent: number) => string;\n /** Format intro price note */\n formatIntroNote: (price: string) => string;\n}\n\nexport interface AppSubscriptionsPageProps {\n /** Subscription context value */\n subscription: SubscriptionContextValue;\n /** Rate limit configuration */\n rateLimitsConfig?: RateLimitsConfigData | null;\n /** User ID used for subscription (the selected entity's ID when logged in) */\n subscriptionUserId?: string;\n /** All localized labels */\n labels: SubscriptionPageLabels;\n /** Formatter functions for dynamic strings */\n formatters: SubscriptionPageFormatters;\n /** Package ID to entitlement mapping */\n packageEntitlementMap?: Record<string, string>;\n /** Called when purchase succeeds */\n onPurchaseSuccess?: () => void;\n /** Called when restore succeeds */\n onRestoreSuccess?: () => void;\n /** Called on error */\n onError?: (title: string, message: string) => void;\n /** Called on warning */\n onWarning?: (title: string, message: string) => void;\n}\n\n// Default package ID to entitlement mapping\nconst DEFAULT_PACKAGE_ENTITLEMENT_MAP: Record<string, string> = {\n ultra_yearly: 'bandwidth_ultra',\n ultra_monthly: 'bandwidth_ultra',\n pro_yearly: 'bandwidth_pro',\n pro_monthly: 'bandwidth_pro',\n dev_yearly: 'bandwidth_dev',\n dev_monthly: 'bandwidth_dev',\n};\n\n/**\n * Page for managing app subscriptions.\n */\nexport function AppSubscriptionsPage({\n subscription,\n rateLimitsConfig,\n labels,\n formatters,\n packageEntitlementMap = DEFAULT_PACKAGE_ENTITLEMENT_MAP,\n onPurchaseSuccess,\n onRestoreSuccess,\n onError,\n onWarning,\n}: AppSubscriptionsPageProps) {\n const {\n products,\n currentSubscription,\n isLoading,\n error,\n purchase,\n restore,\n clearError,\n } = subscription;\n\n const [billingPeriod, setBillingPeriod] = useState<BillingPeriod>('monthly');\n const [selectedPlan, setSelectedPlan] = useState<string | null>(null);\n const [isPurchasing, setIsPurchasing] = useState(false);\n const [isRestoring, setIsRestoring] = useState(false);\n\n // Show error via callback\n useEffect(() => {\n if (error) {\n onError?.(labels.errorTitle, error);\n clearError();\n }\n }, [error, clearError, labels.errorTitle, onError]);\n\n // Filter products by billing period and sort by price\n const filteredProducts = products\n .filter(product => {\n if (!product.period) return false;\n const isYearly =\n product.period.includes('Y') || product.period.includes('year');\n return billingPeriod === 'yearly' ? isYearly : !isYearly;\n })\n .sort((a, b) => parseFloat(a.price) - parseFloat(b.price));\n\n const handlePeriodChange = (period: BillingPeriod) => {\n setBillingPeriod(period);\n setSelectedPlan(null);\n };\n\n const handlePurchase = async () => {\n if (!selectedPlan) return;\n\n setIsPurchasing(true);\n clearError();\n\n try {\n const result = await purchase(selectedPlan);\n if (result) {\n onPurchaseSuccess?.();\n setSelectedPlan(null);\n }\n } catch (err) {\n onError?.(\n labels.errorTitle,\n err instanceof Error ? err.message : labels.purchaseError\n );\n } finally {\n setIsPurchasing(false);\n }\n };\n\n const handleRestore = async () => {\n setIsRestoring(true);\n clearError();\n\n try {\n const result = await restore();\n if (result) {\n onRestoreSuccess?.();\n } else {\n onWarning?.(labels.errorTitle, labels.restoreNoPurchases);\n }\n } catch (err) {\n onError?.(\n labels.errorTitle,\n err instanceof Error ? err.message : labels.restoreError\n );\n } finally {\n setIsRestoring(false);\n }\n };\n\n const formatExpirationDate = useCallback((date?: Date) => {\n if (!date) return '';\n return new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n }, []);\n\n const getPeriodLabel = useCallback(\n (period?: string) => {\n if (!period) return '';\n if (period.includes('Y') || period.includes('year'))\n return labels.periodYear;\n if (period.includes('M') || period.includes('month'))\n return labels.periodMonth;\n if (period.includes('W') || period.includes('week'))\n return labels.periodWeek;\n return '';\n },\n [labels]\n );\n\n const getTrialLabel = useCallback(\n (trialPeriod?: string) => {\n if (!trialPeriod) return undefined;\n const num = parseInt(trialPeriod.replace(/\\D/g, '') || '1', 10);\n if (trialPeriod.includes('W')) {\n return formatters.formatTrialWeeks(num);\n }\n if (trialPeriod.includes('M')) {\n return formatters.formatTrialMonths(num);\n }\n return formatters.formatTrialDays(num);\n },\n [formatters]\n );\n\n const getRateLimitTierForProduct = useCallback(\n (packageId: string): RateLimitTier | undefined => {\n if (!rateLimitsConfig?.tiers) return undefined;\n\n const entitlement = packageEntitlementMap[packageId];\n if (entitlement) {\n return rateLimitsConfig.tiers.find(\n tier => tier.entitlement === entitlement\n );\n }\n\n return rateLimitsConfig.tiers.find(tier => tier.entitlement === 'none');\n },\n [rateLimitsConfig, packageEntitlementMap]\n );\n\n const formatRateLimit = useCallback(\n (limit: number | null): string => {\n if (limit === null) return labels.unlimited;\n return limit.toLocaleString();\n },\n [labels.unlimited]\n );\n\n const getRateLimitFeatures = useCallback(\n (packageId: string): string[] => {\n const tier = getRateLimitTierForProduct(packageId);\n if (!tier) return [];\n\n const features: string[] = [];\n\n if (tier.limits.hourly !== null) {\n features.push(\n formatters.formatHourlyLimit(formatRateLimit(tier.limits.hourly))\n );\n }\n if (tier.limits.daily !== null) {\n features.push(\n formatters.formatDailyLimit(formatRateLimit(tier.limits.daily))\n );\n }\n if (tier.limits.monthly !== null) {\n features.push(\n formatters.formatMonthlyLimit(formatRateLimit(tier.limits.monthly))\n );\n }\n\n if (\n tier.limits.hourly === null &&\n tier.limits.daily === null &&\n tier.limits.monthly === null\n ) {\n features.push(labels.unlimitedRequests);\n }\n\n return features;\n },\n [\n getRateLimitTierForProduct,\n formatRateLimit,\n formatters,\n labels.unlimitedRequests,\n ]\n );\n\n const getProductFeatures = useCallback(\n (packageId: string): string[] => {\n return getRateLimitFeatures(packageId);\n },\n [getRateLimitFeatures]\n );\n\n const getFreeTierFeatures = useCallback((): string[] => {\n const benefits = [...labels.freeTierFeatures];\n\n if (rateLimitsConfig?.tiers) {\n const freeTier = rateLimitsConfig.tiers.find(\n tier => tier.entitlement === 'none'\n );\n if (freeTier) {\n if (freeTier.limits.hourly !== null) {\n benefits.push(\n formatters.formatHourlyLimit(\n formatRateLimit(freeTier.limits.hourly)\n )\n );\n }\n if (freeTier.limits.daily !== null) {\n benefits.push(\n formatters.formatDailyLimit(formatRateLimit(freeTier.limits.daily))\n );\n }\n if (freeTier.limits.monthly !== null) {\n benefits.push(\n formatters.formatMonthlyLimit(\n formatRateLimit(freeTier.limits.monthly)\n )\n );\n }\n }\n }\n\n return benefits;\n }, [rateLimitsConfig, formatRateLimit, formatters, labels.freeTierFeatures]);\n\n const getYearlySavingsPercent = useCallback(\n (yearlyPackageId: string): number | undefined => {\n const yearlyEntitlement = packageEntitlementMap[yearlyPackageId];\n if (!yearlyEntitlement) return undefined;\n\n const yearlyProduct = products.find(\n p => p.identifier === yearlyPackageId\n );\n if (!yearlyProduct) return undefined;\n\n const monthlyPackageId = Object.entries(packageEntitlementMap).find(\n ([pkgId, ent]) => ent === yearlyEntitlement && pkgId.includes('monthly')\n )?.[0];\n if (!monthlyPackageId) return undefined;\n\n const monthlyProduct = products.find(\n p => p.identifier === monthlyPackageId\n );\n if (!monthlyProduct) return undefined;\n\n const yearlyPrice = parseFloat(yearlyProduct.price);\n const monthlyPrice = parseFloat(monthlyProduct.price);\n\n if (monthlyPrice <= 0 || yearlyPrice <= 0) return undefined;\n\n const annualizedMonthly = monthlyPrice * 12;\n const savings =\n ((annualizedMonthly - yearlyPrice) / annualizedMonthly) * 100;\n\n return Math.round(savings);\n },\n [products, packageEntitlementMap]\n );\n\n const billingPeriodOptions = [\n { value: 'monthly' as const, label: labels.billingMonthly },\n { value: 'yearly' as const, label: labels.billingYearly },\n ];\n\n return (\n <SubscriptionLayout\n title={labels.title}\n error={error}\n currentStatusLabel={labels.currentStatusLabel}\n currentStatus={{\n isActive: currentSubscription?.isActive ?? false,\n activeContent: currentSubscription?.isActive\n ? {\n title: labels.statusActive,\n fields: [\n {\n label: labels.labelPlan,\n value:\n currentSubscription.productIdentifier ||\n labels.labelPremium,\n },\n {\n label: labels.labelExpires,\n value: formatExpirationDate(\n currentSubscription.expirationDate\n ),\n },\n {\n label: labels.labelWillRenew,\n value: currentSubscription.willRenew ? labels.yes : labels.no,\n },\n ...(rateLimitsConfig\n ? [\n {\n label: labels.labelMonthlyUsage,\n value: `${rateLimitsConfig.currentUsage.monthly.toLocaleString()} / ${formatRateLimit(rateLimitsConfig.currentLimits.monthly)}`,\n },\n {\n label: labels.labelDailyUsage,\n value: `${rateLimitsConfig.currentUsage.daily.toLocaleString()} / ${formatRateLimit(rateLimitsConfig.currentLimits.daily)}`,\n },\n ]\n : []),\n ],\n }\n : undefined,\n inactiveContent: !currentSubscription?.isActive\n ? {\n title: labels.statusInactive,\n message: labels.statusInactiveMessage,\n }\n : undefined,\n }}\n aboveProducts={\n !isLoading && products.length > 0 ? (\n <div className='flex justify-center mb-6'>\n <SegmentedControl\n options={billingPeriodOptions}\n value={billingPeriod}\n onChange={handlePeriodChange}\n />\n </div>\n ) : null\n }\n primaryAction={{\n label: isPurchasing ? labels.buttonPurchasing : labels.buttonSubscribe,\n onClick: handlePurchase,\n disabled: !selectedPlan || isPurchasing || isRestoring,\n loading: isPurchasing,\n }}\n secondaryAction={{\n label: isRestoring ? labels.buttonRestoring : labels.buttonRestore,\n onClick: handleRestore,\n disabled: isPurchasing || isRestoring,\n loading: isRestoring,\n }}\n >\n {isLoading ? (\n <div className='flex items-center justify-center py-12'>\n <div className='animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600' />\n </div>\n ) : products.length === 0 ? (\n <div className='text-center py-12 text-theme-text-secondary'>\n {labels.noProducts}\n </div>\n ) : filteredProducts.length === 0 ? (\n <div className='text-center py-12 text-theme-text-secondary'>\n {labels.noProductsForPeriod}\n </div>\n ) : (\n <>\n {/* Free tier tile */}\n <SubscriptionTile\n key='free'\n id='free'\n title={labels.freeTierTitle}\n price={labels.freeTierPrice}\n periodLabel={labels.periodMonth}\n features={getFreeTierFeatures()}\n isSelected={!currentSubscription?.isActive && selectedPlan === null}\n onSelect={() => setSelectedPlan(null)}\n topBadge={\n !currentSubscription?.isActive\n ? {\n text: labels.currentPlanBadge,\n color: 'green',\n }\n : undefined\n }\n disabled={isPurchasing || isRestoring}\n hideSelectionIndicator\n />\n {/* Paid plans */}\n {filteredProducts.map(product => (\n <SubscriptionTile\n key={product.identifier}\n id={product.identifier}\n title={product.title}\n price={product.priceString}\n periodLabel={getPeriodLabel(product.period)}\n features={getProductFeatures(product.identifier)}\n isSelected={selectedPlan === product.identifier}\n onSelect={() => setSelectedPlan(product.identifier)}\n isBestValue={product.identifier.includes('pro')}\n discountBadge={\n product.period?.includes('Y')\n ? (() => {\n const savings = getYearlySavingsPercent(\n product.identifier\n );\n return savings && savings > 0\n ? {\n text: formatters.formatSavePercent(savings),\n isBestValue: true,\n }\n : undefined;\n })()\n : undefined\n }\n introPriceNote={\n product.freeTrialPeriod\n ? getTrialLabel(product.freeTrialPeriod)\n : product.introPrice\n ? formatters.formatIntroNote(product.introPrice)\n : undefined\n }\n disabled={isPurchasing || isRestoring}\n />\n ))}\n </>\n )}\n </SubscriptionLayout>\n );\n}\n","/**\n * @fileoverview App Pricing Page\n * @description Public pricing page for displaying subscription options\n */\n\nimport { useState, useCallback } from 'react';\nimport {\n SubscriptionTile,\n SegmentedControl,\n} from '@sudobility/subscription-components';\n\ntype BillingPeriod = 'monthly' | 'yearly';\n\n/** Product from subscription provider */\nexport interface PricingProduct {\n identifier: string;\n title: string;\n price: string;\n priceString: string;\n period?: string;\n}\n\n/** FAQ item */\nexport interface FAQItem {\n question: string;\n answer: string;\n}\n\n/** All localized labels for the pricing page */\nexport interface PricingPageLabels {\n // Header\n title: string;\n subtitle: string;\n\n // Periods\n periodYear: string;\n periodMonth: string;\n periodWeek: string;\n\n // Billing period toggle\n billingMonthly: string;\n billingYearly: string;\n\n // Free tier\n freeTierTitle: string;\n freeTierPrice: string;\n freeTierFeatures: string[];\n\n // Badges\n currentPlanBadge: string;\n mostPopularBadge: string;\n\n // CTA buttons\n ctaLogIn: string;\n ctaTryFree: string;\n ctaUpgrade: string;\n\n // FAQ\n faqTitle: string;\n}\n\n/** Formatter functions for dynamic strings */\nexport interface PricingPageFormatters {\n /** Format savings badge: \"Save 20%\" */\n formatSavePercent: (percent: number) => string;\n /** Get features for a product by its identifier */\n getProductFeatures: (productId: string) => string[];\n}\n\n/** Package ID to entitlement mapping */\nexport interface EntitlementMap {\n [packageId: string]: string;\n}\n\n/** Entitlement to level mapping for comparing plan tiers */\nexport interface EntitlementLevels {\n [entitlement: string]: number;\n}\n\nexport interface AppPricingPageProps {\n /** Available subscription products */\n products: PricingProduct[];\n /** Whether user is authenticated */\n isAuthenticated: boolean;\n /** Whether user has an active subscription */\n hasActiveSubscription: boolean;\n /** Current subscription product identifier (if any) */\n currentProductIdentifier?: string;\n /** User ID used for subscription (the selected entity's ID when logged in) */\n subscriptionUserId?: string;\n /** All localized labels */\n labels: PricingPageLabels;\n /** Formatter functions */\n formatters: PricingPageFormatters;\n /** Package ID to entitlement mapping for calculating savings */\n entitlementMap: EntitlementMap;\n /** Entitlement to level mapping for comparing tiers (higher = better) */\n entitlementLevels: EntitlementLevels;\n /** Called when user clicks on a plan */\n onPlanClick: (planIdentifier: string) => void;\n /** Called when user clicks on free plan */\n onFreePlanClick: () => void;\n /** Optional FAQ items */\n faqItems?: FAQItem[];\n /** Optional className for the container */\n className?: string;\n}\n\n/**\n * Public pricing page for displaying subscription options.\n * - Non-authenticated: Free tile shows \"Try it for Free\", paid tiles show \"Log in to Continue\"\n * - Authenticated on free: Free tile shows \"Current Plan\" badge (no CTA), paid tiles show \"Upgrade\"\n * - Authenticated with subscription: Current plan shows badge (no CTA), higher tiers show \"Upgrade\"\n */\nexport function AppPricingPage({\n products,\n isAuthenticated,\n hasActiveSubscription,\n currentProductIdentifier,\n labels,\n formatters,\n entitlementMap,\n entitlementLevels,\n onPlanClick,\n onFreePlanClick,\n faqItems,\n className,\n}: AppPricingPageProps) {\n const [billingPeriod, setBillingPeriod] = useState<BillingPeriod>('monthly');\n\n // Get entitlement level for a product (0 for free/none)\n const getProductLevel = useCallback(\n (productId: string): number => {\n const entitlement = entitlementMap[productId];\n if (!entitlement) return 0;\n return entitlementLevels[entitlement] ?? 0;\n },\n [entitlementMap, entitlementLevels]\n );\n\n // Get current user's subscription level\n const currentLevel = currentProductIdentifier\n ? getProductLevel(currentProductIdentifier)\n : 0;\n\n // Filter products by billing period and sort by price\n const filteredProducts = products\n .filter(product => {\n if (!product.period) return false;\n const isYearly =\n product.period.includes('Y') || product.period.includes('year');\n return billingPeriod === 'yearly' ? isYearly : !isYearly;\n })\n .sort((a, b) => parseFloat(a.price) - parseFloat(b.price));\n\n const getPeriodLabel = useCallback(\n (period?: string) => {\n if (!period) return '';\n if (period.includes('Y') || period.includes('year'))\n return labels.periodYear;\n if (period.includes('M') || period.includes('month'))\n return labels.periodMonth;\n if (period.includes('W') || period.includes('week'))\n return labels.periodWeek;\n return '';\n },\n [labels]\n );\n\n const getYearlySavingsPercent = useCallback(\n (yearlyPackageId: string): number | undefined => {\n const yearlyEntitlement = entitlementMap[yearlyPackageId];\n if (!yearlyEntitlement) return undefined;\n\n const yearlyProduct = products.find(\n p => p.identifier === yearlyPackageId\n );\n if (!yearlyProduct) return undefined;\n\n const monthlyPackageId = Object.entries(entitlementMap).find(\n ([pkgId, ent]) => ent === yearlyEntitlement && pkgId.includes('monthly')\n )?.[0];\n if (!monthlyPackageId) return undefined;\n\n const monthlyProduct = products.find(\n p => p.identifier === monthlyPackageId\n );\n if (!monthlyProduct) return undefined;\n\n const yearlyPrice = parseFloat(yearlyProduct.price);\n const monthlyPrice = parseFloat(monthlyProduct.price);\n\n if (monthlyPrice <= 0 || yearlyPrice <= 0) return undefined;\n\n const annualizedMonthly = monthlyPrice * 12;\n const savings =\n ((annualizedMonthly - yearlyPrice) / annualizedMonthly) * 100;\n\n return Math.round(savings);\n },\n [products, entitlementMap]\n );\n\n const billingPeriodOptions = [\n { value: 'monthly' as const, label: labels.billingMonthly },\n { value: 'yearly' as const, label: labels.billingYearly },\n ];\n\n // Determine if a product is the current plan (same entitlement level)\n const isCurrentPlan = useCallback(\n (productId: string): boolean => {\n if (!isAuthenticated) return false;\n if (!hasActiveSubscription) return false;\n // Compare entitlement levels (handles monthly/yearly variants of same tier)\n return getProductLevel(productId) === currentLevel && currentLevel > 0;\n },\n [isAuthenticated, hasActiveSubscription, getProductLevel, currentLevel]\n );\n\n // Determine if a product is an upgrade from current plan\n const isUpgrade = useCallback(\n (productId: string): boolean => {\n const productLevel = getProductLevel(productId);\n return productLevel > currentLevel;\n },\n [getProductLevel, currentLevel]\n );\n\n return (\n <div className={className}>\n {/* Header */}\n <section className='py-16 px-4 sm:px-6 lg:px-8'>\n <div className='max-w-4xl mx-auto text-center'>\n <h1 className='text-4xl sm:text-5xl font-bold text-theme-text-primary mb-4'>\n {labels.title}\n </h1>\n <p className='text-lg text-theme-text-secondary'>{labels.subtitle}</p>\n </div>\n </section>\n\n {/* Pricing Cards */}\n <section className='pb-20 px-4 sm:px-6 lg:px-8'>\n <div className='max-w-6xl mx-auto'>\n {/* Billing Period Selector */}\n <div className='flex justify-center mb-8'>\n <SegmentedControl\n options={billingPeriodOptions}\n value={billingPeriod}\n onChange={(value: string) =>\n setBillingPeriod(value as BillingPeriod)\n }\n />\n </div>\n\n {/* Subscription Tiles Grid */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns:\n 'repeat(auto-fit, minmax(min(100%, 280px), 1fr))',\n gap: '1.5rem',\n }}\n >\n {/* Free Tier */}\n <SubscriptionTile\n id='free'\n title={labels.freeTierTitle}\n price={labels.freeTierPrice}\n periodLabel={labels.periodMonth}\n features={labels.freeTierFeatures}\n isSelected={false}\n onSelect={() => {}}\n topBadge={\n isAuthenticated && !hasActiveSubscription\n ? {\n text: labels.currentPlanBadge,\n color: 'green',\n }\n : undefined\n }\n ctaButton={\n // Not logged in: show \"Try it for Free\"\n // Logged in on free plan: no CTA (current plan)\n // Logged in with subscription: no CTA (can't downgrade here)\n !isAuthenticated\n ? {\n label: labels.ctaTryFree,\n onClick: onFreePlanClick,\n }\n : undefined\n }\n hideSelectionIndicator={isAuthenticated}\n />\n\n {/* Paid Plans */}\n {filteredProducts.map(product => {\n const isCurrent = isCurrentPlan(product.identifier);\n const canUpgrade = isUpgrade(product.identifier);\n\n // Determine CTA button\n let ctaButton: { label: string; onClick: () => void } | undefined;\n if (!isAuthenticated) {\n // Not logged in: show \"Log in to Continue\"\n ctaButton = {\n label: labels.ctaLogIn,\n onClick: () => onPlanClick(product.identifier),\n };\n } else if (isCurrent) {\n // Current plan: no CTA\n ctaButton = undefined;\n } else if (canUpgrade) {\n // Higher tier: show \"Upgrade\"\n ctaButton = {\n label: labels.ctaUpgrade,\n onClick: () => onPlanClick(product.identifier),\n };\n }\n // Lower tier than current: no CTA (implicit downgrade not shown)\n\n // Determine top badge\n let topBadge:\n | {\n text: string;\n color: 'purple' | 'green' | 'blue' | 'yellow' | 'red';\n }\n | undefined;\n if (isCurrent) {\n topBadge = {\n text: labels.currentPlanBadge,\n color: 'green',\n };\n } else if (product.identifier.includes('pro')) {\n topBadge = {\n text: labels.mostPopularBadge,\n color: 'yellow',\n };\n }\n\n return (\n <SubscriptionTile\n key={product.identifier}\n id={product.identifier}\n title={product.title}\n price={product.priceString}\n periodLabel={getPeriodLabel(product.period)}\n features={formatters.getProductFeatures(product.identifier)}\n isSelected={false}\n onSelect={() => {}}\n isBestValue={product.identifier.includes('pro')}\n topBadge={topBadge}\n discountBadge={\n product.period?.includes('Y')\n ? (() => {\n const savings = getYearlySavingsPercent(\n product.identifier\n );\n return savings && savings > 0\n ? {\n text: formatters.formatSavePercent(savings),\n isBestValue: true,\n }\n : undefined;\n })()\n : undefined\n }\n ctaButton={ctaButton}\n hideSelectionIndicator={!ctaButton}\n />\n );\n })}\n </div>\n </div>\n </section>\n\n {/* FAQ Section */}\n {faqItems && faqItems.length > 0 && (\n <section className='py-20 px-4 sm:px-6 lg:px-8 bg-theme-bg-secondary'>\n <div className='max-w-3xl mx-auto'>\n <h2 className='text-3xl font-bold text-theme-text-primary text-center mb-12'>\n {labels.faqTitle}\n </h2>\n\n <div className='space-y-6'>\n {faqItems.map((item, index) => (\n <div\n key={index}\n className='bg-theme-bg-primary p-6 rounded-xl border border-theme-border'\n >\n <h3 className='text-lg font-semibold text-theme-text-primary mb-2'>\n {item.question}\n </h3>\n <p className='text-theme-text-secondary'>{item.answer}</p>\n </div>\n ))}\n </div>\n </div>\n </section>\n )}\n </div>\n );\n}\n","import React, { type ComponentType, type ReactNode } from 'react';\nimport {\n ChevronRightIcon,\n HomeIcon,\n DocumentTextIcon,\n EnvelopeIcon,\n CogIcon,\n LanguageIcon,\n} from '@heroicons/react/24/outline';\nimport type { LinkComponentProps } from '../../types';\n\n/**\n * Configuration for a single sitemap link\n */\nexport interface SitemapLink {\n /** URL path */\n path: string;\n /** Display label */\n label: string;\n /** Optional description */\n description?: string;\n}\n\n/**\n * Configuration for a sitemap section\n */\nexport interface SitemapSection {\n /** Section title */\n title: string;\n /** Section icon type (optional) */\n icon?: 'home' | 'document' | 'envelope' | 'cog' | 'language';\n /** Links in this section */\n links: SitemapLink[];\n}\n\n/**\n * Configuration for a language option\n */\nexport interface LanguageOption {\n /** Language code (e.g., 'en', 'es') */\n code: string;\n /** Display name */\n name: string;\n /** Flag emoji */\n flag: string;\n}\n\n/**\n * Configuration for quick action buttons\n */\nexport interface QuickLink {\n /** URL path */\n path: string;\n /** Display label */\n label: string;\n /** Button variant */\n variant: 'primary' | 'secondary' | 'outline';\n /** Optional icon */\n icon?: 'envelope' | 'document';\n}\n\n/**\n * Text content for the sitemap page\n */\nexport interface SitemapPageText {\n /** Page title */\n title: string;\n /** Page subtitle */\n subtitle: string;\n /** Languages section title */\n languagesSectionTitle: string;\n /** Languages section description */\n languagesDescription: string;\n /** Quick links section title */\n quickLinksTitle: string;\n}\n\n/**\n * Props for AppSitemapPage component\n */\nexport interface AppSitemapPageProps {\n /** All text content (must be provided by consumer) */\n text: SitemapPageText;\n /** Sitemap sections */\n sections: SitemapSection[];\n /** Available languages */\n languages: LanguageOption[];\n /** Quick action links */\n quickLinks?: QuickLink[];\n /** Custom Link component for navigation */\n LinkComponent: ComponentType<LinkComponentProps & { language?: string }>;\n /** Optional wrapper component for the page layout */\n PageWrapper?: ComponentType<{ children: ReactNode }>;\n /** Optional className for the container */\n className?: string;\n}\n\n/**\n * Get icon component based on icon type\n */\nconst getIcon = (icon?: string) => {\n switch (icon) {\n case 'home':\n return <HomeIcon className='w-5 h-5 mr-2' />;\n case 'document':\n return <DocumentTextIcon className='w-5 h-5 mr-2' />;\n case 'envelope':\n return <EnvelopeIcon className='w-5 h-5 mr-2' />;\n case 'cog':\n return <CogIcon className='w-5 h-5 mr-2' />;\n case 'language':\n return <LanguageIcon className='w-5 h-5 mr-2' />;\n default:\n return null;\n }\n};\n\n/**\n * AppSitemapPage - A reusable sitemap page component\n *\n * Displays a comprehensive sitemap with:\n * - Language selector\n * - Organized sections with links\n * - Quick action buttons\n *\n * All text content must be provided by the consumer app.\n *\n * @example\n * ```tsx\n * <AppSitemapPage\n * text={{\n * title: \"Sitemap\",\n * subtitle: \"Explore all pages\",\n * languagesSectionTitle: \"Languages\",\n * languagesDescription: \"Available in multiple languages\",\n * quickLinksTitle: \"Quick Links\"\n * }}\n * sections={[\n * { title: \"Main\", icon: \"home\", links: [{ path: \"/\", label: \"Home\" }] }\n * ]}\n * languages={[{ code: \"en\", name: \"English\", flag: \"🇺🇸\" }]}\n * LinkComponent={LocalizedLink}\n * />\n * ```\n */\nexport const AppSitemapPage: React.FC<AppSitemapPageProps> = ({\n text,\n sections,\n languages,\n quickLinks = [],\n LinkComponent,\n PageWrapper,\n className,\n}) => {\n const content = (\n <div className={`max-w-7xl mx-auto px-4 py-12 ${className || ''}`}>\n {/* Header */}\n <div className='text-center mb-12'>\n <h1 className='text-4xl font-bold text-gray-900 dark:text-white mb-4'>\n {text.title}\n </h1>\n <p className='text-xl text-gray-600 dark:text-gray-300'>\n {text.subtitle}\n </p>\n </div>\n\n {/* Language Section */}\n {languages.length > 0 && (\n <div className='mb-12 p-6 bg-blue-50 dark:bg-blue-900/20 rounded-lg'>\n <h2 className='text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center'>\n <LanguageIcon className='w-6 h-6 mr-2' />\n {text.languagesSectionTitle}\n </h2>\n <p className='text-gray-600 dark:text-gray-300 mb-6'>\n {text.languagesDescription}\n </p>\n <div className='grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4'>\n {languages.map(lang => (\n <LinkComponent\n key={lang.code}\n href='/'\n language={lang.code}\n className='flex items-center space-x-2 p-3 bg-white dark:bg-gray-800 rounded-lg hover:shadow-md transition-shadow'\n >\n <span className='text-2xl'>{lang.flag}</span>\n <div className='font-medium text-gray-900 dark:text-white'>\n {lang.name}\n </div>\n </LinkComponent>\n ))}\n </div>\n </div>\n )}\n\n {/* Sitemap Grid */}\n <div className='grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8'>\n {sections.map((section, index) => (\n <div\n key={index}\n className='bg-white dark:bg-gray-800 rounded-lg shadow-sm p-6'\n >\n <h2 className='text-lg font-semibold text-gray-900 dark:text-white mb-4 flex items-center'>\n {getIcon(section.icon)}\n {section.title}\n </h2>\n <ul className='space-y-2'>\n {section.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <LinkComponent\n href={link.path}\n className='group flex items-start text-sm hover:text-blue-600 dark:hover:text-blue-400 transition-colors'\n >\n <ChevronRightIcon className='w-4 h-4 mt-0.5 mr-2 flex-shrink-0 text-gray-400 group-hover:text-blue-600 dark:group-hover:text-blue-400' />\n <div>\n <span className='font-medium text-gray-700 dark:text-gray-300 group-hover:text-blue-600 dark:group-hover:text-blue-400'>\n {link.label}\n </span>\n {link.description && (\n <span className='block text-xs text-gray-500 dark:text-gray-400 mt-0.5'>\n {link.description}\n </span>\n )}\n </div>\n </LinkComponent>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {/* Quick Links Section */}\n {quickLinks.length > 0 && (\n <div className='mt-12 p-6 bg-gray-50 dark:bg-gray-900 rounded-lg'>\n <h3 className='text-lg font-semibold text-gray-900 dark:text-white mb-4'>\n {text.quickLinksTitle}\n </h3>\n <div className='flex flex-wrap gap-3'>\n {quickLinks.map((link, index) => {\n const baseClasses =\n 'inline-flex items-center px-4 py-2 rounded-lg transition-colors';\n const variantClasses =\n link.variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700'\n : link.variant === 'secondary'\n ? 'bg-gray-600 text-white hover:bg-gray-700'\n : 'border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800';\n\n return (\n <LinkComponent\n key={index}\n href={link.path}\n className={`${baseClasses} ${variantClasses}`}\n >\n {link.icon === 'envelope' && (\n <EnvelopeIcon className='w-5 h-5 mr-2' />\n )}\n {link.icon === 'document' && (\n <DocumentTextIcon className='w-5 h-5 mr-2' />\n )}\n {link.label}\n </LinkComponent>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n\n if (PageWrapper) {\n return <PageWrapper>{content}</PageWrapper>;\n }\n\n return content;\n};\n\nexport default AppSitemapPage;\n","import React, { type ReactNode, type ComponentType } from 'react';\n\n/**\n * Configuration for a content section with a list\n */\nexport interface PrivacySectionWithList {\n /** Section title */\n title: string;\n /** Optional description before the list */\n description?: string;\n /** List items */\n items: string[];\n}\n\n/**\n * Configuration for a content section with paragraph text\n */\nexport interface PrivacySectionWithContent {\n /** Section title */\n title: string;\n /** Paragraph content */\n content: string;\n}\n\n/**\n * Configuration for a subsection (h3 level)\n */\nexport interface PrivacySubsection {\n /** Subsection title */\n title: string;\n /** List items */\n items: string[];\n}\n\n/**\n * Contact information configuration\n */\nexport interface PrivacyContactInfo {\n /** Email label (e.g., \"Email:\") */\n emailLabel: string;\n /** Email address */\n email: string;\n /** Website label (e.g., \"Website:\") */\n websiteLabel: string;\n /** Website URL */\n websiteUrl: string;\n /** Data Protection Officer label */\n dpoLabel: string;\n /** DPO email */\n dpoEmail: string;\n /** GDPR section title */\n gdprTitle: string;\n /** GDPR section content */\n gdprContent: string;\n}\n\n/**\n * All text content for the privacy policy page\n */\nexport interface PrivacyPolicyPageText {\n /** Page heading */\n heading: string;\n /** Last updated label */\n lastUpdatedLabel: string;\n /** Introduction section */\n introduction: PrivacySectionWithContent;\n /** Information We Collect section */\n informationWeCollect: {\n title: string;\n youProvide: PrivacySubsection;\n automatic: PrivacySubsection;\n };\n /** How We Use Your Information section */\n howWeUse: PrivacySectionWithList;\n /** Information Sharing section */\n informationSharing: PrivacySectionWithList;\n /** Data Security section */\n dataSecurity: PrivacySectionWithList;\n /** Data Retention section */\n dataRetention: PrivacySectionWithContent;\n /** Your Privacy Rights section */\n privacyRights: PrivacySectionWithList;\n /** Web3 Considerations section (optional) */\n web3Considerations?: PrivacySectionWithList;\n /** International Transfers section */\n internationalTransfers: PrivacySectionWithContent;\n /** Children's Privacy section */\n childrensPrivacy: PrivacySectionWithContent;\n /** Cookies section */\n cookies: PrivacySectionWithContent;\n /** Changes to Policy section */\n changes: PrivacySectionWithContent;\n /** Contact section */\n contact: {\n title: string;\n description: string;\n info: PrivacyContactInfo;\n };\n}\n\n/**\n * Props for AppPrivacyPolicyPage component\n */\nexport interface AppPrivacyPolicyPageProps {\n /** All text content (must be provided by consumer) */\n text: PrivacyPolicyPageText;\n /** Current date for \"last updated\" display */\n lastUpdatedDate?: string;\n /** Optional wrapper component for the page layout */\n PageWrapper?: ComponentType<{ children: ReactNode }>;\n /** Optional className for the container */\n className?: string;\n}\n\n/**\n * Heading component for h2 sections\n */\nconst SectionHeading: React.FC<{ children: ReactNode }> = ({ children }) => (\n <h2 className='text-2xl font-bold text-gray-900 dark:text-gray-100 mt-8 mb-4'>\n {children}\n </h2>\n);\n\n/**\n * Heading component for h3 subsections\n */\nconst SubsectionHeading: React.FC<{ children: ReactNode }> = ({ children }) => (\n <h3 className='text-xl font-semibold text-gray-900 dark:text-gray-100 mt-6 mb-3'>\n {children}\n </h3>\n);\n\n/**\n * Paragraph component\n */\nconst Paragraph: React.FC<{ children: ReactNode; className?: string }> = ({\n children,\n className = '',\n}) => (\n <p className={`text-gray-600 dark:text-gray-300 mb-6 ${className}`}>\n {children}\n </p>\n);\n\n/**\n * List component\n */\nconst List: React.FC<{ items: string[] }> = ({ items }) => (\n <ul className='list-disc list-inside text-gray-600 dark:text-gray-300 mb-6'>\n {items.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ul>\n);\n\n/**\n * AppPrivacyPolicyPage - A reusable privacy policy page component\n *\n * Displays a comprehensive privacy policy with:\n * - Standard legal sections\n * - Optional Web3-specific considerations\n * - Contact information with GDPR notice\n *\n * All text content must be provided by the consumer app.\n *\n * @example\n * ```tsx\n * <AppPrivacyPolicyPage\n * text={{\n * heading: \"Privacy Policy\",\n * lastUpdatedLabel: \"Last updated\",\n * introduction: {\n * title: \"Introduction\",\n * content: \"We respect your privacy...\"\n * },\n * // ... other sections\n * }}\n * lastUpdatedDate=\"January 1, 2025\"\n * />\n * ```\n */\nexport const AppPrivacyPolicyPage: React.FC<AppPrivacyPolicyPageProps> = ({\n text,\n lastUpdatedDate = new Date().toLocaleDateString(),\n PageWrapper,\n className,\n}) => {\n const content = (\n <div className={`max-w-7xl mx-auto px-4 py-12 ${className || ''}`}>\n <h1 className='text-4xl font-bold text-gray-900 dark:text-gray-100 mb-8'>\n {text.heading}\n </h1>\n\n <div className='prose prose-lg max-w-none'>\n <Paragraph className='mb-6'>\n {text.lastUpdatedLabel} {lastUpdatedDate}\n </Paragraph>\n\n {/* Introduction */}\n <SectionHeading>{text.introduction.title}</SectionHeading>\n <Paragraph>{text.introduction.content}</Paragraph>\n\n {/* Information We Collect */}\n <SectionHeading>{text.informationWeCollect.title}</SectionHeading>\n <SubsectionHeading>\n {text.informationWeCollect.youProvide.title}\n </SubsectionHeading>\n <List items={text.informationWeCollect.youProvide.items} />\n <SubsectionHeading>\n {text.informationWeCollect.automatic.title}\n </SubsectionHeading>\n <List items={text.informationWeCollect.automatic.items} />\n\n {/* How We Use */}\n <SectionHeading>{text.howWeUse.title}</SectionHeading>\n {text.howWeUse.description && (\n <Paragraph className='mb-4'>{text.howWeUse.description}</Paragraph>\n )}\n <List items={text.howWeUse.items} />\n\n {/* Information Sharing */}\n <SectionHeading>{text.informationSharing.title}</SectionHeading>\n {text.informationSharing.description && (\n <Paragraph className='mb-4'>\n {text.informationSharing.description}\n </Paragraph>\n )}\n <List items={text.informationSharing.items} />\n\n {/* Data Security */}\n <SectionHeading>{text.dataSecurity.title}</SectionHeading>\n {text.dataSecurity.description && (\n <Paragraph className='mb-4'>\n {text.dataSecurity.description}\n </Paragraph>\n )}\n <List items={text.dataSecurity.items} />\n\n {/* Data Retention */}\n <SectionHeading>{text.dataRetention.title}</SectionHeading>\n <Paragraph>{text.dataRetention.content}</Paragraph>\n\n {/* Privacy Rights */}\n <SectionHeading>{text.privacyRights.title}</SectionHeading>\n {text.privacyRights.description && (\n <Paragraph className='mb-4'>\n {text.privacyRights.description}\n </Paragraph>\n )}\n <List items={text.privacyRights.items} />\n\n {/* Web3 Considerations (optional) */}\n {text.web3Considerations && (\n <>\n <SectionHeading>{text.web3Considerations.title}</SectionHeading>\n {text.web3Considerations.description && (\n <Paragraph className='mb-4'>\n {text.web3Considerations.description}\n </Paragraph>\n )}\n <List items={text.web3Considerations.items} />\n </>\n )}\n\n {/* International Transfers */}\n <SectionHeading>{text.internationalTransfers.title}</SectionHeading>\n <Paragraph>{text.internationalTransfers.content}</Paragraph>\n\n {/* Children's Privacy */}\n <SectionHeading>{text.childrensPrivacy.title}</SectionHeading>\n <Paragraph>{text.childrensPrivacy.content}</Paragraph>\n\n {/* Cookies */}\n <SectionHeading>{text.cookies.title}</SectionHeading>\n <Paragraph>\n <span dangerouslySetInnerHTML={{ __html: text.cookies.content }} />\n </Paragraph>\n\n {/* Changes */}\n <SectionHeading>{text.changes.title}</SectionHeading>\n <Paragraph>{text.changes.content}</Paragraph>\n\n {/* Contact */}\n <SectionHeading>{text.contact.title}</SectionHeading>\n <Paragraph>{text.contact.description}</Paragraph>\n <div className='bg-gray-50 dark:bg-gray-800 p-4 rounded-lg'>\n <p className='text-gray-700 dark:text-gray-300'>\n {text.contact.info.emailLabel}{' '}\n <a\n href={`mailto:${text.contact.info.email}`}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.email}\n </a>\n <br />\n {text.contact.info.websiteLabel}{' '}\n <a\n href={text.contact.info.websiteUrl}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.websiteUrl}\n </a>\n <br />\n {text.contact.info.dpoLabel}{' '}\n <a\n href={`mailto:${text.contact.info.dpoEmail}`}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.dpoEmail}\n </a>\n </p>\n </div>\n\n {/* GDPR Notice */}\n <div className='mt-8 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg'>\n <h3 className='text-lg font-semibold text-blue-900 dark:text-blue-200 mb-2'>\n {text.contact.info.gdprTitle}\n </h3>\n <p className='text-blue-800 dark:text-blue-300'>\n {text.contact.info.gdprContent}{' '}\n <a\n href={`mailto:${text.contact.info.dpoEmail}`}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.dpoEmail}\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n\n if (PageWrapper) {\n return <PageWrapper>{content}</PageWrapper>;\n }\n\n return content;\n};\n\nexport default AppPrivacyPolicyPage;\n","import React, { type ReactNode, type ComponentType } from 'react';\n\n/**\n * Configuration for a section with paragraph content\n */\nexport interface TermsSectionWithContent {\n /** Section title */\n title: string;\n /** Paragraph content (can include HTML for links) */\n content: string;\n /** Whether content contains HTML that should be rendered */\n isHtml?: boolean;\n}\n\n/**\n * Configuration for a section with a list\n */\nexport interface TermsSectionWithList {\n /** Section title */\n title: string;\n /** Optional description before the list */\n description?: string;\n /** List items */\n items: string[];\n /** Optional additional content after the list */\n additionalContent?: string;\n}\n\n/**\n * Contact information configuration\n */\nexport interface TermsContactInfo {\n /** Email label (e.g., \"Email:\") */\n emailLabel: string;\n /** Email address */\n email: string;\n /** Website label (e.g., \"Website:\") */\n websiteLabel: string;\n /** Website URL */\n websiteUrl: string;\n}\n\n/**\n * All text content for the terms of service page\n */\nexport interface TermsOfServicePageText {\n /** Page title */\n title: string;\n /** Last updated text (with placeholder for date) */\n lastUpdated: string;\n /** All sections in order */\n sections: Array<TermsSectionWithContent | TermsSectionWithList>;\n /** Contact information */\n contact: {\n /** Section title */\n title: string;\n /** Section description */\n description: string;\n /** Whether description contains HTML */\n isHtml?: boolean;\n /** Contact details */\n info: TermsContactInfo;\n };\n}\n\n/**\n * Props for AppTermsOfServicePage component\n */\nexport interface AppTermsOfServicePageProps {\n /** All text content (must be provided by consumer) */\n text: TermsOfServicePageText;\n /** Current date for \"last updated\" display */\n lastUpdatedDate?: string;\n /** Optional wrapper component for the page layout */\n PageWrapper?: ComponentType<{ children: ReactNode }>;\n /** Optional className for the container */\n className?: string;\n}\n\n/**\n * Type guard to check if section has items (is a list section)\n */\nfunction isSectionWithList(\n section: TermsSectionWithContent | TermsSectionWithList\n): section is TermsSectionWithList {\n return 'items' in section && Array.isArray(section.items);\n}\n\n/**\n * Heading component for h2 sections\n */\nconst SectionHeading: React.FC<{ children: ReactNode }> = ({ children }) => (\n <h2 className='text-2xl font-bold text-gray-900 dark:text-gray-100 mt-8 mb-4'>\n {children}\n </h2>\n);\n\n/**\n * Paragraph component\n */\nconst Paragraph: React.FC<{ children: ReactNode; className?: string }> = ({\n children,\n className = '',\n}) => (\n <p className={`text-gray-600 dark:text-gray-300 mb-6 ${className}`}>\n {children}\n </p>\n);\n\n/**\n * List component\n */\nconst List: React.FC<{ items: string[] }> = ({ items }) => (\n <ul className='list-disc list-inside text-gray-600 dark:text-gray-300 mb-6'>\n {items.map((item, index) => (\n <li key={index}>{item}</li>\n ))}\n </ul>\n);\n\n/**\n * AppTermsOfServicePage - A reusable terms of service page component\n *\n * Displays a comprehensive terms of service document with:\n * - Flexible section structure (content or list-based)\n * - Contact information\n * - Support for HTML content in specific sections\n *\n * All text content must be provided by the consumer app.\n *\n * @example\n * ```tsx\n * <AppTermsOfServicePage\n * text={{\n * title: \"Terms of Service\",\n * lastUpdated: \"Last updated: {{date}}\",\n * sections: [\n * { title: \"Acceptance\", content: \"By using...\" },\n * { title: \"User Responsibilities\", items: [\"Item 1\", \"Item 2\"] }\n * ],\n * contact: {\n * title: \"Contact\",\n * description: \"Questions?\",\n * info: { emailLabel: \"Email:\", email: \"support@example.com\", ... }\n * }\n * }}\n * lastUpdatedDate=\"January 1, 2025\"\n * />\n * ```\n */\nexport const AppTermsOfServicePage: React.FC<AppTermsOfServicePageProps> = ({\n text,\n lastUpdatedDate = new Date().toLocaleDateString(),\n PageWrapper,\n className,\n}) => {\n const content = (\n <div className={`max-w-7xl mx-auto px-4 py-12 ${className || ''}`}>\n <h1 className='text-4xl font-bold text-gray-900 dark:text-gray-100 mb-8'>\n {text.title}\n </h1>\n\n <div className='prose prose-lg dark:prose-invert max-w-none'>\n <Paragraph className='mb-6'>\n {text.lastUpdated.replace('{{date}}', lastUpdatedDate)}\n </Paragraph>\n\n {/* Render all sections */}\n {text.sections.map((section, index) => (\n <React.Fragment key={index}>\n <SectionHeading>{section.title}</SectionHeading>\n\n {isSectionWithList(section) ? (\n <>\n {section.description && (\n <Paragraph className='mb-4'>{section.description}</Paragraph>\n )}\n <List items={section.items} />\n {section.additionalContent && (\n <Paragraph>{section.additionalContent}</Paragraph>\n )}\n </>\n ) : section.isHtml ? (\n <Paragraph>\n <span dangerouslySetInnerHTML={{ __html: section.content }} />\n </Paragraph>\n ) : (\n <Paragraph>{section.content}</Paragraph>\n )}\n </React.Fragment>\n ))}\n\n {/* Contact Section */}\n <SectionHeading>{text.contact.title}</SectionHeading>\n {text.contact.isHtml ? (\n <Paragraph>\n <span\n dangerouslySetInnerHTML={{ __html: text.contact.description }}\n />\n </Paragraph>\n ) : (\n <Paragraph>{text.contact.description}</Paragraph>\n )}\n <div className='bg-gray-50 dark:bg-gray-800 p-4 rounded-lg'>\n <p className='text-gray-700 dark:text-gray-300'>\n {text.contact.info.emailLabel}{' '}\n <a\n href={`mailto:${text.contact.info.email}`}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.email}\n </a>\n <br />\n {text.contact.info.websiteLabel}{' '}\n <a\n href={text.contact.info.websiteUrl}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.websiteUrl}\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n\n if (PageWrapper) {\n return <PageWrapper>{content}</PageWrapper>;\n }\n\n return content;\n};\n\nexport default AppTermsOfServicePage;\n"],"names":["b","DefaultLinkComponent","className","AuthStatus","ChainType","getCopyrightYear","FooterContainer","Theme","FontSize","defaultTranslations","G","g","he","Be","Ue","We","ve","Ke","SubscriptionLayout","SegmentedControl","SubscriptionTile","SectionHeading","Paragraph","List"],"mappings":"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","x_google_ignoreList":[12]}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/index.ts","../src/constants/languages.ts","../src/components/topbar/language-selector.tsx","../src/components/topbar/app-topbar.tsx","../src/components/topbar/app-topbar-with-firebase-auth.tsx","../src/components/topbar/app-topbar-with-wallet.tsx","../src/components/breadcrumbs/app-breadcrumbs.tsx","../src/components/footer/app-footer.tsx","../src/components/footer/app-footer-for-home-page.tsx","../src/components/layout/app-page-layout.tsx","../src/components/settings/appearance-settings.tsx","../src/components/settings/global-settings-page.tsx","../node_modules/@sudobility/subscription-components/dist/index.esm.js","../src/components/subscription/AppSubscriptionsPage.tsx","../src/components/subscription/AppPricingPage.tsx","../src/components/pages/app-sitemap-page.tsx","../src/components/pages/app-text-page.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge class names with Tailwind CSS classes.\n * Combines clsx for conditional classes and tailwind-merge for deduplication.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","export interface LanguageConfig {\n code: string;\n name: string;\n flag: string;\n}\n\n/**\n * Default set of 16 supported languages with their flags.\n * Apps can override this list by passing their own languages prop.\n */\nexport const DEFAULT_LANGUAGES: LanguageConfig[] = [\n { code: 'en', name: 'English', flag: '🇺🇸' },\n { code: 'ar', name: 'العربية', flag: '🇸🇦' },\n { code: 'de', name: 'Deutsch', flag: '🇩🇪' },\n { code: 'es', name: 'Español', flag: '🇪🇸' },\n { code: 'fr', name: 'Français', flag: '🇫🇷' },\n { code: 'it', name: 'Italiano', flag: '🇮🇹' },\n { code: 'ja', name: '日本語', flag: '🇯🇵' },\n { code: 'ko', name: '한국어', flag: '🇰🇷' },\n { code: 'pt', name: 'Português', flag: '🇵🇹' },\n { code: 'ru', name: 'Русский', flag: '🇷🇺' },\n { code: 'sv', name: 'Svenska', flag: '🇸🇪' },\n { code: 'th', name: 'ไทย', flag: '🇹🇭' },\n { code: 'uk', name: 'Українська', flag: '🇺🇦' },\n { code: 'vi', name: 'Tiếng Việt', flag: '🇻🇳' },\n { code: 'zh', name: '简体中文', flag: '🇨🇳' },\n { code: 'zh-hant', name: '繁體中文', flag: '🇹🇼' },\n];\n\n/**\n * Languages that use right-to-left text direction.\n */\nexport const RTL_LANGUAGES = ['ar'];\n\n/**\n * Check if a language code is RTL.\n */\nexport function isRTL(languageCode: string): boolean {\n return RTL_LANGUAGES.includes(languageCode);\n}\n","import React, {\n useState,\n useCallback,\n useMemo,\n useRef,\n useEffect,\n} from 'react';\nimport { ChevronDownIcon } from '@heroicons/react/24/outline';\nimport { cn } from '../../utils';\nimport {\n DEFAULT_LANGUAGES,\n type LanguageConfig,\n} from '../../constants/languages';\n\nexport interface LanguageSelectorProps {\n /** Available languages (defaults to 16 built-in languages) */\n languages?: LanguageConfig[];\n /** Current language code */\n currentLanguage?: string;\n /** Language change handler */\n onLanguageChange?: (languageCode: string) => void;\n /** Variant: 'compact' for topbar, 'full' for settings */\n variant?: 'compact' | 'full';\n /** Custom className */\n className?: string;\n /** Label text for full variant */\n label?: string;\n /** Helper text for full variant */\n helperText?: string;\n}\n\n/**\n * LanguageSelector component with dropdown for switching languages.\n * Uses default 16 languages if none provided.\n */\nexport const LanguageSelector: React.FC<LanguageSelectorProps> = ({\n languages = DEFAULT_LANGUAGES,\n currentLanguage = 'en',\n onLanguageChange,\n variant = 'compact',\n className,\n label = 'Language',\n helperText = 'Select your preferred language',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Sort languages alphabetically by name\n const sortedLanguages = useMemo(\n () => [...languages].sort((a, b) => a.name.localeCompare(b.name)),\n [languages]\n );\n\n const currentLang = useMemo(\n () => languages.find(lang => lang.code === currentLanguage) || languages[0],\n [languages, currentLanguage]\n );\n\n const handleLanguageChange = useCallback(\n (langCode: string) => {\n if (langCode !== currentLanguage) {\n onLanguageChange?.(langCode);\n }\n setIsOpen(false);\n },\n [currentLanguage, onLanguageChange]\n );\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () =>\n document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n\n // Close dropdown on escape\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen]);\n\n if (variant === 'compact') {\n return (\n <div ref={dropdownRef} className={cn('relative', className)}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'flex items-center gap-2 px-3 py-2 h-10 rounded-lg',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n 'transition-colors'\n )}\n aria-label='Select language'\n aria-expanded={isOpen}\n aria-haspopup='listbox'\n >\n <span className='text-lg leading-none'>{currentLang?.flag}</span>\n <span className='hidden sm:block text-sm font-medium text-gray-700 dark:text-gray-300'>\n {currentLang?.name}\n </span>\n <ChevronDownIcon\n className={cn(\n 'h-4 w-4 text-gray-500 dark:text-gray-400 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {isOpen && (\n <div\n className={cn(\n 'absolute right-0 mt-2 w-48 py-1 z-50',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-200 dark:border-gray-700',\n 'rounded-lg shadow-lg'\n )}\n role='listbox'\n aria-label='Languages'\n >\n {sortedLanguages.map(lang => (\n <button\n key={lang.code}\n onClick={() => handleLanguageChange(lang.code)}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 text-left',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n 'transition-colors',\n lang.code === currentLanguage &&\n 'bg-gray-100 dark:bg-gray-700 font-medium'\n )}\n role='option'\n aria-selected={lang.code === currentLanguage}\n >\n <span className='text-lg leading-none'>{lang.flag}</span>\n <span className='text-sm text-gray-700 dark:text-gray-300'>\n {lang.name}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n }\n\n // Full variant for settings pages\n return (\n <div ref={dropdownRef} className={cn('space-y-2', className)}>\n <label className='text-sm font-medium text-gray-700 dark:text-gray-300 flex items-center gap-2'>\n <span>{label}</span>\n </label>\n\n <div className='relative'>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'flex items-center justify-between w-full px-3 py-2 text-left',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-300 dark:border-gray-600',\n 'rounded-md',\n 'hover:bg-gray-50 dark:hover:bg-gray-700',\n 'transition-colors'\n )}\n aria-expanded={isOpen}\n aria-haspopup='listbox'\n >\n <div className='flex items-center gap-2'>\n <span className='text-lg leading-none'>{currentLang?.flag}</span>\n <span className='text-sm text-gray-700 dark:text-gray-300'>\n {currentLang?.name}\n </span>\n </div>\n <ChevronDownIcon\n className={cn(\n 'h-4 w-4 text-gray-500 dark:text-gray-400 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {isOpen && (\n <div\n className={cn(\n 'absolute left-0 right-0 mt-1 py-1 z-50',\n 'bg-white dark:bg-gray-800',\n 'border border-gray-200 dark:border-gray-700',\n 'rounded-md shadow-lg'\n )}\n role='listbox'\n aria-label='Languages'\n >\n {sortedLanguages.map(lang => (\n <button\n key={lang.code}\n onClick={() => handleLanguageChange(lang.code)}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 text-left',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n 'transition-colors',\n lang.code === currentLanguage &&\n 'bg-gray-100 dark:bg-gray-700 font-medium'\n )}\n role='option'\n aria-selected={lang.code === currentLanguage}\n >\n <span className='text-lg leading-none'>{lang.flag}</span>\n <span className='text-sm text-gray-700 dark:text-gray-300'>\n {lang.name}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {helperText && (\n <p className='text-xs text-gray-500 dark:text-gray-400'>{helperText}</p>\n )}\n </div>\n );\n};\n\nexport default LanguageSelector;\n","import React, { useMemo, type ComponentType, type ReactNode } from 'react';\nimport {\n Topbar,\n TopbarProvider,\n TopbarLeft,\n TopbarCenter,\n TopbarRight,\n TopbarLogo,\n TopbarNavigation,\n TopbarActions,\n TopbarMobileContent,\n Logo,\n type TopbarNavItem,\n} from '@sudobility/components';\nimport { cn } from '../../utils';\nimport {\n LanguageSelector,\n type LanguageSelectorProps,\n} from './language-selector';\nimport type {\n MenuItemConfig,\n LogoConfig,\n LanguageConfig,\n LinkComponentProps,\n} from '../../types';\nimport { DEFAULT_LANGUAGES } from '../../constants/languages';\n\nexport interface AppTopBarProps {\n /** Logo configuration */\n logo: LogoConfig;\n\n /** Navigation menu items */\n menuItems: MenuItemConfig[];\n\n /** Available languages for selector (defaults to 16 built-in languages) */\n languages?: LanguageConfig[];\n\n /** Current language code */\n currentLanguage?: string;\n\n /** Language change handler */\n onLanguageChange?: (languageCode: string) => void;\n\n /** Hide language selector */\n hideLanguageSelector?: boolean;\n\n /** Language selector props override */\n languageSelectorProps?: Partial<LanguageSelectorProps>;\n\n /** Breakpoint to collapse navigation to hamburger menu */\n collapseBelow?: 'sm' | 'md' | 'lg' | 'xl';\n\n /** Render prop for account/auth section (right side of topbar) */\n renderAccountSection?: () => ReactNode;\n\n /** Render prop for center section (e.g., search bar) - shown on desktop */\n renderCenterSection?: () => ReactNode;\n\n /** Render prop for mobile-specific content (e.g., mobile search) - shown below main topbar on mobile */\n renderMobileContent?: () => ReactNode;\n\n /** Custom Link component for navigation (for react-router-dom, Next.js, etc.) */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Optional sticky positioning */\n sticky?: boolean;\n\n /** Optional variant */\n variant?: 'default' | 'app';\n\n /** Mobile menu label for accessibility */\n mobileMenuLabel?: string;\n\n /** Custom className for topbar */\n className?: string;\n\n /** z-index level */\n zIndex?: 'default' | 'highest' | 'high';\n\n /** Aria label for navigation */\n ariaLabel?: string;\n}\n\n/**\n * Default Link component that renders a plain anchor tag.\n * Apps should provide their own LinkComponent for router integration.\n */\nconst DefaultLinkComponent: ComponentType<LinkComponentProps> = ({\n href,\n className,\n children,\n onClick,\n}) => (\n <a href={href} className={className} onClick={onClick}>\n {children}\n </a>\n);\n\n/**\n * AppTopBar - Base topbar component for Sudobility apps.\n *\n * Features:\n * - Logo with app name on the left\n * - Navigation menu items with icons\n * - Language selector\n * - Render prop for center section (e.g., search bar)\n * - Render prop for account/auth section\n * - Render prop for mobile-specific content\n * - Responsive with hamburger menu on mobile\n * - Dark mode support\n */\nexport const AppTopBar: React.FC<AppTopBarProps> = ({\n logo,\n menuItems,\n languages = DEFAULT_LANGUAGES,\n currentLanguage = 'en',\n onLanguageChange,\n hideLanguageSelector = false,\n languageSelectorProps,\n collapseBelow = 'lg',\n renderAccountSection,\n renderCenterSection,\n renderMobileContent,\n LinkComponent = DefaultLinkComponent,\n sticky = true,\n variant = 'default',\n mobileMenuLabel = 'Menu',\n className,\n zIndex = 'highest',\n ariaLabel = 'Main navigation',\n}) => {\n // Filter menu items that should be shown\n const visibleMenuItems = useMemo(\n () => menuItems.filter(item => item.show !== false),\n [menuItems]\n );\n\n // Convert MenuItemConfig to TopbarNavItem\n const navItems: TopbarNavItem[] = useMemo(\n () =>\n visibleMenuItems.map(item => ({\n id: item.id,\n label: item.label,\n icon: item.icon,\n href: item.href,\n })),\n [visibleMenuItems]\n );\n\n // Wrapper to adapt LinkComponent to TopbarNavigation expected interface\n const LinkWrapper: ComponentType<{\n href: string;\n className?: string;\n children: ReactNode;\n }> = useMemo(\n () =>\n ({ href, className, children }) => (\n <LinkComponent href={href} className={className}>\n {children}\n </LinkComponent>\n ),\n [LinkComponent]\n );\n\n const handleLogoClick = () => {\n logo.onClick?.();\n };\n\n return (\n <TopbarProvider variant={variant} sticky={sticky}>\n <Topbar\n variant={variant}\n sticky={sticky}\n zIndex={zIndex}\n aria-label={ariaLabel}\n className={cn(className)}\n >\n <TopbarLeft>\n <TopbarNavigation\n items={navItems}\n collapseBelow={collapseBelow}\n LinkComponent={LinkWrapper}\n mobileMenuLabel={mobileMenuLabel}\n >\n <TopbarLogo onClick={handleLogoClick} size='md'>\n <Logo\n size='md'\n logoSrc={logo.src}\n logoText={logo.appName}\n logoAlt={logo.alt || logo.appName}\n showText={true}\n />\n </TopbarLogo>\n </TopbarNavigation>\n </TopbarLeft>\n\n {renderCenterSection && (\n <TopbarCenter>{renderCenterSection()}</TopbarCenter>\n )}\n\n <TopbarRight>\n <TopbarActions gap='md'>\n {!hideLanguageSelector && (\n <LanguageSelector\n languages={languages}\n currentLanguage={currentLanguage}\n onLanguageChange={onLanguageChange}\n variant='compact'\n {...languageSelectorProps}\n />\n )}\n {renderAccountSection?.()}\n </TopbarActions>\n </TopbarRight>\n\n {renderMobileContent && (\n <TopbarMobileContent>{renderMobileContent()}</TopbarMobileContent>\n )}\n </Topbar>\n </TopbarProvider>\n );\n};\n\nexport default AppTopBar;\n","import React, { type ReactNode, type ComponentType } from 'react';\nimport { AppTopBar, type AppTopBarProps } from './app-topbar';\nimport { cn } from '../../utils';\nimport { GRADIENT_CLASSES } from '@sudobility/design';\n\n/**\n * Auth menu item for the authenticated user dropdown.\n * This matches the AuthMenuItem interface from @sudobility/auth-components.\n */\nexport interface AuthMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon element (typically a small SVG) */\n icon?: ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Show divider after this item */\n dividerAfter?: boolean;\n}\n\n/**\n * Props for the AuthAction component from @sudobility/auth-components.\n */\nexport interface AuthActionProps {\n /** Avatar size in pixels */\n avatarSize?: number;\n /** Dropdown alignment */\n dropdownAlign?: 'left' | 'right';\n /** Login button click handler */\n onLoginClick?: () => void;\n /** Menu items for authenticated user dropdown */\n menuItems?: AuthMenuItem[];\n /** Custom login button text */\n loginButtonText?: string;\n /** Custom className for login button */\n loginButtonClassName?: string;\n}\n\nexport interface AppTopBarWithFirebaseAuthProps extends Omit<\n AppTopBarProps,\n 'renderAccountSection'\n> {\n /**\n * AuthAction component from @sudobility/auth-components.\n * This is passed as a prop to avoid hard dependency on auth-components.\n */\n AuthActionComponent: ComponentType<AuthActionProps>;\n\n /** Additional menu items for authenticated users */\n authenticatedMenuItems?: AuthMenuItem[];\n\n /** Login button click handler */\n onLoginClick?: () => void;\n\n /** Avatar size in pixels */\n avatarSize?: number;\n\n /** Dropdown alignment */\n dropdownAlign?: 'left' | 'right';\n\n /** Custom login button text */\n loginButtonText?: string;\n\n /** Custom login button className */\n loginButtonClassName?: string;\n}\n\n/**\n * AppTopBarWithFirebaseAuth - TopBar with Firebase authentication integration.\n *\n * This component wraps AppTopBar and provides the AuthAction component\n * from @sudobility/auth-components for the account section.\n *\n * Note: The AuthAction component must be passed as a prop to avoid\n * hard dependency on @sudobility/auth-components.\n *\n * @example\n * ```tsx\n * import { AuthAction } from '@sudobility/auth-components';\n *\n * <AppTopBarWithFirebaseAuth\n * logo={{ src: '/logo.png', appName: 'My App' }}\n * menuItems={[...]}\n * AuthActionComponent={AuthAction}\n * onLoginClick={() => navigate('/login')}\n * authenticatedMenuItems={[\n * { id: 'dashboard', label: 'Dashboard', onClick: () => navigate('/dashboard') },\n * ]}\n * />\n * ```\n */\nexport const AppTopBarWithFirebaseAuth: React.FC<\n AppTopBarWithFirebaseAuthProps\n> = ({\n AuthActionComponent,\n authenticatedMenuItems = [],\n onLoginClick,\n avatarSize = 32,\n dropdownAlign = 'right',\n loginButtonText,\n loginButtonClassName,\n ...topBarProps\n}) => {\n const renderAccountSection = () => (\n <AuthActionComponent\n avatarSize={avatarSize}\n dropdownAlign={dropdownAlign}\n onLoginClick={onLoginClick}\n menuItems={authenticatedMenuItems}\n loginButtonText={loginButtonText}\n loginButtonClassName={cn(\n GRADIENT_CLASSES.headerButton,\n loginButtonClassName\n )}\n />\n );\n\n return (\n <AppTopBar {...topBarProps} renderAccountSection={renderAccountSection} />\n );\n};\n\nexport default AppTopBarWithFirebaseAuth;\n","import React, { type ReactNode, type ComponentType } from 'react';\nimport { AppTopBar, type AppTopBarProps } from './app-topbar';\nimport { cn } from '../../utils';\nimport { GRADIENT_CLASSES } from '@sudobility/design';\n\n/**\n * Wallet menu item for the connected wallet dropdown.\n */\nexport interface WalletMenuItem {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Icon component */\n icon?: ComponentType<{ className?: string }>;\n /** Click handler */\n onClick: () => void;\n /** Whether this is a separator */\n separator?: boolean;\n}\n\n/**\n * Auth status enum matching @sudobility/types.\n */\nexport enum AuthStatus {\n DISCONNECTED = 'disconnected',\n CONNECTED = 'connected',\n VERIFIED = 'verified',\n}\n\n/**\n * Chain type enum matching @sudobility/types.\n */\nexport enum ChainType {\n EVM = 'evm',\n SOLANA = 'solana',\n}\n\n/**\n * Props for the WalletDropdownMenu component from @sudobility/web3-components.\n */\nexport interface WalletDropdownMenuProps {\n walletAddress: string;\n authStatus: AuthStatus | string;\n chainType: ChainType | string | 'unknown';\n menuItems: WalletMenuItem[];\n avatar?: string;\n displayName?: string;\n statusLabels?: {\n verified?: string;\n connected?: string;\n disconnected?: string;\n };\n}\n\nexport interface AppTopBarWithWalletProps extends Omit<\n AppTopBarProps,\n 'renderAccountSection'\n> {\n /**\n * WalletDropdownMenu component from @sudobility/web3-components.\n * This is passed as a prop to avoid hard dependency on web3-components.\n */\n WalletDropdownMenuComponent?: ComponentType<WalletDropdownMenuProps>;\n\n /** Whether wallet is connected */\n isConnected: boolean;\n\n /** Connected wallet address */\n walletAddress?: string;\n\n /** Authentication status */\n authStatus?: AuthStatus | string;\n\n /** Chain type (EVM, Solana, etc.) */\n chainType?: ChainType | string | 'unknown';\n\n /** Connect button click handler */\n onConnect: () => void;\n\n /** Disconnect handler */\n onDisconnect: () => Promise<void>;\n\n /** Custom menu items for wallet dropdown */\n walletMenuItems?: WalletMenuItem[];\n\n /** Connect button content (default: \"Connect Wallet\") */\n connectButtonContent?: ReactNode;\n\n /** Connect button className (supports gradient classes from @sudobility/design) */\n connectButtonClassName?: string;\n\n /** Use gradient styling for connect button */\n useGradientButton?: boolean;\n\n /** Optional user avatar */\n avatar?: string;\n\n /** Optional display name */\n displayName?: string;\n\n /** Custom status labels */\n statusLabels?: {\n verified?: string;\n connected?: string;\n disconnected?: string;\n };\n}\n\n/**\n * Default connect button when WalletDropdownMenuComponent is not provided\n * or when wallet is not connected.\n */\nconst DefaultConnectButton: React.FC<{\n onClick: () => void;\n content?: ReactNode;\n className?: string;\n useGradient?: boolean;\n}> = ({ onClick, content = 'Connect Wallet', className, useGradient }) => (\n <button\n onClick={onClick}\n className={cn(\n useGradient\n ? GRADIENT_CLASSES.headerButton\n : 'px-4 py-2 text-sm font-medium rounded-lg bg-blue-600 text-white hover:bg-blue-700 transition-colors',\n className\n )}\n >\n {content}\n </button>\n);\n\n/**\n * Simple fallback wallet display when WalletDropdownMenuComponent is not provided.\n */\nconst FallbackWalletDisplay: React.FC<{\n walletAddress: string;\n onDisconnect: () => Promise<void>;\n}> = ({ walletAddress, onDisconnect }) => {\n const truncatedAddress = `${walletAddress.slice(0, 6)}...${walletAddress.slice(-4)}`;\n\n return (\n <div className='flex items-center gap-2'>\n <span className='text-sm font-medium text-gray-700 dark:text-gray-300'>\n {truncatedAddress}\n </span>\n <button\n onClick={() => onDisconnect()}\n className='text-xs text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200'\n >\n Disconnect\n </button>\n </div>\n );\n};\n\n/**\n * AppTopBarWithWallet - TopBar with wallet connection integration.\n *\n * This component wraps AppTopBar and provides wallet connection UI\n * for the account section. Uses WalletDropdownMenu from @sudobility/web3-components\n * when provided.\n *\n * @example\n * ```tsx\n * import { WalletDropdownMenu } from '@sudobility/web3-components';\n *\n * <AppTopBarWithWallet\n * logo={{ src: '/logo.png', appName: 'My App' }}\n * menuItems={[...]}\n * WalletDropdownMenuComponent={WalletDropdownMenu}\n * isConnected={isConnected}\n * walletAddress={walletAddress}\n * authStatus={authStatus}\n * chainType={chainType}\n * onConnect={() => navigate('/connect')}\n * onDisconnect={handleDisconnect}\n * walletMenuItems={[\n * { id: 'copy', label: 'Copy Address', icon: ClipboardIcon, onClick: handleCopy },\n * { id: 'disconnect', label: 'Disconnect', icon: LogoutIcon, onClick: handleDisconnect },\n * ]}\n * />\n * ```\n */\nexport const AppTopBarWithWallet: React.FC<AppTopBarWithWalletProps> = ({\n WalletDropdownMenuComponent,\n isConnected,\n walletAddress,\n authStatus = AuthStatus.DISCONNECTED,\n chainType = 'unknown',\n onConnect,\n onDisconnect,\n walletMenuItems = [],\n connectButtonContent,\n connectButtonClassName,\n useGradientButton = true,\n avatar,\n displayName,\n statusLabels,\n ...topBarProps\n}) => {\n const renderAccountSection = () => {\n // Not connected - show connect button\n if (!isConnected || !walletAddress) {\n return (\n <DefaultConnectButton\n onClick={onConnect}\n content={connectButtonContent}\n className={connectButtonClassName}\n useGradient={useGradientButton}\n />\n );\n }\n\n // Connected with WalletDropdownMenu component\n if (WalletDropdownMenuComponent) {\n return (\n <WalletDropdownMenuComponent\n walletAddress={walletAddress}\n authStatus={authStatus}\n chainType={chainType}\n menuItems={walletMenuItems}\n avatar={avatar}\n displayName={displayName}\n statusLabels={statusLabels}\n />\n );\n }\n\n // Connected without WalletDropdownMenu - fallback display\n return (\n <FallbackWalletDisplay\n walletAddress={walletAddress}\n onDisconnect={onDisconnect}\n />\n );\n };\n\n return (\n <AppTopBar {...topBarProps} renderAccountSection={renderAccountSection} />\n );\n};\n\nexport default AppTopBarWithWallet;\n","import React, { type ComponentType } from 'react';\nimport { BreadcrumbSection } from '@sudobility/components';\nimport { CalendarDaysIcon } from '@heroicons/react/24/outline';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils';\nimport type {\n BreadcrumbItem,\n ShareConfig,\n TalkToFounderConfig,\n LinkComponentProps,\n} from '../../types';\n\nconst breadcrumbContainerVariants = cva('border-b', {\n variants: {\n variant: {\n default: 'bg-white dark:bg-gray-800 border-gray-200 dark:border-gray-700',\n transparent: 'bg-transparent border-transparent',\n subtle:\n 'bg-gray-50 dark:bg-gray-900/50 border-gray-200 dark:border-gray-700',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport interface AppBreadcrumbsProps extends VariantProps<\n typeof breadcrumbContainerVariants\n> {\n /** Breadcrumb items */\n items: BreadcrumbItem[];\n\n /** Share configuration (shows social share buttons on right) */\n shareConfig?: ShareConfig;\n\n /** Talk to founder button configuration */\n talkToFounder?: TalkToFounderConfig;\n\n /** Custom Link component */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Custom className for the container */\n className?: string;\n\n /** Custom className for the inner content */\n contentClassName?: string;\n}\n\n/**\n * Default Talk to Founder button.\n */\nconst TalkToFounderButton: React.FC<{\n config: TalkToFounderConfig;\n}> = ({ config }) => {\n const IconComponent = config.icon || CalendarDaysIcon;\n const buttonText = config.buttonText || 'Talk to Founder';\n\n return (\n <a\n href={config.meetingUrl}\n target='_blank'\n rel='noopener noreferrer'\n className={cn(\n 'inline-flex items-center gap-2 px-3 py-1.5',\n 'text-sm font-medium',\n 'text-blue-600 dark:text-blue-400',\n 'hover:text-blue-700 dark:hover:text-blue-300',\n 'bg-blue-50 dark:bg-blue-900/20',\n 'hover:bg-blue-100 dark:hover:bg-blue-900/30',\n 'rounded-full',\n 'border border-blue-200 dark:border-blue-800',\n 'transition-colors'\n )}\n >\n <IconComponent className='h-4 w-4' />\n <span>{buttonText}</span>\n </a>\n );\n};\n\n/**\n * AppBreadcrumbs - Breadcrumb navigation with social share and \"Talk to Founder\" button.\n *\n * Features:\n * - Breadcrumb trail with links\n * - Social share buttons on the right\n * - Optional \"Talk to Founder\" meeting button\n * - Always renders at max-w-7xl width\n * - Dark mode support\n *\n * @example\n * ```tsx\n * <AppBreadcrumbs\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Products', href: '/products' },\n * { label: 'Widget', current: true },\n * ]}\n * shareConfig={{\n * title: 'Check out this widget',\n * description: 'Amazing widget for your needs',\n * hashtags: ['widget', 'product'],\n * }}\n * talkToFounder={{\n * meetingUrl: 'https://calendly.com/founder/30min',\n * buttonText: 'Book a call',\n * }}\n * />\n * ```\n */\nexport const AppBreadcrumbs: React.FC<AppBreadcrumbsProps> = ({\n items,\n shareConfig,\n talkToFounder,\n variant = 'default',\n className,\n contentClassName,\n}) => {\n // Don't render if no items or only home\n if (!items || items.length === 0) {\n return null;\n }\n\n return (\n <div className={cn(breadcrumbContainerVariants({ variant }), className)}>\n <div className={cn('max-w-7xl mx-auto px-4 py-3', contentClassName)}>\n <div className='flex items-center justify-between gap-4'>\n {/* Breadcrumb trail */}\n <div className='flex-1 min-w-0'>\n <BreadcrumbSection items={items} shareConfig={shareConfig} />\n </div>\n\n {/* Right side: Talk to Founder + Share (if shareConfig, share is handled by BreadcrumbSection) */}\n {talkToFounder && (\n <div className='flex items-center gap-3 flex-shrink-0'>\n <TalkToFounderButton config={talkToFounder} />\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default AppBreadcrumbs;\n","import React, { type ComponentType } from 'react';\nimport {\n Footer as FooterContainer,\n FooterCompact,\n FooterCompactLeft,\n FooterCompactRight,\n FooterVersion,\n FooterCopyright,\n} from '@sudobility/components';\nimport { cn } from '../../utils';\nimport type {\n StatusIndicatorConfig,\n LinkComponentProps,\n FooterLinkItem,\n} from '../../types';\n\n/**\n * Props for the SystemStatusIndicator component from @sudobility/devops-components.\n */\nexport interface SystemStatusIndicatorProps {\n statusPageUrl: string;\n apiEndpoint?: string;\n refreshInterval?: number;\n size?: 'sm' | 'md' | 'lg';\n version?: string;\n isNetworkOnline?: boolean;\n}\n\nexport interface AppFooterProps {\n /** App version string */\n version?: string;\n\n /** Copyright year or range (e.g., \"2025\" or \"2025-2026\") */\n copyrightYear?: string;\n\n /** Company name */\n companyName: string;\n\n /** Company URL (optional - creates a link if provided) */\n companyUrl?: string;\n\n /** Rights text (e.g., \"All rights reserved\") */\n rightsText?: string;\n\n /** Status indicator config (optional) */\n statusIndicator?: StatusIndicatorConfig;\n\n /**\n * SystemStatusIndicator component from @sudobility/devops-components.\n * Pass this to enable status indicator functionality.\n */\n StatusIndicatorComponent?: ComponentType<SystemStatusIndicatorProps>;\n\n /** Right-side links (e.g., Privacy, Terms) */\n links?: FooterLinkItem[];\n\n /** Custom Link component */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Sticky positioning (sticks to bottom of viewport) */\n sticky?: boolean;\n\n /** Network online status (for status indicator) */\n isNetworkOnline?: boolean;\n\n /** Custom className */\n className?: string;\n}\n\n/**\n * Default link component that renders a plain anchor.\n */\nconst DefaultLinkComponent: ComponentType<LinkComponentProps> = ({\n href,\n className,\n children,\n onClick,\n}) => (\n <a href={href} className={className} onClick={onClick}>\n {children}\n </a>\n);\n\n/**\n * Helper to get copyright year or range.\n */\nfunction getCopyrightYear(startYear = 2025): string {\n const currentYear = new Date().getFullYear();\n if (currentYear === startYear) {\n return String(startYear);\n } else if (currentYear > startYear) {\n return `${startYear}-${currentYear}`;\n }\n return String(startYear);\n}\n\n/**\n * AppFooter - Compact footer for app pages.\n *\n * Features:\n * - Version display\n * - Copyright with company name\n * - System status indicator (optional)\n * - Right-side links (Privacy, Terms, etc.)\n * - Sticky positioning option\n * - Dark mode support\n *\n * @example\n * ```tsx\n * import { SystemStatusIndicator } from '@sudobility/devops-components';\n *\n * <AppFooter\n * version=\"1.0.0\"\n * companyName=\"Sudobility Inc.\"\n * companyUrl=\"/\"\n * rightsText=\"All rights reserved\"\n * statusIndicator={{\n * statusPageUrl: 'https://status.example.com',\n * apiEndpoint: 'https://status.example.com/api/v1/status',\n * }}\n * StatusIndicatorComponent={SystemStatusIndicator}\n * links={[\n * { label: 'Privacy', href: '/privacy' },\n * { label: 'Terms', href: '/terms' },\n * ]}\n * sticky\n * />\n * ```\n */\nexport const AppFooter: React.FC<AppFooterProps> = ({\n version,\n copyrightYear,\n companyName,\n companyUrl,\n rightsText = 'All rights reserved',\n statusIndicator,\n StatusIndicatorComponent,\n links = [],\n LinkComponent = DefaultLinkComponent,\n sticky = true,\n isNetworkOnline = true,\n className,\n}) => {\n const year = copyrightYear || getCopyrightYear();\n\n const companyLink = companyUrl ? (\n <LinkComponent\n href={companyUrl}\n className='text-blue-400 hover:text-blue-300 transition-colors'\n >\n {companyName}\n </LinkComponent>\n ) : undefined;\n\n return (\n <FooterContainer\n variant='compact'\n sticky={sticky}\n className={cn(className)}\n >\n <FooterCompact>\n <FooterCompactLeft>\n {version && <FooterVersion version={version} />}\n <FooterCopyright\n year={year}\n companyName={companyName}\n rightsText={rightsText}\n companyLink={companyLink}\n />\n {statusIndicator && StatusIndicatorComponent && (\n <StatusIndicatorComponent\n statusPageUrl={statusIndicator.statusPageUrl}\n apiEndpoint={statusIndicator.apiEndpoint}\n refreshInterval={statusIndicator.refreshInterval || 60000}\n size='sm'\n version={version}\n isNetworkOnline={isNetworkOnline}\n />\n )}\n </FooterCompactLeft>\n <FooterCompactRight>\n {links.map((link, index) => (\n <React.Fragment key={link.href || index}>\n {link.onClick ? (\n <button\n onClick={link.onClick}\n className='text-gray-400 hover:text-white transition-colors'\n >\n {link.label}\n </button>\n ) : (\n <LinkComponent\n href={link.href}\n className='text-gray-400 hover:text-white transition-colors'\n >\n {link.label}\n </LinkComponent>\n )}\n </React.Fragment>\n ))}\n </FooterCompactRight>\n </FooterCompact>\n </FooterContainer>\n );\n};\n\nexport default AppFooter;\n","import React, { type ComponentType } from 'react';\nimport {\n Logo,\n Footer as FooterContainer,\n FooterGrid,\n FooterBrand,\n FooterLinkSection,\n FooterLink,\n FooterBottom,\n FooterVersion,\n FooterCopyright,\n FooterSocialLinks,\n} from '@sudobility/components';\nimport { cn } from '../../utils';\nimport type {\n StatusIndicatorConfig,\n LinkComponentProps,\n FooterLinkSection as FooterLinkSectionConfig,\n SocialLinksConfig,\n} from '../../types';\nimport type { SystemStatusIndicatorProps } from './app-footer';\n\nexport interface AppFooterForHomePageProps {\n /** App logo configuration */\n logo: {\n /** Logo image src (optional - if not provided, uses Logo component) */\n src?: string;\n /** App name */\n appName: string;\n };\n\n /** Footer link sections (columns of links) */\n linkSections: FooterLinkSectionConfig[];\n\n /** Social media links */\n socialLinks?: SocialLinksConfig;\n\n /** System status indicator configuration */\n statusIndicator?: StatusIndicatorConfig;\n\n /**\n * SystemStatusIndicator component from @sudobility/devops-components.\n * Pass this to enable status indicator functionality.\n */\n StatusIndicatorComponent?: ComponentType<SystemStatusIndicatorProps>;\n\n /** App version string */\n version?: string;\n\n /** Copyright year or range */\n copyrightYear?: string;\n\n /** Company name for copyright */\n companyName: string;\n\n /** Company link URL (optional) */\n companyUrl?: string;\n\n /** Footer description text (below logo) */\n description?: string;\n\n /** Rights text (e.g., \"All rights reserved\") */\n rightsText?: string;\n\n /** Custom Link component */\n LinkComponent?: ComponentType<LinkComponentProps>;\n\n /** Network online status (for status indicator) */\n isNetworkOnline?: boolean;\n\n /** Custom className */\n className?: string;\n\n /** Number of columns for link grid (default: auto based on section count) */\n gridColumns?: 2 | 3 | 4 | 5;\n}\n\n/**\n * Default link component that renders a plain anchor.\n */\nconst DefaultLinkComponent: ComponentType<LinkComponentProps> = ({\n href,\n className,\n children,\n onClick,\n}) => (\n <a href={href} className={className} onClick={onClick}>\n {children}\n </a>\n);\n\n/**\n * Helper to get copyright year or range.\n */\nfunction getCopyrightYear(startYear = 2025): string {\n const currentYear = new Date().getFullYear();\n if (currentYear === startYear) {\n return String(startYear);\n } else if (currentYear > startYear) {\n return `${startYear}-${currentYear}`;\n }\n return String(startYear);\n}\n\n/**\n * Get grid columns class based on section count.\n */\nfunction getGridColumnsClass(sectionCount: number, explicit?: number): string {\n const cols = explicit || Math.min(sectionCount, 4);\n switch (cols) {\n case 2:\n return 'md:grid-cols-2';\n case 3:\n return 'md:grid-cols-3';\n case 4:\n return 'md:grid-cols-4';\n case 5:\n return 'md:grid-cols-5';\n default:\n return 'md:grid-cols-4';\n }\n}\n\n/**\n * AppFooterForHomePage - Full footer for home/landing pages.\n *\n * Features:\n * - Multiple link sections in a grid\n * - Logo and brand description\n * - Social media links\n * - System status indicator (optional)\n * - Version and copyright\n * - Dark mode support\n *\n * @example\n * ```tsx\n * import { SystemStatusIndicator } from '@sudobility/devops-components';\n *\n * <AppFooterForHomePage\n * logo={{ appName: 'My App' }}\n * linkSections={[\n * {\n * title: 'Product',\n * links: [\n * { label: 'Features', href: '/features' },\n * { label: 'Pricing', href: '/pricing' },\n * ],\n * },\n * {\n * title: 'Company',\n * links: [\n * { label: 'About', href: '/about' },\n * { label: 'Contact', href: '/contact' },\n * ],\n * },\n * ]}\n * socialLinks={{\n * twitterUrl: 'https://twitter.com/myapp',\n * discordUrl: 'https://discord.gg/myapp',\n * }}\n * statusIndicator={{\n * statusPageUrl: 'https://status.example.com',\n * }}\n * StatusIndicatorComponent={SystemStatusIndicator}\n * version=\"1.0.0\"\n * companyName=\"Sudobility Inc.\"\n * description=\"Building the future of web3 communication\"\n * />\n * ```\n */\nexport const AppFooterForHomePage: React.FC<AppFooterForHomePageProps> = ({\n logo,\n linkSections,\n socialLinks,\n statusIndicator,\n StatusIndicatorComponent,\n version,\n copyrightYear,\n companyName,\n companyUrl,\n description,\n rightsText = 'All rights reserved',\n LinkComponent = DefaultLinkComponent,\n isNetworkOnline = true,\n className,\n gridColumns,\n}) => {\n const year = copyrightYear || getCopyrightYear();\n const gridClass = getGridColumnsClass(linkSections.length, gridColumns);\n\n const companyLink = companyUrl ? (\n <LinkComponent\n href={companyUrl}\n className='text-blue-400 hover:text-blue-300 transition-colors'\n >\n {companyName}\n </LinkComponent>\n ) : undefined;\n\n return (\n <FooterContainer variant='full' className={cn(className)}>\n <FooterGrid className={gridClass}>\n {linkSections.map((section, sectionIndex) => (\n <FooterLinkSection\n key={section.title || sectionIndex}\n title={section.title}\n >\n {section.links.map((link, linkIndex) => (\n <FooterLink key={link.href || linkIndex}>\n {link.onClick ? (\n <button onClick={link.onClick} className='text-left'>\n {link.label}\n </button>\n ) : (\n <LinkComponent href={link.href}>{link.label}</LinkComponent>\n )}\n </FooterLink>\n ))}\n </FooterLinkSection>\n ))}\n </FooterGrid>\n\n <FooterBottom>\n <FooterBrand\n description={description}\n className='flex flex-col items-center'\n >\n <LinkComponent\n href='/'\n className='text-white hover:opacity-80 transition-opacity'\n >\n {logo.src ? (\n <img\n src={logo.src}\n alt={logo.appName}\n className='h-8 object-contain'\n />\n ) : (\n <Logo size='md' showText={true} logoText={logo.appName} />\n )}\n </LinkComponent>\n </FooterBrand>\n {version && <FooterVersion version={version} />}\n <FooterCopyright\n year={year}\n companyName={companyName}\n rightsText={rightsText}\n companyLink={companyLink}\n />\n {statusIndicator && StatusIndicatorComponent && (\n <StatusIndicatorComponent\n statusPageUrl={statusIndicator.statusPageUrl}\n apiEndpoint={statusIndicator.apiEndpoint}\n refreshInterval={statusIndicator.refreshInterval || 60000}\n size='sm'\n version={version}\n isNetworkOnline={isNetworkOnline}\n />\n )}\n </FooterBottom>\n\n {socialLinks && (\n <div className='flex justify-center mt-4'>\n <FooterSocialLinks\n twitterUrl={socialLinks.twitterUrl}\n discordUrl={socialLinks.discordUrl}\n linkedinUrl={socialLinks.linkedinUrl}\n githubUrl={socialLinks.githubUrl}\n redditUrl={socialLinks.redditUrl}\n farcasterUrl={socialLinks.farcasterUrl}\n telegramUrl={socialLinks.telegramUrl}\n />\n </div>\n )}\n </FooterContainer>\n );\n};\n\nexport default AppFooterForHomePage;\n","import React, { type ReactNode } from 'react';\nimport { LayoutProvider } from '@sudobility/components';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils';\nimport {\n AppBreadcrumbs,\n type AppBreadcrumbsProps,\n} from '../breadcrumbs/app-breadcrumbs';\nimport type { MaxWidth, ContentPadding, BackgroundVariant } from '../../types';\n\nconst layoutVariants = cva('min-h-screen flex flex-col', {\n variants: {\n background: {\n default: 'bg-gray-50 dark:bg-gray-900',\n white: 'bg-white dark:bg-gray-900',\n gradient:\n 'bg-gradient-to-br from-gray-50 to-blue-50 dark:from-gray-900 dark:to-gray-800',\n },\n },\n defaultVariants: {\n background: 'default',\n },\n});\n\nconst maxWidthClasses: Record<MaxWidth, string> = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-2xl',\n '4xl': 'max-w-4xl',\n '7xl': 'max-w-7xl',\n full: 'max-w-full',\n};\n\nconst paddingClasses: Record<ContentPadding, string> = {\n none: '',\n sm: 'px-4 sm:px-6 py-6',\n md: 'px-4 py-8',\n lg: 'px-4 py-12',\n};\n\nexport interface AppPageLayoutProps extends VariantProps<\n typeof layoutVariants\n> {\n /** Page content */\n children: ReactNode;\n\n /** TopBar slot - pass an AppTopBar variant or custom component */\n topBar: ReactNode;\n\n /** Breadcrumbs configuration (optional) */\n breadcrumbs?: AppBreadcrumbsProps;\n\n /** Footer slot - pass an AppFooter variant or custom component */\n footer?: ReactNode;\n\n /** Max width for content area (default: '7xl') */\n maxWidth?: MaxWidth;\n\n /** Content padding (default: 'md') */\n contentPadding?: ContentPadding;\n\n /** Background variant */\n background?: BackgroundVariant;\n\n /** Layout mode for LayoutProvider */\n layoutMode?: 'standard';\n\n /** Custom className for the layout container */\n className?: string;\n\n /** Custom className for the content area */\n contentClassName?: string;\n\n /** Custom className for the main element */\n mainClassName?: string;\n}\n\n/**\n * AppPageLayout - Layout wrapper combining TopBar, Breadcrumbs, Content, and Footer.\n *\n * Features:\n * - Flexible slots for TopBar and Footer\n * - Optional breadcrumbs with share and \"Talk to Founder\"\n * - Configurable content max-width and padding\n * - Background variants\n * - Dark mode support\n * - Sticky footer behavior\n *\n * @example\n * ```tsx\n * <AppPageLayout\n * topBar={\n * <AppTopBarWithFirebaseAuth\n * logo={{ src: '/logo.png', appName: 'My App' }}\n * menuItems={menuItems}\n * AuthActionComponent={AuthAction}\n * onLoginClick={() => navigate('/login')}\n * />\n * }\n * breadcrumbs={{\n * items: breadcrumbItems,\n * shareConfig: { title: 'Page', description: 'Description', hashtags: [] },\n * }}\n * footer={\n * <AppFooter\n * version=\"1.0.0\"\n * companyName=\"My Company\"\n * links={[{ label: 'Privacy', href: '/privacy' }]}\n * />\n * }\n * maxWidth=\"7xl\"\n * background=\"default\"\n * >\n * <h1>Page Content</h1>\n * </AppPageLayout>\n * ```\n */\nexport const AppPageLayout: React.FC<AppPageLayoutProps> = ({\n children,\n topBar,\n breadcrumbs,\n footer,\n maxWidth = '7xl',\n contentPadding = 'md',\n background = 'default',\n layoutMode = 'standard',\n className,\n contentClassName,\n mainClassName,\n}) => {\n return (\n <LayoutProvider mode={layoutMode}>\n <div className={cn(layoutVariants({ background }), className)}>\n {/* Header Section */}\n <header>{topBar}</header>\n\n {/* Breadcrumb Section */}\n {breadcrumbs && breadcrumbs.items && breadcrumbs.items.length > 0 && (\n <AppBreadcrumbs {...breadcrumbs} />\n )}\n\n {/* Main Content */}\n <main className={cn('flex-1 overflow-auto', mainClassName)}>\n <div\n className={cn(\n 'mx-auto',\n maxWidthClasses[maxWidth],\n paddingClasses[contentPadding],\n contentClassName\n )}\n >\n {children}\n </div>\n </main>\n\n {/* Footer */}\n {footer && <footer>{footer}</footer>}\n </div>\n </LayoutProvider>\n );\n};\n\nexport default AppPageLayout;\n","import React from 'react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Label,\n} from '@sudobility/components';\nimport { textVariants } from '@sudobility/design';\n\n/**\n * Theme options for appearance settings.\n */\nexport enum Theme {\n LIGHT = 'light',\n DARK = 'dark',\n SYSTEM = 'system',\n}\n\n/**\n * Font size options for appearance settings.\n */\nexport enum FontSize {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n}\n\n/**\n * Translation keys used by AppearanceSettings.\n * Provide a translation function to customize labels.\n */\nexport interface AppearanceSettingsTranslations {\n heading: string;\n description: string;\n themeLabel: string;\n themeSelectPlaceholder: string;\n themeLight: string;\n themeDark: string;\n themeSystem: string;\n themeDescription: string;\n fontSizeLabel: string;\n fontSizeSelectPlaceholder: string;\n fontSizeSmall: string;\n fontSizeMedium: string;\n fontSizeLarge: string;\n fontSizeDescription: string;\n infoHeading: string;\n infoDescription: string;\n}\n\nconst defaultTranslations: AppearanceSettingsTranslations = {\n heading: 'Appearance',\n description: 'Customize the look and feel of the application.',\n themeLabel: 'Theme',\n themeSelectPlaceholder: 'Select theme',\n themeLight: 'Light',\n themeDark: 'Dark',\n themeSystem: 'System',\n themeDescription: 'Choose your preferred color theme.',\n fontSizeLabel: 'Font Size',\n fontSizeSelectPlaceholder: 'Select font size',\n fontSizeSmall: 'Small',\n fontSizeMedium: 'Medium',\n fontSizeLarge: 'Large',\n fontSizeDescription: 'Adjust the text size for better readability.',\n infoHeading: 'About Settings',\n infoDescription:\n 'Your appearance preferences are saved locally and will be applied automatically on your next visit.',\n};\n\nexport interface AppearanceSettingsProps {\n /** Current theme value */\n theme: Theme | string;\n\n /** Current font size value */\n fontSize: FontSize | string;\n\n /** Callback when theme changes */\n onThemeChange: (theme: Theme) => void;\n\n /** Callback when font size changes */\n onFontSizeChange: (fontSize: FontSize) => void;\n\n /**\n * Optional translation function.\n * If provided, will be called with a key from AppearanceSettingsTranslations.\n * Falls back to default English strings if not provided.\n */\n t?: (key: string, fallback?: string) => string;\n\n /** Optional className for the container */\n className?: string;\n\n /** Whether to show the information box at the bottom */\n showInfoBox?: boolean;\n}\n\n/**\n * AppearanceSettings - A reusable component for theme and font size settings.\n *\n * This component can be used across different apps to provide consistent\n * appearance customization options.\n *\n * @example\n * ```tsx\n * // Basic usage with useTheme hook\n * const { theme, fontSize, setTheme, setFontSize } = useTheme();\n *\n * <AppearanceSettings\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * />\n *\n * // With i18n translation\n * const { t } = useTranslation('settings');\n *\n * <AppearanceSettings\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * t={(key, fallback) => t(`appearance.${key}`, fallback)}\n * />\n * ```\n */\nexport const AppearanceSettings: React.FC<AppearanceSettingsProps> = ({\n theme,\n fontSize,\n onThemeChange,\n onFontSizeChange,\n t,\n className,\n showInfoBox = true,\n}) => {\n // Helper to get translated string with fallback\n const getText = (key: keyof AppearanceSettingsTranslations): string => {\n const fallback = defaultTranslations[key];\n return t ? t(key, fallback) : fallback;\n };\n\n return (\n <div className={className}>\n <div className='space-y-6'>\n <div>\n <h2 className={`${textVariants.heading.h4()} mb-2`}>\n {getText('heading')}\n </h2>\n <p\n className={`${textVariants.body.sm()} text-gray-600 dark:text-gray-400`}\n >\n {getText('description')}\n </p>\n </div>\n\n <div className='space-y-6'>\n {/* Theme Setting */}\n <div className='space-y-2'>\n <Label\n htmlFor='theme-select'\n className={textVariants.label.default()}\n >\n {getText('themeLabel')}\n </Label>\n <Select\n value={theme}\n onValueChange={(value: string) => onThemeChange(value as Theme)}\n >\n <SelectTrigger id='theme-select'>\n <SelectValue placeholder={getText('themeSelectPlaceholder')} />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={Theme.LIGHT}>\n {getText('themeLight')}\n </SelectItem>\n <SelectItem value={Theme.DARK}>\n {getText('themeDark')}\n </SelectItem>\n <SelectItem value={Theme.SYSTEM}>\n {getText('themeSystem')}\n </SelectItem>\n </SelectContent>\n </Select>\n <p\n className={`${textVariants.body.xs()} text-gray-500 dark:text-gray-400`}\n >\n {getText('themeDescription')}\n </p>\n </div>\n\n {/* Font Size Setting */}\n <div className='space-y-2'>\n <Label\n htmlFor='font-size-select'\n className={textVariants.label.default()}\n >\n {getText('fontSizeLabel')}\n </Label>\n <Select\n value={fontSize}\n onValueChange={(value: string) =>\n onFontSizeChange(value as FontSize)\n }\n >\n <SelectTrigger id='font-size-select'>\n <SelectValue\n placeholder={getText('fontSizeSelectPlaceholder')}\n />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={FontSize.SMALL}>\n {getText('fontSizeSmall')}\n </SelectItem>\n <SelectItem value={FontSize.MEDIUM}>\n {getText('fontSizeMedium')}\n </SelectItem>\n <SelectItem value={FontSize.LARGE}>\n {getText('fontSizeLarge')}\n </SelectItem>\n </SelectContent>\n </Select>\n <p\n className={`${textVariants.body.xs()} text-gray-500 dark:text-gray-400`}\n >\n {getText('fontSizeDescription')}\n </p>\n </div>\n </div>\n\n {/* Information Box */}\n {showInfoBox && (\n <div className='bg-blue-50 dark:bg-blue-900/20 rounded-lg p-4 border border-blue-200 dark:border-blue-800'>\n <h4 className='text-sm font-medium text-blue-900 dark:text-blue-100 mb-2'>\n {getText('infoHeading')}\n </h4>\n <p className='text-sm text-blue-700 dark:text-blue-300'>\n {getText('infoDescription')}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default AppearanceSettings;\n","import React, {\n useState,\n useMemo,\n useCallback,\n type ReactNode,\n type ComponentType,\n} from 'react';\nimport { PaintBrushIcon, ChevronLeftIcon } from '@heroicons/react/24/outline';\nimport { cn } from '../../utils';\nimport { AppearanceSettings } from './appearance-settings';\nimport { Theme, FontSize } from './appearance-settings';\n\n/**\n * Configuration for a settings section in the navigation.\n */\nexport interface SettingsSectionConfig {\n /** Unique identifier for the section */\n id: string;\n /** Icon component to display */\n icon: ComponentType<{ className?: string }>;\n /** Display label */\n label: string;\n /** Short description shown below label */\n description: string;\n /** The content to render when this section is selected */\n content: ReactNode;\n}\n\n/**\n * Translation keys used by GlobalSettingsPage.\n */\nexport interface GlobalSettingsPageTranslations {\n title: string;\n backButton: string;\n appearanceLabel: string;\n appearanceDescription: string;\n}\n\nconst defaultTranslations: GlobalSettingsPageTranslations = {\n title: 'Settings',\n backButton: 'Back',\n appearanceLabel: 'Appearance',\n appearanceDescription: 'Theme and font size settings',\n};\n\nexport interface GlobalSettingsPageProps {\n /** Current theme value */\n theme: Theme | string;\n\n /** Current font size value */\n fontSize: FontSize | string;\n\n /** Callback when theme changes */\n onThemeChange: (theme: Theme) => void;\n\n /** Callback when font size changes */\n onFontSizeChange: (fontSize: FontSize) => void;\n\n /**\n * Additional settings sections to display after Appearance.\n * Each section needs an id, icon, label, description, and content.\n */\n additionalSections?: SettingsSectionConfig[];\n\n /**\n * Optional translation function.\n * Falls back to default English strings if not provided.\n */\n t?: (key: string, fallback?: string) => string;\n\n /**\n * Translation function for AppearanceSettings.\n * If provided, will be passed to AppearanceSettings component.\n */\n appearanceT?: (key: string, fallback?: string) => string;\n\n /** Optional className for the container */\n className?: string;\n\n /** Whether to show the info box in appearance settings */\n showAppearanceInfoBox?: boolean;\n}\n\n/**\n * GlobalSettingsPage - A reusable settings page with master-detail layout.\n *\n * Features:\n * - Appearance settings built-in as the first section\n * - Extensible via additionalSections prop\n * - Responsive master-detail layout\n * - Mobile-friendly with back navigation\n *\n * @example\n * ```tsx\n * // Basic usage\n * <GlobalSettingsPage\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * />\n *\n * // With additional sections\n * <GlobalSettingsPage\n * theme={theme}\n * fontSize={fontSize}\n * onThemeChange={setTheme}\n * onFontSizeChange={setFontSize}\n * additionalSections={[\n * {\n * id: 'notifications',\n * icon: BellIcon,\n * label: 'Notifications',\n * description: 'Manage notification preferences',\n * content: <NotificationSettings />,\n * },\n * ]}\n * />\n * ```\n */\nexport const GlobalSettingsPage: React.FC<GlobalSettingsPageProps> = ({\n theme,\n fontSize,\n onThemeChange,\n onFontSizeChange,\n additionalSections = [],\n t,\n appearanceT,\n className,\n showAppearanceInfoBox = true,\n}) => {\n const [selectedSection, setSelectedSection] = useState('appearance');\n const [mobileView, setMobileView] = useState<'navigation' | 'content'>(\n 'navigation'\n );\n\n // Helper to get translated string with fallback\n const getText = useCallback(\n (key: keyof GlobalSettingsPageTranslations): string => {\n const fallback = defaultTranslations[key];\n return t ? t(key, fallback) : fallback;\n },\n [t]\n );\n\n // Build all sections with appearance first\n const allSections: SettingsSectionConfig[] = useMemo(\n () => [\n {\n id: 'appearance',\n icon: PaintBrushIcon,\n label: getText('appearanceLabel'),\n description: getText('appearanceDescription'),\n content: (\n <AppearanceSettings\n theme={theme}\n fontSize={fontSize}\n onThemeChange={onThemeChange}\n onFontSizeChange={onFontSizeChange}\n t={appearanceT}\n showInfoBox={showAppearanceInfoBox}\n />\n ),\n },\n ...additionalSections,\n ],\n [\n additionalSections,\n getText,\n theme,\n fontSize,\n onThemeChange,\n onFontSizeChange,\n appearanceT,\n showAppearanceInfoBox,\n ]\n );\n\n const currentSection =\n allSections.find(s => s.id === selectedSection) || allSections[0];\n\n const handleSectionSelect = (sectionId: string) => {\n setSelectedSection(sectionId);\n setMobileView('content');\n };\n\n const handleBackToNavigation = () => {\n setMobileView('navigation');\n };\n\n // Navigation list\n const navigationList = (\n <div className='space-y-0'>\n {allSections.map(section => {\n const Icon = section.icon;\n const isSelected = selectedSection === section.id;\n return (\n <div\n key={section.id}\n onClick={() => handleSectionSelect(section.id)}\n className={cn(\n 'flex items-start p-4 cursor-pointer transition-colors',\n 'border-b border-gray-200 dark:border-gray-700 last:border-b-0',\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400'\n : 'hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300'\n )}\n >\n <Icon className='h-5 w-5 mt-0.5 mr-3 flex-shrink-0' />\n <div>\n <div className='font-medium'>{section.label}</div>\n <div className='text-xs text-gray-500 dark:text-gray-400 mt-0.5'>\n {section.description}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n\n return (\n <div className={cn('flex-1', className)}>\n {/* Desktop Layout */}\n <div className='hidden md:flex h-full'>\n {/* Master (Navigation) */}\n <div className='w-80 flex-shrink-0 border-r border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900'>\n <div className='p-4 border-b border-gray-200 dark:border-gray-700'>\n <h1 className='text-xl font-semibold text-gray-900 dark:text-white'>\n {getText('title')}\n </h1>\n </div>\n <div className='overflow-y-auto'>{navigationList}</div>\n </div>\n\n {/* Detail (Content) */}\n <div className='flex-1 overflow-y-auto bg-gray-50 dark:bg-gray-800'>\n <div className='p-6'>\n <h2 className='text-lg font-semibold text-gray-900 dark:text-white mb-6'>\n {currentSection.label}\n </h2>\n {currentSection.content}\n </div>\n </div>\n </div>\n\n {/* Mobile Layout */}\n <div className='md:hidden'>\n {mobileView === 'navigation' ? (\n <div className='bg-white dark:bg-gray-900 min-h-full'>\n <div className='p-4 border-b border-gray-200 dark:border-gray-700'>\n <h1 className='text-xl font-semibold text-gray-900 dark:text-white'>\n {getText('title')}\n </h1>\n </div>\n {navigationList}\n </div>\n ) : (\n <div className='bg-white dark:bg-gray-900 min-h-full'>\n <div className='p-4 border-b border-gray-200 dark:border-gray-700 flex items-center'>\n <button\n onClick={handleBackToNavigation}\n className='flex items-center text-blue-600 dark:text-blue-400 mr-4'\n >\n <ChevronLeftIcon className='h-5 w-5 mr-1' />\n <span>{getText('backButton')}</span>\n </button>\n <h2 className='text-lg font-semibold text-gray-900 dark:text-white'>\n {currentSection.label}\n </h2>\n </div>\n <div className='p-4'>{currentSection.content}</div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default GlobalSettingsPage;\n","import { jsxs as G, jsx as g, Fragment as We } from \"react/jsx-runtime\";\nimport { textVariants as he } from \"@sudobility/design\";\nimport { Card as Be, CardContent as Ue, Button as ve } from \"@sudobility/components\";\nimport { createContext as Ke, useState as K, useCallback as Y, useEffect as Ye, useContext as qe } from \"react\";\nfunction Ie(e) {\n var o, r, t = \"\";\n if (typeof e == \"string\" || typeof e == \"number\") t += e;\n else if (typeof e == \"object\") if (Array.isArray(e)) {\n var n = e.length;\n for (o = 0; o < n; o++) e[o] && (r = Ie(e[o])) && (t && (t += \" \"), t += r);\n } else for (r in e) e[r] && (t && (t += \" \"), t += r);\n return t;\n}\nfunction Xe() {\n for (var e, o, r = 0, t = \"\", n = arguments.length; r < n; r++) (e = arguments[r]) && (o = Ie(e)) && (t && (t += \" \"), t += o);\n return t;\n}\nconst Je = (e, o) => {\n const r = new Array(e.length + o.length);\n for (let t = 0; t < e.length; t++)\n r[t] = e[t];\n for (let t = 0; t < o.length; t++)\n r[e.length + t] = o[t];\n return r;\n}, He = (e, o) => ({\n classGroupId: e,\n validator: o\n}), Re = (e = /* @__PURE__ */ new Map(), o = null, r) => ({\n nextPart: e,\n validators: o,\n classGroupId: r\n}), me = \"-\", Ce = [], Qe = \"arbitrary..\", Ze = (e) => {\n const o = tt(e), {\n conflictingClassGroups: r,\n conflictingClassGroupModifiers: t\n } = e;\n return {\n getClassGroupId: (a) => {\n if (a.startsWith(\"[\") && a.endsWith(\"]\"))\n return et(a);\n const p = a.split(me), c = p[0] === \"\" && p.length > 1 ? 1 : 0;\n return Me(p, c, o);\n },\n getConflictingClassGroupIds: (a, p) => {\n if (p) {\n const c = t[a], h = r[a];\n return c ? h ? Je(h, c) : c : h || Ce;\n }\n return r[a] || Ce;\n }\n };\n}, Me = (e, o, r) => {\n if (e.length - o === 0)\n return r.classGroupId;\n const n = e[o], s = r.nextPart.get(n);\n if (s) {\n const h = Me(e, o + 1, s);\n if (h) return h;\n }\n const a = r.validators;\n if (a === null)\n return;\n const p = o === 0 ? e.join(me) : e.slice(o).join(me), c = a.length;\n for (let h = 0; h < c; h++) {\n const x = a[h];\n if (x.validator(p))\n return x.classGroupId;\n }\n}, et = (e) => e.slice(1, -1).indexOf(\":\") === -1 ? void 0 : (() => {\n const o = e.slice(1, -1), r = o.indexOf(\":\"), t = o.slice(0, r);\n return t ? Qe + t : void 0;\n})(), tt = (e) => {\n const {\n theme: o,\n classGroups: r\n } = e;\n return rt(r, o);\n}, rt = (e, o) => {\n const r = Re();\n for (const t in e) {\n const n = e[t];\n we(n, r, t, o);\n }\n return r;\n}, we = (e, o, r, t) => {\n const n = e.length;\n for (let s = 0; s < n; s++) {\n const a = e[s];\n ot(a, o, r, t);\n }\n}, ot = (e, o, r, t) => {\n if (typeof e == \"string\") {\n nt(e, o, r);\n return;\n }\n if (typeof e == \"function\") {\n st(e, o, r, t);\n return;\n }\n at(e, o, r, t);\n}, nt = (e, o, r) => {\n const t = e === \"\" ? o : De(o, e);\n t.classGroupId = r;\n}, st = (e, o, r, t) => {\n if (it(e)) {\n we(e(t), o, r, t);\n return;\n }\n o.validators === null && (o.validators = []), o.validators.push(He(r, e));\n}, at = (e, o, r, t) => {\n const n = Object.entries(e), s = n.length;\n for (let a = 0; a < s; a++) {\n const [p, c] = n[a];\n we(c, De(o, p), r, t);\n }\n}, De = (e, o) => {\n let r = e;\n const t = o.split(me), n = t.length;\n for (let s = 0; s < n; s++) {\n const a = t[s];\n let p = r.nextPart.get(a);\n p || (p = Re(), r.nextPart.set(a, p)), r = p;\n }\n return r;\n}, it = (e) => \"isThemeGetter\" in e && e.isThemeGetter === !0, lt = (e) => {\n if (e < 1)\n return {\n get: () => {\n },\n set: () => {\n }\n };\n let o = 0, r = /* @__PURE__ */ Object.create(null), t = /* @__PURE__ */ Object.create(null);\n const n = (s, a) => {\n r[s] = a, o++, o > e && (o = 0, t = r, r = /* @__PURE__ */ Object.create(null));\n };\n return {\n get(s) {\n let a = r[s];\n if (a !== void 0)\n return a;\n if ((a = t[s]) !== void 0)\n return n(s, a), a;\n },\n set(s, a) {\n s in r ? r[s] = a : n(s, a);\n }\n };\n}, xe = \"!\", Pe = \":\", ct = [], ze = (e, o, r, t, n) => ({\n modifiers: e,\n hasImportantModifier: o,\n baseClassName: r,\n maybePostfixModifierPosition: t,\n isExternal: n\n}), dt = (e) => {\n const {\n prefix: o,\n experimentalParseClassName: r\n } = e;\n let t = (n) => {\n const s = [];\n let a = 0, p = 0, c = 0, h;\n const x = n.length;\n for (let z = 0; z < x; z++) {\n const k = n[z];\n if (a === 0 && p === 0) {\n if (k === Pe) {\n s.push(n.slice(c, z)), c = z + 1;\n continue;\n }\n if (k === \"/\") {\n h = z;\n continue;\n }\n }\n k === \"[\" ? a++ : k === \"]\" ? a-- : k === \"(\" ? p++ : k === \")\" && p--;\n }\n const S = s.length === 0 ? n : n.slice(c);\n let w = S, y = !1;\n S.endsWith(xe) ? (w = S.slice(0, -1), y = !0) : (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n S.startsWith(xe) && (w = S.slice(1), y = !0)\n );\n const j = h && h > c ? h - c : void 0;\n return ze(s, y, w, j);\n };\n if (o) {\n const n = o + Pe, s = t;\n t = (a) => a.startsWith(n) ? s(a.slice(n.length)) : ze(ct, !1, a, void 0, !0);\n }\n if (r) {\n const n = t;\n t = (s) => r({\n className: s,\n parseClassName: n\n });\n }\n return t;\n}, mt = (e) => {\n const o = /* @__PURE__ */ new Map();\n return e.orderSensitiveModifiers.forEach((r, t) => {\n o.set(r, 1e6 + t);\n }), (r) => {\n const t = [];\n let n = [];\n for (let s = 0; s < r.length; s++) {\n const a = r[s], p = a[0] === \"[\", c = o.has(a);\n p || c ? (n.length > 0 && (n.sort(), t.push(...n), n = []), t.push(a)) : n.push(a);\n }\n return n.length > 0 && (n.sort(), t.push(...n)), t;\n };\n}, ut = (e) => ({\n cache: lt(e.cacheSize),\n parseClassName: dt(e),\n sortModifiers: mt(e),\n ...Ze(e)\n}), ft = /\\s+/, pt = (e, o) => {\n const {\n parseClassName: r,\n getClassGroupId: t,\n getConflictingClassGroupIds: n,\n sortModifiers: s\n } = o, a = [], p = e.trim().split(ft);\n let c = \"\";\n for (let h = p.length - 1; h >= 0; h -= 1) {\n const x = p[h], {\n isExternal: S,\n modifiers: w,\n hasImportantModifier: y,\n baseClassName: j,\n maybePostfixModifierPosition: z\n } = r(x);\n if (S) {\n c = x + (c.length > 0 ? \" \" + c : c);\n continue;\n }\n let k = !!z, D = t(k ? j.substring(0, z) : j);\n if (!D) {\n if (!k) {\n c = x + (c.length > 0 ? \" \" + c : c);\n continue;\n }\n if (D = t(j), !D) {\n c = x + (c.length > 0 ? \" \" + c : c);\n continue;\n }\n k = !1;\n }\n const F = w.length === 0 ? \"\" : w.length === 1 ? w[0] : s(w).join(\":\"), M = y ? F + xe : F, L = M + D;\n if (a.indexOf(L) > -1)\n continue;\n a.push(L);\n const N = n(D, k);\n for (let C = 0; C < N.length; ++C) {\n const E = N[C];\n a.push(M + E);\n }\n c = x + (c.length > 0 ? \" \" + c : c);\n }\n return c;\n}, gt = (...e) => {\n let o = 0, r, t, n = \"\";\n for (; o < e.length; )\n (r = e[o++]) && (t = Ee(r)) && (n && (n += \" \"), n += t);\n return n;\n}, Ee = (e) => {\n if (typeof e == \"string\")\n return e;\n let o, r = \"\";\n for (let t = 0; t < e.length; t++)\n e[t] && (o = Ee(e[t])) && (r && (r += \" \"), r += o);\n return r;\n}, bt = (e, ...o) => {\n let r, t, n, s;\n const a = (c) => {\n const h = o.reduce((x, S) => S(x), e());\n return r = ut(h), t = r.cache.get, n = r.cache.set, s = p, p(c);\n }, p = (c) => {\n const h = t(c);\n if (h)\n return h;\n const x = pt(c, r);\n return n(c, x), x;\n };\n return s = a, (...c) => s(gt(...c));\n}, ht = [], A = (e) => {\n const o = (r) => r[e] || ht;\n return o.isThemeGetter = !0, o;\n}, Oe = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i, Te = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i, xt = /^\\d+\\/\\d+$/, wt = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/, yt = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/, kt = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/, vt = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/, Ct = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/, Z = (e) => xt.test(e), b = (e) => !!e && !Number.isNaN(Number(e)), q = (e) => !!e && Number.isInteger(Number(e)), fe = (e) => e.endsWith(\"%\") && b(e.slice(0, -1)), B = (e) => wt.test(e), Pt = () => !0, zt = (e) => (\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n yt.test(e) && !kt.test(e)\n), Ge = () => !1, Nt = (e) => vt.test(e), At = (e) => Ct.test(e), St = (e) => !i(e) && !l(e), It = (e) => ee(e, _e, Ge), i = (e) => Oe.test(e), X = (e) => ee(e, Fe, zt), pe = (e) => ee(e, Ot, b), Ne = (e) => ee(e, je, Ge), Rt = (e) => ee(e, Le, At), ce = (e) => ee(e, Ve, Nt), l = (e) => Te.test(e), ne = (e) => te(e, Fe), Mt = (e) => te(e, Tt), Ae = (e) => te(e, je), Dt = (e) => te(e, _e), Et = (e) => te(e, Le), de = (e) => te(e, Ve, !0), ee = (e, o, r) => {\n const t = Oe.exec(e);\n return t ? t[1] ? o(t[1]) : r(t[2]) : !1;\n}, te = (e, o, r = !1) => {\n const t = Te.exec(e);\n return t ? t[1] ? o(t[1]) : r : !1;\n}, je = (e) => e === \"position\" || e === \"percentage\", Le = (e) => e === \"image\" || e === \"url\", _e = (e) => e === \"length\" || e === \"size\" || e === \"bg-size\", Fe = (e) => e === \"length\", Ot = (e) => e === \"number\", Tt = (e) => e === \"family-name\", Ve = (e) => e === \"shadow\", Gt = () => {\n const e = A(\"color\"), o = A(\"font\"), r = A(\"text\"), t = A(\"font-weight\"), n = A(\"tracking\"), s = A(\"leading\"), a = A(\"breakpoint\"), p = A(\"container\"), c = A(\"spacing\"), h = A(\"radius\"), x = A(\"shadow\"), S = A(\"inset-shadow\"), w = A(\"text-shadow\"), y = A(\"drop-shadow\"), j = A(\"blur\"), z = A(\"perspective\"), k = A(\"aspect\"), D = A(\"ease\"), F = A(\"animate\"), M = () => [\"auto\", \"avoid\", \"all\", \"avoid-page\", \"page\", \"left\", \"right\", \"column\"], L = () => [\n \"center\",\n \"top\",\n \"bottom\",\n \"left\",\n \"right\",\n \"top-left\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"left-top\",\n \"top-right\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"right-top\",\n \"bottom-right\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"right-bottom\",\n \"bottom-left\",\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n \"left-bottom\"\n ], N = () => [...L(), l, i], C = () => [\"auto\", \"hidden\", \"clip\", \"visible\", \"scroll\"], E = () => [\"auto\", \"contain\", \"none\"], m = () => [l, i, c], V = () => [Z, \"full\", \"auto\", ...m()], J = () => [q, \"none\", \"subgrid\", l, i], H = () => [\"auto\", {\n span: [\"full\", q, l, i]\n }, q, l, i], I = () => [q, \"auto\", l, i], U = () => [\"auto\", \"min\", \"max\", \"fr\", l, i], re = () => [\"start\", \"end\", \"center\", \"between\", \"around\", \"evenly\", \"stretch\", \"baseline\", \"center-safe\", \"end-safe\"], u = () => [\"start\", \"end\", \"center\", \"stretch\", \"center-safe\", \"end-safe\"], f = () => [\"auto\", ...m()], v = () => [Z, \"auto\", \"full\", \"dvw\", \"dvh\", \"lvw\", \"lvh\", \"svw\", \"svh\", \"min\", \"max\", \"fit\", ...m()], d = () => [e, l, i], O = () => [...L(), Ae, Ne, {\n position: [l, i]\n }], W = () => [\"no-repeat\", {\n repeat: [\"\", \"x\", \"y\", \"space\", \"round\"]\n }], Q = () => [\"auto\", \"cover\", \"contain\", Dt, It, {\n size: [l, i]\n }], oe = () => [fe, ne, X], _ = () => [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n \"full\",\n h,\n l,\n i\n ], $ = () => [\"\", b, ne, X], se = () => [\"solid\", \"dashed\", \"dotted\", \"double\"], ye = () => [\"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"color-dodge\", \"color-burn\", \"hard-light\", \"soft-light\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\"], R = () => [b, fe, Ae, Ne], ke = () => [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n j,\n l,\n i\n ], ae = () => [\"none\", b, l, i], ie = () => [\"none\", b, l, i], ue = () => [b, l, i], le = () => [Z, \"full\", ...m()];\n return {\n cacheSize: 500,\n theme: {\n animate: [\"spin\", \"ping\", \"pulse\", \"bounce\"],\n aspect: [\"video\"],\n blur: [B],\n breakpoint: [B],\n color: [Pt],\n container: [B],\n \"drop-shadow\": [B],\n ease: [\"in\", \"out\", \"in-out\"],\n font: [St],\n \"font-weight\": [\"thin\", \"extralight\", \"light\", \"normal\", \"medium\", \"semibold\", \"bold\", \"extrabold\", \"black\"],\n \"inset-shadow\": [B],\n leading: [\"none\", \"tight\", \"snug\", \"normal\", \"relaxed\", \"loose\"],\n perspective: [\"dramatic\", \"near\", \"normal\", \"midrange\", \"distant\", \"none\"],\n radius: [B],\n shadow: [B],\n spacing: [\"px\", b],\n text: [B],\n \"text-shadow\": [B],\n tracking: [\"tighter\", \"tight\", \"normal\", \"wide\", \"wider\", \"widest\"]\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: [\"auto\", \"square\", Z, i, l, k]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: [\"container\"],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [b, i, l, p]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n \"break-after\": [{\n \"break-after\": M()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n \"break-before\": [{\n \"break-before\": M()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n \"break-inside\": [{\n \"break-inside\": [\"auto\", \"avoid\", \"avoid-page\", \"avoid-column\"]\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n \"box-decoration\": [{\n \"box-decoration\": [\"slice\", \"clone\"]\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: [\"border\", \"content\"]\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\"block\", \"inline-block\", \"inline\", \"flex\", \"inline-flex\", \"table\", \"inline-table\", \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row-group\", \"table-row\", \"flow-root\", \"grid\", \"inline-grid\", \"contents\", \"list-item\", \"hidden\"],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: [\"sr-only\", \"not-sr-only\"],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: [\"right\", \"left\", \"none\", \"start\", \"end\"]\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: [\"left\", \"right\", \"both\", \"none\", \"start\", \"end\"]\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: [\"isolate\", \"isolation-auto\"],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n \"object-fit\": [{\n object: [\"contain\", \"cover\", \"fill\", \"none\", \"scale-down\"]\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n \"object-position\": [{\n object: N()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: C()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n \"overflow-x\": [{\n \"overflow-x\": C()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n \"overflow-y\": [{\n \"overflow-y\": C()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: E()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n \"overscroll-x\": [{\n \"overscroll-x\": E()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n \"overscroll-y\": [{\n \"overscroll-y\": E()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: [\"static\", \"fixed\", \"absolute\", \"relative\", \"sticky\"],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: V()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n \"inset-x\": [{\n \"inset-x\": V()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n \"inset-y\": [{\n \"inset-y\": V()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: V()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: V()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: V()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: V()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: V()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: V()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: [\"visible\", \"invisible\", \"collapse\"],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [q, \"auto\", l, i]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [Z, \"full\", \"auto\", p, ...m()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n \"flex-direction\": [{\n flex: [\"row\", \"row-reverse\", \"col\", \"col-reverse\"]\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n \"flex-wrap\": [{\n flex: [\"nowrap\", \"wrap\", \"wrap-reverse\"]\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [b, Z, \"auto\", \"initial\", \"none\", i]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: [\"\", b, l, i]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: [\"\", b, l, i]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [q, \"first\", \"last\", \"none\", l, i]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n \"grid-cols\": [{\n \"grid-cols\": J()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n \"col-start-end\": [{\n col: H()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n \"col-start\": [{\n \"col-start\": I()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n \"col-end\": [{\n \"col-end\": I()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n \"grid-rows\": [{\n \"grid-rows\": J()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n \"row-start-end\": [{\n row: H()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n \"row-start\": [{\n \"row-start\": I()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n \"row-end\": [{\n \"row-end\": I()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n \"grid-flow\": [{\n \"grid-flow\": [\"row\", \"col\", \"dense\", \"row-dense\", \"col-dense\"]\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n \"auto-cols\": [{\n \"auto-cols\": U()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n \"auto-rows\": [{\n \"auto-rows\": U()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: m()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n \"gap-x\": [{\n \"gap-x\": m()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n \"gap-y\": [{\n \"gap-y\": m()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n \"justify-content\": [{\n justify: [...re(), \"normal\"]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n \"justify-items\": [{\n \"justify-items\": [...u(), \"normal\"]\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n \"justify-self\": [{\n \"justify-self\": [\"auto\", ...u()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n \"align-content\": [{\n content: [\"normal\", ...re()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n \"align-items\": [{\n items: [...u(), {\n baseline: [\"\", \"last\"]\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n \"align-self\": [{\n self: [\"auto\", ...u(), {\n baseline: [\"\", \"last\"]\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n \"place-content\": [{\n \"place-content\": re()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n \"place-items\": [{\n \"place-items\": [...u(), \"baseline\"]\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n \"place-self\": [{\n \"place-self\": [\"auto\", ...u()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: m()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: m()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: m()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: m()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: m()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: m()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: m()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: m()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: m()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: f()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: f()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: f()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: f()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: f()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: f()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: f()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: f()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: f()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-x\": [{\n \"space-x\": m()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-x-reverse\": [\"space-x-reverse\"],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-y\": [{\n \"space-y\": m()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n \"space-y-reverse\": [\"space-y-reverse\"],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: v()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [p, \"screen\", ...v()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n \"min-w\": [{\n \"min-w\": [\n p,\n \"screen\",\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n \"none\",\n ...v()\n ]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n \"max-w\": [{\n \"max-w\": [\n p,\n \"screen\",\n \"none\",\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n \"prose\",\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [a]\n },\n ...v()\n ]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [\"screen\", \"lh\", ...v()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n \"min-h\": [{\n \"min-h\": [\"screen\", \"lh\", \"none\", ...v()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n \"max-h\": [{\n \"max-h\": [\"screen\", \"lh\", ...v()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n \"font-size\": [{\n text: [\"base\", r, ne, X]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n \"font-smoothing\": [\"antialiased\", \"subpixel-antialiased\"],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n \"font-style\": [\"italic\", \"not-italic\"],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n \"font-weight\": [{\n font: [t, l, pe]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n \"font-stretch\": [{\n \"font-stretch\": [\"ultra-condensed\", \"extra-condensed\", \"condensed\", \"semi-condensed\", \"normal\", \"semi-expanded\", \"expanded\", \"extra-expanded\", \"ultra-expanded\", fe, i]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n \"font-family\": [{\n font: [Mt, i, o]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-normal\": [\"normal-nums\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-ordinal\": [\"ordinal\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-slashed-zero\": [\"slashed-zero\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-figure\": [\"lining-nums\", \"oldstyle-nums\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-spacing\": [\"proportional-nums\", \"tabular-nums\"],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n \"fvn-fraction\": [\"diagonal-fractions\", \"stacked-fractions\"],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [n, l, i]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n \"line-clamp\": [{\n \"line-clamp\": [b, \"none\", l, pe]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n s,\n ...m()\n ]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n \"list-image\": [{\n \"list-image\": [\"none\", l, i]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n \"list-style-position\": [{\n list: [\"inside\", \"outside\"]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n \"list-style-type\": [{\n list: [\"disc\", \"decimal\", \"none\", l, i]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n \"text-alignment\": [{\n text: [\"left\", \"center\", \"right\", \"justify\", \"start\", \"end\"]\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n \"placeholder-color\": [{\n placeholder: d()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n \"text-color\": [{\n text: d()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n \"text-decoration\": [\"underline\", \"overline\", \"line-through\", \"no-underline\"],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n \"text-decoration-style\": [{\n decoration: [...se(), \"wavy\"]\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n \"text-decoration-thickness\": [{\n decoration: [b, \"from-font\", \"auto\", l, X]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n \"text-decoration-color\": [{\n decoration: d()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n \"underline-offset\": [{\n \"underline-offset\": [b, \"auto\", l, i]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n \"text-transform\": [\"uppercase\", \"lowercase\", \"capitalize\", \"normal-case\"],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n \"text-overflow\": [\"truncate\", \"text-ellipsis\", \"text-clip\"],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n \"text-wrap\": [{\n text: [\"wrap\", \"nowrap\", \"balance\", \"pretty\"]\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: m()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n \"vertical-align\": [{\n align: [\"baseline\", \"top\", \"middle\", \"bottom\", \"text-top\", \"text-bottom\", \"sub\", \"super\", l, i]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: [\"normal\", \"nowrap\", \"pre\", \"pre-line\", \"pre-wrap\", \"break-spaces\"]\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: [\"normal\", \"words\", \"all\", \"keep\"]\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: [\"break-word\", \"anywhere\", \"normal\"]\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: [\"none\", \"manual\", \"auto\"]\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: [\"none\", l, i]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n \"bg-attachment\": [{\n bg: [\"fixed\", \"local\", \"scroll\"]\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n \"bg-clip\": [{\n \"bg-clip\": [\"border\", \"padding\", \"content\", \"text\"]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n \"bg-origin\": [{\n \"bg-origin\": [\"border\", \"padding\", \"content\"]\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n \"bg-position\": [{\n bg: O()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n \"bg-repeat\": [{\n bg: W()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n \"bg-size\": [{\n bg: Q()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n \"bg-image\": [{\n bg: [\"none\", {\n linear: [{\n to: [\"t\", \"tr\", \"r\", \"br\", \"b\", \"bl\", \"l\", \"tl\"]\n }, q, l, i],\n radial: [\"\", l, i],\n conic: [q, l, i]\n }, Et, Rt]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n \"bg-color\": [{\n bg: d()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-from-pos\": [{\n from: oe()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-via-pos\": [{\n via: oe()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-to-pos\": [{\n to: oe()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-from\": [{\n from: d()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-via\": [{\n via: d()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n \"gradient-to\": [{\n to: d()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: _()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-s\": [{\n \"rounded-s\": _()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-e\": [{\n \"rounded-e\": _()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-t\": [{\n \"rounded-t\": _()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-r\": [{\n \"rounded-r\": _()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-b\": [{\n \"rounded-b\": _()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-l\": [{\n \"rounded-l\": _()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-ss\": [{\n \"rounded-ss\": _()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-se\": [{\n \"rounded-se\": _()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-ee\": [{\n \"rounded-ee\": _()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-es\": [{\n \"rounded-es\": _()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-tl\": [{\n \"rounded-tl\": _()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-tr\": [{\n \"rounded-tr\": _()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-br\": [{\n \"rounded-br\": _()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n \"rounded-bl\": [{\n \"rounded-bl\": _()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w\": [{\n border: $()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-x\": [{\n \"border-x\": $()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-y\": [{\n \"border-y\": $()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-s\": [{\n \"border-s\": $()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-e\": [{\n \"border-e\": $()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-t\": [{\n \"border-t\": $()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-r\": [{\n \"border-r\": $()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-b\": [{\n \"border-b\": $()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n \"border-w-l\": [{\n \"border-l\": $()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-x\": [{\n \"divide-x\": $()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-x-reverse\": [\"divide-x-reverse\"],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-y\": [{\n \"divide-y\": $()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n \"divide-y-reverse\": [\"divide-y-reverse\"],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n \"border-style\": [{\n border: [...se(), \"hidden\", \"none\"]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n \"divide-style\": [{\n divide: [...se(), \"hidden\", \"none\"]\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color\": [{\n border: d()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-x\": [{\n \"border-x\": d()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-y\": [{\n \"border-y\": d()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-s\": [{\n \"border-s\": d()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-e\": [{\n \"border-e\": d()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-t\": [{\n \"border-t\": d()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-r\": [{\n \"border-r\": d()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-b\": [{\n \"border-b\": d()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n \"border-color-l\": [{\n \"border-l\": d()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n \"divide-color\": [{\n divide: d()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n \"outline-style\": [{\n outline: [...se(), \"none\", \"hidden\"]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n \"outline-offset\": [{\n \"outline-offset\": [b, l, i]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n \"outline-w\": [{\n outline: [\"\", b, ne, X]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n \"outline-color\": [{\n outline: d()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n x,\n de,\n ce\n ]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n \"shadow-color\": [{\n shadow: d()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n \"inset-shadow\": [{\n \"inset-shadow\": [\"none\", S, de, ce]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n \"inset-shadow-color\": [{\n \"inset-shadow\": d()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n \"ring-w\": [{\n ring: $()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n \"ring-w-inset\": [\"ring-inset\"],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n \"ring-color\": [{\n ring: d()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n \"ring-offset-w\": [{\n \"ring-offset\": [b, X]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n \"ring-offset-color\": [{\n \"ring-offset\": d()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n \"inset-ring-w\": [{\n \"inset-ring\": $()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n \"inset-ring-color\": [{\n \"inset-ring\": d()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n \"text-shadow\": [{\n \"text-shadow\": [\"none\", w, de, ce]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n \"text-shadow-color\": [{\n \"text-shadow\": d()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [b, l, i]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n \"mix-blend\": [{\n \"mix-blend\": [...ye(), \"plus-darker\", \"plus-lighter\"]\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n \"bg-blend\": [{\n \"bg-blend\": ye()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n \"mask-clip\": [{\n \"mask-clip\": [\"border\", \"padding\", \"content\", \"fill\", \"stroke\", \"view\"]\n }, \"mask-no-clip\"],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n \"mask-composite\": [{\n mask: [\"add\", \"subtract\", \"intersect\", \"exclude\"]\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n \"mask-image-linear-pos\": [{\n \"mask-linear\": [b]\n }],\n \"mask-image-linear-from-pos\": [{\n \"mask-linear-from\": R()\n }],\n \"mask-image-linear-to-pos\": [{\n \"mask-linear-to\": R()\n }],\n \"mask-image-linear-from-color\": [{\n \"mask-linear-from\": d()\n }],\n \"mask-image-linear-to-color\": [{\n \"mask-linear-to\": d()\n }],\n \"mask-image-t-from-pos\": [{\n \"mask-t-from\": R()\n }],\n \"mask-image-t-to-pos\": [{\n \"mask-t-to\": R()\n }],\n \"mask-image-t-from-color\": [{\n \"mask-t-from\": d()\n }],\n \"mask-image-t-to-color\": [{\n \"mask-t-to\": d()\n }],\n \"mask-image-r-from-pos\": [{\n \"mask-r-from\": R()\n }],\n \"mask-image-r-to-pos\": [{\n \"mask-r-to\": R()\n }],\n \"mask-image-r-from-color\": [{\n \"mask-r-from\": d()\n }],\n \"mask-image-r-to-color\": [{\n \"mask-r-to\": d()\n }],\n \"mask-image-b-from-pos\": [{\n \"mask-b-from\": R()\n }],\n \"mask-image-b-to-pos\": [{\n \"mask-b-to\": R()\n }],\n \"mask-image-b-from-color\": [{\n \"mask-b-from\": d()\n }],\n \"mask-image-b-to-color\": [{\n \"mask-b-to\": d()\n }],\n \"mask-image-l-from-pos\": [{\n \"mask-l-from\": R()\n }],\n \"mask-image-l-to-pos\": [{\n \"mask-l-to\": R()\n }],\n \"mask-image-l-from-color\": [{\n \"mask-l-from\": d()\n }],\n \"mask-image-l-to-color\": [{\n \"mask-l-to\": d()\n }],\n \"mask-image-x-from-pos\": [{\n \"mask-x-from\": R()\n }],\n \"mask-image-x-to-pos\": [{\n \"mask-x-to\": R()\n }],\n \"mask-image-x-from-color\": [{\n \"mask-x-from\": d()\n }],\n \"mask-image-x-to-color\": [{\n \"mask-x-to\": d()\n }],\n \"mask-image-y-from-pos\": [{\n \"mask-y-from\": R()\n }],\n \"mask-image-y-to-pos\": [{\n \"mask-y-to\": R()\n }],\n \"mask-image-y-from-color\": [{\n \"mask-y-from\": d()\n }],\n \"mask-image-y-to-color\": [{\n \"mask-y-to\": d()\n }],\n \"mask-image-radial\": [{\n \"mask-radial\": [l, i]\n }],\n \"mask-image-radial-from-pos\": [{\n \"mask-radial-from\": R()\n }],\n \"mask-image-radial-to-pos\": [{\n \"mask-radial-to\": R()\n }],\n \"mask-image-radial-from-color\": [{\n \"mask-radial-from\": d()\n }],\n \"mask-image-radial-to-color\": [{\n \"mask-radial-to\": d()\n }],\n \"mask-image-radial-shape\": [{\n \"mask-radial\": [\"circle\", \"ellipse\"]\n }],\n \"mask-image-radial-size\": [{\n \"mask-radial\": [{\n closest: [\"side\", \"corner\"],\n farthest: [\"side\", \"corner\"]\n }]\n }],\n \"mask-image-radial-pos\": [{\n \"mask-radial-at\": L()\n }],\n \"mask-image-conic-pos\": [{\n \"mask-conic\": [b]\n }],\n \"mask-image-conic-from-pos\": [{\n \"mask-conic-from\": R()\n }],\n \"mask-image-conic-to-pos\": [{\n \"mask-conic-to\": R()\n }],\n \"mask-image-conic-from-color\": [{\n \"mask-conic-from\": d()\n }],\n \"mask-image-conic-to-color\": [{\n \"mask-conic-to\": d()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n \"mask-mode\": [{\n mask: [\"alpha\", \"luminance\", \"match\"]\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n \"mask-origin\": [{\n \"mask-origin\": [\"border\", \"padding\", \"content\", \"fill\", \"stroke\", \"view\"]\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n \"mask-position\": [{\n mask: O()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n \"mask-repeat\": [{\n mask: W()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n \"mask-size\": [{\n mask: Q()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n \"mask-type\": [{\n \"mask-type\": [\"alpha\", \"luminance\"]\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n \"mask-image\": [{\n mask: [\"none\", l, i]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n \"\",\n \"none\",\n l,\n i\n ]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: ke()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [b, l, i]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [b, l, i]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n \"drop-shadow\": [{\n \"drop-shadow\": [\n // Deprecated since Tailwind CSS v4.0.0\n \"\",\n \"none\",\n y,\n de,\n ce\n ]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n \"drop-shadow-color\": [{\n \"drop-shadow\": d()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [\"\", b, l, i]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n \"hue-rotate\": [{\n \"hue-rotate\": [b, l, i]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [\"\", b, l, i]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [b, l, i]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [\"\", b, l, i]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n \"backdrop-filter\": [{\n \"backdrop-filter\": [\n // Deprecated since Tailwind CSS v3.0.0\n \"\",\n \"none\",\n l,\n i\n ]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n \"backdrop-blur\": [{\n \"backdrop-blur\": ke()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n \"backdrop-brightness\": [{\n \"backdrop-brightness\": [b, l, i]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n \"backdrop-contrast\": [{\n \"backdrop-contrast\": [b, l, i]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n \"backdrop-grayscale\": [{\n \"backdrop-grayscale\": [\"\", b, l, i]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n \"backdrop-hue-rotate\": [{\n \"backdrop-hue-rotate\": [b, l, i]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n \"backdrop-invert\": [{\n \"backdrop-invert\": [\"\", b, l, i]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n \"backdrop-opacity\": [{\n \"backdrop-opacity\": [b, l, i]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n \"backdrop-saturate\": [{\n \"backdrop-saturate\": [b, l, i]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n \"backdrop-sepia\": [{\n \"backdrop-sepia\": [\"\", b, l, i]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n \"border-collapse\": [{\n border: [\"collapse\", \"separate\"]\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n \"border-spacing\": [{\n \"border-spacing\": m()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n \"border-spacing-x\": [{\n \"border-spacing-x\": m()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n \"border-spacing-y\": [{\n \"border-spacing-y\": m()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n \"table-layout\": [{\n table: [\"auto\", \"fixed\"]\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: [\"top\", \"bottom\"]\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: [\"\", \"all\", \"colors\", \"opacity\", \"shadow\", \"transform\", \"none\", l, i]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n \"transition-behavior\": [{\n transition: [\"normal\", \"discrete\"]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [b, \"initial\", l, i]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: [\"linear\", \"initial\", D, l, i]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [b, l, i]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: [\"none\", F, l, i]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: [\"hidden\", \"visible\"]\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [z, l, i]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n \"perspective-origin\": [{\n \"perspective-origin\": N()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: ae()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n \"rotate-x\": [{\n \"rotate-x\": ae()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n \"rotate-y\": [{\n \"rotate-y\": ae()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n \"rotate-z\": [{\n \"rotate-z\": ae()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: ie()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-x\": [{\n \"scale-x\": ie()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-y\": [{\n \"scale-y\": ie()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-z\": [{\n \"scale-z\": ie()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n \"scale-3d\": [\"scale-3d\"],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: ue()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n \"skew-x\": [{\n \"skew-x\": ue()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n \"skew-y\": [{\n \"skew-y\": ue()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [l, i, \"\", \"none\", \"gpu\", \"cpu\"]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n \"transform-origin\": [{\n origin: N()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n \"transform-style\": [{\n transform: [\"3d\", \"flat\"]\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: le()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-x\": [{\n \"translate-x\": le()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-y\": [{\n \"translate-y\": le()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-z\": [{\n \"translate-z\": le()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n \"translate-none\": [\"translate-none\"],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: d()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: [\"none\", \"auto\"]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n \"caret-color\": [{\n caret: d()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n \"color-scheme\": [{\n scheme: [\"normal\", \"dark\", \"light\", \"light-dark\", \"only-dark\", \"only-light\"]\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: [\"auto\", \"default\", \"pointer\", \"wait\", \"text\", \"move\", \"help\", \"not-allowed\", \"none\", \"context-menu\", \"progress\", \"cell\", \"crosshair\", \"vertical-text\", \"alias\", \"copy\", \"no-drop\", \"grab\", \"grabbing\", \"all-scroll\", \"col-resize\", \"row-resize\", \"n-resize\", \"e-resize\", \"s-resize\", \"w-resize\", \"ne-resize\", \"nw-resize\", \"se-resize\", \"sw-resize\", \"ew-resize\", \"ns-resize\", \"nesw-resize\", \"nwse-resize\", \"zoom-in\", \"zoom-out\", l, i]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n \"field-sizing\": [{\n \"field-sizing\": [\"fixed\", \"content\"]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n \"pointer-events\": [{\n \"pointer-events\": [\"auto\", \"none\"]\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: [\"none\", \"\", \"y\", \"x\"]\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n \"scroll-behavior\": [{\n scroll: [\"auto\", \"smooth\"]\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-m\": [{\n \"scroll-m\": m()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mx\": [{\n \"scroll-mx\": m()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-my\": [{\n \"scroll-my\": m()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-ms\": [{\n \"scroll-ms\": m()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-me\": [{\n \"scroll-me\": m()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mt\": [{\n \"scroll-mt\": m()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mr\": [{\n \"scroll-mr\": m()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-mb\": [{\n \"scroll-mb\": m()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n \"scroll-ml\": [{\n \"scroll-ml\": m()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-p\": [{\n \"scroll-p\": m()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-px\": [{\n \"scroll-px\": m()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-py\": [{\n \"scroll-py\": m()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-ps\": [{\n \"scroll-ps\": m()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pe\": [{\n \"scroll-pe\": m()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pt\": [{\n \"scroll-pt\": m()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pr\": [{\n \"scroll-pr\": m()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pb\": [{\n \"scroll-pb\": m()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n \"scroll-pl\": [{\n \"scroll-pl\": m()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n \"snap-align\": [{\n snap: [\"start\", \"end\", \"center\", \"align-none\"]\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n \"snap-stop\": [{\n snap: [\"normal\", \"always\"]\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n \"snap-type\": [{\n snap: [\"none\", \"x\", \"y\", \"both\"]\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n \"snap-strictness\": [{\n snap: [\"mandatory\", \"proximity\"]\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: [\"auto\", \"none\", \"manipulation\"]\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n \"touch-x\": [{\n \"touch-pan\": [\"x\", \"left\", \"right\"]\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n \"touch-y\": [{\n \"touch-pan\": [\"y\", \"up\", \"down\"]\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n \"touch-pz\": [\"touch-pinch-zoom\"],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: [\"none\", \"text\", \"all\", \"auto\"]\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n \"will-change\": [{\n \"will-change\": [\"auto\", \"scroll\", \"contents\", \"transform\", l, i]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [\"none\", ...d()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n \"stroke-w\": [{\n stroke: [b, ne, X, pe]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [\"none\", ...d()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n \"forced-color-adjust\": [{\n \"forced-color-adjust\": [\"auto\", \"none\"]\n }]\n },\n conflictingClassGroups: {\n overflow: [\"overflow-x\", \"overflow-y\"],\n overscroll: [\"overscroll-x\", \"overscroll-y\"],\n inset: [\"inset-x\", \"inset-y\", \"start\", \"end\", \"top\", \"right\", \"bottom\", \"left\"],\n \"inset-x\": [\"right\", \"left\"],\n \"inset-y\": [\"top\", \"bottom\"],\n flex: [\"basis\", \"grow\", \"shrink\"],\n gap: [\"gap-x\", \"gap-y\"],\n p: [\"px\", \"py\", \"ps\", \"pe\", \"pt\", \"pr\", \"pb\", \"pl\"],\n px: [\"pr\", \"pl\"],\n py: [\"pt\", \"pb\"],\n m: [\"mx\", \"my\", \"ms\", \"me\", \"mt\", \"mr\", \"mb\", \"ml\"],\n mx: [\"mr\", \"ml\"],\n my: [\"mt\", \"mb\"],\n size: [\"w\", \"h\"],\n \"font-size\": [\"leading\"],\n \"fvn-normal\": [\"fvn-ordinal\", \"fvn-slashed-zero\", \"fvn-figure\", \"fvn-spacing\", \"fvn-fraction\"],\n \"fvn-ordinal\": [\"fvn-normal\"],\n \"fvn-slashed-zero\": [\"fvn-normal\"],\n \"fvn-figure\": [\"fvn-normal\"],\n \"fvn-spacing\": [\"fvn-normal\"],\n \"fvn-fraction\": [\"fvn-normal\"],\n \"line-clamp\": [\"display\", \"overflow\"],\n rounded: [\"rounded-s\", \"rounded-e\", \"rounded-t\", \"rounded-r\", \"rounded-b\", \"rounded-l\", \"rounded-ss\", \"rounded-se\", \"rounded-ee\", \"rounded-es\", \"rounded-tl\", \"rounded-tr\", \"rounded-br\", \"rounded-bl\"],\n \"rounded-s\": [\"rounded-ss\", \"rounded-es\"],\n \"rounded-e\": [\"rounded-se\", \"rounded-ee\"],\n \"rounded-t\": [\"rounded-tl\", \"rounded-tr\"],\n \"rounded-r\": [\"rounded-tr\", \"rounded-br\"],\n \"rounded-b\": [\"rounded-br\", \"rounded-bl\"],\n \"rounded-l\": [\"rounded-tl\", \"rounded-bl\"],\n \"border-spacing\": [\"border-spacing-x\", \"border-spacing-y\"],\n \"border-w\": [\"border-w-x\", \"border-w-y\", \"border-w-s\", \"border-w-e\", \"border-w-t\", \"border-w-r\", \"border-w-b\", \"border-w-l\"],\n \"border-w-x\": [\"border-w-r\", \"border-w-l\"],\n \"border-w-y\": [\"border-w-t\", \"border-w-b\"],\n \"border-color\": [\"border-color-x\", \"border-color-y\", \"border-color-s\", \"border-color-e\", \"border-color-t\", \"border-color-r\", \"border-color-b\", \"border-color-l\"],\n \"border-color-x\": [\"border-color-r\", \"border-color-l\"],\n \"border-color-y\": [\"border-color-t\", \"border-color-b\"],\n translate: [\"translate-x\", \"translate-y\", \"translate-none\"],\n \"translate-none\": [\"translate\", \"translate-x\", \"translate-y\", \"translate-z\"],\n \"scroll-m\": [\"scroll-mx\", \"scroll-my\", \"scroll-ms\", \"scroll-me\", \"scroll-mt\", \"scroll-mr\", \"scroll-mb\", \"scroll-ml\"],\n \"scroll-mx\": [\"scroll-mr\", \"scroll-ml\"],\n \"scroll-my\": [\"scroll-mt\", \"scroll-mb\"],\n \"scroll-p\": [\"scroll-px\", \"scroll-py\", \"scroll-ps\", \"scroll-pe\", \"scroll-pt\", \"scroll-pr\", \"scroll-pb\", \"scroll-pl\"],\n \"scroll-px\": [\"scroll-pr\", \"scroll-pl\"],\n \"scroll-py\": [\"scroll-pt\", \"scroll-pb\"],\n touch: [\"touch-x\", \"touch-y\", \"touch-pz\"],\n \"touch-x\": [\"touch\"],\n \"touch-y\": [\"touch\"],\n \"touch-pz\": [\"touch\"]\n },\n conflictingClassGroupModifiers: {\n \"font-size\": [\"leading\"]\n },\n orderSensitiveModifiers: [\"*\", \"**\", \"after\", \"backdrop\", \"before\", \"details-content\", \"file\", \"first-letter\", \"first-line\", \"marker\", \"placeholder\", \"selection\"]\n };\n}, jt = /* @__PURE__ */ bt(Gt);\nfunction P(...e) {\n return jt(Xe(e));\n}\nconst Lt = {\n purple: \"bg-purple-500\",\n green: \"bg-green-500\",\n blue: \"bg-blue-500\",\n yellow: \"bg-yellow-400 !text-yellow-900\",\n red: \"bg-red-500\"\n}, _t = ({\n id: e,\n title: o,\n price: r,\n periodLabel: t,\n features: n,\n isSelected: s,\n onSelect: a,\n topBadge: p,\n discountBadge: c,\n premiumCallout: h,\n bottomNote: x,\n introPriceNote: S,\n isBestValue: w = !1,\n ctaButton: y,\n className: j,\n children: z,\n disabled: k = !1,\n ariaLabel: D,\n onTrack: F,\n trackingLabel: M,\n componentName: L = \"SubscriptionTile\",\n hideSelectionIndicator: N = !1\n}) => {\n const C = !!y, E = !N, m = s ? \"bg-blue-600 text-white ring-4 ring-blue-600 ring-offset-4 ring-offset-white dark:ring-offset-gray-900 border-transparent\" : \"bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 hover:shadow-md\", V = () => {\n !k && !C && (F?.({ action: \"select\", trackingLabel: M, componentName: L }), a());\n }, J = (I) => {\n !k && !C && (I.key === \"Enter\" || I.key === \" \") && (I.preventDefault(), F?.({ action: \"select\", trackingLabel: M, componentName: L }), a());\n }, H = (I) => {\n I.stopPropagation(), F?.({ action: \"cta_click\", trackingLabel: M, componentName: L }), y?.onClick && y.onClick();\n };\n return /* @__PURE__ */ G(\n \"div\",\n {\n className: P(\n \"relative rounded-2xl p-6 transition-all flex flex-col h-full\",\n // Add extra bottom padding for radio button or CTA button (not needed if hidden)\n E && (C ? \"pb-20\" : \"pb-14\"),\n k ? \"opacity-50 cursor-not-allowed\" : C ? \"cursor-default\" : \"cursor-pointer\",\n m,\n j\n ),\n onClick: V,\n onKeyDown: J,\n role: C ? \"article\" : \"radio\",\n \"aria-checked\": C ? void 0 : s,\n \"aria-label\": D || `${o} - ${r}${t || \"\"}`,\n \"aria-disabled\": k,\n tabIndex: C || k ? -1 : 0,\n children: [\n p && /* @__PURE__ */ g(\"div\", { className: \"absolute top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 z-10\", children: /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n Lt[p.color],\n \"text-white px-4 py-1.5 rounded-full text-sm font-semibold shadow-lg whitespace-nowrap\"\n ),\n children: p.text\n }\n ) }),\n /* @__PURE__ */ G(\"div\", { className: \"flex flex-col flex-grow\", children: [\n /* @__PURE__ */ G(\"div\", { className: P(\"text-center mb-6\", p && \"mt-2\"), children: [\n /* @__PURE__ */ g(\n \"h3\",\n {\n className: P(\n he.heading.h4(),\n \"mb-2\",\n s ? \"text-white\" : \"\"\n ),\n children: o\n }\n ),\n /* @__PURE__ */ G(\"div\", { className: \"mb-3\", children: [\n /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"text-4xl font-bold\",\n s ? \"text-white\" : \"text-gray-900 dark:text-gray-100\"\n ),\n children: r\n }\n ),\n t && /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"text-lg\",\n s ? \"text-blue-100\" : \"text-gray-500 dark:text-gray-400\"\n ),\n children: t\n }\n )\n ] }),\n c && /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"inline-flex items-center px-2 py-1 rounded-full text-sm font-semibold\",\n s ? \"bg-blue-500 text-white\" : \"bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300\"\n ),\n children: c.text\n }\n )\n ] }),\n z,\n n.length > 0 && /* @__PURE__ */ g(\"div\", { className: \"space-y-3 mb-6 flex-grow\", children: n.map((I, U) => /* @__PURE__ */ G(\"div\", { className: \"flex items-start\", children: [\n /* @__PURE__ */ g(\n \"svg\",\n {\n className: P(\n \"w-5 h-5 mr-3 flex-shrink-0\",\n s ? \"text-blue-200\" : \"text-green-500\"\n ),\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n children: /* @__PURE__ */ g(\n \"path\",\n {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }\n )\n }\n ),\n /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"text-sm text-left\",\n s ? \"text-white\" : \"text-gray-700 dark:text-gray-300\"\n ),\n children: I.replace(/^✓\\s*/, \"\")\n }\n )\n ] }, U)) }),\n h && /* @__PURE__ */ G(\n \"div\",\n {\n className: P(\n \"rounded-lg p-4 mb-4\",\n s ? \"bg-blue-500/30\" : \"bg-gradient-to-r from-purple-50 to-blue-50 dark:from-purple-900/20 dark:to-blue-900/20\"\n ),\n children: [\n /* @__PURE__ */ g(\"div\", { className: \"flex items-center mb-2\", children: /* @__PURE__ */ g(\n \"span\",\n {\n className: P(\n \"font-semibold text-sm\",\n s ? \"text-white\" : \"text-purple-600 dark:text-purple-400\"\n ),\n children: h.title\n }\n ) }),\n /* @__PURE__ */ g(\n \"ul\",\n {\n className: P(\n \"text-xs space-y-1\",\n s ? \"text-blue-100\" : \"text-gray-600 dark:text-gray-400\"\n ),\n children: h.features.map((I, U) => /* @__PURE__ */ G(\"li\", { children: [\n \"• \",\n I\n ] }, U))\n }\n )\n ]\n }\n ),\n x && /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"text-center text-sm font-medium mb-4\",\n s ? \"text-blue-100\" : \"text-blue-600 dark:text-blue-400\"\n ),\n children: x\n }\n ),\n S && /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"p-3 rounded-lg mt-auto\",\n s ? \"bg-blue-500/30\" : \"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800\"\n ),\n children: /* @__PURE__ */ g(\n \"p\",\n {\n className: P(\n \"text-sm font-semibold text-center\",\n s ? \"text-white\" : \"text-yellow-700 dark:text-yellow-300\"\n ),\n children: S\n }\n )\n }\n )\n ] }),\n E && C && /* @__PURE__ */ g(\"div\", { className: \"absolute bottom-4 left-0 right-0 px-6\", children: y.href ? /* @__PURE__ */ g(\n \"a\",\n {\n href: y.href,\n className: P(\n \"block w-full py-3 font-semibold rounded-lg text-center transition-colors\",\n s ? \"bg-white text-blue-600 hover:bg-gray-100\" : \"bg-blue-600 text-white hover:bg-blue-700\"\n ),\n onClick: (I) => I.stopPropagation(),\n children: y.label\n }\n ) : /* @__PURE__ */ g(\n \"button\",\n {\n onClick: H,\n disabled: k,\n className: P(\n \"w-full py-3 font-semibold rounded-lg transition-colors\",\n s ? \"bg-white text-blue-600 hover:bg-gray-100\" : \"bg-blue-600 text-white hover:bg-blue-700\",\n k && \"opacity-50 cursor-not-allowed\"\n ),\n children: y.label\n }\n ) }),\n E && !C && /* @__PURE__ */ g(\"div\", { className: \"absolute bottom-4 left-1/2 -translate-x-1/2\", children: /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"w-5 h-5 rounded-full border-2 flex items-center justify-center\",\n s ? \"border-white bg-white\" : \"border-gray-300 dark:border-gray-600\"\n ),\n children: s && /* @__PURE__ */ g(\"div\", { className: \"w-2 h-2 rounded-full bg-blue-600\" })\n }\n ) })\n ]\n }\n );\n}, Kt = ({\n title: e,\n children: o,\n error: r,\n variant: t = \"selection\",\n currentStatus: n,\n primaryAction: s,\n secondaryAction: a,\n minTileWidth: p = 240,\n className: c,\n headerContent: h,\n aboveProducts: x,\n footerContent: S,\n currentStatusLabel: w = \"Current Status\",\n freeTileConfig: y,\n onTrack: j,\n trackingLabel: z,\n componentName: k = \"SubscriptionLayout\"\n}) => {\n const D = t === \"selection\" && s, F = () => {\n j?.({ action: \"primary_action\", trackingLabel: z, componentName: k }), s?.onClick();\n }, M = () => {\n j?.({ action: \"secondary_action\", trackingLabel: z, componentName: k }), a?.onClick();\n }, L = t === \"cta\" && y, N = {\n display: \"grid\",\n gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${p}px), 1fr))`,\n gap: \"1.5rem\"\n };\n return /* @__PURE__ */ g(Be, { className: c, children: /* @__PURE__ */ G(Ue, { className: \"pt-6\", children: [\n h,\n n && /* @__PURE__ */ G(We, { children: [\n /* @__PURE__ */ g(\"h2\", { className: P(he.heading.h3(), \"mb-4\"), children: w }),\n n.isActive ? /* @__PURE__ */ G(\"div\", { className: \"bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-4 mb-6\", children: [\n /* @__PURE__ */ G(\"div\", { className: \"flex items-center mb-2\", children: [\n /* @__PURE__ */ g(\"div\", { className: \"w-3 h-3 bg-green-500 rounded-full mr-3\" }),\n /* @__PURE__ */ g(\"span\", { className: \"font-semibold text-green-800 dark:text-green-300\", children: n.activeContent?.title || \"Active Subscription\" })\n ] }),\n n.activeContent?.fields && n.activeContent.fields.length > 0 && /* @__PURE__ */ g(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 gap-4 mt-4\", children: n.activeContent.fields.map(\n (C, E) => /* @__PURE__ */ G(\"div\", { children: [\n /* @__PURE__ */ g(\"p\", { className: \"text-sm text-green-600 dark:text-green-400\", children: C.label }),\n /* @__PURE__ */ g(\"p\", { className: \"font-semibold text-green-800 dark:text-green-300\", children: C.value })\n ] }, E)\n ) })\n ] }) : /* @__PURE__ */ G(\"div\", { className: \"bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4 mb-6\", children: [\n /* @__PURE__ */ G(\"div\", { className: \"flex items-center mb-2\", children: [\n /* @__PURE__ */ g(\"div\", { className: \"w-3 h-3 bg-yellow-500 rounded-full mr-3\" }),\n /* @__PURE__ */ g(\"span\", { className: \"font-semibold text-yellow-800 dark:text-yellow-300\", children: n.inactiveContent?.title || \"No Active Subscription\" })\n ] }),\n n.inactiveContent?.message && /* @__PURE__ */ g(\"p\", { className: \"text-yellow-700 dark:text-yellow-400\", children: n.inactiveContent.message })\n ] })\n ] }),\n /* @__PURE__ */ g(\"h2\", { className: P(he.heading.h3(), \"mb-4\"), children: e }),\n x,\n /* @__PURE__ */ G(\"div\", { style: N, children: [\n L && /* @__PURE__ */ g(\n _t,\n {\n id: \"free\",\n title: y.title,\n price: y.price,\n periodLabel: y.periodLabel,\n features: y.features,\n isSelected: !1,\n onSelect: () => {\n },\n topBadge: y.topBadge,\n ctaButton: y.ctaButton\n }\n ),\n o\n ] }),\n S,\n r && /* @__PURE__ */ g(\"div\", { className: \"bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 mt-6\", children: /* @__PURE__ */ g(\"p\", { className: \"text-red-600 dark:text-red-400\", children: r }) }),\n D && /* @__PURE__ */ G(\"div\", { className: \"flex flex-col sm:flex-row gap-3 mt-6\", children: [\n a && /* @__PURE__ */ g(\n ve,\n {\n onClick: M,\n disabled: a.disabled || a.loading,\n variant: \"outline\",\n className: \"sm:flex-shrink-0\",\n children: a.label\n }\n ),\n /* @__PURE__ */ g(\n ve,\n {\n onClick: F,\n disabled: s.disabled || s.loading,\n className: \"flex-1\",\n children: s.label\n }\n )\n ] })\n ] }) });\n};\nfunction Yt({\n options: e,\n value: o,\n onChange: r,\n className: t,\n disabled: n = !1,\n size: s = \"md\"\n}) {\n const a = {\n sm: \"px-3 py-1.5 text-xs\",\n md: \"px-4 py-2 text-sm\",\n lg: \"px-6 py-3 text-base\"\n };\n return /* @__PURE__ */ g(\n \"div\",\n {\n className: P(\n \"inline-flex rounded-lg bg-gray-100 dark:bg-gray-800 p-1\",\n n && \"opacity-50\",\n t\n ),\n role: \"radiogroup\",\n children: e.map((p) => {\n const c = o === p.value;\n return /* @__PURE__ */ g(\n \"button\",\n {\n type: \"button\",\n role: \"radio\",\n \"aria-checked\": c,\n disabled: n,\n onClick: () => !n && r(p.value),\n className: P(\n a[s],\n \"font-medium rounded-md transition-all focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2\",\n c ? \"bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm\" : \"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white\",\n n && \"cursor-not-allowed\"\n ),\n children: p.label\n },\n p.value\n );\n })\n }\n );\n}\nlet ge = null;\nconst Ft = async () => (ge || (ge = await import(\"@revenuecat/purchases-js\")), ge);\nlet T = null;\nconst Se = (e, o) => {\n const r = e.rcBillingProduct, t = r?.defaultSubscriptionOption, n = typeof o?.entitlement == \"string\" ? o.entitlement : void 0;\n return {\n identifier: e.identifier,\n productId: r?.identifier || void 0,\n price: r?.currentPrice?.amountMicros ? (r.currentPrice.amountMicros / 1e6).toFixed(2) : \"0\",\n priceString: r?.currentPrice?.formattedPrice || \"$0\",\n title: r?.title || e.identifier,\n description: r?.description || \"\",\n period: r?.normalPeriodDuration || void 0,\n introPrice: t?.introPrice?.price?.formattedPrice || void 0,\n introPriceAmount: t?.introPrice?.price?.amountMicros ? (t.introPrice.price.amountMicros / 1e6).toFixed(2) : void 0,\n introPricePeriod: t?.introPrice?.periodDuration || void 0,\n introPriceCycles: t?.introPrice?.cycleCount || void 0,\n freeTrialPeriod: t?.trial?.periodDuration || void 0,\n entitlement: n\n };\n}, be = (e) => {\n const o = Object.keys(e.entitlements.active);\n if (o.length > 0) {\n const r = o[0], t = e.entitlements.active[r];\n return {\n isActive: !0,\n expirationDate: t.expirationDate ? new Date(t.expirationDate) : void 0,\n purchaseDate: t.latestPurchaseDate ? new Date(t.latestPurchaseDate) : void 0,\n productIdentifier: t.productIdentifier,\n willRenew: t.willRenew,\n isSandbox: t.isSandbox,\n unsubscribeDetectedAt: t.unsubscribeDetectedAt ? new Date(t.unsubscribeDetectedAt) : void 0,\n billingIssueDetectedAt: t.billingIssueDetectedAt ? new Date(t.billingIssueDetectedAt) : void 0,\n activeEntitlements: o\n };\n }\n return { isActive: !1 };\n}, $e = Ke(\n void 0\n), qt = ({\n apiKey: e,\n userEmail: o,\n onError: r,\n onPurchaseSuccess: t,\n children: n\n}) => {\n const [s, a] = K([]), [p, c] = K(null), [h, x] = K(!1), [S, w] = K(null), [y, j] = K(!1), [z, k] = K(null), [D, F] = K(null), [M, L] = K(null), N = !e || e === \"your_revenuecat_api_key_here\", C = Y(() => {\n a([]), c(null), F(null), L(null), w(null), j(!1), k(null), T = null;\n }, []), E = Y(async () => {\n if (T)\n try {\n const u = await T.getOfferings();\n u.current && F(u.current);\n const f = u.all;\n if (f) {\n L(f);\n const v = [];\n for (const d of Object.keys(f)) {\n const O = f[d];\n if (O?.availablePackages) {\n const W = O.metadata, Q = O.availablePackages.map(\n (oe) => Se(oe, W)\n );\n v.push(...Q);\n }\n }\n a(v);\n } else if (u.current) {\n const v = u.current.metadata, d = u.current.availablePackages.map(\n (O) => Se(O, v)\n );\n a(d);\n }\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Failed to load offerings\";\n w(f), r?.(u instanceof Error ? u : new Error(f));\n }\n }, [r]), m = Y(async () => {\n if (T)\n try {\n const u = await T.getCustomerInfo(), f = be(u);\n c(f.isActive ? f : null);\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Failed to load subscription status\";\n w(f), r?.(u instanceof Error ? u : new Error(f));\n }\n }, [r]), V = Y(\n async (u, f) => {\n if (z && z !== u && C(), !(y && z === u))\n try {\n if (x(!0), w(null), N)\n console.warn(\n \"[SubscriptionProvider] RevenueCat API key not configured\"\n ), a([]), c(null);\n else {\n const v = await Ft(), d = {\n apiKey: e,\n appUserId: u\n };\n T = v.Purchases.configure(d);\n const O = f || o;\n if (O && T)\n try {\n await T.setAttributes({ email: O });\n } catch {\n }\n await Promise.all([E(), m()]);\n }\n k(u), j(!0);\n } catch (v) {\n const d = v instanceof Error ? v.message : \"Failed to initialize\";\n w(d), c(null), a([]), r?.(v instanceof Error ? v : new Error(d));\n } finally {\n x(!1);\n }\n },\n [\n z,\n y,\n N,\n e,\n o,\n E,\n m,\n r,\n C\n ]\n ), J = Y(\n async (u) => {\n try {\n if (x(!0), w(null), N) {\n await new Promise((W) => setTimeout(W, 2e3));\n const O = {\n isActive: !0,\n expirationDate: new Date(Date.now() + 365 * 24 * 60 * 60 * 1e3),\n purchaseDate: /* @__PURE__ */ new Date(),\n productIdentifier: u,\n willRenew: !0\n };\n return c(O), t?.(u), !0;\n }\n if (!T || !D && !M)\n throw new Error(\"Subscription service not initialized\");\n let f;\n if (M)\n for (const O of Object.keys(M)) {\n const W = M[O];\n if (W?.availablePackages && (f = W.availablePackages.find(\n (Q) => Q.identifier === u\n ), f))\n break;\n }\n else D && (f = D.availablePackages.find(\n (W) => W.identifier === u\n ));\n if (!f)\n throw new Error(`Package not found: ${u}`);\n const v = await T.purchase({\n rcPackage: f,\n ...o ? { customerEmail: o } : {}\n }), d = be(v.customerInfo);\n return c(d.isActive ? d : null), d.isActive && t?.(u), d.isActive;\n } catch (f) {\n const v = f instanceof Error ? f.message : \"Purchase failed\";\n return w(v), r?.(f instanceof Error ? f : new Error(v)), !1;\n } finally {\n x(!1);\n }\n },\n [\n N,\n D,\n M,\n o,\n t,\n r\n ]\n ), H = Y(async () => {\n try {\n if (x(!0), w(null), N)\n return await new Promise((v) => setTimeout(v, 1e3)), w(\"No previous purchases found\"), !1;\n if (!T)\n throw new Error(\"Subscription service not initialized\");\n const u = await T.getCustomerInfo(), f = be(u);\n return c(f.isActive ? f : null), f.isActive || w(\"No previous purchases found\"), f.isActive;\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Restore failed\";\n return w(f), r?.(u instanceof Error ? u : new Error(f)), !1;\n } finally {\n x(!1);\n }\n }, [N, r]), I = Y(async () => {\n if (!N)\n try {\n w(null), await Promise.all([m(), E()]);\n } catch (u) {\n const f = u instanceof Error ? u.message : \"Refresh failed\";\n w(f), r?.(u instanceof Error ? u : new Error(f));\n }\n }, [N, m, E, r]), U = Y(() => {\n w(null);\n }, []);\n Ye(() => {\n if (!y || N || !T) return;\n const u = setInterval(\n () => {\n m().catch(() => {\n });\n },\n 300 * 1e3\n );\n return () => clearInterval(u);\n }, [y, N, m]);\n const re = {\n products: s,\n currentSubscription: p,\n isLoading: h,\n error: S,\n initialize: V,\n purchase: J,\n restore: H,\n refresh: I,\n clearError: U\n };\n return /* @__PURE__ */ g($e.Provider, { value: re, children: n });\n}, Xt = () => {\n const e = qe($e);\n if (!e)\n throw new Error(\n \"useSubscriptionContext must be used within a SubscriptionProvider\"\n );\n return e;\n}, Vt = () => {\n try {\n const e = [];\n for (let r = 0; r < localStorage.length; r++) {\n const t = localStorage.key(r);\n t && (t.includes(\"revenuecat\") || t.includes(\"rcb\") || t.includes(\"rc_\")) && e.push(t);\n }\n e.forEach((r) => localStorage.removeItem(r));\n const o = [];\n for (let r = 0; r < sessionStorage.length; r++) {\n const t = sessionStorage.key(r);\n t && (t.includes(\"revenuecat\") || t.includes(\"rcb\") || t.includes(\"rc_\")) && o.push(t);\n }\n o.forEach((r) => sessionStorage.removeItem(r));\n } catch {\n }\n}, Jt = () => {\n try {\n T && (T.close(), T = null), Vt();\n } catch {\n }\n};\nexport {\n Yt as SegmentedControl,\n Kt as SubscriptionLayout,\n qt as SubscriptionProvider,\n _t as SubscriptionTile,\n Vt as clearRevenueCatCheckoutSessions,\n Jt as closeRevenueCatInstance,\n P as cn,\n Xt as useSubscriptionContext\n};\n","/**\n * @fileoverview App Subscriptions Page\n * @description Page for managing app subscriptions and viewing rate limits\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n SubscriptionLayout,\n SubscriptionTile,\n SegmentedControl,\n} from '@sudobility/subscription-components';\nimport type { RateLimitsConfigData, RateLimitTier } from '@sudobility/types';\n\ntype BillingPeriod = 'monthly' | 'yearly';\n\n/** Product from subscription provider */\nexport interface SubscriptionProduct {\n identifier: string;\n title: string;\n price: string;\n priceString: string;\n period?: string;\n freeTrialPeriod?: string;\n introPrice?: string;\n}\n\n/** Current subscription state */\nexport interface CurrentSubscription {\n isActive: boolean;\n productIdentifier?: string;\n expirationDate?: Date;\n willRenew?: boolean;\n}\n\n/** Subscription context value passed from consumer */\nexport interface SubscriptionContextValue {\n products: SubscriptionProduct[];\n currentSubscription: CurrentSubscription | null;\n isLoading: boolean;\n error: string | null;\n purchase: (productId: string) => Promise<boolean>;\n restore: () => Promise<boolean>;\n clearError: () => void;\n}\n\n/** All localized labels for the subscription page */\nexport interface SubscriptionPageLabels {\n title: string;\n errorTitle: string;\n purchaseError: string;\n restoreError: string;\n restoreNoPurchases: string;\n\n // Periods\n periodYear: string;\n periodMonth: string;\n periodWeek: string;\n\n // Billing period toggle\n billingMonthly: string;\n billingYearly: string;\n\n // Rate limits\n unlimited: string;\n unlimitedRequests: string;\n\n // Current status\n currentStatusLabel: string;\n statusActive: string;\n statusInactive: string;\n statusInactiveMessage: string;\n labelPlan: string;\n labelPremium: string;\n labelExpires: string;\n labelWillRenew: string;\n labelMonthlyUsage: string;\n labelDailyUsage: string;\n yes: string;\n no: string;\n\n // Buttons\n buttonSubscribe: string;\n buttonPurchasing: string;\n buttonRestore: string;\n buttonRestoring: string;\n\n // Empty states\n noProducts: string;\n noProductsForPeriod: string;\n\n // Free tier\n freeTierTitle: string;\n freeTierPrice: string;\n freeTierFeatures: string[];\n\n // Badges\n currentPlanBadge: string;\n}\n\n/** Formatter functions for dynamic strings */\nexport interface SubscriptionPageFormatters {\n /** Format rate limit: \"1,000 requests/hour\" */\n formatHourlyLimit: (limit: string) => string;\n /** Format rate limit: \"10,000 requests/day\" */\n formatDailyLimit: (limit: string) => string;\n /** Format rate limit: \"100,000 requests/month\" */\n formatMonthlyLimit: (limit: string) => string;\n /** Format trial period: \"7 days free trial\" */\n formatTrialDays: (count: number) => string;\n /** Format trial period: \"2 weeks free trial\" */\n formatTrialWeeks: (count: number) => string;\n /** Format trial period: \"1 month free trial\" */\n formatTrialMonths: (count: number) => string;\n /** Format savings badge: \"Save 20%\" */\n formatSavePercent: (percent: number) => string;\n /** Format intro price note */\n formatIntroNote: (price: string) => string;\n}\n\nexport interface AppSubscriptionsPageProps {\n /** Subscription context value */\n subscription: SubscriptionContextValue;\n /** Rate limit configuration */\n rateLimitsConfig?: RateLimitsConfigData | null;\n /** User ID used for subscription (the selected entity's ID when logged in) */\n subscriptionUserId?: string;\n /** All localized labels */\n labels: SubscriptionPageLabels;\n /** Formatter functions for dynamic strings */\n formatters: SubscriptionPageFormatters;\n /** Package ID to entitlement mapping */\n packageEntitlementMap?: Record<string, string>;\n /** Called when purchase succeeds */\n onPurchaseSuccess?: () => void;\n /** Called when restore succeeds */\n onRestoreSuccess?: () => void;\n /** Called on error */\n onError?: (title: string, message: string) => void;\n /** Called on warning */\n onWarning?: (title: string, message: string) => void;\n}\n\n// Default package ID to entitlement mapping\nconst DEFAULT_PACKAGE_ENTITLEMENT_MAP: Record<string, string> = {\n ultra_yearly: 'bandwidth_ultra',\n ultra_monthly: 'bandwidth_ultra',\n pro_yearly: 'bandwidth_pro',\n pro_monthly: 'bandwidth_pro',\n dev_yearly: 'bandwidth_dev',\n dev_monthly: 'bandwidth_dev',\n};\n\n/**\n * Page for managing app subscriptions.\n */\nexport function AppSubscriptionsPage({\n subscription,\n rateLimitsConfig,\n labels,\n formatters,\n packageEntitlementMap = DEFAULT_PACKAGE_ENTITLEMENT_MAP,\n onPurchaseSuccess,\n onRestoreSuccess,\n onError,\n onWarning,\n}: AppSubscriptionsPageProps) {\n const {\n products,\n currentSubscription,\n isLoading,\n error,\n purchase,\n restore,\n clearError,\n } = subscription;\n\n const [billingPeriod, setBillingPeriod] = useState<BillingPeriod>('monthly');\n const [selectedPlan, setSelectedPlan] = useState<string | null>(null);\n const [isPurchasing, setIsPurchasing] = useState(false);\n const [isRestoring, setIsRestoring] = useState(false);\n\n // Show error via callback\n useEffect(() => {\n if (error) {\n onError?.(labels.errorTitle, error);\n clearError();\n }\n }, [error, clearError, labels.errorTitle, onError]);\n\n // Filter products by billing period and sort by price\n const filteredProducts = products\n .filter(product => {\n if (!product.period) return false;\n const isYearly =\n product.period.includes('Y') || product.period.includes('year');\n return billingPeriod === 'yearly' ? isYearly : !isYearly;\n })\n .sort((a, b) => parseFloat(a.price) - parseFloat(b.price));\n\n const handlePeriodChange = (period: BillingPeriod) => {\n setBillingPeriod(period);\n setSelectedPlan(null);\n };\n\n const handlePurchase = async () => {\n if (!selectedPlan) return;\n\n setIsPurchasing(true);\n clearError();\n\n try {\n const result = await purchase(selectedPlan);\n if (result) {\n onPurchaseSuccess?.();\n setSelectedPlan(null);\n }\n } catch (err) {\n onError?.(\n labels.errorTitle,\n err instanceof Error ? err.message : labels.purchaseError\n );\n } finally {\n setIsPurchasing(false);\n }\n };\n\n const handleRestore = async () => {\n setIsRestoring(true);\n clearError();\n\n try {\n const result = await restore();\n if (result) {\n onRestoreSuccess?.();\n } else {\n onWarning?.(labels.errorTitle, labels.restoreNoPurchases);\n }\n } catch (err) {\n onError?.(\n labels.errorTitle,\n err instanceof Error ? err.message : labels.restoreError\n );\n } finally {\n setIsRestoring(false);\n }\n };\n\n const formatExpirationDate = useCallback((date?: Date) => {\n if (!date) return '';\n return new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n }, []);\n\n const getPeriodLabel = useCallback(\n (period?: string) => {\n if (!period) return '';\n if (period.includes('Y') || period.includes('year'))\n return labels.periodYear;\n if (period.includes('M') || period.includes('month'))\n return labels.periodMonth;\n if (period.includes('W') || period.includes('week'))\n return labels.periodWeek;\n return '';\n },\n [labels]\n );\n\n const getTrialLabel = useCallback(\n (trialPeriod?: string) => {\n if (!trialPeriod) return undefined;\n const num = parseInt(trialPeriod.replace(/\\D/g, '') || '1', 10);\n if (trialPeriod.includes('W')) {\n return formatters.formatTrialWeeks(num);\n }\n if (trialPeriod.includes('M')) {\n return formatters.formatTrialMonths(num);\n }\n return formatters.formatTrialDays(num);\n },\n [formatters]\n );\n\n const getRateLimitTierForProduct = useCallback(\n (packageId: string): RateLimitTier | undefined => {\n if (!rateLimitsConfig?.tiers) return undefined;\n\n const entitlement = packageEntitlementMap[packageId];\n if (entitlement) {\n return rateLimitsConfig.tiers.find(\n tier => tier.entitlement === entitlement\n );\n }\n\n return rateLimitsConfig.tiers.find(tier => tier.entitlement === 'none');\n },\n [rateLimitsConfig, packageEntitlementMap]\n );\n\n const formatRateLimit = useCallback(\n (limit: number | null): string => {\n if (limit === null) return labels.unlimited;\n return limit.toLocaleString();\n },\n [labels.unlimited]\n );\n\n const getRateLimitFeatures = useCallback(\n (packageId: string): string[] => {\n const tier = getRateLimitTierForProduct(packageId);\n if (!tier) return [];\n\n const features: string[] = [];\n\n if (tier.limits.hourly !== null) {\n features.push(\n formatters.formatHourlyLimit(formatRateLimit(tier.limits.hourly))\n );\n }\n if (tier.limits.daily !== null) {\n features.push(\n formatters.formatDailyLimit(formatRateLimit(tier.limits.daily))\n );\n }\n if (tier.limits.monthly !== null) {\n features.push(\n formatters.formatMonthlyLimit(formatRateLimit(tier.limits.monthly))\n );\n }\n\n if (\n tier.limits.hourly === null &&\n tier.limits.daily === null &&\n tier.limits.monthly === null\n ) {\n features.push(labels.unlimitedRequests);\n }\n\n return features;\n },\n [\n getRateLimitTierForProduct,\n formatRateLimit,\n formatters,\n labels.unlimitedRequests,\n ]\n );\n\n const getProductFeatures = useCallback(\n (packageId: string): string[] => {\n return getRateLimitFeatures(packageId);\n },\n [getRateLimitFeatures]\n );\n\n const getFreeTierFeatures = useCallback((): string[] => {\n const benefits = [...labels.freeTierFeatures];\n\n if (rateLimitsConfig?.tiers) {\n const freeTier = rateLimitsConfig.tiers.find(\n tier => tier.entitlement === 'none'\n );\n if (freeTier) {\n if (freeTier.limits.hourly !== null) {\n benefits.push(\n formatters.formatHourlyLimit(\n formatRateLimit(freeTier.limits.hourly)\n )\n );\n }\n if (freeTier.limits.daily !== null) {\n benefits.push(\n formatters.formatDailyLimit(formatRateLimit(freeTier.limits.daily))\n );\n }\n if (freeTier.limits.monthly !== null) {\n benefits.push(\n formatters.formatMonthlyLimit(\n formatRateLimit(freeTier.limits.monthly)\n )\n );\n }\n }\n }\n\n return benefits;\n }, [rateLimitsConfig, formatRateLimit, formatters, labels.freeTierFeatures]);\n\n const getYearlySavingsPercent = useCallback(\n (yearlyPackageId: string): number | undefined => {\n const yearlyEntitlement = packageEntitlementMap[yearlyPackageId];\n if (!yearlyEntitlement) return undefined;\n\n const yearlyProduct = products.find(\n p => p.identifier === yearlyPackageId\n );\n if (!yearlyProduct) return undefined;\n\n const monthlyPackageId = Object.entries(packageEntitlementMap).find(\n ([pkgId, ent]) => ent === yearlyEntitlement && pkgId.includes('monthly')\n )?.[0];\n if (!monthlyPackageId) return undefined;\n\n const monthlyProduct = products.find(\n p => p.identifier === monthlyPackageId\n );\n if (!monthlyProduct) return undefined;\n\n const yearlyPrice = parseFloat(yearlyProduct.price);\n const monthlyPrice = parseFloat(monthlyProduct.price);\n\n if (monthlyPrice <= 0 || yearlyPrice <= 0) return undefined;\n\n const annualizedMonthly = monthlyPrice * 12;\n const savings =\n ((annualizedMonthly - yearlyPrice) / annualizedMonthly) * 100;\n\n return Math.round(savings);\n },\n [products, packageEntitlementMap]\n );\n\n const billingPeriodOptions = [\n { value: 'monthly' as const, label: labels.billingMonthly },\n { value: 'yearly' as const, label: labels.billingYearly },\n ];\n\n return (\n <SubscriptionLayout\n title={labels.title}\n error={error}\n currentStatusLabel={labels.currentStatusLabel}\n currentStatus={{\n isActive: currentSubscription?.isActive ?? false,\n activeContent: currentSubscription?.isActive\n ? {\n title: labels.statusActive,\n fields: [\n {\n label: labels.labelPlan,\n value:\n currentSubscription.productIdentifier ||\n labels.labelPremium,\n },\n {\n label: labels.labelExpires,\n value: formatExpirationDate(\n currentSubscription.expirationDate\n ),\n },\n {\n label: labels.labelWillRenew,\n value: currentSubscription.willRenew ? labels.yes : labels.no,\n },\n ...(rateLimitsConfig\n ? [\n {\n label: labels.labelMonthlyUsage,\n value: `${rateLimitsConfig.currentUsage.monthly.toLocaleString()} / ${formatRateLimit(rateLimitsConfig.currentLimits.monthly)}`,\n },\n {\n label: labels.labelDailyUsage,\n value: `${rateLimitsConfig.currentUsage.daily.toLocaleString()} / ${formatRateLimit(rateLimitsConfig.currentLimits.daily)}`,\n },\n ]\n : []),\n ],\n }\n : undefined,\n inactiveContent: !currentSubscription?.isActive\n ? {\n title: labels.statusInactive,\n message: labels.statusInactiveMessage,\n }\n : undefined,\n }}\n aboveProducts={\n !isLoading && products.length > 0 ? (\n <div className='flex justify-center mb-6'>\n <SegmentedControl\n options={billingPeriodOptions}\n value={billingPeriod}\n onChange={handlePeriodChange}\n />\n </div>\n ) : null\n }\n primaryAction={{\n label: isPurchasing ? labels.buttonPurchasing : labels.buttonSubscribe,\n onClick: handlePurchase,\n disabled: !selectedPlan || isPurchasing || isRestoring,\n loading: isPurchasing,\n }}\n secondaryAction={{\n label: isRestoring ? labels.buttonRestoring : labels.buttonRestore,\n onClick: handleRestore,\n disabled: isPurchasing || isRestoring,\n loading: isRestoring,\n }}\n >\n {isLoading ? (\n <div className='flex items-center justify-center py-12'>\n <div className='animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600' />\n </div>\n ) : products.length === 0 ? (\n <div className='text-center py-12 text-theme-text-secondary'>\n {labels.noProducts}\n </div>\n ) : filteredProducts.length === 0 ? (\n <div className='text-center py-12 text-theme-text-secondary'>\n {labels.noProductsForPeriod}\n </div>\n ) : (\n <>\n {/* Free tier tile */}\n <SubscriptionTile\n key='free'\n id='free'\n title={labels.freeTierTitle}\n price={labels.freeTierPrice}\n periodLabel={labels.periodMonth}\n features={getFreeTierFeatures()}\n isSelected={!currentSubscription?.isActive && selectedPlan === null}\n onSelect={() => setSelectedPlan(null)}\n topBadge={\n !currentSubscription?.isActive\n ? {\n text: labels.currentPlanBadge,\n color: 'green',\n }\n : undefined\n }\n disabled={isPurchasing || isRestoring}\n hideSelectionIndicator\n />\n {/* Paid plans */}\n {filteredProducts.map(product => (\n <SubscriptionTile\n key={product.identifier}\n id={product.identifier}\n title={product.title}\n price={product.priceString}\n periodLabel={getPeriodLabel(product.period)}\n features={getProductFeatures(product.identifier)}\n isSelected={selectedPlan === product.identifier}\n onSelect={() => setSelectedPlan(product.identifier)}\n isBestValue={product.identifier.includes('pro')}\n discountBadge={\n product.period?.includes('Y')\n ? (() => {\n const savings = getYearlySavingsPercent(\n product.identifier\n );\n return savings && savings > 0\n ? {\n text: formatters.formatSavePercent(savings),\n isBestValue: true,\n }\n : undefined;\n })()\n : undefined\n }\n introPriceNote={\n product.freeTrialPeriod\n ? getTrialLabel(product.freeTrialPeriod)\n : product.introPrice\n ? formatters.formatIntroNote(product.introPrice)\n : undefined\n }\n disabled={isPurchasing || isRestoring}\n />\n ))}\n </>\n )}\n </SubscriptionLayout>\n );\n}\n","/**\n * @fileoverview App Pricing Page\n * @description Public pricing page for displaying subscription options\n */\n\nimport { useState, useCallback } from 'react';\nimport {\n SubscriptionTile,\n SegmentedControl,\n} from '@sudobility/subscription-components';\n\ntype BillingPeriod = 'monthly' | 'yearly';\n\n/** Product from subscription provider */\nexport interface PricingProduct {\n identifier: string;\n title: string;\n price: string;\n priceString: string;\n period?: string;\n}\n\n/** FAQ item */\nexport interface FAQItem {\n question: string;\n answer: string;\n}\n\n/** All localized labels for the pricing page */\nexport interface PricingPageLabels {\n // Header\n title: string;\n subtitle: string;\n\n // Periods\n periodYear: string;\n periodMonth: string;\n periodWeek: string;\n\n // Billing period toggle\n billingMonthly: string;\n billingYearly: string;\n\n // Free tier\n freeTierTitle: string;\n freeTierPrice: string;\n freeTierFeatures: string[];\n\n // Badges\n currentPlanBadge: string;\n mostPopularBadge: string;\n\n // CTA buttons\n ctaLogIn: string;\n ctaTryFree: string;\n ctaUpgrade: string;\n\n // FAQ\n faqTitle: string;\n}\n\n/** Formatter functions for dynamic strings */\nexport interface PricingPageFormatters {\n /** Format savings badge: \"Save 20%\" */\n formatSavePercent: (percent: number) => string;\n /** Get features for a product by its identifier */\n getProductFeatures: (productId: string) => string[];\n}\n\n/** Package ID to entitlement mapping */\nexport interface EntitlementMap {\n [packageId: string]: string;\n}\n\n/** Entitlement to level mapping for comparing plan tiers */\nexport interface EntitlementLevels {\n [entitlement: string]: number;\n}\n\nexport interface AppPricingPageProps {\n /** Available subscription products */\n products: PricingProduct[];\n /** Whether user is authenticated */\n isAuthenticated: boolean;\n /** Whether user has an active subscription */\n hasActiveSubscription: boolean;\n /** Current subscription product identifier (if any) */\n currentProductIdentifier?: string;\n /** User ID used for subscription (the selected entity's ID when logged in) */\n subscriptionUserId?: string;\n /** All localized labels */\n labels: PricingPageLabels;\n /** Formatter functions */\n formatters: PricingPageFormatters;\n /** Package ID to entitlement mapping for calculating savings */\n entitlementMap: EntitlementMap;\n /** Entitlement to level mapping for comparing tiers (higher = better) */\n entitlementLevels: EntitlementLevels;\n /** Called when user clicks on a plan */\n onPlanClick: (planIdentifier: string) => void;\n /** Called when user clicks on free plan */\n onFreePlanClick: () => void;\n /** Optional FAQ items */\n faqItems?: FAQItem[];\n /** Optional className for the container */\n className?: string;\n}\n\n/**\n * Public pricing page for displaying subscription options.\n * - Non-authenticated: Free tile shows \"Try it for Free\", paid tiles show \"Log in to Continue\"\n * - Authenticated on free: Free tile shows \"Current Plan\" badge (no CTA), paid tiles show \"Upgrade\"\n * - Authenticated with subscription: Current plan shows badge (no CTA), higher tiers show \"Upgrade\"\n */\nexport function AppPricingPage({\n products,\n isAuthenticated,\n hasActiveSubscription,\n currentProductIdentifier,\n labels,\n formatters,\n entitlementMap,\n entitlementLevels,\n onPlanClick,\n onFreePlanClick,\n faqItems,\n className,\n}: AppPricingPageProps) {\n const [billingPeriod, setBillingPeriod] = useState<BillingPeriod>('monthly');\n\n // Get entitlement level for a product (0 for free/none)\n const getProductLevel = useCallback(\n (productId: string): number => {\n const entitlement = entitlementMap[productId];\n if (!entitlement) return 0;\n return entitlementLevels[entitlement] ?? 0;\n },\n [entitlementMap, entitlementLevels]\n );\n\n // Get current user's subscription level\n const currentLevel = currentProductIdentifier\n ? getProductLevel(currentProductIdentifier)\n : 0;\n\n // Filter products by billing period and sort by price\n const filteredProducts = products\n .filter(product => {\n if (!product.period) return false;\n const isYearly =\n product.period.includes('Y') || product.period.includes('year');\n return billingPeriod === 'yearly' ? isYearly : !isYearly;\n })\n .sort((a, b) => parseFloat(a.price) - parseFloat(b.price));\n\n const getPeriodLabel = useCallback(\n (period?: string) => {\n if (!period) return '';\n if (period.includes('Y') || period.includes('year'))\n return labels.periodYear;\n if (period.includes('M') || period.includes('month'))\n return labels.periodMonth;\n if (period.includes('W') || period.includes('week'))\n return labels.periodWeek;\n return '';\n },\n [labels]\n );\n\n const getYearlySavingsPercent = useCallback(\n (yearlyPackageId: string): number | undefined => {\n const yearlyEntitlement = entitlementMap[yearlyPackageId];\n if (!yearlyEntitlement) return undefined;\n\n const yearlyProduct = products.find(\n p => p.identifier === yearlyPackageId\n );\n if (!yearlyProduct) return undefined;\n\n const monthlyPackageId = Object.entries(entitlementMap).find(\n ([pkgId, ent]) => ent === yearlyEntitlement && pkgId.includes('monthly')\n )?.[0];\n if (!monthlyPackageId) return undefined;\n\n const monthlyProduct = products.find(\n p => p.identifier === monthlyPackageId\n );\n if (!monthlyProduct) return undefined;\n\n const yearlyPrice = parseFloat(yearlyProduct.price);\n const monthlyPrice = parseFloat(monthlyProduct.price);\n\n if (monthlyPrice <= 0 || yearlyPrice <= 0) return undefined;\n\n const annualizedMonthly = monthlyPrice * 12;\n const savings =\n ((annualizedMonthly - yearlyPrice) / annualizedMonthly) * 100;\n\n return Math.round(savings);\n },\n [products, entitlementMap]\n );\n\n const billingPeriodOptions = [\n { value: 'monthly' as const, label: labels.billingMonthly },\n { value: 'yearly' as const, label: labels.billingYearly },\n ];\n\n // Determine if a product is the current plan (same entitlement level)\n const isCurrentPlan = useCallback(\n (productId: string): boolean => {\n if (!isAuthenticated) return false;\n if (!hasActiveSubscription) return false;\n // Compare entitlement levels (handles monthly/yearly variants of same tier)\n return getProductLevel(productId) === currentLevel && currentLevel > 0;\n },\n [isAuthenticated, hasActiveSubscription, getProductLevel, currentLevel]\n );\n\n // Determine if a product is an upgrade from current plan\n const isUpgrade = useCallback(\n (productId: string): boolean => {\n const productLevel = getProductLevel(productId);\n return productLevel > currentLevel;\n },\n [getProductLevel, currentLevel]\n );\n\n return (\n <div className={className}>\n {/* Header */}\n <section className='py-16 px-4 sm:px-6 lg:px-8'>\n <div className='max-w-4xl mx-auto text-center'>\n <h1 className='text-4xl sm:text-5xl font-bold text-theme-text-primary mb-4'>\n {labels.title}\n </h1>\n <p className='text-lg text-theme-text-secondary'>{labels.subtitle}</p>\n </div>\n </section>\n\n {/* Pricing Cards */}\n <section className='pb-20 px-4 sm:px-6 lg:px-8'>\n <div className='max-w-6xl mx-auto'>\n {/* Billing Period Selector */}\n <div className='flex justify-center mb-8'>\n <SegmentedControl\n options={billingPeriodOptions}\n value={billingPeriod}\n onChange={(value: string) =>\n setBillingPeriod(value as BillingPeriod)\n }\n />\n </div>\n\n {/* Subscription Tiles Grid */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns:\n 'repeat(auto-fit, minmax(min(100%, 280px), 1fr))',\n gap: '1.5rem',\n }}\n >\n {/* Free Tier */}\n <SubscriptionTile\n id='free'\n title={labels.freeTierTitle}\n price={labels.freeTierPrice}\n periodLabel={labels.periodMonth}\n features={labels.freeTierFeatures}\n isSelected={false}\n onSelect={() => {}}\n topBadge={\n isAuthenticated && !hasActiveSubscription\n ? {\n text: labels.currentPlanBadge,\n color: 'green',\n }\n : undefined\n }\n ctaButton={\n // Not logged in: show \"Try it for Free\"\n // Logged in on free plan: no CTA (current plan)\n // Logged in with subscription: no CTA (can't downgrade here)\n !isAuthenticated\n ? {\n label: labels.ctaTryFree,\n onClick: onFreePlanClick,\n }\n : undefined\n }\n hideSelectionIndicator={isAuthenticated}\n />\n\n {/* Paid Plans */}\n {filteredProducts.map(product => {\n const isCurrent = isCurrentPlan(product.identifier);\n const canUpgrade = isUpgrade(product.identifier);\n\n // Determine CTA button\n let ctaButton: { label: string; onClick: () => void } | undefined;\n if (!isAuthenticated) {\n // Not logged in: show \"Log in to Continue\"\n ctaButton = {\n label: labels.ctaLogIn,\n onClick: () => onPlanClick(product.identifier),\n };\n } else if (isCurrent) {\n // Current plan: no CTA\n ctaButton = undefined;\n } else if (canUpgrade) {\n // Higher tier: show \"Upgrade\"\n ctaButton = {\n label: labels.ctaUpgrade,\n onClick: () => onPlanClick(product.identifier),\n };\n }\n // Lower tier than current: no CTA (implicit downgrade not shown)\n\n // Determine top badge\n let topBadge:\n | {\n text: string;\n color: 'purple' | 'green' | 'blue' | 'yellow' | 'red';\n }\n | undefined;\n if (isCurrent) {\n topBadge = {\n text: labels.currentPlanBadge,\n color: 'green',\n };\n } else if (product.identifier.includes('pro')) {\n topBadge = {\n text: labels.mostPopularBadge,\n color: 'yellow',\n };\n }\n\n return (\n <SubscriptionTile\n key={product.identifier}\n id={product.identifier}\n title={product.title}\n price={product.priceString}\n periodLabel={getPeriodLabel(product.period)}\n features={formatters.getProductFeatures(product.identifier)}\n isSelected={false}\n onSelect={() => {}}\n isBestValue={product.identifier.includes('pro')}\n topBadge={topBadge}\n discountBadge={\n product.period?.includes('Y')\n ? (() => {\n const savings = getYearlySavingsPercent(\n product.identifier\n );\n return savings && savings > 0\n ? {\n text: formatters.formatSavePercent(savings),\n isBestValue: true,\n }\n : undefined;\n })()\n : undefined\n }\n ctaButton={ctaButton}\n hideSelectionIndicator={!ctaButton}\n />\n );\n })}\n </div>\n </div>\n </section>\n\n {/* FAQ Section */}\n {faqItems && faqItems.length > 0 && (\n <section className='py-20 px-4 sm:px-6 lg:px-8 bg-theme-bg-secondary'>\n <div className='max-w-3xl mx-auto'>\n <h2 className='text-3xl font-bold text-theme-text-primary text-center mb-12'>\n {labels.faqTitle}\n </h2>\n\n <div className='space-y-6'>\n {faqItems.map((item, index) => (\n <div\n key={index}\n className='bg-theme-bg-primary p-6 rounded-xl border border-theme-border'\n >\n <h3 className='text-lg font-semibold text-theme-text-primary mb-2'>\n {item.question}\n </h3>\n <p className='text-theme-text-secondary'>{item.answer}</p>\n </div>\n ))}\n </div>\n </div>\n </section>\n )}\n </div>\n );\n}\n","import React, { type ComponentType, type ReactNode } from 'react';\nimport {\n ChevronRightIcon,\n HomeIcon,\n DocumentTextIcon,\n EnvelopeIcon,\n CogIcon,\n LanguageIcon,\n} from '@heroicons/react/24/outline';\nimport type { LinkComponentProps } from '../../types';\n\n/**\n * Configuration for a single sitemap link\n */\nexport interface SitemapLink {\n /** URL path */\n path: string;\n /** Display label */\n label: string;\n /** Optional description */\n description?: string;\n}\n\n/**\n * Configuration for a sitemap section\n */\nexport interface SitemapSection {\n /** Section title */\n title: string;\n /** Section icon type (optional) */\n icon?: 'home' | 'document' | 'envelope' | 'cog' | 'language';\n /** Links in this section */\n links: SitemapLink[];\n}\n\n/**\n * Configuration for a language option\n */\nexport interface LanguageOption {\n /** Language code (e.g., 'en', 'es') */\n code: string;\n /** Display name */\n name: string;\n /** Flag emoji */\n flag: string;\n}\n\n/**\n * Configuration for quick action buttons\n */\nexport interface QuickLink {\n /** URL path */\n path: string;\n /** Display label */\n label: string;\n /** Button variant */\n variant: 'primary' | 'secondary' | 'outline';\n /** Optional icon */\n icon?: 'envelope' | 'document';\n}\n\n/**\n * Text content for the sitemap page\n */\nexport interface SitemapPageText {\n /** Page title */\n title: string;\n /** Page subtitle */\n subtitle: string;\n /** Languages section title */\n languagesSectionTitle: string;\n /** Languages section description */\n languagesDescription: string;\n /** Quick links section title */\n quickLinksTitle: string;\n}\n\n/**\n * Props for AppSitemapPage component\n */\nexport interface AppSitemapPageProps {\n /** All text content (must be provided by consumer) */\n text: SitemapPageText;\n /** Sitemap sections */\n sections: SitemapSection[];\n /** Available languages */\n languages: LanguageOption[];\n /** Quick action links */\n quickLinks?: QuickLink[];\n /** Custom Link component for navigation */\n LinkComponent: ComponentType<LinkComponentProps & { language?: string }>;\n /** Optional wrapper component for the page layout */\n PageWrapper?: ComponentType<{ children: ReactNode }>;\n /** Optional className for the container */\n className?: string;\n}\n\n/**\n * Get icon component based on icon type\n */\nconst getIcon = (icon?: string) => {\n switch (icon) {\n case 'home':\n return <HomeIcon className='w-5 h-5 mr-2' />;\n case 'document':\n return <DocumentTextIcon className='w-5 h-5 mr-2' />;\n case 'envelope':\n return <EnvelopeIcon className='w-5 h-5 mr-2' />;\n case 'cog':\n return <CogIcon className='w-5 h-5 mr-2' />;\n case 'language':\n return <LanguageIcon className='w-5 h-5 mr-2' />;\n default:\n return null;\n }\n};\n\n/**\n * AppSitemapPage - A reusable sitemap page component\n *\n * Displays a comprehensive sitemap with:\n * - Language selector\n * - Organized sections with links\n * - Quick action buttons\n *\n * All text content must be provided by the consumer app.\n *\n * @example\n * ```tsx\n * <AppSitemapPage\n * text={{\n * title: \"Sitemap\",\n * subtitle: \"Explore all pages\",\n * languagesSectionTitle: \"Languages\",\n * languagesDescription: \"Available in multiple languages\",\n * quickLinksTitle: \"Quick Links\"\n * }}\n * sections={[\n * { title: \"Main\", icon: \"home\", links: [{ path: \"/\", label: \"Home\" }] }\n * ]}\n * languages={[{ code: \"en\", name: \"English\", flag: \"🇺🇸\" }]}\n * LinkComponent={LocalizedLink}\n * />\n * ```\n */\nexport const AppSitemapPage: React.FC<AppSitemapPageProps> = ({\n text,\n sections,\n languages,\n quickLinks = [],\n LinkComponent,\n PageWrapper,\n className,\n}) => {\n const content = (\n <div className={`max-w-7xl mx-auto px-4 py-12 ${className || ''}`}>\n {/* Header */}\n <div className='text-center mb-12'>\n <h1 className='text-4xl font-bold text-gray-900 dark:text-white mb-4'>\n {text.title}\n </h1>\n <p className='text-xl text-gray-600 dark:text-gray-300'>\n {text.subtitle}\n </p>\n </div>\n\n {/* Language Section */}\n {languages.length > 0 && (\n <div className='mb-12 p-6 bg-blue-50 dark:bg-blue-900/20 rounded-lg'>\n <h2 className='text-xl font-semibold text-gray-900 dark:text-white mb-4 flex items-center'>\n <LanguageIcon className='w-6 h-6 mr-2' />\n {text.languagesSectionTitle}\n </h2>\n <p className='text-gray-600 dark:text-gray-300 mb-6'>\n {text.languagesDescription}\n </p>\n <div className='grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 gap-4'>\n {languages.map(lang => (\n <LinkComponent\n key={lang.code}\n href='/'\n language={lang.code}\n className='flex items-center space-x-2 p-3 bg-white dark:bg-gray-800 rounded-lg hover:shadow-md transition-shadow'\n >\n <span className='text-2xl'>{lang.flag}</span>\n <div className='font-medium text-gray-900 dark:text-white'>\n {lang.name}\n </div>\n </LinkComponent>\n ))}\n </div>\n </div>\n )}\n\n {/* Sitemap Grid */}\n <div className='grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8'>\n {sections.map((section, index) => (\n <div\n key={index}\n className='bg-white dark:bg-gray-800 rounded-lg shadow-sm p-6'\n >\n <h2 className='text-lg font-semibold text-gray-900 dark:text-white mb-4 flex items-center'>\n {getIcon(section.icon)}\n {section.title}\n </h2>\n <ul className='space-y-2'>\n {section.links.map((link, linkIndex) => (\n <li key={linkIndex}>\n <LinkComponent\n href={link.path}\n className='group flex items-start text-sm hover:text-blue-600 dark:hover:text-blue-400 transition-colors'\n >\n <ChevronRightIcon className='w-4 h-4 mt-0.5 mr-2 flex-shrink-0 text-gray-400 group-hover:text-blue-600 dark:group-hover:text-blue-400' />\n <div>\n <span className='font-medium text-gray-700 dark:text-gray-300 group-hover:text-blue-600 dark:group-hover:text-blue-400'>\n {link.label}\n </span>\n {link.description && (\n <span className='block text-xs text-gray-500 dark:text-gray-400 mt-0.5'>\n {link.description}\n </span>\n )}\n </div>\n </LinkComponent>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n\n {/* Quick Links Section */}\n {quickLinks.length > 0 && (\n <div className='mt-12 p-6 bg-gray-50 dark:bg-gray-900 rounded-lg'>\n <h3 className='text-lg font-semibold text-gray-900 dark:text-white mb-4'>\n {text.quickLinksTitle}\n </h3>\n <div className='flex flex-wrap gap-3'>\n {quickLinks.map((link, index) => {\n const baseClasses =\n 'inline-flex items-center px-4 py-2 rounded-lg transition-colors';\n const variantClasses =\n link.variant === 'primary'\n ? 'bg-blue-600 text-white hover:bg-blue-700'\n : link.variant === 'secondary'\n ? 'bg-gray-600 text-white hover:bg-gray-700'\n : 'border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800';\n\n return (\n <LinkComponent\n key={index}\n href={link.path}\n className={`${baseClasses} ${variantClasses}`}\n >\n {link.icon === 'envelope' && (\n <EnvelopeIcon className='w-5 h-5 mr-2' />\n )}\n {link.icon === 'document' && (\n <DocumentTextIcon className='w-5 h-5 mr-2' />\n )}\n {link.label}\n </LinkComponent>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n\n if (PageWrapper) {\n return <PageWrapper>{content}</PageWrapper>;\n }\n\n return content;\n};\n\nexport default AppSitemapPage;\n","import React, { type ReactNode, type ComponentType } from 'react';\n\n/**\n * Configuration for a text section with paragraph content\n */\nexport interface TextSectionWithContent {\n /** Section title */\n title: string;\n /** Paragraph content */\n content: string;\n /** Whether content contains HTML that should be rendered */\n isHtml?: boolean;\n}\n\n/**\n * Configuration for a text section with a list\n */\nexport interface TextSectionWithList {\n /** Section title */\n title: string;\n /** Optional description before the list */\n description?: string;\n /** List items */\n items: string[];\n /** Optional additional content after the list */\n additionalContent?: string;\n}\n\n/**\n * Configuration for a text section with subsections (e.g., \"Information You Provide\" and \"Information Collected Automatically\")\n */\nexport interface TextSectionWithSubsections {\n /** Section title */\n title: string;\n /** Subsections, each with a title and list items */\n subsections: Array<{\n title: string;\n items: string[];\n }>;\n}\n\n/**\n * Union type for all section types\n */\nexport type TextSection =\n | TextSectionWithContent\n | TextSectionWithList\n | TextSectionWithSubsections;\n\n/**\n * Contact information configuration\n */\nexport interface TextPageContactInfo {\n /** Email label (e.g., \"Email:\") */\n emailLabel: string;\n /** Email address */\n email: string;\n /** Website label (e.g., \"Website:\") */\n websiteLabel: string;\n /** Website URL */\n websiteUrl: string;\n /** Data Protection Officer label (optional, for privacy pages) */\n dpoLabel?: string;\n /** DPO email (optional, for privacy pages) */\n dpoEmail?: string;\n}\n\n/**\n * GDPR notice configuration (optional, for privacy pages)\n */\nexport interface GdprNotice {\n /** GDPR section title */\n title: string;\n /** GDPR section content */\n content: string;\n}\n\n/**\n * Contact section configuration\n */\nexport interface TextPageContact {\n /** Section title */\n title: string;\n /** Section description */\n description: string;\n /** Whether description contains HTML */\n isHtml?: boolean;\n /** Contact details */\n info: TextPageContactInfo;\n /** Optional GDPR notice (for privacy pages) */\n gdprNotice?: GdprNotice;\n}\n\n/**\n * All text content for the text page\n */\nexport interface TextPageContent {\n /** Page title */\n title: string;\n /** Last updated text (use {{date}} as placeholder for the date) */\n lastUpdated?: string;\n /** All sections in order */\n sections: TextSection[];\n /** Contact information (optional) */\n contact?: TextPageContact;\n}\n\n/**\n * Props for AppTextPage component\n */\nexport interface AppTextPageProps {\n /** All text content (must be provided by consumer) */\n text: TextPageContent;\n /** Current date for \"last updated\" display */\n lastUpdatedDate?: string;\n /** Optional wrapper component for the page layout */\n PageWrapper?: ComponentType<{ children: ReactNode }>;\n /** Optional className for the container */\n className?: string;\n}\n\n/**\n * Type guard to check if section has items (is a list section)\n */\nfunction isSectionWithList(\n section: TextSection\n): section is TextSectionWithList {\n return 'items' in section && Array.isArray(section.items);\n}\n\n/**\n * Type guard to check if section has subsections\n */\nfunction isSectionWithSubsections(\n section: TextSection\n): section is TextSectionWithSubsections {\n return 'subsections' in section && Array.isArray(section.subsections);\n}\n\n/**\n * Heading component for h2 sections\n */\nconst SectionHeading: React.FC<{ children: ReactNode }> = ({ children }) => (\n <h2 className='text-2xl font-bold text-gray-900 dark:text-gray-100 mt-8 mb-4'>\n {children}\n </h2>\n);\n\n/**\n * Heading component for h3 subsections\n */\nconst SubsectionHeading: React.FC<{ children: ReactNode }> = ({ children }) => (\n <h3 className='text-xl font-semibold text-gray-900 dark:text-gray-100 mt-6 mb-3'>\n {children}\n </h3>\n);\n\n/**\n * Paragraph component\n */\nconst Paragraph: React.FC<{ children: ReactNode; className?: string }> = ({\n children,\n className = '',\n}) => (\n <p className={`text-gray-600 dark:text-gray-300 mb-6 ${className}`}>\n {children}\n </p>\n);\n\n/**\n * List component - renders items with HTML support\n */\nconst List: React.FC<{ items: string[] }> = ({ items }) => (\n <ul className='list-disc list-inside text-gray-600 dark:text-gray-300 mb-6 space-y-1'>\n {items.map((item, index) => (\n <li key={index} dangerouslySetInnerHTML={{ __html: item }} />\n ))}\n </ul>\n);\n\n/**\n * AppTextPage - A reusable text page component for legal/informational pages\n *\n * Displays a text-heavy page with:\n * - Flexible section structure (content, list, or subsections)\n * - Optional contact information\n * - Optional GDPR notice\n *\n * Use this for Privacy Policy, Terms of Service, Cookie Policy, etc.\n *\n * @example\n * ```tsx\n * <AppTextPage\n * text={{\n * title: \"Privacy Policy\",\n * lastUpdated: \"Last updated: {{date}}\",\n * sections: [\n * { title: \"Introduction\", content: \"We respect your privacy...\" },\n * { title: \"Data We Collect\", items: [\"Email\", \"Usage data\"] },\n * {\n * title: \"Information We Collect\",\n * subsections: [\n * { title: \"You Provide\", items: [\"Email\", \"Name\"] },\n * { title: \"Automatic\", items: [\"IP\", \"Browser\"] }\n * ]\n * }\n * ],\n * contact: {\n * title: \"Contact\",\n * description: \"Questions?\",\n * info: { emailLabel: \"Email:\", email: \"support@example.com\", ... }\n * }\n * }}\n * lastUpdatedDate=\"January 1, 2025\"\n * />\n * ```\n */\nexport const AppTextPage: React.FC<AppTextPageProps> = ({\n text,\n lastUpdatedDate = new Date().toLocaleDateString(),\n PageWrapper,\n className,\n}) => {\n const content = (\n <div className={`max-w-7xl mx-auto px-4 py-12 ${className || ''}`}>\n <h1 className='text-4xl font-bold text-gray-900 dark:text-gray-100 mb-8'>\n {text.title}\n </h1>\n\n <div className='prose prose-lg dark:prose-invert max-w-none'>\n {text.lastUpdated && (\n <Paragraph className='mb-6'>\n {text.lastUpdated.replace('{{date}}', lastUpdatedDate)}\n </Paragraph>\n )}\n\n {/* Render all sections */}\n {text.sections.map((section, index) => (\n <React.Fragment key={index}>\n <SectionHeading>{section.title}</SectionHeading>\n\n {isSectionWithSubsections(section) ? (\n // Section with subsections (h3 + lists)\n <>\n {section.subsections.map((subsection, subIndex) => (\n <React.Fragment key={subIndex}>\n <SubsectionHeading>{subsection.title}</SubsectionHeading>\n <List items={subsection.items} />\n </React.Fragment>\n ))}\n </>\n ) : isSectionWithList(section) ? (\n // Section with list\n <>\n {section.description && (\n <Paragraph className='mb-4'>{section.description}</Paragraph>\n )}\n <List items={section.items} />\n {section.additionalContent && (\n <Paragraph>{section.additionalContent}</Paragraph>\n )}\n </>\n ) : section.isHtml ? (\n // Section with HTML content\n <Paragraph>\n <span dangerouslySetInnerHTML={{ __html: section.content }} />\n </Paragraph>\n ) : (\n // Section with plain text content\n <Paragraph>{section.content}</Paragraph>\n )}\n </React.Fragment>\n ))}\n\n {/* Contact Section */}\n {text.contact && (\n <>\n <SectionHeading>{text.contact.title}</SectionHeading>\n {text.contact.isHtml ? (\n <Paragraph>\n <span\n dangerouslySetInnerHTML={{ __html: text.contact.description }}\n />\n </Paragraph>\n ) : (\n <Paragraph>{text.contact.description}</Paragraph>\n )}\n <div className='bg-gray-50 dark:bg-gray-800 p-4 rounded-lg'>\n <p className='text-gray-700 dark:text-gray-300'>\n {text.contact.info.emailLabel}{' '}\n <a\n href={`mailto:${text.contact.info.email}`}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.email}\n </a>\n <br />\n {text.contact.info.websiteLabel}{' '}\n <a\n href={text.contact.info.websiteUrl}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.websiteUrl}\n </a>\n {text.contact.info.dpoLabel && text.contact.info.dpoEmail && (\n <>\n <br />\n {text.contact.info.dpoLabel}{' '}\n <a\n href={`mailto:${text.contact.info.dpoEmail}`}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.dpoEmail}\n </a>\n </>\n )}\n </p>\n </div>\n\n {/* GDPR Notice */}\n {text.contact.gdprNotice && (\n <div className='mt-8 p-4 bg-blue-50 dark:bg-blue-900/20 rounded-lg'>\n <h3 className='text-lg font-semibold text-blue-900 dark:text-blue-200 mb-2'>\n {text.contact.gdprNotice.title}\n </h3>\n <p className='text-blue-800 dark:text-blue-300'>\n {text.contact.gdprNotice.content}{' '}\n {text.contact.info.dpoEmail && (\n <a\n href={`mailto:${text.contact.info.dpoEmail}`}\n className='text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300'\n >\n {text.contact.info.dpoEmail}\n </a>\n )}\n </p>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n\n if (PageWrapper) {\n return <PageWrapper>{content}</PageWrapper>;\n }\n\n return content;\n};\n\nexport default AppTextPage;\n"],"names":["b","DefaultLinkComponent","className","AuthStatus","ChainType","getCopyrightYear","FooterContainer","Theme","FontSize","defaultTranslations","G","g","he","Be","Ue","We","ve","Ke","SubscriptionLayout","SegmentedControl","SubscriptionTile"],"mappings":"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","x_google_ignoreList":[12]}