{"version":3,"file":"user-profile.cjs","sources":["../../../../../src/components/auth/user-button/user-profile.tsx"],"sourcesContent":["/**\n * @frank-auth/react - User Profile Dropdown\n *\n * User profile dropdown menu that appears from the user button,\n * includes user info, organization switching, and quick actions.\n */\n\n'use client';\n\nimport React from 'react';\nimport {\n    Avatar,\n    Button,\n    Chip,\n    Dropdown,\n    DropdownItem,\n    DropdownMenu,\n    DropdownSection,\n    DropdownTrigger,\n    User,\n} from '@heroui/react';\nimport {useAuth} from '../../../hooks/use-auth';\nimport {useOrganization} from '../../../hooks/use-organization';\nimport {useSession} from '../../../hooks/use-session';\nimport {useConfig} from '../../../hooks/use-config';\nimport {useTheme} from '../../../hooks/use-theme';\n\n// ============================================================================\n// User Profile Dropdown Interface\n// ============================================================================\n\nexport interface UserProfileProps {\n    /**\n     * Trigger element (usually UserButton)\n     */\n    children: React.ReactNode;\n\n    /**\n     * Dropdown placement\n     */\n    placement?: 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';\n\n    /**\n     * Custom className for dropdown\n     */\n    className?: string;\n\n    /**\n     * Custom className for dropdown content\n     */\n    contentClassName?: string;\n\n    /**\n     * Show organization section\n     */\n    showOrganization?: boolean;\n\n    /**\n     * Show session management\n     */\n    showSessionManagement?: boolean;\n\n    /**\n     * Show theme toggle\n     */\n    showThemeToggle?: boolean;\n\n    /**\n     * Custom menu items\n     */\n    customItems?: UserProfileMenuItem[];\n\n    /**\n     * Hide default items\n     */\n    hideDefaultItems?: string[];\n\n    /**\n     * Sign out handler\n     */\n    onSignOut?: () => void;\n\n    /**\n     * Profile click handler\n     */\n    onProfileClick?: () => void;\n\n    /**\n     * Settings click handler\n     */\n    onSettingsClick?: () => void;\n\n    /**\n     * Organization switch handler\n     */\n    onOrganizationSwitch?: (organizationId: string) => void;\n\n    /**\n     * Custom footer content\n     */\n    footerContent?: React.ReactNode;\n\n    /**\n     * Whether dropdown is disabled\n     */\n    isDisabled?: boolean;\n\n    /**\n     * Close on select\n     */\n    closeOnSelect?: boolean;\n}\n\nexport interface UserProfileMenuItem {\n    key: string;\n    label: string;\n    description?: string;\n    icon?: React.ReactNode;\n    color?: 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger';\n    variant?: 'solid' | 'light';\n    href?: string;\n    onClick?: () => void;\n    isDisabled?: boolean;\n    startContent?: React.ReactNode;\n    endContent?: React.ReactNode;\n    showDivider?: boolean;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Get role badge color\n */\nfunction getRoleBadgeColor(role: string): 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' {\n    switch (role?.toLowerCase()) {\n        case 'owner':\n            return 'danger';\n        case 'admin':\n            return 'warning';\n        case 'member':\n            return 'primary';\n        case 'guest':\n            return 'secondary';\n        default:\n            return 'default';\n    }\n}\n\n/**\n * Get session device icon\n */\nfunction getDeviceIcon(deviceInfo: any) {\n    const device = deviceInfo?.device?.toLowerCase() || '';\n    const os = deviceInfo?.os?.toLowerCase() || '';\n\n    if (device.includes('mobile') || os.includes('ios') || os.includes('android')) {\n        return (\n            <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 18h.01M8 21h8a1 1 0 001-1V4a1 1 0 00-1-1H8a1 1 0 00-1 1v16a1 1 0 001 1z\" />\n            </svg>\n        );\n    }\n\n    return (\n        <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\n        </svg>\n    );\n}\n\n// ============================================================================\n// Default Icons\n// ============================================================================\n\nconst Icons = {\n    user: (\n        <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" />\n        </svg>\n    ),\n    settings: (\n        <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n        </svg>\n    ),\n    signOut: (\n        <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1\" />\n        </svg>\n    ),\n    organization: (\n        <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\" />\n        </svg>\n    ),\n    theme: (\n        <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\" />\n        </svg>\n    ),\n    security: (\n        <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n            <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n        </svg>\n    ),\n};\n\n// ============================================================================\n// User Profile Dropdown Component\n// ============================================================================\n\nexport function UserProfile({\n                                children,\n                                placement = 'bottom-end',\n                                className = '',\n                                contentClassName = '',\n                                showOrganization = true,\n                                showSessionManagement = false,\n                                showThemeToggle = true,\n                                customItems = [],\n                                hideDefaultItems = [],\n                                onSignOut,\n                                onProfileClick,\n                                onSettingsClick,\n                                onOrganizationSwitch,\n                                footerContent,\n                                isDisabled = false,\n                                closeOnSelect = true,\n                            }: UserProfileProps) {\n    const {\n        user,\n        signOut,\n        isOrganizationMember,\n        userName,\n        userEmail,\n    } = useAuth();\n\n    const {\n        organizations,\n        activeOrganization,\n        switchOrganization,\n        isOwner,\n        isAdmin\n    } = useOrganization();\n\n    const {\n        sessions,\n        hasMultipleSessions,\n        revokeSession,\n        deviceInfo,\n    } = useSession();\n\n    const { components } = useConfig();\n    const { mode, toggleMode } = useTheme();\n\n    // Custom component override\n    const CustomUserProfile = components.UserProfile;\n    if (CustomUserProfile) {\n        return <CustomUserProfile {...{\n            children, placement, className, contentClassName, showOrganization,\n            showSessionManagement, showThemeToggle, customItems, hideDefaultItems,\n            onSignOut, onProfileClick, onSettingsClick, onOrganizationSwitch,\n            footerContent, isDisabled, closeOnSelect\n        }} />;\n    }\n\n    // Handle sign out\n    const handleSignOut = React.useCallback(async () => {\n        try {\n            if (onSignOut) {\n                onSignOut();\n            } else {\n                await signOut();\n            }\n        } catch (error) {\n            console.error('Sign out failed:', error);\n        }\n    }, [signOut, onSignOut]);\n\n    // Handle organization switch\n    const handleOrganizationSwitch = React.useCallback(async (orgId: string) => {\n        try {\n            if (onOrganizationSwitch) {\n                onOrganizationSwitch(orgId);\n            } else {\n                await switchOrganization(orgId);\n            }\n        } catch (error) {\n            console.error('Organization switch failed:', error);\n        }\n    }, [switchOrganization, onOrganizationSwitch]);\n\n    // Handle menu item action\n    const handleMenuAction = React.useCallback((key: string) => {\n        switch (key) {\n            case 'profile':\n                onProfileClick?.();\n                break;\n            case 'settings':\n                onSettingsClick?.();\n                break;\n            case 'sign-out':\n                handleSignOut();\n                break;\n            case 'toggle-theme':\n                toggleMode();\n                break;\n            default:\n                // Handle custom items\n                const customItem = customItems.find(item => item.key === key);\n                if (customItem?.onClick) {\n                    customItem.onClick();\n                } else if (customItem?.href) {\n                    window.location.href = customItem.href;\n                }\n                break;\n        }\n    }, [onProfileClick, onSettingsClick, handleSignOut, toggleMode, customItems]);\n\n    // Don't render if user is not available\n    if (!user) return null;\n\n    // Current organization membership role\n    const currentMembershipRole = React.useMemo(() => {\n        if (!activeOrganization) return null;\n        return isOwner ? 'owner' : isAdmin ? 'admin' : 'member';\n    }, [activeOrganization, isOwner, isAdmin]);\n\n    return (\n        <Dropdown\n            placement={placement}\n            className={className}\n            isDisabled={isDisabled}\n            closeOnSelect={closeOnSelect}\n        >\n            <DropdownTrigger>\n                {children}\n            </DropdownTrigger>\n\n            <DropdownMenu\n                aria-label=\"User menu\"\n                onAction={handleMenuAction}\n                className={contentClassName}\n            >\n                {/* User Info Section */}\n                <DropdownSection showDivider>\n                    <DropdownItem\n                        key=\"user-info\"\n                        isReadOnly\n                        className=\"h-14 gap-2 opacity-100\"\n                    >\n                        <User\n                            name={userName}\n                            description={userEmail}\n                            avatarProps={{\n                                size: \"sm\",\n                                src: user.profileImageUrl,\n                            }}\n                            classNames={{\n                                name: \"text-default-600\",\n                                description: \"text-default-500\",\n                            }}\n                        />\n                    </DropdownItem>\n                </DropdownSection>\n\n                {/* Organization Section */}\n                {showOrganization && activeOrganization && (\n                    <DropdownSection title=\"Organization\" showDivider>\n                        <DropdownItem\n                            key=\"current-org\"\n                            isReadOnly\n                            className=\"opacity-100\"\n                            startContent={Icons.organization}\n                            endContent={\n                                currentMembershipRole && (\n                                    <Chip\n                                        size=\"sm\"\n                                        color={getRoleBadgeColor(currentMembershipRole)}\n                                        variant=\"flat\"\n                                    >\n                                        {currentMembershipRole}\n                                    </Chip>\n                                )\n                            }\n                        >\n                            <div className=\"flex flex-col\">\n                                <span className=\"text-small\">{activeOrganization.name}</span>\n                                <span className=\"text-tiny text-default-400\">\n                                    {activeOrganization.slug}\n                                </span>\n                            </div>\n                        </DropdownItem>\n\n                        {/* Organization Switcher */}\n                        {organizations.length > 1 && (\n                            <>\n                                {organizations\n                                    .filter(org => org.id !== activeOrganization.id)\n                                    .map(org => (\n                                        <DropdownItem\n                                            key={`switch-${org.id}`}\n                                            onPress={() => handleOrganizationSwitch(org.id)}\n                                            startContent={\n                                                <Avatar\n                                                    size=\"sm\"\n                                                    src={org.logoUrl}\n                                                    name={org.name}\n                                                />\n                                            }\n                                        >\n                                            Switch to {org.name}\n                                        </DropdownItem>\n                                    ))}\n                            </>\n                        )}\n                    </DropdownSection>\n                )}\n\n                {/* Session Management */}\n                {showSessionManagement && hasMultipleSessions && (\n                    <DropdownSection title=\"Sessions\" showDivider>\n                        {sessions.slice(0, 3).map(session => (\n                            <DropdownItem\n                                key={`session-${session.id}`}\n                                startContent={getDeviceIcon(session.deviceInfo)}\n                                endContent={\n                                    session.id !== sessions[0]?.id && (\n                                        <Button\n                                            size=\"sm\"\n                                            variant=\"light\"\n                                            color=\"danger\"\n                                            onPress={() => revokeSession(session.id)}\n                                        >\n                                            End\n                                        </Button>\n                                    )\n                                }\n                                className=\"text-small\"\n                            >\n                                <div className=\"flex flex-col\">\n                                    <span>{session.deviceInfo?.browser || 'Unknown Browser'}</span>\n                                    <span className=\"text-tiny text-default-400\">\n                                        {session.deviceInfo?.os || 'Unknown OS'}\n                                    </span>\n                                </div>\n                            </DropdownItem>\n                        ))}\n                    </DropdownSection>\n                )}\n\n                {/* Action Section */}\n                <DropdownSection showDivider>\n                    {!hideDefaultItems.includes('profile') && (\n                        <DropdownItem\n                            key=\"profile\"\n                            startContent={Icons.user}\n                        >\n                            Profile\n                        </DropdownItem>\n                    )}\n\n                    {!hideDefaultItems.includes('settings') && (\n                        <DropdownItem\n                            key=\"settings\"\n                            startContent={Icons.settings}\n                        >\n                            Settings\n                        </DropdownItem>\n                    )}\n\n                    {!hideDefaultItems.includes('security') && (\n                        <DropdownItem\n                            key=\"security\"\n                            startContent={Icons.security}\n                        >\n                            Security\n                        </DropdownItem>\n                    )}\n\n                    {showThemeToggle && !hideDefaultItems.includes('theme') && (\n                        <DropdownItem\n                            key=\"toggle-theme\"\n                            startContent={Icons.theme}\n                        >\n                            {mode === 'dark' ? 'Light Mode' : 'Dark Mode'}\n                        </DropdownItem>\n                    )}\n\n                    {/* Custom Items */}\n                    {customItems.map(item => (\n                        <DropdownItem\n                            key={item.key}\n                            startContent={item.startContent || item.icon}\n                            endContent={item.endContent}\n                            color={item.color}\n                            variant={item.variant}\n                            isDisabled={item.isDisabled}\n                            showDivider={item.showDivider}\n                        >\n                            <div className=\"flex flex-col\">\n                                <span>{item.label}</span>\n                                {item.description && (\n                                    <span className=\"text-tiny text-default-400\">\n                                        {item.description}\n                                    </span>\n                                )}\n                            </div>\n                        </DropdownItem>\n                    ))}\n                </DropdownSection>\n\n                {/* Sign Out */}\n                <DropdownSection>\n                    {!hideDefaultItems.includes('signOut') && (\n                        <DropdownItem\n                            key=\"sign-out\"\n                            color=\"danger\"\n                            startContent={Icons.signOut}\n                        >\n                            Sign Out\n                        </DropdownItem>\n                    )}\n                </DropdownSection>\n\n                {/* Custom Footer */}\n                {footerContent && (\n                    <DropdownSection>\n                        <DropdownItem key=\"footer\" isReadOnly className=\"opacity-100\">\n                            {footerContent}\n                        </DropdownItem>\n                    </DropdownSection>\n                )}\n            </DropdownMenu>\n        </Dropdown>\n    );\n}\n\n// ============================================================================\n// Export\n// ============================================================================\n\nexport default UserProfile;"],"names":["getRoleBadgeColor","role","getDeviceIcon","deviceInfo","device","os","jsx","Icons","jsxs","UserProfile","children","placement","className","contentClassName","showOrganization","showSessionManagement","showThemeToggle","customItems","hideDefaultItems","onSignOut","onProfileClick","onSettingsClick","onOrganizationSwitch","footerContent","isDisabled","closeOnSelect","user","signOut","isOrganizationMember","userName","userEmail","useAuth","organizations","activeOrganization","switchOrganization","isOwner","isAdmin","useOrganization","sessions","hasMultipleSessions","revokeSession","useSession","components","useConfig","mode","toggleMode","useTheme","CustomUserProfile","handleSignOut","React","error","handleOrganizationSwitch","orgId","handleMenuAction","key","customItem","item","currentMembershipRole","Dropdown","DropdownTrigger","DropdownMenu","DropdownSection","DropdownItem","User","Chip","Fragment","org","Avatar","session","Button"],"mappings":"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"}