{
  "version": 3,
  "sources": ["../../src/document/components/chrome/statusBar/EmployeeStatusBar.tsx", "../../src/document/components/chrome/statusBar/AgentStatusItem.tsx", "../../src/document/components/chrome/statusBar/icons/Robot.tsx", "../../src/document/components/chrome/statusBar/icons/Branch.tsx", "../../src/document/components/chrome/statusBar/icons/Cloud.tsx", "../../src/document/components/chrome/statusBar/icons/Globe.tsx", "../../src/document/components/chrome/statusBar/icons/Memory.tsx", "../../src/document/components/chrome/statusBar/icons/Tree.tsx", "../../src/document/components/chrome/statusBar/icons/Tunnel.tsx", "../../src/document/components/chrome/statusBar/infoString.ts", "../../src/document/components/chrome/statusBar/useExperimentsStatus.ts"],
  "sourcesContent": ["import { defaultEmployeesOnlySettings } from \"@framerjs/app-config\"\nimport { useClickHandlers } from \"@framerjs/app-shared/src/PreferMouseDown.tsx\"\nimport type { BootstrappedWindow } from \"@framerjs/bootstrap\"\nimport { BINARY_SCHEMA_VERSION } from \"@framerjs/crdtree2\"\nimport { hostInfo, isElectron, unhandledError } from \"@framerjs/shared\"\nimport { cx } from \"@linaria/core\"\nimport { employeesOnlySettings, useEmployeesOnlySettingIsOn } from \"app/employeesOnlySettings.ts\"\nimport { useExperimentIsOn } from \"app/experiments.ts\"\nimport {\n\tDEBUG_BAR_CRDT_SECTION,\n\tDEBUG_BAR_AGENTS_EXAMPLES_CATEGORY,\n\tDEBUG_BAR_AGENTS_SECTION,\n\tgetDebugBarAgentsCategory,\n\tgetDebugBarSection,\n\tsetDebugBarSection,\n\tsetDebugBarAgentsCategory,\n} from \"document/components/chrome/debugbar/debugBarNavigationStore.ts\"\nimport { useIsCrdt } from \"document/crdt/useIsCrdt.ts\"\nimport { getFramerRelease } from \"environment/getFramerRelease.ts\"\nimport { getTunnelId } from \"environment/getTunnelId.ts\"\nimport { startTransition, useCallback, useEffect, useState, useSyncExternalStore } from \"react\"\nimport type { Socket } from \"socket.io-client\"\nimport { appPointerEvents } from \"utils/appPointerEvents.styles.ts\"\nimport { copyText } from \"utils/clipboard/index.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport { updateFeatureSetStorage } from \"web/pages/project/employeesOnlyMenu/menuFromFeatureSet.ts\"\nimport { preloadDebugBar } from \"../debugbar/LazyDebugBar.tsx\"\nimport { AgentStatusItem } from \"./AgentStatusItem.tsx\"\nimport { Item } from \"./Item.tsx\"\nimport * as styles from \"./StatusBar.styles.ts\"\nimport { Branch } from \"./icons/Branch.tsx\"\nimport { Cloud } from \"./icons/Cloud.tsx\"\nimport { Globe } from \"./icons/Globe.tsx\"\nimport { Memory } from \"./icons/Memory.tsx\"\nimport { Tree } from \"./icons/Tree.tsx\"\nimport { Tunnel } from \"./icons/Tunnel.tsx\"\nimport { useCopyInfoStringToClipboard } from \"./infoString.ts\"\nimport { useExperimentsStatus } from \"./useExperimentsStatus.ts\"\nimport { framerStudioVersion, framerWebVersion } from \"./versions.ts\"\n\ndeclare global {\n\tinterface Window {\n\t\t__FRAMER_DEV_SOCKET__?: Socket\n\t}\n}\n\n/** Copies a link to share the current tunnel connection to the clipboard. */\nfunction copyTunnelURLToClipboard() {\n\tconst tunnel = getTunnelId()\n\tif (!tunnel) return\n\tconst tunnelURL = new URL(window.location.href)\n\ttunnelURL.searchParams.set(\"tunnel\", tunnel)\n\tcopyText(tunnelURL.href).catch(unhandledError)\n\ttoast({\n\t\ttype: \"add\",\n\t\tvariant: \"success\",\n\t\ticon: \"success\",\n\t\tprimaryText: \"Copied tunnel link\",\n\t\tsecondaryText: \"to your clipboard.\",\n\t})\n}\n\nfunction barStyle() {\n\tconst release = getFramerRelease(window)\n\n\tif (!release) {\n\t\treturn styles.development\n\t}\n\n\tswitch (release.override) {\n\t\tcase \"preview\":\n\t\t\treturn styles.previewLink\n\t\tcase \"tunnel\":\n\t\t\treturn hostInfo.isProduction ? styles.tunnelOnProduction : styles.devTunnel\n\t}\n\n\tswitch (release.channel) {\n\t\t/** @deprecated Moved to .override */\n\t\tcase \"preview\":\n\t\t\treturn styles.previewLink\n\t\tcase \"beta\":\n\t\t\treturn styles.beta\n\t\tcase \"alpha\":\n\t\t\treturn styles.alpha\n\t\tcase \"stable\":\n\t\t\treturn styles.stable\n\t}\n\n\treturn styles.development\n}\n\nfunction toggleDebugBar() {\n\tconst shouldShowDebugBar = !employeesOnlySettings.isOn(\"showDebugBar\")\n\tconst change = { showDebugBar: shouldShowDebugBar ? \"on\" : \"off\" }\n\tupdateFeatureSetStorage(change, \"employeesOnlySettings\", defaultEmployeesOnlySettings)\n\temployeesOnlySettings.update(change)\n}\n\nfunction getDevSocket() {\n\treturn window.__FRAMER_DEV_SOCKET__\n}\n\nfunction subscribeDevSocketReady(subscribe: VoidFunction) {\n\t// The dev socket script is injected via a script tag.\n\t// due to the asynchronous nature of the `onload` event on that script,\n\t// race conditions can occur where the dev script was not ready before this component mounts .\n\t// The scripts emits a custom event to notify us when the dev socket is ready.\n\tdocument.addEventListener(\"framer:dev_socket_ready\", subscribe)\n\n\treturn () => {\n\t\tdocument.removeEventListener(\"framer:dev_socket_ready\", subscribe)\n\t}\n}\n\ntype DevSocketStatus = \"disabled\" | \"connected\" | \"disconnected\"\n\nconst METRICS_POLL_INTERVAL_MS = 1000\n\ninterface ElectronPerformanceMetrics {\n\tprojectMetrics: Record<string, { cpuPercent: number; memoryMB: number }>\n}\n\ninterface CurrentTabPerformanceMetrics {\n\tcpuPercent: number\n\tmemoryMB: number\n}\n\nfunction useDevSocketStatus(): DevSocketStatus {\n\tconst devSocket = useSyncExternalStore(subscribeDevSocketReady, getDevSocket)\n\n\tconst subscribeDevSocketStatus = useCallback(\n\t\t(callback: VoidFunction) => {\n\t\t\tif (devSocket) {\n\t\t\t\tdevSocket.on(\"connect_error\", callback)\n\t\t\t\tdevSocket.on(\"connect\", callback)\n\t\t\t\tdevSocket.on(\"disconnect\", callback)\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tif (!devSocket) return\n\n\t\t\t\tdevSocket.off(\"connect_error\", callback)\n\t\t\t\tdevSocket.off(\"connect\", callback)\n\t\t\t\tdevSocket.off(\"disconnect\", callback)\n\t\t\t}\n\t\t},\n\t\t[devSocket],\n\t)\n\n\tconst getDevSocketStatus = useCallback((): DevSocketStatus => {\n\t\tif (!devSocket) return \"disabled\"\n\n\t\treturn devSocket.connected ? \"connected\" : \"disconnected\"\n\t}, [devSocket])\n\n\treturn useSyncExternalStore(subscribeDevSocketStatus, getDevSocketStatus)\n}\n\nfunction useCurrentTabPerformanceMetrics(): CurrentTabPerformanceMetrics | null {\n\tconst [metrics, setMetrics] = useState<CurrentTabPerformanceMetrics | null>(null)\n\n\tuseEffect(() => {\n\t\tconst projectId = (window as BootstrappedWindow).bootstrap?.project?.id\n\t\tconst performanceApi = (\n\t\t\twindow as Window & {\n\t\t\t\telectronPerformance?: {\n\t\t\t\t\tgetPerformanceMetrics(): Promise<ElectronPerformanceMetrics>\n\t\t\t\t}\n\t\t\t}\n\t\t).electronPerformance\n\t\tif (!projectId || !performanceApi) {\n\t\t\treturn\n\t\t}\n\n\t\tlet cancelled = false\n\n\t\tconst updateMetrics = async () => {\n\t\t\ttry {\n\t\t\t\tconst performanceMetrics = await performanceApi.getPerformanceMetrics()\n\t\t\t\tif (cancelled) return\n\t\t\t\tconst nextProjectMetrics = performanceMetrics.projectMetrics[projectId]\n\t\t\t\tstartTransition(() => setMetrics(nextProjectMetrics ?? null))\n\t\t\t} catch {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tstartTransition(() => setMetrics(null))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvoid updateMetrics()\n\t\tconst intervalId = window.setInterval(() => {\n\t\t\tvoid updateMetrics()\n\t\t}, METRICS_POLL_INTERVAL_MS)\n\n\t\treturn () => {\n\t\t\tcancelled = true\n\t\t\twindow.clearInterval(intervalId)\n\t\t}\n\t}, [])\n\n\treturn metrics\n}\n\nfunction getFormattedHostname(hostname: string) {\n\tif (hostname === \"framer.com\") return \"prod\"\n\tif (hostname === \"beta.framer.com\") return \"beta\"\n\tif (hostname === \"development.framer.com\") return \"dev\"\n\tif (hostname === \"beta.development.framer.com\") return \"beta.dev\"\n\n\tif (hostname.endsWith(\".beta.development.framer.com\")) {\n\t\tconst prefix = hostname.slice(0, -\".beta.development.framer.com\".length)\n\t\treturn `${prefix}.dev`\n\t}\n\n\tif (hostname.endsWith(\".beta.framer.com\")) {\n\t\treturn hostname.slice(0, -\".beta.framer.com\".length)\n\t}\n\n\treturn hostname\n}\n\nexport function EmployeeStatusBar() {\n\tconst experimentsStatus = useExperimentsStatus()\n\tconst copyInfoToClipboard = useCopyInfoStringToClipboard(experimentsStatus)\n\tconst showCrdtBadge = useIsCrdt()\n\tconst isAgentExperimentOn = useExperimentIsOn(\"agent\")\n\tconst currentTabPerformanceMetrics = useCurrentTabPerformanceMetrics()\n\tconst isFramerElectron = isElectron()\n\tconst clickHandlers = useClickHandlers(toggleDebugBar)\n\tconst isDebugBarOpen = useEmployeesOnlySettingIsOn(\"showDebugBar\")\n\n\tconst openCrdtDebugBar = () => {\n\t\t// If the CRDT debug bar view is already open, close the debug bar.\n\t\tconst isCrdtViewOpen = isDebugBarOpen && getDebugBarSection() === DEBUG_BAR_CRDT_SECTION\n\t\tif (isCrdtViewOpen) {\n\t\t\ttoggleDebugBar()\n\t\t\treturn\n\t\t}\n\n\t\tsetDebugBarSection(DEBUG_BAR_CRDT_SECTION)\n\t\tif (!isDebugBarOpen) {\n\t\t\ttoggleDebugBar()\n\t\t}\n\t}\n\n\tconst openAgentExamplesDebugBar = () => {\n\t\tconst isAgentExamplesViewOpen =\n\t\t\tisDebugBarOpen &&\n\t\t\tgetDebugBarSection() === DEBUG_BAR_AGENTS_SECTION &&\n\t\t\tgetDebugBarAgentsCategory() === DEBUG_BAR_AGENTS_EXAMPLES_CATEGORY\n\n\t\tif (isAgentExamplesViewOpen) {\n\t\t\ttoggleDebugBar()\n\t\t\treturn\n\t\t}\n\n\t\tsetDebugBarSection(DEBUG_BAR_AGENTS_SECTION)\n\t\tsetDebugBarAgentsCategory(DEBUG_BAR_AGENTS_EXAMPLES_CATEGORY)\n\t\tif (!isDebugBarOpen) {\n\t\t\ttoggleDebugBar()\n\t\t}\n\t}\n\n\tconst devSocketStatus = useDevSocketStatus()\n\n\tlet studioInfo = framerStudioVersion\n\tconst release = getFramerRelease(window)\n\tif (release) {\n\t\tlet releaseInfo = release.channel\n\t\tif (release.override) {\n\t\t\treleaseInfo += ` + ${release.override}`\n\t\t}\n\t\tstudioInfo += ` (${releaseInfo})`\n\t}\n\n\tuseEffect(() => {\n\t\tif (devSocketStatus === \"disabled\") return\n\n\t\tif (devSocketStatus === \"disconnected\") {\n\t\t\tconst toastKey = \"dev-socket-not-connected\"\n\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tvariant: \"warning\",\n\t\t\t\ticon: \"warning\",\n\t\t\t\tprimaryText: \"Dev tunnel socket\",\n\t\t\t\tsecondaryText: \"not connected.\",\n\t\t\t\tduration: Infinity,\n\t\t\t\tkey: toastKey,\n\t\t\t})\n\n\t\t\treturn () => {\n\t\t\t\ttoast({\n\t\t\t\t\ttype: \"remove\",\n\t\t\t\t\tkey: toastKey,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}, [devSocketStatus])\n\n\tconst tunnel = getTunnelId()\n\tconst formattedHostname = getFormattedHostname(window.location.hostname)\n\n\treturn (\n\t\t<footer className={cx(styles.statusBar, appPointerEvents, barStyle())} aria-label=\"Employee status bar\">\n\t\t\t<button\n\t\t\t\tclassName={styles.underlayToggle}\n\t\t\t\ttype=\"button\"\n\t\t\t\tonMouseEnter={preloadDebugBar}\n\t\t\t\taria-label=\"Toggle debug bar\"\n\t\t\t\t{...clickHandlers}\n\t\t\t/>\n\t\t\t<div className={styles.itemsLayer}>\n\t\t\t\t{currentTabPerformanceMetrics !== null ? (\n\t\t\t\t\t<Item icon={Memory} tooltip=\"Tab process CPU and memory\">\n\t\t\t\t\t\t{currentTabPerformanceMetrics.cpuPercent.toFixed(0)}% \u00B7 {currentTabPerformanceMetrics.memoryMB} MB\n\t\t\t\t\t</Item>\n\t\t\t\t) : null}\n\t\t\t\t{showCrdtBadge ? (\n\t\t\t\t\t<Item icon={Tree} onClick={openCrdtDebugBar}>\n\t\t\t\t\t\tCRDT {BINARY_SCHEMA_VERSION}\n\t\t\t\t\t</Item>\n\t\t\t\t) : null}\n\t\t\t\t{/* Show the Git commit hash that FramerStudio (the UI) was built with. */}\n\t\t\t\t<Item icon={Branch} onClick={copyInfoToClipboard}>\n\t\t\t\t\t{studioInfo}\n\t\t\t\t</Item>\n\t\t\t\t{/* Show the Git commit hash that FramerWeb (the server) was built with. */}\n\t\t\t\t<Item icon={Cloud} onClick={copyInfoToClipboard}>\n\t\t\t\t\t{framerWebVersion}\n\t\t\t\t</Item>\n\t\t\t\t{isAgentExperimentOn && <AgentStatusItem onClick={openAgentExamplesDebugBar} />}\n\t\t\t\t{tunnel && (\n\t\t\t\t\t<Item icon={Tunnel} onClick={copyTunnelURLToClipboard}>\n\t\t\t\t\t\t{tunnel}\n\t\t\t\t\t</Item>\n\t\t\t\t)}\n\t\t\t\t{isFramerElectron ? (\n\t\t\t\t\t<Item icon={Globe} onClick={copyInfoToClipboard}>\n\t\t\t\t\t\t{formattedHostname}\n\t\t\t\t\t</Item>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</footer>\n\t)\n}\n", "import { useAgent } from \"app/agent/hooks/useAgent.ts\"\nimport { ContextLimitCap, getContextLimitForModel } from \"app/ai/models.ts\"\nimport { useExampleContextFromActiveChatHistory } from \"document/components/chrome/debugbar/agents/examples/useExampleContextFromActiveChatHistory.ts\"\nimport engine from \"document/engine.ts\"\nimport { useEngineState } from \"document/useEngineState.ts\"\nimport { useMemo } from \"react\"\nimport { isNumber, isUndefined } from \"utils/typeChecks.ts\"\nimport { Item } from \"./Item.tsx\"\nimport { Robot } from \"./icons/Robot.tsx\"\n\ninterface AgentStatusItemProps {\n\tonClick: VoidFunction\n}\n\nconst tokenCountFormatter = new Intl.NumberFormat(\"en-US\", {\n\tnotation: \"compact\",\n\tcompactDisplay: \"short\",\n\tmaximumFractionDigits: 1,\n})\n\nfunction formatTokenCount(value: number): string {\n\treturn tokenCountFormatter.format(Math.max(0, value))\n}\n\nfunction formatCost(cost: number): string {\n\treturn `$${cost.toFixed(2)}`\n}\n\nexport function AgentStatusItem({ onClick }: AgentStatusItemProps) {\n\tconst { nodeExampleStatusByName } = useExampleContextFromActiveChatHistory()\n\tconst activeChatAgentId = engine.stores.agentStore.useState(state => state.activeChatAgentId)\n\tconst { agent: activeChatAgent } = useAgent(activeChatAgentId)\n\n\tconst count = useMemo(() => {\n\t\tlet nextCount = 0\n\t\tfor (const status of nodeExampleStatusByName.values()) {\n\t\t\tif (status === \"in-context\") nextCount++\n\t\t}\n\t\treturn nextCount\n\t}, [nodeExampleStatusByName])\n\n\tconst contextUsageLimitPercent = useMemo(() => {\n\t\tconst contextUsage = activeChatAgent?.contextUsage\n\t\tif (!contextUsage) return\n\n\t\tconst inputTokens = Math.max(0, contextUsage.inputTokens)\n\t\tconst lowerBound = getContextLimitForModel(contextUsage.model, ContextLimitCap.Lower)\n\t\tconst upperBound = getContextLimitForModel(contextUsage.model, ContextLimitCap.Upper)\n\t\tconst contextLimit =\n\t\t\tinputTokens > upperBound\n\t\t\t\t? getContextLimitForModel(contextUsage.model, ContextLimitCap.Max)\n\t\t\t\t: inputTokens > lowerBound\n\t\t\t\t\t? upperBound\n\t\t\t\t\t: lowerBound\n\t\tif (contextLimit <= 0) return\n\n\t\treturn Math.round((inputTokens / contextLimit) * 100)\n\t}, [activeChatAgent?.contextUsage])\n\n\tconst contextTooltipLabel = useMemo(() => {\n\t\tconst contextUsage = activeChatAgent?.contextUsage\n\t\tif (!contextUsage) return undefined\n\n\t\tconst inputTokens = Math.max(0, contextUsage.inputTokens)\n\t\tconst lowerBound = getContextLimitForModel(contextUsage.model, ContextLimitCap.Lower)\n\t\tconst upperBound = getContextLimitForModel(contextUsage.model, ContextLimitCap.Upper)\n\t\tconst maxBound = getContextLimitForModel(contextUsage.model, ContextLimitCap.Max)\n\t\tconst sameContextLimit = lowerBound === upperBound && upperBound === maxBound\n\t\tconst contextLimitLabel = sameContextLimit\n\t\t\t? formatTokenCount(maxBound)\n\t\t\t: `${formatTokenCount(lowerBound)} (upper: ${formatTokenCount(upperBound)} | max: ${formatTokenCount(maxBound)})`\n\n\t\treturn `Context: ${formatTokenCount(inputTokens)} / ${contextLimitLabel}`\n\t}, [activeChatAgent?.contextUsage])\n\n\tconst sessionCost = useEngineState(\n\t\t() => {\n\t\t\tconst id = engine.stores.agentStore.activeChatAgentId\n\t\t\tif (!id) return undefined\n\t\t\tconst agent = engine.stores.agentStore.getAgent(id)\n\t\t\tconst messages = agent?.chatMessages ?? []\n\t\t\tlet total = 0\n\t\t\tfor (const r of messages) {\n\t\t\t\tif (r.done && isNumber(r.cost)) total += r.cost\n\t\t\t}\n\t\t\treturn total > 0 ? total : undefined\n\t\t},\n\t\t[],\n\t\tengine.stores.agentStore,\n\t)\n\n\tconst agentLabel = useMemo(() => {\n\t\tconst details: string[] = []\n\n\t\tif (count > 0) {\n\t\t\tdetails.push(String(count))\n\t\t}\n\n\t\tif (contextUsageLimitPercent !== undefined) {\n\t\t\tdetails.push(`${contextUsageLimitPercent}%`)\n\t\t}\n\n\t\tif (!isUndefined(sessionCost)) {\n\t\t\tdetails.push(formatCost(sessionCost))\n\t\t}\n\n\t\treturn details.length > 0 ? details.join(\" \u00B7 \") : \"Agent\"\n\t}, [count, contextUsageLimitPercent, sessionCost])\n\n\tconst tooltipSuffix = [\n\t\tcontextTooltipLabel ? ` | ${contextTooltipLabel}` : \"\",\n\t\tsessionCost !== undefined ? ` | ${formatCost(sessionCost)}` : \"\",\n\t].join(\"\")\n\n\treturn (\n\t\t<Item icon={Robot} onClick={onClick} tooltip={`${count} guide${count !== 1 ? \"s\" : \"\"}${tooltipSuffix}`}>\n\t\t\t{agentLabel}\n\t\t</Item>\n\t)\n}\n", "export function Robot() {\n\treturn (\n\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icon\n\t\t<svg>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity=\"0.2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\td=\"M2 5a3 3 0 0 1 3-3h4a3 3 0 0 1 3 3v4a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3Z\"\n\t\t\t/>\n\t\t\t<path fill=\"currentColor\" d=\"M5 4.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2\" />\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\td=\"M7 2V.5M4.5 8.5S5.6 9 7 9s2.5-.5 2.5-.5M.5 7H2M12 7h1.5\"\n\t\t\t/>\n\t\t\t<path fill=\"currentColor\" d=\"M9 4.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2\" />\n\t\t</svg>\n\t)\n}\n", "export function Branch() {\n\treturn (\n\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icon\n\t\t<svg>\n\t\t\t<path fill=\"transparent\" stroke=\"currentColor\" d=\"M3.5 8.5v-3M10.5 5.5v2a3 3 0 0 1-3 3h-2\" />\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity=\"0.2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\td=\"M3.5 1.5a2 2 0 1 1 .001 3.999A2 2 0 0 1 3.5 1.5ZM10.5 1.5a2 2 0 1 1 .001 3.999A2 2 0 0 1 10.5 1.5ZM3.5 8.5a2 2 0 1 1 .001 3.999A2 2 0 0 1 3.5 8.5Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "export function Cloud() {\n\treturn (\n\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icon\n\t\t<svg>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity=\"0.2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\td=\"M3.25 6.5h.756a4.751 4.751 0 0 1 9.494.25V7a5 5 0 0 1-5 5H3.25a2.75 2.75 0 1 1 0-5.5Z\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "export function Globe() {\n\treturn (\n\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icon\n\t\t<svg>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity=\"0.2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\td=\"M12.5 7a5.5 5.5 0 1 1-11 0 5.5 5.5 0 1 1 11 0Z\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\td=\"M9 7c0 3.038-.895 5.5-2 5.5S5 10.038 5 7s.895-5.5 2-5.5S9 3.962 9 7Z\"\n\t\t\t/>\n\t\t\t<path fill=\"transparent\" stroke=\"currentColor\" d=\"M1.5 6.5S2.969 7 7 7s5.5-.5 5.5-.5\" />\n\t\t</svg>\n\t)\n}\n", "export function Memory() {\n\treturn (\n\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icon\n\t\t<svg>\n\t\t\t<path\n\t\t\t\td=\"M2 5a3 3 0 0 1 3-3h4a3 3 0 0 1 3 3v4a3 3 0 0 1-3 3H5a3 3 0 0 1-3-3Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity=\"0.2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M5.5 13.5V12M8.5 13.5V12M5.5 2V.5M8.5 2V.5M.5 5.5H2M.5 8.5H2M12 5.5h1.5M12 8.5h1.5\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M5 6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1Z\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n", "export function Tree() {\n\treturn (\n\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icon\n\t\t<svg>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity=\"0.2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\td=\"M1 7.5A2.5 2.5 0 0 1 3.5 5a3.5 3.5 0 1 1 7 0 2.5 2.5 0 1 1 0 5h-7A2.5 2.5 0 0 1 1 7.5Z\"\n\t\t\t/>\n\t\t\t<path fill=\"transparent\" stroke=\"currentColor\" strokeLinecap=\"round\" d=\"M7 10v2.5\" />\n\t\t</svg>\n\t)\n}\n", "export function Tunnel() {\n\treturn (\n\t\t// biome-ignore lint/a11y/noSvgWithoutTitle: Decorative icon\n\t\t<svg>\n\t\t\t<path\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\tfillOpacity=\"0.2\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\td=\"M3.5 12a2 2 0 0 1-2-2V7.5a5.5 5.5 0 1 1 11 0V10a2 2 0 0 1-2 2H9V8a2 2 0 1 0-4 0v4Z\"\n\t\t\t/>\n\t\t\t<path fill=\"transparent\" stroke=\"currentColor\" d=\"M5 12h4\" />\n\t\t</svg>\n\t)\n}\n", "import { unhandledError } from \"@framerjs/shared\"\nimport { useIsCrdt } from \"document/crdt/useIsCrdt.ts\"\nimport { getFramerRelease } from \"environment/getFramerRelease.ts\"\nimport { useCallback } from \"react\"\nimport { copyText } from \"utils/clipboard/index.ts\"\nimport { toast } from \"web/lib/toaster.ts\"\nimport type { ExperimentsStatus } from \"./useExperimentsStatus.ts\"\nimport { framerStudioVersion, framerWebVersion } from \"./versions.ts\"\n\n/** A text block of useful information that can be copied to clipboard or included in links. */\nexport function useInfoString({ isUsingDefaultExperiments, onNames }: ExperimentsStatus): string {\n\tconst experimentsInfo =\n\t\tonNames.length === 0\n\t\t\t? [`No experiments enabled${isUsingDefaultExperiments ? \"\" : \" (custom)\"}`]\n\t\t\t: [`Enabled experiments${isUsingDefaultExperiments ? \"\" : \" (custom)\"}:`, ...onNames.map(line => `* ${line}`)]\n\n\tconst release = getFramerRelease(window)\n\tconst isCrdtOn = useIsCrdt()\n\n\treturn [\n\t\t`URL: ${window.location.href}`,\n\t\t`FramerStudio version: ${framerStudioVersion}`,\n\t\t`FramerWeb version: ${framerWebVersion}`,\n\t\t`Release channel: ${release?.channel ?? \"unknown\"}`,\n\t\t`Release override: ${release?.override ?? \"(none)\"}`,\n\t\t`Runtime: ${isCrdtOn ? \"CRDT\" : \"Classic\"}`,\n\t\t`Browser: ${navigator.userAgent}`,\n\t\t\"\",\n\t\t...experimentsInfo,\n\t].join(\"\\n\")\n}\n\n/** Copies the above information to the clipboard. */\nexport function useCopyInfoStringToClipboard(experimentsStatus: ExperimentsStatus): () => void {\n\t// Get the status of the current user's experiments.\n\tconst infoString = useInfoString(experimentsStatus)\n\treturn useCallback(() => {\n\t\tcopyText(infoString).catch(unhandledError)\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tvariant: \"success\",\n\t\t\ticon: \"success\",\n\t\t\ttext: \"Copied debug information to your clipboard.\",\n\t\t})\n\t}, [infoString])\n}\n", "import type { ExperimentName } from \"@framerjs/app-config\"\nimport { stableExperiments } from \"@framerjs/app-config\"\nimport { defaultExperimentsForChannel, experiments } from \"app/experiments.ts\"\nimport { useEffect, useMemo, useState } from \"react\"\nexport interface ExperimentsStatus {\n\tonNames: string[]\n\tisUsingDefaultExperiments: boolean\n}\n\nfunction getExperimentNames(experiments: Map<string, string>) {\n\treturn [...experiments.entries()]\n\t\t.map(([key, variant]) => {\n\t\t\tif (variant === \"on\") return key\n\t\t\treturn `${key}: ${variant}`\n\t\t})\n\t\t.sort()\n}\n\n/** A hook that returns a list of all experiments that are currently \"on\". Triggers a re-render on changes. */\nexport function useExperimentsStatus(): ExperimentsStatus {\n\tconst [onNames, setOnNames] = useState<string[]>([])\n\tuseEffect(() => {\n\t\t// Track all currently \"on\" experiments in this set.\n\t\tconst onExperiments = new Map<string, string>()\n\t\t// Remember listeners so we can remove them later.\n\t\tconst removeListenerFunctions: (() => void)[] = []\n\t\t// Listen for changes to all experiments.\n\t\tfor (const key of Object.keys(stableExperiments)) {\n\t\t\tconst name = key as ExperimentName\n\t\t\t// Initialize the state.\n\t\t\tif (!experiments.is(name, \"off\")) {\n\t\t\t\tonExperiments.set(name, experiments.get(name))\n\t\t\t}\n\t\t\t// Add a listener for changes.\n\t\t\tconst listener = (variant: string) => {\n\t\t\t\tif (variant !== \"off\" && onExperiments.get(name) !== variant) {\n\t\t\t\t\tonExperiments.set(name, variant)\n\t\t\t\t\tsetOnNames(getExperimentNames(onExperiments))\n\t\t\t\t} else if (variant === \"off\" && onExperiments.has(name)) {\n\t\t\t\t\tonExperiments.delete(name)\n\t\t\t\t\tsetOnNames(getExperimentNames(onExperiments))\n\t\t\t\t}\n\t\t\t}\n\t\t\texperiments.addListener(name, listener)\n\t\t\t// Make sure that we can clean up active listeners later.\n\t\t\tremoveListenerFunctions.push(() => experiments.removeListener(name, listener))\n\t\t}\n\t\t// Trigger an initial update if there are any experiments enabled.\n\t\tif (onExperiments.size > 0) {\n\t\t\tsetOnNames(getExperimentNames(onExperiments))\n\t\t}\n\t\t// Clean up on unmount.\n\t\treturn () => {\n\t\t\tremoveListenerFunctions.forEach(removeListener => removeListener())\n\t\t}\n\t}, [])\n\n\t// Find out if the current user's set of experiments deviate from the defaults.\n\tconst isUsingDefaultExperiments = useMemo(() => {\n\t\tconst enabledExperiments = new Map(\n\t\t\tObject.entries(defaultExperimentsForChannel()).filter(([_, variant]) => variant !== \"off\"),\n\t\t)\n\n\t\tconst expectedOnNames = getExperimentNames(enabledExperiments)\n\n\t\tif (expectedOnNames.length !== onNames.length) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn onNames.every((name, idx) => name === expectedOnNames[idx])\n\t}, [onNames])\n\n\treturn { onNames, isUsingDefaultExperiments }\n}\n"],
  "mappings": "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",
  "names": ["import_react", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_jsx_runtime", "import_react", "import_react", "experiments", "import_jsx_runtime"]
}
