From 68b8a04748fe9920e56dae3526475e393bcccd10 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Thu, 27 Feb 2025 09:44:01 -0800 Subject: [PATCH 1/4] add overview charts for evidence --- apps/app/package.json | 2 +- .../framework/select-frameworks-action.ts | 19 +- .../(app)/(dashboard)/evidence/layout.tsx | 10 + .../(app)/(dashboard)/evidence/list/page.tsx | 10 + .../overview/actions/getEvidenceDashboard.ts | 129 ++++++ .../overview/components/AnimatedBar.tsx | 26 ++ .../overview/components/AssigneeBarChart.tsx | 64 +++ .../components/DepartmentBarChart.tsx | 38 ++ .../overview/components/EvidenceOverview.tsx | 53 +++ .../overview/components/FrameworkBarChart.tsx | 38 ++ .../components/HorizontalBarChart.tsx | 236 ++++++++++ .../overview/hooks/useEvidenceDashboard.ts | 30 ++ .../(dashboard)/evidence/overview/page.tsx | 5 + .../(app)/(dashboard)/evidence/page.tsx | 9 +- apps/app/src/components/main-menu.tsx | 3 +- apps/app/src/locales/en.ts | 13 +- bun.lockb | Bin 716400 -> 736648 bytes package.json | 2 + .../migration.sql | 11 + packages/db/prisma/schema.prisma | 56 +-- yarn.lock | 420 +++++++++++++++++- 21 files changed, 1115 insertions(+), 59 deletions(-) create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/list/page.tsx create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AnimatedBar.tsx create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts create mode 100644 apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/page.tsx create mode 100644 packages/db/prisma/migrations/20250226222817_add_framework_id_to_org_evidence/migration.sql diff --git a/apps/app/package.json b/apps/app/package.json index d5dd5a5a6f..1b7f4302ac 100644 --- a/apps/app/package.json +++ b/apps/app/package.json @@ -39,7 +39,7 @@ "bun": "^1.2.2", "crypto": "^1.0.1", "dub": "^0.46.29", - "framer-motion": "^11.18.2", + "framer-motion": "^12.4.7", "geist": "^1.3.1", "highlight.js": "^11.11.1", "ky": "^1.7.5", diff --git a/apps/app/src/actions/framework/select-frameworks-action.ts b/apps/app/src/actions/framework/select-frameworks-action.ts index 09671c9531..1a2f06bf15 100644 --- a/apps/app/src/actions/framework/select-frameworks-action.ts +++ b/apps/app/src/actions/framework/select-frameworks-action.ts @@ -44,7 +44,7 @@ export const selectFrameworksAction = authActionClient await createOrganizationPolicy(user as User, frameworkIds); // Create organization evidence first - await createOrganizationEvidence(user as User); + await createOrganizationEvidence(user as User, frameworkIds); // Create control requirements after evidence is created await createOrganizationControlRequirements( @@ -273,7 +273,10 @@ const createOrganizationControlRequirements = async ( return controlRequirements; }; -const createOrganizationEvidence = async (user: User) => { +const createOrganizationEvidence = async ( + user: User, + frameworkIds: string[] +) => { if (!user.organizationId) { throw new Error("Not authorized - no organization found"); } @@ -282,6 +285,17 @@ const createOrganizationEvidence = async (user: User) => { where: { type: RequirementType.evidence, }, + include: { + control: { + include: { + frameworkCategory: { + include: { + framework: true, + }, + }, + }, + }, + }, }); const organizationEvidence = await db.organizationEvidence.createMany({ @@ -291,6 +305,7 @@ const createOrganizationEvidence = async (user: User) => { name: evidence.name, description: evidence.description, frequency: evidence.frequency, + frameworkId: evidence.control.frameworkCategory?.framework.id || "", })), }); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/layout.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/layout.tsx index a5cfa0b973..6a6f897fa5 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/layout.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/layout.tsx @@ -11,6 +11,16 @@ export default async function Layout({ return (
+ +
{children}
); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/list/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/list/page.tsx new file mode 100644 index 0000000000..bc459bbf25 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/list/page.tsx @@ -0,0 +1,10 @@ +import { EvidenceList } from "../Components/EvidenceList"; +import { EvidenceTableProvider } from "../hooks/useEvidenceTableContext"; + +export default function EvidencePage() { + return ( + + + + ); +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts new file mode 100644 index 0000000000..8e524753ba --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts @@ -0,0 +1,129 @@ +"use server"; + +import { authActionClient } from "@/actions/safe-action"; +import { db } from "@bubba/db"; +import type { Departments, OrganizationEvidence } from "@prisma/client"; + +export interface EvidenceDashboardData { + byDepartment: Record; + byAssignee: Record; + byFramework: Record; +} + +export const getEvidenceDashboard = authActionClient + .metadata({ + name: "getEvidenceDashboard", + track: { + event: "get-evidence-dashboard", + channel: "server", + }, + }) + .action(async ({ ctx }) => { + const { user } = ctx; + + if (!user.organizationId) { + return { + success: false, + error: "Not authorized - no organization found", + }; + } + + try { + const evidence = await db.organizationEvidence.findMany({ + where: { + organizationId: user.organizationId, + }, + include: { + assignee: true, + }, + }); + + if (!evidence) { + return { + success: false, + error: "Evidence not found", + }; + } + + // Initialize with all department values from the enum + const departmentValues: Departments[] = [ + "none", + "admin", + "gov", + "hr", + "it", + "itsm", + "qms", + ]; + + // Initialize the byDepartment object with empty arrays for all departments + const initialByDepartment = departmentValues.reduce< + Record + >( + (acc, dept) => { + acc[dept] = []; + return acc; + }, + {} as Record + ); + + // Group evidence by department + const byDepartment = evidence.reduce< + Record + >((acc, curr) => { + // Use the department from the evidence, or default to 'none' if it's null/undefined + const department = curr.department || "none"; + + // Add the evidence to the appropriate department array + acc[department].push(curr); + return acc; + }, initialByDepartment); + + const byAssignee = evidence.reduce>( + (acc, curr) => { + const assigneeId = curr.assignee?.email; + if (!assigneeId) { + return acc; + } + + if (!acc[assigneeId]) { + acc[assigneeId] = []; + } + acc[assigneeId].push(curr); + return acc; + }, + {} + ); + + const byFramework = evidence.reduce>( + (acc, curr) => { + const frameworkId = curr.frameworkId; + if (!frameworkId) { + return acc; + } + + if (!acc[frameworkId]) { + acc[frameworkId] = []; + } + acc[frameworkId].push(curr); + return acc; + }, + {} + ); + + return { + success: true, + data: { + byDepartment, + byAssignee, + byFramework, + }, + }; + } catch (error) { + console.error("Error fetching evidence:", error); + return { + success: false, + error: "Failed to fetch evidence", + }; + } + }); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AnimatedBar.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AnimatedBar.tsx new file mode 100644 index 0000000000..c0c66e06d3 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AnimatedBar.tsx @@ -0,0 +1,26 @@ +"use client"; + +import { motion } from "framer-motion"; + +export function AnimatedBar({ + index = 0, + children, +}: { + index?: number; + children: React.ReactNode; +}) { + return ( + + {children} + + ); +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx new file mode 100644 index 0000000000..c2ff7728e2 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx @@ -0,0 +1,64 @@ +"use client"; + +import React from "react"; +import type { OrganizationEvidence, User } from "@prisma/client"; +import { HorizontalBarChart, type ChartDataItem } from "./HorizontalBarChart"; + +interface AssigneeBarChartProps { + byAssignee?: Record; + allEvidence?: OrganizationEvidence[]; +} + +export function AssigneeBarChart({ + byAssignee, + allEvidence = [], +}: AssigneeBarChartProps) { + if (!byAssignee) { + return
No assignee data available
; + } + + // Calculate total assigned evidence items + const totalAssignedItems = Object.values(byAssignee).reduce( + (sum, items) => sum + items.length, + 0 + ); + + // Calculate unassigned items + const totalEvidenceItems = allEvidence.length; + const unassignedCount = Math.max(0, totalEvidenceItems - totalAssignedItems); + + // Create chart data + const chartData: ChartDataItem[] = Object.entries(byAssignee).map( + ([assigneeId, items]) => { + // Get first evidence item to access assignee name + const displayName = assigneeId || "Unassigned"; + + return { + key: assigneeId, + label: displayName, + value: items.length, + }; + } + ); + + // Add "Unassigned" category with the calculated count + chartData.push({ + key: "unassigned", + label: "Unassigned", + value: unassignedCount, + }); + + // Sort by count in descending order + chartData.sort((a, b) => b.value - a.value); + + return ( + `${value} item${value !== 1 ? "s" : ""}`} + height={320} + colors={["#8b5cf6"]} + /> + ); +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx new file mode 100644 index 0000000000..68a3ad20b7 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx @@ -0,0 +1,38 @@ +"use client"; + +import React from "react"; +import type { OrganizationEvidence } from "@prisma/client"; +import { HorizontalBarChart, type ChartDataItem } from "./HorizontalBarChart"; + +interface DepartmentBarChartProps { + byDepartment?: Record; +} + +export function DepartmentBarChart({ byDepartment }: DepartmentBarChartProps) { + if (!byDepartment) { + return
No department data available
; + } + + // Create chart data + const chartData: ChartDataItem[] = Object.entries(byDepartment).map( + ([department, items]) => ({ + key: department, + label: department || "Uncategorized", + value: items.length, + }) + ); + + // Sort by count in descending order + chartData.sort((a, b) => b.value - a.value); + + return ( + `${value} item${value !== 1 ? "s" : ""}`} + height={320} + colors={["#ef4444"]} + /> + ); +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx new file mode 100644 index 0000000000..342e0522b4 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx @@ -0,0 +1,53 @@ +"use client"; + +import React from "react"; +import { useEvidenceDashboard } from "../hooks/useEvidenceDashboard"; +import { DepartmentBarChart } from "./DepartmentBarChart"; +import { AssigneeBarChart } from "./AssigneeBarChart"; +import { FrameworkBarChart } from "./FrameworkBarChart"; + +export const EvidenceOverview = () => { + const { data, isLoading, error } = useEvidenceDashboard(); + + if (isLoading) { + return
Loading...
; + } + + if (error) { + return
Error: {error.message}
; + } + + // Calculate all evidence items by flattening the byDepartment data + const allEvidence = data?.byDepartment + ? Object.values(data.byDepartment).flat() + : []; + + return ( +
+

Evidence Dashboard

+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ ); +}; diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx new file mode 100644 index 0000000000..b439287614 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx @@ -0,0 +1,38 @@ +"use client"; + +import React from "react"; +import type { OrganizationEvidence } from "@prisma/client"; +import { HorizontalBarChart, type ChartDataItem } from "./HorizontalBarChart"; + +interface FrameworkBarChartProps { + byFramework?: Record; +} + +export function FrameworkBarChart({ byFramework }: FrameworkBarChartProps) { + if (!byFramework) { + return
No framework data available
; + } + + // Create chart data + const chartData: ChartDataItem[] = Object.entries(byFramework).map( + ([framework, items]) => ({ + key: framework, + label: framework || "Uncategorized", + value: items.length, + }) + ); + + // Sort by count in descending order + chartData.sort((a, b) => b.value - a.value); + + return ( + `${value} item${value !== 1 ? "s" : ""}`} + height={240} + colors={["#10b981"]} + /> + ); +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx new file mode 100644 index 0000000000..f721a9fae0 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx @@ -0,0 +1,236 @@ +"use client"; + +import { useState } from "react"; +import type { CSSProperties } from "react"; +import { scaleBand, scaleLinear, max } from "d3"; +import { AnimatedBar } from "./AnimatedBar"; + +export interface ChartDataItem { + key: K; + label: string; + value: number; + color?: string; +} + +interface HorizontalBarChartProps { + data: ChartDataItem[]; + title?: string; + height?: number; + showZeroValues?: boolean; + colors?: string[]; + valueFormatter?: (value: number) => string; +} + +// Default array of colors using Tailwind's HSL color palette +const defaultColors = [ + "#8b5cf6", // Purple (primary) + "#06b6d4", // Cyan (secondary) + "#10b981", // Emerald (accent) + "#ef4444", // Red (destructive) + "#6b7280", // Gray (muted) +]; + +export function HorizontalBarChart({ + data, + title, + height = 288, + showZeroValues = true, + colors = defaultColors, + valueFormatter = (value) => `${value}`, +}: HorizontalBarChartProps) { + const [hoveredItem, setHoveredItem] = useState | null>(null); + + if (!data || data.length === 0) { + return
No data available
; + } + + // Sort data by value in descending order + const sortedData = [...data].sort((a, b) => b.value - a.value); + + // Assign colors if not provided + const chartData = sortedData.map((item, index) => { + // For single color arrays, use that color for all bars + const color = + colors.length === 1 + ? colors[0] + : item.color || colors[index % colors.length]; + + return { + ...item, + color, + }; + }); + + // Filter out zero values if not showing them + const filteredData = showZeroValues + ? chartData + : chartData.filter((d) => d.value > 0); + + // Scales + const yScale = scaleBand() + .domain(filteredData.map((d) => d.label)) + .range([0, 100]) + .padding(0.175); + + const xScale = scaleLinear() + .domain([0, max(filteredData.map((d) => d.value)) ?? 0]) + .range([0, 100]); + + const longestWord = max(filteredData.map((d) => d.label.length)) || 1; + + return ( +
+ {title &&

{title}

} +
+ {/* Chart Area */} +
+ {/* Bars with Rounded Right Corners */} + {filteredData.map((d, index) => { + const barWidth = xScale(d.value); + const barHeight = yScale.bandwidth(); + const barTop = yScale(d.label) || 0; + const isHovered = hoveredItem?.key === d.key; + + return ( + +
setHoveredItem(d)} + onMouseLeave={() => setHoveredItem(null)} + > + {/* Tooltip */} + {isHovered && ( +
+
+ {d.label} + {valueFormatter(d.value)} +
+
+
+ )} +
+ + ); + })} + + {/* Grid lines */} + + {xScale.ticks(4).map((value) => ( + + + + ))} + +
+ + {/* Y Axis (Labels) */} + + + {filteredData.map((entry, i) => ( + + {entry.label} + {entry.value === 0 && showZeroValues && ( + (0) + )} + + ))} + + + + {/* X Axis (Values) */} + + + {xScale.ticks(4).map((value, i) => ( + + {value} + + ))} + + +
+
+ ); +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts new file mode 100644 index 0000000000..c7591b05b7 --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts @@ -0,0 +1,30 @@ +"use client"; + +import useSWR from "swr"; +import { getEvidenceDashboard } from "../actions/getEvidenceDashboard"; + +async function fetchEvidenceDashboard() { + try { + const result = await getEvidenceDashboard(); + + if (!result) { + throw new Error("No result received"); + } + + if (result.serverError) { + throw new Error(result.serverError); + } + + return result.data?.data; + } catch (error) { + console.error("Error fetching evidence dashboard:", error); + throw error; + } +} + +export function useEvidenceDashboard() { + return useSWR("evidence-dashboard", fetchEvidenceDashboard, { + revalidateOnFocus: false, + revalidateOnReconnect: false, + }); +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/page.tsx new file mode 100644 index 0000000000..2e0268082c --- /dev/null +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/page.tsx @@ -0,0 +1,5 @@ +import { EvidenceOverview } from "./components/EvidenceOverview"; + +export default function EvidenceOverviewPage() { + return ; +} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/page.tsx index 7db3881da2..3668e837f5 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/page.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/page.tsx @@ -1,10 +1,5 @@ -import { EvidenceList } from "./Components/EvidenceList"; -import { EvidenceTableProvider } from "./hooks/useEvidenceTableContext"; +import { redirect } from "next/navigation"; export default function EvidencePage() { - return ( - - - - ); + redirect("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/evidence/overview"); } diff --git a/apps/app/src/components/main-menu.tsx b/apps/app/src/components/main-menu.tsx index 77ecc8b5c9..222455da0f 100644 --- a/apps/app/src/components/main-menu.tsx +++ b/apps/app/src/components/main-menu.tsx @@ -29,6 +29,7 @@ const icons = { "/integrations": () => , "/people": () => , "/evidence": () => , + "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/evidence/overview": () => , }; interface ItemProps { @@ -175,7 +176,7 @@ export function MainMenu({ initialItems, onSelect }: Props) { disabled: false, }, { - path: "/evidence", + path: "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/evidence/overview", name: t("sidebar.evidence"), disabled: false, }, diff --git a/apps/app/src/locales/en.ts b/apps/app/src/locales/en.ts index f5cfa3f880..bb26a02b01 100644 --- a/apps/app/src/locales/en.ts +++ b/apps/app/src/locales/en.ts @@ -149,7 +149,7 @@ export default { }, edit: "Edit", errors: { - unexpected_error: "An unexpected error occurred" + unexpected_error: "An unexpected error occurred", }, description: "Description", last_updated: "Last Updated", @@ -191,6 +191,11 @@ export default { people: "People", }, sub_pages: { + evidence: { + title: "Evidence", + list: "Evidence List", + overview: "Evidence Overview", + }, risk: { overview: "Risk Management", register: "Risk Register", @@ -203,7 +208,7 @@ export default { policies: { all: "All Policies", editor: "Policy Editor", - policy_details: "Policy Details" + policy_details: "Policy Details", }, people: { all: "People", @@ -318,7 +323,7 @@ export default { save: "Save", saving: "Saving...", saved_success: "Policy saved successfully", - saved_error: "Failed to save policy" + saved_error: "Failed to save policy", }, evidence_tasks: { evidence_tasks: "Evidence Tasks", @@ -761,5 +766,7 @@ export default { title: "Evidence Tasks", description: "Manage and track evidence tasks for your compliance requirements.", + dashboard: "Dashboard", + list: "All Evidence", }, } as const; diff --git a/bun.lockb b/bun.lockb index 88305d4db64c9af11b2e952b6d66f8f6d3195ace..9580267e5fb03baf91dc4f885ad1e16b65240547 100755 GIT binary patch delta 160657 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[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 KEEyxThx)&ADi;v| diff --git a/package.json b/package.json index d1ac1e3480..0d9a410f26 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ "@aws-sdk/client-s3": "^3.750.0", "@manypkg/cli": "^0.23.0", "@nangohq/node": "^0.53.1", + "@types/d3": "^7.4.3", + "d3": "^7.9.0", "gitmoji": "^1.1.1", "gray-matter": "^4.0.3", "sharp": "^0.33.5", diff --git a/packages/db/prisma/migrations/20250226222817_add_framework_id_to_org_evidence/migration.sql b/packages/db/prisma/migrations/20250226222817_add_framework_id_to_org_evidence/migration.sql new file mode 100644 index 0000000000..356e6d6aa1 --- /dev/null +++ b/packages/db/prisma/migrations/20250226222817_add_framework_id_to_org_evidence/migration.sql @@ -0,0 +1,11 @@ +/* + Warnings: + + - Added the required column `frameworkId` to the `OrganizationEvidence` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "OrganizationEvidence" ADD COLUMN "frameworkId" TEXT NOT NULL; + +-- AddForeignKey +ALTER TABLE "OrganizationEvidence" ADD CONSTRAINT "OrganizationEvidence_frameworkId_fkey" FOREIGN KEY ("frameworkId") REFERENCES "Framework"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 32daecfdb6..bb905d491a 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -157,6 +157,7 @@ model Framework { OrganizationCategory OrganizationCategory[] OrganizationFramework OrganizationFramework[] PolicyFramework PolicyFramework[] + OrganizationEvidence OrganizationEvidence[] @@index([id]) } @@ -703,16 +704,17 @@ model ControlRequirement { } model OrganizationControlRequirement { - id String @id @default(cuid()) - organizationControlId String - controlRequirementId String - content Json? - createdAt DateTime @default(now()) - description String? - fileUrl String? - published Boolean @default(false) - type RequirementType - updatedAt DateTime @updatedAt + id String @id @default(cuid()) + organizationControlId String + controlRequirementId String + content Json? + createdAt DateTime @default(now()) + description String? + fileUrl String? + published Boolean @default(false) + type RequirementType + updatedAt DateTime @updatedAt + organizationPolicyId String? organizationEvidenceId String? controlRequirement ControlRequirement @relation(fields: [controlRequirementId], references: [id], onDelete: Cascade) @@ -769,21 +771,25 @@ model Evidence { } model OrganizationEvidence { - id String @id @unique @default(cuid()) - name String - description String? - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - published Boolean @default(false) - organizationId String - additionalUrls String[] - evidenceId String - fileUrls String[] - frequency Frequency? - lastPublishedAt DateTime? - assigneeId String? - department Departments? @default(none) - isNotRelevant Boolean @default(false) + id String @id @unique @default(cuid()) + name String + description String? + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + published Boolean @default(false) + organizationId String + additionalUrls String[] + evidenceId String + fileUrls String[] + frequency Frequency? + lastPublishedAt DateTime? + assigneeId String? + department Departments? @default(none) + isNotRelevant Boolean @default(false) + + frameworkId String + framework Framework @relation(fields: [frameworkId], references: [id], onDelete: Cascade) + OrganizationControlRequirement OrganizationControlRequirement[] assignee User? @relation(fields: [assigneeId], references: [id]) evidence Evidence @relation(fields: [evidenceId], references: [id], onDelete: Cascade) diff --git a/yarn.lock b/yarn.lock index 9efd2a3189..a8906b1d50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,6 +1,6 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 -# bun ./bun.lockb --hash: B310002128FE98F1-7b98d7c469b4c7dd-783D5B81AFBB8434-7dff8d34480313d3 +# bun ./bun.lockb --hash: E929851B7E80E394-3e9589382bcffa92-CB914B1387D986ED-106a025c7957468b "@ai-sdk/openai@^0.0.66": @@ -4659,22 +4659,136 @@ dependencies: "@types/node" "*" -"@types/d3-array@^3.0.3": +"@types/d3@^7.4.3": + version "7.4.3" + resolved "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz" + integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww== + dependencies: + "@types/d3-dsv" "*" + "@types/d3-geo" "*" + "@types/d3-axis" "*" + "@types/d3-drag" "*" + "@types/d3-ease" "*" + "@types/d3-path" "*" + "@types/d3-time" "*" + "@types/d3-zoom" "*" + "@types/d3-array" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-color" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-scale" "*" + "@types/d3-shape" "*" + "@types/d3-timer" "*" + "@types/d3-format" "*" + "@types/d3-random" "*" + "@types/d3-contour" "*" + "@types/d3-polygon" "*" + "@types/d3-delaunay" "*" + "@types/d3-dispatch" "*" + "@types/d3-quadtree" "*" + "@types/d3-hierarchy" "*" + "@types/d3-selection" "*" + "@types/d3-transition" "*" + "@types/d3-interpolate" "*" + "@types/d3-time-format" "*" + "@types/d3-scale-chromatic" "*" + +"@types/d3-array@*", "@types/d3-array@^3.0.3": version "3.2.1" resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz" integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== +"@types/d3-axis@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz" + integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz" + integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz" + integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg== + "@types/d3-color@*": version "3.1.3" resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz" integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== -"@types/d3-ease@^3.0.0": +"@types/d3-contour@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz" + integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg== + dependencies: + "@types/geojson" "*" + "@types/d3-array" "*" + +"@types/d3-delaunay@*": + version "6.0.4" + resolved "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz" + integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw== + +"@types/d3-dispatch@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz" + integrity sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ== + +"@types/d3-drag@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz" + integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz" + integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g== + +"@types/d3-ease@*", "@types/d3-ease@^3.0.0": version "3.0.2" resolved "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz" integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== -"@types/d3-interpolate@^3.0.1": +"@types/d3-fetch@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz" + integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "3.0.10" + resolved "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz" + integrity sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw== + +"@types/d3-format@*": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz" + integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== + +"@types/d3-geo@*": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz" + integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "3.1.7" + resolved "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz" + integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg== + +"@types/d3-interpolate@*", "@types/d3-interpolate@^3.0.1": version "3.0.4" resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz" integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== @@ -4686,14 +4800,39 @@ resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz" integrity sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg== -"@types/d3-scale@^4.0.2": +"@types/d3-polygon@*": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz" + integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA== + +"@types/d3-quadtree@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz" + integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg== + +"@types/d3-random@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz" + integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== + +"@types/d3-scale@*", "@types/d3-scale@^4.0.2": version "4.0.9" resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz" integrity sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw== dependencies: "@types/d3-time" "*" -"@types/d3-shape@^3.1.0": +"@types/d3-scale-chromatic@*": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz" + integrity sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ== + +"@types/d3-selection@*": + version "3.0.11" + resolved "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz" + integrity sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w== + +"@types/d3-shape@*", "@types/d3-shape@^3.1.0": version "3.1.7" resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz" integrity sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg== @@ -4705,11 +4844,31 @@ resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz" integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g== -"@types/d3-timer@^3.0.0": +"@types/d3-time-format@*": + version "4.0.3" + resolved "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz" + integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg== + +"@types/d3-timer@*", "@types/d3-timer@^3.0.0": version "3.0.2" resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz" integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== +"@types/d3-transition@*": + version "3.0.9" + resolved "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz" + integrity sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-zoom@*": + version "3.0.8" + resolved "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz" + integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw== + dependencies: + "@types/d3-selection" "*" + "@types/d3-interpolate" "*" + "@types/debug@^4.0.0": version "4.1.12" resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" @@ -4754,6 +4913,11 @@ "@types/send" "*" "@types/range-parser" "*" +"@types/geojson@*": + version "7946.0.16" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz" + integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== + "@types/hast@^3.0.0": version "3.0.4" resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" @@ -5915,6 +6079,11 @@ commander@^4.0.0: resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@7: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + commander@^8.3.0: version "8.3.0" resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" @@ -5977,7 +6146,7 @@ commander@11.1.0: bun "^1.2.2" crypto "^1.0.1" dub "^0.46.29" - framer-motion "^11.18.2" + framer-motion "^12.4.7" geist "^1.3.1" highlight.js "^11.11.1" ky "^1.7.5" @@ -6200,41 +6369,179 @@ csv-stringify@^6.5.2: resolved "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.5.2.tgz" integrity sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA== -"d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: +d3@^7.9.0: + version "7.9.0" + resolved "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz" + integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA== + dependencies: + d3-array "3" + d3-axis "3" + d3-brush "3" + d3-chord "3" + d3-color "3" + d3-contour "4" + d3-delaunay "6" + d3-dispatch "3" + d3-drag "3" + d3-dsv "3" + d3-ease "3" + d3-fetch "3" + d3-force "3" + d3-format "3" + d3-geo "3" + d3-hierarchy "3" + d3-interpolate "3" + d3-path "3" + d3-polygon "3" + d3-quadtree "3" + d3-random "3" + d3-scale "4" + d3-scale-chromatic "3" + d3-selection "3" + d3-shape "3" + d3-time "3" + d3-time-format "4" + d3-timer "3" + d3-transition "3" + d3-zoom "3" + +"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.1.6, d3-array@^3.2.0: version "3.2.4" resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: internmap "1 - 2" -"d3-color@1 - 3": +d3-axis@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz" + integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== + +d3-brush@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz" + integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "3" + d3-transition "3" + +d3-chord@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz" + integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== + dependencies: + d3-path "1 - 3" + +"d3-color@1 - 3", d3-color@3: version "3.1.0" resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== -d3-ease@^3.0.1: +d3-contour@4: + version "4.0.2" + resolved "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz" + integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA== + dependencies: + d3-array "^3.2.0" + +d3-delaunay@6: + version "6.0.4" + resolved "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" + +"d3-dispatch@1 - 3", d3-dispatch@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz" + integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== + +"d3-drag@2 - 3", d3-drag@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz" + integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== + dependencies: + d3-dispatch "1 - 3" + d3-selection "3" + +"d3-dsv@1 - 3", d3-dsv@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== + dependencies: + commander "7" + iconv-lite "0.6" + rw "1" + +"d3-ease@1 - 3", d3-ease@3, d3-ease@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz" integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== -"d3-format@1 - 3": +d3-fetch@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz" + integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== + dependencies: + d3-dsv "1 - 3" + +d3-force@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== + dependencies: + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" + +"d3-format@1 - 3", d3-format@3: version "3.1.0" resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== -"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: +d3-geo@3: + version "3.1.1" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz" + integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q== + dependencies: + d3-array "2.5.0 - 3" + +d3-hierarchy@3: + version "3.1.2" + resolved "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3, d3-interpolate@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== dependencies: d3-color "1 - 3" -d3-path@^3.1.0: +"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz" integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== -d3-scale@^4.0.2: +d3-polygon@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz" + integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== + +"d3-quadtree@1 - 3", d3-quadtree@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + +d3-random@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz" + integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== + +d3-scale@4, d3-scale@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz" integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== @@ -6245,32 +6552,67 @@ d3-scale@^4.0.2: d3-time "2.1.1 - 3" d3-time-format "2 - 4" -d3-shape@^3.1.0: +d3-scale-chromatic@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz" + integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ== + dependencies: + d3-color "1 - 3" + d3-interpolate "1 - 3" + +"d3-selection@2 - 3", d3-selection@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz" + integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== + +d3-shape@3, d3-shape@^3.1.0: version "3.2.0" resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== dependencies: d3-path "^3.1.0" -"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.0.0: +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3, d3-time@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== dependencies: d3-array "2 - 3" -"d3-time-format@2 - 4": +"d3-time-format@2 - 4", d3-time-format@4: version "4.1.0" resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz" integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== dependencies: d3-time "1 - 3" -d3-timer@^3.0.1: +"d3-timer@1 - 3", d3-timer@3, d3-timer@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== +"d3-transition@2 - 3", d3-transition@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz" + integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== + dependencies: + d3-color "1 - 3" + d3-dispatch "1 - 3" + d3-ease "1 - 3" + d3-interpolate "1 - 3" + d3-timer "1 - 3" + +d3-zoom@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz" + integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "2 - 3" + d3-transition "2 - 3" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" @@ -6448,6 +6790,13 @@ degenerator@^5.0.0: escodegen "^2.1.0" esprima "^4.0.1" +delaunator@5: + version "5.0.1" + resolved "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz" + integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw== + dependencies: + robust-predicates "^3.0.2" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" @@ -7352,6 +7701,15 @@ framer-motion@^11.18.2: motion-dom "^11.18.1" motion-utils "^11.18.1" +framer-motion@^12.4.7: + version "12.4.7" + resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.7.tgz" + integrity sha512-VhrcbtcAMXfxlrjeHPpWVu2+mkcoR31e02aNSR7OUS/hZAciKa8q6o3YN2mA1h+jjscRsSyKvX6E1CiY/7OLMw== + dependencies: + tslib "^2.4.0" + motion-dom "^12.4.5" + motion-utils "^12.0.0" + framework-utils@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/framework-utils/-/framework-utils-1.1.0.tgz" @@ -7834,7 +8192,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2: +iconv-lite@0.6, iconv-lite@0.6.3, iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -9453,11 +9811,23 @@ motion-dom@^11.18.1: dependencies: motion-utils "^11.18.1" +motion-dom@^12.4.5: + version "12.4.5" + resolved "https://registry.npmjs.org/motion-dom/-/motion-dom-12.4.5.tgz" + integrity sha512-Q2xmhuyYug1CGTo0jdsL05EQ4RhIYXlggFS/yPhQQRNzbrhjKQ1tbjThx5Plv68aX31LsUQRq4uIkuDxdO5vRQ== + dependencies: + motion-utils "^12.0.0" + motion-utils@^11.18.1: version "11.18.1" resolved "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz" integrity sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA== +motion-utils@^12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/motion-utils/-/motion-utils-12.0.0.tgz" + integrity sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -11289,6 +11659,11 @@ rimraf@2: dependencies: glob "^7.1.3" +robust-predicates@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== + rope-sequence@^1.3.0: version "1.3.4" resolved "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz" @@ -11328,6 +11703,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rw@1: + version "1.3.3" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + rxjs@^7.5.5: version "7.8.1" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" From 590d997849f38681ca2a0d9de65790a2fe2e5059 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Thu, 27 Feb 2025 10:04:35 -0800 Subject: [PATCH 2/4] update deps --- bun.lockb | Bin 736648 -> 736704 bytes yarn.lock | 1847 ++++++++++++++++++++++++++--------------------------- 2 files changed, 908 insertions(+), 939 deletions(-) diff --git a/bun.lockb b/bun.lockb index 9580267e5fb03baf91dc4f885ad1e16b65240547..a3c5b2deaa4731d9aa7dd147c2b00df9c822ecb7 100755 GIT binary patch delta 17650 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 J-N?ee{{lm+AgKTV diff --git a/yarn.lock b/yarn.lock index 5209f610d6..66c7822a98 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,10 +1,6 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 -<<<<<<< HEAD # bun ./bun.lockb --hash: E929851B7E80E394-3e9589382bcffa92-CB914B1387D986ED-106a025c7957468b -======= -# bun ./bun.lockb --hash: 0000000000000000-0000000000000000-0000000000000000-0000000000000000 ->>>>>>> ca74e95fce72058dcfb98433e21f0054b4af69b9 "@ai-sdk/openai@^0.0.66": @@ -49,20 +45,20 @@ resolved "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.20.tgz" integrity sha512-ngg/RGpnA00eNOWEtXHenpX1MsM2QshQh4QJFjUfwcqHpM5kTfG7je7Rc3HcEDP+OkRVv2GF+X4fC1Vfcnl8Ow== dependencies: - "@ai-sdk/provider" "0.0.24" - eventsource-parser "1.1.2" nanoid "3.3.6" + "@ai-sdk/provider" "0.0.24" secure-json-parse "2.7.0" + eventsource-parser "1.1.2" "@ai-sdk/provider-utils@1.0.22": version "1.0.22" resolved "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.22.tgz" integrity sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ== dependencies: - "@ai-sdk/provider" "0.0.26" - eventsource-parser "^1.1.2" nanoid "^3.3.7" + "@ai-sdk/provider" "0.0.26" secure-json-parse "^2.7.0" + eventsource-parser "^1.1.2" "@ai-sdk/provider-utils@2.1.8": version "2.1.8" @@ -79,10 +75,10 @@ resolved "https://registry.npmjs.org/@ai-sdk/react/-/react-0.0.70.tgz" integrity sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ== dependencies: - "@ai-sdk/provider-utils" "1.0.22" - "@ai-sdk/ui-utils" "0.0.50" swr "^2.2.5" throttleit "2.1.0" + "@ai-sdk/ui-utils" "0.0.50" + "@ai-sdk/provider-utils" "1.0.22" "@ai-sdk/react@1.1.16": version "1.1.16" @@ -99,28 +95,28 @@ resolved "https://registry.npmjs.org/@ai-sdk/solid/-/solid-0.0.54.tgz" integrity sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ== dependencies: - "@ai-sdk/provider-utils" "1.0.22" "@ai-sdk/ui-utils" "0.0.50" + "@ai-sdk/provider-utils" "1.0.22" "@ai-sdk/svelte@0.0.57": version "0.0.57" resolved "https://registry.npmjs.org/@ai-sdk/svelte/-/svelte-0.0.57.tgz" integrity sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw== dependencies: - "@ai-sdk/provider-utils" "1.0.22" - "@ai-sdk/ui-utils" "0.0.50" sswr "^2.1.0" + "@ai-sdk/ui-utils" "0.0.50" + "@ai-sdk/provider-utils" "1.0.22" "@ai-sdk/ui-utils@0.0.50": version "0.0.50" resolved "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.50.tgz" integrity sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw== dependencies: - "@ai-sdk/provider" "0.0.26" - "@ai-sdk/provider-utils" "1.0.22" json-schema "^0.4.0" + "@ai-sdk/provider" "0.0.26" secure-json-parse "^2.7.0" zod-to-json-schema "^3.23.3" + "@ai-sdk/provider-utils" "1.0.22" "@ai-sdk/ui-utils@1.1.14": version "1.1.14" @@ -136,9 +132,9 @@ resolved "https://registry.npmjs.org/@ai-sdk/vue/-/vue-0.0.59.tgz" integrity sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw== dependencies: - "@ai-sdk/provider-utils" "1.0.22" - "@ai-sdk/ui-utils" "0.0.50" swrv "^1.0.4" + "@ai-sdk/ui-utils" "0.0.50" + "@ai-sdk/provider-utils" "1.0.22" "@alloc/quick-lru@^5.2.0": version "5.2.0" @@ -158,23 +154,23 @@ resolved "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.3.tgz" integrity sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw== dependencies: + lru-cache "^10.4.3" "@csstools/css-calc" "^2.1.1" + "@csstools/css-tokenizer" "^3.0.3" "@csstools/css-color-parser" "^3.0.7" "@csstools/css-parser-algorithms" "^3.0.4" - "@csstools/css-tokenizer" "^3.0.3" - lru-cache "^10.4.3" "@auth/core@0.37.2": version "0.37.2" resolved "https://registry.npmjs.org/@auth/core/-/core-0.37.2.tgz" integrity sha512-kUvzyvkcd6h1vpeMAojK2y7+PAV5H+0Cc9+ZlKYDFhDY31AlvsB+GW5vNO4qE3Y07KeQgvNO9U0QUx/fN62kBw== dependencies: - "@panva/hkdf" "^1.2.1" - "@types/cookie" "0.6.0" - cookie "0.7.1" jose "^5.9.3" - oauth4webapi "^3.0.0" + cookie "0.7.1" preact "10.11.3" + "@panva/hkdf" "^1.2.1" + oauth4webapi "^3.0.0" + "@types/cookie" "0.6.0" preact-render-to-string "5.2.3" "@auth/core@0.37.4": @@ -780,9 +776,9 @@ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" js-tokens "^4.0.0" picocolors "^1.0.0" + "@babel/helper-validator-identifier" "^7.25.9" "@babel/compat-data@^7.26.5": version "7.26.8" @@ -794,60 +790,60 @@ resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz" integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.24.5" - "@babel/helpers" "^7.24.5" + debug "^4.1.0" + json5 "^2.2.3" + semver "^6.3.1" + gensync "^1.0.0-beta.2" + "@babel/types" "^7.24.5" "@babel/parser" "^7.24.5" + "@babel/helpers" "^7.24.5" "@babel/template" "^7.24.0" "@babel/traverse" "^7.24.5" - "@babel/types" "^7.24.5" + "@babel/generator" "^7.24.5" + "@babel/code-frame" "^7.24.2" convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" + "@ampproject/remapping" "^2.2.0" + "@babel/helper-module-transforms" "^7.24.5" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/generator@^7.24.5", "@babel/generator@^7.26.9": version "7.26.9" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz" integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg== dependencies: - "@babel/parser" "^7.26.9" + jsesc "^3.0.2" "@babel/types" "^7.26.9" + "@babel/parser" "^7.26.9" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" "@babel/helper-compilation-targets@^7.23.6": version "7.26.5" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz" integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== dependencies: + semver "^6.3.1" + lru-cache "^5.1.1" + browserslist "^4.24.0" "@babel/compat-data" "^7.26.5" "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" "@babel/helper-module-imports@^7.25.9": version "7.25.9" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz" integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: - "@babel/traverse" "^7.25.9" "@babel/types" "^7.25.9" + "@babel/traverse" "^7.25.9" "@babel/helper-module-transforms@^7.24.5": version "7.26.0" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz" integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== dependencies: + "@babel/traverse" "^7.25.9" "@babel/helper-module-imports" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" "@babel/helper-string-parser@^7.25.9": version "7.25.9" @@ -869,8 +865,8 @@ resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz" integrity sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA== dependencies: - "@babel/template" "^7.26.9" "@babel/types" "^7.26.9" + "@babel/template" "^7.26.9" "@babel/parser@7.24.5", "@babel/parser@^7.24.5": version "7.24.5" @@ -896,22 +892,22 @@ resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz" integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/parser" "^7.26.9" "@babel/types" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/code-frame" "^7.26.2" "@babel/traverse@^7.24.5", "@babel/traverse@^7.25.9": version "7.26.9" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz" integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.9" - "@babel/parser" "^7.26.9" - "@babel/template" "^7.26.9" - "@babel/types" "^7.26.9" debug "^4.3.1" globals "^11.1.0" + "@babel/types" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/template" "^7.26.9" + "@babel/generator" "^7.26.9" + "@babel/code-frame" "^7.26.2" "@babel/types@^7.24.5", "@babel/types@^7.25.9", "@babel/types@^7.26.9": version "7.26.9" @@ -938,14 +934,14 @@ resolved "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz" integrity sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog== optionalDependencies: - "@biomejs/cli-darwin-arm64" "1.9.4" + "@biomejs/cli-linux-x64" "1.9.4" + "@biomejs/cli-win32-x64" "1.9.4" "@biomejs/cli-darwin-x64" "1.9.4" "@biomejs/cli-linux-arm64" "1.9.4" - "@biomejs/cli-linux-arm64-musl" "1.9.4" - "@biomejs/cli-linux-x64" "1.9.4" - "@biomejs/cli-linux-x64-musl" "1.9.4" "@biomejs/cli-win32-arm64" "1.9.4" - "@biomejs/cli-win32-x64" "1.9.4" + "@biomejs/cli-darwin-arm64" "1.9.4" + "@biomejs/cli-linux-x64-musl" "1.9.4" + "@biomejs/cli-linux-arm64-musl" "1.9.4" "@biomejs/cli-darwin-arm64@1.9.4": version "1.9.4" @@ -1007,11 +1003,11 @@ posthog-js "^1.215.3" posthog-node "^4.4.1" -"@bubba/db@packages/db", "@bubba/db@workspace:*": +"@bubba/db@packages/db": version "workspace:packages/db" resolved "workspace:packages/db" devDependencies: - "@bubba/tsconfig" "workspace:*" + "@bubba/tsconfig" "packages/tsconfig" typescript "^5.7.3" dependencies: "@auth/prisma-adapter" "^2.7.4" @@ -1029,9 +1025,8 @@ "@types/react-dom" "^19.0.0" typescript "^5.7.2" dependencies: - "@bubba/ui" "workspace:*" - "@bubba/utils" "workspace:*" - dependencies: + "@bubba/ui" "packages/ui" + "@bubba/utils" "packages/utils" "@react-email/components" "0.0.31" "@react-email/render" "0.0.10" "@react-email/tailwind" "1.0.4" @@ -1062,7 +1057,7 @@ "@upstash/redis" "^1.34.2" server-only "^0.0.1" -"@bubba/notifications@packages/notifications", "@bubba/notifications@workspace:*": +"@bubba/notifications@packages/notifications": version "workspace:packages/notifications" resolved "workspace:packages/notifications" devDependencies: @@ -1071,11 +1066,11 @@ "@novu/node" "^2.0.1" nanoid "^5.0.7" -"@bubba/tsconfig@packages/tsconfig", "@bubba/tsconfig@workspace:*": +"@bubba/tsconfig@packages/tsconfig": version "workspace:packages/tsconfig" resolved "workspace:packages/tsconfig" -"@bubba/ui@packages/ui", "@bubba/ui@workspace:*": +"@bubba/ui@packages/ui": version "workspace:packages/ui" resolved "workspace:packages/ui" devDependencies: @@ -1139,7 +1134,7 @@ use-callback-ref "^1.3.3" vaul "^1.0.0" -"@bubba/utils@packages/utils", "@bubba/utils@workspace:*": +"@bubba/utils@packages/utils": version "workspace:packages/utils" resolved "workspace:packages/utils" devDependencies: @@ -1165,9 +1160,9 @@ resolved "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.0.tgz" integrity sha512-H3rCl6CwW1NdQt9rE3n373t7o5cthPv7yUoxF2ytZvyvlJv89C5RYMJu83Hed8ODgys5vpBU0GKxIRG83jd8NQ== dependencies: - "@clack/core" "0.4.1" picocolors "^1.0.0" sisteransi "^1.0.5" + "@clack/core" "0.4.1" "@csstools/color-helpers@^5.0.1": version "5.0.1" @@ -1212,8 +1207,8 @@ resolved "https://registry.npmjs.org/@effect/platform/-/platform-0.72.0.tgz" integrity sha512-uHsW2hlo6AiIW3zpLAVAoNvJngS/JwCZBAM4RSRllm8JTgjjCraef78FJBDNnSXz+2a10Xzzx4qxVsP3s8EV5Q== dependencies: - find-my-way-ts "^0.1.5" multipasta "^0.2.5" + find-my-way-ts "^0.1.5" "@egjs/agent@^2.2.1": version "2.4.4" @@ -1450,10 +1445,10 @@ resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.3.tgz" integrity sha512-pJT1OkhplSmvvr6i3CWTPvC/FGC06MbN5TNBfRO6Ox62AEz90eMq+dVvtX9Bl3jxCEkS0tATzDarRZuOLw7oFg== dependencies: - "@formatjs/fast-memoize" "2.2.6" - "@formatjs/intl-localematcher" "0.6.0" decimal.js "10" tslib "2" + "@formatjs/fast-memoize" "2.2.6" + "@formatjs/intl-localematcher" "0.6.0" "@formatjs/fast-memoize@2.2.6", "@formatjs/fast-memoize@^2.2.0": version "2.2.6" @@ -1467,17 +1462,17 @@ resolved "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.1.tgz" integrity sha512-o0AhSNaOfKoic0Sn1GkFCK4MxdRsw7mPJ5/rBpIqdvcC7MIuyUSW8WChUEvrK78HhNpYOgqCQbINxCTumJLzZA== dependencies: + tslib "2" "@formatjs/ecma402-abstract" "2.3.3" "@formatjs/icu-skeleton-parser" "1.8.13" - tslib "2" "@formatjs/icu-skeleton-parser@1.8.13": version "1.8.13" resolved "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.13.tgz" integrity sha512-N/LIdTvVc1TpJmMt2jVg0Fr1F7Q1qJPdZSCs19unMskCmVQ/sa0H9L8PWt13vq+gLdLg1+pPsvBLydL1Apahjg== dependencies: - "@formatjs/ecma402-abstract" "2.3.3" tslib "2" + "@formatjs/ecma402-abstract" "2.3.3" "@formatjs/intl-localematcher@^0.5.4": version "0.5.10" @@ -1816,70 +1811,70 @@ hey-listen "^1.0.8" tslib "^2.3.1" -"@mui/core-downloads-tracker@^6.4.4": - version "6.4.4" - resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.4.tgz" - integrity sha512-r+J0EditrekkTtO2CnCBCOGpNaDYwJqz8lH4rj6o/anDcskZFJodBlG8aCJkS8DL/CF/9EHS+Gz53EbmYEnQbw== +"@mui/core-downloads-tracker@^6.4.5": + version "6.4.5" + resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.5.tgz" + integrity sha512-zoXvHU1YuoodgMlPS+epP084Pqv9V+Vg+5IGv9n/7IIFVQ2nkTngYHYxElCq8pdTTbDcgji+nNh0lxri2abWgA== "@mui/icons-material@^6.1.6": - version "6.4.4" - resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.4.tgz" - integrity sha512-uF1chGaoFmYdRUomK6f8kgJfWosk9A3HXWiVD0vQm+2mE7f25eTQ1E8RRO11LXpnUBqu8Rbv/uGlpnjT/u1Ksg== + version "6.4.5" + resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.5.tgz" + integrity sha512-4A//t8Nrc+4u4pbVhGarIFU98zpuB5AV9hTNzgXx1ySZJ1tWtx+i/1SbQ8PtGJxWeXlljhwimZJNPQ3x0CiIFw== dependencies: "@babel/runtime" "^7.26.0" -"@mui/material@^6.4.4": - version "6.4.4" - resolved "https://registry.npmjs.org/@mui/material/-/material-6.4.4.tgz" - integrity sha512-ISVPrIsPQsxnwvS40C4u03AuNSPigFeS2+n1qpuEZ94hDsdMi19dQM2JcC9CHEhXecSIQjP1RTyY0mPiSpSrFQ== +"@mui/material@^6.4.5": + version "6.4.5" + resolved "https://registry.npmjs.org/@mui/material/-/material-6.4.5.tgz" + integrity sha512-5eyEgSXocIeV1JkXs8mYyJXU0aFyXZIWI5kq2g/mCnIgJe594lkOBNAKnCIaGVfQTu2T6TTEHF8/hHIqpiIRGA== dependencies: - "@babel/runtime" "^7.26.0" - "@mui/core-downloads-tracker" "^6.4.4" - "@mui/system" "^6.4.3" - "@mui/types" "^7.2.21" - "@mui/utils" "^6.4.3" - "@popperjs/core" "^2.11.8" - "@types/react-transition-group" "^4.4.12" clsx "^2.1.1" csstype "^3.1.3" - prop-types "^15.8.1" react-is "^19.0.0" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.3" + prop-types "^15.8.1" + "@mui/system" "^6.4.3" + "@babel/runtime" "^7.26.0" + "@popperjs/core" "^2.11.8" react-transition-group "^4.4.5" + "@mui/core-downloads-tracker" "^6.4.5" + "@types/react-transition-group" "^4.4.12" "@mui/private-theming@^6.4.3": version "6.4.3" resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.3.tgz" integrity sha512-7x9HaNwDCeoERc4BoEWLieuzKzXu5ZrhRnEM6AUcRXUScQLvF1NFkTlP59+IJfTbEMgcGg1wWHApyoqcksrBpQ== dependencies: - "@babel/runtime" "^7.26.0" "@mui/utils" "^6.4.3" prop-types "^15.8.1" + "@babel/runtime" "^7.26.0" "@mui/styled-engine@^6.4.3": version "6.4.3" resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.3.tgz" integrity sha512-OC402VfK+ra2+f12Gef8maY7Y9n7B6CZcoQ9u7mIkh/7PKwW/xH81xwX+yW+Ak1zBT3HYcVjh2X82k5cKMFGoQ== dependencies: + csstype "^3.1.3" + prop-types "^15.8.1" "@babel/runtime" "^7.26.0" "@emotion/cache" "^11.13.5" - "@emotion/serialize" "^1.3.3" "@emotion/sheet" "^1.4.0" - csstype "^3.1.3" - prop-types "^15.8.1" + "@emotion/serialize" "^1.3.3" "@mui/system@^6.4.3": version "6.4.3" resolved "https://registry.npmjs.org/@mui/system/-/system-6.4.3.tgz" integrity sha512-Q0iDwnH3+xoxQ0pqVbt8hFdzhq1g2XzzR4Y5pVcICTNtoCLJmpJS3vI4y/OIM1FHFmpfmiEC2IRIq7YcZ8nsmg== dependencies: - "@babel/runtime" "^7.26.0" - "@mui/private-theming" "^6.4.3" - "@mui/styled-engine" "^6.4.3" - "@mui/types" "^7.2.21" - "@mui/utils" "^6.4.3" clsx "^2.1.1" csstype "^3.1.3" + "@mui/types" "^7.2.21" + "@mui/utils" "^6.4.3" prop-types "^15.8.1" + "@babel/runtime" "^7.26.0" + "@mui/styled-engine" "^6.4.3" + "@mui/private-theming" "^6.4.3" "@mui/types@^7.2.21": version "7.2.21" @@ -1891,32 +1886,32 @@ resolved "https://registry.npmjs.org/@mui/utils/-/utils-6.4.3.tgz" integrity sha512-jxHRHh3BqVXE9ABxDm+Tc3wlBooYz/4XPa0+4AI+iF38rV1/+btJmSUgG4shDtSWVs/I97aDn5jBCt6SF2Uq2A== dependencies: - "@babel/runtime" "^7.26.0" - "@mui/types" "^7.2.21" - "@types/prop-types" "^15.7.14" clsx "^2.1.1" - prop-types "^15.8.1" react-is "^19.0.0" + "@mui/types" "^7.2.21" + prop-types "^15.8.1" + "@babel/runtime" "^7.26.0" + "@types/prop-types" "^15.7.14" "@nangohq/frontend@^0.53.1": - version "0.53.2" - resolved "https://registry.npmjs.org/@nangohq/frontend/-/frontend-0.53.2.tgz" - integrity sha512-ZSNY9jHVuF/Qfsu8TJBK3tujsxO+Qi7dHWNFt316Mq3g4od9MwuHefTEs0EtfpUTCB18hNE05QOQWCuD8zO8Aw== + version "0.53.1" + resolved "https://registry.npmjs.org/@nangohq/frontend/-/frontend-0.53.1.tgz" + integrity sha512-NjQwktw1aKYsQ9QPGJkyABgVZhWBrYlJgi12ohyLnw1X/0jLH2XxVrGEmBG/F8ID1/1g3YHo1SxdV0Dcaw0ZPQ== dependencies: - "@nangohq/types" "0.53.2" + "@nangohq/types" "0.53.1" "@nangohq/node@^0.53.1": - version "0.53.2" - resolved "https://registry.npmjs.org/@nangohq/node/-/node-0.53.2.tgz" - integrity sha512-QfBrtbv1dekI3RH+HX+43MGIRs36MNuWMdWS1RRFKjiCmIwKaOje6qjRj0UDjQYtokKcbt2id2sAAq8fmusjCQ== + version "0.53.1" + resolved "https://registry.npmjs.org/@nangohq/node/-/node-0.53.1.tgz" + integrity sha512-cdn17bsbpZ5te5TPlJMYmdz0dkcG9ruLJQmrZAfVh1opKC0guCYOpcRFBiM8jSYC2QhlGWzn93qcsUtMSPXzXg== dependencies: - "@nangohq/types" "0.53.2" + "@nangohq/types" "0.53.1" axios "^1.7.9" -"@nangohq/types@0.53.2": - version "0.53.2" - resolved "https://registry.npmjs.org/@nangohq/types/-/types-0.53.2.tgz" - integrity sha512-G7oC4QsJrmLjAWQmvB7gY8hE0UMr8PofAY/pPsk/0sHIM1YWeealBI7RiPeN4UluArT7w+OoUvMQd+jtrTh9Lw== +"@nangohq/types@0.53.1": + version "0.53.1" + resolved "https://registry.npmjs.org/@nangohq/types/-/types-0.53.1.tgz" + integrity sha512-9ZfkhoYgwEkAonYHku0sE20pYn+XlAVvD74HDqXg4b9g0Lxsdsv7eptr0VVPMaaUAt790JjfbwphrlEIvWyCag== dependencies: axios "^1.7.9" json-schema "0.4.0" @@ -2054,8 +2049,8 @@ resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" + "@nodelib/fs.scandir" "2.1.5" "@novu/client@2.6.5": version "2.6.5" @@ -2069,10 +2064,10 @@ resolved "https://registry.npmjs.org/@novu/headless/-/headless-2.6.5.tgz" integrity sha512-/jVFGAjobMV7d7pjAuBABggFZHUmLH6g6GslNilr79+uitPK3ZW4QWX4iQ1UPrGAbj7w6Xf4Ve3fAq7vftB1qw== dependencies: - "@novu/client" "2.6.5" - "@novu/shared" "2.6.5" "@tanstack/query-core" "^4.15.1" socket.io-client "4.7.2" + "@novu/client" "2.6.5" + "@novu/shared" "2.6.5" "@novu/js@2.6.5": version "2.6.5" @@ -2094,25 +2089,25 @@ resolved "https://registry.npmjs.org/@novu/node/-/node-2.6.5.tgz" integrity sha512-5GQI6EkjsLNbzUOXIRGbeFNsY1+bzI8sVhoeBCJfnJ9r/elFNRSMYsgVp5dCXtzLBrp7cjMfYNdLFhp1uUNaig== dependencies: - "@novu/shared" "2.6.5" axios "^1.6.8" axios-retry "^3.8.0" handlebars "^4.7.7" lodash.get "^4.4.2" lodash.merge "^4.6.2" uuid "^9.0.1" + "@novu/shared" "2.6.5" "@novu/ntfr-client@^0.0.4": version "0.0.4" resolved "https://registry.npmjs.org/@novu/ntfr-client/-/ntfr-client-0.0.4.tgz" integrity sha512-/9q+qGFHHFwMsuqoLwTADMjSx2JPagpJpm7jOZRzQZgSEDg9kwNAhADneRzVYhMyjdEXIQyjTmX/oP8ABAavFw== dependencies: + ws "^8.11.0" + zod "3.22.3" https "^1.0.0" node-fetch "^3.3.2" partysocket "^0.0.17" proxy-agent "^6.3.0" - ws "^8.11.0" - zod "3.22.3" "@novu/react@^2.6.5": version "2.6.5" @@ -2131,7 +2126,7 @@ resolved "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz" integrity sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw== -"@opentelemetry/api@1.9.0", "@opentelemetry/api@>=1.0.0 <1.10.0", "@opentelemetry/api@>=1.3.0 <1.10.0", "@opentelemetry/api@>=1.4.0 <1.10.0", "@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.1.0", "@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.8": +"@opentelemetry/api@1.9.0", "@opentelemetry/api@>=1.0.0 <1.10.0", "@opentelemetry/api@>=1.3.0 <1.10.0", "@opentelemetry/api@>=1.4.0 <1.10.0", "@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.8": version "1.9.0" resolved "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== @@ -2143,13 +2138,6 @@ dependencies: "@opentelemetry/api" "^1.0.0" -"@opentelemetry/api-logs@0.57.2": - version "0.57.2" - resolved "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz" - integrity sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A== - dependencies: - "@opentelemetry/api" "^1.3.0" - "@opentelemetry/context-async-hooks@1.25.1": version "1.25.1" resolved "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz" @@ -2167,11 +2155,11 @@ resolved "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.52.1.tgz" integrity sha512-qKgywId2DbdowPZpOBXQKp0B8DfhfIArmSic15z13Nk/JAOccBUQdPwDjDnjsM5f0ckZFMVR2t/tijTUAqDZoA== dependencies: - "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/core" "1.25.1" - "@opentelemetry/otlp-exporter-base" "0.52.1" - "@opentelemetry/otlp-transformer" "0.52.1" + "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/sdk-logs" "0.52.1" + "@opentelemetry/otlp-transformer" "0.52.1" + "@opentelemetry/otlp-exporter-base" "0.52.1" "@opentelemetry/exporter-trace-otlp-grpc@0.52.1": version "0.52.1" @@ -2180,10 +2168,10 @@ dependencies: "@grpc/grpc-js" "^1.7.1" "@opentelemetry/core" "1.25.1" - "@opentelemetry/otlp-grpc-exporter-base" "0.52.1" - "@opentelemetry/otlp-transformer" "0.52.1" "@opentelemetry/resources" "1.25.1" "@opentelemetry/sdk-trace-base" "1.25.1" + "@opentelemetry/otlp-transformer" "0.52.1" + "@opentelemetry/otlp-grpc-exporter-base" "0.52.1" "@opentelemetry/exporter-trace-otlp-http@0.52.1": version "0.52.1" @@ -2191,10 +2179,10 @@ integrity sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg== dependencies: "@opentelemetry/core" "1.25.1" - "@opentelemetry/otlp-exporter-base" "0.52.1" - "@opentelemetry/otlp-transformer" "0.52.1" "@opentelemetry/resources" "1.25.1" "@opentelemetry/sdk-trace-base" "1.25.1" + "@opentelemetry/otlp-transformer" "0.52.1" + "@opentelemetry/otlp-exporter-base" "0.52.1" "@opentelemetry/exporter-trace-otlp-proto@0.52.1": version "0.52.1" @@ -2202,10 +2190,10 @@ integrity sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ== dependencies: "@opentelemetry/core" "1.25.1" - "@opentelemetry/otlp-exporter-base" "0.52.1" - "@opentelemetry/otlp-transformer" "0.52.1" "@opentelemetry/resources" "1.25.1" "@opentelemetry/sdk-trace-base" "1.25.1" + "@opentelemetry/otlp-transformer" "0.52.1" + "@opentelemetry/otlp-exporter-base" "0.52.1" "@opentelemetry/exporter-zipkin@1.25.1": version "1.25.1" @@ -2217,29 +2205,17 @@ "@opentelemetry/sdk-trace-base" "1.25.1" "@opentelemetry/semantic-conventions" "1.25.1" -"@opentelemetry/instrumentation@0.52.1": +"@opentelemetry/instrumentation@0.52.1", "@opentelemetry/instrumentation@^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0": version "0.52.1" resolved "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz" integrity sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw== dependencies: - "@opentelemetry/api-logs" "0.52.1" - "@types/shimmer" "^1.0.2" - import-in-the-middle "^1.8.1" - require-in-the-middle "^7.1.1" semver "^7.5.2" shimmer "^1.2.1" - -"@opentelemetry/instrumentation@^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0": - version "0.57.2" - resolved "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz" - integrity sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg== - dependencies: - "@opentelemetry/api-logs" "0.57.2" - "@types/shimmer" "^1.2.0" + "@types/shimmer" "^1.0.2" import-in-the-middle "^1.8.1" require-in-the-middle "^7.1.1" - semver "^7.5.2" - shimmer "^1.2.1" + "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/otlp-exporter-base@0.52.1": version "0.52.1" @@ -2256,21 +2232,21 @@ dependencies: "@grpc/grpc-js" "^1.7.1" "@opentelemetry/core" "1.25.1" - "@opentelemetry/otlp-exporter-base" "0.52.1" "@opentelemetry/otlp-transformer" "0.52.1" + "@opentelemetry/otlp-exporter-base" "0.52.1" "@opentelemetry/otlp-transformer@0.52.1": version "0.52.1" resolved "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz" integrity sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg== dependencies: - "@opentelemetry/api-logs" "0.52.1" + protobufjs "^7.3.0" "@opentelemetry/core" "1.25.1" - "@opentelemetry/resources" "1.25.1" + "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/sdk-logs" "0.52.1" + "@opentelemetry/resources" "1.25.1" "@opentelemetry/sdk-metrics" "1.25.1" "@opentelemetry/sdk-trace-base" "1.25.1" - protobufjs "^7.3.0" "@opentelemetry/propagator-b3@1.25.1": version "1.25.1" @@ -2299,8 +2275,8 @@ resolved "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz" integrity sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA== dependencies: - "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/core" "1.25.1" + "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/resources" "1.25.1" "@opentelemetry/sdk-metrics@1.25.1": @@ -2308,28 +2284,28 @@ resolved "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz" integrity sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q== dependencies: + lodash.merge "^4.6.2" "@opentelemetry/core" "1.25.1" "@opentelemetry/resources" "1.25.1" - lodash.merge "^4.6.2" "@opentelemetry/sdk-node@0.52.1": version "0.52.1" resolved "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz" integrity sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA== dependencies: - "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/core" "1.25.1" - "@opentelemetry/exporter-trace-otlp-grpc" "0.52.1" - "@opentelemetry/exporter-trace-otlp-http" "0.52.1" - "@opentelemetry/exporter-trace-otlp-proto" "0.52.1" - "@opentelemetry/exporter-zipkin" "1.25.1" - "@opentelemetry/instrumentation" "0.52.1" - "@opentelemetry/resources" "1.25.1" + "@opentelemetry/api-logs" "0.52.1" "@opentelemetry/sdk-logs" "0.52.1" + "@opentelemetry/resources" "1.25.1" "@opentelemetry/sdk-metrics" "1.25.1" "@opentelemetry/sdk-trace-base" "1.25.1" "@opentelemetry/sdk-trace-node" "1.25.1" + "@opentelemetry/exporter-zipkin" "1.25.1" + "@opentelemetry/instrumentation" "0.52.1" "@opentelemetry/semantic-conventions" "1.25.1" + "@opentelemetry/exporter-trace-otlp-grpc" "0.52.1" + "@opentelemetry/exporter-trace-otlp-http" "0.52.1" + "@opentelemetry/exporter-trace-otlp-proto" "0.52.1" "@opentelemetry/sdk-trace-base@1.25.1": version "1.25.1" @@ -2345,12 +2321,12 @@ resolved "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz" integrity sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ== dependencies: - "@opentelemetry/context-async-hooks" "1.25.1" + semver "^7.5.2" "@opentelemetry/core" "1.25.1" "@opentelemetry/propagator-b3" "1.25.1" - "@opentelemetry/propagator-jaeger" "1.25.1" "@opentelemetry/sdk-trace-base" "1.25.1" - semver "^7.5.2" + "@opentelemetry/propagator-jaeger" "1.25.1" + "@opentelemetry/context-async-hooks" "1.25.1" "@opentelemetry/semantic-conventions@1.25.1": version "1.25.1" @@ -2492,9 +2468,9 @@ resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" + "@pnpm/network.ca-file" "^1.0.1" + "@pnpm/config.env-replace" "^1.1.0" "@popperjs/core@^2.11.8", "@popperjs/core@^2.9.0": version "2.11.8" @@ -2502,70 +2478,70 @@ integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== "@prisma/adapter-neon@^6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/adapter-neon/-/adapter-neon-6.3.1.tgz" - integrity sha512-yDCeqQ0EYT/DBL6G2uh01IlVrCr9Jli6SXa1yvdl/Kq4O/Hjj1i+Oxg4FskHVStLvlo6bqNxEFtLEuFCLCXG1A== + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/adapter-neon/-/adapter-neon-6.4.0.tgz" + integrity sha512-iRaNmzESQLltEb51hv9jChNFnUDx4VbDvpcyI25kLYwh/RJJR18KjtYCrq4WX22ruFxatlXKXKGZ/XS+bOY2kQ== dependencies: - "@prisma/driver-adapter-utils" "6.3.1" postgres-array "3.0.2" + "@prisma/driver-adapter-utils" "6.4.0" "@prisma/client@>=2.26.0 || >=3 || >=4 || >=5", "@prisma/client@>=4.16.1", "@prisma/client@^6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/client/-/client-6.3.1.tgz" - integrity sha512-ARAJaPs+eBkemdky/XU3cvGRl+mIPHCN2lCXsl5Vlb0E2gV+R6IN7aCI8CisRGszEZondwIsW9Iz8EJkTdykyA== + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/client/-/client-6.4.0.tgz" + integrity sha512-48tLb+VL7iuuqJXjD4Xbqa622fuh8UtqmjTf39AKrQjlTUdNaMc9sC/c49eXQkcnrAdh9FoS1qVupmZSYiZ9TQ== -"@prisma/debug@6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/debug/-/debug-6.3.1.tgz" - integrity sha512-RrEBkd+HLZx+ydfmYT0jUj7wjLiS95wfTOSQ+8FQbvb6vHh5AeKfEPt/XUQ5+Buljj8hltEfOslEW57/wQIVeA== +"@prisma/debug@6.4.0": + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-6.4.0.tgz" + integrity sha512-zXsLpNXLypdThJjItqk0u/3uitcD9+9rNynZPPu4Xp7664yp8VbxCGTVBS696vA0e3kw0Xv/4muR+cNHkxspcw== -"@prisma/driver-adapter-utils@6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-6.3.1.tgz" - integrity sha512-Z30oSnSFYlzU/Z96lfApqd42EzSXwxj7iPD34iGdZ+fecGlOO9WaBY2tlzCdt7sdhxIxNGEL8tD1o4EHX8tLNA== +"@prisma/driver-adapter-utils@6.4.0": + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/driver-adapter-utils/-/driver-adapter-utils-6.4.0.tgz" + integrity sha512-lfDUpSAyhmn3JBAoxpT/FAPl5bB+8qF39hA13KvwH0mBBxTzsI7mWZ/Jv4OFnCjeXSjPtxqUJLkPAdVuSK9g1g== dependencies: - "@prisma/debug" "6.3.1" + "@prisma/debug" "6.4.0" -"@prisma/engines@6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-6.3.1.tgz" - integrity sha512-sXdqEVLyGAJ5/iUoG/Ea5AdHMN71m6PzMBWRQnLmhhOejzqAaEr8rUd623ql6OJpED4s/U4vIn4dg1qkF7vGag== +"@prisma/engines@6.4.0": + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-6.4.0.tgz" + integrity sha512-SeUigmWj0uhnSjYKWkG//Gzj4XHy6bi1TXgTZ+pPujxGELJgOvecgaA/bHmWokyHPnbYWRaoSwQDxPjihYzSZg== dependencies: - "@prisma/debug" "6.3.1" - "@prisma/engines-version" "6.3.0-17.acc0b9dd43eb689cbd20c9470515d719db10d0b0" - "@prisma/fetch-engine" "6.3.1" - "@prisma/get-platform" "6.3.1" + "@prisma/engines-version" "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d" + "@prisma/debug" "6.4.0" + "@prisma/fetch-engine" "6.4.0" + "@prisma/get-platform" "6.4.0" -"@prisma/engines-version@6.3.0-17.acc0b9dd43eb689cbd20c9470515d719db10d0b0": - version "6.3.0-17.acc0b9dd43eb689cbd20c9470515d719db10d0b0" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.3.0-17.acc0b9dd43eb689cbd20c9470515d719db10d0b0.tgz" - integrity sha512-R/ZcMuaWZT2UBmgX3Ko6PAV3f8//ZzsjRIG1eKqp3f2rqEqVtCv+mtzuH2rBPUC9ujJ5kCb9wwpxeyCkLcHVyA== +"@prisma/engines-version@6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d": + version "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d.tgz" + integrity sha512-Xq54qw55vaCGrGgIJqyDwOq0TtjZPJEWsbQAHugk99hpDf2jcEeQhUcF+yzEsSqegBaDNLA4IC8Nn34sXmkiTQ== "@prisma/extension-accelerate@^1.2.2": version "1.2.2" resolved "https://registry.npmjs.org/@prisma/extension-accelerate/-/extension-accelerate-1.2.2.tgz" integrity sha512-LOlfkG6If+o8PFRzLzp26ackP/d+j2HrkTJaxuV/Wd+sdAHz/AkmzEDGbo2UpHFpxEM9hWMBe3ScSwUKYUDOXg== -"@prisma/fetch-engine@6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.3.1.tgz" - integrity sha512-HOf/0umOgt+/S2xtZze+FHKoxpVg4YpVxROr6g2YG09VsI3Ipyb+rGvD6QGbCqkq5NTWAAZoOGNL+oy7t+IhaQ== +"@prisma/fetch-engine@6.4.0": + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.4.0.tgz" + integrity sha512-CN/Qb/+n+15gfhN0ipeUcGu/oGw7HIwVw4DCKD11190dneVGpa+n0wxwXTFJlV0vkAeSBSkQ3y1ugKAa5s/VPg== dependencies: - "@prisma/debug" "6.3.1" - "@prisma/engines-version" "6.3.0-17.acc0b9dd43eb689cbd20c9470515d719db10d0b0" - "@prisma/get-platform" "6.3.1" + "@prisma/engines-version" "6.4.0-29.a9055b89e58b4b5bfb59600785423b1db3d0e75d" + "@prisma/debug" "6.4.0" + "@prisma/get-platform" "6.4.0" -"@prisma/get-platform@6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.3.1.tgz" - integrity sha512-AYLq6Hk9xG73JdLWJ3Ip9Wg/vlP7xPvftGBalsPzKDOHr/ImhwJ09eS8xC2vNT12DlzGxhfk8BkL0ve2OriNhQ== +"@prisma/get-platform@6.4.0": + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.4.0.tgz" + integrity sha512-khANH9QbCRhFWiGj3qmR0clxLTU76Cimxf4JAhjhtpsc1jdG1A9geGe0kU4WAQ1YpiKFJ10s9j2wbbE/jSP99Q== dependencies: - "@prisma/debug" "6.3.1" + "@prisma/debug" "6.4.0" "@prisma/instrumentation@^6.3.1": - version "6.3.1" - resolved "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.3.1.tgz" - integrity sha512-XETCiBQYm8p/3ouNs0sv00MqjeYYM6sge0CSgx+Oevex99cfOBPt+J6JbOPyYqYcyOd3m2j2xRlXkPUKmpuxiA== + version "6.4.0" + resolved "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-6.4.0.tgz" + integrity sha512-7QcoOE0DpxHaC/3Q+UTKvDCVL3Wc9C0MYHjGvMl9/LKLNI/D33CTMXJji/otWxOeRYFl6ENDB4768Og0grT9tw== dependencies: "@opentelemetry/instrumentation" "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" @@ -2631,9 +2607,9 @@ extract-zip "^2.0.1" progress "^2.0.3" proxy-agent "^6.5.0" - semver "^7.7.0" tar-fs "^3.0.8" yargs "^17.7.2" + semver "^7.7.0" "@radix-ui/number@1.1.0": version "1.1.0" @@ -2657,14 +2633,14 @@ resolved "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.3.tgz" integrity sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A== dependencies: + "@radix-ui/react-id" "1.1.0" "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collapsible" "1.1.3" - "@radix-ui/react-collection" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-collapsible" "1.1.3" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-alert-dialog@^1.1.2": @@ -2673,11 +2649,11 @@ integrity sha512-p4XnPqgej8sZAAReCAKgz1REYZEBLR8hU9Pg27wFnCWIMc8g1ccCs0FjBcy05V15VTu8pAePw/VDYeOm/uZ6yQ== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-dialog" "1.1.6" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-slot" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-arrow@1.1.2": version "1.1.2" @@ -2702,37 +2678,37 @@ integrity sha512-wP0CPAHq+P5I4INKe3hJrIa1WoNqqrejzW+zoU0rOvo1b9gDEJJFl2rYfO1PYJUQCc2H1WZxIJmyv9BS8i5fLw== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-use-size" "1.1.0" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-collapsible@1.1.3", "@radix-ui/react-collapsible@^1.1.1": version "1.1.3" resolved "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.3.tgz" integrity sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw== dependencies: + "@radix-ui/react-id" "1.1.0" "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-id" "1.1.0" "@radix-ui/react-presence" "1.1.2" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-collection@1.1.2": version "1.1.2" resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz" integrity sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-context" "1.1.1" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-slot" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-compose-refs@1.0.0": version "1.0.0" @@ -2764,8 +2740,8 @@ integrity sha512-aUP99QZ3VU84NPsHeaFt4cQUNgJqFsLLOt/RbbWXszZ6MP0DpDyjkFZORr4RpAEx3sUBk+Kc8h13yGtC5Qw8dg== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-context" "1.1.1" "@radix-ui/react-menu" "2.1.6" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-controllable-state" "1.1.0" @@ -2775,41 +2751,41 @@ resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.0.tgz" integrity sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q== dependencies: + aria-hidden "^1.1.1" "@babel/runtime" "^7.13.10" - "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" - "@radix-ui/react-context" "1.0.0" - "@radix-ui/react-dismissable-layer" "1.0.0" - "@radix-ui/react-focus-guards" "1.0.0" - "@radix-ui/react-focus-scope" "1.0.0" "@radix-ui/react-id" "1.0.0" + "@radix-ui/primitive" "1.0.0" + react-remove-scroll "2.5.4" + "@radix-ui/react-slot" "1.0.0" "@radix-ui/react-portal" "1.0.0" + "@radix-ui/react-context" "1.0.0" "@radix-ui/react-presence" "1.0.0" "@radix-ui/react-primitive" "1.0.0" - "@radix-ui/react-slot" "1.0.0" + "@radix-ui/react-focus-scope" "1.0.0" + "@radix-ui/react-compose-refs" "1.0.0" + "@radix-ui/react-focus-guards" "1.0.0" + "@radix-ui/react-dismissable-layer" "1.0.0" "@radix-ui/react-use-controllable-state" "1.0.0" - aria-hidden "^1.1.1" - react-remove-scroll "2.5.4" "@radix-ui/react-dialog@1.1.6", "@radix-ui/react-dialog@^1.1.1", "@radix-ui/react-dialog@^1.1.2": version "1.1.6" resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz" integrity sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.5" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.2" + aria-hidden "^1.2.4" "@radix-ui/react-id" "1.1.0" + "@radix-ui/primitive" "1.1.1" + react-remove-scroll "^2.6.3" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-presence" "1.1.2" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-slot" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-use-controllable-state" "1.1.0" - aria-hidden "^1.2.4" - react-remove-scroll "^2.6.3" "@radix-ui/react-direction@1.1.0": version "1.1.0" @@ -2823,8 +2799,8 @@ dependencies: "@babel/runtime" "^7.13.10" "@radix-ui/primitive" "1.0.0" - "@radix-ui/react-compose-refs" "1.0.0" "@radix-ui/react-primitive" "1.0.0" + "@radix-ui/react-compose-refs" "1.0.0" "@radix-ui/react-use-callback-ref" "1.0.0" "@radix-ui/react-use-escape-keydown" "1.0.0" @@ -2834,8 +2810,8 @@ integrity sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-escape-keydown" "1.1.0" @@ -2844,12 +2820,12 @@ resolved "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.6.tgz" integrity sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" "@radix-ui/react-id" "1.1.0" + "@radix-ui/primitive" "1.1.1" "@radix-ui/react-menu" "2.1.6" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-focus-guards@1.0.0": @@ -2870,8 +2846,8 @@ integrity sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ== dependencies: "@babel/runtime" "^7.13.10" - "@radix-ui/react-compose-refs" "1.0.0" "@radix-ui/react-primitive" "1.0.0" + "@radix-ui/react-compose-refs" "1.0.0" "@radix-ui/react-use-callback-ref" "1.0.0" "@radix-ui/react-focus-scope@1.1.2": @@ -2879,8 +2855,8 @@ resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz" integrity sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA== dependencies: - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-hover-card@^1.1.2": @@ -2889,13 +2865,13 @@ integrity sha512-E4ozl35jq0VRlrdc4dhHrNSV0JqBb4Jy73WAhBEK7JoYnQ83ED5r0Rb/XdVKw89ReAJN38N492BAPBZQ57VmqQ== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-popper" "1.2.2" "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-presence" "1.1.2" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-icons@^1.3.0": @@ -2930,81 +2906,81 @@ resolved "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.6.tgz" integrity sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.5" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.2" + aria-hidden "^1.2.4" "@radix-ui/react-id" "1.1.0" + "@radix-ui/primitive" "1.1.1" + react-remove-scroll "^2.6.3" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-popper" "1.2.2" "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-focus-guards" "1.1.1" "@radix-ui/react-roving-focus" "1.1.2" - "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-use-callback-ref" "1.1.0" - aria-hidden "^1.2.4" - react-remove-scroll "^2.6.3" + "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-navigation-menu@^1.2.1": version "1.2.5" resolved "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.5.tgz" integrity sha512-myMHHQUZ3ZLTi8W381/Vu43Ia0NqakkQZ2vzynMmTUtQQ9kNkjzhOwkZC9TAM5R07OZUVIQyHC06f/9JZJpvvA== dependencies: + "@radix-ui/react-id" "1.1.0" "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.5" - "@radix-ui/react-id" "1.1.0" "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-previous" "1.1.0" "@radix-ui/react-visually-hidden" "1.1.2" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.5" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-popover@^1.1.2": version "1.1.6" resolved "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.6.tgz" integrity sha512-NQouW0x4/GnkFJ/pRqsIS3rM/k97VzKnVb2jB7Gq7VEGPy5g7uNV1ykySFt7eWSp3i2uSGFwaJcvIRJBAHmmFg== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.5" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.2" + aria-hidden "^1.2.4" "@radix-ui/react-id" "1.1.0" + "@radix-ui/primitive" "1.1.1" + react-remove-scroll "^2.6.3" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-popper" "1.2.2" "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-presence" "1.1.2" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-slot" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-use-controllable-state" "1.1.0" - aria-hidden "^1.2.4" - react-remove-scroll "^2.6.3" "@radix-ui/react-popper@1.2.2": version "1.2.2" resolved "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz" integrity sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA== dependencies: - "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/rect" "1.1.0" "@radix-ui/react-arrow" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" + "@floating-ui/react-dom" "^2.0.0" "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-use-rect" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-use-rect" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" - "@radix-ui/rect" "1.1.0" "@radix-ui/react-portal@1.0.0": version "1.0.0" @@ -3068,28 +3044,28 @@ integrity sha512-xtCsqt8Rp09FK50ItqEqTJ7Sxanz8EM8dnkVIhJrc/wkMMomSmXHvYbhv3E7Zx4oXh98aaLt9W679SUYXg4IDA== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-roving-focus" "1.1.2" - "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-roving-focus@1.1.2": version "1.1.2" resolved "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz" integrity sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw== dependencies: + "@radix-ui/react-id" "1.1.0" "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-controllable-state" "1.1.0" @@ -3100,11 +3076,11 @@ dependencies: "@radix-ui/number" "1.1.0" "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-callback-ref" "1.1.0" "@radix-ui/react-use-layout-effect" "1.1.0" @@ -3113,27 +3089,27 @@ resolved "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.6.tgz" integrity sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg== dependencies: + aria-hidden "^1.2.4" "@radix-ui/number" "1.1.0" - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-dismissable-layer" "1.1.5" - "@radix-ui/react-focus-guards" "1.1.1" - "@radix-ui/react-focus-scope" "1.1.2" "@radix-ui/react-id" "1.1.0" + "@radix-ui/primitive" "1.1.1" + react-remove-scroll "^2.6.3" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-popper" "1.2.2" "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-slot" "1.1.2" - "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-focus-scope" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-focus-guards" "1.1.1" "@radix-ui/react-use-previous" "1.1.0" "@radix-ui/react-visually-hidden" "1.1.2" - aria-hidden "^1.2.4" - react-remove-scroll "^2.6.3" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.5" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-separator@^1.1.0": version "1.1.2" @@ -3149,15 +3125,15 @@ dependencies: "@radix-ui/number" "1.1.0" "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-use-size" "1.1.0" "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-controllable-state" "1.1.0" - "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-slot@1.0.0": version "1.0.0" @@ -3180,23 +3156,23 @@ integrity sha512-1nc+vjEOQkJVsJtWPSiISGT6OKm4SiOdjMo+/icLxo2G4vxz1GntC5MzfL4v8ey9OEfw787QCD1y3mUv0NiFEQ== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-use-size" "1.1.0" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-use-previous" "1.1.0" - "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-tabs@^1.1.1": version "1.1.3" resolved "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.3.tgz" integrity sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng== dependencies: + "@radix-ui/react-id" "1.1.0" "@radix-ui/primitive" "1.1.1" "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-direction" "1.1.0" - "@radix-ui/react-id" "1.1.0" "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-direction" "1.1.0" "@radix-ui/react-primitive" "2.0.2" "@radix-ui/react-roving-focus" "1.1.2" "@radix-ui/react-use-controllable-state" "1.1.0" @@ -3207,35 +3183,35 @@ integrity sha512-gN4dpuIVKEgpLn1z5FhzT9mYRUitbfZq9XqN/7kkBMUgFTzTG8x/KszWJugJXHcwxckY8xcKDZPz7kG3o6DsUA== dependencies: "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-collection" "1.1.2" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-presence" "1.1.2" "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-visually-hidden" "1.1.2" "@radix-ui/react-use-callback-ref" "1.1.0" - "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-use-layout-effect" "1.1.0" - "@radix-ui/react-visually-hidden" "1.1.2" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-tooltip@^1.1.3": version "1.1.8" resolved "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.8.tgz" integrity sha512-YAA2cu48EkJZdAMHC0dqo9kialOcRStbtiY4nJPaht7Ptrhcvpo+eDChaM6BIs8kL6a8Z5l5poiqLnXcNduOkA== dependencies: - "@radix-ui/primitive" "1.1.1" - "@radix-ui/react-compose-refs" "1.1.1" - "@radix-ui/react-context" "1.1.1" - "@radix-ui/react-dismissable-layer" "1.1.5" "@radix-ui/react-id" "1.1.0" + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-slot" "1.1.2" "@radix-ui/react-popper" "1.2.2" "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-context" "1.1.1" "@radix-ui/react-presence" "1.1.2" "@radix-ui/react-primitive" "2.0.2" - "@radix-ui/react-slot" "1.1.2" - "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-compose-refs" "1.1.1" "@radix-ui/react-visually-hidden" "1.1.2" + "@radix-ui/react-dismissable-layer" "1.1.5" + "@radix-ui/react-use-controllable-state" "1.1.0" "@radix-ui/react-use-callback-ref@1.0.0": version "1.0.0" @@ -3354,26 +3330,26 @@ resolved "https://registry.npmjs.org/@react-email/components/-/components-0.0.31.tgz" integrity sha512-rQsTY9ajobncix9raexhBjC7O6cXUMc87eNez2gnB1FwtkUO8DqWZcktbtwOJi7GKmuAPTx0o/IOFtiBNXziKA== dependencies: + "@react-email/hr" "0.0.11" + "@react-email/img" "0.0.11" + "@react-email/row" "0.0.12" "@react-email/body" "0.0.11" - "@react-email/button" "0.0.19" - "@react-email/code-block" "0.0.11" - "@react-email/code-inline" "0.0.5" - "@react-email/column" "0.0.13" - "@react-email/container" "0.0.15" "@react-email/font" "0.0.9" "@react-email/head" "0.0.12" - "@react-email/heading" "0.0.15" - "@react-email/hr" "0.0.11" "@react-email/html" "0.0.11" - "@react-email/img" "0.0.11" "@react-email/link" "0.0.12" - "@react-email/markdown" "0.0.14" - "@react-email/preview" "0.0.12" + "@react-email/text" "0.0.11" + "@react-email/button" "0.0.19" + "@react-email/column" "0.0.13" "@react-email/render" "1.0.3" - "@react-email/row" "0.0.12" + "@react-email/heading" "0.0.15" + "@react-email/preview" "0.0.12" "@react-email/section" "0.0.16" + "@react-email/markdown" "0.0.14" "@react-email/tailwind" "1.0.4" - "@react-email/text" "0.0.11" + "@react-email/container" "0.0.15" + "@react-email/code-block" "0.0.11" + "@react-email/code-inline" "0.0.5" "@react-email/container@0.0.15": version "0.0.15" @@ -3432,18 +3408,18 @@ resolved "https://registry.npmjs.org/@react-email/render/-/render-0.0.10.tgz" integrity sha512-FdLhg/E5PH5qZU/jf9NbvRi5v5134kbX7o8zIhOJIk/TALxB18ggprnH5tQX96dGQFqlLob8OLReaRwrpEF7YA== dependencies: - html-to-text "9.0.5" - pretty "2.0.0" react "18.2.0" + pretty "2.0.0" react-dom "18.2.0" + html-to-text "9.0.5" "@react-email/render@1.0.1": version "1.0.1" resolved "https://registry.npmjs.org/@react-email/render/-/render-1.0.1.tgz" integrity sha512-W3gTrcmLOVYnG80QuUp22ReIT/xfLsVJ+n7ghSlG2BITB8evNABn1AO2rGQoXuK84zKtDAlxCdm3hRyIpZdGSA== dependencies: - html-to-text "9.0.5" js-beautify "^1.14.11" + html-to-text "9.0.5" react-promise-suspense "0.3.4" "@react-email/render@1.0.3": @@ -3451,8 +3427,8 @@ resolved "https://registry.npmjs.org/@react-email/render/-/render-1.0.3.tgz" integrity sha512-VQ8g4SuIq/jWdfBTdTjb7B8Np0jj+OoD7VebfdHhLTZzVQKesR2aigpYqE/ZXmwj4juVxDm8T2b6WIIu48rPCg== dependencies: - html-to-text "9.0.5" prettier "3.3.3" + html-to-text "9.0.5" react-promise-suspense "0.3.4" "@react-email/row@0.0.12": @@ -3481,9 +3457,9 @@ integrity sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg== "@rollup/rollup-darwin-arm64@^4.18.1": - version "4.34.7" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.7.tgz" - integrity sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA== + version "4.34.8" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz" + integrity sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q== "@scena/dragscroll@^1.4.0": version "1.4.0" @@ -3512,10 +3488,10 @@ resolved "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.4.1.tgz" integrity sha512-kV0Pf33HnthuBOVdYNani21kYyj118Fn+9757bxqoksiXoZlYvBsFq6giNdCsKcTIE1eAMqNDq3xE1VQ0cfsHA== dependencies: - "@lukeed/uuid" "^2.0.0" - "@segment/analytics-generic-utils" "1.1.1" dset "^3.1.2" tslib "^2.4.1" + "@lukeed/uuid" "^2.0.0" + "@segment/analytics-generic-utils" "1.1.1" "@segment/analytics-generic-utils@1.1.1": version "1.1.1" @@ -3529,12 +3505,12 @@ resolved "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-1.3.0.tgz" integrity sha512-lRLz1WZaDokMoUe299yP5JkInc3OgJuqNNlxb6j0q22umCiq6b5iDo2gRmFn93reirIvJxWIicQsGrHd93q8GQ== dependencies: + tslib "^2.4.1" + buffer "^6.0.3" + node-fetch "^2.6.7" "@lukeed/uuid" "^2.0.0" "@segment/analytics-core" "1.4.1" "@segment/analytics-generic-utils" "1.1.1" - buffer "^6.0.3" - node-fetch "^2.6.7" - tslib "^2.4.1" "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" @@ -3544,12 +3520,12 @@ domhandler "^5.0.3" selderee "^0.11.0" -"@simplewebauthn/browser@^13.0.0", "@simplewebauthn/browser@^9.0.1": +"@simplewebauthn/browser@^13.0.0": version "13.1.0" resolved "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-13.1.0.tgz" integrity sha512-WuHZ/PYvyPJ9nxSzgHtOEjogBhwJfC8xzYkPC+rR/+8chl/ft4ngjiK8kSU5HtRJfczupyOh33b25TjYbvwAcg== -"@simplewebauthn/server@^13.0.0", "@simplewebauthn/server@^9.0.2": +"@simplewebauthn/server@^13.0.0": version "13.1.1" resolved "https://registry.npmjs.org/@simplewebauthn/server/-/server-13.1.1.tgz" integrity sha512-1hsLpRHfSuMB9ee2aAdh0Htza/X3f4djhYISrggqGe3xopNjOcePiSDkDDoPzDYaaMCrbqGP1H2TYU7bgL9PmA== @@ -3567,20 +3543,20 @@ resolved "https://registry.npmjs.org/@slack/bolt/-/bolt-3.22.0.tgz" integrity sha512-iKDqGPEJDnrVwxSVlFW6OKTkijd7s4qLBeSufoBsTM0reTyfdp/5izIQVkxNfzjHi3o6qjdYbRXkYad5HBsBog== dependencies: - "@slack/logger" "^4.0.0" + axios "^1.7.4" + tsscmp "^1.0.6" + express "^4.21.0" + raw-body "^2.3.3" "@slack/oauth" "^2.6.3" - "@slack/socket-mode" "^1.3.6" "@slack/types" "^2.13.0" + "@slack/logger" "^4.0.0" + "@types/tsscmp" "^1.0.0" "@slack/web-api" "^6.13.0" "@types/express" "^4.16.1" - "@types/promise.allsettled" "^1.0.3" - "@types/tsscmp" "^1.0.0" - axios "^1.7.4" - express "^4.21.0" path-to-regexp "^8.1.0" + "@slack/socket-mode" "^1.3.6" promise.allsettled "^1.0.2" - raw-body "^2.3.3" - tsscmp "^1.0.6" + "@types/promise.allsettled" "^1.0.3" "@slack/logger@^3.0.0": version "3.0.0" @@ -3601,25 +3577,25 @@ resolved "https://registry.npmjs.org/@slack/oauth/-/oauth-2.6.3.tgz" integrity sha512-1amXs6xRkJpoH6zSgjVPgGEJXCibKNff9WNDijcejIuVy1HFAl1adh7lehaGNiHhTWfQkfKxBiF+BGn56kvoFw== dependencies: - "@slack/logger" "^3.0.0" - "@slack/web-api" "^6.12.1" - "@types/jsonwebtoken" "^8.3.7" "@types/node" ">=12" jsonwebtoken "^9.0.0" + "@slack/logger" "^3.0.0" + "@slack/web-api" "^6.12.1" lodash.isstring "^4.0.1" + "@types/jsonwebtoken" "^8.3.7" "@slack/socket-mode@^1.3.6": version "1.3.6" resolved "https://registry.npmjs.org/@slack/socket-mode/-/socket-mode-1.3.6.tgz" integrity sha512-G+im7OP7jVqHhiNSdHgv2VVrnN5U7KY845/5EZimZkrD4ZmtV0P3BiWkgeJhPtdLuM7C7i6+M6h6Bh+S4OOalA== dependencies: - "@slack/logger" "^3.0.0" - "@slack/web-api" "^6.12.1" - "@types/node" ">=12.0.0" + ws "^7.5.3" + finity "^0.5.4" "@types/ws" "^7.4.7" + "@types/node" ">=12.0.0" + "@slack/logger" "^3.0.0" eventemitter3 "^5" - finity "^0.5.4" - ws "^7.5.3" + "@slack/web-api" "^6.12.1" "@slack/types@^2.11.0", "@slack/types@^2.13.0", "@slack/types@^2.9.0": version "2.14.0" @@ -3631,35 +3607,35 @@ resolved "https://registry.npmjs.org/@slack/web-api/-/web-api-6.13.0.tgz" integrity sha512-dv65crIgdh9ZYHrevLU6XFHTQwTyDmNqEqzuIrV+Vqe/vgiG6w37oex5ePDU1RGm2IJ90H8iOvHFvzdEO/vB+g== dependencies: - "@slack/logger" "^3.0.0" - "@slack/types" "^2.11.0" - "@types/is-stream" "^1.1.0" - "@types/node" ">=12.0.0" axios "^1.7.4" - eventemitter3 "^3.1.0" - form-data "^2.5.0" - is-electron "2.2.2" - is-stream "^1.1.0" p-queue "^6.6.1" p-retry "^4.0.0" + form-data "^2.5.0" + is-stream "^1.1.0" + "@types/node" ">=12.0.0" + is-electron "2.2.2" + "@slack/types" "^2.11.0" + "@slack/logger" "^3.0.0" + eventemitter3 "^3.1.0" + "@types/is-stream" "^1.1.0" "@slack/web-api@^7.8.0": version "7.8.0" resolved "https://registry.npmjs.org/@slack/web-api/-/web-api-7.8.0.tgz" integrity sha512-d4SdG+6UmGdzWw38a4sN3lF/nTEzsDxhzU13wm10ejOpPehtmRoqBKnPztQUfFiWbNvSb4czkWYJD4kt+5+Fuw== dependencies: - "@slack/logger" "^4.0.0" - "@slack/types" "^2.9.0" - "@types/node" ">=18.0.0" - "@types/retry" "0.12.0" axios "^1.7.8" - eventemitter3 "^5.0.1" - form-data "^4.0.0" - is-electron "2.2.2" - is-stream "^2" + retry "^0.13.1" p-queue "^6" p-retry "^4" - retry "^0.13.1" + form-data "^4.0.0" + is-stream "^2" + "@types/node" ">=18.0.0" + is-electron "2.2.2" + "@slack/types" "^2.9.0" + "@types/retry" "0.12.0" + "@slack/logger" "^4.0.0" + eventemitter3 "^5.0.1" "@smithy/abort-controller@^4.0.1": version "4.0.1" @@ -3681,8 +3657,8 @@ resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz" integrity sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig== dependencies: - "@smithy/util-base64" "^4.0.0" tslib "^2.6.2" + "@smithy/util-base64" "^4.0.0" "@smithy/config-resolver@^4.0.1": version "4.0.1" @@ -4007,9 +3983,9 @@ resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz" integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== dependencies: - "@smithy/util-buffer-from" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" "@smithy/util-body-length-browser@^4.0.0": version "4.0.0" @@ -4030,16 +4006,16 @@ resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz" integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== dependencies: - "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" + "@smithy/is-array-buffer" "^2.2.0" "@smithy/util-buffer-from@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz" integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== dependencies: - "@smithy/is-array-buffer" "^4.0.0" tslib "^2.6.2" + "@smithy/is-array-buffer" "^4.0.0" "@smithy/util-config-provider@^4.0.0": version "4.0.0" @@ -4131,16 +4107,16 @@ resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== dependencies: - "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" + "@smithy/util-buffer-from" "^2.2.0" "@smithy/util-utf8@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz" integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== dependencies: - "@smithy/util-buffer-from" "^4.0.0" tslib "^2.6.2" + "@smithy/util-buffer-from" "^4.0.0" "@smithy/util-waiter@^4.0.2": version "4.0.2" @@ -4221,9 +4197,9 @@ resolved "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz" integrity sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA== dependencies: + lodash.merge "^4.6.2" lodash.castarray "^4.4.0" lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" "@tanstack/query-core@^4.15.1": @@ -4231,17 +4207,17 @@ resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz" integrity sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA== -"@tanstack/query-core@5.66.0": - version "5.66.0" - resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.66.0.tgz" - integrity sha512-J+JeBtthiKxrpzUu7rfIPDzhscXF2p5zE/hVdrqkACBP8Yu0M96mwJ5m/8cPPYQE9aRNvXztXHlNwIh4FEeMZw== +"@tanstack/query-core@5.66.4": + version "5.66.4" + resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.66.4.tgz" + integrity sha512-skM/gzNX4shPkqmdTCSoHtJAPMTtmIJNS0hE+xwTTUVYwezArCT34NMermABmBVUg5Ls5aiUXEDXfqwR1oVkcA== "@tanstack/react-query@^5.66.0": - version "5.66.0" - resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.66.0.tgz" - integrity sha512-z3sYixFQJe8hndFnXgWu7C79ctL+pI0KAelYyW+khaNJ1m22lWrhJU2QrsTcRKMuVPtoZvfBYrTStIdKo+x0Xw== + version "5.66.7" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.66.7.tgz" + integrity sha512-qd3q/tUpF2K1xItfPZddk1k/8pSXnovg41XyCqJgPoyYEirMBtB0sVEVVQ/CsAOngzgWtBPXimVf4q4kM9uO6A== dependencies: - "@tanstack/query-core" "5.66.0" + "@tanstack/query-core" "5.66.4" "@tanstack/react-table@^8.21.2": version "8.21.2" @@ -4451,62 +4427,62 @@ resolved "https://registry.npmjs.org/@tiptap/pm/-/pm-2.11.5.tgz" integrity sha512-z9JFtqc5ZOsdQLd9vRnXfTCQ8v5ADAfRt9Nm7SqP6FUHII8E1hs38ACzf5xursmth/VonJYb5+73Pqxk1hGIPw== dependencies: - prosemirror-changeset "^2.2.1" + prosemirror-menu "^1.2.4" + prosemirror-view "^1.37.0" + prosemirror-model "^1.23.0" + prosemirror-state "^1.4.3" prosemirror-collab "^1.3.1" + prosemirror-keymap "^1.2.2" + prosemirror-tables "^1.6.3" + prosemirror-history "^1.4.1" prosemirror-commands "^1.6.2" - prosemirror-dropcursor "^1.8.1" + prosemirror-markdown "^1.13.1" + prosemirror-changeset "^2.2.1" prosemirror-gapcursor "^1.3.2" - prosemirror-history "^1.4.1" + prosemirror-transform "^1.10.2" + prosemirror-dropcursor "^1.8.1" prosemirror-inputrules "^1.4.0" - prosemirror-keymap "^1.2.2" - prosemirror-markdown "^1.13.1" - prosemirror-menu "^1.2.4" - prosemirror-model "^1.23.0" - prosemirror-schema-basic "^1.2.3" prosemirror-schema-list "^1.4.1" - prosemirror-state "^1.4.3" - prosemirror-tables "^1.6.3" + prosemirror-schema-basic "^1.2.3" prosemirror-trailing-node "^3.0.0" - prosemirror-transform "^1.10.2" - prosemirror-view "^1.37.0" "@tiptap/react@^2.11.2", "@tiptap/react@^2.11.5", "@tiptap/react@^2.9.1": version "2.11.5" resolved "https://registry.npmjs.org/@tiptap/react/-/react-2.11.5.tgz" integrity sha512-Dp8eHL1G+R/C4+QzAczyb3t1ovexEIZx9ln7SGEM+cT1KHKAw9XGPRgsp92+NQaYI+EdEb/YqoBOSzQcd18/OQ== dependencies: - "@tiptap/extension-bubble-menu" "^2.11.5" - "@tiptap/extension-floating-menu" "^2.11.5" - "@types/use-sync-external-store" "^0.0.6" fast-deep-equal "^3" use-sync-external-store "^1" + "@tiptap/extension-bubble-menu" "^2.11.5" + "@types/use-sync-external-store" "^0.0.6" + "@tiptap/extension-floating-menu" "^2.11.5" "@tiptap/starter-kit@^2.11.2", "@tiptap/starter-kit@^2.11.5", "@tiptap/starter-kit@^2.9.1": version "2.11.5" resolved "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.11.5.tgz" integrity sha512-SLI7Aj2ruU1t//6Mk8f+fqW+18uTqpdfLUJYgwu0CkqBckrkRZYZh6GVLk/02k3H2ki7QkFxiFbZrdbZdng0JA== dependencies: + "@tiptap/pm" "^2.11.5" "@tiptap/core" "^2.11.5" - "@tiptap/extension-blockquote" "^2.11.5" "@tiptap/extension-bold" "^2.11.5" - "@tiptap/extension-bullet-list" "^2.11.5" "@tiptap/extension-code" "^2.11.5" - "@tiptap/extension-code-block" "^2.11.5" - "@tiptap/extension-document" "^2.11.5" - "@tiptap/extension-dropcursor" "^2.11.5" - "@tiptap/extension-gapcursor" "^2.11.5" - "@tiptap/extension-hard-break" "^2.11.5" + "@tiptap/extension-text" "^2.11.5" + "@tiptap/extension-italic" "^2.11.5" + "@tiptap/extension-strike" "^2.11.5" "@tiptap/extension-heading" "^2.11.5" "@tiptap/extension-history" "^2.11.5" - "@tiptap/extension-horizontal-rule" "^2.11.5" - "@tiptap/extension-italic" "^2.11.5" + "@tiptap/extension-document" "^2.11.5" + "@tiptap/extension-gapcursor" "^2.11.5" "@tiptap/extension-list-item" "^2.11.5" - "@tiptap/extension-ordered-list" "^2.11.5" "@tiptap/extension-paragraph" "^2.11.5" - "@tiptap/extension-strike" "^2.11.5" - "@tiptap/extension-text" "^2.11.5" + "@tiptap/extension-blockquote" "^2.11.5" + "@tiptap/extension-code-block" "^2.11.5" + "@tiptap/extension-dropcursor" "^2.11.5" + "@tiptap/extension-hard-break" "^2.11.5" "@tiptap/extension-text-style" "^2.11.5" - "@tiptap/pm" "^2.11.5" + "@tiptap/extension-bullet-list" "^2.11.5" + "@tiptap/extension-ordered-list" "^2.11.5" + "@tiptap/extension-horizontal-rule" "^2.11.5" "@tiptap/suggestion@^2.11.2": version "2.11.5" @@ -4533,32 +4509,32 @@ resolved "https://registry.npmjs.org/@trigger.dev/core/-/core-3.3.13.tgz" integrity sha512-3VU4YMS+RVCkfVXeUKSWlkVszgFK44tIknR9sHLYgetI714L3tgH47XBXJ3+/ZV5Y9Vvv6O6pRIuV7EEhzbexg== dependencies: - "@electric-sql/client" "1.0.0-beta.1" - "@google-cloud/precise-date" "^4.0.0" - "@jsonhero/path" "^1.0.21" - "@opentelemetry/api" "1.9.0" - "@opentelemetry/api-logs" "0.52.1" - "@opentelemetry/exporter-logs-otlp-http" "0.52.1" - "@opentelemetry/exporter-trace-otlp-http" "0.52.1" - "@opentelemetry/instrumentation" "0.52.1" - "@opentelemetry/resources" "1.25.1" - "@opentelemetry/sdk-logs" "0.52.1" - "@opentelemetry/sdk-node" "0.52.1" - "@opentelemetry/sdk-trace-base" "1.25.1" - "@opentelemetry/sdk-trace-node" "1.25.1" - "@opentelemetry/semantic-conventions" "1.25.1" - dequal "^2.0.3" - eventsource "^3.0.5" - eventsource-parser "^3.0.0" - execa "^8.0.1" - humanize-duration "^3.27.3" + zod "3.23.8" jose "^5.4.0" + execa "^8.0.1" + dequal "^2.0.3" nanoid "^3.3.4" - socket.io-client "4.7.5" superjson "^2.2.1" - zod "3.23.8" zod-error "1.5.0" + eventsource "^3.0.5" + "@jsonhero/path" "^1.0.21" + socket.io-client "4.7.5" + humanize-duration "^3.27.3" + "@opentelemetry/api" "1.9.0" + eventsource-parser "^3.0.0" + "@electric-sql/client" "1.0.0-beta.1" zod-validation-error "^1.5.0" + "@opentelemetry/api-logs" "0.52.1" + "@opentelemetry/sdk-logs" "0.52.1" + "@opentelemetry/sdk-node" "0.52.1" + "@opentelemetry/resources" "1.25.1" + "@google-cloud/precise-date" "^4.0.0" + "@opentelemetry/sdk-trace-base" "1.25.1" + "@opentelemetry/sdk-trace-node" "1.25.1" + "@opentelemetry/instrumentation" "0.52.1" + "@opentelemetry/semantic-conventions" "1.25.1" + "@opentelemetry/exporter-logs-otlp-http" "0.52.1" + "@opentelemetry/exporter-trace-otlp-http" "0.52.1" "@trigger.dev/core@3.3.16", "@trigger.dev/core@^3.3.16": version "3.3.16" @@ -4605,19 +4581,19 @@ resolved "https://registry.npmjs.org/@trigger.dev/sdk/-/sdk-3.3.13.tgz" integrity sha512-iXtHMnzvzmPfBk7+whpWOElBJt6viCoA3r8xgrrrurj8oxjIVe4UvdDiB7wbUJJ44WROWEb0wVKyQut1L/FwQQ== dependencies: - "@opentelemetry/api" "1.9.0" - "@opentelemetry/api-logs" "0.52.1" - "@opentelemetry/semantic-conventions" "1.25.1" - "@trigger.dev/core" "3.3.13" - chalk "^5.2.0" - cronstrue "^2.21.0" - debug "^4.3.4" + ws "^8.11.0" evt "^2.4.13" slug "^6.0.0" - terminal-link "^3.0.0" ulid "^2.3.0" uuid "^9.0.0" - ws "^8.11.0" + chalk "^5.2.0" + debug "^4.3.4" + cronstrue "^2.21.0" + terminal-link "^3.0.0" + "@trigger.dev/core" "3.3.13" + "@opentelemetry/api" "1.9.0" + "@opentelemetry/api-logs" "0.52.1" + "@opentelemetry/semantic-conventions" "1.25.1" "@trigger.dev/sdk@3.3.16", "@trigger.dev/sdk@^3.3.15": version "3.3.16" @@ -4654,8 +4630,8 @@ resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: - "@types/connect" "*" "@types/node" "*" + "@types/connect" "*" "@types/connect@*": version "3.4.38" @@ -4922,25 +4898,20 @@ resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" + "@types/body-parser" "*" "@types/serve-static" "*" + "@types/express-serve-static-core" "^4.17.33" "@types/express-serve-static-core@^4.17.33": version "4.19.6" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz" integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: - "@types/node" "*" "@types/qs" "*" - "@types/range-parser" "*" + "@types/node" "*" "@types/send" "*" - -"@types/geojson@*": - version "7946.0.16" - resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz" - integrity sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg== + "@types/range-parser" "*" "@types/geojson@*": version "7946.0.16" @@ -4988,8 +4959,8 @@ resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz" integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== dependencies: - "@types/linkify-it" "^5" "@types/mdurl" "^2" + "@types/linkify-it" "^5" "@types/mdast@^4.0.0": version "4.0.4" @@ -5032,17 +5003,17 @@ resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz" integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== dependencies: - "@types/node" "*" form-data "^4.0.0" + "@types/node" "*" "@types/pg@8.11.6": version "8.11.6" resolved "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz" integrity sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ== dependencies: + pg-types "^4.0.1" "@types/node" "*" pg-protocol "*" - pg-types "^4.0.1" "@types/promise.allsettled@^1.0.3": version "1.0.6" @@ -5064,17 +5035,17 @@ resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react@*", "@types/react@>=16.8", "@types/react@>=17.0.0", "@types/react@>=18", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^19.0.0", "@types/react@^19.0.8": - version "19.0.8" - resolved "https://registry.npmjs.org/@types/react/-/react-19.0.8.tgz" - integrity sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw== +"@types/react@*", "@types/react@>=18", "@types/react@^19.0.0", "@types/react@^19.0.8": + version "19.0.10" + resolved "https://registry.npmjs.org/@types/react/-/react-19.0.10.tgz" + integrity sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g== dependencies: csstype "^3.0.2" -"@types/react-dom@*", "@types/react-dom@^19.0.0", "@types/react-dom@^19.0.3": - version "19.0.3" - resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.3.tgz" - integrity sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA== +"@types/react-dom@^19.0.0", "@types/react-dom@^19.0.3": + version "19.0.4" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.0.4.tgz" + integrity sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg== "@types/react-transition-group@^4.4.12": version "4.4.12" @@ -5099,11 +5070,11 @@ resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: - "@types/http-errors" "*" "@types/node" "*" "@types/send" "*" + "@types/http-errors" "*" -"@types/shimmer@^1.0.2", "@types/shimmer@^1.2.0": +"@types/shimmer@^1.0.2": version "1.2.0" resolved "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz" integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg== @@ -5170,17 +5141,17 @@ integrity sha512-EB0o0a4y++UJFMLqS8LDVhSQgXUllG6t5fwl5cbmOM0Uay8YY5Nc/JjFwzJ8wccdIKz4oYwQW7EOSfUyaMPbfw== "@uploadthing/react@^7.2.0": - version "7.2.1" - resolved "https://registry.npmjs.org/@uploadthing/react/-/react-7.2.1.tgz" - integrity sha512-X8iUJDOFyT9DonfZkxx3ngWvr4iz47tmXT7pC0209YT+Odfmq/sd/a0w7UcFrCiYIV1CL0xD97ynRDTN3LX48Q== + version "7.3.0" + resolved "https://registry.npmjs.org/@uploadthing/react/-/react-7.3.0.tgz" + integrity sha512-rSH9BpPy2/G7nZ3SEbZQANUFHkBCS5CwWiVzmOW9fzFNoqF+buqBvi5FDweffqMSwmr+/VS8Wpyj87/GYbV0Fw== dependencies: - "@uploadthing/shared" "7.1.6" + "@uploadthing/shared" "7.1.7" file-selector "0.6.0" -"@uploadthing/shared@7.1.6": - version "7.1.6" - resolved "https://registry.npmjs.org/@uploadthing/shared/-/shared-7.1.6.tgz" - integrity sha512-7EyTxaGiTIdyqCwNQFryo0LR4eZgyClq31igrjGrXHkxSlXnurphybjzB6AVD73UBPVGCfbtOK0lloduhsMNlg== +"@uploadthing/shared@7.1.7": + version "7.1.7" + resolved "https://registry.npmjs.org/@uploadthing/shared/-/shared-7.1.7.tgz" + integrity sha512-VDvGmyHhdwaivC+eee77yZnOVvz59mOmLVbcuYFo4SkoNvPuc3AyPORqJJMBveQivTvELdrQcjlx6IPv98JkSA== dependencies: "@uploadthing/mime-types" "0.3.4" effect "3.12.0" @@ -5213,18 +5184,18 @@ integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== dependencies: "@babel/parser" "^7.25.3" - "@vue/shared" "3.5.13" entities "^4.5.0" estree-walker "^2.0.2" source-map-js "^1.2.0" + "@vue/shared" "3.5.13" "@vue/compiler-dom@3.5.13": version "3.5.13" resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz" integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== dependencies: - "@vue/compiler-core" "3.5.13" "@vue/shared" "3.5.13" + "@vue/compiler-core" "3.5.13" "@vue/compiler-sfc@3.5.13": version "3.5.13" @@ -5232,22 +5203,22 @@ integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== dependencies: "@babel/parser" "^7.25.3" - "@vue/compiler-core" "3.5.13" - "@vue/compiler-dom" "3.5.13" - "@vue/compiler-ssr" "3.5.13" - "@vue/shared" "3.5.13" estree-walker "^2.0.2" magic-string "^0.30.11" postcss "^8.4.48" source-map-js "^1.2.0" + "@vue/compiler-core" "3.5.13" + "@vue/shared" "3.5.13" + "@vue/compiler-dom" "3.5.13" + "@vue/compiler-ssr" "3.5.13" "@vue/compiler-ssr@3.5.13": version "3.5.13" resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz" integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== dependencies: - "@vue/compiler-dom" "3.5.13" "@vue/shared" "3.5.13" + "@vue/compiler-dom" "3.5.13" "@vue/reactivity@3.5.13": version "3.5.13" @@ -5261,26 +5232,26 @@ resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz" integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== dependencies: - "@vue/reactivity" "3.5.13" "@vue/shared" "3.5.13" + "@vue/reactivity" "3.5.13" "@vue/runtime-dom@3.5.13": version "3.5.13" resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz" integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== dependencies: - "@vue/reactivity" "3.5.13" - "@vue/runtime-core" "3.5.13" - "@vue/shared" "3.5.13" csstype "^3.1.3" + "@vue/shared" "3.5.13" + "@vue/runtime-core" "3.5.13" + "@vue/reactivity" "3.5.13" "@vue/server-renderer@3.5.13": version "3.5.13" resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz" integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== dependencies: - "@vue/compiler-ssr" "3.5.13" "@vue/shared" "3.5.13" + "@vue/compiler-ssr" "3.5.13" "@vue/shared@3.5.13": version "3.5.13" @@ -5349,19 +5320,19 @@ ai@^3.4.33: resolved "https://registry.npmjs.org/ai/-/ai-3.4.33.tgz" integrity sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ== dependencies: - "@ai-sdk/provider" "0.0.26" - "@ai-sdk/provider-utils" "1.0.22" + "@ai-sdk/vue" "0.0.59" + json-schema "^0.4.0" "@ai-sdk/react" "0.0.70" "@ai-sdk/solid" "0.0.54" + jsondiffpatch "0.6.0" "@ai-sdk/svelte" "0.0.57" + "@ai-sdk/provider" "0.0.26" "@ai-sdk/ui-utils" "0.0.50" - "@ai-sdk/vue" "0.0.59" + secure-json-parse "^2.7.0" "@opentelemetry/api" "1.9.0" eventsource-parser "1.1.2" - json-schema "^0.4.0" - jsondiffpatch "0.6.0" - secure-json-parse "^2.7.0" zod-to-json-schema "^3.23.3" + "@ai-sdk/provider-utils" "1.0.22" ai@^4.1.41: version "4.1.41" @@ -5380,10 +5351,10 @@ ajv@^6.12.3: resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: + uri-js "^4.2.2" fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" - uri-js "^4.2.2" + fast-json-stable-stringify "^2.0.0" ansi-escapes@^4.2.1: version "4.3.2" @@ -5436,8 +5407,8 @@ anymatch@~3.1.2: resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: - normalize-path "^3.0.0" picomatch "^2.0.4" + normalize-path "^3.0.0" aproba@^1.0.3: version "1.2.0" @@ -5616,9 +5587,9 @@ axios@^1.6.8, axios@^1.7.4, axios@^1.7.8, axios@^1.7.9: resolved "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz" integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: - follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" + follow-redirects "^1.15.6" axios-retry@^3.8.0: version "3.9.1" @@ -5648,7 +5619,7 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -bare-events@*, bare-events@^2.0.0, bare-events@^2.2.0: +bare-events@^2.0.0, bare-events@^2.2.0: version "2.5.4" resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz" integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== @@ -5708,28 +5679,28 @@ better-auth@^1.1.18: resolved "https://registry.npmjs.org/better-auth/-/better-auth-1.1.18.tgz" integrity sha512-cU/u7/qlSiR/OO1O53gh/bHvxyB53DE+5ZOw9DtpDI8IyIQUBqDnQ06MOwNtj8JwjXHcMFNSNd5u/W8DED0bJw== dependencies: - "@better-auth/utils" "0.2.3" - "@better-fetch/fetch" "1.1.12" - "@noble/ciphers" "^0.6.0" - "@noble/hashes" "^1.6.1" - "@simplewebauthn/browser" "^13.0.0" - "@simplewebauthn/server" "^13.0.0" - better-call "0.3.3" + zod "^3.24.1" defu "^6.1.4" jose "^5.9.6" kysely "^0.27.4" nanostores "^0.11.3" - zod "^3.24.1" + better-call "0.3.3" + "@noble/hashes" "^1.6.1" + "@noble/ciphers" "^0.6.0" + "@better-auth/utils" "0.2.3" + "@better-fetch/fetch" "1.1.12" + "@simplewebauthn/server" "^13.0.0" + "@simplewebauthn/browser" "^13.0.0" better-call@0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/better-call/-/better-call-0.3.3.tgz" integrity sha512-N4lDVm0NGmFfDJ0XMQ4O83Zm/3dPlvIQdxvwvgSLSkjFX5PM4GUYSVAuxNzXN27QZMHDkrJTWUqxBrm4tPC3eA== dependencies: - "@better-fetch/fetch" "^1.1.4" + zod "^3.24.1" rou3 "^0.5.1" uncrypto "^0.1.3" - zod "^3.24.1" + "@better-fetch/fetch" "^1.1.4" binary-extensions@^2.0.0: version "2.3.0" @@ -5757,18 +5728,18 @@ body-parser@1.20.3: resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: + qs "6.13.0" + depd "2.0.0" bytes "3.1.2" - content-type "~1.0.5" debug "2.6.9" - depd "2.0.0" + unpipe "1.0.0" destroy "1.2.0" - http-errors "2.0.0" + type-is "~1.6.18" + raw-body "2.5.2" iconv-lite "0.4.24" + http-errors "2.0.0" on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" + content-type "~1.0.5" bowser@^2.11.0: version "2.11.0" @@ -5843,17 +5814,17 @@ bun@^1.2.2: resolved "https://registry.npmjs.org/bun/-/bun-1.2.2.tgz" integrity sha512-RUc8uVVTw8WoASUzXaEQJR1s7mnwoHm3P871qBUIqSaoOpuwcU+bSVX151/xoqDwnyv38SjOX7yQ3oO0IeT73g== optionalDependencies: - "@oven/bun-darwin-aarch64" "1.2.2" + "@oven/bun-linux-x64" "1.2.2" "@oven/bun-darwin-x64" "1.2.2" - "@oven/bun-darwin-x64-baseline" "1.2.2" + "@oven/bun-windows-x64" "1.2.2" "@oven/bun-linux-aarch64" "1.2.2" + "@oven/bun-darwin-aarch64" "1.2.2" + "@oven/bun-linux-x64-musl" "1.2.2" "@oven/bun-linux-aarch64-musl" "1.2.2" - "@oven/bun-linux-x64" "1.2.2" "@oven/bun-linux-x64-baseline" "1.2.2" - "@oven/bun-linux-x64-musl" "1.2.2" - "@oven/bun-linux-x64-musl-baseline" "1.2.2" - "@oven/bun-windows-x64" "1.2.2" + "@oven/bun-darwin-x64-baseline" "1.2.2" "@oven/bun-windows-x64-baseline" "1.2.2" + "@oven/bun-linux-x64-musl-baseline" "1.2.2" bundle-name@^4.1.0: version "4.1.0" @@ -5906,9 +5877,9 @@ camelcase-css@^2.0.1: integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: - version "1.0.30001699" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz" - integrity sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w== + version "1.0.30001700" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz" + integrity sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ== caseless@~0.12.0: version "0.12.0" @@ -5962,16 +5933,16 @@ chokidar@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - optionalDependencies: - fsevents "~2.3.2" dependencies: - anymatch "~3.1.2" braces "~3.0.2" + is-glob "~4.0.1" + anymatch "~3.1.2" + readdirp "~3.6.0" glob-parent "~5.1.2" is-binary-path "~2.1.0" - is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" chokidar@^4.0.1: version "4.0.3" @@ -6027,9 +5998,9 @@ cliui@^8.0.1: resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" wrap-ansi "^7.0.0" + strip-ansi "^6.0.1" + string-width "^4.2.0" clone@^1.0.2: version "1.0.4" @@ -6068,8 +6039,8 @@ color@^4.2.3: resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== dependencies: - color-convert "^2.0.1" color-string "^1.9.0" + color-convert "^2.0.1" color-convert@^2.0.1: version "2.0.1" @@ -6137,7 +6108,7 @@ commander@11.1.0: version "workspace:apps/app" resolved "workspace:apps/app" devDependencies: - "@bubba/db" "workspace:*" + "@bubba/db" "packages/db" "@trigger.dev/build" "3.3.16" "@types/node" "^22.13.2" "@types/react" "^19.0.8" @@ -6150,7 +6121,7 @@ commander@11.1.0: "@ai-sdk/provider" "^1.0.7" "@aws-sdk/s3-request-presigner" "^3.750.0" "@browserbasehq/sdk" "^2.3.0" - "@bubba/notifications" "workspace:*" + "@bubba/notifications" "packages/notifications" "@date-fns/tz" "^1.2.0" "@hookform/resolvers" "^3.10.0" "@nangohq/frontend" "^0.53.1" @@ -6241,8 +6212,8 @@ config-chain@^1.1.11, config-chain@^1.1.13: resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: - ini "^1.3.4" proto-list "~1.2.1" + ini "^1.3.4" configstore@^5.0.0: version "5.0.1" @@ -6250,11 +6221,11 @@ configstore@^5.0.0: integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== dependencies: dot-prop "^5.2.0" - graceful-fs "^4.1.2" make-dir "^3.0.0" + graceful-fs "^4.1.2" + xdg-basedir "^4.0.0" unique-string "^2.0.0" write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" @@ -6320,8 +6291,8 @@ cors@~2.8.5: resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: - object-assign "^4" vary "^1" + object-assign "^4" crelt@^1.0.0: version "1.0.6" @@ -6338,9 +6309,9 @@ cross-spawn@7.0.5, cross-spawn@^7.0.0, cross-spawn@^7.0.3: resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz" integrity sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug== dependencies: + which "^2.0.1" path-key "^3.1.0" shebang-command "^2.0.0" - which "^2.0.1" crypto@^1.0.1: version "1.0.1" @@ -6989,10 +6960,10 @@ editorconfig@^1.0.4: resolved "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz" integrity sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q== dependencies: - "@one-ini/wasm" "0.1.1" + semver "^7.5.3" commander "^10.0.0" minimatch "9.0.1" - semver "^7.5.3" + "@one-ini/wasm" "0.1.1" ee-first@1.1.1: version "1.1.1" @@ -7007,9 +6978,9 @@ effect@3.12.0, effect@^3.12.0: fast-check "^3.23.1" electron-to-chromium@^1.5.73: - version "1.5.101" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.101.tgz" - integrity sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA== + version "1.5.102" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz" + integrity sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q== embla-carousel@8.5.2: version "8.5.2" @@ -7049,7 +7020,7 @@ encodeurl@~2.0.0: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== -encoding@^0.1.0, encoding@^0.1.13: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -7083,11 +7054,11 @@ engine.io-client@~6.5.2: resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz" integrity sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ== dependencies: - "@socket.io/component-emitter" "~3.1.0" + ws "~8.17.1" debug "~4.3.1" engine.io-parser "~5.2.1" - ws "~8.17.1" xmlhttprequest-ssl "~2.0.0" + "@socket.io/component-emitter" "~3.1.0" engine.io-parser@~5.2.1: version "5.2.3" @@ -7212,34 +7183,41 @@ es-to-primitive@^1.3.0: is-date-object "^1.0.5" is-symbol "^1.0.4" -esbuild@0.19.11: +esbuild@0.19.11, "esbuild@>=0.12 <1": version "0.19.11" resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz" integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== optionalDependencies: "@esbuild/aix-ppc64" "0.19.11" + "@esbuild/linux-arm" "0.19.11" + "@esbuild/linux-x64" "0.19.11" + "@esbuild/sunos-x64" "0.19.11" + "@esbuild/win32-x64" "0.19.11" + "@esbuild/darwin-x64" "0.19.11" + "@esbuild/linux-ia32" "0.19.11" + "@esbuild/netbsd-x64" "0.19.11" + "@esbuild/win32-ia32" "0.19.11" "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" + "@esbuild/darwin-arm64" "0.19.11" + "@esbuild/android-arm64" "0.19.11" + "@esbuild/freebsd-arm64" "0.19.11" + "@esbuild/linux-loong64" "0.19.11" + "@esbuild/linux-riscv64" "0.19.11" + "@esbuild/linux-mips64el" "0.19.11" + +esbuild-register@3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz" + integrity sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg== + dependencies: + debug "^4.3.4" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" @@ -7270,12 +7248,12 @@ escodegen@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - optionalDependencies: - source-map "~0.6.1" dependencies: - esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" + esprima "^4.0.1" + optionalDependencies: + source-map "~0.6.1" esm-env@^1.2.1: version "1.2.2" @@ -7288,9 +7266,9 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esrap@^1.4.3: - version "1.4.4" - resolved "https://registry.npmjs.org/esrap/-/esrap-1.4.4.tgz" - integrity sha512-tDN6xP/r/b3WmdpWm7LybrD252hY52IokcycPnO+WHfhFF0+n5AWtcLLK7VNV6m0uYgVRhGVs8OkZwRyfC7HzQ== + version "1.4.5" + resolved "https://registry.npmjs.org/esrap/-/esrap-1.4.5.tgz" + integrity sha512-CjNMjkBWWZeHn+VX+gS8YvFwJ5+NDhg8aWZBSFJPR8qQduDNjbJodA2WcwCm7uQa5Rjqj+nZvVmceg1RbHFB9g== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -7375,52 +7353,52 @@ execa@^8.0.1: resolved "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz" integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" + onetime "^6.0.0" is-stream "^3.0.0" + get-stream "^8.0.1" + cross-spawn "^7.0.3" + signal-exit "^4.1.0" merge-stream "^2.0.0" npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" + human-signals "^5.0.0" strip-final-newline "^3.0.0" -express@*, express@^4.21.0: +express@^4.21.0: version "4.21.2" resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" - debug "2.6.9" + qs "6.13.0" depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.3.1" + send "0.19.0" + vary "~1.1.2" + debug "2.6.9" fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.3" + cookie "0.7.1" + accepts "~1.3.8" methods "~1.1.2" - on-finished "2.4.1" + type-is "~1.6.18" parseurl "~1.3.3" - path-to-regexp "0.1.12" + statuses "2.0.1" + encodeurl "~2.0.0" proxy-addr "~2.0.7" - qs "6.13.0" - range-parser "~1.2.1" + body-parser "1.20.3" + escape-html "~1.0.3" + http-errors "2.0.0" + on-finished "2.4.1" safe-buffer "5.2.1" - send "0.19.0" + utils-merge "1.0.1" + content-type "~1.0.4" + finalhandler "1.3.1" + range-parser "~1.2.1" serve-static "1.16.2" + array-flatten "1.1.1" + path-to-regexp "0.1.12" setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" + cookie-signature "1.0.6" + merge-descriptors "1.0.3" + content-disposition "0.5.4" extend@^3.0.0, extend@~3.0.2: version "3.0.2" @@ -7447,12 +7425,12 @@ extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - optionalDependencies: - "@types/yauzl" "^2.9.1" dependencies: debug "^4.1.1" get-stream "^5.1.0" yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" @@ -7491,11 +7469,11 @@ fast-glob@3.3.1: resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" merge2 "^1.3.0" micromatch "^4.0.4" + glob-parent "^5.1.2" + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" fast-glob@^3.3.2, fast-glob@^3.3.3: version "3.3.3" @@ -7521,9 +7499,9 @@ fast-xml-parser@4.4.1: strnum "^1.0.5" fast-xml-parser@^4.5.1: - version "4.5.1" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.1.tgz" - integrity sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w== + version "4.5.2" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.2.tgz" + integrity sha512-xmnYV9o0StIz/0ArdzmWTxn9oDy0lH8Z80/8X/TD2EUQKXY4DHxoT9mYBqgGIG17DgddCJtH1M6DriMbalNsAA== dependencies: strnum "^1.0.5" @@ -7541,7 +7519,7 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -fdir@^6.4.2: +fdir@^6.4.3: version "6.4.3" resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz" integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== @@ -7593,12 +7571,12 @@ finalhandler@1.3.1: integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" + unpipe "~1.0.0" + parseurl "~1.3.3" + statuses "2.0.1" encodeurl "~2.0.0" escape-html "~1.0.3" on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" find-my-way-ts@^0.1.5: version "0.1.5" @@ -7662,8 +7640,8 @@ form-data@~2.3.2: integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" mime-types "^2.1.12" + combined-stream "^1.0.6" form-data@^2.5.0: version "2.5.3" @@ -7671,10 +7649,10 @@ form-data@^2.5.0: integrity sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" mime-types "^2.1.35" safe-buffer "^5.2.1" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" form-data@^4.0.0, form-data@^4.0.1: version "4.0.2" @@ -7721,9 +7699,9 @@ framer-motion@^11.18.2: resolved "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz" integrity sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w== dependencies: + tslib "^2.4.0" motion-dom "^11.18.1" motion-utils "^11.18.1" - tslib "^2.4.0" framer-motion@^12.4.7: version "12.4.7" @@ -7759,10 +7737,10 @@ fstream@^1.0.0, fstream@^1.0.12: resolved "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" + inherits "~2.0.0" + graceful-fs "^4.1.2" function-bind@^1.1.2: version "1.1.2" @@ -7792,13 +7770,13 @@ gauge@~2.7.3: integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" - console-control-strings "^1.0.0" + strip-ansi "^3.0.1" + wide-align "^1.1.0" has-unicode "^2.0.0" - object-assign "^4.1.0" signal-exit "^3.0.0" string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + object-assign "^4.1.0" + console-control-strings "^1.0.0" geist@^1.3.1: version "1.3.1" @@ -7917,11 +7895,11 @@ glob@^7.0.3, glob@^7.1.3: resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: - fs.realpath "^1.0.0" + once "^1.3.0" inflight "^1.0.4" inherits "2" minimatch "^3.1.1" - once "^1.3.0" + fs.realpath "^1.0.0" path-is-absolute "^1.0.0" glob@10.3.4: @@ -7929,23 +7907,23 @@ glob@10.3.4: resolved "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz" integrity sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ== dependencies: - foreground-child "^3.1.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" jackspeak "^2.0.3" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" + foreground-child "^3.1.0" glob@^10.3.10, glob@^10.4.2: version "10.4.5" resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: - foreground-child "^3.1.0" + minipass "^7.1.2" jackspeak "^3.1.2" minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" path-scurry "^1.11.1" + foreground-child "^3.1.0" + package-json-from-dist "^1.0.0" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -8011,13 +7989,13 @@ handlebars@^4.7.7: version "4.7.8" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz" integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - optionalDependencies: - uglify-js "^3.1.4" dependencies: minimist "^1.2.5" neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" har-schema@^2.0.0: version "2.0.0" @@ -8146,10 +8124,10 @@ htmlparser2@^8.0.2: resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz" integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" domutils "^3.0.1" entities "^4.4.0" + domhandler "^5.0.3" + domelementtype "^2.3.0" http-errors@2.0.0: version "2.0.0" @@ -8175,9 +8153,9 @@ http-signature@~1.2.0: resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" sshpk "^1.7.0" + jsprim "^1.2.2" + assert-plus "^1.0.0" https@^1.0.0: version "1.0.0" @@ -8228,11 +8206,6 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -immer@>=9.0.6: - version "10.1.1" - resolved "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz" - integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== - import-in-the-middle@^1.8.1: version "1.13.0" resolved "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.13.0.tgz" @@ -8281,21 +8254,21 @@ inquirer@^8.2.0: resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" ora "^5.4.1" - run-async "^2.4.0" rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" + chalk "^4.1.1" + lodash "^4.17.21" + figures "^3.0.0" through "^2.3.6" + cli-width "^3.0.0" + run-async "^2.4.0" wrap-ansi "^6.0.1" + cli-cursor "^3.1.0" + strip-ansi "^6.0.0" + mute-stream "0.0.8" + ansi-escapes "^4.2.1" + string-width "^4.1.0" + external-editor "^3.0.3" internal-slot@^1.1.0: version "1.1.0" @@ -8321,10 +8294,10 @@ intl-messageformat@^10.5.14: resolved "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.15.tgz" integrity sha512-LRyExsEsefQSBjU2p47oAheoKz+EOJxSLDdjOaEjdriajfHsMXOmV/EhMvYSg9bAgCUHasuAC+mcUBe/95PfIg== dependencies: + tslib "2" + "@formatjs/icu-messageformat-parser" "2.11.1" "@formatjs/ecma402-abstract" "2.3.3" "@formatjs/fast-memoize" "2.2.6" - "@formatjs/icu-messageformat-parser" "2.11.1" - tslib "2" ip-address@^9.0.5: version "9.0.5" @@ -8721,19 +8694,19 @@ jackspeak@^2.0.3: version "2.3.6" resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" dependencies: "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" dependencies: "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" jiti@^1.21.6: version "1.21.7" @@ -8746,9 +8719,9 @@ jju@^1.4.0: integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== jose@^5.4.0, jose@^5.9.3, jose@^5.9.6: - version "5.9.6" - resolved "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz" - integrity sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ== + version "5.10.0" + resolved "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz" + integrity sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg== jotai@^2.11.0: version "2.12.1" @@ -8871,10 +8844,10 @@ jsonfile@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - optionalDependencies: - graceful-fs "^4.1.6" dependencies: universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" jsonrepair@^3.11.2: version "3.12.0" @@ -8886,26 +8859,26 @@ jsonwebtoken@^9.0.0: resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== dependencies: + ms "^2.1.1" jws "^3.2.2" + semver "^7.5.4" + lodash.once "^4.0.0" lodash.includes "^4.3.0" + lodash.isnumber "^3.0.3" + lodash.isstring "^4.0.1" lodash.isboolean "^3.0.3" lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^7.5.4" jsprim@^1.2.2: version "1.4.2" resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: - assert-plus "1.0.0" + verror "1.10.0" extsprintf "1.3.0" + assert-plus "1.0.0" json-schema "0.4.0" - verror "1.10.0" jwa@^1.4.1: version "1.4.1" @@ -8953,9 +8926,9 @@ keycon@^1.2.0: resolved "https://registry.npmjs.org/keycon/-/keycon-1.4.0.tgz" integrity sha512-p1NAIxiRMH3jYfTeXRs2uWbVJ1WpEjpi8ktzUyBJsX7/wn2qu2VRXktneBLNtKNxJmlUYxRi9gOJt1DuthXR7A== dependencies: - "@cfcs/core" "^0.0.6" "@daybrush/utils" "^1.7.1" "@scena/event-emitter" "^1.0.2" + "@cfcs/core" "^0.0.6" keycode "^2.2.0" kind-of@^3.0.2: @@ -9139,9 +9112,9 @@ log-symbols@4.1.0, log-symbols@^4.1.0: is-unicode-supported "^0.1.0" long@^5.0.0: - version "5.3.0" - resolved "https://registry.npmjs.org/long/-/long-5.3.0.tgz" - integrity sha512-5vvY5yF1zF/kXk+L94FRiTDa1Znom46UjPCH6/XbSvS8zBKMFBHTJk8KDMqJ+2J6QezQFi7k1k8v21ClJYHPaw== + version "5.3.1" + resolved "https://registry.npmjs.org/long/-/long-5.3.1.tgz" + integrity sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng== longest-streak@^3.0.0: version "3.1.0" @@ -9529,13 +9502,13 @@ micromark-extension-gfm-footnote@^2.0.0: integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== dependencies: devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" + micromark-util-types "^2.0.0" + micromark-util-symbol "^2.0.0" micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" + micromark-core-commonmark "^2.0.0" micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" + micromark-util-normalize-identifier "^2.0.0" micromark-extension-gfm-strikethrough@^2.0.0: version "2.1.0" @@ -9669,10 +9642,10 @@ micromark-util-decode-string@^2.0.0: resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz" integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== dependencies: - decode-named-character-reference "^1.0.0" micromark-util-character "^2.0.0" micromark-util-decode-numeric-character-reference "^2.0.0" micromark-util-symbol "^2.0.0" + decode-named-character-reference "^1.0.0" micromark-util-encode@^2.0.0: version "2.0.1" @@ -9830,8 +9803,8 @@ motion@^11.18.2: resolved "https://registry.npmjs.org/motion/-/motion-11.18.2.tgz" integrity sha512-JLjvFDuFr42NFtcVoMAyC2sEjnpA8xpy6qWPyzQvCloznAyQ8FIXioxWfHiLtgYhoVpfUqSWpn1h9++skj9+Wg== dependencies: - framer-motion "^11.18.2" tslib "^2.4.0" + framer-motion "^11.18.2" motion-dom@^11.18.1: version "11.18.1" @@ -9930,47 +9903,47 @@ next@15.0.4: version "15.0.4" resolved "https://registry.npmjs.org/next/-/next-15.0.4.tgz" integrity sha512-nuy8FH6M1FG0lktGotamQDCXhh5hZ19Vo0ht1AOIQWrYJLP598TIUagKtvJrfJ5AGwB/WmDqkKaKhMpVifvGPA== - optionalDependencies: - "@next/swc-darwin-arm64" "15.0.4" - "@next/swc-darwin-x64" "15.0.4" - "@next/swc-linux-arm64-gnu" "15.0.4" - "@next/swc-linux-arm64-musl" "15.0.4" - "@next/swc-linux-x64-gnu" "15.0.4" - "@next/swc-linux-x64-musl" "15.0.4" - "@next/swc-win32-arm64-msvc" "15.0.4" - "@next/swc-win32-x64-msvc" "15.0.4" - sharp "^0.33.5" dependencies: + busboy "1.6.0" + postcss "8.4.31" "@next/env" "15.0.4" + styled-jsx "5.1.6" "@swc/counter" "0.1.3" "@swc/helpers" "0.5.13" - busboy "1.6.0" caniuse-lite "^1.0.30001579" - postcss "8.4.31" - styled-jsx "5.1.6" + optionalDependencies: + sharp "^0.33.5" + "@next/swc-darwin-x64" "15.0.4" + "@next/swc-darwin-arm64" "15.0.4" + "@next/swc-linux-x64-gnu" "15.0.4" + "@next/swc-linux-x64-musl" "15.0.4" + "@next/swc-win32-x64-msvc" "15.0.4" + "@next/swc-linux-arm64-gnu" "15.0.4" + "@next/swc-linux-arm64-musl" "15.0.4" + "@next/swc-win32-arm64-msvc" "15.0.4" -next@*, next@15.1.7, "next@>= 14.0.0", next@>=12, next@>=13.2.0, next@>=14.2.0, "next@^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0", "next@^13.0.0 || ^14.0.0 || ^15.0.0", "next@^14.0.0-0 || ^15.0.0-0", next@^15.1.7: +next@15.1.7, "next@>= 14.0.0", next@>=12, next@>=13.2.0, "next@^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0", "next@^13.0.0 || ^14.0.0 || ^15.0.0", "next@^14.0.0-0 || ^15.0.0-0", next@^15.1.7: version "15.1.7" resolved "https://registry.npmjs.org/next/-/next-15.1.7.tgz" integrity sha512-GNeINPGS9c6OZKCvKypbL8GTsT5GhWPp4DM0fzkXJuXMilOO2EeFxuAY6JZbtk6XIl6Ws10ag3xRINDjSO5+wg== - optionalDependencies: - "@next/swc-darwin-arm64" "15.1.7" - "@next/swc-darwin-x64" "15.1.7" - "@next/swc-linux-arm64-gnu" "15.1.7" - "@next/swc-linux-arm64-musl" "15.1.7" - "@next/swc-linux-x64-gnu" "15.1.7" - "@next/swc-linux-x64-musl" "15.1.7" - "@next/swc-win32-arm64-msvc" "15.1.7" - "@next/swc-win32-x64-msvc" "15.1.7" - sharp "^0.33.5" dependencies: + busboy "1.6.0" + postcss "8.4.31" "@next/env" "15.1.7" + styled-jsx "5.1.6" "@swc/counter" "0.1.3" "@swc/helpers" "0.5.15" - busboy "1.6.0" caniuse-lite "^1.0.30001579" - postcss "8.4.31" - styled-jsx "5.1.6" + optionalDependencies: + sharp "^0.33.5" + "@next/swc-darwin-x64" "15.1.7" + "@next/swc-darwin-arm64" "15.1.7" + "@next/swc-linux-x64-gnu" "15.1.7" + "@next/swc-linux-x64-musl" "15.1.7" + "@next/swc-win32-x64-msvc" "15.1.7" + "@next/swc-linux-arm64-gnu" "15.1.7" + "@next/swc-linux-arm64-musl" "15.1.7" + "@next/swc-win32-arm64-msvc" "15.1.7" "next-auth@^5.0.0-beta.25": version "5.0.0-beta.25" @@ -9989,18 +9962,18 @@ next-international@^1.3.1: server-only "^0.0.1" next-intl@^3.26.3: - version "3.26.3" - resolved "https://registry.npmjs.org/next-intl/-/next-intl-3.26.3.tgz" - integrity sha512-6Y97ODrDsEE1J8cXKMHwg1laLdtkN66QMIqG8BzH4zennJRUNTtM8UMtBDyhfmF6uiZ+xsbWLXmHUgmUymUsfQ== + version "3.26.4" + resolved "https://registry.npmjs.org/next-intl/-/next-intl-3.26.4.tgz" + integrity sha512-/kFFR7WYJGisOR0xKoC930e6oTOOWf8rbHviQgte5zIn6OgJ6mKFvXI94RWAW3ksCZJCvE4zblIuYwHCSbbw7g== dependencies: - "@formatjs/intl-localematcher" "^0.5.4" + use-intl "^3.26.4" negotiator "^1.0.0" - use-intl "^3.26.3" + "@formatjs/intl-localematcher" "^0.5.4" next-safe-action@^7.10.3: - version "7.10.3" - resolved "https://registry.npmjs.org/next-safe-action/-/next-safe-action-7.10.3.tgz" - integrity sha512-Kn4zTnOiRkfWfQ0DH94I79Eycq6i+qS6WzhuGzxlWhVe6/yrEXHt+yU4GdqJ1O7vLyDAOWv4rXaRu+FkfVUAqQ== + version "7.10.4" + resolved "https://registry.npmjs.org/next-safe-action/-/next-safe-action-7.10.4.tgz" + integrity sha512-rZE89DTNgiTJ8oPQBOZm+jd0Uf/pLkN+GE3PndER6vWqHGYGN7HMLvhpggkbE8W4TGp+qM7CPyrXye1wCjZLVg== next-themes@^0.4.4: version "0.4.4" @@ -10043,18 +10016,18 @@ node-gyp@^3.0.3: resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz" integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: - fstream "^1.0.0" + tar "^2.0.0" glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" osenv "0" - request "^2.87.0" + which "1" + mkdirp "^0.5.0" + npmlog "0 || 1 || 2 || 3 || 4" rimraf "2" semver "~5.3.0" - tar "^2.0.0" - which "1" + fstream "^1.0.0" + request "^2.87.0" + graceful-fs "^4.1.2" node-gyp-build@^4.8.1: version "4.8.4" @@ -10117,10 +10090,10 @@ novel@^1.0.2: "@types/node" "^22.10.6" cmdk "^1.0.4" jotai "^2.11.0" - katex "^0.16.20" react-markdown "^9.0.3" react-moveable "^0.56.0" react-tweet "^3.2.1" + katex "^0.16.20" tippy.js "^6.3.7" tiptap-extension-global-drag-handle "^0.1.16" tunnel-rat "^0.1.2" @@ -10131,28 +10104,28 @@ novu@^2.6.5: integrity sha512-2aafZqW4z24Zp5y3xlhMBfNHW+4THFAsr6p47gSEPcmE5xeiaRDi/WSrNUPcY1jFlV0Bs+E0osHoJClzfkqYUQ== dependencies: "@novu/ntfr-client" "^0.0.4" - "@novu/shared" "2.6.5" "@segment/analytics-node" "^1.1.4" - "@types/cross-spawn" "6.0.0" - async-sema "3.0.1" axios "^1.6.8" chalk "4.1.2" commander "^9.0.0" configstore "^5.0.0" - cross-spawn "7.0.5" dotenv "^16.4.5" - fast-glob "3.3.1" get-port "^5.1.1" gradient-string "^2.0.0" inquirer "^8.2.0" jwt-decode "^3.1.2" open "^8.4.0" ora "^5.4.1" - picocolors "^1.0.0" - prompts "2.4.2" uuid "^9.0.0" - validate-npm-package-name "3.0.0" ws "^8.11.0" + picocolors "^1.0.0" + validate-npm-package-name "3.0.0" + prompts "2.4.2" + "@types/cross-spawn" "6.0.0" + cross-spawn "7.0.5" + fast-glob "3.3.1" + async-sema "3.0.1" + "@novu/shared" "2.6.5" npm-run-path@^5.1.0: version "5.3.0" @@ -10166,10 +10139,10 @@ npm-run-path@^5.1.0: resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" number-is-nan@^1.0.0: version "1.0.1" @@ -10177,9 +10150,9 @@ number-is-nan@^1.0.0: integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== nuqs@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/nuqs/-/nuqs-2.3.2.tgz" - integrity sha512-WeG78r8e3a30JY3P8npldvNiAZwGIk499lnpeRs3UYA3PpSvs2/PLunKGgjuF/JMw4BOowD3K2xgGEOZ3PeODA== + version "2.4.0" + resolved "https://registry.npmjs.org/nuqs/-/nuqs-2.4.0.tgz" + integrity sha512-+yOdX0q/wdYlseSYtWC8StDDt2QFcYX/zV5/E67J1cOJo3PR0mggxMx4acZGC0Hu66xFHENKQkqI2zSpH742xQ== dependencies: mitt "^3.0.1" @@ -10194,9 +10167,9 @@ oauth-sign@~0.9.0: integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== oauth4webapi@^3.0.0, oauth4webapi@^3.1.1: - version "3.1.5" - resolved "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.1.5.tgz" - integrity sha512-/V8tb1vgltQWIV8abvFfK1VVLhNcg5nYp8XTjwGc69eP66+rnHl0ttBLL5VrEJ/oNCrM37+JoVuHpiLNhnTdzw== + version "3.2.0" + resolved "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.2.0.tgz" + integrity sha512-2sYwQXuuzGKOHpnM7QL9BssDrly5gKCgJKTyrhmFIHzJRj0fFsr6GVJEdesmrX6NpMg2u63V4hJwRsZE6PUSSA== object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -10289,13 +10262,13 @@ ora@5.4.1, ora@^5.4.1: dependencies: bl "^4.1.0" chalk "^4.1.0" + wcwidth "^1.0.1" cli-cursor "^3.1.0" + strip-ansi "^6.0.0" + log-symbols "^4.1.0" cli-spinners "^2.5.0" is-interactive "^1.0.0" is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" orderedmap@^2.0.0: version "2.1.1" @@ -10317,8 +10290,8 @@ osenv@0: resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: - os-homedir "^1.0.0" os-tmpdir "^1.0.0" + os-homedir "^1.0.0" overlap-area@^1.1.0: version "1.1.0" @@ -10360,16 +10333,16 @@ p-queue@^6, p-queue@^6.6.1: resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: - eventemitter3 "^4.0.4" p-timeout "^3.2.0" + eventemitter3 "^4.0.4" p-retry@^4: version "4.6.2" resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: - "@types/retry" "0.12.0" retry "^0.13.1" + "@types/retry" "0.12.0" p-timeout@^3.2.0: version "3.2.0" @@ -10384,9 +10357,9 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pac-proxy-agent@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz" - integrity sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw== + version "7.2.0" + resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz" + integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== dependencies: "@tootallnate/quickjs-emscripten" "^0.23.0" agent-base "^7.1.2" @@ -10493,8 +10466,8 @@ path-scurry@^1.10.1, path-scurry@^1.11.1: resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + lru-cache "^10.2.0" path-to-regexp@0.1.12: version "0.1.12" @@ -10564,7 +10537,7 @@ picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1, "picomatch@^3 || ^4": +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -10623,9 +10596,8 @@ plist@^3.1.0: version "workspace:apps/portal" resolved "workspace:apps/portal" devDependencies: - "@bubba/db" "workspace:*" - "@bubba/ui" "workspace:*" - devDependencies: + "@bubba/db" "packages/db" + "@bubba/ui" "packages/ui" "@types/node" "^22.13.2" "@types/react" "^19.0.8" "@types/react-dom" "^19.0.3" @@ -10653,7 +10625,7 @@ postcss@8.4.31: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@>=8.0.9, postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.47, postcss@^8.4.48, postcss@^8.5.2: +postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.47, postcss@^8.4.48, postcss@^8.5.2: version "8.5.2" resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz" integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA== @@ -10683,8 +10655,8 @@ postcss-load-config@^4.0.2: resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: - lilconfig "^3.0.0" yaml "^2.3.4" + lilconfig "^3.0.0" postcss-nested@^6.2.0: version "6.2.0" @@ -10742,9 +10714,9 @@ postgres-range@^1.1.1: integrity sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w== posthog-js@^1.215.3, posthog-js@^1.217.2: - version "1.218.2" - resolved "https://registry.npmjs.org/posthog-js/-/posthog-js-1.218.2.tgz" - integrity sha512-C3IRqrdeYdFPiUmj2wI+k+Skr56Co9vhXufv3LirNQC6kAc5FVq//VQVK1i4Xf8PlZYsaqREl0QI5M/CihU3wA== + version "1.219.3" + resolved "https://registry.npmjs.org/posthog-js/-/posthog-js-1.219.3.tgz" + integrity sha512-oKN4no9RRAptZ86R/MvMjsxQnFAe97rwU2emmTzf/q9ng+7V4nU+APM0ItzrESFtRYx1X8kKtxDUlkujNhfMvw== dependencies: core-js "^3.38.1" fflate "^0.4.8" @@ -10758,21 +10730,16 @@ posthog-node@^4.4.1, posthog-node@^4.5.2: dependencies: axios "^1.7.4" -preact@10.11.3, preact@>=10: +preact@10.11.3: version "10.11.3" resolved "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz" integrity sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg== -preact@10.24.3: +preact@10.24.3, preact@>=10, preact@^10.19.3: version "10.24.3" resolved "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz" integrity sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA== -preact@>=10, preact@^10.19.3: - version "10.25.4" - resolved "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz" - integrity sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA== - preact-render-to-string@5.2.3: version "5.2.3" resolved "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz" @@ -10813,14 +10780,16 @@ pretty-format@^3.8.0: resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz" integrity sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew== -prisma@*, prisma@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/prisma/-/prisma-6.3.1.tgz" - integrity sha512-JKCZWvBC3enxk51tY4TWzS4b5iRt4sSU1uHn2I183giZTvonXaQonzVtjLzpOHE7qu9MxY510kAtFGJwryKe3Q== +prisma@^6.3.1: + version "6.4.0" + resolved "https://registry.npmjs.org/prisma/-/prisma-6.4.0.tgz" + integrity sha512-UxEaEo1ajnEvwT9UQRyRfq0zZ9pvOmlZ6kShY8Hgu4jxgkHo1mg85IEP8yBgFRiRBA2o2OIt1nxzcllt86D4Mw== + dependencies: + esbuild ">=0.12 <1" + esbuild-register "3.6.0" + "@prisma/engines" "6.4.0" optionalDependencies: fsevents "2.3.3" - dependencies: - "@prisma/engines" "6.3.1" prismjs@1.29.0: version "1.29.0" @@ -10901,8 +10870,8 @@ prosemirror-commands@^1.0.0, prosemirror-commands@^1.6.2: integrity sha512-0nDHH++qcf/BuPLYvmqZTUUsPJUCPBUXt0J1ErTcDIS369CTp773itzLGIgIXG4LJXOlwYCr44+Mh4ii6MP1QA== dependencies: prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" prosemirror-transform "^1.10.2" + prosemirror-state "^1.0.0" prosemirror-dropcursor@^1.8.1: version "1.8.1" @@ -10910,8 +10879,8 @@ prosemirror-dropcursor@^1.8.1: integrity sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw== dependencies: prosemirror-state "^1.0.0" - prosemirror-transform "^1.1.0" prosemirror-view "^1.1.0" + prosemirror-transform "^1.1.0" prosemirror-gapcursor@^1.3.2: version "1.3.2" @@ -10946,17 +10915,17 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.2.2: resolved "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz" integrity sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ== dependencies: - prosemirror-state "^1.0.0" w3c-keyname "^2.2.0" + prosemirror-state "^1.0.0" prosemirror-markdown@^1.13.1: version "1.13.1" resolved "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.1.tgz" integrity sha512-Sl+oMfMtAjWtlcZoj/5L/Q39MpEnVZ840Xo330WJWUvgyhNmLBLN7MsHn07s53nG/KImevWHSE6fEj4q/GihHw== dependencies: - "@types/markdown-it" "^14.0.0" markdown-it "^14.0.0" prosemirror-model "^1.20.0" + "@types/markdown-it" "^14.0.0" prosemirror-menu@^1.2.4: version "1.2.4" @@ -10964,9 +10933,9 @@ prosemirror-menu@^1.2.4: integrity sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA== dependencies: crelt "^1.0.0" + prosemirror-state "^1.0.0" prosemirror-commands "^1.0.0" prosemirror-history "^1.0.0" - prosemirror-state "^1.0.0" prosemirror-model@^1.0.0, prosemirror-model@^1.19.0, prosemirror-model@^1.20.0, prosemirror-model@^1.21.0, prosemirror-model@^1.22.1, prosemirror-model@^1.23.0, prosemirror-model@^1.24.1: version "1.24.1" @@ -10988,8 +10957,8 @@ prosemirror-schema-list@^1.4.1: integrity sha512-gg1tAfH1sqpECdhIHOA/aLg2VH3ROKBWQ4m8Qp9mBKrOxQRW61zc+gMCI8nh22gnBzd1t2u1/NPLmO3nAa3ssg== dependencies: prosemirror-model "^1.0.0" - prosemirror-state "^1.0.0" prosemirror-transform "^1.7.3" + prosemirror-state "^1.0.0" prosemirror-state@^1.0.0, prosemirror-state@^1.2.2, prosemirror-state@^1.4.2, prosemirror-state@^1.4.3: version "1.4.3" @@ -11097,8 +11066,8 @@ pump@^3.0.0: resolved "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz" integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: - end-of-stream "^1.1.0" once "^1.3.1" + end-of-stream "^1.1.0" punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" @@ -11116,8 +11085,8 @@ puppeteer-core@^24.2.0: integrity sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ== dependencies: "@puppeteer/browsers" "2.7.1" - chromium-bidi "1.3.0" debug "^4.4.0" + chromium-bidi "1.3.0" devtools-protocol "0.0.1402036" typed-query-selector "^2.12.0" ws "^8.18.0" @@ -11179,9 +11148,9 @@ raw-body@2.5.2, raw-body@^2.3.3: integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" unpipe "1.0.0" + iconv-lite "0.4.24" + http-errors "2.0.0" rc@1.2.8: version "1.2.8" @@ -11200,7 +11169,7 @@ react@18.2.0, react@18.x, "react@^16.8 || ^17.0 || ^18.0", react@^18.0.0, react@ dependencies: loose-envify "^1.1.0" -react@*, react@19.0.0, "react@>= 16.8 || 18.0.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", "react@>= 18.0.0", "react@>= 18.2.0", react@>=16, react@>=16.6.0, react@>=16.8, "react@>=16.8.0 || ^17.0.0 || ^18", react@>=16.8.1, "react@>=16.8.6 || ^17.0.0 || ^18.0.0", react@>=17, react@>=18, "react@>=18.2.0 || ^19.0.0-0", "react@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc", "react@^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react@^16.8.0 || ^17 || ^18 || ^19", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc", "react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^17.0.2 || ^18.0.0 || ^19.0.0", "react@^18 || ^19", "react@^18 || ^19 || ^19.0.0-rc", "react@^18.0 || ^19.0", "react@^18.0 || ^19.0 || ^19.0.0-rc", "react@^18.0.0 || ^19.0.0", "react@^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react@^18.2.0 || ^19.0.0-0", react@^19.0.0: +react@*, react@19.0.0, "react@>= 16.8 || 18.0.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", "react@>= 18.0.0", "react@>= 18.2.0", react@>=16, react@>=16.6.0, react@>=16.8, "react@>=16.8.0 || ^17.0.0 || ^18", react@>=16.8.1, "react@>=16.8.6 || ^17.0.0 || ^18.0.0", react@>=17, react@>=18, "react@>=18.2.0 || ^19.0.0-0", "react@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc", "react@^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react@^16.8.0 || ^17 || ^18 || ^19", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^16.8.0 || ^17.0.1 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react@^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc", "react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^17.0.2 || ^18.0.0 || ^19.0.0", "react@^18 || ^19", "react@^18 || ^19 || ^19.0.0-rc", "react@^18.0 || ^19.0", "react@^18.0 || ^19.0 || ^19.0.0-rc", "react@^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react@^18.2.0 || ^19.0.0-0", react@^19.0.0: version "19.0.0" resolved "https://registry.npmjs.org/react/-/react-19.0.0.tgz" integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== @@ -11223,10 +11192,10 @@ react-dom@18.2.0, "react-dom@^16.8 || ^17.0 || ^18.0", react-dom@^18.0.0: resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: - loose-envify "^1.1.0" scheduler "^0.23.0" + loose-envify "^1.1.0" -react-dom@19.0.0, "react-dom@>= 18.0.0", "react-dom@>= 18.2.0", react-dom@>=16, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.1, "react-dom@>=16.8.6 || ^17.0.0 || ^18.0.0", react-dom@>=17, react-dom@>=18.0.0, "react-dom@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom@^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18 || ^19 || ^19.0.0-rc", "react-dom@^18.0.0 || ^19.0.0", "react-dom@^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom@^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0", "react-dom@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react-dom@^19.0.0: +react-dom@19.0.0, "react-dom@>= 18.0.0", "react-dom@>= 18.2.0", react-dom@>=16, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.1, "react-dom@>=16.8.6 || ^17.0.0 || ^18.0.0", react-dom@>=18.0.0, "react-dom@^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom@^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18 || ^19 || ^19.0.0-rc", "react-dom@^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0", "react-dom@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react-dom@^19.0.0: version "19.0.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz" integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== @@ -11238,29 +11207,29 @@ react-dropzone@^14.3.5: resolved "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.5.tgz" integrity sha512-9nDUaEEpqZLOz5v5SUcFA0CjM4vq8YbqO0WRls+EYT7+DvxUdzDPKNCPLqGfj3YL9MsniCLCD4RFA6M95V6KMQ== dependencies: + prop-types "^15.8.1" attr-accept "^2.2.4" file-selector "^2.1.0" - prop-types "^15.8.1" react-email@1.x, react-email@3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/react-email/-/react-email-3.0.4.tgz" integrity sha512-nXdo9P3V+qYSW6m5yN3XpFGhHb/bflX86m0EDQEqDIgayprj6InmBJoBnMSIyC5EP4tPtoAljlclJns4lJG/MQ== dependencies: - "@babel/core" "7.24.5" - "@babel/parser" "7.24.5" + ora "5.4.1" + glob "10.3.4" + next "15.0.4" chalk "4.1.2" + esbuild "0.19.11" chokidar "^4.0.1" - commander "11.1.0" debounce "2.0.0" - esbuild "0.19.11" - glob "10.3.4" - log-symbols "4.1.0" + commander "11.1.0" + socket.io "4.8.0" mime-types "2.1.35" - next "15.0.4" + "@babel/core" "7.24.5" + log-symbols "4.1.0" + "@babel/parser" "7.24.5" normalize-path "3.0.0" - ora "5.4.1" - socket.io "4.8.0" react-hook-form@^7.0.0, react-hook-form@^7.54.2: version "7.54.2" @@ -11354,11 +11323,11 @@ react-remove-scroll@2.5.4: resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz" integrity sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA== dependencies: - react-remove-scroll-bar "^2.3.3" - react-style-singleton "^2.2.1" tslib "^2.1.0" - use-callback-ref "^1.3.0" use-sidecar "^1.1.2" + use-callback-ref "^1.3.0" + react-style-singleton "^2.2.1" + react-remove-scroll-bar "^2.3.3" react-remove-scroll@^2.6.3: version "2.6.3" @@ -11405,8 +11374,8 @@ react-style-singleton@^2.2.1, react-style-singleton@^2.2.2, react-style-singleto resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz" integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== dependencies: - get-nonce "^1.0.0" tslib "^2.0.0" + get-nonce "^1.0.0" react-textarea-autosize@^8.5.7: version "8.5.7" @@ -11458,13 +11427,13 @@ readable-stream@^2.0.6: resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~2.0.0" + inherits "~2.0.3" safe-buffer "~5.1.1" + core-util-is "~1.0.0" string_decoder "~1.1.1" util-deprecate "~1.0.1" + process-nextick-args "~2.0.0" readable-stream@^3.4.0: version "3.6.2" @@ -11504,10 +11473,10 @@ recharts@^2.12.7: integrity sha512-v8PUTUlyiDe56qUj82w/EDVuzEFXwEHp9/xOowGAZwfLjB9uAy3GllQVIYMWF6nU+qibx85WF75zD7AjqoT54Q== dependencies: clsx "^2.0.0" - eventemitter3 "^4.0.1" lodash "^4.17.21" react-is "^18.3.1" react-smooth "^4.0.4" + eventemitter3 "^4.0.1" recharts-scale "^0.4.4" tiny-invariant "^1.3.1" victory-vendor "^36.6.8" @@ -11611,26 +11580,26 @@ request@^2.87.0: resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: - aws-sign2 "~0.7.0" + qs "~6.5.2" aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" + uuid "^3.3.2" extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" + caseless "~0.12.0" isstream "~0.1.2" - json-stringify-safe "~5.0.1" + aws-sign2 "~0.7.0" + form-data "~2.3.2" mime-types "~2.1.19" oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" safe-buffer "^5.1.2" tough-cookie "~2.5.0" tunnel-agent "^0.6.0" - uuid "^3.3.2" + forever-agent "~0.6.1" + har-validator "~5.1.3" + is-typedarray "~1.0.0" + http-signature "~1.2.0" + combined-stream "~1.0.6" + performance-now "^2.1.0" + json-stringify-safe "~5.0.1" require-directory@^2.1.1: version "2.1.1" @@ -11878,19 +11847,19 @@ send@0.19.0: resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: - debug "2.6.9" + ms "2.1.3" depd "2.0.0" + etag "~1.8.1" + mime "1.6.0" + debug "2.6.9" + fresh "0.5.2" destroy "1.2.0" + statuses "2.0.1" encodeurl "~1.0.2" escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" on-finished "2.4.1" range-parser "~1.2.1" - statuses "2.0.1" seroval@^1.0, seroval@^1.1.0: version "1.2.1" @@ -11962,30 +11931,30 @@ sharp@^0.33.5: version "0.33.5" resolved "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz" integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== + dependencies: + color "^4.2.3" + semver "^7.6.3" + detect-libc "^2.0.3" optionalDependencies: - "@img/sharp-darwin-arm64" "0.33.5" + "@img/sharp-wasm32" "0.33.5" + "@img/sharp-linux-arm" "0.33.5" + "@img/sharp-linux-x64" "0.33.5" + "@img/sharp-win32-x64" "0.33.5" "@img/sharp-darwin-x64" "0.33.5" - "@img/sharp-libvips-darwin-arm64" "1.0.4" - "@img/sharp-libvips-darwin-x64" "1.0.4" + "@img/sharp-win32-ia32" "0.33.5" + "@img/sharp-linux-arm64" "0.33.5" + "@img/sharp-linux-s390x" "0.33.5" + "@img/sharp-darwin-arm64" "0.33.5" + "@img/sharp-linuxmusl-x64" "0.33.5" + "@img/sharp-linuxmusl-arm64" "0.33.5" "@img/sharp-libvips-linux-arm" "1.0.5" + "@img/sharp-libvips-linux-x64" "1.0.4" + "@img/sharp-libvips-darwin-x64" "1.0.4" "@img/sharp-libvips-linux-arm64" "1.0.4" "@img/sharp-libvips-linux-s390x" "1.0.4" - "@img/sharp-libvips-linux-x64" "1.0.4" - "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + "@img/sharp-libvips-darwin-arm64" "1.0.4" "@img/sharp-libvips-linuxmusl-x64" "1.0.4" - "@img/sharp-linux-arm" "0.33.5" - "@img/sharp-linux-arm64" "0.33.5" - "@img/sharp-linux-s390x" "0.33.5" - "@img/sharp-linux-x64" "0.33.5" - "@img/sharp-linuxmusl-arm64" "0.33.5" - "@img/sharp-linuxmusl-x64" "0.33.5" - "@img/sharp-wasm32" "0.33.5" - "@img/sharp-win32-ia32" "0.33.5" - "@img/sharp-win32-x64" "0.33.5" - dependencies: - color "^4.2.3" - detect-libc "^2.0.3" - semver "^7.6.3" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" shebang-command@^2.0.0: version "2.0.0" @@ -12059,9 +12028,9 @@ simple-git@^3.27.0: resolved "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz" integrity sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA== dependencies: + debug "^4.3.5" "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" - debug "^4.3.5" simple-swizzle@^0.2.2: version "0.2.2" @@ -12090,13 +12059,13 @@ socket.io@4.8.0: resolved "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz" integrity sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA== dependencies: - accepts "~1.3.4" - base64id "~2.0.0" cors "~2.8.5" debug "~4.3.2" + accepts "~1.3.4" + base64id "~2.0.0" engine.io "~6.6.0" - socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" + socket.io-adapter "~2.5.2" socket.io-adapter@~2.5.2: version "2.5.5" @@ -12111,28 +12080,28 @@ socket.io-client@4.7.2: resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.2.tgz" integrity sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w== dependencies: - "@socket.io/component-emitter" "~3.1.0" debug "~4.3.2" engine.io-client "~6.5.2" socket.io-parser "~4.2.4" + "@socket.io/component-emitter" "~3.1.0" socket.io-client@4.7.5: version "4.7.5" resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz" integrity sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ== dependencies: - "@socket.io/component-emitter" "~3.1.0" debug "~4.3.2" engine.io-client "~6.5.2" socket.io-parser "~4.2.4" + "@socket.io/component-emitter" "~3.1.0" socket.io-parser@~4.2.4: version "4.2.4" resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz" integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== dependencies: - "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" + "@socket.io/component-emitter" "~3.1.0" socks@^2.8.3: version "2.8.4" @@ -12156,7 +12125,7 @@ solid-floating-ui@^0.3.1: resolved "https://registry.npmjs.org/solid-floating-ui/-/solid-floating-ui-0.3.1.tgz" integrity sha512-o/QmGsWPS2Z3KidAxP0nDvN7alI7Kqy0kU+wd85Fz+au5SYcnYm7I6Fk3M60Za35azsPX0U+5fEtqfOuk6Ao0Q== -solid-js@^1.6.12, solid-js@^1.7.7, solid-js@^1.8, solid-js@^1.8.11: +solid-js@^1.6.12, solid-js@^1.8, solid-js@^1.8.11: version "1.9.4" resolved "https://registry.npmjs.org/solid-js/-/solid-js-1.9.4.tgz" integrity sha512-ipQl8FJ31bFUoBNScDQTG3BjN6+9Rg+Q+f10bUbnO6EOTTf5NGerJeHc7wyu5I4RMHEl/WwZwUmy/PTRgxxZ8g== @@ -12218,14 +12187,14 @@ sshpk@^1.7.0: integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" + jsbn "~0.1.0" + getpass "^0.1.1" dashdash "^1.12.0" ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" tweetnacl "~0.14.0" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + safer-buffer "^2.0.2" sswr@^2.1.0: version "2.1.0" @@ -12256,38 +12225,38 @@ streamx@^2.15.0, streamx@^2.21.0: version "2.22.0" resolved "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz" integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== - optionalDependencies: - bare-events "^2.2.0" dependencies: fast-fifo "^1.3.2" text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" string-width@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: + strip-ansi "^3.0.0" code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3, "string-width@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: + strip-ansi "^6.0.1" emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" strip-ansi "^7.0.1" + emoji-regex "^9.2.2" + eastasianwidth "^0.2.0" string.prototype.trim@^1.2.10: version "1.2.10" @@ -12389,8 +12358,8 @@ stripe@^17.6.0: resolved "https://registry.npmjs.org/stripe/-/stripe-17.6.0.tgz" integrity sha512-+HB6+SManp0gSRB0dlPmXO+io18krlAe0uimXhhIkL/RG/VIRigkfoM3QDJPkqbuSW0XsA6uzsivNCJU1ELEDA== dependencies: - "@types/node" ">=8.1.0" qs "^6.11.0" + "@types/node" ">=8.1.0" strnum@^1.0.5: version "1.0.5" @@ -12456,10 +12425,10 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -"svelte@^3.0.0 || ^4.0.0 || ^5.0.0", "svelte@^4.0.0 || ^5.0.0-next.0": - version "5.20.1" - resolved "https://registry.npmjs.org/svelte/-/svelte-5.20.1.tgz" - integrity sha512-aCARru2WTdzJl55Ws8SK27+kvQwd8tijl4kY7NoDUXUHtTHhxMa8Lf6QNZKmU7cuPu3jjFloDO1j5HgYJNIIWg== +"svelte@^4.0.0 || ^5.0.0-next.0": + version "5.20.2" + resolved "https://registry.npmjs.org/svelte/-/svelte-5.20.2.tgz" + integrity sha512-aYXJreNUiyTob0QOzRZeBXZMGeFZDch6SrSRV8QTncZb6zj0O3BEdUzPpojuHQ1pTvk+KX7I6rZCXPUf8pTPxA== dependencies: "@ampproject/remapping" "^2.3.0" "@jridgewell/sourcemap-codec" "^1.5.0" @@ -12517,33 +12486,33 @@ tailwind-merge@^2.4.0, tailwind-merge@^2.6.0: resolved "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz" integrity sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA== -"tailwindcss@>=3.0.0 || insiders", "tailwindcss@>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1", "tailwindcss@^3.0.0 || ^4.0.0-beta.0", tailwindcss@^3.4.13, tailwindcss@^3.4.17: +"tailwindcss@>=3.0.0 || insiders", "tailwindcss@>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1", tailwindcss@^3.4.13, tailwindcss@^3.4.17: version "3.4.17" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz" integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== dependencies: - "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" - chokidar "^3.6.0" - didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.3.2" - glob-parent "^6.0.2" - is-glob "^4.0.3" jiti "^1.21.6" + is-glob "^4.0.3" + postcss "^8.4.47" + resolve "^1.22.8" + sucrase "^3.35.0" + chokidar "^3.6.0" + fast-glob "^3.3.2" lilconfig "^3.1.3" + didyoumean "^1.2.2" micromatch "^4.0.8" - normalize-path "^3.0.0" - object-hash "^3.0.0" picocolors "^1.1.1" - postcss "^8.4.47" - postcss-import "^15.1.0" postcss-js "^4.0.1" - postcss-load-config "^4.0.2" + glob-parent "^6.0.2" + object-hash "^3.0.0" + normalize-path "^3.0.0" + postcss-import "^15.1.0" postcss-nested "^6.2.0" + "@alloc/quick-lru" "^5.2.0" + postcss-load-config "^4.0.2" postcss-selector-parser "^6.1.2" - resolve "^1.22.8" - sucrase "^3.35.0" tailwindcss-animate@^1.0.7: version "1.0.7" @@ -12555,20 +12524,20 @@ tar@^2.0.0: resolved "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz" integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: - block-stream "*" fstream "^1.0.12" inherits "2" + block-stream "*" tar-fs@^3.0.8: version "3.0.8" resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz" integrity sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg== - optionalDependencies: - bare-fs "^4.0.1" - bare-path "^3.0.0" dependencies: pump "^3.0.0" tar-stream "^3.1.5" + optionalDependencies: + bare-fs "^4.0.1" + bare-path "^3.0.0" tar-stream@^3.1.5: version "3.1.7" @@ -12639,11 +12608,11 @@ tinyexec@^0.3.1: integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== tinyglobby@^0.2.2: - version "0.2.10" - resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz" - integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + version "0.2.11" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.11.tgz" + integrity sha512-32TmKeeKUahv0Go8WmQgiEp9Y21NuxjwjqiRC1nrUB51YacfSwuB44xgXD+HdIppmMRgjQNPdrHyA6vIybYZ+g== dependencies: - fdir "^6.4.2" + fdir "^6.4.3" picomatch "^4.0.2" tinygradient@^1.1.5: @@ -12651,8 +12620,8 @@ tinygradient@^1.1.5: resolved "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz" integrity sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw== dependencies: - "@types/tinycolor2" "^1.4.0" tinycolor2 "^1.0.0" + "@types/tinycolor2" "^1.4.0" tippy.js@^6.3.7: version "6.3.7" @@ -12783,11 +12752,11 @@ turbo@^2.4.2: resolved "https://registry.npmjs.org/turbo/-/turbo-2.4.2.tgz" integrity sha512-Qxi0ioQCxMRUCcHKHZkTnYH8e7XCpNfg9QiJcyfWIc+ZXeaCjzV5rCGlbQlTXMAtI8qgfP8fZADv3CFtPwqdPQ== optionalDependencies: - turbo-darwin-64 "2.4.2" - turbo-darwin-arm64 "2.4.2" turbo-linux-64 "2.4.2" - turbo-linux-arm64 "2.4.2" + turbo-darwin-64 "2.4.2" turbo-windows-64 "2.4.2" + turbo-linux-arm64 "2.4.2" + turbo-darwin-arm64 "2.4.2" turbo-windows-arm64 "2.4.2" turbo-darwin-64@2.4.2: @@ -12845,8 +12814,8 @@ type-is@~1.6.18: resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: - media-typer "0.3.0" mime-types "~2.1.24" + media-typer "0.3.0" typed-array-buffer@^1.0.3: version "1.0.3" @@ -12905,7 +12874,7 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@*, typescript@5.7.3, typescript@>=5.0.0, typescript@>=5.1.0, typescript@>=5.7.2, typescript@^5.0.0, typescript@^5.5.4, typescript@^5.6.3, typescript@^5.7.2, typescript@^5.7.3: +typescript@5.7.3, typescript@>=5.7.2, typescript@^5.5.4, typescript@^5.6.3, typescript@^5.7.2, typescript@^5.7.3: version "5.7.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz" integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== @@ -13032,14 +13001,14 @@ update-browserslist-db@^1.1.1: picocolors "^1.1.1" uploadthing@^7.2.0, uploadthing@^7.5.0: - version "7.5.1" - resolved "https://registry.npmjs.org/uploadthing/-/uploadthing-7.5.1.tgz" - integrity sha512-p5VxxT4i7LYLiKE+FgtMnIztvDfgZ1IptY62PF2YpgvxFccIbX/OXx8OcW/psjKCmPC7PXEt3e9d+bduYJOmDw== + version "7.5.2" + resolved "https://registry.npmjs.org/uploadthing/-/uploadthing-7.5.2.tgz" + integrity sha512-hrvsVXgu6cYYJW97UuFLd3U2+TrPGyMBtPYSkqSTVq45Orkq9qFk095qkXYIW4EA/DyvCo78VV25HfSXT3EH7w== dependencies: "@effect/platform" "0.72.0" "@standard-schema/spec" "1.0.0-beta.4" "@uploadthing/mime-types" "0.3.4" - "@uploadthing/shared" "7.1.6" + "@uploadthing/shared" "7.1.7" effect "3.12.0" uri-js@^4.2.2: @@ -13066,13 +13035,13 @@ use-debounce@^10.0.4: resolved "https://registry.npmjs.org/use-debounce/-/use-debounce-10.0.4.tgz" integrity sha512-6Cf7Yr7Wk7Kdv77nnJMf6de4HuDE4dTxKij+RqE9rufDsI6zsbjyAxcH5y2ueJCQAnfgKbzXbZHYlkFwmBlWkw== -use-intl@^3.26.3: - version "3.26.3" - resolved "https://registry.npmjs.org/use-intl/-/use-intl-3.26.3.tgz" - integrity sha512-yY0a2YseO17cKwHA9M6fcpiEJ2Uo81DEU0NOUxNTp6lJVNOuI6nULANPVVht6IFdrYFtlsMmMoc97+Eq9/Tnng== +use-intl@^3.26.4: + version "3.26.4" + resolved "https://registry.npmjs.org/use-intl/-/use-intl-3.26.4.tgz" + integrity sha512-5DhN+YfsocNO7LiLpns7/pxRcMHA4DgBZQo5Z6uw3LvX9XIZyPAdRBdFPE2eBKTAwhY77k5eBhxqDtx8wzUaBg== dependencies: - "@formatjs/fast-memoize" "^2.2.0" intl-messageformat "^10.5.14" + "@formatjs/fast-memoize" "^2.2.0" use-isomorphic-layout-effect@^1.1.1: version "1.2.0" @@ -13099,7 +13068,7 @@ use-sidecar@^1.1.2, use-sidecar@^1.1.3: detect-node-es "^1.1.0" tslib "^2.0.0" -use-sync-external-store@>=1.2.0, use-sync-external-store@^1, use-sync-external-store@^1.2.2, use-sync-external-store@^1.4.0: +use-sync-external-store@^1, use-sync-external-store@^1.2.2, use-sync-external-store@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz" integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== @@ -13158,9 +13127,9 @@ verror@1.10.0: resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: + extsprintf "^1.2.0" assert-plus "^1.0.0" core-util-is "1.0.2" - extsprintf "^1.2.0" vfile@^6.0.0: version "6.0.3" @@ -13183,31 +13152,31 @@ victory-vendor@^36.6.8: resolved "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz" integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== dependencies: - "@types/d3-array" "^3.0.3" - "@types/d3-ease" "^3.0.0" - "@types/d3-interpolate" "^3.0.1" - "@types/d3-scale" "^4.0.2" - "@types/d3-shape" "^3.1.0" - "@types/d3-time" "^3.0.0" - "@types/d3-timer" "^3.0.0" - d3-array "^3.1.6" d3-ease "^3.0.1" - d3-interpolate "^3.0.1" + d3-time "^3.0.0" + d3-array "^3.1.6" d3-scale "^4.0.2" d3-shape "^3.1.0" - d3-time "^3.0.0" d3-timer "^3.0.1" + "@types/d3-ease" "^3.0.0" + "@types/d3-time" "^3.0.0" + d3-interpolate "^3.0.1" + "@types/d3-array" "^3.0.3" + "@types/d3-scale" "^4.0.2" + "@types/d3-shape" "^3.1.0" + "@types/d3-timer" "^3.0.0" + "@types/d3-interpolate" "^3.0.1" -vue@3.5.13, "vue@>=3.2.26 < 4", vue@^3.3.4: +vue@3.5.13, "vue@>=3.2.26 < 4": version "3.5.13" resolved "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz" integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== dependencies: + "@vue/shared" "3.5.13" + "@vue/runtime-dom" "3.5.13" "@vue/compiler-dom" "3.5.13" "@vue/compiler-sfc" "3.5.13" - "@vue/runtime-dom" "3.5.13" "@vue/server-renderer" "3.5.13" - "@vue/shared" "3.5.13" w3c-keyname@^2.2.0: version "2.2.8" @@ -13447,8 +13416,8 @@ write-file-atomic@^3.0.0: integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" signal-exit "^3.0.2" + is-typedarray "^1.0.0" typedarray-to-buffer "^3.1.5" ws@^7.5.3: @@ -13538,13 +13507,13 @@ yargs@^17.7.2: resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: + y18n "^5.0.5" cliui "^8.0.1" escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" string-width "^4.2.3" - y18n "^5.0.5" yargs-parser "^21.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" yargs-parser@^21.1.1: version "21.1.1" @@ -13561,8 +13530,8 @@ yauzl@^2.10.0: resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: - buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + buffer-crc32 "~0.2.3" zimmerframe@^1.1.2: version "1.1.2" From 30deff2c96edf85e0dde96691d562be4a5d292de Mon Sep 17 00:00:00 2001 From: Languine Bot Date: Thu, 27 Feb 2025 18:05:20 +0000 Subject: [PATCH 3/4] chore: (i18n) update translations using Languine.ai --- apps/app/languine.lock | 5 +++++ apps/app/src/locales/es.ts | 9 ++++++++- apps/app/src/locales/fr.ts | 9 ++++++++- apps/app/src/locales/no.ts | 9 ++++++++- apps/app/src/locales/pt.ts | 9 ++++++++- 5 files changed, 37 insertions(+), 4 deletions(-) diff --git a/apps/app/languine.lock b/apps/app/languine.lock index 0035084ae5..1252e709eb 100644 --- a/apps/app/languine.lock +++ b/apps/app/languine.lock @@ -134,6 +134,9 @@ files: sidebar.settings: f4f70727dc34561dfde1a3c529b6205c sidebar.evidence: 63b1eb1a39194d82271ec937fba19714 sidebar.people: 78386ec8f2845742c324a3d7d3e800ff + sub_pages.evidence.title: c7b2a4d55fbea4d044644cf5b2b45d29 + sub_pages.evidence.list: d2b5512c16318cc8738eff7dbe7de9ca + sub_pages.evidence.overview: 376eeb70e956ecef2611d88a28269c5b sub_pages.risk.overview: 7228bb53bb7855d458965d2f15fc6cd7 sub_pages.risk.register: e4c28136d96146bd5fe9dfe41214138c sub_pages.risk.risk_overview: 5226ebb7d548f2d3a8f8c4fd08851405 @@ -494,6 +497,8 @@ files: editor.ai_selector.discard: d94b42030b9785fd754d5c1754961269 evidence.title: 63b1eb1a39194d82271ec937fba19714 evidence.description: c8fcd9bc15a38dcd7f6d0cbdeb65f33c + evidence.dashboard: 2938c7f7e560ed972f8a4f68e80ff834 + evidence.list: ed2c6e00de11f3eb621cd348bb8f5806 src/locales/es.ts: language.title: c88b33a3250b4e28f34e1ececba69206 language.description: b74d060770289b75ba34d38ea1e05251 diff --git a/apps/app/src/locales/es.ts b/apps/app/src/locales/es.ts index 02b9cc6bde..4f4b79754c 100644 --- a/apps/app/src/locales/es.ts +++ b/apps/app/src/locales/es.ts @@ -721,6 +721,11 @@ export default { }, frameworks: { overview: "Marcos" + }, + evidence: { + title: "Evidencia", + list: "Lista de Evidencias", + overview: "Resumen de Evidencias" } }, editor: { @@ -744,6 +749,8 @@ export default { }, evidence: { title: "Tareas de Evidencia", - description: "Gestiona y rastrea las tareas de evidencia para tus requisitos de cumplimiento." + description: "Gestiona y rastrea las tareas de evidencia para tus requisitos de cumplimiento.", + dashboard: "Tablero", + list: "Todas las Evidencias" } } as const; diff --git a/apps/app/src/locales/fr.ts b/apps/app/src/locales/fr.ts index ed66e47ea0..ace6080c38 100644 --- a/apps/app/src/locales/fr.ts +++ b/apps/app/src/locales/fr.ts @@ -721,6 +721,11 @@ export default { }, frameworks: { overview: "Cadres" + }, + evidence: { + title: "Preuve", + list: "Liste des preuves", + overview: "Aperçu des preuves" } }, editor: { @@ -744,6 +749,8 @@ export default { }, evidence: { title: "Tâches de preuve", - description: "Gérez et suivez les tâches de preuve pour vos exigences de conformité." + description: "Gérez et suivez les tâches de preuve pour vos exigences de conformité.", + dashboard: "Tableau de bord", + list: "Toutes les preuves" } } as const; diff --git a/apps/app/src/locales/no.ts b/apps/app/src/locales/no.ts index f890cdce5a..4c42633ffb 100644 --- a/apps/app/src/locales/no.ts +++ b/apps/app/src/locales/no.ts @@ -721,6 +721,11 @@ export default { }, frameworks: { overview: "Rammeverk" + }, + evidence: { + title: "Bevis", + list: "Bevisliste", + overview: "Oversikt over Bevis" } }, editor: { @@ -744,6 +749,8 @@ export default { }, evidence: { title: "Bevisoppgaver", - description: "Administrer og spor bevisoppgaver for dine samsvarsbehov." + description: "Administrer og spor bevisoppgaver for dine samsvarsbehov.", + dashboard: "Dashbord", + list: "Alle Bevis" } } as const; diff --git a/apps/app/src/locales/pt.ts b/apps/app/src/locales/pt.ts index 97c85dc9c5..d40c3cbd4d 100644 --- a/apps/app/src/locales/pt.ts +++ b/apps/app/src/locales/pt.ts @@ -721,6 +721,11 @@ export default { }, frameworks: { overview: "Estruturas" + }, + evidence: { + title: "Evidência", + list: "Lista de Evidências", + overview: "Visão Geral das Evidências" } }, editor: { @@ -744,6 +749,8 @@ export default { }, evidence: { title: "Tarefas de Evidência", - description: "Gerencie e acompanhe as tarefas de evidência para seus requisitos de conformidade." + description: "Gerencie e acompanhe as tarefas de evidência para seus requisitos de conformidade.", + dashboard: "Painel", + list: "Todas as Evidências" } } as const; From e8559d6f23a4064666028e8007a410c7cf986f94 Mon Sep 17 00:00:00 2001 From: Mariano Fuentes Date: Thu, 27 Feb 2025 11:08:22 -0800 Subject: [PATCH 4/4] feat(evidence): Enhance evidence dashboard with comprehensive status tracking and visualization - Refactor evidence dashboard to include detailed status tracking (empty, draft, needs review, up to date) - Implement dynamic bar charts for evidence distribution by department, assignee, and framework - Add scrollable and interactive chart components with status breakdown - Improve server-side data processing to calculate evidence statuses - Enhance logging and debugging for evidence dashboard data - Update types and interfaces to support new status tracking features - Optimize chart rendering with responsive and informative visualizations --- .../framework/select-frameworks-action.ts | 1 + .../evidence/Components/EvidenceList.tsx | 5 - .../[id]/Components/EvidenceDetails.tsx | 27 +-- .../hooks/useEvidenceTableContext.tsx | 3 + .../overview/actions/getEvidenceDashboard.ts | 221 +++++++++++++++--- .../overview/components/AssigneeBarChart.tsx | 218 ++++++++++++++--- .../components/DepartmentBarChart.tsx | 194 +++++++++++++-- .../overview/components/EvidenceOverview.tsx | 41 ++-- .../overview/components/FrameworkBarChart.tsx | 178 ++++++++++++-- .../components/HorizontalBarChart.tsx | 217 ++++++----------- .../overview/hooks/useEvidenceDashboard.ts | 35 ++- 11 files changed, 837 insertions(+), 303 deletions(-) diff --git a/apps/app/src/actions/framework/select-frameworks-action.ts b/apps/app/src/actions/framework/select-frameworks-action.ts index 1a2f06bf15..5290458007 100644 --- a/apps/app/src/actions/framework/select-frameworks-action.ts +++ b/apps/app/src/actions/framework/select-frameworks-action.ts @@ -306,6 +306,7 @@ const createOrganizationEvidence = async ( description: evidence.description, frequency: evidence.frequency, frameworkId: evidence.control.frameworkCategory?.framework.id || "", + assigneeId: user.id, })), }); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/Components/EvidenceList.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/Components/EvidenceList.tsx index 05abe93635..1289a601c5 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/Components/EvidenceList.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/Components/EvidenceList.tsx @@ -16,11 +16,6 @@ export function EvidenceList() { const t = useI18n(); const { evidenceTasks = [], isLoading, error } = useEvidenceTable(); - // Add more detailed logging to help debug - console.log("EvidenceList - evidenceTasks:", evidenceTasks); - console.log("EvidenceList - isLoading:", isLoading); - console.log("EvidenceList - error:", error); - if (error) return

; return ( diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/[id]/Components/EvidenceDetails.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/[id]/Components/EvidenceDetails.tsx index 328b7148b8..7d03350b8c 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/[id]/Components/EvidenceDetails.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/[id]/Components/EvidenceDetails.tsx @@ -1,26 +1,19 @@ "use client"; -import { useEffect } from "react"; -import { useRouter } from "next/navigation"; import { Button } from "@bubba/ui/button"; -import { ArrowLeft, CheckCircle2, MoreVertical, XCircle } from "lucide-react"; -import { Card, CardContent, CardHeader, CardTitle } from "@bubba/ui/card"; +import { Card, CardContent, CardHeader } from "@bubba/ui/card"; import { Skeleton } from "@bubba/ui/skeleton"; -import { useOrganizationEvidence } from "../hooks/useOrganizationEvidence"; -import { FileSection } from "./FileSection"; -import { UrlSection } from "./UrlSection"; -import { ReviewSection } from "./ReviewSection"; -import { publishEvidence } from "../Actions/publishEvidence"; +import { ArrowLeft, CheckCircle2, XCircle } from "lucide-react"; import { useAction } from "next-safe-action/hooks"; +import { useRouter } from "next/navigation"; +import { useEffect } from "react"; import { toast } from "sonner"; +import { publishEvidence } from "../Actions/publishEvidence"; +import { useOrganizationEvidence } from "../hooks/useOrganizationEvidence"; import type { EvidenceDetailsProps } from "../types"; -import { toggleRelevance } from "../Actions/toggleRelevance"; -import { - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from "@bubba/ui/dropdown-menu"; +import { FileSection } from "./FileSection"; +import { ReviewSection } from "./ReviewSection"; +import { UrlSection } from "./UrlSection"; export function EvidenceDetails({ id }: EvidenceDetailsProps) { const router = useRouter(); @@ -29,7 +22,7 @@ export function EvidenceDetails({ id }: EvidenceDetailsProps) { const { execute: publishAction, isExecuting } = useAction(publishEvidence, { onSuccess: () => { toast.success("Evidence published successfully"); - mutate(); + handleMutate(); }, onError: () => { toast.error("Failed to publish evidence, please try again."); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/hooks/useEvidenceTableContext.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/hooks/useEvidenceTableContext.tsx index 05ade32e0a..1970bf4813 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/hooks/useEvidenceTableContext.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/hooks/useEvidenceTableContext.tsx @@ -33,6 +33,7 @@ interface EvidenceTableContextType { setRelevance: (value: string | null) => void; setPage: (value: string) => void; setPageSize: (value: string) => void; + mutate: () => void; // Data evidenceTasks: EvidenceTaskRow[] | undefined; @@ -83,6 +84,7 @@ export function EvidenceTableProvider({ children }: { children: ReactNode }) { pagination, isLoading, error, + mutate, } = useOrganizationEvidenceTasks({ search, status: status as "published" | "draft" | null, @@ -174,6 +176,7 @@ export function EvidenceTableProvider({ children }: { children: ReactNode }) { setRelevance, setPage, setPageSize, + mutate, // Data evidenceTasks, diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts index 8e524753ba..8e7c99e0bd 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/actions/getEvidenceDashboard.ts @@ -4,10 +4,26 @@ import { authActionClient } from "@/actions/safe-action"; import { db } from "@bubba/db"; import type { Departments, OrganizationEvidence } from "@prisma/client"; +export type EvidenceStatus = "empty" | "draft" | "needsReview" | "upToDate"; + +export interface EvidenceWithStatus + extends Omit { + status: EvidenceStatus; + assigneeEmail?: string; +} + export interface EvidenceDashboardData { - byDepartment: Record; - byAssignee: Record; - byFramework: Record; + byDepartment: Record; + byAssignee: Record; + byFramework: Record; + unassigned: EvidenceWithStatus[]; + statusCounts: { + totalCount: number; + emptyCount: number; + draftCount: number; + needsReviewCount: number; + upToDateCount: number; + }; } export const getEvidenceDashboard = authActionClient @@ -45,6 +61,113 @@ export const getEvidenceDashboard = authActionClient }; } + console.log("Server: Found evidence items:", evidence.length); + + // Sample the first few items to check their structure + if (evidence.length > 0) { + console.log("Server: Sample evidence item:", { + id: evidence[0].id, + name: evidence[0].name, + published: evidence[0].published, + fileUrls: evidence[0].fileUrls, + additionalUrls: evidence[0].additionalUrls, + lastPublishedAt: evidence[0].lastPublishedAt, + frequency: evidence[0].frequency, + assigneeId: evidence[0].assigneeId, + assigneeEmail: evidence[0].assignee?.email, + }); + } + + // Calculate status for each evidence item + const now = new Date(); + let emptyCount = 0; + let draftCount = 0; + let needsReviewCount = 0; + let upToDateCount = 0; + const totalCount = evidence.length; + + const evidenceWithStatus: EvidenceWithStatus[] = evidence.map((item) => { + // Check if task has files or links + const hasContent = + item.fileUrls.length > 0 || item.additionalUrls.length > 0; + + // Check if task is published + const isPublished = item.published; + + // Check if task needs review (published and next review date is in the past) + let nextReviewDate = null; + + if (item.lastPublishedAt && item.frequency) { + // Calculate next review date based on last published date and frequency + const lastPublished = new Date(item.lastPublishedAt); + nextReviewDate = new Date(lastPublished); + + switch (item.frequency) { + case "monthly": + nextReviewDate.setMonth(nextReviewDate.getMonth() + 1); + break; + case "quarterly": + nextReviewDate.setMonth(nextReviewDate.getMonth() + 3); + break; + case "yearly": + nextReviewDate.setFullYear(nextReviewDate.getFullYear() + 1); + break; + } + } + + const isPastDue = nextReviewDate && nextReviewDate < now; + + let status: EvidenceStatus; + + if (!hasContent && !isPublished) { + // No files or links + status = "empty"; + emptyCount++; + } else if (!isPublished) { + // Has content but not published + status = "draft"; + draftCount++; + } else if (isPastDue) { + // Published but needs review + status = "needsReview"; + needsReviewCount++; + } else { + // Published and up to date + status = "upToDate"; + upToDateCount++; + } + + // Extract assignee email if available + const assigneeEmail = item.assignee?.email || undefined; + + // Create a new object without the assignee property + const { assignee, ...evidenceWithoutAssignee } = item; + + return { + ...evidenceWithoutAssignee, + status, + assigneeEmail, + }; + }); + + console.log("Server: Status counts:", { + totalCount, + emptyCount, + draftCount, + needsReviewCount, + upToDateCount, + }); + + // Sample the first few items with status to check their structure + if (evidenceWithStatus.length > 0) { + console.log("Server: Sample evidence item with status:", { + id: evidenceWithStatus[0].id, + name: evidenceWithStatus[0].name, + status: evidenceWithStatus[0].status, + assigneeEmail: evidenceWithStatus[0].assigneeEmail, + }); + } + // Initialize with all department values from the enum const departmentValues: Departments[] = [ "none", @@ -58,18 +181,18 @@ export const getEvidenceDashboard = authActionClient // Initialize the byDepartment object with empty arrays for all departments const initialByDepartment = departmentValues.reduce< - Record + Record >( (acc, dept) => { acc[dept] = []; return acc; }, - {} as Record + {} as Record ); // Group evidence by department - const byDepartment = evidence.reduce< - Record + const byDepartment = evidenceWithStatus.reduce< + Record >((acc, curr) => { // Use the department from the evidence, or default to 'none' if it's null/undefined const department = curr.department || "none"; @@ -79,37 +202,61 @@ export const getEvidenceDashboard = authActionClient return acc; }, initialByDepartment); - const byAssignee = evidence.reduce>( - (acc, curr) => { - const assigneeId = curr.assignee?.email; - if (!assigneeId) { - return acc; - } + // Collect unassigned evidence + const unassigned = evidenceWithStatus.filter((item) => !item.assigneeId); + console.log("Server: Unassigned evidence count:", unassigned.length); - if (!acc[assigneeId]) { - acc[assigneeId] = []; - } - acc[assigneeId].push(curr); + // Group evidence by assignee + const byAssignee = evidenceWithStatus.reduce< + Record + >((acc, curr) => { + if (!curr.assigneeId || !curr.assigneeEmail) { return acc; - }, - {} - ); + } - const byFramework = evidence.reduce>( - (acc, curr) => { - const frameworkId = curr.frameworkId; - if (!frameworkId) { - return acc; - } + const email = curr.assigneeEmail; + if (!acc[email]) { + acc[email] = []; + } + acc[email].push(curr); + return acc; + }, {}); - if (!acc[frameworkId]) { - acc[frameworkId] = []; - } - acc[frameworkId].push(curr); + console.log("Server: Assignee count:", Object.keys(byAssignee).length); + + // Sample the first assignee's data + const firstAssigneeEmail = Object.keys(byAssignee)[0]; + if (firstAssigneeEmail) { + const firstAssigneeItems = byAssignee[firstAssigneeEmail]; + // Count items by status for the first assignee + const statusCounts = { + empty: 0, + draft: 0, + needsReview: 0, + upToDate: 0, + }; + + for (const item of firstAssigneeItems) { + statusCounts[item.status]++; + } + } + + const byFramework = evidenceWithStatus.reduce< + Record + >((acc, curr) => { + const frameworkId = curr.frameworkId; + if (!frameworkId) { return acc; - }, - {} - ); + } + + if (!acc[frameworkId]) { + acc[frameworkId] = []; + } + acc[frameworkId].push(curr); + return acc; + }, {}); + + console.log("Server: Framework count:", Object.keys(byFramework).length); return { success: true, @@ -117,6 +264,14 @@ export const getEvidenceDashboard = authActionClient byDepartment, byAssignee, byFramework, + unassigned, + statusCounts: { + totalCount, + emptyCount, + draftCount, + needsReviewCount, + upToDateCount, + }, }, }; } catch (error) { diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx index c2ff7728e2..98b2a7eca7 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/AssigneeBarChart.tsx @@ -1,64 +1,208 @@ "use client"; -import React from "react"; -import type { OrganizationEvidence, User } from "@prisma/client"; +import React, { useEffect, useRef, useState } from "react"; import { HorizontalBarChart, type ChartDataItem } from "./HorizontalBarChart"; +import type { EvidenceWithStatus } from "../actions/getEvidenceDashboard"; +import { ChevronDown, ChevronUp } from "lucide-react"; interface AssigneeBarChartProps { - byAssignee?: Record; - allEvidence?: OrganizationEvidence[]; + byAssignee?: Record; + unassigned?: EvidenceWithStatus[]; } +// Status colors matching the EvidenceSummaryCards +const STATUS_COLORS = { + empty: "#6b7280", // Gray for empty + draft: "#f59e0b", // Amber for draft + needsReview: "#ef4444", // Red for needs review + upToDate: "#10b981", // Green for up to date +}; + +// Status priority order for display (determines the order in the bar) +const STATUS_PRIORITY = ["upToDate", "draft", "needsReview", "empty"] as const; +type StatusType = (typeof STATUS_PRIORITY)[number]; + export function AssigneeBarChart({ byAssignee, - allEvidence = [], + unassigned = [], }: AssigneeBarChartProps) { - if (!byAssignee) { + const containerRef = useRef(null); + const [canScrollDown, setCanScrollDown] = useState(false); + const [canScrollUp, setCanScrollUp] = useState(false); + + // Check scroll position and update indicators + const checkScrollPosition = () => { + if (containerRef.current) { + const { scrollTop, scrollHeight, clientHeight } = containerRef.current; + setCanScrollDown(scrollTop + clientHeight < scrollHeight - 10); + setCanScrollUp(scrollTop > 10); + } + }; + + // Set up scroll event listener + useEffect(() => { + const container = containerRef.current; + if (container) { + container.addEventListener("scroll", checkScrollPosition); + // Initial check + checkScrollPosition(); + + // Check again after content might have changed + const timer = setTimeout(checkScrollPosition, 100); + + return () => { + container.removeEventListener("scroll", checkScrollPosition); + clearTimeout(timer); + }; + } + }, [byAssignee, unassigned]); + + // Recheck on window resize + useEffect(() => { + window.addEventListener("resize", checkScrollPosition); + return () => window.removeEventListener("resize", checkScrollPosition); + }, []); + + // Debug: Log the incoming data + useEffect(() => { + console.log("AssigneeBarChart - byAssignee:", byAssignee); + console.log("AssigneeBarChart - unassigned:", unassigned); + + // Check if status is present in the data + if (byAssignee) { + const firstAssignee = Object.values(byAssignee)[0]; + if (firstAssignee && firstAssignee.length > 0) { + console.log( + "First assignee's first item status:", + firstAssignee[0].status + ); + } + } + }, [byAssignee, unassigned]); + + if (!byAssignee && unassigned.length === 0) { return
No assignee data available
; } - // Calculate total assigned evidence items - const totalAssignedItems = Object.values(byAssignee).reduce( - (sum, items) => sum + items.length, - 0 - ); + // Create chart data for each assignee + const assigneeData = Object.entries(byAssignee || {}).map( + ([assigneeId, items]) => { + // Count items by status + const statusCounts = { + empty: 0, + draft: 0, + needsReview: 0, + upToDate: 0, + }; - // Calculate unassigned items - const totalEvidenceItems = allEvidence.length; - const unassignedCount = Math.max(0, totalEvidenceItems - totalAssignedItems); + // Use for...of instead of forEach + for (const item of items) { + statusCounts[item.status]++; + } - // Create chart data - const chartData: ChartDataItem[] = Object.entries(byAssignee).map( - ([assigneeId, items]) => { - // Get first evidence item to access assignee name - const displayName = assigneeId || "Unassigned"; + // Debug: Log status counts for each assignee + console.log(`Status counts for ${assigneeId}:`, statusCounts); return { - key: assigneeId, - label: displayName, - value: items.length, + id: assigneeId, + name: assigneeId || "Unassigned", + totalItems: items.length, + items, + statusCounts, }; } ); - // Add "Unassigned" category with the calculated count - chartData.push({ - key: "unassigned", - label: "Unassigned", - value: unassignedCount, - }); + // Add unassigned items if any + if (unassigned.length > 0) { + // Count unassigned items by status + const statusCounts = { + empty: 0, + draft: 0, + needsReview: 0, + upToDate: 0, + }; + + // Use for...of instead of forEach + for (const item of unassigned) { + statusCounts[item.status]++; + } + + // Debug: Log status counts for unassigned + console.log("Status counts for unassigned:", statusCounts); + + assigneeData.push({ + id: "unassigned", + name: "Unassigned", + totalItems: unassigned.length, + items: unassigned, + statusCounts, + }); + } // Sort by count in descending order - chartData.sort((a, b) => b.value - a.value); + assigneeData.sort((a, b) => b.totalItems - a.totalItems); return ( - `${value} item${value !== 1 ? "s" : ""}`} - height={320} - colors={["#8b5cf6"]} - /> +
+
+
+ {assigneeData.map((assignee) => { + // Create chart data for this assignee with status breakdown + const chartData: ChartDataItem[] = []; + + // Add statuses in priority order + for (const status of STATUS_PRIORITY) { + if (assignee.statusCounts[status] > 0) { + chartData.push({ + key: status, + label: + status === "upToDate" + ? "Up to Date" + : status === "needsReview" + ? "Needs Review" + : status.charAt(0).toUpperCase() + status.slice(1), + value: assignee.statusCounts[status], + color: STATUS_COLORS[status], + }); + } + } + + return ( +
+
+

{assignee.name}

+ + {assignee.totalItems} items + +
+ + {/* Bar chart for this assignee with status breakdown */} + `${value}`} + height={12} + /> +
+ ); + })} +
+
+ + {/* Scroll up indicator */} + {canScrollUp && ( +
+ +
+ )} + + {/* Scroll down indicator */} + {canScrollDown && ( +
+ +
+ )} +
); } diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx index 68a3ad20b7..5e6e9550f6 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/DepartmentBarChart.tsx @@ -1,38 +1,190 @@ "use client"; -import React from "react"; -import type { OrganizationEvidence } from "@prisma/client"; +import React, { useEffect, useRef, useState } from "react"; import { HorizontalBarChart, type ChartDataItem } from "./HorizontalBarChart"; +import type { Departments } from "@prisma/client"; +import type { EvidenceWithStatus } from "../actions/getEvidenceDashboard"; +import { ChevronDown, ChevronUp } from "lucide-react"; interface DepartmentBarChartProps { - byDepartment?: Record; + byDepartment?: Record; } +// Status colors matching the EvidenceSummaryCards +const STATUS_COLORS = { + empty: "#6b7280", // Gray for empty + draft: "#f59e0b", // Amber for draft + needsReview: "#ef4444", // Red for needs review + upToDate: "#10b981", // Green for up to date +}; + +// Status priority order for display (determines the order in the bar) +const STATUS_PRIORITY = ["upToDate", "draft", "needsReview", "empty"] as const; +type StatusType = (typeof STATUS_PRIORITY)[number]; + +// Department display names +const DEPARTMENT_NAMES: Record = { + none: "Uncategorized", + admin: "Administration", + gov: "Governance", + hr: "Human Resources", + it: "Information Technology", + itsm: "IT Service Management", + qms: "Quality Management", +}; + export function DepartmentBarChart({ byDepartment }: DepartmentBarChartProps) { - if (!byDepartment) { + const containerRef = useRef(null); + const [canScrollDown, setCanScrollDown] = useState(false); + const [canScrollUp, setCanScrollUp] = useState(false); + + // Check scroll position and update indicators + const checkScrollPosition = () => { + if (containerRef.current) { + const { scrollTop, scrollHeight, clientHeight } = containerRef.current; + setCanScrollDown(scrollTop + clientHeight < scrollHeight - 10); + setCanScrollUp(scrollTop > 10); + } + }; + + // Set up scroll event listener + useEffect(() => { + const container = containerRef.current; + if (container) { + container.addEventListener("scroll", checkScrollPosition); + // Initial check + checkScrollPosition(); + + // Check again after content might have changed + const timer = setTimeout(checkScrollPosition, 100); + + return () => { + container.removeEventListener("scroll", checkScrollPosition); + clearTimeout(timer); + }; + } + }, [byDepartment]); + + // Recheck on window resize + useEffect(() => { + window.addEventListener("resize", checkScrollPosition); + return () => window.removeEventListener("resize", checkScrollPosition); + }, []); + + // Debug: Log the incoming data + useEffect(() => { + console.log("DepartmentBarChart - byDepartment:", byDepartment); + + // Check if status is present in the data + if (byDepartment) { + const firstDepartment = Object.values(byDepartment)[0]; + if (firstDepartment && firstDepartment.length > 0) { + console.log( + "First department's first item status:", + firstDepartment[0].status + ); + } + } + }, [byDepartment]); + + if (!byDepartment || Object.keys(byDepartment).length === 0) { return
No department data available
; } - // Create chart data - const chartData: ChartDataItem[] = Object.entries(byDepartment).map( - ([department, items]) => ({ - key: department, - label: department || "Uncategorized", - value: items.length, - }) - ); + // Create chart data for each department + const departmentData = Object.entries(byDepartment) + .filter(([_, items]) => items.length > 0) // Only include departments with items + .map(([dept, items]) => { + const department = dept as Departments; + + // Count items by status + const statusCounts = { + empty: 0, + draft: 0, + needsReview: 0, + upToDate: 0, + }; + + // Use for...of instead of forEach + for (const item of items) { + statusCounts[item.status]++; + } + + // Debug: Log status counts for each department + console.log(`Status counts for ${department}:`, statusCounts); + + return { + id: department, + name: DEPARTMENT_NAMES[department] || "Unknown", + totalItems: items.length, + items, + statusCounts, + }; + }); // Sort by count in descending order - chartData.sort((a, b) => b.value - a.value); + departmentData.sort((a, b) => b.totalItems - a.totalItems); return ( - `${value} item${value !== 1 ? "s" : ""}`} - height={320} - colors={["#ef4444"]} - /> +
+
+
+ {departmentData.map((department) => { + // Create chart data for this department with status breakdown + const chartData: ChartDataItem[] = []; + + // Add statuses in priority order + for (const status of STATUS_PRIORITY) { + if (department.statusCounts[status] > 0) { + chartData.push({ + key: status, + label: + status === "upToDate" + ? "Up to Date" + : status === "needsReview" + ? "Needs Review" + : status.charAt(0).toUpperCase() + status.slice(1), + value: department.statusCounts[status], + color: STATUS_COLORS[status], + }); + } + } + + return ( +
+
+

{department.name}

+ + {department.totalItems} items + +
+ + {/* Bar chart for this department with status breakdown */} + `${value}`} + height={12} + /> +
+ ); + })} +
+
+ + {/* Scroll up indicator */} + {canScrollUp && ( +
+ +
+ )} + + {/* Scroll down indicator */} + {canScrollDown && ( +
+ +
+ )} +
); } diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx index 342e0522b4..be2973ca92 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/EvidenceOverview.tsx @@ -17,34 +17,43 @@ export const EvidenceOverview = () => { return
Error: {error.message}
; } - // Calculate all evidence items by flattening the byDepartment data - const allEvidence = data?.byDepartment - ? Object.values(data.byDepartment).flat() - : []; + if (!data) { + return
No data available
; + } return (

Evidence Dashboard

+ {/* Charts */}
-
-
- +
+
+

By Department

+
+ +
-
-
- +
+
+

By Assignee

+
+ +
-
-
- +
+
+

By Framework

+
+ +
diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx index b439287614..653f831778 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/FrameworkBarChart.tsx @@ -1,38 +1,176 @@ "use client"; -import React from "react"; -import type { OrganizationEvidence } from "@prisma/client"; +import React, { useEffect, useRef, useState } from "react"; import { HorizontalBarChart, type ChartDataItem } from "./HorizontalBarChart"; +import type { EvidenceWithStatus } from "../actions/getEvidenceDashboard"; +import { ChevronDown, ChevronUp } from "lucide-react"; interface FrameworkBarChartProps { - byFramework?: Record; + byFramework?: Record; } +// Status colors matching the EvidenceSummaryCards +const STATUS_COLORS = { + empty: "#6b7280", // Gray for empty + draft: "#f59e0b", // Amber for draft + needsReview: "#ef4444", // Red for needs review + upToDate: "#10b981", // Green for up to date +}; + +// Status priority order for display (determines the order in the bar) +const STATUS_PRIORITY = ["upToDate", "draft", "needsReview", "empty"] as const; +type StatusType = (typeof STATUS_PRIORITY)[number]; + export function FrameworkBarChart({ byFramework }: FrameworkBarChartProps) { - if (!byFramework) { + const containerRef = useRef(null); + const [canScrollDown, setCanScrollDown] = useState(false); + const [canScrollUp, setCanScrollUp] = useState(false); + + // Check scroll position and update indicators + const checkScrollPosition = () => { + if (containerRef.current) { + const { scrollTop, scrollHeight, clientHeight } = containerRef.current; + setCanScrollDown(scrollTop + clientHeight < scrollHeight - 10); + setCanScrollUp(scrollTop > 10); + } + }; + + // Set up scroll event listener + useEffect(() => { + const container = containerRef.current; + if (container) { + container.addEventListener("scroll", checkScrollPosition); + // Initial check + checkScrollPosition(); + + // Check again after content might have changed + const timer = setTimeout(checkScrollPosition, 100); + + return () => { + container.removeEventListener("scroll", checkScrollPosition); + clearTimeout(timer); + }; + } + }, [byFramework]); + + // Recheck on window resize + useEffect(() => { + window.addEventListener("resize", checkScrollPosition); + return () => window.removeEventListener("resize", checkScrollPosition); + }, []); + + // Debug: Log the incoming data + useEffect(() => { + console.log("FrameworkBarChart - byFramework:", byFramework); + + // Check if status is present in the data + if (byFramework) { + const firstFramework = Object.values(byFramework)[0]; + if (firstFramework && firstFramework.length > 0) { + console.log( + "First framework's first item status:", + firstFramework[0].status + ); + } + } + }, [byFramework]); + + if (!byFramework || Object.keys(byFramework).length === 0) { return
No framework data available
; } - // Create chart data - const chartData: ChartDataItem[] = Object.entries(byFramework).map( - ([framework, items]) => ({ - key: framework, - label: framework || "Uncategorized", - value: items.length, - }) + // Create chart data for each framework + const frameworkData = Object.entries(byFramework).map( + ([frameworkId, items]) => { + // Count items by status + const statusCounts = { + empty: 0, + draft: 0, + needsReview: 0, + upToDate: 0, + }; + + // Use for...of instead of forEach + for (const item of items) { + statusCounts[item.status]++; + } + + // Debug: Log status counts for each framework + console.log(`Status counts for framework ${frameworkId}:`, statusCounts); + + return { + id: frameworkId, + name: `Framework ${frameworkId}`, + totalItems: items.length, + items, + statusCounts, + }; + } ); // Sort by count in descending order - chartData.sort((a, b) => b.value - a.value); + frameworkData.sort((a, b) => b.totalItems - a.totalItems); return ( - `${value} item${value !== 1 ? "s" : ""}`} - height={240} - colors={["#10b981"]} - /> +
+
+
+ {frameworkData.map((framework) => { + // Create chart data for this framework with status breakdown + const chartData: ChartDataItem[] = []; + + // Add statuses in priority order + for (const status of STATUS_PRIORITY) { + if (framework.statusCounts[status] > 0) { + chartData.push({ + key: status, + label: + status === "upToDate" + ? "Up to Date" + : status === "needsReview" + ? "Needs Review" + : status.charAt(0).toUpperCase() + status.slice(1), + value: framework.statusCounts[status], + color: STATUS_COLORS[status], + }); + } + } + + return ( +
+
+

{framework.name}

+ + {framework.totalItems} items + +
+ + {/* Bar chart for this framework with status breakdown */} + `${value}`} + height={12} + /> +
+ ); + })} +
+
+ + {/* Scroll up indicator */} + {canScrollUp && ( +
+ +
+ )} + + {/* Scroll down indicator */} + {canScrollDown && ( +
+ +
+ )} +
); } diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx index f721a9fae0..f08133b5cf 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/components/HorizontalBarChart.tsx @@ -1,9 +1,7 @@ "use client"; -import { useState } from "react"; -import type { CSSProperties } from "react"; -import { scaleBand, scaleLinear, max } from "d3"; -import { AnimatedBar } from "./AnimatedBar"; +import React, { useEffect } from "react"; +import type { CSSProperties, Key } from "react"; export interface ChartDataItem { key: K; @@ -30,25 +28,25 @@ const defaultColors = [ "#6b7280", // Gray (muted) ]; -export function HorizontalBarChart({ +export function HorizontalBarChart({ data, title, - height = 288, + height = 12, // Default bar height matching policies-by-assignee showZeroValues = true, colors = defaultColors, valueFormatter = (value) => `${value}`, }: HorizontalBarChartProps) { - const [hoveredItem, setHoveredItem] = useState | null>(null); + // Debug: Log the incoming data + useEffect(() => { + console.log("HorizontalBarChart - data:", data); + }, [data]); if (!data || data.length === 0) { - return
No data available
; + return
No data available
; } - // Sort data by value in descending order - const sortedData = [...data].sort((a, b) => b.value - a.value); - // Assign colors if not provided - const chartData = sortedData.map((item, index) => { + const chartData = data.map((item, index) => { // For single color arrays, use that color for all bars const color = colors.length === 1 @@ -66,170 +64,89 @@ export function HorizontalBarChart({ ? chartData : chartData.filter((d) => d.value > 0); - // Scales - const yScale = scaleBand() - .domain(filteredData.map((d) => d.label)) - .range([0, 100]) - .padding(0.175); + // Debug: Log the filtered data + useEffect(() => { + console.log("HorizontalBarChart - filteredData:", filteredData); + }, [filteredData]); + + // Calculate the total value for percentage calculations + const totalValue = filteredData.reduce((sum, item) => sum + item.value, 0); - const xScale = scaleLinear() - .domain([0, max(filteredData.map((d) => d.value)) ?? 0]) - .range([0, 100]); + if (totalValue === 0) { + return
; + } - const longestWord = max(filteredData.map((d) => d.label.length)) || 1; + const barHeight = height; + let cumulativePercentage = 0; + const cornerRadius = 0; // No rounded corners in the policies-by-assignee chart return (
{title &&

{title}

} +
- {/* Chart Area */}
- {/* Bars with Rounded Right Corners */} - {filteredData.map((d, index) => { - const barWidth = xScale(d.value); - const barHeight = yScale.bandwidth(); - const barTop = yScale(d.label) || 0; - const isHovered = hoveredItem?.key === d.key; + {filteredData.map((d) => { + const percentage = (d.value / totalValue) * 100; + const xPosition = cumulativePercentage; + cumulativePercentage += percentage; return ( - +
setHoveredItem(d)} - onMouseLeave={() => setHoveredItem(null)} - > - {/* Tooltip */} - {isHovered && ( -
-
- {d.label} - {valueFormatter(d.value)} -
-
-
- )} -
- + title={`${d.label}: ${valueFormatter(d.value)}`} + /> +
); })} - - {/* Grid lines */} - - {xScale.ticks(4).map((value) => ( - - - - ))} -
+
- {/* Y Axis (Labels) */} - - - {filteredData.map((entry, i) => ( - - {entry.label} - {entry.value === 0 && showZeroValues && ( - (0) - )} - - ))} - - - - {/* X Axis (Values) */} - - - {xScale.ticks(4).map((value, i) => ( - - {value} - - ))} - - + {/* Legend */} +
+ {filteredData.map((item) => ( +
+
+ + {item.label} ({valueFormatter(item.value)}) + +
+ ))}
); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts index c7591b05b7..739df38290 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/evidence/overview/hooks/useEvidenceDashboard.ts @@ -15,6 +15,17 @@ async function fetchEvidenceDashboard() { throw new Error(result.serverError); } + // Debug: Log the data received from the server action + console.log("Evidence Dashboard Data:", result.data?.data); + + // Check if the data contains status information + if (result.data?.data?.byAssignee) { + const firstAssignee = Object.values(result.data.data.byAssignee)[0]; + if (firstAssignee && firstAssignee.length > 0) { + console.log("First assignee's first item:", firstAssignee[0]); + } + } + return result.data?.data; } catch (error) { console.error("Error fetching evidence dashboard:", error); @@ -23,8 +34,24 @@ async function fetchEvidenceDashboard() { } export function useEvidenceDashboard() { - return useSWR("evidence-dashboard", fetchEvidenceDashboard, { - revalidateOnFocus: false, - revalidateOnReconnect: false, - }); + const { data, error, isLoading, mutate } = useSWR( + "evidence-dashboard", + fetchEvidenceDashboard, + { + revalidateOnFocus: false, + revalidateOnReconnect: false, + } + ); + + // Debug: Log the data in the hook + if (data) { + console.log("useEvidenceDashboard hook data:", data); + } + + return { + data, + error, + isLoading, + mutate, + }; }