diff --git a/apps/app/next.config.ts b/apps/app/next.config.ts index af2ceb8a0..223327801 100644 --- a/apps/app/next.config.ts +++ b/apps/app/next.config.ts @@ -61,6 +61,8 @@ const config: NextConfig = { ], }, + serverExternalPackages: ['jspdf'], + experimental: { serverActions: { // NOTE: Attachment uploads may be sent as base64 strings, which increases payload size. diff --git a/apps/app/package.json b/apps/app/package.json index 262fe8df2..4a8e8e4b1 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -19,9 +19,6 @@ "@browserbasehq/stagehand": "^3.0.5", "@calcom/atoms": "^1.0.102-framer", "@calcom/embed-react": "^1.5.3", - "@trycompai/auth": "workspace:*", - "@trycompai/company": "workspace:*", - "@trycompai/integration-platform": "workspace:*", "@date-fns/tz": "^1.2.0", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", @@ -68,9 +65,12 @@ "@tiptap/react": "3.16.0", "@trigger.dev/react-hooks": "4.4.3", "@trigger.dev/sdk": "4.4.3", + "@trycompai/auth": "workspace:*", + "@trycompai/company": "workspace:*", "@trycompai/db": "1.3.22", "@trycompai/design-system": "^1.0.32", "@trycompai/email": "workspace:*", + "@trycompai/integration-platform": "workspace:*", "@types/canvas-confetti": "^1.9.0", "@types/react-syntax-highlighter": "^15.5.13", "@types/three": "^0.180.0", @@ -100,7 +100,7 @@ "mammoth": "^1.11.0", "motion": "^12.35.0", "nanoid": "^5.1.6", - "next": "^16.0.10", + "next": "^16.2.0", "next-safe-action": "^8.0.3", "next-themes": "^0.4.4", "nuqs": "^2.4.3", diff --git a/apps/app/src/app/(app)/[orgId]/documents/[formType]/page.tsx b/apps/app/src/app/(app)/[orgId]/documents/[formType]/page.tsx index 99aa17aa5..45fa4f409 100644 --- a/apps/app/src/app/(app)/[orgId]/documents/[formType]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/documents/[formType]/page.tsx @@ -2,6 +2,7 @@ import { CompanyFormPageClient } from '@/app/(app)/[orgId]/documents/components/ import { Breadcrumb, PageLayout } from '@trycompai/design-system'; import Link from 'next/link'; import { notFound } from 'next/navigation'; +import { Suspense } from 'react'; import { evidenceFormDefinitions, evidenceFormTypeSchema } from '../forms'; export default async function CompanyFormDetailPage({ @@ -30,10 +31,12 @@ export default async function CompanyFormDetailPage({ { label: formDefinition.title, isCurrent: true }, ]} /> - + + + ); } diff --git a/apps/app/src/app/(app)/[orgId]/documents/components/CompanyFormPageClient.tsx b/apps/app/src/app/(app)/[orgId]/documents/components/CompanyFormPageClient.tsx index c701bcc3c..73927bba3 100644 --- a/apps/app/src/app/(app)/[orgId]/documents/components/CompanyFormPageClient.tsx +++ b/apps/app/src/app/(app)/[orgId]/documents/components/CompanyFormPageClient.tsx @@ -31,12 +31,17 @@ import { InputGroupAddon, InputGroupInput, PageHeader, + Stack, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, + Tabs, + TabsContent, + TabsList, + TabsTrigger, Text, } from '@trycompai/design-system'; import { @@ -57,7 +62,7 @@ import { DialogTitle, } from '@trycompai/ui/dialog'; import Link from 'next/link'; -import { useRouter } from 'next/navigation'; +import { useRouter, useSearchParams } from 'next/navigation'; import { useCallback, useMemo, useRef, useState } from 'react'; import { toast } from 'sonner'; import useSWR, { useSWRConfig } from 'swr'; @@ -147,6 +152,8 @@ export function CompanyFormPageClient({ isPlatformAdmin?: boolean; }) { const router = useRouter(); + const searchParams = useSearchParams(); + const defaultTab = searchParams.get('tab') || 'submissions'; const { mutate: globalMutate } = useSWRConfig(); const [search, setSearch] = useState(''); const [isExporting, setIsExporting] = useState(false); @@ -397,175 +404,185 @@ export function CompanyFormPageClient({ - {/* ─── Submissions List ─── */} -
-
- - - - - setSearch(event.target.value)} - /> - -
- - {isLoading ? ( - - - - - - No submissions yet - - Start by creating a new submission, click the New Submission button above. - - - - ) : !data || data.submissions.length === 0 ? ( - - - - - - No submissions yet - - Start by creating a new submission, click the New Submission button above. - - - - ) : ( - - - - {isMeeting && } - - {formType === 'access-request' && } - {showSummaryColumn && } - {isAdminOrOwner && } - - - - -
Submission Date
-
- {isMeeting && ( - -
Meeting Type
-
- )} - -
Submitted By
-
- {formType === 'access-request' && ( - -
Status
-
- )} - {showSummaryColumn && Summary} - {isAdminOrOwner && ( - -
Actions
-
- )} -
-
- - {data.submissions.map((submission) => { - const summaryValue = summaryField - ? String(submission.data[summaryField.key] ?? '') - : ''; - const matrixSummary = matrixSummaryField - ? `${getMatrixRowCount(submission.data[matrixSummaryField.key])} row(s)` - : ''; - const rowSummary = summaryField ? truncate(summaryValue, 80) : matrixSummary; - - const submissionFormType = submission.formType ?? formType; - - return ( - - router.push( - `/${organizationId}/documents/${submissionFormType}/submissions/${submission.id}`, - ) - } - style={{ cursor: 'pointer' }} - > - -
- {formatSubmissionDate( - submission.data.submissionDate, - submission.submittedAt, - )} -
-
+ + + + Submissions + Findings + + + +
+
+ + + + + setSearch(event.target.value)} + /> + +
+ + {isLoading ? ( + + + + + + No submissions yet + + Start by creating a new submission, click the New Submission button above. + + + + ) : !data || data.submissions.length === 0 ? ( + + + + + + No submissions yet + + Start by creating a new submission, click the New Submission button above. + + + + ) : ( +
+ + + {isMeeting && } + + {formType === 'access-request' && } + {showSummaryColumn && } + {isAdminOrOwner && } + + + + +
Submission Date
+
{isMeeting && ( - - - {MEETING_TYPE_LABELS[submissionFormType] ?? submissionFormType} - - + +
Meeting Type
+
)} - - - {submission.submittedBy?.name ?? submission.submittedBy?.email ?? 'Unknown'} - - + +
Submitted By
+
{formType === 'access-request' && ( - -
- -
-
- )} - {showSummaryColumn && ( - - - {rowSummary || '—'} - - + +
Status
+
)} + {showSummaryColumn && Summary} {isAdminOrOwner && ( - e.stopPropagation()}> -
- - e.stopPropagation()} - > - - - - { - e.stopPropagation(); - setSubmissionToDelete(submission); - setDeleteDialogOpen(true); - }} - > - - Delete - - - -
-
+ +
Actions
+
)}
- ); - })} - -
- )} -
+ + + {data.submissions.map((submission) => { + const summaryValue = summaryField + ? String(submission.data[summaryField.key] ?? '') + : ''; + const matrixSummary = matrixSummaryField + ? `${getMatrixRowCount(submission.data[matrixSummaryField.key])} row(s)` + : ''; + const rowSummary = summaryField ? truncate(summaryValue, 80) : matrixSummary; + + const submissionFormType = submission.formType ?? formType; + + return ( + + router.push( + `/${organizationId}/documents/${submissionFormType}/submissions/${submission.id}`, + ) + } + style={{ cursor: 'pointer' }} + > + +
+ {formatSubmissionDate( + submission.data.submissionDate, + submission.submittedAt, + )} +
+
+ {isMeeting && ( + + + {MEETING_TYPE_LABELS[submissionFormType] ?? submissionFormType} + + + )} + + + {submission.submittedBy?.name ?? submission.submittedBy?.email ?? 'Unknown'} + + + {formType === 'access-request' && ( + +
+ +
+
+ )} + {showSummaryColumn && ( + + + {rowSummary || '—'} + + + )} + {isAdminOrOwner && ( + e.stopPropagation()}> +
+ + e.stopPropagation()} + > + + + + { + e.stopPropagation(); + setSubmissionToDelete(submission); + setDeleteDialogOpen(true); + }} + > + + Delete + + + +
+
+ )} +
+ ); + })} +
+ + )} + + - + + + + + +

No findings for this document

+ {canCreateFinding && ( +
+ +
+ )} + + ); } return ( diff --git a/apps/app/src/app/(app)/[orgId]/frameworks/components/FindingsOverview.tsx b/apps/app/src/app/(app)/[orgId]/frameworks/components/FindingsOverview.tsx index 6a3ad3db8..a4a536042 100644 --- a/apps/app/src/app/(app)/[orgId]/frameworks/components/FindingsOverview.tsx +++ b/apps/app/src/app/(app)/[orgId]/frameworks/components/FindingsOverview.tsx @@ -75,11 +75,11 @@ function FindingsList({ diff --git a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyHeaderActions.tsx b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyHeaderActions.tsx index 5d2bb4d45..b3a131d8d 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyHeaderActions.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/[policyId]/components/PolicyHeaderActions.tsx @@ -1,7 +1,6 @@ 'use client'; import { useAuditLogs } from '@/hooks/use-audit-logs'; -import { generatePolicyPDF } from '@/lib/pdf-generator'; import { Button } from '@trycompai/ui/button'; import { useSWRConfig } from 'swr'; import { @@ -177,7 +176,8 @@ export function PolicyHeaderActions({ const approvalLogs = auditLogs.filter((log) => log.description?.toLowerCase().includes('approved'), ); - generatePolicyPDF(policyContent, approvalLogs, policy.name || 'Policy Document'); + const { generatePolicyPDF } = await import('@/lib/pdf-generator'); + await generatePolicyPDF(policyContent, approvalLogs, policy.name || 'Policy Document'); } catch (error) { console.error('Error downloading policy PDF:', error); toast.error('Failed to generate policy PDF'); diff --git a/apps/app/src/app/(app)/[orgId]/policies/all/components/PolicyPageActions.tsx b/apps/app/src/app/(app)/[orgId]/policies/all/components/PolicyPageActions.tsx index 49accd784..bcea5f082 100644 --- a/apps/app/src/app/(app)/[orgId]/policies/all/components/PolicyPageActions.tsx +++ b/apps/app/src/app/(app)/[orgId]/policies/all/components/PolicyPageActions.tsx @@ -2,7 +2,6 @@ import { CreatePolicySheet } from '@/components/sheets/create-policy-sheet'; import { api } from '@/lib/api-client'; -import { downloadAllPolicies } from '@/lib/pdf-generator'; import { Add, Download } from '@carbon/icons-react'; import type { AuditLog, Member, Organization, Policy, User } from '@db'; import { Button, HStack } from '@trycompai/design-system'; @@ -43,7 +42,8 @@ export function PolicyPageActions({ policies }: PolicyPageActionsProps) { }), ); const policyLogs = Object.fromEntries(logsEntries); - downloadAllPolicies(policies, policyLogs); + const { downloadAllPolicies } = await import('@/lib/pdf-generator'); + await downloadAllPolicies(policies, policyLogs); } finally { setIsDownloadingAll(false); } diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx index e71c2b9f4..f44c5cf06 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/components/SingleTask.tsx @@ -39,7 +39,7 @@ import { } from '@trycompai/design-system'; import { CheckCircle2, Clock, Download, RefreshCw, SendHorizontal, Trash2, XCircle } from 'lucide-react'; import Link from 'next/link'; -import { useParams } from 'next/navigation'; +import { useParams, useSearchParams } from 'next/navigation'; import { useState } from 'react'; import { toast } from 'sonner'; import { Comments } from '../../../../../../components/comments/Comments'; @@ -77,8 +77,10 @@ export function SingleTask({ evidenceApprovalEnabled = false, }: SingleTaskProps) { const params = useParams(); + const searchParams = useSearchParams(); const orgId = params.orgId as string; const taskId = params.taskId as string; + const defaultTab = searchParams.get('tab') || 'overview'; const { task, @@ -310,7 +312,7 @@ export function SingleTask({ )} {/* Tabs */} - + Overview diff --git a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx index 814a2ee46..c35a0487f 100644 --- a/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx +++ b/apps/app/src/app/(app)/[orgId]/tasks/[taskId]/page.tsx @@ -11,6 +11,7 @@ import type { } from '@db'; import { headers } from 'next/headers'; import { redirect } from 'next/navigation'; +import { Suspense } from 'react'; import { SingleTask } from './components/SingleTask'; type TaskWithControls = Task & { controls: Control[] }; @@ -62,13 +63,15 @@ export default async function TaskPage({ } return ( - + + + ); } diff --git a/apps/app/src/app/posthog.ts b/apps/app/src/app/posthog.ts index f6fec74c9..d66bac14c 100644 --- a/apps/app/src/app/posthog.ts +++ b/apps/app/src/app/posthog.ts @@ -1,9 +1,9 @@ -import { Properties } from 'posthog-js'; -import { PostHog } from 'posthog-node'; +import type { Properties } from 'posthog-js'; +import type { PostHog } from 'posthog-node'; let posthogInstance: PostHog | null = null; -function getPostHogClient(): PostHog | null { +async function getPostHogClient(): Promise { if (posthogInstance) { return posthogInstance; } @@ -12,6 +12,7 @@ function getPostHogClient(): PostHog | null { const apiHost = process.env.NEXT_PUBLIC_POSTHOG_HOST; if (apiKey && apiHost) { + const { PostHog } = await import('posthog-node'); posthogInstance = new PostHog(apiKey, { flushAt: 1, flushInterval: 0, @@ -22,11 +23,10 @@ function getPostHogClient(): PostHog | null { return null; } -// Export the getter function as the primary way to access the client export { getPostHogClient }; export async function track(distinctId: string, eventName: string, properties?: Properties) { - const client = getPostHogClient(); + const client = await getPostHogClient(); if (!client) return; client.capture({ @@ -37,7 +37,7 @@ export async function track(distinctId: string, eventName: string, properties?: } export async function identify(distinctId: string, properties?: Properties) { - const client = getPostHogClient(); + const client = await getPostHogClient(); if (!client) return; client.identify({ @@ -47,7 +47,7 @@ export async function identify(distinctId: string, properties?: Properties) { } export async function getFeatureFlags(distinctId: string) { - const client = getPostHogClient(); + const client = await getPostHogClient(); if (!client) return {}; const flags = await client.getAllFlags(distinctId); diff --git a/apps/app/src/lib/pdf-generator.ts b/apps/app/src/lib/pdf-generator.ts index 68bd4ab85..00b629541 100644 --- a/apps/app/src/lib/pdf-generator.ts +++ b/apps/app/src/lib/pdf-generator.ts @@ -1,4 +1,9 @@ -import { jsPDF } from 'jspdf'; +import type { jsPDF as JsPDFType } from 'jspdf'; + +async function createPDF(): Promise { + const { jsPDF } = await import('jspdf'); + return new jsPDF(); +} import type { JSONContent as TipTapJSONContent } from '@tiptap/react'; import { AuditLog, User, Member, Organization, Policy } from '@db'; import { format } from 'date-fns'; @@ -453,10 +458,10 @@ const addPageNumbers = (config: PDFConfig) => { /** * Converts JSON content to a formatted PDF document */ -export function generatePolicyPDF(jsonContent: TipTapJSONContent[], logs: AuditLogWithRelations[], policyTitle?: string): void { +export async function generatePolicyPDF(jsonContent: TipTapJSONContent[], logs: AuditLogWithRelations[], policyTitle?: string): Promise { const internalContent = convertToInternalFormat(jsonContent); - - const doc = new jsPDF(); + + const doc = await createPDF(); const config: PDFConfig = { doc, pageWidth: doc.internal.pageSize.getWidth(), @@ -619,12 +624,12 @@ function convertJSONToHTML(content: JSONContent[]): string { /** * Downloads all policies into one PDF document */ -export function downloadAllPolicies( - policies: Policy[], +export async function downloadAllPolicies( + policies: Policy[], policyLogs: { [policyId: string]: AuditLogWithRelations[] }, organizationName?: string -): void { - const doc = new jsPDF(); +): Promise { + const doc = await createPDF(); const config: PDFConfig = { doc, pageWidth: doc.internal.pageSize.getWidth(), diff --git a/bun.lock b/bun.lock index ff2fb0172..96c4ed371 100644 --- a/bun.lock +++ b/bun.lock @@ -262,7 +262,7 @@ "mammoth": "^1.11.0", "motion": "^12.35.0", "nanoid": "^5.1.6", - "next": "^16.0.10", + "next": "^16.2.0", "next-safe-action": "^8.0.3", "next-themes": "^0.4.4", "nuqs": "^2.4.3", @@ -1505,25 +1505,25 @@ "@nestjs/throttler": ["@nestjs/throttler@6.5.0", "", { "peerDependencies": { "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "@nestjs/core": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "reflect-metadata": "^0.1.13 || ^0.2.0" } }, "sha512-9j0ZRfH0QE1qyrj9JjIRDz5gQLPqq9yVC2nHsrosDVAfI5HHw08/aUAWx9DZLSdQf4HDkmhTTEGLrRFHENvchQ=="], - "@next/env": ["@next/env@16.1.1", "", {}, "sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA=="], + "@next/env": ["@next/env@16.2.0", "", {}, "sha512-OZIbODWWAi0epQRCRjNe1VO45LOFBzgiyqmTLzIqWq6u1wrxKnAyz1HH6tgY/Mc81YzIjRPoYsPAEr4QV4l9TA=="], "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.5.2", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-lkLrRVxcftuOsJNhWatf1P2hNVfh98k/omQHrCEPPriUypR6RcS13IvLdIrEvkm9AH2Nu2YpR5vLqBuy6twH3Q=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/JZsqKzKt01IFoiLLAzlNqys7qk2F3JkcUhj50zuRhKDQkZNOz9E5N6wAQWprXdsvjRP4lTFj+/+36NSv5AwhQ=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.1.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-/hV8erWq4SNlVgglUiW5UmQ5Hwy5EW/AbbXlJCn6zkfKxTy/E/U3V8U1Ocm2YCTUoFgQdoMxRyRMOW5jYy4ygg=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-GkjL/Q7MWOwqWR9zoxu1TIHzkOI2l2BHCf7FzeQG87zPgs+6WDh+oC9Sw9ARuuL/FUk6JNCgKRkA6rEQYadUaw=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-1ffhC6KY5qWLg5miMlKJp3dZbXelEfjuXt1qcp5WzSCQy36CV3y+JT7OC1WSFKizGQCDOcQbfkH/IjZP3cdRNA=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-FmbDcZQ8yJRq93EJSL6xaE0KK/Rslraf8fj1uViGxg7K4CKBCRYSubILJPEhjSgZurpcPQq12QNOJQ0DRJl6Hg=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.0", "", { "os": "linux", "cpu": "x64" }, "sha512-HzjIHVkmGAwRbh/vzvoBWWEbb8BBZPxBvVbDQDvzHSf3D8RP/4vjw7MNLDXFF9Q1WEzeQyEj2zdxBtVAHu5Oyw=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.1.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-UMiFNQf5H7+1ZsZPxEsA064WEuFbRNq/kEXyepbCnSErp4f5iut75dBA8UeerFIG3vDaQNOfCpevnERPp2V+nA=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.0", "", { "os": "win32", "cpu": "x64" }, "sha512-DRrNJKW+/eimrZgdhVN1uvkN1OI4j6Lpefwr44jKQ0YQzztlmOBUUzHuV5GxOMPK3nmodAYElUVCY8ZXo/IWeA=="], "@next/third-parties": ["@next/third-parties@15.5.9", "", { "dependencies": { "third-party-capital": "1.0.20" }, "peerDependencies": { "next": "^13.0.0 || ^14.0.0 || ^15.0.0", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0" } }, "sha512-kX8u/o+NMUwib5Rn+J9zhx47wZZzgxW3Q/OTuqG4gcZS80jARZCU/9bQ5hGL6V9XGDWZiR/Lycs7Dg8Y+xOfCw=="], @@ -2963,7 +2963,7 @@ "base64id": ["base64id@2.0.0", "", {}, "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.9.11", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.9", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg=="], "basic-ftp": ["basic-ftp@5.0.5", "", {}, "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg=="], @@ -4799,7 +4799,7 @@ "netmask": ["netmask@2.0.2", "", {}, "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="], - "next": ["next@16.1.1", "", { "dependencies": { "@next/env": "16.1.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.1", "@next/swc-darwin-x64": "16.1.1", "@next/swc-linux-arm64-gnu": "16.1.1", "@next/swc-linux-arm64-musl": "16.1.1", "@next/swc-linux-x64-gnu": "16.1.1", "@next/swc-linux-x64-musl": "16.1.1", "@next/swc-win32-arm64-msvc": "16.1.1", "@next/swc-win32-x64-msvc": "16.1.1", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w=="], + "next": ["next@16.2.0", "", { "dependencies": { "@next/env": "16.2.0", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.0", "@next/swc-darwin-x64": "16.2.0", "@next/swc-linux-arm64-gnu": "16.2.0", "@next/swc-linux-arm64-musl": "16.2.0", "@next/swc-linux-x64-gnu": "16.2.0", "@next/swc-linux-x64-musl": "16.2.0", "@next/swc-win32-arm64-msvc": "16.2.0", "@next/swc-win32-x64-msvc": "16.2.0", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-NLBVrJy1pbV1Yn00L5sU4vFyAHt5XuSjzrNyFnxo6Com0M0KrL6hHM5B99dbqXb2bE9pm4Ow3Zl1xp6HVY9edQ=="], "next-safe-action": ["next-safe-action@8.0.11", "", { "peerDependencies": { "next": ">= 14.0.0", "react": ">= 18.2.0", "react-dom": ">= 18.2.0" } }, "sha512-gqJLmnQLAoFCq1kRBopN46New+vx1n9J9Y/qDQLXpv/VqU40AWxDakvshwwnWAt8R0kLvlakNYNLX5PqlXWSMg=="], @@ -6733,6 +6733,8 @@ "@trycompai/portal/@trycompai/design-system": ["@trycompai/design-system@1.0.43", "", { "dependencies": { "@base-ui/react": "^1.0.0", "@carbon/icons-react": "^11.72.0", "@fontsource-variable/plus-jakarta-sans": "^5.2.8", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", "embla-carousel-react": "^8.6.0", "input-otp": "^1.4.2", "next-themes": "^0.4.6", "react-day-picker": "^9.13.0", "react-resizable-panels": "^4.2.0", "recharts": "2.15.4", "shadcn": "^3.6.2", "sonner": "^2.0.7", "tailwind-merge": "^3.4.0", "tw-animate-css": "^1.4.0", "vaul": "^1.1.2" }, "peerDependencies": { "react": "^19.0.0", "react-dom": "^19.0.0", "tailwindcss": "^4.0.0" } }, "sha512-iPJrwtCJDbFEQyjZJDNQh+4J86H7Bt5WReM+Yaf0IBdB+2z5pF3FsQrMkkew9GvQSztIxXiWMiHoDVOWAVG9ow=="], + "@trycompai/portal/next": ["next@16.1.1", "", { "dependencies": { "@next/env": "16.1.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.1", "@next/swc-darwin-x64": "16.1.1", "@next/swc-linux-arm64-gnu": "16.1.1", "@next/swc-linux-arm64-musl": "16.1.1", "@next/swc-linux-x64-gnu": "16.1.1", "@next/swc-linux-x64-musl": "16.1.1", "@next/swc-win32-arm64-msvc": "16.1.1", "@next/swc-win32-x64-msvc": "16.1.1", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-QI+T7xrxt1pF6SQ/JYFz95ro/mg/1Znk5vBebsWwbpejj1T0A23hO7GYEaVac9QUOT2BIMiuzm0L99ooq7k0/w=="], + "@trycompai/portal/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@trycompai/ui/lucide-react": ["lucide-react@0.554.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-St+z29uthEJVx0Is7ellNkgTEhaeSoA42I7JjOCBCrc5X6LYMGSv0P/2uS5HDLTExP5tpiqRD2PyUEOS6s9UXA=="], @@ -6819,6 +6821,8 @@ "body-parser/iconv-lite": ["iconv-lite@0.4.24", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3" } }, "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="], + "browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.9.11", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ=="], + "builder-util/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], "builder-util/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], @@ -8291,6 +8295,28 @@ "@trycompai/portal/@trycompai/design-system/vaul": ["vaul@1.1.2", "", { "dependencies": { "@radix-ui/react-dialog": "^1.1.1" }, "peerDependencies": { "react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA=="], + "@trycompai/portal/next/@next/env": ["@next/env@16.1.1", "", {}, "sha512-3oxyM97Sr2PqiVyMyrZUtrtM3jqqFxOQJVuKclDsgj/L728iZt/GyslkN4NwarledZATCenbk4Offjk1hQmaAA=="], + + "@trycompai/portal/next/@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-JS3m42ifsVSJjSTzh27nW+Igfha3NdBOFScr9C80hHGrWx55pTrVL23RJbqir7k7/15SKlrLHhh/MQzqBBYrQA=="], + + "@trycompai/portal/next/@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.1.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-hbyKtrDGUkgkyQi1m1IyD3q4I/3m9ngr+V93z4oKHrPcmxwNL5iMWORvLSGAf2YujL+6HxgVvZuCYZfLfb4bGw=="], + + "@trycompai/portal/next/@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-/fvHet+EYckFvRLQ0jPHJCUI5/B56+2DpI1xDSvi80r/3Ez+Eaa2Yq4tJcRTaB1kqj/HrYKn8Yplm9bNoMJpwQ=="], + + "@trycompai/portal/next/@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.1.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MFHrgL4TXNQbBPzkKKur4Fb5ICEJa87HM7fczFs2+HWblM7mMLdco3dvyTI+QmLBU9xgns/EeeINSZD6Ar+oLg=="], + + "@trycompai/portal/next/@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-20bYDfgOQAPUkkKBnyP9PTuHiJGM7HzNBbuqmD0jiFVZ0aOldz+VnJhbxzjcSabYsnNjMPsE0cyzEudpYxsrUQ=="], + + "@trycompai/portal/next/@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.1.1", "", { "os": "linux", "cpu": "x64" }, "sha512-9pRbK3M4asAHQRkwaXwu601oPZHghuSC8IXNENgbBSyImHv/zY4K5udBusgdHkvJ/Tcr96jJwQYOll0qU8+fPA=="], + + "@trycompai/portal/next/@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.1.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-bdfQkggaLgnmYrFkSQfsHfOhk/mCYmjnrbRCGgkMcoOBZ4n+TRRSLmT/CU5SATzlBJ9TpioUyBW/vWFXTqQRiA=="], + + "@trycompai/portal/next/@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Ncwbw2WJ57Al5OX0k4chM68DKhEPlrXBaSXDCi2kPi5f4d8b3ejr3RRJGfKBLrn2YJL5ezNS7w2TZLHSti8CMw=="], + + "@trycompai/portal/next/baseline-browser-mapping": ["baseline-browser-mapping@2.9.11", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ=="], + + "@trycompai/portal/next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], + "@trycompai/ui/shiki/@shikijs/core": ["@shikijs/core@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g=="], "@trycompai/ui/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.20.0", "", { "dependencies": { "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg=="], @@ -9199,6 +9225,8 @@ "@trycompai/portal/@trycompai/design-system/recharts/eventemitter3": ["eventemitter3@4.0.7", "", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="], + "@trycompai/portal/next/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "@types/cheerio/cheerio/htmlparser2/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], "@vercel/sdk/@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],