{
  "version": 3,
  "sources": ["../../src/web/pages/projects/components/settings/account/AccountSettingsModal.tsx", "../../src/web/pages/projects/components/settings/account/Workspaces.styles.ts", "../../src/web/pages/projects/components/settings/account/Workspaces.tsx"],
  "sourcesContent": ["import type { OrganizationSpace } from \"@framerjs/app-shared\"\nimport {\n\tConfirmationModal,\n\tCustomModal,\n\tIconCancel,\n\tIconDashboardModalPasskeys,\n\tIconDashboardModalProfile,\n\tIconDashboardModalSessions,\n\tIconDashboardModalWorkspaces,\n\tSpinner,\n\tStack,\n\tTranslatable as T,\n} from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport { useModalThemeOnActiveView } from \"document/components/chrome/utils/useModalTheme.ts\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { MemoryRouter, NavLink, Route, Switch } from \"react-router-dom\"\nimport type { AccountApi } from \"../../../../../lib/useAccountAPI.ts\"\nimport { SettingsView } from \"../Header.tsx\"\nimport * as styles from \"../SettingsModal.styles.ts\"\nimport { SettingsModalError } from \"../SettingsModalError.tsx\"\nimport { ConfirmationModalContext, useConfirmationModal } from \"../team/utils/useConfirmationModal.ts\"\nimport { Passkeys } from \"./Passkeys.tsx\"\nimport { Profile } from \"./Profile.tsx\"\nimport { Sessions } from \"./Sessions.tsx\"\nimport { Workspaces } from \"./Workspaces.tsx\"\n\ninterface Props {\n\tapi: AccountApi\n\tuserWorkspaces: OrganizationSpace[]\n\tonDismiss: () => void\n\tonOpenWorkspaceSettings: (space: OrganizationSpace, settingsView: SettingsView) => void\n}\n\nconst defaultRouteLabels = [\n\t{ to: \"/profile\", label: \"Profile\", icon: <IconDashboardModalProfile /> },\n\t{ to: \"/workspaces\", label: \"Workspaces\", icon: <IconDashboardModalWorkspaces /> },\n\t{ to: \"/sessions\", label: \"Sessions\", icon: <IconDashboardModalSessions /> },\n\t{ to: \"/passkeys\", label: \"Passkeys\", icon: <IconDashboardModalPasskeys /> },\n]\n\n// We are using a default export because this component is imported lazily.\n// biome-ignore lint/style/noDefaultExport: needed here\nexport default function AccountSettingsModal({ api, userWorkspaces, onDismiss, onOpenWorkspaceSettings }: Props) {\n\tconst {\n\t\taccount,\n\t\tendSession,\n\t\tfetchProfile,\n\t\tfetchSessions,\n\t\tfetchPasskeys,\n\t\tfetchPreferences,\n\t\tupdatePreferences,\n\t\tupdateProfile,\n\t\tuploadUserAvatar,\n\t\tresetAccount,\n\t} = api\n\n\tconst modalThemeProps = useModalThemeOnActiveView(\"darker\")\n\n\tconst [hasError, setHasError] = useState(false)\n\n\tuseEffect(() => {\n\t\tlet active = true\n\t\tPromise.all([fetchProfile(), fetchSessions(), fetchPasskeys(), fetchPreferences([\"emailLoginDisabled\"])]).catch(\n\t\t\t() => {\n\t\t\t\tif (!active) return\n\t\t\t\tsetHasError(true)\n\t\t\t},\n\t\t)\n\t\treturn () => {\n\t\t\tactive = false\n\t\t\tresetAccount()\n\t\t}\n\t}, [fetchProfile, fetchSessions, fetchPasskeys, fetchPreferences, resetAccount])\n\n\tconst [confirmationModalProps, confirmationModalActions] = useConfirmationModal()\n\n\tasync function handleEndSession(sessionId: string) {\n\t\tawait endSession(sessionId)\n\t}\n\n\tasync function handleReload() {\n\t\ttry {\n\t\t\tsetHasError(false)\n\t\t\tawait Promise.all([fetchProfile(), fetchSessions(), fetchPasskeys(), fetchPreferences([\"emailLoginDisabled\"])])\n\t\t} catch {\n\t\t\tsetHasError(true)\n\t\t}\n\t}\n\n\tconst handleOpenWorkspaceSettings = useCallback(\n\t\t(workspace: OrganizationSpace) => {\n\t\t\tonDismiss()\n\t\t\tonOpenWorkspaceSettings(workspace, SettingsView.Workspace)\n\t\t},\n\t\t[onDismiss, onOpenWorkspaceSettings],\n\t)\n\n\tconst isPasskeysExperimentOn = useExperimentIsOn(\"passkeys\")\n\tconst routeLabels = defaultRouteLabels.filter(({ to }) => to !== \"/passkeys\" || isPasskeysExperimentOn)\n\n\tconst routerEntries = routeLabels.map(({ to }) => to)\n\n\tconst nestedModalIsVisible = confirmationModalProps\n\n\treturn (\n\t\t<MemoryRouter initialEntries={routerEntries} initialIndex={0}>\n\t\t\t<CustomModal\n\t\t\t\tvisible\n\t\t\t\thasBackdrop\n\t\t\t\tonDismiss={onDismiss}\n\t\t\t\tclassName={styles.modal}\n\t\t\t\tfocusTrapEnabled={!nestedModalIsVisible}\n\t\t\t\t{...modalThemeProps}\n\t\t\t>\n\t\t\t\t{hasError ? (\n\t\t\t\t\t<SettingsModalError onReload={handleReload} />\n\t\t\t\t) : (\n\t\t\t\t\t<Stack direction=\"column\" gap={0} className={styles.wrapper}>\n\t\t\t\t\t\t{!account?.profile || !account.sessions ? (\n\t\t\t\t\t\t\t<Spinner />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<Stack padding=\"0 20px\" className={cx(styles.header, styles.accountSettingsHeader)}>\n\t\t\t\t\t\t\t\t\tAccount\n\t\t\t\t\t\t\t\t\t<IconCancel className={styles.iconCancel} onClick={onDismiss} />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<Stack direction=\"row\" gap={0} className={styles.main}>\n\t\t\t\t\t\t\t\t\t<Stack padding=\"15px\" gap={20} className={styles.sidebar}>\n\t\t\t\t\t\t\t\t\t\t<Stack gap={5}>\n\t\t\t\t\t\t\t\t\t\t\t{routeLabels.map(({ to, label, icon }) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<NavLink\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cx(styles.navLink, styles.navLink)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tactiveClassName={styles.activeNavLink}\n\t\t\t\t\t\t\t\t\t\t\t\t\tto={to}\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={to}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"row\" padding={0} gap={10} alignItems=\"center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<T>{label}</T>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t</NavLink>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t<Stack gap={0} className={styles.content}>\n\t\t\t\t\t\t\t\t\t\t<ConfirmationModalContext.Provider value={confirmationModalActions}>\n\t\t\t\t\t\t\t\t\t\t\t<Switch>\n\t\t\t\t\t\t\t\t\t\t\t\t<Route path=\"/profile\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Profile\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprofile={account.profile}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdateProfile={updateProfile}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonAvatarUpload={uploadUserAvatar}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbigAvatar\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</Route>\n\t\t\t\t\t\t\t\t\t\t\t\t<Route path=\"/workspaces\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Workspaces\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tworkspaces={userWorkspaces}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonOpenWorkspaceSettings={handleOpenWorkspaceSettings}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</Route>\n\t\t\t\t\t\t\t\t\t\t\t\t<Route path=\"/sessions\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Sessions sessions={account.sessions} endSession={handleEndSession} />\n\t\t\t\t\t\t\t\t\t\t\t\t</Route>\n\t\t\t\t\t\t\t\t\t\t\t\t<Route path=\"/passkeys\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Passkeys\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpasskeys={account.passkeys || []}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonUpdate={fetchPasskeys}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\temailLoginDisabled={account.preferences?.emailLoginDisabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonEmailLoginDisabledChange={(disabled: boolean) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tupdatePreferences({ emailLoginDisabled: disabled })\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</Route>\n\t\t\t\t\t\t\t\t\t\t\t</Switch>\n\t\t\t\t\t\t\t\t\t\t</ConfirmationModalContext.Provider>\n\t\t\t\t\t\t\t\t\t\t{confirmationModalProps && <ConfirmationModal {...confirmationModalProps} />}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</CustomModal>\n\t\t</MemoryRouter>\n\t)\n}\n", "import \"Workspaces.styles_snkvy4.wyw.css\"; export const wrapper = \"wrapper_wrk393m\";\nexport const row = \"row_rsafajs\";\nexport const workspaceInfo = \"workspaceInfo_w1mm36s7\";\nexport const workspaceName = \"workspaceName_w1msqcmz\";\nexport const planAndRole = \"planAndRole_p3pccpe\";\nexport const settingsButton = \"settingsButton_s1oumyc5\";", "import { type OrganizationSpace, TeamLicenseType, getTeamLicenseName } from \"@framerjs/app-shared\"\nimport { Button, Stack, truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { TeamAvatar } from \"../../../../../components/TeamAvatar.tsx\"\nimport { getRoleDisplayLabel } from \"../roleMenuUtils.ts\"\nimport * as styles from \"./Workspaces.styles.ts\"\n\ninterface Props {\n\tworkspaces: OrganizationSpace[]\n\tonOpenWorkspaceSettings: (team: OrganizationSpace) => void\n}\n\nexport function Workspaces({ workspaces, onOpenWorkspaceSettings }: Props) {\n\treturn (\n\t\t<Stack className={styles.wrapper} padding=\"30px 30px 0\" gap={30}>\n\t\t\t{workspaces.map(workspace => (\n\t\t\t\t<Stack gap={15} alignItems=\"center\" direction=\"row\" key={workspace.id} className={styles.row}>\n\t\t\t\t\t<TeamAvatar {...workspace} />\n\t\t\t\t\t<Stack gap={2} className={styles.workspaceInfo}>\n\t\t\t\t\t\t<div className={cx(truncateWithEllipsis, styles.workspaceName)}>{workspace.displayName}</div>\n\t\t\t\t\t\t<div className={styles.planAndRole}>\n\t\t\t\t\t\t\t{workspaceName(workspace.license.type)} / {getRoleDisplayLabel(workspace.role)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Button className={styles.settingsButton} onClick={() => onOpenWorkspaceSettings(workspace)}>\n\t\t\t\t\t\tSettings\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t))}\n\t\t</Stack>\n\t)\n}\n\nfunction workspaceName(license: TeamLicenseType) {\n\treturn getTeamLicenseName(license) + (license === TeamLicenseType.EnterprisePlan ? \"\" : \" Workspace\")\n}\n"],
  "mappings": "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",
  "names": ["wrapper", "wrapper", "workspaceName", "import_jsx_runtime"]
}
