{
  "version": 3,
  "sources": ["../../src/web/lib/vantara/app.ts", "../../../../../node_modules/@framerjs/framer-events/lib/esm/generated/UiImpression.js", "../../../../../node_modules/@framerjs/framer-events/lib/esm/generated/UiInteraction.js", "../../src/web/lib/vantara/getVantaraClient.ts", "../../src/web/components/ErrorBoundary.tsx", "../../src/web/lib/legacyProjectError.ts", "../../src/web/components/ErrorBoundary.styles.ts", "../../src/web/pages/projects/components/settings/team/types.ts", "../../src/web/lib/getPricingURL.ts", "../../src/document/components/chrome/analytics/components/DropdownMenuButton.styles.ts", "../../src/document/components/chrome/analytics/components/DropdownMenuButton.tsx", "../../src/web/lib/useVisibleAndFocused.ts", "../../src/web/lib/useFocusTracking.ts", "../../src/web/lib/copyRemixLink.ts", "../../src/web/lib/stringToCharCodeSum.ts", "../../src/document/components/chrome/siteSettings/Plans/Stripe/api/teamSubscription.ts", "../../src/document/components/chrome/siteSettings/Plans/Stripe/addOns/getAddOnViewUrl.ts", "../../src/document/components/chrome/siteSettings/Plans/Stripe/addOns/useAddOnContextMenu.ts", "../../src/document/components/chrome/siteSettings/Usage/MonthSelector.tsx", "../../src/document/components/chrome/siteSettings/Usage/UsageFilterLabels.tsx", "../../src/document/components/chrome/analytics/components/AnalyticsSelectedFilter.styles.ts", "../../src/document/components/chrome/analytics/components/AnalyticsSelectedFilter.tsx", "../../src/document/components/chrome/analytics/tabs/AnalyticsOverview.styles.ts", "../../src/document/components/chrome/siteSettings/Usage/Usage.styles.ts", "../../src/document/components/chrome/siteSettings/Usage/AgentsUsage/components/AgentsUsageContent.tsx", "../../src/document/components/chrome/siteSettings/Usage/utils/formatters.ts", "../../src/app/ai/features.ts", "../../src/document/components/chrome/siteSettings/Usage/AgentsUsage/components/AgentsBreakdownTable.tsx", "../../src/document/components/chrome/siteSettings/Usage/UsageMetric.styles.ts", "../../src/document/components/chrome/siteSettings/Usage/UsageMetric.tsx", "../../src/document/components/chrome/siteSettings/Usage/AgentsUsage/components/AgentsUsageUpgradeBanner.tsx", "../../src/document/components/chrome/siteSettings/Usage/AgentsUsage/components/AgentsUsageSummaryRow.tsx", "../../src/document/components/chrome/siteSettings/Usage/AgentsUsage/useAgentsUsageData.ts", "../../src/document/components/chrome/siteSettings/Usage/AgentsUsage/components/AgentsUsageLimitedContent.tsx"],
  "sourcesContent": ["// NOTE: Uses the Vantara script that is included in the <head>!\n\nimport { stableExperiments } from \"@framerjs/app-config\"\nimport { type WindowWithCurrentUser, isOrganizationSpace } from \"@framerjs/app-shared\"\nimport { experiments } from \"app/experiments.ts\"\nimport { getEngine } from \"document/getEngine.ts\"\nimport { getFramerRelease } from \"environment/getFramerRelease.ts\"\nimport { objectKeys } from \"library/utils/objectKeys.ts\"\nimport type { DependencyList } from \"react\"\nimport { useCallback, useEffect } from \"react\"\nimport { initialData } from \"../dataLoadingHelpers.ts\"\nimport { getVantaraClient } from \"./getVantaraClient.ts\"\n\n// Extract the type to avoid exporting it\ntype VantaraEventAttributes = Parameters<ReturnType<typeof getVantaraClient>[\"trackEvent\"]>[1]\n\nexport function initVantara() {\n\tif (!experiments.isOn(\"vantara\")) return\n\n\tconst release = getFramerRelease(window)\n\tconst experimentsMetadata = Object.fromEntries(\n\t\tobjectKeys(stableExperiments)\n\t\t\t.filter(experiment => !experiments.is(experiment, \"off\"))\n\t\t\t.map(experiment => [experiment, experiments.get(experiment)]),\n\t)\n\n\tgetVantaraClient().init(\n\t\t\"prd_01JWCD4VJ8J40PAZ02J2HDRE5A\",\n\t\t\"key_dA3oihTxWJS+ddTI/mglkgtQ+BZjjV9b4ZcCo5mASQidbVT3N5GT9IfzwwG1kE9vvYnWKnA7UA1niIk/Uf/yYg==\",\n\t\t{\n\t\t\tenvironment: process.env.BUILD_TYPE,\n\t\t\tversion: process.env.BUILD_ID,\n\t\t\tmetadata: {\n\t\t\t\tchannel: release?.channel || \"unknown\",\n\t\t\t\toverride: release?.override || \"unknown\",\n\t\t\t\texperiments: experimentsMetadata,\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t// Disabled for now, see https://framer-team.slack.com/archives/C08U2NH8ANS/p1762461666086749?thread_ts=1762432097.504529&cid=C08U2NH8ANS\n\t\t\t/*\n            shouldRecordCanvas: true,\n            // This has tiny performance impact, see\n            // https://framer-team.slack.com/archives/C08U2NH8ANS/p1759299307793809?thread_ts=1758124593.996749&cid=C08U2NH8ANS\n            shouldRecordCrossOriginIframes: true,\n            */\n\t\t},\n\t)\n\n\tvoid setVantaraUser()\n}\n\nfunction trackEvent(eventName: string, attributes?: VantaraEventAttributes) {\n\tif (!experiments.isOn(\"vantara\")) return\n\tgetVantaraClient().trackEvent(eventName, attributes)\n}\n\n/** Returns a stable callback for tracking Vantara events. */\nexport function useTrackVantaraEventCallback() {\n\treturn useCallback((eventName: string, attributes?: VantaraEventAttributes) => {\n\t\ttrackEvent(eventName, attributes)\n\t}, [])\n}\n\n/** Tracks a Vantara event on mount or when dependencies change. Skips tracking during UI remounts. */\nexport function useTrackVantaraEventEffect(\n\teventName: string,\n\tattributes?: VantaraEventAttributes,\n\tdependencies: DependencyList = [],\n) {\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: eventName is constant, attributes are derived from dependencies\n\tuseEffect(() => {\n\t\tif (getEngine()?.isRemountingUI()) return\n\t\ttrackEvent(eventName, attributes)\n\t}, dependencies)\n}\n\nasync function setVantaraUser() {\n\tconst user = (window as WindowWithCurrentUser).framerUser\n\tif (!user) return\n\n\tconst { id, email } = user\n\n\t// If there is no project, this will return immediately\n\tconst project = await initialData.project.catch(() => undefined)\n\tconst teamId = project?.space.id || user.defaultSpaceId\n\n\tconst teamInfo = user.spaces.find(space => space.id === teamId)\n\tconst teamLicenseType = teamInfo && isOrganizationSpace(teamInfo) ? teamInfo.license.type : undefined\n\tconst joinedTeamAt = teamInfo && isOrganizationSpace(teamInfo) ? teamInfo.joinedAt : undefined\n\n\t// Use earliest joined team as a proxy for account creation\n\tlet joinedAt: string | undefined\n\tconst organizationSpaces = user.spaces.filter(isOrganizationSpace)\n\tconst now = new Date()\n\tif (organizationSpaces.length > 0) {\n\t\tconst timestamps = organizationSpaces\n\t\t\t.filter(space => space.joinedAt)\n\t\t\t.map(space => safeParseDate(space.joinedAt, now).getTime())\n\t\tconst earliestTimestamp = Math.min(...timestamps)\n\t\tjoinedAt = safeParseDate(earliestTimestamp, now).toISOString()\n\t}\n\n\tconst projectLicenseType = project?.license.type\n\n\tgetVantaraClient().update({\n\t\tuser: {\n\t\t\tuserId: id,\n\t\t\temail: `${id}@framer.user`, // Required field, but we don\u2019t want to leak PII\n\t\t\tmetadata: {\n\t\t\t\tdomain: email.substring(email.indexOf(\"@\") + 1),\n\t\t\t\tjoinedAt,\n\t\t\t},\n\t\t},\n\t\tsession: {\n\t\t\tmetadata: {\n\t\t\t\tteamId,\n\t\t\t\tteamLicenseType,\n\t\t\t\tjoinedTeamAt,\n\t\t\t\tprojectLicenseType,\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunction safeParseDate(date: string | number | undefined, fallback: Date) {\n\tif (date === undefined) return fallback\n\n\ttry {\n\t\tconst parsedDate = new Date(date)\n\t\tif (Number.isNaN(parsedDate.getTime())) return fallback\n\t\treturn parsedDate\n\t} catch {\n\t\treturn fallback\n\t}\n}\n", "import { triggerEvent } from \"../listeners\";\nfunction createUiImpressionEvent(payload) {\n  console.warn(\"[DEPRECATED] Use triggerUiImpressionEvent instead of createUiImpressionEvent.\");\n  return {\n    ...payload,\n    event: \"ui_impression\"\n  };\n}\nconst meta = {\n  track: true\n};\nfunction triggerUiImpressionEvent(payload) {\n  const event = {\n    ...payload,\n    event: \"ui_impression\"\n  };\n  triggerEvent(event, meta);\n}\nexport {\n  createUiImpressionEvent,\n  triggerUiImpressionEvent\n};\n", "import { triggerEvent } from \"../listeners\";\nfunction createUiInteractionEvent(payload) {\n  console.warn(\"[DEPRECATED] Use triggerUiInteractionEvent instead of createUiInteractionEvent.\");\n  return {\n    ...payload,\n    event: \"ui_interaction\"\n  };\n}\nconst meta = {\n  track: true\n};\nfunction triggerUiInteractionEvent(payload) {\n  const event = {\n    ...payload,\n    event: \"ui_interaction\"\n  };\n  triggerEvent(event, meta);\n}\nexport {\n  createUiInteractionEvent,\n  triggerUiInteractionEvent\n};\n", "interface Vantara {\n\tinit: (id: string, key: string, options: Record<string, unknown>, config: Record<string, boolean>) => void\n\tupdate: (options: Record<string, unknown>) => void\n\tinitCrossOriginIframe: () => void\n\ttrackEvent: (eventName: string, attributes?: Record<string, string | number | boolean | null>) => void\n}\n\n/** Lazily initializes and returns the Vantara client. Queues calls until the real script loads. */\nexport function getVantaraClient(): Vantara {\n\tconst vantaraWindow = window as Window & { _vntQueue?: [string, unknown[]][]; VNT?: Vantara }\n\tif (vantaraWindow.VNT) return vantaraWindow.VNT\n\n\tconst queue: [string, unknown[]][] = (vantaraWindow._vntQueue = vantaraWindow._vntQueue || [])\n\tvantaraWindow.VNT = {\n\t\tinit: (...args) => queue.push([\"init\", args]),\n\t\tupdate: (...args) => queue.push([\"update\", args]),\n\t\tinitCrossOriginIframe: (...args) => queue.push([\"initCrossOriginIframe\", args]),\n\t\ttrackEvent: (...args) => queue.push([\"trackEvent\", args]),\n\t}\n\treturn vantaraWindow.VNT\n}\n", "import { Stack, Translatable as T } from \"@framerjs/fresco\"\nimport { getLogger } from \"@framerjs/shared\"\nimport type { ErrorInfo } from \"react\"\nimport React from \"react\"\nimport { isConnectionError } from \"web/lib/isConnectionError.ts\"\nimport { isLegacyProjectError } from \"web/lib/legacyProjectError.ts\"\nimport type { ErrorArea } from \"../lib/tracker.ts\"\nimport { Pages, record } from \"../lib/tracker.ts\"\nimport * as classes from \"./ErrorBoundary.styles.ts\"\n\n/**\n * A simple wrapper component that will catch any uncaught errors and report to sentry.\n * This currently cannot be done with hooks, so this should be the only class component here.\n */\ninterface State {\n\thasError: boolean\n}\n\ninterface Props {\n\ttitle: string\n\tdescription: React.ReactNode\n\tchildren: React.ReactNode\n\tlocation: ErrorArea\n}\n\nconst isOldBrowserError = (error: Error) => {\n\t// Only checks for Promise.allSettled for now, but this can be extended for\n\t// more errors if specific ones pop up.\n\treturn error.name === \"TypeError\" && error.message.startsWith(\"Promise.allSettled is not a function\")\n}\n\nexport class ErrorBoundary extends React.Component<Props, State> {\n\toverride state = { hasError: false, oldBrowser: false, connectionError: false, legacyProjectError: false }\n\n\tstatic getDerivedStateFromError(error: Error) {\n\t\treturn {\n\t\t\thasError: true,\n\t\t\toldBrowser: isOldBrowserError(error),\n\t\t\tconnectionError: isConnectionError(error),\n\t\t\tlegacyProjectError: isLegacyProjectError(error),\n\t\t}\n\t}\n\n\toverride componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n\t\tif (isOldBrowserError(error)) {\n\t\t\trecord(\"ui_impression\", { page: Pages.errorBoundaryOldBrowser })\n\t\t\treturn\n\t\t}\n\t\tif (isConnectionError(error)) {\n\t\t\trecord(\"connection_error\", { message: error.message, area: this.props.location })\n\t\t\treturn\n\t\t}\n\t\tgetLogger(`${this.props.location}:fatal`).reportError(error, { ...errorInfo })\n\t\trecord(\"application_error\", { message: error.message, area: this.props.location })\n\t}\n\n\toverride render() {\n\t\tconst { hasError, oldBrowser, connectionError, legacyProjectError } = this.state\n\t\tif (!hasError) {\n\t\t\treturn this.props.children\n\t\t}\n\n\t\t// else\n\t\treturn (\n\t\t\t<Stack className={classes.container} direction=\"column\" justifyContent=\"center\" alignItems=\"center\" gap={0}>\n\t\t\t\t<svg className={classes.logo} xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 14 19\" width=\"13\" height=\"18\">\n\t\t\t\t\t<path d=\"M 0 0 L 14 0 L 14 6.6667 L 7 6.6667 Z M 0 6.6667 L 7 6.6667 L 14 13.3333 L 0 13.3333 Z M 7 13.3333 L 7 19 L 0 13.3333 Z\" />\n\t\t\t\t</svg>\n\t\t\t\t<h1 className={classes.title}>\n\t\t\t\t\t<T>{this.props.title}</T>\n\t\t\t\t</h1>\n\t\t\t\t<p className={classes.description}>\n\t\t\t\t\t{oldBrowser ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<T>Your browser version is not supported.</T>\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t<T>Please upgrade to the latest version of Chrome, Edge, Firefox or Safari.</T>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : legacyProjectError ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<T>Opening legacy projects is no longer supported.</T>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<span>{connectionError ? <T>Network error, connection failed.</T> : this.props.description} </span>\n\t\t\t\t\t\t\t<T>If the error persists, please </T>\n\t\t\t\t\t\t\t<a className={classes.link} href=\"https://www.framer.com/contact/\">\n\t\t\t\t\t\t\t\t<T>contact support.</T>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</p>\n\t\t\t</Stack>\n\t\t)\n\t}\n}\n", "const legacyProjectErrorMessage = \"Unsupported legacy project\"\n\nexport const legacyProjectError = new Error(legacyProjectErrorMessage)\n\nexport const isLegacyProjectError = (error: Error) => error.message === legacyProjectErrorMessage\n", "import \"ErrorBoundary.styles_162a1px.wyw.css\"; export const container = \"container_cyuabmk\";\nexport const title = \"title_t10byact\";\nexport const description = \"description_d17vwxvd\";\nexport const link = \"link_lg38tq9\";\nexport const logo = \"logo_l1lfu4fq\";", "export enum Tab {\n\tDetails = \"details\",\n\tInvite = \"invite\",\n\t/** @deprecated\n\t * We've used this string for deep linking into the team members tab to push users to invite other users.\n\t * Keeping it around to support those email links (see useNavigation.ts for more implementation details.)\n\t */\n\tDeprecatedMembers = \"members\",\n\tMembers = \"membersList\",\n\tFonts = \"fonts\",\n\tPlugins = \"plugins\",\n\tPermissions = \"settings\",\n\tPlans = \"plans\",\n\tEnterpriseInvoices = \"enterpriseInvoices\",\n\tUsage = \"usage\",\n}\n\nexport function isTeamSettingsTab(value: string): value is Tab {\n\treturn Object.values(Tab).includes(value as Tab)\n}\n", "export function getPricingURL(): string {\n\treturn \"https://www.framer.com/pricing/\"\n}\n\nexport function getBusinessPricingURL(): string {\n\treturn \"https://www.framer.com/pricing/business/\"\n}\n", "import \"DropdownMenuButton.styles_1ox2cbp.wyw.css\"; export const button = \"button_b1wyrlh9\";\nexport const chevron = \"chevron_c173nm8j\";\nexport const loading = \"loading_l152aam\";", "import { Button, IconInputDropdown, Spinner, Translatable as T, truncateWithEllipsis } from \"@framerjs/fresco\"\nimport { dimensions } from \"@framerjs/fresco/tokens\"\nimport { cx } from \"@linaria/core\"\nimport type { MenuItemOptions } from \"app/menu.ts\"\nimport { useContextMenu } from \"web/lib/useContextMenu.ts\"\nimport * as styles from \"./DropdownMenuButton.styles.ts\"\n\ninterface Props {\n\tclassName?: string\n\titems: MenuItemOptions[]\n\tlabel: string\n\tloading?: boolean\n\talign?: \"left\" | \"right\"\n\tenabled?: boolean\n\tonMenuOpen?: () => void\n\tonMenuClose?: () => void\n\ttabIndex?: number\n}\n\nexport function DropdownMenuButton({\n\tclassName,\n\titems,\n\tlabel,\n\tloading,\n\talign = \"right\",\n\tenabled = true,\n\tonMenuOpen,\n\tonMenuClose,\n\ttabIndex,\n}: Props) {\n\tconst contextMenuStore = useContextMenu()\n\n\tconst onClick = (event: React.MouseEvent) => {\n\t\tconst elementBounds = event.currentTarget.getBoundingClientRect()\n\t\tcontextMenuStore.show(items, {\n\t\t\tlocation: {\n\t\t\t\tx:\n\t\t\t\t\talign === \"right\"\n\t\t\t\t\t\t? elementBounds.right - dimensions.values.contextMenuOffsetX\n\t\t\t\t\t\t: elementBounds.left + dimensions.values.contextMenuOffsetX,\n\t\t\t\ty: elementBounds.bottom,\n\t\t\t},\n\t\t\tplacement: align === \"right\" ? \"bottom-end\" : \"bottom-start\",\n\t\t\tonDone: () => {\n\t\t\t\tonMenuClose?.()\n\t\t\t},\n\t\t\tonCancel: () => {\n\t\t\t\tonMenuClose?.()\n\t\t\t},\n\t\t})\n\t\tonMenuOpen?.()\n\t}\n\treturn (\n\t\t<Button\n\t\t\tclassName={cx(styles.button, className)}\n\t\t\tonClick={onClick}\n\t\t\tenabled={enabled && !loading}\n\t\t\ttabIndex={tabIndex}\n\t\t>\n\t\t\t<T className={truncateWithEllipsis}>{label}</T>\n\t\t\t<span className={cx(styles.chevron, loading && styles.loading)}>\n\t\t\t\t{loading ? <Spinner /> : <IconInputDropdown />}\n\t\t\t</span>\n\t\t</Button>\n\t)\n}\n", "import { useEffect } from \"react\"\nimport { useFocusTracking, useFocusTrackingOnFrame } from \"./useFocusTracking.ts\"\n\nconst callbacks = new Set<(visibleAndFocused: boolean) => void>()\n\nlet lastFocus: boolean | undefined\nlet lastVisibleAndFocused: boolean | undefined\nfunction updateValue() {\n\tconst visibleAndFocused = lastFocus !== false && !document.hidden\n\tif (visibleAndFocused === lastVisibleAndFocused) return\n\tlastVisibleAndFocused = visibleAndFocused\n\tcallbacks.forEach(cb => cb(visibleAndFocused))\n}\n\nexport function useVisibleAndFocused(callback: (visibleAndFocused: boolean) => void) {\n\t// Track current window by default.\n\tuseFocusTrackingOnFrame(window)\n\t// Update when any frame gains focus or all frames lose focus.\n\tuseFocusTracking(focus => {\n\t\tlastFocus = focus\n\t\tupdateValue()\n\t})\n\t// Update when document visibility changes.\n\tuseEffect(() => {\n\t\tdocument.addEventListener(\"visibilitychange\", updateValue)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"visibilitychange\", updateValue)\n\t\t}\n\t}, [])\n\t// Track callbacks to be called on changes.\n\tuseEffect(() => {\n\t\tcallbacks.add(callback)\n\t\treturn () => {\n\t\t\tcallbacks.delete(callback)\n\t\t}\n\t}, [callback])\n}\n", "import { useEffect, useRef } from \"react\"\n\ninterface TrackedFrameInfo {\n\thasFocus?: boolean\n\trefCount: number\n}\n\nconst callbacks = new Set<(focus: boolean) => void>()\nconst trackedFrames = new Map<Window | HTMLIFrameElement, TrackedFrameInfo>()\n\n/** Registers a callback to be called whenever any frame receives focus or all frames lose focus. */\nexport function useFocusTracking(callback: (focus: boolean) => void) {\n\tconst callbackRef = useRef(callback)\n\tuseEffect(() => {\n\t\tconst callback = callbackRef.current\n\t\tcallbacks.add(callback)\n\t\treturn () => {\n\t\t\tcallbacks.delete(callback)\n\t\t}\n\t}, [])\n}\n\n/** This hook starts tracking the specified frame for focus/blur events. */\nexport function useFocusTrackingOnFrame(frame: Window | HTMLIFrameElement | null) {\n\tuseEffect(() => {\n\t\tif (!frame) return\n\t\tlet info = trackedFrames.get(frame)\n\t\tif (!info) {\n\t\t\tinfo = { refCount: 0 }\n\t\t\ttrackedFrames.set(frame, info)\n\t\t\tframe.addEventListener(\"blur\", eventHandler)\n\t\t\tframe.addEventListener(\"focus\", eventHandler)\n\t\t}\n\t\tinfo.refCount++\n\t\treturn () => {\n\t\t\tconst info = trackedFrames.get(frame)\n\n\t\t\tif (!info) return\n\t\t\tinfo.refCount--\n\t\t\tif (info.refCount > 0) return\n\n\t\t\t// No more active hooks for this frame.\n\t\t\ttrackedFrames.delete(frame)\n\n\t\t\tif (typeof frame.removeEventListener === \"function\") {\n\t\t\t\tframe.removeEventListener(\"blur\", eventHandler)\n\t\t\t\tframe.removeEventListener(\"focus\", eventHandler)\n\t\t\t}\n\t\t}\n\t}, [frame])\n}\n\nlet lastKnownFocus: boolean | undefined\nfunction checkFocus() {\n\t// Check if any frame has focus.\n\tlet anyHasFocus = false\n\tfor (const info of trackedFrames.values()) {\n\t\tif (!info.hasFocus) continue\n\t\tanyHasFocus = true\n\t\tbreak\n\t}\n\t// Call the callbacks, if focus state changed.\n\tif (anyHasFocus === lastKnownFocus) return\n\tlastKnownFocus = anyHasFocus\n\tcallbacks.forEach(cb => cb(anyHasFocus))\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: @TODO add explanation\nlet timeout: any\nfunction eventHandler(this: Window, event: Event) {\n\tconst info = trackedFrames.get(this)\n\tif (!info) return\n\tinfo.hasFocus = event.type === \"focus\"\n\t// Schedule a check on the focus state of all frames (timeout so all events can propagate).\n\tclearTimeout(timeout)\n\ttimeout = setTimeout(checkFocus, 0)\n}\n", "import { type ProjectBase, type User, openNewTab } from \"@framerjs/app-shared\"\nimport { getLogger, unhandledError } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport { copyText } from \"utils/clipboard/index.ts\"\nimport { remixLinkArticleURL } from \"utils/staticURLs.ts\"\nimport { apiFetcher } from \"./apiFetcher.ts\"\nimport { toast } from \"./toaster.ts\"\n\nconst log = getLogger(\"copyRemixLink\")\n\nexport async function copyRemixLink({\n\tproject,\n\tcanCopyRemixLink,\n\tuser,\n\tprojectId,\n}: {\n\tproject?: ProjectBase\n\tcanCopyRemixLink: boolean\n\tuser: User\n\tprojectId: string\n}) {\n\tconst remixLink = project?.remixId\n\t\t? `${window.location.origin}/remix/${project.remixId}`\n\t\t: `${window.location.origin}/projects/new?duplicate=${projectId}`\n\tlet url = remixLink\n\tif (user.isPartner && project?.owner.id === user.id) {\n\t\turl = await getPartnerLink(project, remixLink)\n\t}\n\n\tif (canCopyRemixLink) {\n\t\tcopyText(url).catch(unhandledError)\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tkey: \"copy-remix-link\",\n\t\t\tvariant: \"success\",\n\t\t\ticon: \"success\",\n\t\t\tduration: 5000,\n\t\t\tprimaryText: \"Copied remix link\",\n\t\t\tsecondaryText: \"to clipboard.\",\n\t\t\taction: {\n\t\t\t\ttitle: \"Open\",\n\t\t\t\t// Open without referrer so the interstitial shows\n\t\t\t\tonClick: () => openNewTab(url, { referrer: false }),\n\t\t\t},\n\t\t})\n\t} else {\n\t\ttoast({\n\t\t\ttype: \"add\",\n\t\t\tkey: \"copy-remix-link\",\n\t\t\tvariant: \"error\",\n\t\t\ticon: \"error\",\n\t\t\tduration: 5000,\n\t\t\tprimaryText: \"Enable public access\",\n\t\t\tsecondaryText: \"to use remix links.\",\n\t\t\taction: {\n\t\t\t\ttitle: Dictionary.LearnMore,\n\t\t\t\tonClick: () => openNewTab(remixLinkArticleURL),\n\t\t\t},\n\t\t})\n\t}\n}\n\nexport function copyAIKitRemixLink(kitModuleId: string) {\n\tconst url = `${window.location.origin}/projects/new?kit=${kitModuleId}`\n\tcopyText(url)\n\t\t.then(() =>\n\t\t\ttoast({\n\t\t\t\ttype: \"add\",\n\t\t\t\tkey: \"copy-ai-kit-remix-link\",\n\t\t\t\tvariant: \"success\",\n\t\t\t\ticon: \"success\",\n\t\t\t\tduration: 5000,\n\t\t\t\tprimaryText: \"Copied Kit remix link\",\n\t\t\t\tsecondaryText: \"to clipboard.\",\n\t\t\t\taction: {\n\t\t\t\t\ttitle: \"Open\",\n\t\t\t\t\t// Open without referrer so the interstitial shows\n\t\t\t\t\tonClick: () => openNewTab(url, { referrer: false }),\n\t\t\t\t},\n\t\t\t}),\n\t\t)\n\t\t.catch(unhandledError)\n}\n\nconst getPartnerLink = async (project: ProjectBase, remixLink: string) => {\n\tif (project.partnerLink) {\n\t\treturn project.partnerLink\n\t}\n\n\ttry {\n\t\tconst { link } = await apiFetcher.post(`/web/projects/${project.id}/partner-link`, {\n\t\t\tlink: remixLink,\n\t\t})\n\n\t\treturn link\n\t} catch (error) {\n\t\tlog.error(\"Failed to create partner link\", error)\n\t}\n\treturn remixLink\n}\n", "// Convert string to the sum of each character's charCode, used for determining an avatar color\nexport function stringToCharCodeSum(str: string): number {\n\treturn str.split(\"\").reduce((acc, val) => acc + val.charCodeAt(0), 0)\n}\n", "import { ApiError, HTTP_ERROR_CODES } from \"@framerjs/app-shared\"\nimport type { ProjectLicensePeriod, TeamAddOnLicenseType, TeamAddOnPlan } from \"@framerjs/app-shared\"\nimport { delay, getLogger } from \"@framerjs/shared\"\nimport { isAbortError } from \"web/lib/Fetcher.ts\"\nimport { apiFetcher } from \"web/lib/apiFetcher.ts\"\nimport type { CurrentSiteSubscription } from \"./subscriptions.ts\"\nimport { SubscriptionStatus } from \"./subscriptions.ts\"\n\n/**\n * \uD83D\uDD34 This file is also used by Dashboard components. Please do not import the engine here.\n */\n\nconst log = getLogger(\"teamSubscription\")\n\nexport interface CurrentTeamSubscription extends CurrentSiteSubscription {\n\tquantity: number\n}\n\nexport interface TeamCurrentAddOn {\n\tplan: TeamAddOnPlan\n\tlicenseType: TeamAddOnLicenseType\n\tquantity: number\n\tperiod: ProjectLicensePeriod\n}\n\nexport interface TeamSubscriptionData {\n\tcurrentSubscription: CurrentTeamSubscription | null\n\t// If there is at least one past due subscription in the team, we need to show the reactivate past due plan container\n\t// and block any plan changes, even on a free projects in the workspace.\n\tteamHasPastDueSubscriptions: boolean\n\tcurrentAddOns: TeamCurrentAddOn[]\n}\n\nexport enum GetTeamSubscriptionStatus {\n\tSuccess,\n\tAborted,\n\tUnauthorized,\n\tUnhandledError,\n}\n\ntype GetTeamSubscriptionResponse =\n\t| ({ status: GetTeamSubscriptionStatus.Success } & TeamSubscriptionData)\n\t| { status: GetTeamSubscriptionStatus.Aborted }\n\t| { status: GetTeamSubscriptionStatus.Unauthorized }\n\t| { status: GetTeamSubscriptionStatus.UnhandledError }\n\ninterface BillingV3TeamSubscription {\n\tperiod: ProjectLicensePeriod\n\tcurrency: string\n\tnextBillDate: string\n\tstatus: SubscriptionStatus\n\tquantity: number\n}\n\ninterface BillingV3TeamSubscriptionResponse {\n\tsubscription: BillingV3TeamSubscription | null\n\taddOns: TeamCurrentAddOn[]\n}\n\nexport async function getTeamSubscription(teamId: string, signal?: AbortSignal): Promise<GetTeamSubscriptionResponse> {\n\ttry {\n\t\tconst res = await apiFetcher.get(`/web/teams/${teamId}/subscription`, undefined, signal)\n\t\tif (res.currentSubscription) {\n\t\t\tres.currentSubscription.nextBillDate = new Date(res.currentSubscription.nextBillDate)\n\t\t}\n\t\treturn {\n\t\t\tstatus: GetTeamSubscriptionStatus.Success,\n\t\t\tcurrentSubscription: res.currentSubscription ?? null,\n\t\t\tteamHasPastDueSubscriptions: res.teamHasPastDueSubscriptions ?? false,\n\t\t\tcurrentAddOns: res.currentAddOns ?? [],\n\t\t}\n\t} catch (error) {\n\t\tif (isAbortError(error)) return { status: GetTeamSubscriptionStatus.Aborted }\n\t\tif (error instanceof ApiError && error.status === HTTP_ERROR_CODES.Forbidden) {\n\t\t\treturn { status: GetTeamSubscriptionStatus.Unauthorized }\n\t\t}\n\t\tlog.reportError(error)\n\t\treturn { status: GetTeamSubscriptionStatus.UnhandledError }\n\t}\n}\n\nasync function getBillingV3TeamSubscription(teamId: string): Promise<GetTeamSubscriptionResponse> {\n\ttry {\n\t\tconst res: BillingV3TeamSubscriptionResponse = await apiFetcher.get(`/web/v3/teams/${teamId}/subscription`)\n\t\treturn {\n\t\t\tstatus: GetTeamSubscriptionStatus.Success,\n\t\t\tcurrentSubscription: res.subscription\n\t\t\t\t? { ...res.subscription, nextBillDate: new Date(res.subscription.nextBillDate) }\n\t\t\t\t: null,\n\t\t\tteamHasPastDueSubscriptions: res.subscription?.status === SubscriptionStatus.PastDue,\n\t\t\tcurrentAddOns: res.addOns ?? [],\n\t\t}\n\t} catch (error) {\n\t\tif (error instanceof ApiError && error.status === HTTP_ERROR_CODES.Forbidden) {\n\t\t\treturn { status: GetTeamSubscriptionStatus.Unauthorized }\n\t\t}\n\t\tlog.reportError(error)\n\t\treturn { status: GetTeamSubscriptionStatus.UnhandledError }\n\t}\n}\n\nexport interface PollTeamSubscriptionProps {\n\tany?: true\n\tperiod?: ProjectLicensePeriod\n}\n\nconst attempts = 10\nconst interval = 3000\n\nconst teamStopCondition = (newSubscription: PollTeamSubscriptionProps, latest: CurrentTeamSubscription | null) => {\n\tconst matchesAny = latest !== null\n\tconst matchesPeriod = !newSubscription.period || newSubscription.period === latest?.period\n\treturn matchesAny && matchesPeriod\n}\n\ntype PollTeamSubscriptionStopCondition = (updatedSubscription: TeamSubscriptionData) => boolean\n\nfunction shouldStopPolling(\n\tnewSubscriptionOrStopCondition: PollTeamSubscriptionProps | PollTeamSubscriptionStopCondition,\n\tres: TeamSubscriptionData,\n): boolean {\n\tif (typeof newSubscriptionOrStopCondition === \"function\") {\n\t\treturn newSubscriptionOrStopCondition(res)\n\t}\n\treturn teamStopCondition(newSubscriptionOrStopCondition, res.currentSubscription)\n}\n\nexport async function pollTeamSubscription(\n\tteamId: string,\n\tonPollComplete: (updatedSubscription: TeamSubscriptionData) => void | Promise<void>,\n\tnewSubscriptionOrStopCondition: PollTeamSubscriptionProps | PollTeamSubscriptionStopCondition,\n\tisBillingV3 = false,\n): Promise<void> {\n\tfor (let i = 0; i < attempts; ++i) {\n\t\tconst res = isBillingV3 ? await getBillingV3TeamSubscription(teamId) : await getTeamSubscription(teamId)\n\t\tif (res.status !== GetTeamSubscriptionStatus.Success) {\n\t\t\tthrow new Error(\"pollTeamSubscription failed to fetch the team subscription\")\n\t\t}\n\t\tif (shouldStopPolling(newSubscriptionOrStopCondition, res)) {\n\t\t\tawait onPollComplete(res)\n\t\t\treturn\n\t\t}\n\t\tawait delay(interval)\n\t}\n\tthrow new Error(\"pollTeamSubscription exceeded the number of attempts\")\n}\n", "import { AddOnLicenseType, dashboardPath } from \"@framerjs/app-shared\"\nimport { assertNever } from \"@framerjs/shared\"\n\nexport function getAddOnViewUrl(addOnLicenseType: AddOnLicenseType, projectId: string): string {\n\tswitch (addOnLicenseType) {\n\t\tcase AddOnLicenseType.Locale:\n\t\t\treturn `${dashboardPath}${projectId}?view=localizations`\n\t\tcase AddOnLicenseType.AdvancedAnalytics:\n\t\t\treturn `${dashboardPath}${projectId}?view=analytics:overview`\n\t\tcase AddOnLicenseType.CustomProxySetup:\n\t\t\treturn `${dashboardPath}${projectId}?view=settings:domains`\n\t\tcase AddOnLicenseType.Bandwidth:\n\t\t\treturn `${dashboardPath}${projectId}?view=usage`\n\t\tcase AddOnLicenseType.Pages:\n\t\t\t// There is not a specific page to view this, so opening the project's main ui is the best option\n\t\t\treturn `${dashboardPath}${projectId}`\n\t\tcase AddOnLicenseType.CmsCollections:\n\t\tcase AddOnLicenseType.CmsItems:\n\t\t\treturn `${dashboardPath}${projectId}?node=contentManagement`\n\t\tdefault:\n\t\t\tassertNever(addOnLicenseType)\n\t}\n}\n", "import { ResolvablePromise } from \"@framerjs/shared\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport type { MenuItemOptions } from \"app/menu.ts\"\nimport { useCallback } from \"react\"\nimport { useContextMenu } from \"web/lib/useContextMenu.ts\"\n\nexport enum AddOnActions {\n\tView = \"viewAddOn\",\n\tCancelAddOn = \"cancelAddOn\",\n}\n\ninterface UseAddOnContextMenuOptions {\n\thideCancelOption: boolean\n}\n\nexport const useAddOnContextMenu = ({ hideCancelOption }: UseAddOnContextMenuOptions) => {\n\tconst contextMenu = useContextMenu()\n\n\treturn useCallback(\n\t\tasync function showContextMenu({ location }: { location: { x: number; y: number } }): Promise<AddOnActions | null> {\n\t\t\tconst promise = new ResolvablePromise<AddOnActions | null>()\n\n\t\t\tconst items: MenuItemOptions[] = [\n\t\t\t\t{\n\t\t\t\t\tlabel: Dictionary.View,\n\t\t\t\t\tclick: () => promise.resolve(AddOnActions.View),\n\t\t\t\t},\n\t\t\t]\n\n\t\t\tif (!hideCancelOption) {\n\t\t\t\titems.push(\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"separator\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: \"Cancel Add-On\",\n\t\t\t\t\t\tclick: () => promise.resolve(AddOnActions.CancelAddOn),\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tcontextMenu.show(items, {\n\t\t\t\tlocation,\n\t\t\t\tonDone: () => promise.resolve(null),\n\t\t\t})\n\n\t\t\treturn promise\n\t\t},\n\t\t[contextMenu, hideCancelOption],\n\t)\n}\n", "import type { MenuItemOptions } from \"app/menu.ts\"\nimport React from \"react\"\nimport { DropdownMenuButton } from \"../../analytics/components/DropdownMenuButton.tsx\"\n\ninterface Props {\n\tmonth: number\n\tyear: number\n\tonMonthAndYearChange: (month: number, year: number) => void\n}\n\nconst getMonthName = (monthIndex: number): string => {\n\tif (monthIndex < 0 || monthIndex > 11) return \"\"\n\n\treturn new Date(2000, monthIndex, 1).toLocaleString(undefined, { month: \"long\" })\n}\n\n/** Start from October (9) */\nconst dataPresentSince = {\n\tmonth: 9,\n\tyear: 2025,\n}\n\nconst SHOW_AT_MOST_MONTHS = 6\n\nexport function MonthSelector({ month, year, onMonthAndYearChange }: Props) {\n\tconst items = React.useMemo(() => {\n\t\tconst now = new Date()\n\t\tconst currentYear = now.getFullYear()\n\t\tconst currentMonth = now.getMonth()\n\n\t\tconst menuItems: MenuItemOptions[] = []\n\n\t\tfor (let i = 0; i < SHOW_AT_MOST_MONTHS; i++) {\n\t\t\tconst targetMonth = currentMonth - i\n\t\t\tconst targetYear = targetMonth < 0 ? currentYear - 1 : currentYear\n\t\t\tconst monthIndex = targetMonth < 0 ? targetMonth + 12 : targetMonth\n\n\t\t\tconst isBeforeRelease =\n\t\t\t\ttargetYear < dataPresentSince.year ||\n\t\t\t\t(targetYear === dataPresentSince.year && monthIndex < dataPresentSince.month)\n\t\t\tif (isBeforeRelease) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tmenuItems.push({\n\t\t\t\tlabel: `${getMonthName(monthIndex)} ${targetYear}`,\n\t\t\t\tclick: () => onMonthAndYearChange(monthIndex, targetYear),\n\t\t\t})\n\t\t}\n\n\t\treturn menuItems\n\t}, [onMonthAndYearChange])\n\n\treturn <DropdownMenuButton label={`${getMonthName(month)} ${year}`} items={items} />\n}\n", "import { ScrollWithGradient } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { assertNever } from \"library/utils/assert.ts\"\nimport { useCallback } from \"react\"\nimport { Pages, UIInteraction, record } from \"web/lib/tracker.ts\"\nimport { AnalyticsSelectedFilter } from \"../../analytics/components/AnalyticsSelectedFilter.tsx\"\nimport * as analyticsStyles from \"../../analytics/tabs/AnalyticsOverview.styles.ts\"\nimport * as styles from \"./Usage.styles.ts\"\nimport type { UsageFilterOption, UsageFilters } from \"./types.ts\"\n\nfunction getLabelForFilterType(key: UsageFilterOption) {\n\tswitch (key) {\n\t\tcase \"assetPath\":\n\t\t\treturn \"Asset\"\n\t\tcase \"feature\":\n\t\t\treturn \"Feature\"\n\t\tcase \"model\":\n\t\t\treturn \"Model\"\n\t\tcase \"projectId\":\n\t\t\treturn \"Project\"\n\t\tcase \"userId\":\n\t\t\treturn \"User\"\n\t\tdefault:\n\t\t\tassertNever(key)\n\t}\n}\n\ninterface UsageFilterLabelsProps {\n\tfilters: UsageFilters\n\tisFullWidth?: boolean\n\tremoveFilter: (key: UsageFilterOption) => void\n}\n\nexport function UsageFilterLabels({ filters, isFullWidth, removeFilter }: UsageFilterLabelsProps) {\n\tconst handleRemoveFilter = useCallback(\n\t\t(key: UsageFilterOption) => {\n\t\t\trecord(\"ui_interaction\", {\n\t\t\t\tpage: Pages.siteSettingsUsage,\n\t\t\t\tid: UIInteraction.removeFilter,\n\t\t\t})\n\n\t\t\tremoveFilter(key)\n\t\t},\n\t\t[removeFilter],\n\t)\n\n\treturn (\n\t\t<div className={analyticsStyles.scrollWrapper}>\n\t\t\t<ScrollWithGradient\n\t\t\t\tclassName={analyticsStyles.selectedFiltersWrapper}\n\t\t\t\torientation=\"horizontal\"\n\t\t\t\tdirection=\"both\"\n\t\t\t\tdragToScroll\n\t\t\t>\n\t\t\t\t<div className={cx(styles.usageFiltersWrapper, isFullWidth && \"is-full-width\")}>\n\t\t\t\t\t{Object.entries(filters).map(([key, value]) => (\n\t\t\t\t\t\t<AnalyticsSelectedFilter\n\t\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\t\tlabel={getLabelForFilterType(key as UsageFilterOption)}\n\t\t\t\t\t\t\tvalue={value.valueLabel}\n\t\t\t\t\t\t\tonRemove={() => handleRemoveFilter(key as UsageFilterOption)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</ScrollWithGradient>\n\t\t</div>\n\t)\n}\n", "import \"AnalyticsSelectedFilter.styles_1c2lxeh.wyw.css\"; export const selectedFilter = \"selectedFilter_s1xc06ze\";\nexport const selectedFilterLabel = \"selectedFilterLabel_sm1yyq2\";\nexport const selectedFilterValue = \"selectedFilterValue_s1oxx6cu\";\nexport const selectedFilterRemove = \"selectedFilterRemove_sxajut4\";", "import { IconClose, Stack } from \"@framerjs/fresco\"\nimport * as styles from \"./AnalyticsSelectedFilter.styles.ts\"\n\ninterface AnalyticsSelectedFilterProps {\n\tlabel: string\n\tvalue: string\n\tonRemove: () => void\n}\n\nexport function AnalyticsSelectedFilter({ label, value, onRemove }: AnalyticsSelectedFilterProps) {\n\treturn (\n\t\t<Stack direction=\"row\" alignItems=\"center\" gap={0} className={styles.selectedFilter} title={value}>\n\t\t\t<span className={styles.selectedFilterLabel}>{label}:</span>\n\t\t\t<span className={styles.selectedFilterValue}>{value}</span>\n\t\t\t<button type=\"button\" className={styles.selectedFilterRemove} onClick={onRemove}>\n\t\t\t\t<IconClose />\n\t\t\t</button>\n\t\t</Stack>\n\t)\n}\n", "import \"AnalyticsOverview.styles_lux80.wyw.css\"; export const container = \"container_c137s5n6\";\nexport const headerWrapper = \"headerWrapper_h18wespf\";\nexport const scrollWrapper = \"scrollWrapper_syfpled\";\nexport const selectedFiltersWrapper = \"selectedFiltersWrapper_sjkhdrf\";\nexport const dateRangeWrapper = \"dateRangeWrapper_dlw3yz5\";\nexport const summarySectionWrapper = \"summarySectionWrapper_s1570p0m\";\nexport const chartSectionWrapper = \"chartSectionWrapper_ce7m1h8\";\nexport const splitSectionWrapper = \"splitSectionWrapper_ssz2vq7\";\nexport const divider = \"divider_drxrnvg\";\nexport const sectionFilterButton = \"sectionFilterButton_s3n68af\";\nexport const defaultSourceIcon = \"defaultSourceIcon_d1h55tum\";\nexport const sourceIcon = \"sourceIcon_sblbadx\";\nexport const locationIcon = \"locationIcon_l14g1nqa\";", "import \"Usage.styles_6y3q6q.wyw.css\"; export const titleWrapper = \"titleWrapper_th11h7b\";\nexport const navigationWrapper = \"navigationWrapper_n1had0eg\";\nexport const descriptionWrapper = \"descriptionWrapper_d1otu1yl\";\nexport const description = \"description_d167gnlq\";\nexport const usageFiltersWrapper = \"usageFiltersWrapper_uy77vrg\";\nexport const statsSection = \"statsSection_s15ge5k2\";\nexport const errorMessage = \"errorMessage_e1qmtg76\";\nexport const statusMessage = \"statusMessage_s1rx54gs\";\nexport const permissionMessage = \"permissionMessage_px3pnw5\";\nexport const noDataMessageWrapper = \"noDataMessageWrapper_n1x6llml\";\nexport const noDataMessage = \"noDataMessage_n1pxu6d8\";\nexport const loadingState = \"loadingState_l1881tkv\";\nexport const loadingPlaceholder = \"loadingPlaceholder_l1tnqyz5\";\nexport const verticalDivider = \"verticalDivider_viwrsy8\";\nexport const analyticsTableAction = \"analyticsTableAction_a4g19xj\";\nexport const multiProjectDomain = \"multiProjectDomain_m1vuyotr\";", "import { Stack, Translatable as T } from \"@framerjs/fresco\"\nimport { noop } from \"@framerjs/shared/src/noop.ts\"\nimport React from \"react\"\nimport { ErrorBoundary } from \"web/components/ErrorBoundary.tsx\"\nimport { Separator } from \"web/components/Separator.tsx\"\nimport { ErrorArea } from \"web/lib/tracker.ts\"\nimport * as styles from \"../../Usage.styles.ts\"\nimport type { AgentsContentState, UsageFilterOption } from \"../../types.ts\"\nimport { formatCredits } from \"../../utils/formatters.ts\"\nimport {\n\tAgentsFeaturesBreakdownTable,\n\tAgentsModelsBreakdownTable,\n\tAgentsProjectsBreakdownTable,\n\tAgentsUsersBreakdownTable,\n} from \"./AgentsBreakdownTable.tsx\"\nimport { AgentsUsageSummaryRow } from \"./AgentsUsageSummaryRow.tsx\"\n\nconst UsageChart = React.lazy(() => import(\"../../UsageChart.tsx\").then(m => ({ default: m.UsageChart })))\n\ninterface AgentsUsageContentProps {\n\tcontentState: AgentsContentState\n\tcurrentProjectId: string | null\n\tisMonthlyLimitReached: boolean\n\tonClickBuyCredits: () => void\n\tonClickTopField?: (key: UsageFilterOption, value: string, valueLabel: string) => void\n\tshowOverage?: boolean\n}\n\nexport function AgentsUsageContent({\n\tcontentState,\n\tcurrentProjectId,\n\tisMonthlyLimitReached,\n\tonClickBuyCredits,\n\tonClickTopField = noop,\n\tshowOverage,\n}: AgentsUsageContentProps) {\n\tif (contentState.status === \"loading\") {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Stack gap={30}>\n\t\t\t\t\t<AgentsUsageSummaryRow\n\t\t\t\t\t\tsummary={null}\n\t\t\t\t\t\tisLoading={true}\n\t\t\t\t\t\tisMonthlyLimitReached={isMonthlyLimitReached}\n\t\t\t\t\t\tonBuyCreditsClick={onClickBuyCredits}\n\t\t\t\t\t\tshowOverage={showOverage}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<Separator height={1} />\n\t\t\t\t</Stack>\n\n\t\t\t\t<div className={styles.loadingState}>\n\t\t\t\t\t<div className={styles.loadingPlaceholder} />\n\t\t\t\t</div>\n\t\t\t</>\n\t\t)\n\t}\n\n\tif (contentState.status === \"error\") {\n\t\treturn (\n\t\t\t<p className={styles.errorMessage}>\n\t\t\t\t<T>Error: {contentState.message}</T>\n\t\t\t</p>\n\t\t)\n\t}\n\n\tconst { usage, summary, topModels, topFeatures, topUsers, topProjects, month, year, showProjectedLine, isUpdating } =\n\t\tcontentState\n\tconst hasData = usage.length > 0 && summary && summary.totalUsage > 0\n\n\tif (!hasData) {\n\t\treturn (\n\t\t\t<Stack gap={15}>\n\t\t\t\t<Stack gap={30}>\n\t\t\t\t\t<AgentsUsageSummaryRow\n\t\t\t\t\t\tsummary={summary}\n\t\t\t\t\t\tisLoading={isUpdating}\n\t\t\t\t\t\tisMonthlyLimitReached={isMonthlyLimitReached}\n\t\t\t\t\t\tonBuyCreditsClick={onClickBuyCredits}\n\t\t\t\t\t\tshowOverage={showOverage}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<Separator height={1} />\n\t\t\t\t</Stack>\n\n\t\t\t\t<div className={styles.noDataMessageWrapper}>\n\t\t\t\t\t<div className={styles.noDataMessage}>\n\t\t\t\t\t\t<T>No data for the selected month</T>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</Stack>\n\t\t)\n\t}\n\n\treturn (\n\t\t<Stack gap={15}>\n\t\t\t<Stack gap={30}>\n\t\t\t\t<AgentsUsageSummaryRow\n\t\t\t\t\tsummary={summary}\n\t\t\t\t\tisLoading={isUpdating}\n\t\t\t\t\tisMonthlyLimitReached={isMonthlyLimitReached}\n\t\t\t\t\tonBuyCreditsClick={onClickBuyCredits}\n\t\t\t\t\tshowOverage={showOverage}\n\t\t\t\t/>\n\n\t\t\t\t<Separator height={1} />\n\t\t\t</Stack>\n\n\t\t\t<Stack gap={30}>\n\t\t\t\t<ErrorBoundary\n\t\t\t\t\ttitle=\"Chart Loading Error\"\n\t\t\t\t\tdescription=\"Unable to load the Agents usage chart. Please refresh the page.\"\n\t\t\t\t\tlocation={ErrorArea.vekter}\n\t\t\t\t>\n\t\t\t\t\t<React.Suspense\n\t\t\t\t\t\tfallback={\n\t\t\t\t\t\t\t<div className={styles.loadingState}>\n\t\t\t\t\t\t\t\t<div className={styles.loadingPlaceholder} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<UsageChart\n\t\t\t\t\t\t\tusage={usage}\n\t\t\t\t\t\t\tplanLimit={summary.planLimit ?? undefined}\n\t\t\t\t\t\t\tisLoading={isUpdating}\n\t\t\t\t\t\t\tmonth={month}\n\t\t\t\t\t\t\tyear={year}\n\t\t\t\t\t\t\tshowProjectedLine={showProjectedLine}\n\t\t\t\t\t\t\tvalueFormatter={formatCredits}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Suspense>\n\t\t\t\t</ErrorBoundary>\n\n\t\t\t\t<Stack direction=\"row\" gap={30} alignItems=\"flex-start\">\n\t\t\t\t\t<AgentsFeaturesBreakdownTable items={topFeatures} isLoading={isUpdating} onClickRow={onClickTopField} />\n\t\t\t\t\t<div className={styles.verticalDivider} />\n\t\t\t\t\t<AgentsModelsBreakdownTable items={topModels} isLoading={isUpdating} onClickRow={onClickTopField} />\n\t\t\t\t</Stack>\n\n\t\t\t\t<Separator height={1} />\n\n\t\t\t\t<Stack direction=\"row\" gap={30}>\n\t\t\t\t\t<AgentsUsersBreakdownTable items={topUsers} isLoading={isUpdating} onClickRow={onClickTopField} />\n\t\t\t\t\t<div className={styles.verticalDivider} />\n\t\t\t\t\t<AgentsProjectsBreakdownTable\n\t\t\t\t\t\titems={topProjects}\n\t\t\t\t\t\tisLoading={isUpdating}\n\t\t\t\t\t\tcurrentProjectId={currentProjectId}\n\t\t\t\t\t\tonClickRow={onClickTopField}\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Stack>\n\t)\n}\n", "import { BYTES_PER_UNIT } from \"../constants.ts\"\n\nexport function formatCredits(credits: number) {\n\treturn Math.round(credits).toLocaleString()\n}\n\nexport function formatBytes(bytes: number, options: { includeDecimals?: boolean } = {}) {\n\tconst { includeDecimals = true } = options\n\n\tif (bytes === 0) return \"0B\"\n\n\tconst tb = bytes / BYTES_PER_UNIT.TB\n\tconst gb = bytes / BYTES_PER_UNIT.GB\n\tconst mb = bytes / BYTES_PER_UNIT.MB\n\tconst kb = bytes / BYTES_PER_UNIT.KB\n\n\tif (tb >= 1) return `${includeDecimals ? tb.toFixed(1) : Math.floor(tb)}TB`\n\tif (gb >= 1) return `${includeDecimals ? gb.toFixed(1) : Math.floor(gb)}GB`\n\tif (mb >= 1) return `${Math.floor(mb)}MB`\n\tif (kb >= 1) return `${Math.floor(kb)}KB`\n\treturn `${Math.floor(bytes)}B`\n}\n", "export type AIFeatureName =\n\t| \"agents\"\n\t| \"agent-examples\"\n\t| \"server-api-agents\"\n\t| \"wireframer\"\n\t| \"translation\"\n\t| \"rename-layers\"\n\t| \"tracking-id\"\n\t| \"kit-screenshot\"\n\t| \"thread\"\n\t| \"custom-code-name\"\n\nexport type AIFeatureCategory = \"agents\" | \"canvas\" | \"translation\" | \"wireframer\" | \"workshop\" | \"spam-protection\"\n\nexport const aiFeatureCategoryTitles: Record<AIFeatureCategory, string> = {\n\tagents: \"Agents\",\n\tcanvas: \"Canvas\",\n\ttranslation: \"Translation\",\n\twireframer: \"Wireframer\",\n\tworkshop: \"Workshop\",\n\t\"spam-protection\": \"Spam Protection\",\n}\n", "import { aiFeatureCategoryTitles, type AIFeatureCategory } from \"app/ai/features.ts\"\nimport type { LanguageModel } from \"app/ai/languageModels.ts\"\nimport { modelNames } from \"app/ai/models.ts\"\nimport React from \"react\"\nimport { prettyURL } from \"web/lib/Project.ts\"\nimport { AnalyticsTable, AnalyticsTableKind } from \"../../../../analytics/components/AnalyticsTable.tsx\"\nimport type { AnalyticsTableData } from \"../../../../analytics/types.ts\"\nimport * as styles from \"../../Usage.styles.ts\"\nimport type { UsageFilterOption } from \"../../types.ts\"\nimport { formatCredits } from \"../../utils/formatters.ts\"\n\ninterface AgentsBreakdownTableItem {\n\tvalue: string\n\tcredits: number\n\tpercentage: number\n}\n\ninterface AgentsBreakdownTableProps {\n\ttitle: string\n\titems: readonly AnalyticsTableData[]\n\tisLoading: boolean\n\tsectionFilter: UsageFilterOption\n\tonClickRow: (key: UsageFilterOption, value: string, valueLabel: string) => void\n}\n\nfunction AgentsBreakdownTable({ title, items, sectionFilter, isLoading, onClickRow }: AgentsBreakdownTableProps) {\n\treturn (\n\t\t<AnalyticsTable\n\t\t\ttitle={title}\n\t\t\tdata={items}\n\t\t\tisLoading={isLoading}\n\t\t\tsectionFilter={sectionFilter}\n\t\t\tonClickRow={onClickRow}\n\t\t\tkind={AnalyticsTableKind.Usage}\n\t\t\taction={<span className={styles.analyticsTableAction}>Credits</span>}\n\t\t\tcountFormatter={formatCredits}\n\t\t/>\n\t)\n}\n\nfunction getProjectLinkHref(id: string, title: string) {\n\treturn prettyURL({ id, title, canvasFeatures: {} }).toString()\n}\n\ninterface AgentsProjectsBreakdownTableItem extends AgentsBreakdownTableItem {\n\ttitle: string\n}\n\nexport function AgentsProjectsBreakdownTable({\n\titems,\n\tisLoading,\n\tcurrentProjectId,\n\tonClickRow,\n}: {\n\titems: readonly AgentsProjectsBreakdownTableItem[]\n\tisLoading: boolean\n\tcurrentProjectId: string | null\n\tonClickRow: AgentsBreakdownTableProps[\"onClickRow\"]\n}) {\n\tconst normalizedItems = React.useMemo(\n\t\t() =>\n\t\t\titems.map(\n\t\t\t\t({ value, title, credits, percentage }): AnalyticsTableData => ({\n\t\t\t\t\tname: title,\n\t\t\t\t\thref: value !== currentProjectId ? getProjectLinkHref(value, title) : undefined,\n\t\t\t\t\tfilterValue: value,\n\t\t\t\t\tcount: credits,\n\t\t\t\t\tpercentage,\n\t\t\t\t\ttooltip: \"\",\n\t\t\t\t}),\n\t\t\t),\n\t\t[items, currentProjectId],\n\t)\n\n\treturn (\n\t\t<AgentsBreakdownTable\n\t\t\ttitle=\"Projects\"\n\t\t\tsectionFilter=\"projectId\"\n\t\t\titems={normalizedItems}\n\t\t\tisLoading={isLoading}\n\t\t\tonClickRow={onClickRow}\n\t\t/>\n\t)\n}\ninterface AgentsFeaturesBreakdownTableItem extends AgentsBreakdownTableItem {\n\tvalue: AIFeatureCategory\n}\n\nexport function AgentsFeaturesBreakdownTable({\n\titems,\n\tisLoading,\n\tonClickRow,\n}: {\n\titems: readonly AgentsFeaturesBreakdownTableItem[]\n\tisLoading: boolean\n\tonClickRow: AgentsBreakdownTableProps[\"onClickRow\"]\n}) {\n\tconst normalizedItems = React.useMemo(\n\t\t() =>\n\t\t\titems.map(\n\t\t\t\t({ value, credits, percentage }): AnalyticsTableData => ({\n\t\t\t\t\tname: aiFeatureCategoryTitles[value],\n\t\t\t\t\tfilterValue: value,\n\t\t\t\t\tcount: credits,\n\t\t\t\t\tpercentage,\n\t\t\t\t\ttooltip: \"\",\n\t\t\t\t}),\n\t\t\t),\n\t\t[items],\n\t)\n\n\treturn (\n\t\t<AgentsBreakdownTable\n\t\t\ttitle=\"Features\"\n\t\t\tsectionFilter=\"feature\"\n\t\t\titems={normalizedItems}\n\t\t\tisLoading={isLoading}\n\t\t\tonClickRow={onClickRow}\n\t\t/>\n\t)\n}\n\ninterface AgentsModelsBreakdownTableItem extends AgentsBreakdownTableItem {\n\tvalue: LanguageModel\n}\n\nexport function AgentsModelsBreakdownTable({\n\titems,\n\tisLoading,\n\tonClickRow,\n}: {\n\titems: readonly AgentsModelsBreakdownTableItem[]\n\tisLoading: boolean\n\tonClickRow: AgentsBreakdownTableProps[\"onClickRow\"]\n}) {\n\tconst normalizedItems = React.useMemo(\n\t\t() =>\n\t\t\titems.map(\n\t\t\t\t({ value, credits, percentage }): AnalyticsTableData => ({\n\t\t\t\t\tname: modelNames[value] ?? value,\n\t\t\t\t\tfilterValue: value,\n\t\t\t\t\tcount: credits,\n\t\t\t\t\tpercentage,\n\t\t\t\t\ttooltip: \"\",\n\t\t\t\t}),\n\t\t\t),\n\t\t[items],\n\t)\n\n\treturn (\n\t\t<AgentsBreakdownTable\n\t\t\ttitle=\"Models\"\n\t\t\tsectionFilter=\"model\"\n\t\t\titems={normalizedItems}\n\t\t\tisLoading={isLoading}\n\t\t\tonClickRow={onClickRow}\n\t\t/>\n\t)\n}\n\ninterface AgentsUsersBreakdownTableItem extends AgentsBreakdownTableItem {\n\tfirstName: string\n\tlastName: string\n}\n\nexport function AgentsUsersBreakdownTable({\n\titems,\n\tisLoading,\n\tonClickRow,\n}: {\n\titems: readonly AgentsUsersBreakdownTableItem[]\n\tisLoading: boolean\n\tonClickRow: AgentsBreakdownTableProps[\"onClickRow\"]\n}) {\n\tconst normalizedItems = React.useMemo(\n\t\t() =>\n\t\t\titems.map(\n\t\t\t\t({ value, credits, percentage, firstName, lastName }): AnalyticsTableData => ({\n\t\t\t\t\tname: `${firstName} ${lastName}`,\n\t\t\t\t\tfilterValue: value,\n\t\t\t\t\tcount: credits,\n\t\t\t\t\tpercentage,\n\t\t\t\t\ttooltip: \"\",\n\t\t\t\t}),\n\t\t\t),\n\t\t[items],\n\t)\n\n\treturn (\n\t\t<AgentsBreakdownTable\n\t\t\ttitle=\"Users\"\n\t\t\tsectionFilter=\"userId\"\n\t\t\titems={normalizedItems}\n\t\t\tisLoading={isLoading}\n\t\t\tonClickRow={onClickRow}\n\t\t/>\n\t)\n}\n", "import \"UsageMetric.styles_1whotex.wyw.css\"; export const metricContainer = \"metricContainer_mwunw4q\";\nexport const metricTitle = \"metricTitle_m1b81o9x\";\nexport const metricValue = \"metricValue_m1nh6sqc\";\nexport const loadingPlaceholder = \"loadingPlaceholder_lgl1k0t\";", "import { Stack } from \"@framerjs/fresco\"\nimport { cx } from \"@linaria/core\"\nimport { tabularNumbers } from \"app/styles/typography.styles.ts\"\nimport * as styles from \"./UsageMetric.styles.ts\"\n\nexport interface UsageMetricProps {\n\ttitle: string\n\tvalue?: string | number\n\tisLoading?: boolean\n}\n\nexport function UsageMetric({ title, value, isLoading = false }: UsageMetricProps) {\n\treturn (\n\t\t<Stack gap={5} className={styles.metricContainer} shrink={1}>\n\t\t\t<div className={styles.metricTitle}>{title}</div>\n\t\t\t<div className={cx(styles.metricValue, tabularNumbers)}>\n\t\t\t\t{isLoading || !value ? <div className={styles.loadingPlaceholder} /> : value}\n\t\t\t</div>\n\t\t</Stack>\n\t)\n}\n", "import { Button, Stack, Translatable as T } from \"@framerjs/fresco\"\nimport * as styles from \"../../UsageMetric.styles.ts\"\n\ninterface AgentsUsageUpgradeBannerProps {\n\tonBuyCreditsClick: () => void\n}\n\nexport function AgentsUsageUpgradeBanner({ onBuyCreditsClick }: AgentsUsageUpgradeBannerProps) {\n\treturn (\n\t\t<Stack gap={5} className={styles.metricContainer} direction=\"column\">\n\t\t\t<div className={styles.metricTitle}>\n\t\t\t\t<T>You\u2019ve exceeded the limit</T>\n\t\t\t</div>\n\t\t\t<Button onClick={onBuyCreditsClick}>\n\t\t\t\t<T>Buy Credits</T>\n\t\t\t</Button>\n\t\t</Stack>\n\t)\n}\n", "import { Stack } from \"@framerjs/fresco\"\nimport { UsageMetric, type UsageMetricProps } from \"../../UsageMetric.tsx\"\nimport type { UsageSummary } from \"../../types.ts\"\nimport { formatCredits } from \"../../utils/formatters.ts\"\nimport { AgentsUsageUpgradeBanner } from \"./AgentsUsageUpgradeBanner.tsx\"\n\ninterface AgentsUsageMetricProps extends UsageMetricProps {\n\tvalue: number\n}\n\nfunction AgentsUsageMetric({ title, value, isLoading = false }: AgentsUsageMetricProps) {\n\treturn <UsageMetric title={title} isLoading={isLoading} value={value > 0 ? formatCredits(value) : undefined} />\n}\n\ninterface AgentsUsageSummaryRowProps {\n\tsummary: UsageSummary | null\n\tisLoading?: boolean\n\tisMonthlyLimitReached: boolean\n\tonBuyCreditsClick: () => void\n\tshowOverage?: boolean\n}\n\nexport function AgentsUsageSummaryRow({\n\tsummary,\n\tisLoading = false,\n\tisMonthlyLimitReached,\n\tonBuyCreditsClick,\n\tshowOverage = true,\n}: AgentsUsageSummaryRowProps) {\n\treturn (\n\t\t<Stack gap={10} alignItems=\"center\" direction=\"row\" justifyContent=\"space-between\">\n\t\t\t<AgentsUsageMetric title=\"Credits Used\" value={summary?.totalUsage ?? 0} isLoading={isLoading} />\n\t\t\t<AgentsUsageMetric title=\"Workspace Limit\" value={summary?.planLimit ?? 0} isLoading={isLoading} />\n\t\t\t{showOverage && <AgentsUsageMetric title=\"Over Limit\" value={summary?.overage ?? 0} isLoading={isLoading} />}\n\t\t\t{isMonthlyLimitReached && <AgentsUsageUpgradeBanner onBuyCreditsClick={onBuyCreditsClick} />}\n\t\t</Stack>\n\t)\n}\n", "import { emptyArray } from \"@framerjs/shared\"\nimport { useMemo } from \"react\"\nimport type { AgentsContentState, AgentsUsageState, UsageSummary } from \"../types.ts\"\n\nfunction calculateAgentsUsageSummary(totalCredits: number, creditLimit: number | null): UsageSummary {\n\tconst totalUsage = totalCredits\n\tconst planLimit = creditLimit ?? null\n\tconst overage = planLimit !== null ? Math.max(0, totalUsage - planLimit) : 0\n\n\treturn { totalUsage, planLimit, overage }\n}\n\ninterface UseAgentsUsageDataProps {\n\tisLoading: boolean\n\tusageData: AgentsUsageState | undefined\n\tmonth: number\n\tyear: number\n\tcreditLimit: number | null\n}\n\nexport function useAgentsUsageData({\n\tisLoading,\n\tusageData,\n\tmonth,\n\tyear,\n\tcreditLimit,\n}: UseAgentsUsageDataProps): AgentsContentState {\n\treturn useMemo(() => {\n\t\tif (isLoading && !usageData) {\n\t\t\treturn { status: \"loading\" }\n\t\t}\n\n\t\tconst dataMonth = usageData?.month ?? month\n\t\tconst dataYear = usageData?.year ?? year\n\t\tconst monthPrefix = `${dataYear}-${String(dataMonth + 1).padStart(2, \"0\")}-`\n\t\tconst summaryCredits =\n\t\t\tusageData?.stats\n\t\t\t\t?.filter(daily => daily.timestamp.startsWith(monthPrefix))\n\t\t\t\t.reduce((sum, daily) => sum + daily.credits, 0) ?? 0\n\n\t\tlet summary: UsageSummary | null = null\n\n\t\tif (summaryCredits > 0 || creditLimit !== null) {\n\t\t\tsummary = calculateAgentsUsageSummary(summaryCredits, creditLimit)\n\t\t}\n\n\t\tconst today = new Date()\n\t\tconst usage = usageData?.stats\n\t\t\t.filter(daily => today >= new Date(daily.timestamp))\n\t\t\t.map(daily => ({ date: daily.timestamp, usage: daily.credits }))\n\n\t\treturn {\n\t\t\tstatus: \"success\",\n\t\t\tusage: usage || emptyArray(),\n\t\t\tsummary,\n\t\t\ttopModels: usageData?.model || emptyArray(),\n\t\t\ttopFeatures: usageData?.feature || emptyArray(),\n\t\t\ttopUsers: usageData?.userId || emptyArray(),\n\t\t\ttopProjects: usageData?.project || emptyArray(),\n\t\t\tmonth: dataMonth,\n\t\t\tyear: dataYear,\n\t\t\tshowProjectedLine: usageData?.showProjectedLine ?? true,\n\t\t\tisUpdating: isLoading,\n\t\t}\n\t}, [isLoading, usageData, month, year, creditLimit])\n}\n", "import { Button, Stack, Translatable as T } from \"@framerjs/fresco\"\nimport { Dictionary } from \"app/dictionary.ts\"\nimport * as styles from \"../../Usage.styles.ts\"\nimport { formatCredits } from \"../../utils/formatters.ts\"\n\ninterface AgentsUsageLimitedContentProps {\n\tdailyUsage: number\n\tmonthlyUsage: number\n\tdailyLimit: number | null\n\tmonthlyLimit: number | null\n\tonNavigateToPlans?: () => void\n\tonLearnMore?: () => void\n}\n\nfunction UpgradePlanButtons({\n\tonNavigateToPlans,\n\tonLearnMore,\n}: Pick<AgentsUsageLimitedContentProps, \"onNavigateToPlans\" | \"onLearnMore\">) {\n\treturn (\n\t\t<Stack gap={10} direction=\"row\" justifyContent=\"center\">\n\t\t\t<Button bold onClick={onLearnMore}>\n\t\t\t\t<T>{Dictionary.LearnMore}</T>\n\t\t\t</Button>\n\t\t\t<Button variant=\"primary\" onClick={onNavigateToPlans}>\n\t\t\t\t<T>View Plans</T>\n\t\t\t</Button>\n\t\t</Stack>\n\t)\n}\n\nexport function AgentsUsageLimitedContent({\n\tdailyUsage,\n\tmonthlyUsage,\n\tdailyLimit,\n\tmonthlyLimit,\n\tonNavigateToPlans,\n\tonLearnMore,\n}: AgentsUsageLimitedContentProps) {\n\tif (monthlyLimit != null && monthlyUsage >= monthlyLimit) {\n\t\treturn (\n\t\t\t<Stack gap={15} className={styles.statusMessage}>\n\t\t\t\t<T>You have used all of your credits for this month. Upgrade your plan for more.</T>\n\t\t\t\t<UpgradePlanButtons onNavigateToPlans={onNavigateToPlans} onLearnMore={onLearnMore} />\n\t\t\t</Stack>\n\t\t)\n\t}\n\n\tif (dailyLimit != null && dailyUsage >= dailyLimit) {\n\t\treturn (\n\t\t\t<Stack gap={15} className={styles.statusMessage}>\n\t\t\t\t<T>You have used all of your credits for today. Upgrade your plan for more.</T>\n\t\t\t\t<UpgradePlanButtons onNavigateToPlans={onNavigateToPlans} onLearnMore={onLearnMore} />\n\t\t\t</Stack>\n\t\t)\n\t}\n\n\treturn (\n\t\t<Stack gap={15} className={styles.statusMessage}>\n\t\t\t{dailyLimit != null ? (\n\t\t\t\t<T>\n\t\t\t\t\tYou have used {formatCredits(dailyUsage)} of your {formatCredits(dailyLimit)} daily credits. Upgrade your plan\n\t\t\t\t\tfor more.\n\t\t\t\t</T>\n\t\t\t) : (\n\t\t\t\t<T>You have used {formatCredits(dailyUsage)} credits today. Upgrade your plan for more.</T>\n\t\t\t)}\n\t\t\t<UpgradePlanButtons onNavigateToPlans={onNavigateToPlans} onLearnMore={onLearnMore} />\n\t\t</Stack>\n\t)\n}\n"],
  "mappings": "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",
  "names": ["meta", "import_react", "React", "legacyProjectError", "Tab", "import_jsx_runtime", "loading", "import_react", "import_react", "callback", "info", "callbacks", "link", "log", "log", "import_react", "import_react", "import_jsx_runtime", "React", "import_react", "import_jsx_runtime", "container", "description", "import_jsx_runtime", "assertNever", "import_react", "import_react", "import_jsx_runtime", "title", "React", "loadingPlaceholder", "import_jsx_runtime", "title", "loadingPlaceholder", "import_jsx_runtime", "import_jsx_runtime", "title", "import_jsx_runtime", "React", "import_react", "import_jsx_runtime"]
}
