@tangle-network/agent-app 0.45.48 → 0.45.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DesignCanvas-QY2CA5GI.js → DesignCanvas-JRBCAWHW.js} +2 -2
- package/dist/{DesignCanvasEditor-CJ7PLX7A.js → DesignCanvasEditor-J2OLS22G.js} +4 -4
- package/dist/{IntakeInterview-NJXKH35Q.js → IntakeInterview-OKT6DCBN.js} +2 -2
- package/dist/{InvitationsPanel-F2VY4TSL.js → InvitationsPanel-OFCYVSAE.js} +2 -2
- package/dist/InviteAcceptPage-BDOO4JSE.js +7 -0
- package/dist/{MembersPanel-N5CBOUXC.js → MembersPanel-3ZK2GCMC.js} +2 -2
- package/dist/{TimelineEditor-IYNKBSUX.js → TimelineEditor-52YEPDX5.js} +2 -2
- package/dist/VaultPane-IGJKB6CX.js +7 -0
- package/dist/assistant/index.d.ts +1 -1
- package/dist/assistant/index.js +8 -8
- package/dist/assistant/index.js.map +1 -1
- package/dist/{billing-BibxgALe.d.ts → billing-BuNlaKlE.d.ts} +15 -23
- package/dist/chat-react/index.js +1 -1
- package/dist/{chunk-DS2WE62K.js → chunk-33BN7P57.js} +5 -5
- package/dist/chunk-33BN7P57.js.map +1 -0
- package/dist/{chunk-5BACNOVR.js → chunk-5MI2SKQH.js} +2 -2
- package/dist/chunk-5MI2SKQH.js.map +1 -0
- package/dist/{chunk-T7XPIBCX.js → chunk-7LJYCHXK.js} +16 -16
- package/dist/chunk-7LJYCHXK.js.map +1 -0
- package/dist/{chunk-XVRHISF3.js → chunk-CJHIAZKK.js} +5 -5
- package/dist/chunk-CJHIAZKK.js.map +1 -0
- package/dist/{chunk-J6OJTFNE.js → chunk-ENLRJYVW.js} +13 -13
- package/dist/chunk-ENLRJYVW.js.map +1 -0
- package/dist/{chunk-R6KGLGEJ.js → chunk-GRDLGQ6A.js} +2 -2
- package/dist/{chunk-R6KGLGEJ.js.map → chunk-GRDLGQ6A.js.map} +1 -1
- package/dist/{chunk-XPFNEKHS.js → chunk-I2CA5N7V.js} +2 -2
- package/dist/chunk-I2CA5N7V.js.map +1 -0
- package/dist/{chunk-IN6LNZ7O.js → chunk-Q2QKEV6J.js} +7 -7
- package/dist/{chunk-IN6LNZ7O.js.map → chunk-Q2QKEV6J.js.map} +1 -1
- package/dist/{chunk-RILGAFEL.js → chunk-UMV45ZDF.js} +3 -3
- package/dist/{chunk-JJJEO4ND.js → chunk-VWTODXRW.js} +2 -2
- package/dist/{chunk-JJJEO4ND.js.map → chunk-VWTODXRW.js.map} +1 -1
- package/dist/{chunk-DB2D2JBQ.js → chunk-W7P5KV6O.js} +2 -2
- package/dist/{chunk-DB2D2JBQ.js.map → chunk-W7P5KV6O.js.map} +1 -1
- package/dist/{chunk-C7AQW6US.js → chunk-ZAKKG6WI.js} +66 -66
- package/dist/chunk-ZAKKG6WI.js.map +1 -0
- package/dist/{chunk-GT4GTRGQ.js → chunk-ZGY6QB4F.js} +5 -5
- package/dist/{chunk-GT4GTRGQ.js.map → chunk-ZGY6QB4F.js.map} +1 -1
- package/dist/design-canvas-react/index.js +7 -7
- package/dist/design-canvas-react/index.js.map +1 -1
- package/dist/design-canvas-react/lazy.js +1 -1
- package/dist/intakes-react/index.js +1 -1
- package/dist/intakes-react/lazy.js +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +16 -16
- package/dist/platform/index.js.map +1 -1
- package/dist/sequences-react/index.js +2 -2
- package/dist/studio-react/index.js +23 -23
- package/dist/studio-react/index.js.map +1 -1
- package/dist/teams-react/index.js +3 -3
- package/dist/teams-react/lazy.js +3 -3
- package/dist/theme/index.js +1 -1
- package/dist/theme/tokens.css +15 -13
- package/dist/vault/index.js +1 -1
- package/dist/vault/lazy.js +1 -1
- package/dist/web-react/index.d.ts +3 -3
- package/dist/web-react/index.js +3 -3
- package/dist/work-product-react/index.js +7 -7
- package/dist/work-product-react/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/InviteAcceptPage-UT4452KT.js +0 -7
- package/dist/VaultPane-MUWGYVJ7.js +0 -7
- package/dist/chunk-5BACNOVR.js.map +0 -1
- package/dist/chunk-C7AQW6US.js.map +0 -1
- package/dist/chunk-DS2WE62K.js.map +0 -1
- package/dist/chunk-J6OJTFNE.js.map +0 -1
- package/dist/chunk-T7XPIBCX.js.map +0 -1
- package/dist/chunk-XPFNEKHS.js.map +0 -1
- package/dist/chunk-XVRHISF3.js.map +0 -1
- /package/dist/{DesignCanvas-QY2CA5GI.js.map → DesignCanvas-JRBCAWHW.js.map} +0 -0
- /package/dist/{DesignCanvasEditor-CJ7PLX7A.js.map → DesignCanvasEditor-J2OLS22G.js.map} +0 -0
- /package/dist/{IntakeInterview-NJXKH35Q.js.map → IntakeInterview-OKT6DCBN.js.map} +0 -0
- /package/dist/{InvitationsPanel-F2VY4TSL.js.map → InvitationsPanel-OFCYVSAE.js.map} +0 -0
- /package/dist/{InviteAcceptPage-UT4452KT.js.map → InviteAcceptPage-BDOO4JSE.js.map} +0 -0
- /package/dist/{MembersPanel-N5CBOUXC.js.map → MembersPanel-3ZK2GCMC.js.map} +0 -0
- /package/dist/{TimelineEditor-IYNKBSUX.js.map → TimelineEditor-52YEPDX5.js.map} +0 -0
- /package/dist/{VaultPane-MUWGYVJ7.js.map → VaultPane-IGJKB6CX.js.map} +0 -0
- /package/dist/{chunk-RILGAFEL.js.map → chunk-UMV45ZDF.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/teams-react/components/InviteAcceptPage.tsx","../src/teams-react/components/BrandMark.tsx"],"sourcesContent":["/**\n * Invite-accept surface for `/invite/:token`. Renders the invite state (valid /\n * invalid / already-accepted), handles the signed-out path (sign in or create\n * an account with the invited email), the email-mismatch path (switch account),\n * and the accept action. Callback-driven: the host supplies the resolved\n * `details` and `onAccept` / `onNavigate`, so this imports no app router or\n * fetch client. Styled with the shipped Tangle Quiet tokens (`var(--*)`).\n */\n\nimport { useState } from 'react'\nimport type { InviteAcceptPageProps } from '../contracts'\nimport { BrandMark } from './BrandMark'\n\nexport function InviteAcceptPage({ details, onAccept, onNavigate, onResendVerification }: InviteAcceptPageProps) {\n const [accepting, setAccepting] = useState(false)\n const [acceptError, setAcceptError] = useState<string | null>(null)\n const [accepted, setAccepted] = useState(false)\n const [resendingVerification, setResendingVerification] = useState(false)\n const [verificationSent, setVerificationSent] = useState(false)\n\n if (details.status === 'invalid') {\n return (\n <Shell title=\"Invalid invitation\" body=\"This link is invalid or already used. Ask the workspace admin to send a new one.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Go to sign in</PrimaryButton>\n </Shell>\n )\n }\n\n if (details.status === 'already-accepted') {\n return (\n <Shell title=\"Already accepted\" body=\"This invitation has already been accepted.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'open-app' })}>Open workspace</PrimaryButton>\n </Shell>\n )\n }\n\n if (details.status === 'expired') {\n return (\n <Shell title=\"Invitation expired\" body=\"This invitation has expired. Ask the workspace admin to send a new one.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Go to sign in</PrimaryButton>\n </Shell>\n )\n }\n\n if (details.status === 'revoked') {\n return (\n <Shell title=\"Invitation revoked\" body=\"This invitation has been revoked. Ask the workspace admin to send a new one.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Go to sign in</PrimaryButton>\n </Shell>\n )\n }\n\n const workspaceName = details.workspaceName ?? 'a workspace'\n const inviterPrefix = details.inviterName ? `${details.inviterName} invited you` : \"You've been invited\"\n const roleSuffix = details.role ? ` as ${details.role}` : ''\n\n if (!details.currentUserEmail) {\n return (\n <Shell title=\"You've been invited\">\n <p className=\"mb-4 text-sm text-[var(--text-secondary)]\">\n {inviterPrefix} to join <span className=\"font-medium text-[var(--text-primary)]\">{workspaceName}</span>{roleSuffix}.\n </p>\n {details.inviteEmail && (\n <p className=\"mb-6 text-sm text-[var(--text-secondary)]\">\n Sign in or create an account with{' '}\n <span className=\"font-medium text-[var(--text-primary)]\">{details.inviteEmail}</span> to accept.\n </p>\n )}\n <div className=\"flex gap-2\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Sign in</PrimaryButton>\n <SecondaryButton onClick={() => onNavigate({ kind: 'sign-up' })}>Create account</SecondaryButton>\n </div>\n </Shell>\n )\n }\n\n if (accepted) {\n return (\n <Shell title=\"Welcome!\">\n <p className=\"text-sm text-[var(--text-secondary)]\">\n You've joined <span className=\"font-medium text-[var(--text-primary)]\">{workspaceName}</span>.\n </p>\n </Shell>\n )\n }\n\n const emailMismatch = Boolean(\n details.inviteEmail &&\n details.inviteEmail.toLowerCase() !== details.currentUserEmail.toLowerCase(),\n )\n const needsVerification = Boolean(details.needsEmailVerification) && !emailMismatch\n const expiryLabel = details.expiresAt != null\n ? new Date(details.expiresAt).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n : null\n\n async function handleAccept() {\n setAccepting(true)\n setAcceptError(null)\n try {\n const result = await onAccept()\n setAccepted(true)\n if (result && 'workspaceId' in result && result.workspaceId) {\n onNavigate({ kind: 'open-app', workspaceId: result.workspaceId })\n }\n } catch (err) {\n setAcceptError(err instanceof Error ? err.message : 'Failed to accept invitation')\n } finally {\n setAccepting(false)\n }\n }\n\n async function handleResendVerification() {\n if (!onResendVerification || resendingVerification) return\n setResendingVerification(true)\n try {\n await onResendVerification()\n setVerificationSent(true)\n } finally {\n setResendingVerification(false)\n }\n }\n\n return (\n <Shell title=\"Join workspace\">\n <p className=\"mb-4 text-sm text-[var(--text-secondary)]\">\n {inviterPrefix} to join <span className=\"font-medium text-[var(--text-primary)]\">{workspaceName}</span>{roleSuffix}.\n </p>\n <p className=\"mb-4 text-sm text-[var(--text-secondary)]\">\n Signed in as <span className=\"font-medium text-[var(--text-primary)]\">{details.currentUserEmail}</span>\n </p>\n {expiryLabel && (\n <p className=\"mb-4 text-xs text-[var(--text-muted)]\">This invitation expires on {expiryLabel}.</p>\n )}\n {emailMismatch && (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-[var(--border-default)] px-4 py-2 text-sm text-[var(--text-warning)]\"\n >\n This invitation was sent to <span className=\"font-medium\">{details.inviteEmail}</span>. Switch to that account to accept it.\n </div>\n )}\n {needsVerification && (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-[var(--border-default)] px-4 py-2 text-sm text-[var(--text-warning)]\"\n >\n {verificationSent\n ? 'Verification email sent — check your inbox, then refresh this page to accept.'\n : 'Verify your email address before you can accept this invitation.'}\n </div>\n )}\n {acceptError && (\n <p role=\"alert\" className=\"mb-4 text-sm text-[var(--text-danger)]\">{acceptError}</p>\n )}\n <div className=\"flex gap-2\">\n {emailMismatch ? (\n <PrimaryButton onClick={() => onNavigate({ kind: 'switch-account' })}>Switch account</PrimaryButton>\n ) : needsVerification ? (\n onResendVerification ? (\n <PrimaryButton\n onClick={() => void handleResendVerification()}\n disabled={resendingVerification || verificationSent}\n >\n {verificationSent ? 'Verification sent' : resendingVerification ? 'Sending…' : 'Resend verification email'}\n </PrimaryButton>\n ) : (\n <PrimaryButton onClick={() => onNavigate({ kind: 'open-app' })}>Open app</PrimaryButton>\n )\n ) : (\n <PrimaryButton onClick={() => void handleAccept()} disabled={accepting}>\n {accepting ? 'Accepting…' : 'Accept invitation'}\n </PrimaryButton>\n )}\n <SecondaryButton onClick={() => onNavigate({ kind: 'open-app' })}>Not now</SecondaryButton>\n </div>\n </Shell>\n )\n}\n\nfunction Shell({ title, body, children }: { title: string; body?: string; children: React.ReactNode }) {\n return (\n <div className=\"mx-auto flex w-full max-w-sm flex-col\">\n <span className=\"mb-4 flex items-center gap-2 text-[var(--text-muted)]\">\n <BrandMark size={22} className=\"shrink-0\" />\n <span className=\"text-[11px] font-semibold uppercase tracking-[0.05em]\">Tangle Teams</span>\n </span>\n <h1 className=\"mb-1 text-xl font-semibold tracking-tight text-[var(--text-primary)]\">{title}</h1>\n {body && <p className=\"mb-6 text-sm text-[var(--text-secondary)]\">{body}</p>}\n {children}\n </div>\n )\n}\n\nfunction PrimaryButton({ children, onClick, disabled }: { children: React.ReactNode; onClick(): void; disabled?: boolean }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className=\"flex-1 rounded bg-[var(--brand-primary)] px-4 py-2 text-sm text-[hsl(var(--primary-foreground))] disabled:opacity-50\"\n >\n {children}\n </button>\n )\n}\n\nfunction SecondaryButton({ children, onClick }: { children: React.ReactNode; onClick(): void }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"flex-1 rounded border border-[var(--border-default)] px-4 py-2 text-sm text-[var(--text-secondary)] hover:text-[var(--text-primary)]\"\n >\n {children}\n </button>\n )\n}\n","/**\n * Load the canonical Tangle knot only when a teams surface renders it.\n * `/brand` imports the optional `@tangle-network/brand` peer, so a failed load\n * renders a fixed-size spacer instead of crashing the panel.\n */\n\nimport { lazy, Suspense } from 'react'\nimport type { ComponentType } from 'react'\n\nexport interface BrandMarkProps {\n size: number\n className?: string\n}\n\n/** Preserve the mark's footprint while its optional package loads or is absent. */\nfunction MarkSpacer({ size }: { size: number }) {\n return <span aria-hidden style={{ display: 'inline-block', width: size, height: size }} />\n}\n\nconst LazyKnot = lazy(async () => {\n try {\n const mod = await import('../../brand')\n return { default: mod.TangleKnot as ComponentType<BrandMarkProps> }\n } catch {\n return { default: MarkSpacer as ComponentType<BrandMarkProps> }\n }\n})\n\nexport function BrandMark({ size, className }: BrandMarkProps) {\n return (\n <Suspense fallback={<MarkSpacer size={size} />}>\n <LazyKnot size={size} className={className} />\n </Suspense>\n )\n}\n"],"mappings":"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","names":["jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/teams-react/components/InviteAcceptPage.tsx","../src/teams-react/components/BrandMark.tsx"],"sourcesContent":["/**\n * Invite-accept surface for `/invite/:token`. Renders the invite state (valid /\n * invalid / already-accepted), handles the signed-out path (sign in or create\n * an account with the invited email), the email-mismatch path (switch account),\n * and the accept action. Callback-driven: the host supplies the resolved\n * `details` and `onAccept` / `onNavigate`, so this imports no app router or\n * fetch client. Styled with the shipped Tangle Quiet tokens (`var(--*)`).\n */\n\nimport { useState } from 'react'\nimport type { InviteAcceptPageProps } from '../contracts'\nimport { BrandMark } from './BrandMark'\n\nexport function InviteAcceptPage({ details, onAccept, onNavigate, onResendVerification }: InviteAcceptPageProps) {\n const [accepting, setAccepting] = useState(false)\n const [acceptError, setAcceptError] = useState<string | null>(null)\n const [accepted, setAccepted] = useState(false)\n const [resendingVerification, setResendingVerification] = useState(false)\n const [verificationSent, setVerificationSent] = useState(false)\n\n if (details.status === 'invalid') {\n return (\n <Shell title=\"Invalid invitation\" body=\"This link is invalid or already used. Ask the workspace admin to send a new one.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Go to sign in</PrimaryButton>\n </Shell>\n )\n }\n\n if (details.status === 'already-accepted') {\n return (\n <Shell title=\"Already accepted\" body=\"This invitation has already been accepted.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'open-app' })}>Open workspace</PrimaryButton>\n </Shell>\n )\n }\n\n if (details.status === 'expired') {\n return (\n <Shell title=\"Invitation expired\" body=\"This invitation has expired. Ask the workspace admin to send a new one.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Go to sign in</PrimaryButton>\n </Shell>\n )\n }\n\n if (details.status === 'revoked') {\n return (\n <Shell title=\"Invitation revoked\" body=\"This invitation has been revoked. Ask the workspace admin to send a new one.\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Go to sign in</PrimaryButton>\n </Shell>\n )\n }\n\n const workspaceName = details.workspaceName ?? 'a workspace'\n const inviterPrefix = details.inviterName ? `${details.inviterName} invited you` : \"You've been invited\"\n const roleSuffix = details.role ? ` as ${details.role}` : ''\n\n if (!details.currentUserEmail) {\n return (\n <Shell title=\"You've been invited\">\n <p className=\"mb-4 text-sm text-[var(--text-secondary)]\">\n {inviterPrefix} to join <span className=\"font-medium text-[var(--text-primary)]\">{workspaceName}</span>{roleSuffix}.\n </p>\n {details.inviteEmail && (\n <p className=\"mb-6 text-sm text-[var(--text-secondary)]\">\n Sign in or create an account with{' '}\n <span className=\"font-medium text-[var(--text-primary)]\">{details.inviteEmail}</span> to accept.\n </p>\n )}\n <div className=\"flex gap-2\">\n <PrimaryButton onClick={() => onNavigate({ kind: 'sign-in' })}>Sign in</PrimaryButton>\n <SecondaryButton onClick={() => onNavigate({ kind: 'sign-up' })}>Create account</SecondaryButton>\n </div>\n </Shell>\n )\n }\n\n if (accepted) {\n return (\n <Shell title=\"Welcome!\">\n <p className=\"text-sm text-[var(--text-secondary)]\">\n You've joined <span className=\"font-medium text-[var(--text-primary)]\">{workspaceName}</span>.\n </p>\n </Shell>\n )\n }\n\n const emailMismatch = Boolean(\n details.inviteEmail &&\n details.inviteEmail.toLowerCase() !== details.currentUserEmail.toLowerCase(),\n )\n const needsVerification = Boolean(details.needsEmailVerification) && !emailMismatch\n const expiryLabel = details.expiresAt != null\n ? new Date(details.expiresAt).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n : null\n\n async function handleAccept() {\n setAccepting(true)\n setAcceptError(null)\n try {\n const result = await onAccept()\n setAccepted(true)\n if (result && 'workspaceId' in result && result.workspaceId) {\n onNavigate({ kind: 'open-app', workspaceId: result.workspaceId })\n }\n } catch (err) {\n setAcceptError(err instanceof Error ? err.message : 'Failed to accept invitation')\n } finally {\n setAccepting(false)\n }\n }\n\n async function handleResendVerification() {\n if (!onResendVerification || resendingVerification) return\n setResendingVerification(true)\n try {\n await onResendVerification()\n setVerificationSent(true)\n } finally {\n setResendingVerification(false)\n }\n }\n\n return (\n <Shell title=\"Join workspace\">\n <p className=\"mb-4 text-sm text-[var(--text-secondary)]\">\n {inviterPrefix} to join <span className=\"font-medium text-[var(--text-primary)]\">{workspaceName}</span>{roleSuffix}.\n </p>\n <p className=\"mb-4 text-sm text-[var(--text-secondary)]\">\n Signed in as <span className=\"font-medium text-[var(--text-primary)]\">{details.currentUserEmail}</span>\n </p>\n {expiryLabel && (\n <p className=\"mb-4 text-xs text-[var(--text-muted)]\">This invitation expires on {expiryLabel}.</p>\n )}\n {emailMismatch && (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-[var(--border-default)] px-4 py-2 text-sm text-[var(--text-warning)]\"\n >\n This invitation was sent to <span className=\"font-medium\">{details.inviteEmail}</span>. Switch to that account to accept it.\n </div>\n )}\n {needsVerification && (\n <div\n role=\"alert\"\n className=\"mb-4 rounded-md border border-[var(--border-default)] px-4 py-2 text-sm text-[var(--text-warning)]\"\n >\n {verificationSent\n ? 'Verification email sent — check your inbox, then refresh this page to accept.'\n : 'Verify your email address before you can accept this invitation.'}\n </div>\n )}\n {acceptError && (\n <p role=\"alert\" className=\"mb-4 text-sm text-[var(--text-danger)]\">{acceptError}</p>\n )}\n <div className=\"flex gap-2\">\n {emailMismatch ? (\n <PrimaryButton onClick={() => onNavigate({ kind: 'switch-account' })}>Switch account</PrimaryButton>\n ) : needsVerification ? (\n onResendVerification ? (\n <PrimaryButton\n onClick={() => void handleResendVerification()}\n disabled={resendingVerification || verificationSent}\n >\n {verificationSent ? 'Verification sent' : resendingVerification ? 'Sending…' : 'Resend verification email'}\n </PrimaryButton>\n ) : (\n <PrimaryButton onClick={() => onNavigate({ kind: 'open-app' })}>Open app</PrimaryButton>\n )\n ) : (\n <PrimaryButton onClick={() => void handleAccept()} disabled={accepting}>\n {accepting ? 'Accepting…' : 'Accept invitation'}\n </PrimaryButton>\n )}\n <SecondaryButton onClick={() => onNavigate({ kind: 'open-app' })}>Not now</SecondaryButton>\n </div>\n </Shell>\n )\n}\n\nfunction Shell({ title, body, children }: { title: string; body?: string; children: React.ReactNode }) {\n return (\n <div className=\"mx-auto flex w-full max-w-sm flex-col\">\n <span className=\"mb-4 flex items-center gap-2 text-[var(--text-muted)]\">\n <BrandMark size={22} className=\"shrink-0\" />\n <span className=\"text-xs font-semibold uppercase tracking-[0.05em]\">Tangle Teams</span>\n </span>\n <h1 className=\"mb-1 text-xl font-semibold tracking-tight text-[var(--text-primary)]\">{title}</h1>\n {body && <p className=\"mb-6 text-sm text-[var(--text-secondary)]\">{body}</p>}\n {children}\n </div>\n )\n}\n\nfunction PrimaryButton({ children, onClick, disabled }: { children: React.ReactNode; onClick(): void; disabled?: boolean }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n className=\"flex-1 rounded bg-[var(--brand-primary)] px-4 py-2 text-sm text-[hsl(var(--primary-foreground))] disabled:opacity-50\"\n >\n {children}\n </button>\n )\n}\n\nfunction SecondaryButton({ children, onClick }: { children: React.ReactNode; onClick(): void }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"flex-1 rounded border border-[var(--border-default)] px-4 py-2 text-sm text-[var(--text-secondary)] hover:text-[var(--text-primary)]\"\n >\n {children}\n </button>\n )\n}\n","/**\n * Load the canonical Tangle knot only when a teams surface renders it.\n * `/brand` imports the optional `@tangle-network/brand` peer, so a failed load\n * renders a fixed-size spacer instead of crashing the panel.\n */\n\nimport { lazy, Suspense } from 'react'\nimport type { ComponentType } from 'react'\n\nexport interface BrandMarkProps {\n size: number\n className?: string\n}\n\n/** Preserve the mark's footprint while its optional package loads or is absent. */\nfunction MarkSpacer({ size }: { size: number }) {\n return <span aria-hidden style={{ display: 'inline-block', width: size, height: size }} />\n}\n\nconst LazyKnot = lazy(async () => {\n try {\n const mod = await import('../../brand')\n return { default: mod.TangleKnot as ComponentType<BrandMarkProps> }\n } catch {\n return { default: MarkSpacer as ComponentType<BrandMarkProps> }\n }\n})\n\nexport function BrandMark({ size, className }: BrandMarkProps) {\n return (\n <Suspense fallback={<MarkSpacer size={size} />}>\n <LazyKnot size={size} className={className} />\n </Suspense>\n )\n}\n"],"mappings":"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","names":["jsx"]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
WorkProductCard,
|
|
6
6
|
workProductPartsFromMessageParts
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ENLRJYVW.js";
|
|
8
8
|
import {
|
|
9
9
|
ChevronDown,
|
|
10
10
|
OVERLAY_SHADOW,
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
PopoverSurface,
|
|
13
13
|
usePending,
|
|
14
14
|
usePopover
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-CJHIAZKK.js";
|
|
16
16
|
import {
|
|
17
17
|
UNTITLED_SESSION_LABEL,
|
|
18
18
|
mergeSessionPages,
|
|
@@ -1058,7 +1058,7 @@ function useAttachmentObjectUrl(blob) {
|
|
|
1058
1058
|
function AttachmentThumbnailError({ name }) {
|
|
1059
1059
|
return /* @__PURE__ */ jsxs4("span", { className: "inline-flex h-16 w-16 shrink-0 flex-col items-center justify-center gap-1 rounded-md border border-destructive/40 bg-destructive/10 px-1 text-center text-destructive", children: [
|
|
1060
1060
|
/* @__PURE__ */ jsx6(WarningGlyph, { className: "h-4 w-4 shrink-0" }),
|
|
1061
|
-
/* @__PURE__ */ jsx6("span", { className: "line-clamp-2 text-
|
|
1061
|
+
/* @__PURE__ */ jsx6("span", { className: "line-clamp-2 text-xs leading-tight", children: name })
|
|
1062
1062
|
] });
|
|
1063
1063
|
}
|
|
1064
1064
|
function AttachmentUnavailable({ shape }) {
|
|
@@ -1070,7 +1070,7 @@ function AttachmentUnavailable({ shape }) {
|
|
|
1070
1070
|
className: "inline-flex h-16 w-16 shrink-0 flex-col items-center justify-center gap-1 rounded-md border border-border bg-muted px-1 text-center text-muted-foreground",
|
|
1071
1071
|
children: [
|
|
1072
1072
|
/* @__PURE__ */ jsx6(WarningGlyph, { className: "h-4 w-4 shrink-0" }),
|
|
1073
|
-
/* @__PURE__ */ jsx6("span", { className: "line-clamp-2 text-
|
|
1073
|
+
/* @__PURE__ */ jsx6("span", { className: "line-clamp-2 text-xs leading-tight", children: "Attachment unavailable" })
|
|
1074
1074
|
]
|
|
1075
1075
|
}
|
|
1076
1076
|
);
|
|
@@ -1079,7 +1079,7 @@ function AttachmentUnavailable({ shape }) {
|
|
|
1079
1079
|
"span",
|
|
1080
1080
|
{
|
|
1081
1081
|
"aria-disabled": "true",
|
|
1082
|
-
className: "inline-flex items-center gap-1 rounded-md border border-border bg-muted px-2 py-0.5 text-
|
|
1082
|
+
className: "inline-flex items-center gap-1 rounded-md border border-border bg-muted px-2 py-0.5 text-xs text-muted-foreground",
|
|
1083
1083
|
children: [
|
|
1084
1084
|
/* @__PURE__ */ jsx6(WarningGlyph, { className: "h-3 w-3 shrink-0" }),
|
|
1085
1085
|
"Attachment unavailable"
|
|
@@ -1156,7 +1156,7 @@ function AttachmentChip({ part, resolveFileUrl, fetchFile }) {
|
|
|
1156
1156
|
}
|
|
1157
1157
|
const Icon = status === "error" ? WarningGlyph : iconForMediaType(part.mediaType);
|
|
1158
1158
|
const className = [
|
|
1159
|
-
"inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-
|
|
1159
|
+
"inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs",
|
|
1160
1160
|
status === "error" ? "border-destructive/40 bg-destructive/10 text-destructive" : "border-border bg-secondary text-muted-foreground"
|
|
1161
1161
|
].join(" ");
|
|
1162
1162
|
return /* @__PURE__ */ jsxs4(
|
|
@@ -1729,7 +1729,7 @@ function ChatComposer({
|
|
|
1729
1729
|
disabled,
|
|
1730
1730
|
rows: 2,
|
|
1731
1731
|
"aria-label": "Message input",
|
|
1732
|
-
className: "max-h-[168px] min-h-[56px] w-full resize-none bg-transparent px-1.5 py-1 text-
|
|
1732
|
+
className: "max-h-[168px] min-h-[56px] w-full resize-none bg-transparent px-1.5 py-1 text-base leading-6 text-foreground outline-none placeholder:text-muted-foreground disabled:opacity-50"
|
|
1733
1733
|
}
|
|
1734
1734
|
),
|
|
1735
1735
|
/* @__PURE__ */ jsxs5("div", { className: "flex items-end gap-2", children: [
|
|
@@ -1812,8 +1812,8 @@ function ChatComposer({
|
|
|
1812
1812
|
}
|
|
1813
1813
|
),
|
|
1814
1814
|
focusShortcut && /* @__PURE__ */ jsx7("div", { className: "mt-1.5 flex justify-end px-1", children: /* @__PURE__ */ jsxs5("span", { className: "text-xs text-muted-foreground", children: [
|
|
1815
|
-
/* @__PURE__ */ jsx7("kbd", { className: "rounded border border-border bg-background px-1 py-0.5 text-
|
|
1816
|
-
/* @__PURE__ */ jsx7("kbd", { className: "ml-0.5 rounded border border-border bg-background px-1 py-0.5 text-
|
|
1815
|
+
/* @__PURE__ */ jsx7("kbd", { className: "rounded border border-border bg-background px-1 py-0.5 text-xs", children: IS_APPLE_PLATFORM ? "Cmd" : "Ctrl" }),
|
|
1816
|
+
/* @__PURE__ */ jsx7("kbd", { className: "ml-0.5 rounded border border-border bg-background px-1 py-0.5 text-xs", children: "L" }),
|
|
1817
1817
|
/* @__PURE__ */ jsx7("span", { className: "ml-1", children: "to focus" })
|
|
1818
1818
|
] }) })
|
|
1819
1819
|
]
|
|
@@ -2471,7 +2471,7 @@ function FlowWaterfall({ trace }) {
|
|
|
2471
2471
|
const cost = formatActivityCost(trace.costUsd);
|
|
2472
2472
|
return /* @__PURE__ */ jsxs6("div", { className: "space-y-1", children: [
|
|
2473
2473
|
rows.map((row, i) => /* @__PURE__ */ jsxs6("div", { className: "grid grid-cols-[minmax(0,2fr)_minmax(0,3fr)_auto] items-center gap-2", children: [
|
|
2474
|
-
/* @__PURE__ */ jsx8("span", { className: "truncate font-mono text-
|
|
2474
|
+
/* @__PURE__ */ jsx8("span", { className: "truncate font-mono text-xs text-muted-foreground", title: row.name, children: row.name }),
|
|
2475
2475
|
/* @__PURE__ */ jsx8("div", { className: "relative h-2 rounded-sm bg-secondary", children: /* @__PURE__ */ jsx8(
|
|
2476
2476
|
"div",
|
|
2477
2477
|
{
|
|
@@ -2479,9 +2479,9 @@ function FlowWaterfall({ trace }) {
|
|
|
2479
2479
|
style: { left: `${row.offsetPct}%`, width: `${row.widthPct}%` }
|
|
2480
2480
|
}
|
|
2481
2481
|
) }),
|
|
2482
|
-
/* @__PURE__ */ jsx8("span", { className: "shrink-0 font-mono text-
|
|
2482
|
+
/* @__PURE__ */ jsx8("span", { className: "shrink-0 font-mono text-xs tabular-nums text-muted-foreground/70", children: row.durationLabel })
|
|
2483
2483
|
] }, i)),
|
|
2484
|
-
/* @__PURE__ */ jsxs6("p", { className: "pt-0.5 text-right font-mono text-
|
|
2484
|
+
/* @__PURE__ */ jsxs6("p", { className: "pt-0.5 text-right font-mono text-xs tabular-nums text-muted-foreground/60", children: [
|
|
2485
2485
|
(trace.totalMs / 1e3).toFixed(1),
|
|
2486
2486
|
"s",
|
|
2487
2487
|
cost ? ` \xB7 ${cost}` : ""
|
|
@@ -2505,8 +2505,8 @@ function MissionActivityLane({ activity, startedAt, nowMs }) {
|
|
|
2505
2505
|
run.detail
|
|
2506
2506
|
] })
|
|
2507
2507
|
] }),
|
|
2508
|
-
tone === "live" && (run.iteration !== void 0 || run.phase !== void 0) && /* @__PURE__ */ jsx8("span", { className: "shrink-0 rounded-full bg-warning/10 px-1.5 py-0.5 font-mono text-
|
|
2509
|
-
/* @__PURE__ */ jsxs6("span", { className: "flex shrink-0 items-center gap-1.5 font-mono text-
|
|
2508
|
+
tone === "live" && (run.iteration !== void 0 || run.phase !== void 0) && /* @__PURE__ */ jsx8("span", { className: "shrink-0 rounded-full bg-warning/10 px-1.5 py-0.5 font-mono text-xs text-warning", children: [run.iteration !== void 0 ? `iter ${run.iteration}` : null, run.phase ?? null].filter(Boolean).join(" \xB7 ") }),
|
|
2509
|
+
/* @__PURE__ */ jsxs6("span", { className: "flex shrink-0 items-center gap-1.5 font-mono text-xs tabular-nums text-muted-foreground/70", children: [
|
|
2510
2510
|
tone !== "live" && tone !== "ok" && /* @__PURE__ */ jsx8("span", { children: run.status }),
|
|
2511
2511
|
cost && /* @__PURE__ */ jsx8("span", { children: cost }),
|
|
2512
2512
|
duration && /* @__PURE__ */ jsx8("span", { children: duration })
|
|
@@ -2518,7 +2518,7 @@ function MissionActivityLane({ activity, startedAt, nowMs }) {
|
|
|
2518
2518
|
{
|
|
2519
2519
|
type: "button",
|
|
2520
2520
|
onClick: () => setExpanded((v) => !v),
|
|
2521
|
-
className: "flex items-center gap-1 py-0.5 text-
|
|
2521
|
+
className: "flex items-center gap-1 py-0.5 text-xs font-medium text-muted-foreground/70 transition hover:text-foreground",
|
|
2522
2522
|
children: [
|
|
2523
2523
|
/* @__PURE__ */ jsx8(ChevronGlyph, { className: `h-3 w-3 transition-transform ${expanded ? "rotate-180" : ""}` }),
|
|
2524
2524
|
"timeline"
|
|
@@ -2554,20 +2554,20 @@ function ActivityRow({
|
|
|
2554
2554
|
record.detail
|
|
2555
2555
|
] })
|
|
2556
2556
|
] }),
|
|
2557
|
-
tone === "live" && (record.iteration !== void 0 || record.phase !== void 0) && /* @__PURE__ */ jsx8("span", { className: "shrink-0 rounded-full bg-warning/10 px-2 py-0.5 font-mono text-
|
|
2557
|
+
tone === "live" && (record.iteration !== void 0 || record.phase !== void 0) && /* @__PURE__ */ jsx8("span", { className: "shrink-0 rounded-full bg-warning/10 px-2 py-0.5 font-mono text-xs text-warning", children: [record.iteration !== void 0 ? `iter ${record.iteration}` : null, record.phase ?? null].filter(Boolean).join(" \xB7 ") }),
|
|
2558
2558
|
/* @__PURE__ */ jsx8(
|
|
2559
2559
|
"span",
|
|
2560
2560
|
{
|
|
2561
|
-
className: `shrink-0 rounded-full px-2 py-0.5 text-
|
|
2561
|
+
className: `shrink-0 rounded-full px-2 py-0.5 text-xs font-medium ${tone === "ok" ? "bg-success/10 text-success" : tone === "error" ? "bg-destructive/10 text-destructive" : tone === "live" ? "bg-warning/10 text-warning" : "bg-secondary text-muted-foreground"}`,
|
|
2562
2562
|
children: record.status
|
|
2563
2563
|
}
|
|
2564
2564
|
),
|
|
2565
|
-
cost && /* @__PURE__ */ jsx8("span", { className: "shrink-0 font-mono text-
|
|
2565
|
+
cost && /* @__PURE__ */ jsx8("span", { className: "shrink-0 font-mono text-xs tabular-nums text-muted-foreground", children: cost }),
|
|
2566
2566
|
/* @__PURE__ */ jsx8(ChevronGlyph, { className: `h-3 w-3 shrink-0 text-muted-foreground transition-transform ${open ? "rotate-180" : ""}` })
|
|
2567
2567
|
] }),
|
|
2568
2568
|
open && /* @__PURE__ */ jsxs6("div", { className: "space-y-2.5 border-t border-border px-3 py-2.5", children: [
|
|
2569
2569
|
record.durationMs !== void 0 && /* @__PURE__ */ jsx8("div", { className: "rounded-md border border-border bg-secondary p-2", children: /* @__PURE__ */ jsx8(FlowWaterfall, { trace: stepActivityFlowTrace([record]) }) }),
|
|
2570
|
-
/* @__PURE__ */ jsxs6("dl", { className: "grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 font-mono text-
|
|
2570
|
+
/* @__PURE__ */ jsxs6("dl", { className: "grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 font-mono text-xs", children: [
|
|
2571
2571
|
/* @__PURE__ */ jsx8("dt", { className: "text-muted-foreground/60", children: "task" }),
|
|
2572
2572
|
/* @__PURE__ */ jsx8("dd", { className: "truncate text-muted-foreground", children: record.taskId }),
|
|
2573
2573
|
/* @__PURE__ */ jsx8("dt", { className: "text-muted-foreground/60", children: "started" }),
|
|
@@ -2871,13 +2871,13 @@ function SourceRow({
|
|
|
2871
2871
|
return /* @__PURE__ */ jsxs7("li", { className: "rounded-md border border-card-edge bg-card px-2.5 py-2", children: [
|
|
2872
2872
|
/* @__PURE__ */ jsxs7("div", { className: "flex flex-wrap items-baseline gap-x-2 gap-y-1", children: [
|
|
2873
2873
|
/* @__PURE__ */ jsx9("span", { className: "text-sm font-medium text-foreground", children: source.label }),
|
|
2874
|
-
source.locator && /* @__PURE__ */ jsx9("span", { className: "text-
|
|
2874
|
+
source.locator && /* @__PURE__ */ jsx9("span", { className: "text-xs text-muted-foreground", children: source.locator }),
|
|
2875
2875
|
openable && (onOpenSource ? /* @__PURE__ */ jsxs7(
|
|
2876
2876
|
"button",
|
|
2877
2877
|
{
|
|
2878
2878
|
type: "button",
|
|
2879
2879
|
onClick: () => onOpenSource(source, record),
|
|
2880
|
-
className: "rounded px-1 text-
|
|
2880
|
+
className: "rounded px-1 text-xs font-medium text-primary underline-offset-2 hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
2881
2881
|
children: [
|
|
2882
2882
|
"Open ",
|
|
2883
2883
|
source.label
|
|
@@ -2889,7 +2889,7 @@ function SourceRow({
|
|
|
2889
2889
|
href: source.href,
|
|
2890
2890
|
target: "_blank",
|
|
2891
2891
|
rel: "noreferrer",
|
|
2892
|
-
className: "rounded px-1 text-
|
|
2892
|
+
className: "rounded px-1 text-xs font-medium text-primary underline-offset-2 hover:underline focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
2893
2893
|
children: [
|
|
2894
2894
|
"Open ",
|
|
2895
2895
|
source.label
|
|
@@ -2910,7 +2910,7 @@ function SourceRow({
|
|
|
2910
2910
|
"p",
|
|
2911
2911
|
{
|
|
2912
2912
|
role: "status",
|
|
2913
|
-
className: `mt-1 text-
|
|
2913
|
+
className: `mt-1 text-xs ${status === "unavailable" ? "text-destructive" : "text-muted-foreground"}`,
|
|
2914
2914
|
children: [
|
|
2915
2915
|
statusLine,
|
|
2916
2916
|
status === "unavailable" && onRetrySource && /* @__PURE__ */ jsx9(
|
|
@@ -2918,7 +2918,7 @@ function SourceRow({
|
|
|
2918
2918
|
{
|
|
2919
2919
|
type: "button",
|
|
2920
2920
|
onClick: () => onRetrySource(source, record),
|
|
2921
|
-
className: "ml-2 rounded border border-border px-1.5 py-0.5 text-
|
|
2921
|
+
className: "ml-2 rounded border border-border px-1.5 py-0.5 text-xs font-medium text-foreground hover:bg-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
2922
2922
|
children: "Try again"
|
|
2923
2923
|
}
|
|
2924
2924
|
)
|
|
@@ -2981,7 +2981,7 @@ function ProvenanceValue({
|
|
|
2981
2981
|
};
|
|
2982
2982
|
}, [open]);
|
|
2983
2983
|
const summary = /* @__PURE__ */ jsxs7("span", { className: "inline-flex flex-wrap items-baseline gap-x-1.5", children: [
|
|
2984
|
-
record.label && /* @__PURE__ */ jsx9("span", { className: "text-
|
|
2984
|
+
record.label && /* @__PURE__ */ jsx9("span", { className: "text-xs text-muted-foreground", children: record.label }),
|
|
2985
2985
|
/* @__PURE__ */ jsx9("span", { className: hasValue ? "text-sm text-foreground" : "text-sm italic text-muted-foreground", children: hasValue ? record.display : missingValueLabel })
|
|
2986
2986
|
] });
|
|
2987
2987
|
if (maxDepth <= 0) {
|
|
@@ -2996,14 +2996,14 @@ function ProvenanceValue({
|
|
|
2996
2996
|
/* @__PURE__ */ jsxs7(
|
|
2997
2997
|
"span",
|
|
2998
2998
|
{
|
|
2999
|
-
className: `ml-1.5 inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-
|
|
2999
|
+
className: `ml-1.5 inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-xs font-medium ${BASIS_TONES[record.basis]}`,
|
|
3000
3000
|
children: [
|
|
3001
3001
|
/* @__PURE__ */ jsx9(BasisGlyph, { basis: record.basis, className: "h-3 w-3" }),
|
|
3002
3002
|
basisMeta.label
|
|
3003
3003
|
]
|
|
3004
3004
|
}
|
|
3005
3005
|
),
|
|
3006
|
-
/* @__PURE__ */ jsx9("span", { className: "mt-0.5 block text-
|
|
3006
|
+
/* @__PURE__ */ jsx9("span", { className: "mt-0.5 block text-xs text-muted-foreground", children: describeProvenance(record) })
|
|
3007
3007
|
]
|
|
3008
3008
|
}
|
|
3009
3009
|
);
|
|
@@ -3028,7 +3028,7 @@ function ProvenanceValue({
|
|
|
3028
3028
|
"aria-expanded": open,
|
|
3029
3029
|
"aria-controls": panelId,
|
|
3030
3030
|
"aria-label": provenanceTriggerLabel(record, standing),
|
|
3031
|
-
className: `inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-
|
|
3031
|
+
className: `inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-xs font-medium transition hover:brightness-105 focus:outline-none focus-visible:ring-2 focus-visible:ring-ring ${BASIS_TONES[record.basis]}`,
|
|
3032
3032
|
children: [
|
|
3033
3033
|
/* @__PURE__ */ jsx9(BasisGlyph, { basis: record.basis, className: "h-3 w-3" }),
|
|
3034
3034
|
/* @__PURE__ */ jsx9("span", { "aria-hidden": true, children: basisMeta.label })
|
|
@@ -3038,7 +3038,7 @@ function ProvenanceValue({
|
|
|
3038
3038
|
standing !== "settled" && // Legible at rest: what to do about the value does not wait for
|
|
3039
3039
|
// someone to open the panel. `aria-hidden` because the trigger's
|
|
3040
3040
|
// accessible name already carries it — this is the visual half.
|
|
3041
|
-
/* @__PURE__ */ jsx9("span", { "aria-hidden": true, className: `text-
|
|
3041
|
+
/* @__PURE__ */ jsx9("span", { "aria-hidden": true, className: `text-xs font-medium ${STANDING_TONES[standing]}`, children: standingMeta.label })
|
|
3042
3042
|
] }),
|
|
3043
3043
|
open && /* @__PURE__ */ jsxs7(
|
|
3044
3044
|
"div",
|
|
@@ -3050,12 +3050,12 @@ function ProvenanceValue({
|
|
|
3050
3050
|
children: [
|
|
3051
3051
|
/* @__PURE__ */ jsxs7("div", { children: [
|
|
3052
3052
|
/* @__PURE__ */ jsx9("p", { className: "text-[12px] leading-snug text-foreground", children: describeProvenance(record) }),
|
|
3053
|
-
/* @__PURE__ */ jsxs7("p", { className: `mt-0.5 text-
|
|
3053
|
+
/* @__PURE__ */ jsxs7("p", { className: `mt-0.5 text-xs leading-snug ${STANDING_TONES[standing]}`, children: [
|
|
3054
3054
|
standingMeta.label,
|
|
3055
3055
|
" \u2014 ",
|
|
3056
3056
|
provenanceNextMove(record, standing, confidencePolicy)
|
|
3057
3057
|
] }),
|
|
3058
|
-
basisMeta.checkableAgainst === null && /* @__PURE__ */ jsxs7("p", { className: "mt-0.5 text-
|
|
3058
|
+
basisMeta.checkableAgainst === null && /* @__PURE__ */ jsxs7("p", { className: "mt-0.5 text-xs leading-snug text-muted-foreground", children: [
|
|
3059
3059
|
basisMeta.meaning,
|
|
3060
3060
|
" There is nothing outside the model to check it against."
|
|
3061
3061
|
] })
|
|
@@ -3073,11 +3073,11 @@ function ProvenanceValue({
|
|
|
3073
3073
|
gaps.filter((gap) => gap.kind !== "unavailable-source").map((gap) => (
|
|
3074
3074
|
// An unavailable source already states itself on its own row; a
|
|
3075
3075
|
// structural gap has no row to state it, so it gets one here.
|
|
3076
|
-
/* @__PURE__ */ jsx9("p", { className: "rounded-md bg-destructive/10 px-2 py-1.5 text-
|
|
3076
|
+
/* @__PURE__ */ jsx9("p", { className: "rounded-md bg-destructive/10 px-2 py-1.5 text-xs leading-snug text-destructive", children: gap.message }, gap.kind)
|
|
3077
3077
|
)),
|
|
3078
|
-
loading.length > 0 && sources.length === 0 && /* @__PURE__ */ jsx9("p", { role: "status", className: "text-
|
|
3078
|
+
loading.length > 0 && sources.length === 0 && /* @__PURE__ */ jsx9("p", { role: "status", className: "text-xs text-muted-foreground", children: "Looking up where this came from\u2026" }),
|
|
3079
3079
|
inputs.length > 0 && /* @__PURE__ */ jsxs7("div", { className: "border-t border-border pt-2", children: [
|
|
3080
|
-
/* @__PURE__ */ jsx9("p", { className: "text-
|
|
3080
|
+
/* @__PURE__ */ jsx9("p", { className: "text-xs font-medium uppercase tracking-[0.05em] text-muted-foreground", children: record.derivation ? `Computed from ${record.derivation}` : "Computed from" }),
|
|
3081
3081
|
/* @__PURE__ */ jsx9("ul", { className: "mt-1.5 space-y-1.5", children: inputs.map((input, index) => /* @__PURE__ */ jsx9("li", { children: /* @__PURE__ */ jsx9(
|
|
3082
3082
|
ProvenanceValue,
|
|
3083
3083
|
{
|
|
@@ -3101,11 +3101,11 @@ function ProvenanceLegend({ bases, className }) {
|
|
|
3101
3101
|
if (bases.length === 0) return null;
|
|
3102
3102
|
return /* @__PURE__ */ jsx9("ul", { className: `flex flex-wrap items-center gap-x-3 gap-y-1.5 ${className ?? ""}`, children: bases.map((basis) => {
|
|
3103
3103
|
const meta = provenanceBasisMeta(basis);
|
|
3104
|
-
return /* @__PURE__ */ jsxs7("li", { className: "flex items-center gap-1.5 text-
|
|
3104
|
+
return /* @__PURE__ */ jsxs7("li", { className: "flex items-center gap-1.5 text-xs text-muted-foreground", children: [
|
|
3105
3105
|
/* @__PURE__ */ jsxs7(
|
|
3106
3106
|
"span",
|
|
3107
3107
|
{
|
|
3108
|
-
className: `inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-
|
|
3108
|
+
className: `inline-flex items-center gap-1 rounded-full border px-1.5 py-0.5 text-xs font-medium ${BASIS_TONES[basis]}`,
|
|
3109
3109
|
children: [
|
|
3110
3110
|
/* @__PURE__ */ jsx9(BasisGlyph, { basis, className: "h-3 w-3" }),
|
|
3111
3111
|
meta.label
|
|
@@ -3165,7 +3165,7 @@ function SeatPaywall({
|
|
|
3165
3165
|
const recurringUsage = offer ? usd(offer.recurring.includedCreditsCents) : `$${includedUsageUsd}`;
|
|
3166
3166
|
const introductory = offer?.introductory ?? null;
|
|
3167
3167
|
return /* @__PURE__ */ jsx10("div", { className: "flex min-h-[60vh] w-full items-center justify-center p-6", children: /* @__PURE__ */ jsxs8("div", { className: "w-full max-w-md rounded-2xl border border-card-edge bg-card p-8", children: [
|
|
3168
|
-
/* @__PURE__ */ jsx10("p", { className: "text-
|
|
3168
|
+
/* @__PURE__ */ jsx10("p", { className: "text-xs font-semibold uppercase tracking-[0.05em] text-muted-foreground", children: product }),
|
|
3169
3169
|
/* @__PURE__ */ jsxs8("h1", { className: "mt-2 text-2xl font-semibold tracking-tight text-foreground", children: [
|
|
3170
3170
|
"Unlock ",
|
|
3171
3171
|
product
|
|
@@ -4727,7 +4727,7 @@ function RecordGrid({
|
|
|
4727
4727
|
className: "w-full border-collapse text-left text-sm",
|
|
4728
4728
|
onKeyDown: handleGridKeyDown,
|
|
4729
4729
|
children: [
|
|
4730
|
-
/* @__PURE__ */ jsx12("thead", { children: /* @__PURE__ */ jsxs10("tr", { role: "row", className: "border-b border-border text-
|
|
4730
|
+
/* @__PURE__ */ jsx12("thead", { children: /* @__PURE__ */ jsxs10("tr", { role: "row", className: "border-b border-border text-xs uppercase tracking-[0.05em] text-muted-foreground", children: [
|
|
4731
4731
|
columns.map((column) => /* @__PURE__ */ jsx12(
|
|
4732
4732
|
"th",
|
|
4733
4733
|
{
|
|
@@ -4771,7 +4771,7 @@ function RecordGrid({
|
|
|
4771
4771
|
onCancel: () => cancelEdit(row, column)
|
|
4772
4772
|
}
|
|
4773
4773
|
),
|
|
4774
|
-
cellError !== void 0 && /* @__PURE__ */ jsx12("p", { id: errorId, role: "alert", className: "mt-1 text-
|
|
4774
|
+
cellError !== void 0 && /* @__PURE__ */ jsx12("p", { id: errorId, role: "alert", className: "mt-1 text-xs leading-snug text-destructive", children: cellError })
|
|
4775
4775
|
] }, column.id);
|
|
4776
4776
|
}
|
|
4777
4777
|
if (column.kind === "boolean" && editable) {
|
|
@@ -5049,7 +5049,7 @@ function SourceMarker({ panelId, columnHeader, rowLabel, source, open, onToggle
|
|
|
5049
5049
|
source.quote,
|
|
5050
5050
|
"\u201D"
|
|
5051
5051
|
] }),
|
|
5052
|
-
/* @__PURE__ */ jsxs10("span", { className: "mt-2 block text-
|
|
5052
|
+
/* @__PURE__ */ jsxs10("span", { className: "mt-2 block text-xs text-muted-foreground", children: [
|
|
5053
5053
|
source.label ?? "Source",
|
|
5054
5054
|
source.locator ? ` \xB7 ${source.locator}` : "",
|
|
5055
5055
|
` \xB7 ${BASIS_TITLES[basis]}`
|
|
@@ -5061,7 +5061,7 @@ function SourceMarker({ panelId, columnHeader, rowLabel, source, open, onToggle
|
|
|
5061
5061
|
target: "_blank",
|
|
5062
5062
|
rel: "noreferrer",
|
|
5063
5063
|
onClick: (event) => event.stopPropagation(),
|
|
5064
|
-
className: "mt-1.5 inline-block text-
|
|
5064
|
+
className: "mt-1.5 inline-block text-xs font-medium text-primary underline-offset-2 hover:underline",
|
|
5065
5065
|
children: "Open source"
|
|
5066
5066
|
}
|
|
5067
5067
|
)
|
|
@@ -5129,8 +5129,8 @@ function AddRecordForm({
|
|
|
5129
5129
|
onValue: (next) => setDraft({ ...draft, [column.id]: next })
|
|
5130
5130
|
}
|
|
5131
5131
|
),
|
|
5132
|
-
column.hint && /* @__PURE__ */ jsx12("p", { className: "mt-1 text-
|
|
5133
|
-
message !== void 0 && /* @__PURE__ */ jsx12("p", { id: errorId, role: "alert", className: "mt-1 text-
|
|
5132
|
+
column.hint && /* @__PURE__ */ jsx12("p", { className: "mt-1 text-xs text-muted-foreground", children: column.hint }),
|
|
5133
|
+
message !== void 0 && /* @__PURE__ */ jsx12("p", { id: errorId, role: "alert", className: "mt-1 text-xs text-destructive", children: message })
|
|
5134
5134
|
]
|
|
5135
5135
|
},
|
|
5136
5136
|
column.id
|
|
@@ -5268,7 +5268,7 @@ function RunDrillIn({ run, onClose }) {
|
|
|
5268
5268
|
),
|
|
5269
5269
|
/* @__PURE__ */ jsxs11("div", { className: "min-w-0 flex-1", children: [
|
|
5270
5270
|
/* @__PURE__ */ jsx13("p", { className: "truncate text-[15px] font-semibold", children: run.title }),
|
|
5271
|
-
/* @__PURE__ */ jsx13("p", { className: "truncate font-mono text-
|
|
5271
|
+
/* @__PURE__ */ jsx13("p", { className: "truncate font-mono text-xs text-muted-foreground", children: run.toolName })
|
|
5272
5272
|
] }),
|
|
5273
5273
|
/* @__PURE__ */ jsx13(
|
|
5274
5274
|
"button",
|
|
@@ -5285,14 +5285,14 @@ function RunDrillIn({ run, onClose }) {
|
|
|
5285
5285
|
run.steps.length === 0 && /* @__PURE__ */ jsx13("p", { className: "text-sm text-muted-foreground", children: "No steps recorded yet." }),
|
|
5286
5286
|
run.steps.map((step, i) => /* @__PURE__ */ jsxs11("div", { className: "rounded-lg border border-card-edge bg-card", children: [
|
|
5287
5287
|
/* @__PURE__ */ jsxs11("div", { className: "flex items-baseline gap-2 border-b border-border px-3 py-1.5", children: [
|
|
5288
|
-
/* @__PURE__ */ jsx13("span", { className: `font-mono text-
|
|
5288
|
+
/* @__PURE__ */ jsx13("span", { className: `font-mono text-xs ${step.status === "error" ? "text-destructive" : "text-muted-foreground"}`, children: step.status === "error" ? "\u2717" : "$" }),
|
|
5289
5289
|
/* @__PURE__ */ jsx13("code", { className: "min-w-0 flex-1 truncate font-mono text-xs", children: step.label }),
|
|
5290
|
-
/* @__PURE__ */ jsx13("span", { className: "shrink-0 text-
|
|
5290
|
+
/* @__PURE__ */ jsx13("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: new Date(step.at).toLocaleTimeString([], { hour: "numeric", minute: "2-digit" }) })
|
|
5291
5291
|
] }),
|
|
5292
|
-
step.detail && /* @__PURE__ */ jsx13("pre", { className: "max-h-48 overflow-auto whitespace-pre-wrap px-3 py-2 font-mono text-
|
|
5292
|
+
step.detail && /* @__PURE__ */ jsx13("pre", { className: "max-h-48 overflow-auto whitespace-pre-wrap px-3 py-2 font-mono text-xs leading-relaxed text-muted-foreground", children: step.detail })
|
|
5293
5293
|
] }, i))
|
|
5294
5294
|
] }),
|
|
5295
|
-
/* @__PURE__ */ jsx13("p", { className: "border-t border-border px-4 py-2 text-
|
|
5295
|
+
/* @__PURE__ */ jsx13("p", { className: "border-t border-border px-4 py-2 text-xs text-muted-foreground", children: "Read-only transcript \u2014 reply in the main chat." })
|
|
5296
5296
|
] });
|
|
5297
5297
|
}
|
|
5298
5298
|
function pendingApprovalOf(call) {
|
|
@@ -5310,7 +5310,7 @@ function ChatEmptyState({
|
|
|
5310
5310
|
const doorsGridClass = doorCount === 1 ? "mx-auto max-w-sm sm:grid-cols-1" : doorCount === 2 ? "sm:grid-cols-2" : "sm:grid-cols-3";
|
|
5311
5311
|
return /* @__PURE__ */ jsxs11("div", { className: "mx-auto flex w-full max-w-2xl flex-col items-center px-6 py-12 text-center sm:py-20", children: [
|
|
5312
5312
|
/* @__PURE__ */ jsx13("span", { className: "mb-5 inline-flex h-14 w-14 items-center justify-center rounded-2xl bg-primary/10 ring-1 ring-primary/15", children: /* @__PURE__ */ jsx13(BrandMark, { size: 32, className: "shrink-0" }) }),
|
|
5313
|
-
/* @__PURE__ */ jsx13("p", { className: "text-
|
|
5313
|
+
/* @__PURE__ */ jsx13("p", { className: "text-xs font-semibold uppercase tracking-[0.05em] text-muted-foreground", children: productName }),
|
|
5314
5314
|
/* @__PURE__ */ jsx13("h2", { className: "mt-1.5 text-balance text-2xl font-semibold leading-tight text-foreground", children: headline }),
|
|
5315
5315
|
subline && /* @__PURE__ */ jsx13("p", { className: "mt-3 max-w-md text-[15px] leading-relaxed text-muted-foreground", children: subline }),
|
|
5316
5316
|
doors && doors.length > 0 && /* @__PURE__ */ jsx13("div", { className: `mt-7 grid w-full gap-2.5 ${doorsGridClass}`, children: doors.slice(0, 3).map((door, i) => /* @__PURE__ */ jsxs11(
|
|
@@ -5439,14 +5439,14 @@ function KvRows({ data }) {
|
|
|
5439
5439
|
const entries = Object.entries(data).filter(([, v]) => v !== void 0 && v !== null && v !== "");
|
|
5440
5440
|
if (!entries.length) return null;
|
|
5441
5441
|
return /* @__PURE__ */ jsx13("dl", { className: "grid grid-cols-[auto_1fr] gap-x-3 gap-y-1", children: entries.map(([k, v]) => /* @__PURE__ */ jsxs11("div", { className: "contents", children: [
|
|
5442
|
-
/* @__PURE__ */ jsx13("dt", { className: "font-mono text-
|
|
5443
|
-
/* @__PURE__ */ jsx13("dd", { className: "min-w-0 whitespace-pre-wrap break-words font-mono text-
|
|
5442
|
+
/* @__PURE__ */ jsx13("dt", { className: "font-mono text-xs text-muted-foreground", children: k }),
|
|
5443
|
+
/* @__PURE__ */ jsx13("dd", { className: "min-w-0 whitespace-pre-wrap break-words font-mono text-xs text-muted-foreground", children: truncate(v) })
|
|
5444
5444
|
] }, k)) });
|
|
5445
5445
|
}
|
|
5446
5446
|
function ShellDetail({ call }) {
|
|
5447
5447
|
const outcome = toolOutcomeOf(call);
|
|
5448
5448
|
const r = outcome?.result ?? {};
|
|
5449
|
-
return /* @__PURE__ */ jsxs11("div", { className: "overflow-hidden rounded-md bg-zinc-900 font-mono text-
|
|
5449
|
+
return /* @__PURE__ */ jsxs11("div", { className: "overflow-hidden rounded-md bg-zinc-900 font-mono text-xs leading-relaxed", children: [
|
|
5450
5450
|
/* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2 px-3 pt-2 text-zinc-400", children: [
|
|
5451
5451
|
/* @__PURE__ */ jsx13("span", { className: "select-none text-zinc-500", children: "$" }),
|
|
5452
5452
|
/* @__PURE__ */ jsx13("span", { className: "min-w-0 flex-1 truncate text-zinc-200", children: String(call.args?.command ?? "") }),
|
|
@@ -5463,15 +5463,15 @@ function DefaultToolDetail({ call }) {
|
|
|
5463
5463
|
const envelope = typeof result === "object" && result !== null ? result : null;
|
|
5464
5464
|
return /* @__PURE__ */ jsxs11("div", { className: "space-y-2", children: [
|
|
5465
5465
|
call.args && Object.keys(call.args).length > 0 && /* @__PURE__ */ jsxs11("div", { children: [
|
|
5466
|
-
/* @__PURE__ */ jsx13("p", { className: "mb-1 text-
|
|
5466
|
+
/* @__PURE__ */ jsx13("p", { className: "mb-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Called with" }),
|
|
5467
5467
|
/* @__PURE__ */ jsx13(KvRows, { data: call.args })
|
|
5468
5468
|
] }),
|
|
5469
5469
|
envelope ? /* @__PURE__ */ jsxs11("div", { children: [
|
|
5470
|
-
/* @__PURE__ */ jsx13("p", { className: "mb-1 text-
|
|
5471
|
-
envelope.ok === false ? /* @__PURE__ */ jsx13("p", { className: "text-xs text-destructive", children: envelope.message ?? "Tool failed" }) : envelope.result && typeof envelope.result === "object" ? /* @__PURE__ */ jsx13(KvRows, { data: envelope.result }) : envelope.result != null ? /* @__PURE__ */ jsx13("p", { className: "font-mono text-
|
|
5470
|
+
/* @__PURE__ */ jsx13("p", { className: "mb-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: envelope.ok === false ? "Failed" : "Result" }),
|
|
5471
|
+
envelope.ok === false ? /* @__PURE__ */ jsx13("p", { className: "text-xs text-destructive", children: envelope.message ?? "Tool failed" }) : envelope.result && typeof envelope.result === "object" ? /* @__PURE__ */ jsx13(KvRows, { data: envelope.result }) : envelope.result != null ? /* @__PURE__ */ jsx13("p", { className: "font-mono text-xs text-muted-foreground", children: truncate(envelope.result) }) : null
|
|
5472
5472
|
] }) : result != null ? /* @__PURE__ */ jsxs11("div", { children: [
|
|
5473
|
-
/* @__PURE__ */ jsx13("p", { className: "mb-1 text-
|
|
5474
|
-
/* @__PURE__ */ jsx13("p", { className: "font-mono text-
|
|
5473
|
+
/* @__PURE__ */ jsx13("p", { className: "mb-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Result" }),
|
|
5474
|
+
/* @__PURE__ */ jsx13("p", { className: "font-mono text-xs text-muted-foreground", children: truncate(result) })
|
|
5475
5475
|
] }) : null
|
|
5476
5476
|
] });
|
|
5477
5477
|
}
|
|
@@ -5490,11 +5490,11 @@ function ProposalCard({
|
|
|
5490
5490
|
/* @__PURE__ */ jsxs11("div", { className: "flex items-start gap-2.5 px-4 pt-3.5", children: [
|
|
5491
5491
|
/* @__PURE__ */ jsx13("span", { className: "mt-0.5 inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-warning/15 text-warning", children: /* @__PURE__ */ jsx13(ToolGlyph, { name: call.name, className: "h-3.5 w-3.5" }) }),
|
|
5492
5492
|
/* @__PURE__ */ jsxs11("div", { className: "min-w-0 flex-1", children: [
|
|
5493
|
-
/* @__PURE__ */ jsx13("p", { className: "text-
|
|
5493
|
+
/* @__PURE__ */ jsx13("p", { className: "text-xs font-semibold uppercase tracking-[0.05em] text-warning-strong", children: approval ? "Needs your approval" : "Awaiting approval" }),
|
|
5494
5494
|
/* @__PURE__ */ jsx13("p", { className: "mt-0.5 text-[15px] font-semibold leading-snug text-foreground", children: friendlyToolTitle(call) }),
|
|
5495
5495
|
summary && /* @__PURE__ */ jsx13("p", { className: "mt-1 text-xs leading-relaxed text-muted-foreground", children: summary }),
|
|
5496
5496
|
typeSlug && /* @__PURE__ */ jsx13("p", { className: "mt-1 font-mono text-xs text-muted-foreground", children: typeSlug }),
|
|
5497
|
-
meta.length > 0 && /* @__PURE__ */ jsx13("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5", children: meta.map((m, i) => /* @__PURE__ */ jsx13("span", { className: "rounded-full bg-secondary px-2 py-0.5 text-
|
|
5497
|
+
meta.length > 0 && /* @__PURE__ */ jsx13("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5", children: meta.map((m, i) => /* @__PURE__ */ jsx13("span", { className: "rounded-full bg-secondary px-2 py-0.5 text-xs font-medium text-muted-foreground", children: m }, i)) })
|
|
5498
5498
|
] })
|
|
5499
5499
|
] }),
|
|
5500
5500
|
/* @__PURE__ */ jsxs11("div", { className: "flex flex-wrap items-center gap-2 px-4 pb-3.5 pt-3", children: [
|
|
@@ -5722,7 +5722,7 @@ function SegmentedBody({
|
|
|
5722
5722
|
streaming && segments[lastIndex]?.kind === "tool" && /* @__PURE__ */ jsx13(StreamingCaret, {})
|
|
5723
5723
|
] });
|
|
5724
5724
|
}
|
|
5725
|
-
var QUIET_META_LANE_CLASS = "mt-1 flex h-[18px] items-center gap-2 text-
|
|
5725
|
+
var QUIET_META_LANE_CLASS = "mt-1 flex h-[18px] items-center gap-2 text-xs tabular-nums text-muted-foreground opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100 motion-reduce:transition-none [@media(hover:none)]:opacity-100";
|
|
5726
5726
|
function copyTextOf(msg) {
|
|
5727
5727
|
const textRuns = msg.segments?.filter((s) => s.kind === "text") ?? [];
|
|
5728
5728
|
if (textRuns.length > 0) return textRuns.map((s) => s.content).join("\n\n");
|
|
@@ -5804,7 +5804,7 @@ function AssistantMessageImpl({
|
|
|
5804
5804
|
);
|
|
5805
5805
|
const quiet = chrome === "quiet";
|
|
5806
5806
|
return /* @__PURE__ */ jsxs11("div", { className: `mx-auto w-full max-w-3xl px-6 ${quiet ? "group pb-1 pt-3" : "py-3"}`, children: [
|
|
5807
|
-
!quiet && /* @__PURE__ */ jsxs11("div", { className: "mb-1 flex items-baseline gap-2 text-
|
|
5807
|
+
!quiet && /* @__PURE__ */ jsxs11("div", { className: "mb-1 flex items-baseline gap-2 text-xs tabular-nums text-muted-foreground", children: [
|
|
5808
5808
|
/* @__PURE__ */ jsx13("span", { className: "font-semibold uppercase tracking-[0.05em]", children: agentLabel }),
|
|
5809
5809
|
msg.modelUsed && /* @__PURE__ */ jsx13("span", { className: "font-mono normal-case", children: msg.modelUsed }),
|
|
5810
5810
|
formatTokensPerSecond(msg) && /* @__PURE__ */ jsx13("span", { children: formatTokensPerSecond(msg) }),
|
|
@@ -5903,7 +5903,7 @@ function useThinkingSeconds(active) {
|
|
|
5903
5903
|
function ThinkingRow({ agentLabel, chrome = "labeled" }) {
|
|
5904
5904
|
const seconds = useThinkingSeconds(true);
|
|
5905
5905
|
return /* @__PURE__ */ jsxs11("div", { className: "mx-auto w-full max-w-3xl px-6 py-3", children: [
|
|
5906
|
-
chrome !== "quiet" && /* @__PURE__ */ jsx13("p", { className: "mb-1 text-
|
|
5906
|
+
chrome !== "quiet" && /* @__PURE__ */ jsx13("p", { className: "mb-1 text-xs font-semibold uppercase tracking-[0.05em] text-muted-foreground", children: agentLabel }),
|
|
5907
5907
|
/* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2 text-[15px] text-muted-foreground", children: [
|
|
5908
5908
|
/* @__PURE__ */ jsx13("svg", { className: "h-4 w-4 animate-spin", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", "aria-hidden": true, children: /* @__PURE__ */ jsx13("path", { d: "M21 12a9 9 0 1 1-6.219-8.56", strokeLinecap: "round" }) }),
|
|
5909
5909
|
"Thinking",
|
|
@@ -5923,7 +5923,7 @@ function StreamErrorRow({ message, onRetry }) {
|
|
|
5923
5923
|
{
|
|
5924
5924
|
type: "button",
|
|
5925
5925
|
onClick: onRetry,
|
|
5926
|
-
className: `shrink-0 rounded border border-destructive/40 bg-card px-2 py-0.5 text-
|
|
5926
|
+
className: `shrink-0 rounded border border-destructive/40 bg-card px-2 py-0.5 text-xs font-medium text-destructive transition hover:bg-destructive/10 ${POPOVER_OPTION_FOCUS}`,
|
|
5927
5927
|
children: "Retry"
|
|
5928
5928
|
}
|
|
5929
5929
|
)
|
|
@@ -5951,7 +5951,7 @@ function ChatMessages({
|
|
|
5951
5951
|
resolveAttachmentUrl,
|
|
5952
5952
|
workProductCards
|
|
5953
5953
|
}) {
|
|
5954
|
-
const messageClassName = messageSize === "large" ? "agent-app-message-copy text-[
|
|
5954
|
+
const messageClassName = messageSize === "large" ? "agent-app-message-copy text-[17px] leading-[1.6]" : "agent-app-message-copy text-base leading-[1.6]";
|
|
5955
5955
|
const renderBody = useMemo7(
|
|
5956
5956
|
() => renderMarkdown ?? ((content) => /* @__PURE__ */ jsx13("p", { className: "whitespace-pre-wrap", children: content })),
|
|
5957
5957
|
[renderMarkdown]
|
|
@@ -5970,7 +5970,7 @@ function ChatMessages({
|
|
|
5970
5970
|
messages.map(
|
|
5971
5971
|
(msg) => msg.role === "user" ? /* @__PURE__ */ jsxs11("div", { className: `mx-auto w-full max-w-3xl px-6 ${quiet ? "group pb-1 pt-3" : "py-3"}`, children: [
|
|
5972
5972
|
/* @__PURE__ */ jsxs11("div", { className: `ml-auto w-fit ${quiet ? "max-w-[72%]" : "max-w-[85%]"}`, children: [
|
|
5973
|
-
!quiet && /* @__PURE__ */ jsx13("p", { className: "mb-1 text-right text-
|
|
5973
|
+
!quiet && /* @__PURE__ */ jsx13("p", { className: "mb-1 text-right text-xs font-semibold uppercase tracking-[0.05em] text-muted-foreground", children: userLabel }),
|
|
5974
5974
|
/* @__PURE__ */ jsx13(
|
|
5975
5975
|
"div",
|
|
5976
5976
|
{
|
|
@@ -6128,4 +6128,4 @@ export {
|
|
|
6128
6128
|
useThinkingSeconds,
|
|
6129
6129
|
ChatMessages
|
|
6130
6130
|
};
|
|
6131
|
-
//# sourceMappingURL=chunk-
|
|
6131
|
+
//# sourceMappingURL=chunk-ZAKKG6WI.js.map
|