Openstatus www.openstatus.dev

๐Ÿ˜ฑ extract ui ๐Ÿ’… (#309)

* ๐Ÿ˜ฑ extract ui

* ๐Ÿคฏ

* ๐ŸŸข

* ๐Ÿ˜

* ๐Ÿ˜

authored by

Thibault Le Ouay and committed by
GitHub
a13f7037 949c117a

+866 -1053
+1 -19
apps/web/package.json
··· 19 19 "@openstatus/plans": "workspace:*", 20 20 "@openstatus/tinybird": "workspace:*", 21 21 "@openstatus/upstash": "workspace:*", 22 + "@openstatus/ui": "workspace:*", 22 23 "@openstatus/vercel": "workspace:*", 23 - "@radix-ui/react-accordion": "1.1.2", 24 - "@radix-ui/react-alert-dialog": "1.0.4", 25 - "@radix-ui/react-avatar": "^1.0.3", 26 - "@radix-ui/react-checkbox": "1.0.4", 27 - "@radix-ui/react-context-menu": "^2.1.4", 28 - "@radix-ui/react-dialog": "1.0.4", 29 - "@radix-ui/react-dropdown-menu": "2.0.5", 30 - "@radix-ui/react-hover-card": "1.0.6", 31 - "@radix-ui/react-label": "2.0.2", 32 - "@radix-ui/react-popover": "1.0.6", 33 - "@radix-ui/react-radio-group": "^1.1.3", 34 - "@radix-ui/react-select": "1.2.2", 35 - "@radix-ui/react-separator": "1.0.3", 36 - "@radix-ui/react-slot": "1.0.2", 37 - "@radix-ui/react-switch": "1.0.3", 38 - "@radix-ui/react-tabs": "1.0.4", 39 - "@radix-ui/react-toast": "1.1.4", 40 - "@radix-ui/react-tooltip": "1.0.6", 41 24 "@sentry/integrations": "7.65.0", 42 25 "@sentry/nextjs": "7.65.0", 43 26 "@stripe/stripe-js": "2.0.0", ··· 82 65 "svix": "1.4.12", 83 66 "tailwind-merge": "1.13.2", 84 67 "tailwindcss-animate": "1.0.6", 85 - "ui": "workspace:*", 86 68 "zod": "3.21.4" 87 69 }, 88 70 "devDependencies": {
+4 -4
apps/web/src/app/_components/event-table.tsx
··· 4 4 import { formatDistance } from "date-fns"; 5 5 6 6 import type { Ping } from "@openstatus/tinybird"; 7 - 8 - import { Badge } from "@/components/ui/badge"; 9 - import { Button } from "@/components/ui/button"; 10 7 import { 8 + Badge, 9 + Button, 11 10 Table, 12 11 TableBody, 13 12 TableCaption, ··· 15 14 TableHead, 16 15 TableHeader, 17 16 TableRow, 18 - } from "@/components/ui/table"; 17 + } from "@openstatus/ui"; 18 + 19 19 import { cn } from "@/lib/utils"; 20 20 21 21 export function EventTable({ events }: { events: Ping[] }) {
+2 -2
apps/web/src/app/_components/hero-form.tsx
··· 1 1 "use client"; 2 2 3 - import { Input } from "@/components/ui/input"; 4 - import { toast } from "@/components/ui/use-toast"; 3 + import { Input, toast } from "@openstatus/ui"; 4 + 5 5 import { addToWaitlist, sendWaitingListEmail } from "../action"; 6 6 import { SubmitButton } from "./submit-button"; 7 7
+1 -2
apps/web/src/app/_components/input-search.tsx
··· 4 4 import { Command as CommandPrimitive, useCommandState } from "cmdk"; 5 5 6 6 import type { Ping } from "@openstatus/tinybird"; 7 - 8 7 import { 9 8 Command, 10 9 CommandEmpty, 11 10 CommandGroup, 12 11 CommandItem, 13 - } from "@/components/ui/command"; 12 + } from "@openstatus/ui"; 14 13 15 14 // TODO: once stable, use the shallow route to store the search params inside of the search params 16 15
+2 -1
apps/web/src/app/_components/submit-button.tsx
··· 2 2 3 3 import { experimental_useFormStatus as useFormStatus } from "react-dom"; 4 4 5 + import { Button } from "@openstatus/ui"; 6 + 5 7 import { LoadingAnimation } from "@/components/loading-animation"; 6 - import { Button } from "@/components/ui/button"; 7 8 8 9 export function SubmitButton() { 9 10 const { pending } = useFormStatus();
+4 -6
apps/web/src/app/app/(dashboard)/[workspaceSlug]/incidents/_components/action-button.tsx
··· 10 10 insertIncidentSchema, 11 11 // insertIncidentUpdateSchema, 12 12 } from "@openstatus/db/src/schema"; 13 - 14 - import { LoadingAnimation } from "@/components/loading-animation"; 15 13 import { 16 14 AlertDialog, 17 15 AlertDialogAction, ··· 22 20 AlertDialogHeader, 23 21 AlertDialogTitle, 24 22 AlertDialogTrigger, 25 - } from "@/components/ui/alert-dialog"; 26 - import { Button } from "@/components/ui/button"; 27 - import { 23 + Button, 28 24 DropdownMenu, 29 25 DropdownMenuContent, 30 26 DropdownMenuItem, 31 27 DropdownMenuTrigger, 32 - } from "@/components/ui/dropdown-menu"; 28 + } from "@openstatus/ui"; 29 + 30 + import { LoadingAnimation } from "@/components/loading-animation"; 33 31 import { useToastAction } from "@/hooks/use-toast-action"; 34 32 import { api } from "@/trpc/client"; 35 33
+5 -4
apps/web/src/app/app/(dashboard)/[workspaceSlug]/incidents/_components/delete-incident-update.tsx
··· 3 3 import * as React from "react"; 4 4 import { useRouter } from "next/navigation"; 5 5 6 - import { Icons } from "@/components/icons"; 7 - import { LoadingAnimation } from "@/components/loading-animation"; 8 6 import { 9 7 AlertDialog, 10 8 AlertDialogAction, ··· 15 13 AlertDialogHeader, 16 14 AlertDialogTitle, 17 15 AlertDialogTrigger, 18 - } from "@/components/ui/alert-dialog"; 19 - import { Button } from "@/components/ui/button"; 16 + Button, 17 + } from "@openstatus/ui"; 18 + 19 + import { Icons } from "@/components/icons"; 20 + import { LoadingAnimation } from "@/components/loading-animation"; 20 21 import { useToastAction } from "@/hooks/use-toast-action"; 21 22 import { api } from "@/trpc/client"; 22 23
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/incidents/_components/empty-state.tsx
··· 1 1 import Link from "next/link"; 2 2 3 + import { Button } from "@openstatus/ui"; 4 + 3 5 import { EmptyState as DefaultEmptyState } from "@/components/dashboard/empty-state"; 4 - import { Button } from "@/components/ui/button"; 5 6 6 7 export function EmptyState() { 7 8 return (
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/incidents/edit/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Header } from "@/components/dashboard/header"; 2 4 import { SkeletonForm } from "@/components/forms/skeleton-form"; 3 - import { Skeleton } from "@/components/ui/skeleton"; 4 5 5 6 export default function Loading() { 6 7 return (
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/incidents/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Header } from "@/components/dashboard/header"; 2 - import { Skeleton } from "@/components/ui/skeleton"; 3 4 4 5 export default function Loading() { 5 6 return (
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/incidents/page.tsx
··· 2 2 import Link from "next/link"; 3 3 import { formatDistance } from "date-fns"; 4 4 5 + import { Button } from "@openstatus/ui"; 6 + 5 7 import { Container } from "@/components/dashboard/container"; 6 8 import { Header } from "@/components/dashboard/header"; 7 9 import { Icons } from "@/components/icons"; 8 10 import { AffectedMonitors } from "@/components/incidents/affected-monitors"; 9 11 import { Events } from "@/components/incidents/events"; 10 12 import { StatusBadge } from "@/components/incidents/status-badge"; 11 - import { Button } from "@/components/ui/button"; 12 13 import { statusDict } from "@/data/incidents-dictionary"; 13 14 import { api } from "@/trpc/server"; 14 15 import { ActionButton } from "./_components/action-button";
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/incidents/update/edit/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Header } from "@/components/dashboard/header"; 2 4 import { SkeletonForm } from "@/components/forms/skeleton-form"; 3 - import { Skeleton } from "@/components/ui/skeleton"; 4 5 5 6 export default function Loading() { 6 7 return (
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/integrations/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Header } from "@/components/dashboard/header"; 2 - import { Skeleton } from "@/components/ui/skeleton"; 3 4 4 5 export default function Loading() { 5 6 return (
+2 -2
apps/web/src/app/app/(dashboard)/[workspaceSlug]/integrations/page.tsx
··· 2 2 3 3 import * as React from "react"; 4 4 5 + import { Badge, Button } from "@openstatus/ui"; 6 + 5 7 import { Container } from "@/components/dashboard/container"; 6 8 import { Header } from "@/components/dashboard/header"; 7 - import { Badge } from "@/components/ui/badge"; 8 - import { Button } from "@/components/ui/button"; 9 9 import { api } from "@/trpc/client"; 10 10 11 11 export default async function IncidentPage({
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/monitors/[id]/data/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Container } from "@/components/dashboard/container"; 2 4 import { Header } from "@/components/dashboard/header"; 3 - import { Skeleton } from "@/components/ui/skeleton"; 4 5 5 6 export default function Loading() { 6 7 return (
+4 -6
apps/web/src/app/app/(dashboard)/[workspaceSlug]/monitors/_components/action-button.tsx
··· 7 7 import type * as z from "zod"; 8 8 9 9 import type { insertMonitorSchema } from "@openstatus/db/src/schema"; 10 - 11 - import { LoadingAnimation } from "@/components/loading-animation"; 12 10 import { 13 11 AlertDialog, 14 12 AlertDialogAction, ··· 19 17 AlertDialogHeader, 20 18 AlertDialogTitle, 21 19 AlertDialogTrigger, 22 - } from "@/components/ui/alert-dialog"; 23 - import { Button } from "@/components/ui/button"; 24 - import { 20 + Button, 25 21 DropdownMenu, 26 22 DropdownMenuContent, 27 23 DropdownMenuItem, 28 24 DropdownMenuTrigger, 29 - } from "@/components/ui/dropdown-menu"; 25 + } from "@openstatus/ui"; 26 + 27 + import { LoadingAnimation } from "@/components/loading-animation"; 30 28 import { useToastAction } from "@/hooks/use-toast-action"; 31 29 import { api } from "@/trpc/client"; 32 30
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/monitors/_components/empty-state.tsx
··· 1 1 import Link from "next/link"; 2 2 3 + import { Button } from "@openstatus/ui"; 4 + 3 5 import { EmptyState as DefaultEmptyState } from "@/components/dashboard/empty-state"; 4 - import { Button } from "@/components/ui/button"; 5 6 6 7 export function EmptyState() { 7 8 return (
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/monitors/edit/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Header } from "@/components/dashboard/header"; 2 4 import { SkeletonForm } from "@/components/forms/skeleton-form"; 3 - import { Skeleton } from "@/components/ui/skeleton"; 4 5 5 6 export default function Loading() { 6 7 return (
+2
apps/web/src/app/app/(dashboard)/[workspaceSlug]/monitors/edit/page.tsx
··· 1 1 import { notFound } from "next/navigation"; 2 2 import * as z from "zod"; 3 3 4 + import { Tabs, TabsContent, TabsList, TabsTrigger } from "@openstatus/ui"; 5 + 4 6 import { Header } from "@/components/dashboard/header"; 5 7 import { MonitorForm } from "@/components/forms/montitor-form"; 6 8 import { api } from "@/trpc/server";
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/monitors/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Container } from "@/components/dashboard/container"; 2 4 import { Header } from "@/components/dashboard/header"; 3 - import { Skeleton } from "@/components/ui/skeleton"; 4 5 5 6 export default function Loading() { 6 7 return (
+1 -2
apps/web/src/app/app/(dashboard)/[workspaceSlug]/monitors/page.tsx
··· 2 2 import Link from "next/link"; 3 3 4 4 import { allPlans } from "@openstatus/plans"; 5 + import { Badge, ButtonWithDisableTooltip } from "@openstatus/ui"; 5 6 6 7 import { Container } from "@/components/dashboard/container"; 7 8 import { Header } from "@/components/dashboard/header"; 8 9 import { Limit } from "@/components/dashboard/limit"; 9 - import { Badge } from "@/components/ui/badge"; 10 - import { ButtonWithDisableTooltip } from "@/components/ui/button-with-disable-tooltip"; 11 10 import { cn } from "@/lib/utils"; 12 11 import { api } from "@/trpc/server"; 13 12 import { ActionButton } from "./_components/action-button";
+3 -2
apps/web/src/app/app/(dashboard)/[workspaceSlug]/settings/_components/api-keys/create-form.tsx
··· 3 3 import * as React from "react"; 4 4 import { useRouter } from "next/navigation"; 5 5 6 - import { Icons } from "@/components/icons"; 7 6 import { 8 7 AlertDialog, 9 8 AlertDialogAction, ··· 12 11 AlertDialogFooter, 13 12 AlertDialogHeader, 14 13 AlertDialogTitle, 15 - } from "@/components/ui/alert-dialog"; 14 + } from "@openstatus/ui"; 15 + 16 + import { Icons } from "@/components/icons"; 16 17 import { useToastAction } from "@/hooks/use-toast-action"; 17 18 import { copyToClipboard } from "@/lib/utils"; 18 19 import { create } from "./actions";
+4 -3
apps/web/src/app/app/(dashboard)/[workspaceSlug]/settings/_components/api-keys/revoke-button.tsx.tsx
··· 3 3 import * as React from "react"; 4 4 import { useRouter } from "next/navigation"; 5 5 6 - import { LoadingAnimation } from "@/components/loading-animation"; 7 6 import { 8 7 AlertDialog, 9 8 AlertDialogAction, ··· 14 13 AlertDialogHeader, 15 14 AlertDialogTitle, 16 15 AlertDialogTrigger, 17 - } from "@/components/ui/alert-dialog"; 18 - import { Button } from "@/components/ui/button"; 16 + Button, 17 + } from "@openstatus/ui"; 18 + 19 + import { LoadingAnimation } from "@/components/loading-animation"; 19 20 import { useToastAction } from "@/hooks/use-toast-action"; 20 21 import { revoke } from "./actions"; 21 22
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/settings/_components/api-keys/submit-button.tsx
··· 2 2 3 3 import { experimental_useFormStatus as useFormStatus } from "react-dom"; 4 4 5 + import { Button } from "@openstatus/ui"; 6 + 5 7 import { LoadingAnimation } from "@/components/loading-animation"; 6 - import { Button } from "@/components/ui/button"; 7 8 8 9 export function SubmitButton({ children }: { children?: React.ReactNode }) { 9 10 const { pending } = useFormStatus();
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/settings/_components/billing/customer-portal-button.tsx
··· 3 3 import { useTransition } from "react"; 4 4 import { useRouter } from "next/navigation"; 5 5 6 + import { Button } from "@openstatus/ui"; 7 + 6 8 import { LoadingAnimation } from "@/components/loading-animation"; 7 - import { Button } from "@/components/ui/button"; 8 9 import { api } from "@/trpc/client"; 9 10 10 11 interface Props {
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/settings/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Header } from "@/components/dashboard/header"; 2 - import { Skeleton } from "@/components/ui/skeleton"; 3 4 4 5 export default function Loading() { 5 6 return (
+8 -2
apps/web/src/app/app/(dashboard)/[workspaceSlug]/settings/page.tsx
··· 1 1 import * as React from "react"; 2 2 3 + import { 4 + Badge, 5 + Tabs, 6 + TabsContent, 7 + TabsList, 8 + TabsTrigger, 9 + } from "@openstatus/ui"; 10 + 3 11 import { Header } from "@/components/dashboard/header"; 4 - import { Badge } from "@/components/ui/badge"; 5 - import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; 6 12 import { api } from "@/trpc/server"; 7 13 import { ApiKeys } from "./_components/api-keys/card"; 8 14 import { CustomerPortalButton } from "./_components/billing/customer-portal-button";
+4 -6
apps/web/src/app/app/(dashboard)/[workspaceSlug]/status-pages/_components/action-button.tsx
··· 7 7 import type * as z from "zod"; 8 8 9 9 import type { insertPageSchemaWithMonitors } from "@openstatus/db/src/schema"; 10 - 11 - import { LoadingAnimation } from "@/components/loading-animation"; 12 10 import { 13 11 AlertDialog, 14 12 AlertDialogAction, ··· 19 17 AlertDialogHeader, 20 18 AlertDialogTitle, 21 19 AlertDialogTrigger, 22 - } from "@/components/ui/alert-dialog"; 23 - import { Button } from "@/components/ui/button"; 24 - import { 20 + Button, 25 21 DropdownMenu, 26 22 DropdownMenuContent, 27 23 DropdownMenuItem, 28 24 DropdownMenuTrigger, 29 - } from "@/components/ui/dropdown-menu"; 25 + } from "@openstatus/ui"; 26 + 27 + import { LoadingAnimation } from "@/components/loading-animation"; 30 28 import { useToastAction } from "@/hooks/use-toast-action"; 31 29 import { api } from "@/trpc/client"; 32 30
+1 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/status-pages/_components/empty-state.tsx
··· 2 2 import type * as z from "zod"; 3 3 4 4 import type { allMonitorsSchema } from "@openstatus/db/src/schema"; 5 + import { Button } from "@openstatus/ui"; 5 6 6 7 import { EmptyState as DefaultEmptyState } from "@/components/dashboard/empty-state"; 7 - import { Button } from "@/components/ui/button"; 8 8 9 9 export function EmptyState({ 10 10 allMonitors,
+1 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/status-pages/edit/_components/pro-feature-alert.tsx
··· 1 1 import Link from "next/link"; 2 2 import { AlertTriangle } from "lucide-react"; 3 3 4 - import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; 4 + import { Alert, AlertDescription, AlertTitle } from "@openstatus/ui"; 5 5 6 6 export function ProFeatureAlert() { 7 7 return (
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/status-pages/edit/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Header } from "@/components/dashboard/header"; 2 4 import { SkeletonForm } from "@/components/forms/skeleton-form"; 3 - import { Skeleton } from "@/components/ui/skeleton"; 4 5 5 6 export default function Loading() { 6 7 return (
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/status-pages/edit/page.tsx
··· 1 1 import { notFound } from "next/navigation"; 2 2 import * as z from "zod"; 3 3 4 + import { Tabs, TabsContent, TabsList, TabsTrigger } from "@openstatus/ui"; 5 + 4 6 import { Header } from "@/components/dashboard/header"; 5 7 import { CustomDomainForm } from "@/components/forms/custom-domain-form"; 6 8 import { StatusPageForm } from "@/components/forms/status-page-form"; 7 - import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; 8 9 import { api } from "@/trpc/server"; 9 10 import { ProFeatureAlert } from "./_components/pro-feature-alert"; 10 11
+2 -1
apps/web/src/app/app/(dashboard)/[workspaceSlug]/status-pages/loading.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { Container } from "@/components/dashboard/container"; 2 4 import { Header } from "@/components/dashboard/header"; 3 - import { Skeleton } from "@/components/ui/skeleton"; 4 5 5 6 export default function Loading() { 6 7 return (
+1 -3
apps/web/src/app/app/(dashboard)/[workspaceSlug]/status-pages/page.tsx
··· 2 2 import Link from "next/link"; 3 3 4 4 import { allPlans } from "@openstatus/plans"; 5 + import { Badge, Button, ButtonWithDisableTooltip } from "@openstatus/ui"; 5 6 6 7 import { Container } from "@/components/dashboard/container"; 7 8 import { Header } from "@/components/dashboard/header"; 8 9 import { Limit } from "@/components/dashboard/limit"; 9 - import { Badge } from "@/components/ui/badge"; 10 - import { Button } from "@/components/ui/button"; 11 - import { ButtonWithDisableTooltip } from "@/components/ui/button-with-disable-tooltip"; 12 10 import { cn } from "@/lib/utils"; 13 11 import { api } from "@/trpc/server"; 14 12 import { ActionButton } from "./_components/action-button";
+4 -5
apps/web/src/app/app/(dashboard)/onboarding/_components/path.tsx
··· 2 2 3 3 import { useRouter } from "next/navigation"; 4 4 5 - import { Badge } from "@/components/ui/badge"; 6 - import { Button } from "@/components/ui/button"; 7 5 import { 6 + Badge, 7 + Button, 8 8 Card, 9 9 CardDescription, 10 10 CardFooter, 11 11 CardHeader, 12 12 CardTitle, 13 - } from "@/components/ui/card"; 14 - import { 15 13 Dialog, 16 14 DialogContent, 17 15 DialogDescription, 18 16 DialogHeader, 19 17 DialogTitle, 20 18 DialogTrigger, 21 - } from "@/components/ui/dialog"; 19 + } from "@openstatus/ui"; 20 + 22 21 import useUpdateSearchParams from "@/hooks/use-update-search-params"; 23 22 24 23 export function Path() {
+2 -1
apps/web/src/app/app/(dashboard)/onboarding/page.tsx
··· 2 2 import { notFound } from "next/navigation"; 3 3 import * as z from "zod"; 4 4 5 + import { Button } from "@openstatus/ui"; 6 + 5 7 import { Header } from "@/components/dashboard/header"; 6 8 import { MonitorForm } from "@/components/forms/montitor-form"; 7 9 import { StatusPageForm } from "@/components/forms/status-page-form"; 8 - import { Button } from "@/components/ui/button"; 9 10 import { api } from "@/trpc/server"; 10 11 import { Description } from "./_components/description"; 11 12 import { Path } from "./_components/path";
+2 -1
apps/web/src/app/blog/[slug]/page.tsx
··· 3 3 import { notFound } from "next/navigation"; 4 4 import { allPosts } from "contentlayer/generated"; 5 5 6 + import { Avatar, AvatarFallback, AvatarImage } from "@openstatus/ui"; 7 + 6 8 import { 7 9 defaultMetadata, 8 10 ogMetadata, ··· 11 13 import { Mdx } from "@/components/content/mdx"; 12 14 import { Shell } from "@/components/dashboard/shell"; 13 15 import { BackButton } from "@/components/layout/back-button"; 14 - import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; 15 16 import { formatDate } from "@/lib/utils"; 16 17 17 18 export const dynamic = "force-static";
+2 -1
apps/web/src/app/layout.tsx
··· 6 6 import { ClerkProvider } from "@clerk/nextjs"; 7 7 import PlausibleProvider from "next-plausible"; 8 8 9 + import { Toaster } from "@openstatus/ui"; 10 + 9 11 import { 10 12 defaultMetadata, 11 13 ogMetadata, 12 14 twitterMetadata, 13 15 } from "@/app/shared-metadata"; 14 16 import { TailwindIndicator } from "@/components/tailwind-indicator"; 15 - import { Toaster } from "@/components/ui/toaster"; 16 17 import { ClientAnalytics } from "./_components/analytics"; 17 18 import Background from "./_components/background"; 18 19
+2 -1
apps/web/src/app/not-found.tsx
··· 1 1 import Link from "next/link"; 2 2 3 + import { Button } from "@openstatus/ui"; 4 + 3 5 import { Header } from "@/components/dashboard/header"; 4 6 import { Shell } from "@/components/dashboard/shell"; 5 - import { Button } from "@/components/ui/button"; 6 7 7 8 export default function NotFound() { 8 9 return (
+4 -3
apps/web/src/app/oss-friends/page.tsx
··· 1 1 import Link from "next/link"; 2 2 import { z } from "zod"; 3 3 4 - import { Icons } from "@/components/icons"; 5 - import { MarketingLayout } from "@/components/layout/marketing-layout"; 6 4 import { 7 5 Card, 8 6 CardDescription, 9 7 CardFooter, 10 8 CardHeader, 11 9 CardTitle, 12 - } from "@/components/ui/card"; 10 + } from "@openstatus/ui"; 11 + 12 + import { Icons } from "@/components/icons"; 13 + import { MarketingLayout } from "@/components/layout/marketing-layout"; 13 14 14 15 const OSSFriendSchema = z.object({ 15 16 href: z.string(),
+2 -2
apps/web/src/app/page.tsx
··· 1 1 import Link from "next/link"; 2 2 import { ChevronRight } from "lucide-react"; 3 3 4 + import { Badge, Button } from "@openstatus/ui"; 5 + 4 6 import { Shell } from "@/components/dashboard/shell"; 5 7 import { MarketingLayout } from "@/components/layout/marketing-layout"; 6 8 import { Cards } from "@/components/marketing/cards"; 7 9 import { FAQs } from "@/components/marketing/faqs"; 8 10 import { Plans } from "@/components/marketing/plans"; 9 11 import { Tracker } from "@/components/tracker"; 10 - import { Badge } from "@/components/ui/badge"; 11 - import { Button } from "@/components/ui/button"; 12 12 import { getHomeMonitorListData } from "@/lib/tb"; 13 13 14 14 export const revalidate = 600;
+1 -1
apps/web/src/app/play/@modal/(..)monitor/[id]/modal.tsx
··· 2 2 3 3 import { useRouter } from "next/navigation"; 4 4 5 - import { Dialog, DialogContent } from "@/components/ui/dialog"; 5 + import { Dialog, DialogContent } from "@openstatus/ui"; 6 6 7 7 export function Modal({ children }: { children: React.ReactNode }) { 8 8 const router = useRouter();
+3 -3
apps/web/src/app/play/toggle-button.tsx
··· 5 5 import { CalendarDays } from "lucide-react"; 6 6 7 7 import type { GroupByRange } from "@openstatus/tinybird"; 8 - 9 - import { Button } from "@/components/ui/button"; 10 8 import { 9 + Button, 11 10 Tooltip, 12 11 TooltipContent, 13 12 TooltipProvider, 14 13 TooltipTrigger, 15 - } from "@/components/ui/tooltip"; 14 + } from "@openstatus/ui"; 15 + 16 16 import useUpdateSearchParams from "@/hooks/use-update-search-params"; 17 17 18 18 // TODO: move to @/components folder
+1 -1
apps/web/src/app/status-page/[domain]/_components/navigation-link.tsx
··· 3 3 import Link from "next/link"; 4 4 import { usePathname, useSelectedLayoutSegment } from "next/navigation"; 5 5 6 - import { Button } from "@/components/ui/button"; 6 + import { Button } from "@openstatus/ui"; 7 7 8 8 export default function NavigationLink({ 9 9 slug,
+1 -1
apps/web/src/app/status-page/[domain]/_components/user-button.tsx
··· 3 3 import Link from "next/link"; 4 4 import { useUser } from "@clerk/nextjs"; 5 5 6 - import { Button } from "@/components/ui/button"; 6 + import { Button } from "@openstatus/ui"; 7 7 8 8 // Create a button only displayed if you are logged in and are the owner of the status page 9 9 export function UserButton() {
+3 -2
apps/web/src/components/dashboard/container.tsx
··· 5 5 CardFooter, 6 6 CardHeader, 7 7 CardTitle, 8 - } from "@/components/ui/card"; 8 + Skeleton, 9 + } from "@openstatus/ui"; 10 + 9 11 import { cn } from "@/lib/utils"; 10 - import { Skeleton } from "../ui/skeleton"; 11 12 12 13 interface CardProps 13 14 extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
+2 -1
apps/web/src/components/dashboard/header.tsx
··· 1 + import { Skeleton } from "@openstatus/ui"; 2 + 1 3 import { cn } from "@/lib/utils"; 2 - import { Skeleton } from "../ui/skeleton"; 3 4 4 5 interface HeaderProps extends React.HTMLAttributes<HTMLDivElement> { 5 6 title: string;
+1 -1
apps/web/src/components/data-table/columns.tsx
··· 4 4 import { format } from "date-fns"; 5 5 6 6 import type { Ping } from "@openstatus/tinybird"; 7 + import { Badge } from "@openstatus/ui"; 7 8 8 - import { Badge } from "@/components/ui/badge"; 9 9 import { regionsDict } from "@/data/regions-dictionary"; 10 10 import { cn } from "@/lib/utils"; 11 11 import { DataTableColumnHeader } from "./data-table-column-header";
+3 -2
apps/web/src/components/data-table/data-table-column-header.tsx
··· 1 1 import type { Column } from "@tanstack/react-table"; 2 2 import { ChevronsUpDown, SortAsc, SortDesc } from "lucide-react"; 3 3 4 - import { Button } from "@/components/ui/button"; 5 4 import { 5 + Button, 6 6 DropdownMenu, 7 7 DropdownMenuContent, 8 8 DropdownMenuItem, 9 9 DropdownMenuTrigger, 10 - } from "@/components/ui/dropdown-menu"; 10 + } from "@openstatus/ui"; 11 + 11 12 import { cn } from "@/lib/utils"; 12 13 13 14 interface DataTableColumnHeaderProps<TData, TValue>
+4 -3
apps/web/src/components/data-table/data-table-date-ranger-picker.tsx
··· 6 6 import { Calendar as CalendarIcon } from "lucide-react"; 7 7 import type { DateRange } from "react-day-picker"; 8 8 9 - import { Button } from "@/components/ui/button"; 10 - import { Calendar } from "@/components/ui/calendar"; 11 9 import { 10 + Button, 11 + Calendar, 12 12 Popover, 13 13 PopoverContent, 14 14 PopoverTrigger, 15 - } from "@/components/ui/popover"; 15 + } from "@openstatus/ui"; 16 + 16 17 import useUpdateSearchParams from "@/hooks/use-update-search-params"; 17 18 import { cn } from "@/lib/utils"; 18 19
+5 -6
apps/web/src/components/data-table/data-table-faceted-filter.tsx
··· 2 2 import type { Column } from "@tanstack/react-table"; 3 3 import { Check, PlusCircle } from "lucide-react"; 4 4 5 - import { Badge } from "@/components/ui/badge"; 6 - import { Button } from "@/components/ui/button"; 7 5 import { 6 + Badge, 7 + Button, 8 8 Command, 9 9 CommandEmpty, 10 10 CommandGroup, ··· 12 12 CommandItem, 13 13 CommandList, 14 14 CommandSeparator, 15 - } from "@/components/ui/command"; 16 - import { 17 15 Popover, 18 16 PopoverContent, 19 17 PopoverTrigger, 20 - } from "@/components/ui/popover"; 21 - import { Separator } from "@/components/ui/separator"; 18 + Separator, 19 + } from "@openstatus/ui"; 20 + 22 21 import { cn } from "@/lib/utils"; 23 22 24 23 interface DataTableFacetedFilter<TData, TValue> {
+1 -1
apps/web/src/components/data-table/data-table-filter-input.tsx
··· 2 2 3 3 import type { Table } from "@tanstack/react-table"; 4 4 5 - import { Input } from "@/components/ui/input"; 5 + import { Input } from "@openstatus/ui"; 6 6 7 7 interface DataTableFilterInputProps<TData> { 8 8 table: Table<TData>;
+2 -2
apps/web/src/components/data-table/data-table-pagination.tsx
··· 6 6 ChevronsRight, 7 7 } from "lucide-react"; 8 8 9 - import { Button } from "@/components/ui/button"; 10 9 import { 10 + Button, 11 11 Select, 12 12 SelectContent, 13 13 SelectItem, 14 14 SelectTrigger, 15 15 SelectValue, 16 - } from "@/components/ui/select"; 16 + } from "@openstatus/ui"; 17 17 18 18 interface DataTablePaginationProps<TData> { 19 19 table: Table<TData>;
+2 -5
apps/web/src/components/data-table/data-table-row-action.tsx
··· 5 5 import * as z from "zod"; 6 6 7 7 import { tbBuildResponseList } from "@openstatus/tinybird"; 8 - 9 - import { Button } from "@/components/ui/button"; 10 8 import { 9 + Button, 11 10 Dialog, 12 11 DialogContent, 13 12 DialogDescription, 14 13 DialogHeader, 15 14 DialogTitle, 16 15 DialogTrigger, 17 - } from "@/components/ui/dialog"; 18 - import { 19 16 DropdownMenu, 20 17 DropdownMenuContent, 21 18 DropdownMenuItem, 22 19 DropdownMenuLabel, 23 20 DropdownMenuTrigger, 24 - } from "@/components/ui/dropdown-menu"; 21 + } from "@openstatus/ui"; 25 22 26 23 // REMINDER: needed because `ResponseList` returns metadata as string, not as Record 27 24 const schema = tbBuildResponseList.extend({
+2 -1
apps/web/src/components/data-table/data-table-toolbar.tsx
··· 3 3 import type { Table } from "@tanstack/react-table"; 4 4 import { X } from "lucide-react"; 5 5 6 - import { Button } from "@/components/ui/button"; 6 + import { Button } from "@openstatus/ui"; 7 + 7 8 import { regionsDict } from "@/data/regions-dictionary"; 8 9 import { DataTableDateRangePicker } from "./data-table-date-ranger-picker"; 9 10 import { DataTableFacetedFilter } from "./data-table-faceted-filter";
+2 -1
apps/web/src/components/data-table/data-table.tsx
··· 22 22 TableHead, 23 23 TableHeader, 24 24 TableRow, 25 - } from "@/components/ui/table"; 25 + } from "@openstatus/ui"; 26 + 26 27 import { DataTablePagination } from "./data-table-pagination"; 27 28 import { DataTableToolbar } from "./data-table-toolbar"; 28 29
+1 -1
apps/web/src/components/domains/domain-configuration.tsx
··· 6 6 DomainResponse, 7 7 DomainVerificationStatusProps, 8 8 } from "@openstatus/api/src/router/domain"; 9 + import { Tabs, TabsContent, TabsList, TabsTrigger } from "@openstatus/ui"; 9 10 10 - import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; 11 11 import { useDomainStatus } from "@/hooks/use-domain-status"; 12 12 import { getSubdomain } from "@/lib/domains"; 13 13 import { cn } from "@/lib/utils";
+5 -8
apps/web/src/components/forms/advanced-monitor-form.tsx
··· 7 7 import { useFieldArray, useForm } from "react-hook-form"; 8 8 import * as z from "zod"; 9 9 10 - import { Button } from "@/components/ui/button"; 11 10 import { 11 + Button, 12 12 Form, 13 13 FormControl, 14 14 FormDescription, ··· 16 16 FormItem, 17 17 FormLabel, 18 18 FormMessage, 19 - } from "@/components/ui/form"; 20 - import { Input } from "@/components/ui/input"; 21 - import { 19 + Input, 22 20 Select, 23 21 SelectContent, 24 22 SelectItem, 25 23 SelectTrigger, 26 24 SelectValue, 27 - } from "@/components/ui/select"; 28 - import { Textarea } from "@/components/ui/textarea"; 29 - import { 25 + Textarea, 30 26 Tooltip, 31 27 TooltipContent, 32 28 TooltipProvider, 33 29 TooltipTrigger, 34 - } from "@/components/ui/tooltip"; 30 + } from "@openstatus/ui"; 31 + 35 32 import { useToastAction } from "@/hooks/use-toast-action"; 36 33 import { api } from "@/trpc/client"; 37 34 import { LoadingAnimation } from "../loading-animation";
+4 -4
apps/web/src/components/forms/custom-domain-form.tsx
··· 7 7 import type * as z from "zod"; 8 8 9 9 import { insertPageSchemaWithMonitors } from "@openstatus/db/src/schema"; 10 - 11 - import { Button } from "@/components/ui/button"; 12 10 import { 11 + Button, 13 12 Form, 14 13 FormControl, 15 14 FormDescription, ··· 17 16 FormItem, 18 17 FormLabel, 19 18 FormMessage, 20 - } from "@/components/ui/form"; 19 + InputWithAddons, 20 + } from "@openstatus/ui"; 21 + 21 22 import { useDomainStatus } from "@/hooks/use-domain-status"; 22 23 import { useToastAction } from "@/hooks/use-toast-action"; 23 24 import { api } from "@/trpc/client"; 24 25 import DomainConfiguration from "../domains/domain-configuration"; 25 26 import DomainStatusIcon from "../domains/domain-status-icon"; 26 27 import { LoadingAnimation } from "../loading-animation"; 27 - import { InputWithAddons } from "../ui/input-with-addons"; 28 28 29 29 const customDomain = insertPageSchemaWithMonitors.pick({ 30 30 customDomain: true,
+16 -12
apps/web/src/components/forms/incident-form.tsx
··· 12 12 insertIncidentSchema, 13 13 StatusEnum, 14 14 } from "@openstatus/db/src/schema"; 15 - 16 - import { Preview } from "@/components/content/preview"; 17 - import { Icons } from "@/components/icons"; 18 - import { LoadingAnimation } from "@/components/loading-animation"; 19 - import { Button } from "@/components/ui/button"; 20 - import { Checkbox } from "@/components/ui/checkbox"; 21 - import { DateTimePicker } from "@/components/ui/date-time-picker"; 22 15 import { 16 + Button, 17 + Checkbox, 18 + DateTimePicker, 23 19 Form, 24 20 FormControl, 25 21 FormDescription, ··· 27 23 FormItem, 28 24 FormLabel, 29 25 FormMessage, 30 - } from "@/components/ui/form"; 31 - import { Input } from "@/components/ui/input"; 32 - import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; 33 - import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; 34 - import { Textarea } from "@/components/ui/textarea"; 26 + Input, 27 + RadioGroup, 28 + RadioGroupItem, 29 + Tabs, 30 + TabsContent, 31 + TabsList, 32 + TabsTrigger, 33 + Textarea, 34 + } from "@openstatus/ui"; 35 + 36 + import { Preview } from "@/components/content/preview"; 37 + import { Icons } from "@/components/icons"; 38 + import { LoadingAnimation } from "@/components/loading-animation"; 35 39 import { statusDict } from "@/data/incidents-dictionary"; 36 40 import { useToastAction } from "@/hooks/use-toast-action"; 37 41 import { cn } from "@/lib/utils";
+14 -10
apps/web/src/components/forms/incident-update-form.tsx
··· 11 11 insertIncidentUpdateSchema, 12 12 StatusEnum, 13 13 } from "@openstatus/db/src/schema"; 14 - 15 - import { Preview } from "@/components/content/preview"; 16 - import { Icons } from "@/components/icons"; 17 - import { LoadingAnimation } from "@/components/loading-animation"; 18 - import { Button } from "@/components/ui/button"; 19 - import { DateTimePicker } from "@/components/ui/date-time-picker"; 20 14 import { 15 + Button, 16 + DateTimePicker, 21 17 Form, 22 18 FormControl, 23 19 FormDescription, ··· 25 21 FormItem, 26 22 FormLabel, 27 23 FormMessage, 28 - } from "@/components/ui/form"; 29 - import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; 30 - import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; 31 - import { Textarea } from "@/components/ui/textarea"; 24 + RadioGroup, 25 + RadioGroupItem, 26 + Tabs, 27 + TabsContent, 28 + TabsList, 29 + TabsTrigger, 30 + Textarea, 31 + } from "@openstatus/ui"; 32 + 33 + import { Preview } from "@/components/content/preview"; 34 + import { Icons } from "@/components/icons"; 35 + import { LoadingAnimation } from "@/components/loading-animation"; 32 36 import { statusDict } from "@/data/incidents-dictionary"; 33 37 import { useToastAction } from "@/hooks/use-toast-action"; 34 38 import { api } from "@/trpc/client";
+7 -15
apps/web/src/components/forms/montitor-form.tsx
··· 13 13 periodicityEnum, 14 14 } from "@openstatus/db/src/schema"; 15 15 import { allPlans } from "@openstatus/plans"; 16 - 17 - import { Button } from "@/components/ui/button"; 18 16 import { 17 + Button, 19 18 Command, 20 19 CommandEmpty, 21 20 CommandGroup, 22 21 CommandInput, 23 22 CommandItem, 24 - } from "@/components/ui/command"; 25 - import { 26 23 Form, 27 24 FormControl, 28 25 FormDescription, ··· 30 27 FormItem, 31 28 FormLabel, 32 29 FormMessage, 33 - } from "@/components/ui/form"; 34 - import { Input } from "@/components/ui/input"; 35 - import { 30 + Input, 36 31 Popover, 37 32 PopoverContent, 38 33 PopoverTrigger, 39 - } from "@/components/ui/popover"; 40 - import { 41 34 Select, 42 35 SelectContent, 43 36 SelectItem, 44 37 SelectTrigger, 45 38 SelectValue, 46 - } from "@/components/ui/select"; 47 - import { Switch } from "@/components/ui/switch"; 48 - import { Textarea } from "@/components/ui/textarea"; 49 - import { 39 + Switch, 40 + Textarea, 41 + toast, 50 42 Tooltip, 51 43 TooltipContent, 52 44 TooltipProvider, 53 45 TooltipTrigger, 54 - } from "@/components/ui/tooltip"; 46 + } from "@openstatus/ui"; 47 + 55 48 import { regionsDict } from "@/data/regions-dictionary"; 56 49 import { useToastAction } from "@/hooks/use-toast-action"; 57 50 import useUpdateSearchParams from "@/hooks/use-update-search-params"; 58 51 import { cn } from "@/lib/utils"; 59 52 import { api } from "@/trpc/client"; 60 53 import { LoadingAnimation } from "../loading-animation"; 61 - import { InputWithAddons } from "../ui/input-with-addons"; 62 54 63 55 const cronJobs = [ 64 56 { value: "1m", label: "1 minute" },
+1 -1
apps/web/src/components/forms/skeleton-form.tsx
··· 1 - import { Skeleton } from "@/components/ui/skeleton"; 1 + import { Skeleton } from "@openstatus/ui"; 2 2 3 3 export function SkeletonForm() { 4 4 return (
+6 -6
apps/web/src/components/forms/status-page-form.tsx
··· 11 11 12 12 import type { allMonitorsExtendedSchema } from "@openstatus/db/src/schema"; 13 13 import { insertPageSchemaWithMonitors } from "@openstatus/db/src/schema"; 14 - 15 - import { Button } from "@/components/ui/button"; 16 - import { Checkbox } from "@/components/ui/checkbox"; 17 14 import { 15 + Button, 16 + Checkbox, 18 17 Form, 19 18 FormControl, 20 19 FormDescription, ··· 22 21 FormItem, 23 22 FormLabel, 24 23 FormMessage, 25 - } from "@/components/ui/form"; 26 - import { Input } from "@/components/ui/input"; 27 - import { InputWithAddons } from "@/components/ui/input-with-addons"; 24 + Input, 25 + InputWithAddons, 26 + } from "@openstatus/ui"; 27 + 28 28 import { useDebounce } from "@/hooks/use-debounce"; 29 29 import { useToastAction } from "@/hooks/use-toast-action"; 30 30 import useUpdateSearchParams from "@/hooks/use-update-search-params";
+1 -2
apps/web/src/components/incidents/affected-monitors.tsx
··· 1 1 import type * as z from "zod"; 2 2 3 3 import type { selectPublicMonitorSchema } from "@openstatus/db/src/schema"; 4 - 5 - import { Badge } from "../ui/badge"; 4 + import { Badge } from "@openstatus/ui"; 6 5 7 6 export function AffectedMonitors({ 8 7 monitors,
+4 -4
apps/web/src/components/incidents/events.tsx
··· 6 6 import type * as z from "zod"; 7 7 8 8 import type { selectIncidentUpdateSchema } from "@openstatus/db/src/schema"; 9 - 10 - import { Icons } from "@/components/icons"; 11 - import { Button } from "@/components/ui/button"; 12 9 import { 10 + Button, 13 11 Tooltip, 14 12 TooltipContent, 15 13 TooltipProvider, 16 14 TooltipTrigger, 17 - } from "@/components/ui/tooltip"; 15 + } from "@openstatus/ui"; 16 + 17 + import { Icons } from "@/components/icons"; 18 18 import { statusDict } from "@/data/incidents-dictionary"; 19 19 import { useProcessor } from "@/hooks/use-preprocessor"; 20 20 import { cn } from "@/lib/utils";
+2 -1
apps/web/src/components/incidents/status-badge.tsx
··· 1 + import { Badge } from "@openstatus/ui"; 2 + 1 3 import { statusDict } from "@/data/incidents-dictionary"; 2 4 import { cn } from "@/lib/utils"; 3 5 import { Icons } from "../icons"; 4 - import { Badge } from "../ui/badge"; 5 6 6 7 export function StatusBadge({ status }: { status: keyof typeof statusDict }) { 7 8 const { label, icon } = statusDict[status];
+2 -2
apps/web/src/components/layout/app-header.tsx
··· 3 3 import Link from "next/link"; 4 4 import { UserButton, useUser } from "@clerk/nextjs"; 5 5 6 + import { Button, Skeleton } from "@openstatus/ui"; 7 + 6 8 import { socialsConfig } from "@/config/socials"; 7 9 import { Shell } from "../dashboard/shell"; 8 10 import { Icons } from "../icons"; 9 - import { Button } from "../ui/button"; 10 - import { Skeleton } from "../ui/skeleton"; 11 11 12 12 /** 13 13 * TODO: work on a better breadcrumb navigation like Vercel
+3 -2
apps/web/src/components/layout/app-menu.tsx
··· 4 4 import { usePathname, useSearchParams } from "next/navigation"; 5 5 import { Menu } from "lucide-react"; 6 6 7 - import { Button } from "../ui/button"; 8 7 import { 8 + Button, 9 9 Sheet, 10 10 SheetContent, 11 11 SheetHeader, 12 12 SheetTitle, 13 13 SheetTrigger, 14 - } from "../ui/sheet"; 14 + } from "@openstatus/ui"; 15 + 15 16 import { AppSidebar } from "./app-sidebar"; 16 17 17 18 export function AppMenu() {
+1 -1
apps/web/src/components/layout/back-button.tsx
··· 2 2 import Link from "next/link"; 3 3 import { ChevronLeft } from "lucide-react"; 4 4 5 - import { Button } from "../ui/button"; 5 + import { Button } from "@openstatus/ui"; 6 6 7 7 interface BackButtonProps extends LinkProps { 8 8 children?: React.ReactNode;
+1 -1
apps/web/src/components/layout/brand-name.tsx
··· 6 6 ContextMenuContent, 7 7 ContextMenuItem, 8 8 ContextMenuTrigger, 9 - } from "@/components/ui/context-menu"; 9 + } from "@openstatus/ui"; 10 10 11 11 export function BrandName() { 12 12 return (
+2 -1
apps/web/src/components/layout/marketing-header.tsx
··· 3 3 import Link from "next/link"; 4 4 import { useUser } from "@clerk/nextjs"; 5 5 6 - import { Button } from "@/components/ui/button"; 6 + import { Button } from "@openstatus/ui"; 7 + 7 8 import { cn } from "@/lib/utils"; 8 9 import { BrandName } from "./brand-name"; 9 10
+1 -1
apps/web/src/components/layout/skeleton-tabs.tsx
··· 1 - import { Skeleton } from "@/components/ui/skeleton"; 1 + import { Skeleton } from "@openstatus/ui"; 2 2 3 3 interface SkeletonTabsProps { 4 4 children?: React.ReactNode;
+2 -1
apps/web/src/components/marketing/cards.tsx
··· 1 + import { Badge } from "@openstatus/ui"; 2 + 1 3 import { Shell } from "../dashboard/shell"; 2 4 import { Icons } from "../icons"; 3 5 import type { ValidIcon } from "../icons"; 4 - import { Badge } from "../ui/badge"; 5 6 6 7 const cardConfig: { 7 8 icon: ValidIcon;
+1 -1
apps/web/src/components/marketing/faqs.tsx
··· 3 3 AccordionContent, 4 4 AccordionItem, 5 5 AccordionTrigger, 6 - } from "@/components/ui/accordion"; 6 + } from "@openstatus/ui"; 7 7 8 8 // REMINDER: we can create a contentlayer document and the faq into it 9 9 const faqsConfig: Record<"q" | "a", string>[] = [
+2 -1
apps/web/src/components/marketing/plans.tsx
··· 1 1 import Link from "next/link"; 2 2 import { Check } from "lucide-react"; 3 3 4 + import { Button } from "@openstatus/ui"; 5 + 4 6 import type { PlanProps } from "@/config/plans"; 5 7 import { plansConfig } from "@/config/plans"; 6 8 import { cn } from "@/lib/utils"; 7 9 import { Shell } from "../dashboard/shell"; 8 10 import { LoadingAnimation } from "../loading-animation"; 9 - import { Button } from "../ui/button"; 10 11 11 12 export function Plans() { 12 13 return (
+1 -1
apps/web/src/components/status-page/monitor-list.tsx
··· 2 2 import type { z } from "zod"; 3 3 4 4 import type { selectPublicMonitorSchema } from "@openstatus/db/src/schema"; 5 + import { Button } from "@openstatus/ui"; 5 6 6 7 import { EmptyState } from "../dashboard/empty-state"; 7 - import { Button } from "../ui/button"; 8 8 import { Monitor } from "./monitor"; 9 9 10 10 export const MonitorList = ({
+3 -5
apps/web/src/components/tracker.tsx
··· 7 7 import { Eye, Info } from "lucide-react"; 8 8 9 9 import type { Monitor } from "@openstatus/tinybird"; 10 - 11 10 import { 12 11 HoverCard, 13 12 HoverCardContent, 14 13 HoverCardTrigger, 15 - } from "@/components/ui/hover-card"; 16 - import { Separator } from "@/components/ui/separator"; 17 - import { 14 + Separator, 18 15 Tooltip, 19 16 TooltipContent, 20 17 TooltipProvider, 21 18 TooltipTrigger, 22 - } from "@/components/ui/tooltip"; 19 + } from "@openstatus/ui"; 20 + 23 21 import useWindowSize from "@/hooks/use-window-size"; 24 22 import { blacklistDates, getMonitorList, getStatus } from "@/lib/tracker"; 25 23
+1 -1
apps/web/src/components/ui/accordion.tsx packages/ui/src/components/accordion.tsx
··· 4 4 import * as AccordionPrimitive from "@radix-ui/react-accordion"; 5 5 import { ChevronDown } from "lucide-react"; 6 6 7 - import { cn } from "@/lib/utils"; 7 + import { cn } from "../lib/utils"; 8 8 9 9 const Accordion = AccordionPrimitive.Root; 10 10
+2 -2
apps/web/src/components/ui/alert-dialog.tsx packages/ui/src/components/alert-dialog.tsx
··· 3 3 import * as React from "react"; 4 4 import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; 5 5 6 - import { buttonVariants } from "@/components/ui/button"; 7 - import { cn } from "@/lib/utils"; 6 + import { buttonVariants } from "../components/button"; 7 + import { cn } from "../lib/utils"; 8 8 9 9 const AlertDialog = AlertDialogPrimitive.Root; 10 10
+1 -1
apps/web/src/components/ui/alert.tsx packages/ui/src/components/alert.tsx
··· 2 2 import { cva } from "class-variance-authority"; 3 3 import type { VariantProps } from "class-variance-authority"; 4 4 5 - import { cn } from "@/lib/utils"; 5 + import { cn } from "../lib/utils"; 6 6 7 7 const alertVariants = cva( 8 8 "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
-473
apps/web/src/components/ui/auto-form.tsx
··· 1 - "use client"; 2 - 3 - import React from "react"; 4 - import { zodResolver } from "@hookform/resolvers/zod"; 5 - import type { 6 - ControllerRenderProps, 7 - DefaultValues, 8 - FieldValues, 9 - } from "react-hook-form"; 10 - import { useForm } from "react-hook-form"; 11 - import type { z } from "zod"; 12 - 13 - import { 14 - Select, 15 - SelectContent, 16 - SelectItem, 17 - SelectTrigger, 18 - SelectValue, 19 - } from "@/components/ui/select"; 20 - import { cn } from "@/lib/utils"; 21 - import { Button } from "./button"; 22 - import { Checkbox } from "./checkbox"; 23 - import { DatePicker } from "./date-picker"; 24 - import { 25 - Form, 26 - FormControl, 27 - FormDescription, 28 - FormField, 29 - FormItem, 30 - FormLabel, 31 - FormMessage, 32 - } from "./form"; 33 - import { Input } from "./input"; 34 - import { Switch } from "./switch"; 35 - 36 - /** 37 - * Beautify a camelCase string. 38 - * e.g. "myString" -> "My String" 39 - */ 40 - function beautifyObjectName(string: string) { 41 - let output = string.replace(/([A-Z])/g, " $1"); 42 - output = output.charAt(0).toUpperCase() + output.slice(1); 43 - return output; 44 - } 45 - 46 - /** 47 - * Get the type name of the lowest level Zod type. 48 - * This will unpack optionals, refinements, etc. 49 - */ 50 - function getBaseType(schema: z.ZodAny): string { 51 - if ("innerType" in schema._def) { 52 - return getBaseType(schema._def.innerType as z.ZodAny); 53 - } 54 - if ("schema" in schema._def) { 55 - return getBaseType(schema._def.schema as z.ZodAny); 56 - } 57 - return schema._def.typeName; 58 - } 59 - 60 - /** 61 - * Search for a "ZodDefult" in the Zod stack and return its value. 62 - */ 63 - function getDefaultValueInZodStack(schema: z.ZodAny): any { 64 - const typedSchema = schema as unknown as z.ZodDefault< 65 - z.ZodNumber | z.ZodString 66 - >; 67 - 68 - if (typedSchema._def.typeName === "ZodDefault") { 69 - return typedSchema._def.defaultValue(); 70 - } 71 - 72 - if ("innerType" in typedSchema._def) { 73 - return getDefaultValueInZodStack( 74 - typedSchema._def.innerType as unknown as z.ZodAny, 75 - ); 76 - } 77 - if ("schema" in typedSchema._def) { 78 - return getDefaultValueInZodStack( 79 - (typedSchema._def as any).schema as z.ZodAny, 80 - ); 81 - } 82 - return undefined; 83 - } 84 - 85 - /** 86 - * Get all default values from a Zod schema. 87 - */ 88 - function getDefaultValues<Schema extends z.ZodObject<any, any>>( 89 - schema: Schema, 90 - ) { 91 - const { shape } = schema; 92 - type DefaultValuesType = DefaultValues<Partial<z.infer<Schema>>>; 93 - const defaultValues = {} as DefaultValuesType; 94 - 95 - for (const key of Object.keys(shape)) { 96 - const item = shape[key] as z.ZodAny; 97 - const defaultValue = getDefaultValueInZodStack(item); 98 - if (defaultValue !== undefined) { 99 - defaultValues[key as keyof DefaultValuesType] = defaultValue; 100 - } 101 - } 102 - 103 - return defaultValues; 104 - } 105 - 106 - /** 107 - * Convert a Zod schema to HTML input props to give direct feedback to the user. 108 - * Once submitted, the schema will be validated completely. 109 - */ 110 - function zodToHtmlInputProps( 111 - schema: 112 - | z.ZodNumber 113 - | z.ZodString 114 - | z.ZodOptional<z.ZodNumber | z.ZodString> 115 - | any, 116 - ): React.InputHTMLAttributes<HTMLInputElement> { 117 - if (["ZodOptional", "ZodNullable"].includes(schema._def.typeName)) { 118 - const typedSchema = schema as z.ZodOptional<z.ZodNumber | z.ZodString>; 119 - return { 120 - ...zodToHtmlInputProps(typedSchema._def.innerType), 121 - required: false, 122 - }; 123 - } 124 - 125 - const typedSchema = schema as z.ZodNumber | z.ZodString; 126 - 127 - if (!("checks" in typedSchema._def)) return {}; 128 - 129 - const { checks } = typedSchema._def; 130 - const inputProps: React.InputHTMLAttributes<HTMLInputElement> = { 131 - required: true, 132 - }; 133 - const type = getBaseType(schema); 134 - 135 - for (const check of checks) { 136 - if (check.kind === "min") { 137 - if (type === "ZodString") { 138 - inputProps.minLength = check.value; 139 - } else { 140 - inputProps.min = check.value; 141 - } 142 - } 143 - if (check.kind === "max") { 144 - if (type === "ZodString") { 145 - inputProps.maxLength = check.value; 146 - } else { 147 - inputProps.max = check.value; 148 - } 149 - } 150 - } 151 - 152 - return inputProps; 153 - } 154 - 155 - export type FieldConfigItem = { 156 - description?: React.ReactNode; 157 - inputProps?: React.InputHTMLAttributes<HTMLInputElement>; 158 - fieldType?: keyof typeof INPUT_COMPONENTS; 159 - 160 - startAdornment?: React.ReactNode; 161 - endAdornment?: React.ReactNode; 162 - }; 163 - 164 - export type FieldConfig<SchemaType extends z.infer<z.ZodObject<any, any>>> = { 165 - [key in keyof SchemaType]?: FieldConfigItem; 166 - }; 167 - 168 - /** 169 - * A FormInput component can handle a specific Zod type (e.g. "ZodBoolean") 170 - */ 171 - type AutoFormInputComponentProps = { 172 - zodInputProps: React.InputHTMLAttributes<HTMLInputElement>; 173 - field: ControllerRenderProps<FieldValues, any>; 174 - fieldConfigItem: FieldConfigItem; 175 - label: string; 176 - isRequired: boolean; 177 - fieldProps: any; 178 - zodItem: z.ZodAny; 179 - }; 180 - 181 - function AutoFormInput({ 182 - label, 183 - isRequired, 184 - fieldConfigItem, 185 - fieldProps, 186 - }: AutoFormInputComponentProps) { 187 - return ( 188 - <FormItem> 189 - <FormLabel> 190 - {label} 191 - {isRequired && <span className="text-destructive"> *</span>} 192 - </FormLabel> 193 - <FormControl> 194 - <Input type="text" {...fieldProps} /> 195 - </FormControl> 196 - {fieldConfigItem.description && ( 197 - <FormDescription>{fieldConfigItem.description}</FormDescription> 198 - )} 199 - <FormMessage /> 200 - </FormItem> 201 - ); 202 - } 203 - 204 - function AutoFormCheckbox({ 205 - label, 206 - isRequired, 207 - field, 208 - fieldConfigItem, 209 - fieldProps, 210 - }: AutoFormInputComponentProps) { 211 - return ( 212 - <FormItem className="flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4"> 213 - <FormControl> 214 - <Checkbox 215 - checked={field.value} 216 - onCheckedChange={field.onChange} 217 - {...fieldProps} 218 - /> 219 - </FormControl> 220 - <div className="space-y-1 leading-none"> 221 - <FormLabel> 222 - {label} 223 - {isRequired && <span className="text-destructive"> *</span>} 224 - </FormLabel> 225 - {fieldConfigItem.description && ( 226 - <FormDescription>{fieldConfigItem.description}</FormDescription> 227 - )} 228 - </div> 229 - </FormItem> 230 - ); 231 - } 232 - 233 - function AutoFormSwitch({ 234 - label, 235 - isRequired, 236 - field, 237 - fieldConfigItem, 238 - fieldProps, 239 - }: AutoFormInputComponentProps) { 240 - return ( 241 - <FormItem className="flex flex-row items-start space-x-3 space-y-0 rounded-md border p-4"> 242 - <FormControl> 243 - <Switch 244 - checked={field.value} 245 - onCheckedChange={field.onChange} 246 - {...fieldProps} 247 - /> 248 - </FormControl> 249 - <div className="space-y-1 leading-none"> 250 - <FormLabel> 251 - {label} 252 - {isRequired && <span className="text-destructive"> *</span>} 253 - </FormLabel> 254 - {fieldConfigItem.description && ( 255 - <FormDescription>{fieldConfigItem.description}</FormDescription> 256 - )} 257 - </div> 258 - </FormItem> 259 - ); 260 - } 261 - 262 - function AutoFormDate({ 263 - label, 264 - isRequired, 265 - field, 266 - fieldConfigItem, 267 - fieldProps, 268 - }: AutoFormInputComponentProps) { 269 - return ( 270 - <FormItem> 271 - <FormLabel> 272 - {label} 273 - {isRequired && <span className="text-destructive"> *</span>} 274 - </FormLabel> 275 - <FormControl> 276 - <DatePicker 277 - date={field.value} 278 - setDate={field.onChange} 279 - {...fieldProps} 280 - /> 281 - </FormControl> 282 - {fieldConfigItem.description && ( 283 - <FormDescription>{fieldConfigItem.description}</FormDescription> 284 - )} 285 - <FormMessage /> 286 - </FormItem> 287 - ); 288 - } 289 - 290 - function AutoFormEnum({ 291 - label, 292 - isRequired, 293 - field, 294 - fieldConfigItem, 295 - zodItem, 296 - }: AutoFormInputComponentProps) { 297 - const values = (zodItem as unknown as z.ZodEnum<any>)._def.values; 298 - 299 - return ( 300 - <FormItem> 301 - <FormLabel> 302 - {label} 303 - {isRequired && <span className="text-destructive"> *</span>} 304 - </FormLabel> 305 - <FormControl> 306 - <Select onValueChange={field.onChange} defaultValue={field.value}> 307 - <SelectTrigger> 308 - <SelectValue className="w-full"> 309 - {field.value ?? "Select an option"} 310 - </SelectValue> 311 - </SelectTrigger> 312 - <SelectContent> 313 - {values.map((value: any) => ( 314 - <SelectItem value={value} key={value}> 315 - {value} 316 - </SelectItem> 317 - ))} 318 - </SelectContent> 319 - </Select> 320 - </FormControl> 321 - {fieldConfigItem.description && ( 322 - <FormDescription>{fieldConfigItem.description}</FormDescription> 323 - )} 324 - <FormMessage /> 325 - </FormItem> 326 - ); 327 - } 328 - 329 - const INPUT_COMPONENTS = { 330 - checkbox: AutoFormCheckbox, 331 - date: AutoFormDate, 332 - select: AutoFormEnum, 333 - switch: AutoFormSwitch, 334 - fallback: AutoFormInput, 335 - }; 336 - 337 - /** 338 - * Define handlers for specific Zod types. 339 - * You can expand this object to support more types. 340 - */ 341 - const DEFAULT_ZOD_HANDLERS: { 342 - [key: string]: keyof typeof INPUT_COMPONENTS; 343 - } = { 344 - ZodBoolean: "checkbox", 345 - ZodDate: "date", 346 - ZodEnum: "select", 347 - }; 348 - 349 - function AutoFormObject<SchemaType extends z.ZodObject<any, any>>({ 350 - schema, 351 - form, 352 - fieldConfig, 353 - }: { 354 - schema: SchemaType; 355 - form: ReturnType<typeof useForm>; 356 - fieldConfig?: FieldConfig<z.infer<SchemaType>>; 357 - }) { 358 - const { shape } = schema; 359 - 360 - return ( 361 - <> 362 - {Object.keys(shape).map((name) => { 363 - const item = shape[name] as z.ZodAny; 364 - const fieldConfigItem = fieldConfig?.[name] ?? {}; 365 - const zodInputProps = zodToHtmlInputProps(item); 366 - const isRequired = 367 - zodInputProps.required ?? 368 - fieldConfigItem.inputProps?.required ?? 369 - false; 370 - const zodBaseType = getBaseType(item); 371 - 372 - return ( 373 - <FormField 374 - control={form.control} 375 - name={name} 376 - key={name} 377 - render={({ field }) => { 378 - const inputType = 379 - fieldConfigItem.fieldType ?? 380 - DEFAULT_ZOD_HANDLERS[zodBaseType] ?? 381 - "fallback"; 382 - const InputComponent = INPUT_COMPONENTS[inputType]; 383 - 384 - return ( 385 - <React.Fragment key={name}> 386 - {fieldConfigItem.startAdornment} 387 - <InputComponent 388 - zodInputProps={zodInputProps} 389 - field={field} 390 - fieldConfigItem={fieldConfigItem} 391 - label={item._def.description ?? beautifyObjectName(name)} 392 - isRequired={isRequired} 393 - zodItem={item} 394 - fieldProps={{ 395 - ...zodInputProps, 396 - ...field, 397 - ...fieldConfigItem.inputProps, 398 - }} 399 - /> 400 - {fieldConfigItem.endAdornment} 401 - </React.Fragment> 402 - ); 403 - }} 404 - /> 405 - ); 406 - })} 407 - </> 408 - ); 409 - } 410 - 411 - export function AutoFormSubmit({ children }: { children?: React.ReactNode }) { 412 - return <Button type="submit">{children ?? "Submit"}</Button>; 413 - } 414 - 415 - function AutoForm<SchemaType extends z.ZodObject<any, any>>({ 416 - formSchema, 417 - values: valuesProp, 418 - onValuesChange: onValuesChangeProp, 419 - onSubmit: onSubmitProp, 420 - fieldConfig, 421 - children, 422 - className, 423 - }: { 424 - formSchema: SchemaType; 425 - values?: Partial<z.infer<SchemaType>>; 426 - onValuesChange?: (values: Partial<z.infer<SchemaType>>) => void; 427 - onSubmit?: (values: z.infer<SchemaType>) => void; 428 - fieldConfig?: FieldConfig<z.infer<SchemaType>>; 429 - children?: React.ReactNode; 430 - className?: string; 431 - }) { 432 - const defaultValues: DefaultValues<z.infer<typeof formSchema>> = 433 - getDefaultValues(formSchema); 434 - 435 - const form = useForm<z.infer<typeof formSchema>>({ 436 - resolver: zodResolver(formSchema), 437 - defaultValues, 438 - values: valuesProp, 439 - }); 440 - 441 - function onSubmit(values: z.infer<typeof formSchema>) { 442 - const parsedValues = formSchema.safeParse(values); 443 - if (parsedValues.success) { 444 - onSubmitProp?.(parsedValues.data); 445 - } 446 - } 447 - 448 - return ( 449 - <Form {...form}> 450 - <form 451 - onSubmit={form.handleSubmit(onSubmit)} 452 - onChange={() => { 453 - const values = form.getValues(); 454 - const parsedValues = formSchema.safeParse(values); 455 - if (parsedValues.success) { 456 - onValuesChangeProp?.(parsedValues.data); 457 - } 458 - }} 459 - className={cn("space-y-5", className)} 460 - > 461 - <AutoFormObject 462 - schema={formSchema} 463 - form={form} 464 - fieldConfig={fieldConfig} 465 - /> 466 - 467 - {children} 468 - </form> 469 - </Form> 470 - ); 471 - } 472 - 473 - export default AutoForm;
+1 -1
apps/web/src/components/ui/avatar.tsx packages/ui/src/components/avatar.tsx
··· 3 3 import * as React from "react"; 4 4 import * as AvatarPrimitive from "@radix-ui/react-avatar"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const Avatar = React.forwardRef< 9 9 React.ElementRef<typeof AvatarPrimitive.Root>,
+1 -1
apps/web/src/components/ui/badge.tsx packages/ui/src/components/badge.tsx
··· 2 2 import { cva } from "class-variance-authority"; 3 3 import type { VariantProps } from "class-variance-authority"; 4 4 5 - import { cn } from "@/lib/utils"; 5 + import { cn } from "../lib/utils"; 6 6 7 7 const badgeVariants = cva( 8 8 "inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
+1 -1
apps/web/src/components/ui/button-with-disable-tooltip.tsx packages/ui/src/components/button-with-disable-tooltip.tsx
··· 1 - import { cn } from "@/lib/utils"; 1 + import { cn } from "../lib/utils"; 2 2 import { Button } from "./button"; 3 3 import type { ButtonProps } from "./button"; 4 4 import {
+1 -1
apps/web/src/components/ui/button.tsx packages/ui/src/components/button.tsx
··· 3 3 import { cva } from "class-variance-authority"; 4 4 import type { VariantProps } from "class-variance-authority"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const buttonVariants = cva( 9 9 "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
+2 -2
apps/web/src/components/ui/calendar.tsx packages/ui/src/components/calendar.tsx
··· 4 4 import { ChevronLeft, ChevronRight } from "lucide-react"; 5 5 import { DayPicker } from "react-day-picker"; 6 6 7 - import { buttonVariants } from "@/components/ui/button"; 8 - import { cn } from "@/lib/utils"; 7 + import { buttonVariants } from "../components/button"; 8 + import { cn } from "../lib/utils"; 9 9 10 10 export type CalendarProps = React.ComponentProps<typeof DayPicker>; 11 11
+1 -1
apps/web/src/components/ui/card.tsx packages/ui/src/components/card.tsx
··· 1 1 import * as React from "react"; 2 2 3 - import { cn } from "@/lib/utils"; 3 + import { cn } from "../lib/utils"; 4 4 5 5 const Card = React.forwardRef< 6 6 HTMLDivElement,
+3 -1
apps/web/src/components/ui/checkbox.tsx packages/ui/src/components/checkbox.tsx
··· 1 + "use client"; 2 + 1 3 import * as React from "react"; 2 4 import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; 3 5 import { Check } from "lucide-react"; 4 6 5 - import { cn } from "@/lib/utils"; 7 + import { cn } from "../lib/utils"; 6 8 7 9 const Checkbox = React.forwardRef< 8 10 React.ElementRef<typeof CheckboxPrimitive.Root>,
+2 -2
apps/web/src/components/ui/command.tsx packages/ui/src/components/command.tsx
··· 5 5 import { Command as CommandPrimitive } from "cmdk"; 6 6 import { Search } from "lucide-react"; 7 7 8 - import { Dialog, DialogContent } from "@/components/ui/dialog"; 9 - import { cn } from "@/lib/utils"; 8 + import { cn } from "../lib/utils"; 9 + import { Dialog, DialogContent } from "./dialog"; 10 10 11 11 const Command = React.forwardRef< 12 12 React.ElementRef<typeof CommandPrimitive>,
+1 -1
apps/web/src/components/ui/context-menu.tsx packages/ui/src/components/context-menu.tsx
··· 4 4 import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"; 5 5 import { Check, ChevronRight, Circle } from "lucide-react"; 6 6 7 - import { cn } from "@/lib/utils"; 7 + import { cn } from "../lib/utils"; 8 8 9 9 const ContextMenu = ContextMenuPrimitive.Root; 10 10
+4 -8
apps/web/src/components/ui/date-picker.tsx packages/ui/src/components/date-picker.tsx
··· 3 3 import { format } from "date-fns"; 4 4 import { Calendar as CalendarIcon } from "lucide-react"; 5 5 6 - import { Button } from "@/components/ui/button"; 7 - import { Calendar } from "@/components/ui/calendar"; 8 - import { 9 - Popover, 10 - PopoverContent, 11 - PopoverTrigger, 12 - } from "@/components/ui/popover"; 13 - import { cn } from "@/lib/utils"; 6 + import { Button } from "../components/button"; 7 + import { Calendar } from "../components/calendar"; 8 + import { Popover, PopoverContent, PopoverTrigger } from "../components/popover"; 9 + import { cn } from "../lib/utils"; 14 10 15 11 export function DatePicker({ 16 12 date,
+6 -10
apps/web/src/components/ui/date-time-picker.tsx packages/ui/src/components/date-time-picker.tsx
··· 6 6 import { DateTime } from "luxon"; 7 7 import type { SelectSingleEventHandler } from "react-day-picker"; 8 8 9 - import { Button } from "@/components/ui/button"; 10 - import { Calendar } from "@/components/ui/calendar"; 11 - import { Input } from "@/components/ui/input"; 12 - import { Label } from "@/components/ui/label"; 13 - import { 14 - Popover, 15 - PopoverContent, 16 - PopoverTrigger, 17 - } from "@/components/ui/popover"; 18 - import { cn } from "@/lib/utils"; 9 + import { Button } from "../components/button"; 10 + import { Calendar } from "../components/calendar"; 11 + import { Input } from "../components/input"; 12 + import { Label } from "../components/label"; 13 + import { Popover, PopoverContent, PopoverTrigger } from "../components/popover"; 14 + import { cn } from "../lib/utils"; 19 15 20 16 interface DateTimePickerProps { 21 17 date: Date;
+1 -1
apps/web/src/components/ui/dialog.tsx packages/ui/src/components/dialog.tsx
··· 4 4 import * as DialogPrimitive from "@radix-ui/react-dialog"; 5 5 import { X } from "lucide-react"; 6 6 7 - import { cn } from "@/lib/utils"; 7 + import { cn } from "../lib/utils"; 8 8 9 9 const Dialog = DialogPrimitive.Root; 10 10
+1 -1
apps/web/src/components/ui/dropdown-menu.tsx packages/ui/src/components/dropdown-menu.tsx
··· 4 4 import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; 5 5 import { Check, ChevronRight, Circle } from "lucide-react"; 6 6 7 - import { cn } from "@/lib/utils"; 7 + import { cn } from "../lib/utils"; 8 8 9 9 const DropdownMenu = DropdownMenuPrimitive.Root; 10 10
+11 -9
apps/web/src/components/ui/form.tsx packages/ui/src/components/form.tsx
··· 1 - import * as React from "react"; 1 + "use client"; 2 + 3 + import React, { createContext, forwardRef, useContext, useId } from "react"; 2 4 import type * as LabelPrimitive from "@radix-ui/react-label"; 3 5 import { Slot } from "@radix-ui/react-slot"; 4 6 import type { ControllerProps, FieldPath, FieldValues } from "react-hook-form"; 5 7 import { Controller, FormProvider, useFormContext } from "react-hook-form"; 6 8 7 - import { Label } from "@/components/ui/label"; 8 - import { cn } from "@/lib/utils"; 9 + import { Label } from "../components/label"; 10 + import { cn } from "../lib/utils"; 9 11 10 12 const Form = FormProvider; 11 13 ··· 16 18 name: TName; 17 19 }; 18 20 19 - const FormFieldContext = React.createContext<FormFieldContextValue>( 21 + const FormFieldContext = createContext<FormFieldContextValue>( 20 22 {} as FormFieldContextValue, 21 23 ); 22 24 ··· 34 36 }; 35 37 36 38 const useFormField = () => { 37 - const fieldContext = React.useContext(FormFieldContext); 38 - const itemContext = React.useContext(FormItemContext); 39 + const fieldContext = useContext(FormFieldContext); 40 + const itemContext = useContext(FormItemContext); 39 41 const { getFieldState, formState } = useFormContext(); 40 42 41 43 const fieldState = getFieldState(fieldContext.name, formState); ··· 60 62 id: string; 61 63 }; 62 64 63 - const FormItemContext = React.createContext<FormItemContextValue>( 65 + const FormItemContext = createContext<FormItemContextValue>( 64 66 {} as FormItemContextValue, 65 67 ); 66 68 67 - const FormItem = React.forwardRef< 69 + const FormItem = forwardRef< 68 70 HTMLDivElement, 69 71 React.HTMLAttributes<HTMLDivElement> 70 72 >(({ className, ...props }, ref) => { 71 - const id = React.useId(); 73 + const id = useId(); 72 74 73 75 return ( 74 76 <FormItemContext.Provider value={{ id }}>
+1 -1
apps/web/src/components/ui/hover-card.tsx packages/ui/src/components/hover-card.tsx
··· 3 3 import * as React from "react"; 4 4 import * as HoverCardPrimitive from "@radix-ui/react-hover-card"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const HoverCard = HoverCardPrimitive.Root; 9 9
+1 -1
apps/web/src/components/ui/input-with-addons.tsx packages/ui/src/components/input-with-addons.tsx
··· 1 1 import * as React from "react"; 2 2 3 - import { cn } from "@/lib/utils"; 3 + import { cn } from "../lib/utils"; 4 4 5 5 export interface InputWithAddonsProps 6 6 extends React.InputHTMLAttributes<HTMLInputElement> {
+1 -1
apps/web/src/components/ui/input.tsx packages/ui/src/components/input.tsx
··· 1 1 import * as React from "react"; 2 2 3 - import { cn } from "@/lib/utils"; 3 + import { cn } from "../lib/utils"; 4 4 5 5 export type InputProps = React.InputHTMLAttributes<HTMLInputElement>; 6 6
+1 -1
apps/web/src/components/ui/label.tsx packages/ui/src/components/label.tsx
··· 7 7 import { cva } from "class-variance-authority"; 8 8 import type { VariantProps } from "class-variance-authority"; 9 9 10 - import { cn } from "@/lib/utils"; 10 + import { cn } from "../lib/utils"; 11 11 12 12 const labelVariants = cva( 13 13 "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
+1 -1
apps/web/src/components/ui/popover.tsx packages/ui/src/components/popover.tsx
··· 3 3 import * as React from "react"; 4 4 import * as PopoverPrimitive from "@radix-ui/react-popover"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const Popover = PopoverPrimitive.Root; 9 9
+1 -1
apps/web/src/components/ui/radio-group.tsx packages/ui/src/components/radio-group.tsx
··· 4 4 import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"; 5 5 import { Circle } from "lucide-react"; 6 6 7 - import { cn } from "@/lib/utils"; 7 + import { cn } from "../lib/utils"; 8 8 9 9 const RadioGroup = React.forwardRef< 10 10 React.ElementRef<typeof RadioGroupPrimitive.Root>,
+1 -1
apps/web/src/components/ui/select.tsx packages/ui/src/components/select.tsx
··· 4 4 import * as SelectPrimitive from "@radix-ui/react-select"; 5 5 import { Check, ChevronDown } from "lucide-react"; 6 6 7 - import { cn } from "@/lib/utils"; 7 + import { cn } from "../lib/utils"; 8 8 9 9 const Select = SelectPrimitive.Root; 10 10
+1 -1
apps/web/src/components/ui/separator.tsx packages/ui/src/components/separator.tsx
··· 3 3 import * as React from "react"; 4 4 import * as SeparatorPrimitive from "@radix-ui/react-separator"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const Separator = React.forwardRef< 9 9 React.ElementRef<typeof SeparatorPrimitive.Root>,
+1 -1
apps/web/src/components/ui/sheet.tsx packages/ui/src/components/sheet.tsx
··· 6 6 import type { VariantProps } from "class-variance-authority"; 7 7 import { X } from "lucide-react"; 8 8 9 - import { cn } from "@/lib/utils"; 9 + import { cn } from "../lib/utils"; 10 10 11 11 const Sheet = SheetPrimitive.Root; 12 12
+1 -1
apps/web/src/components/ui/skeleton.tsx packages/ui/src/components/skeleton.tsx
··· 1 - import { cn } from "@/lib/utils"; 1 + import { cn } from "../lib/utils"; 2 2 3 3 function Skeleton({ 4 4 className,
+1 -1
apps/web/src/components/ui/switch.tsx packages/ui/src/components/switch.tsx
··· 3 3 import * as React from "react"; 4 4 import * as SwitchPrimitives from "@radix-ui/react-switch"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const Switch = React.forwardRef< 9 9 React.ElementRef<typeof SwitchPrimitives.Root>,
+1 -1
apps/web/src/components/ui/table.tsx packages/ui/src/components/table.tsx
··· 1 1 import * as React from "react"; 2 2 3 - import { cn } from "@/lib/utils"; 3 + import { cn } from "../lib/utils"; 4 4 5 5 const Table = React.forwardRef< 6 6 HTMLTableElement,
+1 -1
apps/web/src/components/ui/tabs.tsx packages/ui/src/components/tabs.tsx
··· 3 3 import * as React from "react"; 4 4 import * as TabsPrimitive from "@radix-ui/react-tabs"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const Tabs = TabsPrimitive.Root; 9 9
+1 -1
apps/web/src/components/ui/textarea.tsx packages/ui/src/components/textarea.tsx
··· 1 1 import * as React from "react"; 2 2 3 - import { cn } from "@/lib/utils"; 3 + import { cn } from "../lib/utils"; 4 4 5 5 export type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>; 6 6
+3 -1
apps/web/src/components/ui/toast.tsx packages/ui/src/components/toast.tsx
··· 1 + "use client"; 2 + 1 3 import * as React from "react"; 2 4 import * as ToastPrimitives from "@radix-ui/react-toast"; 3 5 import { cva } from "class-variance-authority"; 4 6 import type { VariantProps } from "class-variance-authority"; 5 7 import { X } from "lucide-react"; 6 8 7 - import { cn } from "@/lib/utils"; 9 + import { cn } from "../lib/utils"; 8 10 9 11 const ToastProvider = ToastPrimitives.Provider; 10 12
+2 -2
apps/web/src/components/ui/toaster.tsx packages/ui/src/components/toaster.tsx
··· 7 7 ToastProvider, 8 8 ToastTitle, 9 9 ToastViewport, 10 - } from "@/components/ui/toast"; 11 - import { useToast } from "@/components/ui/use-toast"; 10 + } from "../components/toast"; 11 + import { useToast } from "../components/use-toast"; 12 12 13 13 export function Toaster() { 14 14 const { toasts } = useToast();
+1 -1
apps/web/src/components/ui/tooltip.tsx packages/ui/src/components/tooltip.tsx
··· 3 3 import * as React from "react"; 4 4 import * as TooltipPrimitive from "@radix-ui/react-tooltip"; 5 5 6 - import { cn } from "@/lib/utils"; 6 + import { cn } from "../lib/utils"; 7 7 8 8 const TooltipProvider = TooltipPrimitive.Provider; 9 9
+3 -3
apps/web/src/components/ui/use-toast.ts packages/ui/src/components/use-toast.ts
··· 1 1 // Inspired by react-hot-toast library 2 2 import * as React from "react"; 3 3 4 - import type { ToastActionElement, ToastProps } from "@/components/ui/toast"; 4 + import type { ToastActionElement, ToastProps } from "../components/toast"; 5 5 6 6 const TOAST_LIMIT = 1; 7 7 const TOAST_REMOVE_DELAY = 1000000; ··· 135 135 }); 136 136 } 137 137 138 - export type Toast = Omit<ToasterToast, "id">; 138 + export type ToastType = Omit<ToasterToast, "id">; 139 139 140 - function toast({ ...props }: Toast) { 140 + function toast({ ...props }: ToastType) { 141 141 const id = genId(); 142 142 143 143 const update = (props: ToasterToast) =>
+3 -4
apps/web/src/hooks/use-toast-action.tsx
··· 1 - import { Button } from "@/components/ui/button"; 2 - import { useToast } from "@/components/ui/use-toast"; 3 - import type { Toast } from "@/components/ui/use-toast"; 1 + import { Button, useToast } from "@openstatus/ui"; 2 + import type { ToastType } from "@openstatus/ui"; 4 3 5 4 const config = { 6 5 error: { ··· 30 29 "test-success": { 31 30 title: "Endpoint configuration passed.", 32 31 }, 33 - } as const satisfies Record<string, Toast>; 32 + } as const satisfies Record<string, ToastType>; 34 33 35 34 type ToastAction = keyof typeof config; 36 35
+1
apps/web/tailwind.config.ts
··· 7 7 "src/**/*.{ts,tsx}", 8 8 // for vercel integration 9 9 "../../packages/integrations/**/*.{ts,tsx}", 10 + "../../packages/ui/**/*.{ts,tsx}", 10 11 ], 11 12 theme: { 12 13 container: {
-7
packages/ui/Button.tsx
··· 1 - "use client"; 2 - 3 - import * as React from "react"; 4 - 5 - export const Button = () => { 6 - return <button onClick={() => alert("boop")}>Boop</button>; 7 - };
-5
packages/ui/Header.tsx
··· 1 - import * as React from "react"; 2 - 3 - export const Header = ({ text }: { text: string }) => { 4 - return <h1>{text}</h1>; 5 - };
-5
packages/ui/index.tsx
··· 1 - import * as React from "react"; 2 - 3 - // component exports 4 - export * from "./Button"; 5 - export * from "./Header";
+41 -9
packages/ui/package.json
··· 1 1 { 2 - "name": "ui", 2 + "name": "@openstatus/ui", 3 3 "version": "0.0.0", 4 - "main": "./index.tsx", 5 - "types": "./index.tsx", 4 + "main": "./src/index.tsx", 5 + "types": "./src/index.tsx", 6 6 "license": "MIT", 7 7 "scripts": { 8 - "lint": "eslint \"**/*.ts*\"", 9 - "generate:component": "turbo gen react-component" 8 + "lint": "eslint \"**/*.ts*\"" 10 9 }, 11 10 "devDependencies": { 12 - "@types/react": "18.2.16", 11 + "@openstatus/eslint-config": "workspace:*", 12 + "@openstatus/tsconfig": "workspace:*", 13 + "@types/luxon": "^3.3.1", 14 + "@types/node": "20.3.1", 15 + "@types/react": "18.2.12", 13 16 "@types/react-dom": "18.2.7", 14 17 "eslint": "8.45.0", 15 - "@openstatus/eslint-config": "workspace:*", 16 - "react": "18.2.0", 17 - "@openstatus/tsconfig": "workspace:*", 18 18 "typescript": "5.1.6" 19 + }, 20 + "dependencies": { 21 + "@hookform/resolvers": "3.1.1", 22 + "@radix-ui/react-accordion": "1.1.2", 23 + "@radix-ui/react-alert-dialog": "1.0.4", 24 + "@radix-ui/react-avatar": "^1.0.3", 25 + "@radix-ui/react-checkbox": "1.0.4", 26 + "@radix-ui/react-context-menu": "^2.1.4", 27 + "@radix-ui/react-dialog": "1.0.4", 28 + "@radix-ui/react-dropdown-menu": "2.0.5", 29 + "@radix-ui/react-hover-card": "1.0.6", 30 + "@radix-ui/react-label": "2.0.2", 31 + "@radix-ui/react-popover": "1.0.6", 32 + "@radix-ui/react-radio-group": "^1.1.3", 33 + "@radix-ui/react-select": "1.2.2", 34 + "@radix-ui/react-separator": "1.0.3", 35 + "@radix-ui/react-slot": "1.0.2", 36 + "@radix-ui/react-switch": "1.0.3", 37 + "@radix-ui/react-tabs": "1.0.4", 38 + "@radix-ui/react-toast": "1.1.4", 39 + "@radix-ui/react-tooltip": "1.0.6", 40 + "class-variance-authority": "0.6.0", 41 + "clsx": "1.2.1", 42 + "cmdk": "0.2.0", 43 + "date-fns": "2.30.0", 44 + "lucide-react": "0.244.0", 45 + "luxon": "3.3.0", 46 + "react": "18.2.0", 47 + "react-day-picker": "8.8.0", 48 + "react-hook-form": "7.45.1", 49 + "tailwind-merge": "1.13.2", 50 + "zod": "3.22.2" 19 51 } 20 52 }
+168
packages/ui/src/index.tsx
··· 1 + export { 2 + Accordion, 3 + AccordionItem, 4 + AccordionTrigger, 5 + AccordionContent, 6 + } from "./components/accordion"; 7 + export { Avatar, AvatarImage, AvatarFallback } from "./components/avatar"; 8 + export { 9 + AlertDialog, 10 + AlertDialogTrigger, 11 + AlertDialogContent, 12 + AlertDialogHeader, 13 + AlertDialogFooter, 14 + AlertDialogTitle, 15 + AlertDialogDescription, 16 + AlertDialogAction, 17 + AlertDialogCancel, 18 + } from "./components/alert-dialog"; 19 + export { Alert, AlertTitle, AlertDescription } from "./components/alert"; 20 + export { Badge, badgeVariants } from "./components/badge"; 21 + export { ButtonWithDisableTooltip } from "./components/button-with-disable-tooltip"; 22 + export { Button, buttonVariants } from "./components/button"; 23 + export { Calendar } from "./components/calendar"; 24 + export { 25 + Card, 26 + CardHeader, 27 + CardFooter, 28 + CardTitle, 29 + CardDescription, 30 + CardContent, 31 + } from "./components/card"; 32 + export { Checkbox } from "./components/checkbox"; 33 + export { 34 + Command, 35 + CommandDialog, 36 + CommandInput, 37 + CommandList, 38 + CommandEmpty, 39 + CommandGroup, 40 + CommandItem, 41 + CommandShortcut, 42 + CommandSeparator, 43 + } from "./components/command"; 44 + 45 + export { 46 + ContextMenu, 47 + ContextMenuTrigger, 48 + ContextMenuContent, 49 + ContextMenuItem, 50 + ContextMenuCheckboxItem, 51 + ContextMenuRadioItem, 52 + ContextMenuLabel, 53 + ContextMenuSeparator, 54 + ContextMenuShortcut, 55 + ContextMenuGroup, 56 + ContextMenuPortal, 57 + ContextMenuSub, 58 + ContextMenuSubContent, 59 + ContextMenuSubTrigger, 60 + ContextMenuRadioGroup, 61 + } from "./components/context-menu"; 62 + 63 + export { DatePicker } from "./components/date-picker"; 64 + export { 65 + Dialog, 66 + DialogTrigger, 67 + DialogContent, 68 + DialogHeader, 69 + DialogFooter, 70 + DialogTitle, 71 + DialogDescription, 72 + } from "./components/dialog"; 73 + export { 74 + DropdownMenu, 75 + DropdownMenuTrigger, 76 + DropdownMenuContent, 77 + DropdownMenuItem, 78 + DropdownMenuCheckboxItem, 79 + DropdownMenuRadioItem, 80 + DropdownMenuLabel, 81 + DropdownMenuSeparator, 82 + DropdownMenuShortcut, 83 + DropdownMenuGroup, 84 + DropdownMenuPortal, 85 + DropdownMenuSub, 86 + DropdownMenuSubContent, 87 + DropdownMenuSubTrigger, 88 + DropdownMenuRadioGroup, 89 + } from "./components/dropdown-menu"; 90 + 91 + export { 92 + useFormField, 93 + Form, 94 + FormItem, 95 + FormLabel, 96 + FormControl, 97 + FormDescription, 98 + FormMessage, 99 + FormField, 100 + } from "./components/form"; 101 + export { 102 + HoverCard, 103 + HoverCardTrigger, 104 + HoverCardContent, 105 + } from "./components/hover-card"; 106 + export { InputWithAddons } from "./components/input-with-addons"; 107 + export { Input } from "./components/input"; 108 + export { Label } from "./components/label"; 109 + export { Popover, PopoverTrigger, PopoverContent } from "./components/popover"; 110 + export { RadioGroup, RadioGroupItem } from "./components/radio-group"; 111 + export { 112 + Select, 113 + SelectGroup, 114 + SelectValue, 115 + SelectTrigger, 116 + SelectContent, 117 + SelectLabel, 118 + SelectItem, 119 + SelectSeparator, 120 + } from "./components/select"; 121 + export { Separator } from "./components/separator"; 122 + export { Skeleton } from "./components/skeleton"; 123 + export { Switch } from "./components/switch"; 124 + export { 125 + Table, 126 + TableHeader, 127 + TableBody, 128 + TableFooter, 129 + TableHead, 130 + TableRow, 131 + TableCell, 132 + TableCaption, 133 + } from "./components/table"; 134 + 135 + export { Textarea } from "./components/textarea"; 136 + export { 137 + type ToastProps, 138 + type ToastActionElement, 139 + ToastProvider, 140 + ToastViewport, 141 + Toast, 142 + ToastTitle, 143 + ToastDescription, 144 + ToastClose, 145 + ToastAction, 146 + } from "./components/toast"; 147 + export { Toaster } from "./components/toaster"; 148 + export { toast, useToast } from "./components/use-toast"; 149 + export { 150 + Tooltip, 151 + TooltipTrigger, 152 + TooltipContent, 153 + TooltipProvider, 154 + } from "./components/tooltip"; 155 + export { Tabs, TabsList, TabsTrigger, TabsContent } from "./components/tabs"; 156 + export { DateTimePicker } from "./components/date-time-picker"; 157 + export { 158 + Sheet, 159 + SheetTrigger, 160 + SheetClose, 161 + SheetContent, 162 + SheetHeader, 163 + SheetFooter, 164 + SheetTitle, 165 + SheetDescription, 166 + } from "./components/sheet"; 167 + 168 + export type { ToastType } from "./components/use-toast";
+7
packages/ui/src/lib/utils.ts
··· 1 + import type { ClassValue } from "clsx"; 2 + import { clsx } from "clsx"; 3 + import { twMerge } from "tailwind-merge"; 4 + 5 + export function cn(...inputs: ClassValue[]) { 6 + return twMerge(clsx(inputs)); 7 + }
+87
packages/ui/tailwind.config.ts
··· 1 + // eslint-disable-next-line @typescript-eslint/no-var-requires 2 + const { fontFamily } = require("tailwindcss/defaultTheme"); 3 + 4 + /** @type {import('tailwindcss').Config} */ 5 + module.exports = { 6 + darkMode: ["class"], 7 + content: [ 8 + "src/**/*.{ts,tsx}", 9 + // for vercel integration 10 + "../../packages/integrations/**/*.{ts,tsx}", 11 + "../../packages/ui/**/*.{ts,tsx}", 12 + ], 13 + theme: { 14 + container: { 15 + center: true, 16 + padding: "2rem", 17 + screens: { 18 + "2xl": "1400px", 19 + }, 20 + }, 21 + extend: { 22 + // REMINDER: added for background.tsx 23 + backgroundImage: { 24 + "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", 25 + }, 26 + colors: { 27 + border: "hsl(var(--border))", 28 + input: "hsl(var(--input))", 29 + ring: "hsl(var(--ring))", 30 + background: "hsl(var(--background))", 31 + foreground: "hsl(var(--foreground))", 32 + primary: { 33 + DEFAULT: "hsl(var(--primary))", 34 + foreground: "hsl(var(--primary-foreground))", 35 + }, 36 + secondary: { 37 + DEFAULT: "hsl(var(--secondary))", 38 + foreground: "hsl(var(--secondary-foreground))", 39 + }, 40 + destructive: { 41 + DEFAULT: "hsl(var(--destructive))", 42 + foreground: "hsl(var(--destructive-foreground))", 43 + }, 44 + muted: { 45 + DEFAULT: "hsl(var(--muted))", 46 + foreground: "hsl(var(--muted-foreground))", 47 + }, 48 + accent: { 49 + DEFAULT: "hsl(var(--accent))", 50 + foreground: "hsl(var(--accent-foreground))", 51 + }, 52 + popover: { 53 + DEFAULT: "hsl(var(--popover))", 54 + foreground: "hsl(var(--popover-foreground))", 55 + }, 56 + card: { 57 + DEFAULT: "hsl(var(--card))", 58 + foreground: "hsl(var(--card-foreground))", 59 + }, 60 + }, 61 + borderRadius: { 62 + lg: `var(--radius)`, 63 + md: `calc(var(--radius) - 2px)`, 64 + sm: "calc(var(--radius) - 4px)", 65 + }, 66 + fontFamily: { 67 + sans: ["var(--font-sans)", ...fontFamily.sans], 68 + cal: ["var(--font-calsans)"], 69 + }, 70 + keyframes: { 71 + "accordion-down": { 72 + from: { height: 0 }, 73 + to: { height: "var(--radix-accordion-content-height)" }, 74 + }, 75 + "accordion-up": { 76 + from: { height: "var(--radix-accordion-content-height)" }, 77 + to: { height: 0 }, 78 + }, 79 + }, 80 + animation: { 81 + "accordion-down": "accordion-down 0.2s ease-out", 82 + "accordion-up": "accordion-up 0.2s ease-out", 83 + }, 84 + }, 85 + }, 86 + plugins: [require("tailwindcss-animate"), require("@tailwindcss/typography")], 87 + };
+6 -1
packages/ui/tsconfig.json
··· 1 1 { 2 2 "extends": "@openstatus/tsconfig/react-library.json", 3 3 "include": ["."], 4 - "exclude": ["dist", "build", "node_modules"] 4 + "exclude": ["dist", "build", "node_modules"], 5 + "compilerOptions": { 6 + "paths": { 7 + "@/*": ["./src/*"] 8 + } 9 + } 5 10 }
-30
packages/ui/turbo/generators/config.ts
··· 1 - import type { PlopTypes } from "@turbo/gen"; 2 - 3 - // Learn more about Turborepo Generators at https://turbo.build/repo/docs/core-concepts/monorepos/code-generation 4 - 5 - export default function generator(plop: PlopTypes.NodePlopAPI): void { 6 - // A simple generator to add a new React component to the internal UI library 7 - plop.setGenerator("react-component", { 8 - description: "Adds a new react component", 9 - prompts: [ 10 - { 11 - type: "input", 12 - name: "name", 13 - message: "What is the name of the component?", 14 - }, 15 - ], 16 - actions: [ 17 - { 18 - type: "add", 19 - path: "{{pascalCase name}}.tsx", 20 - templateFile: "templates/component.hbs", 21 - }, 22 - { 23 - type: "append", 24 - path: "index.tsx", 25 - pattern: /(\/\/ component exports)/g, 26 - template: 'export * from "./{{pascalCase name}}";', 27 - }, 28 - ], 29 - }); 30 - }
-14
packages/ui/turbo/generators/templates/component.hbs
··· 1 - import * as React from "react"; 2 - 3 - interface Props { 4 - children?: React.ReactNode; 5 - } 6 - 7 - export const {{ pascalCase name }} = ({ children }: Props) => { 8 - return ( 9 - <div> 10 - <h1>{{ name }}</h1> 11 - {children} 12 - </div> 13 - ); 14 - };
+277 -232
pnpm-lock.yaml
··· 130 130 '@openstatus/tinybird': 131 131 specifier: workspace:* 132 132 version: link:../../packages/tinybird 133 + '@openstatus/ui': 134 + specifier: workspace:* 135 + version: link:../../packages/ui 133 136 '@openstatus/upstash': 134 137 specifier: workspace:* 135 138 version: link:../../packages/upstash 136 139 '@openstatus/vercel': 137 140 specifier: workspace:* 138 141 version: link:../../packages/integrations/vercel 139 - '@radix-ui/react-accordion': 140 - specifier: 1.1.2 141 - version: 1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 142 - '@radix-ui/react-alert-dialog': 143 - specifier: 1.0.4 144 - version: 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 145 - '@radix-ui/react-avatar': 146 - specifier: ^1.0.3 147 - version: 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 148 - '@radix-ui/react-checkbox': 149 - specifier: 1.0.4 150 - version: 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 151 - '@radix-ui/react-context-menu': 152 - specifier: ^2.1.4 153 - version: 2.1.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 154 - '@radix-ui/react-dialog': 155 - specifier: 1.0.4 156 - version: 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 157 - '@radix-ui/react-dropdown-menu': 158 - specifier: 2.0.5 159 - version: 2.0.5(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 160 - '@radix-ui/react-hover-card': 161 - specifier: 1.0.6 162 - version: 1.0.6(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 163 - '@radix-ui/react-label': 164 - specifier: 2.0.2 165 - version: 2.0.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 166 - '@radix-ui/react-popover': 167 - specifier: 1.0.6 168 - version: 1.0.6(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 169 - '@radix-ui/react-radio-group': 170 - specifier: ^1.1.3 171 - version: 1.1.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 172 - '@radix-ui/react-select': 173 - specifier: 1.2.2 174 - version: 1.2.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 175 - '@radix-ui/react-separator': 176 - specifier: 1.0.3 177 - version: 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 178 - '@radix-ui/react-slot': 179 - specifier: 1.0.2 180 - version: 1.0.2(@types/react@18.2.12)(react@18.2.0) 181 - '@radix-ui/react-switch': 182 - specifier: 1.0.3 183 - version: 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 184 - '@radix-ui/react-tabs': 185 - specifier: 1.0.4 186 - version: 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 187 - '@radix-ui/react-toast': 188 - specifier: 1.1.4 189 - version: 1.1.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 190 - '@radix-ui/react-tooltip': 191 - specifier: 1.0.6 192 - version: 1.0.6(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 193 142 '@sentry/integrations': 194 143 specifier: 7.65.0 195 144 version: 7.65.0 ··· 322 271 tailwindcss-animate: 323 272 specifier: 1.0.6 324 273 version: 1.0.6(tailwindcss@3.3.2) 325 - ui: 326 - specifier: workspace:* 327 - version: link:../../packages/ui 328 274 zod: 329 275 specifier: 3.21.4 330 276 version: 3.21.4 ··· 647 593 packages/tsconfig: {} 648 594 649 595 packages/ui: 596 + dependencies: 597 + '@hookform/resolvers': 598 + specifier: 3.1.1 599 + version: 3.1.1(react-hook-form@7.45.1) 600 + '@radix-ui/react-accordion': 601 + specifier: 1.1.2 602 + version: 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 603 + '@radix-ui/react-alert-dialog': 604 + specifier: 1.0.4 605 + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 606 + '@radix-ui/react-avatar': 607 + specifier: ^1.0.3 608 + version: 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 609 + '@radix-ui/react-checkbox': 610 + specifier: 1.0.4 611 + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 612 + '@radix-ui/react-context-menu': 613 + specifier: ^2.1.4 614 + version: 2.1.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 615 + '@radix-ui/react-dialog': 616 + specifier: 1.0.4 617 + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 618 + '@radix-ui/react-dropdown-menu': 619 + specifier: 2.0.5 620 + version: 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 621 + '@radix-ui/react-hover-card': 622 + specifier: 1.0.6 623 + version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 624 + '@radix-ui/react-label': 625 + specifier: 2.0.2 626 + version: 2.0.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 627 + '@radix-ui/react-popover': 628 + specifier: 1.0.6 629 + version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 630 + '@radix-ui/react-radio-group': 631 + specifier: ^1.1.3 632 + version: 1.1.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 633 + '@radix-ui/react-select': 634 + specifier: 1.2.2 635 + version: 1.2.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 636 + '@radix-ui/react-separator': 637 + specifier: 1.0.3 638 + version: 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 639 + '@radix-ui/react-slot': 640 + specifier: 1.0.2 641 + version: 1.0.2(@types/react@18.2.12)(react@18.2.0) 642 + '@radix-ui/react-switch': 643 + specifier: 1.0.3 644 + version: 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 645 + '@radix-ui/react-tabs': 646 + specifier: 1.0.4 647 + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 648 + '@radix-ui/react-toast': 649 + specifier: 1.1.4 650 + version: 1.1.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 651 + '@radix-ui/react-tooltip': 652 + specifier: 1.0.6 653 + version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 654 + class-variance-authority: 655 + specifier: 0.6.0 656 + version: 0.6.0(typescript@5.1.6) 657 + clsx: 658 + specifier: 1.2.1 659 + version: 1.2.1 660 + cmdk: 661 + specifier: 0.2.0 662 + version: 0.2.0(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 663 + date-fns: 664 + specifier: 2.30.0 665 + version: 2.30.0 666 + lucide-react: 667 + specifier: 0.244.0 668 + version: 0.244.0(react@18.2.0) 669 + luxon: 670 + specifier: 3.3.0 671 + version: 3.3.0 672 + react: 673 + specifier: 18.2.0 674 + version: 18.2.0 675 + react-day-picker: 676 + specifier: 8.8.0 677 + version: 8.8.0(date-fns@2.30.0)(react@18.2.0) 678 + react-hook-form: 679 + specifier: 7.45.1 680 + version: 7.45.1(react@18.2.0) 681 + tailwind-merge: 682 + specifier: 1.13.2 683 + version: 1.13.2 684 + zod: 685 + specifier: 3.22.2 686 + version: 3.22.2 650 687 devDependencies: 651 688 '@openstatus/eslint-config': 652 689 specifier: workspace:* ··· 654 691 '@openstatus/tsconfig': 655 692 specifier: workspace:* 656 693 version: link:../tsconfig 694 + '@types/luxon': 695 + specifier: ^3.3.1 696 + version: 3.3.1 697 + '@types/node': 698 + specifier: 20.3.1 699 + version: 20.3.1 657 700 '@types/react': 658 - specifier: 18.2.16 659 - version: 18.2.16 701 + specifier: 18.2.12 702 + version: 18.2.12 660 703 '@types/react-dom': 661 704 specifier: 18.2.7 662 705 version: 18.2.7 663 706 eslint: 664 707 specifier: 8.45.0 665 708 version: 8.45.0 666 - react: 667 - specifier: 18.2.0 668 - version: 18.2.0 669 709 typescript: 670 710 specifier: 5.1.6 671 711 version: 5.1.6 ··· 1118 1158 ts-pattern: 4.3.0 1119 1159 unified: 10.1.2 1120 1160 yaml: 2.3.2 1121 - zod: 3.21.4 1161 + zod: 3.22.2 1122 1162 transitivePeerDependencies: 1123 1163 - '@effect-ts/otel-node' 1124 1164 - esbuild ··· 1197 1237 resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==} 1198 1238 peerDependencies: 1199 1239 '@effect-ts/core': ^0.60.2 1200 - '@opentelemetry/api': ^1.4.0 1201 - '@opentelemetry/core': ^1.13.0 1202 - '@opentelemetry/exporter-trace-otlp-grpc': ^0.39.0 1203 - '@opentelemetry/sdk-trace-base': ^1.13.0 1240 + '@opentelemetry/api': 1.4.1 1241 + '@opentelemetry/core': 1.13.0 1242 + '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1 1243 + '@opentelemetry/sdk-trace-base': 1.13.0 1204 1244 dependencies: 1205 1245 '@effect-ts/core': 0.60.5 1206 1246 '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.4.1)(@opentelemetry/core@1.13.0)(@opentelemetry/sdk-trace-base@1.13.0) ··· 1214 1254 resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==} 1215 1255 peerDependencies: 1216 1256 '@effect-ts/core': ^0.60.2 1217 - '@opentelemetry/api': ^1.4.0 1218 - '@opentelemetry/core': ^1.13.0 1219 - '@opentelemetry/sdk-trace-base': ^1.13.0 1220 - '@opentelemetry/sdk-trace-node': ^1.13.0 1257 + '@opentelemetry/api': 1.4.1 1258 + '@opentelemetry/core': 1.13.0 1259 + '@opentelemetry/sdk-trace-base': 1.13.0 1260 + '@opentelemetry/sdk-trace-node': 1.13.0 1221 1261 dependencies: 1222 1262 '@effect-ts/core': 0.60.5 1223 1263 '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.4.1)(@opentelemetry/core@1.13.0)(@opentelemetry/sdk-trace-base@1.13.0) ··· 1231 1271 resolution: {integrity: sha512-AmZJHl7t0+Peh7Yb2+hqn6r9+rd9/UfeA4AMV9h0YGTdOyouyFfD3wzWlxnAUzAQ4Lrod4kC7Noruret4EpqpA==} 1232 1272 peerDependencies: 1233 1273 '@effect-ts/core': ^0.60.2 1234 - '@opentelemetry/api': ^1.4.0 1235 - '@opentelemetry/core': ^1.13.0 1236 - '@opentelemetry/sdk-trace-base': ^1.13.0 1274 + '@opentelemetry/api': 1.4.1 1275 + '@opentelemetry/core': 1.13.0 1276 + '@opentelemetry/sdk-trace-base': 1.13.0 1237 1277 dependencies: 1238 1278 '@effect-ts/core': 0.60.5 1239 1279 '@opentelemetry/api': 1.4.1 ··· 2248 2288 react: '>=16' 2249 2289 dependencies: 2250 2290 '@types/mdx': 2.0.7 2251 - '@types/react': 18.2.16 2291 + '@types/react': 18.2.12 2252 2292 react: 18.2.0 2253 2293 dev: false 2254 2294 ··· 2706 2746 resolution: {integrity: sha512-pS5fU4lrRjOIPZQqA2V1SUM9QUFXbO+8flubAiy6ntLjnAjJJUdRFOUOxK6v86ZHI2p2S8A0vD0BTu95FZYvjA==} 2707 2747 engines: {node: '>=14'} 2708 2748 peerDependencies: 2709 - '@opentelemetry/api': '>=1.0.0 <1.5.0' 2749 + '@opentelemetry/api': 1.4.1 2710 2750 dependencies: 2711 2751 '@opentelemetry/api': 1.4.1 2712 2752 dev: false ··· 2715 2755 resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==} 2716 2756 engines: {node: '>=14'} 2717 2757 peerDependencies: 2718 - '@opentelemetry/api': '>=1.0.0 <1.5.0' 2758 + '@opentelemetry/api': 1.4.1 2719 2759 dependencies: 2720 2760 '@opentelemetry/api': 1.4.1 2721 2761 '@opentelemetry/semantic-conventions': 1.13.0 ··· 2725 2765 resolution: {integrity: sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==} 2726 2766 engines: {node: '>=14'} 2727 2767 peerDependencies: 2728 - '@opentelemetry/api': ^1.0.0 2768 + '@opentelemetry/api': 1.4.1 2729 2769 dependencies: 2730 2770 '@grpc/grpc-js': 1.9.3 2731 2771 '@opentelemetry/api': 1.4.1 ··· 2740 2780 resolution: {integrity: sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==} 2741 2781 engines: {node: '>=14'} 2742 2782 peerDependencies: 2743 - '@opentelemetry/api': ^1.0.0 2783 + '@opentelemetry/api': 1.4.1 2744 2784 dependencies: 2745 2785 '@opentelemetry/api': 1.4.1 2746 2786 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) ··· 2750 2790 resolution: {integrity: sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==} 2751 2791 engines: {node: '>=14'} 2752 2792 peerDependencies: 2753 - '@opentelemetry/api': ^1.0.0 2793 + '@opentelemetry/api': 1.4.1 2754 2794 dependencies: 2755 2795 '@grpc/grpc-js': 1.9.3 2756 2796 '@opentelemetry/api': 1.4.1 ··· 2763 2803 resolution: {integrity: sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==} 2764 2804 engines: {node: '>=14'} 2765 2805 peerDependencies: 2766 - '@opentelemetry/api': '>=1.3.0 <1.5.0' 2806 + '@opentelemetry/api': 1.4.1 2767 2807 dependencies: 2768 2808 '@opentelemetry/api': 1.4.1 2769 2809 '@opentelemetry/api-logs': 0.39.1 ··· 2778 2818 resolution: {integrity: sha512-HOo91EI4UbuG8xQVLFziTzrcIn0MJQhy8m9jorh8aonb94jFVFi3CFNIiAnIGOabmnshJLOABxpYXsiPB8Xnzg==} 2779 2819 engines: {node: '>=14'} 2780 2820 peerDependencies: 2781 - '@opentelemetry/api': '>=1.0.0 <1.5.0' 2821 + '@opentelemetry/api': 1.4.1 2782 2822 dependencies: 2783 2823 '@opentelemetry/api': 1.4.1 2784 2824 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) ··· 2788 2828 resolution: {integrity: sha512-IV9TO+u1Jzm9mUDAD3gyXf89eyvgEJUY1t+GB5QmS4wjVeWrSMUtD0JjH3yG9SNqkrQOqOGJq7YUSSetW+Lf5Q==} 2789 2829 engines: {node: '>=14'} 2790 2830 peerDependencies: 2791 - '@opentelemetry/api': '>=1.0.0 <1.5.0' 2831 + '@opentelemetry/api': 1.4.1 2792 2832 dependencies: 2793 2833 '@opentelemetry/api': 1.4.1 2794 2834 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) ··· 2798 2838 resolution: {integrity: sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==} 2799 2839 engines: {node: '>=14'} 2800 2840 peerDependencies: 2801 - '@opentelemetry/api': '>=1.0.0 <1.5.0' 2841 + '@opentelemetry/api': 1.4.1 2802 2842 dependencies: 2803 2843 '@opentelemetry/api': 1.4.1 2804 2844 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) ··· 2809 2849 resolution: {integrity: sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==} 2810 2850 engines: {node: '>=14'} 2811 2851 peerDependencies: 2812 - '@opentelemetry/api': '>=1.4.0 <1.5.0' 2852 + '@opentelemetry/api': 1.4.1 2813 2853 '@opentelemetry/api-logs': '>=0.38.0' 2814 2854 dependencies: 2815 2855 '@opentelemetry/api': 1.4.1 ··· 2822 2862 resolution: {integrity: sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==} 2823 2863 engines: {node: '>=14'} 2824 2864 peerDependencies: 2825 - '@opentelemetry/api': '>=1.3.0 <1.5.0' 2865 + '@opentelemetry/api': 1.4.1 2826 2866 dependencies: 2827 2867 '@opentelemetry/api': 1.4.1 2828 2868 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) ··· 2834 2874 resolution: {integrity: sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==} 2835 2875 engines: {node: '>=14'} 2836 2876 peerDependencies: 2837 - '@opentelemetry/api': '>=1.0.0 <1.5.0' 2877 + '@opentelemetry/api': 1.4.1 2838 2878 dependencies: 2839 2879 '@opentelemetry/api': 1.4.1 2840 2880 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) ··· 2846 2886 resolution: {integrity: sha512-FXA85lXKTsnbOflA/TBuBf2pmhD3c8uDjNjG0YqK+ap8UayfALmfJhf+aG1yBOUHevCY0JXJ4/xtbXExxpsMog==} 2847 2887 engines: {node: '>=14'} 2848 2888 peerDependencies: 2849 - '@opentelemetry/api': '>=1.0.0 <1.5.0' 2889 + '@opentelemetry/api': 1.4.1 2850 2890 dependencies: 2851 2891 '@opentelemetry/api': 1.4.1 2852 2892 '@opentelemetry/context-async-hooks': 1.13.0(@opentelemetry/api@1.4.1) ··· 2953 2993 '@babel/runtime': 7.22.15 2954 2994 dev: false 2955 2995 2956 - /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 2996 + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 2957 2997 resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} 2958 2998 peerDependencies: 2959 2999 '@types/react': '*' ··· 2968 3008 dependencies: 2969 3009 '@babel/runtime': 7.22.15 2970 3010 '@radix-ui/primitive': 1.0.1 2971 - '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 2972 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3011 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3012 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 2973 3013 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 2974 3014 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 2975 3015 '@radix-ui/react-direction': 1.0.1(@types/react@18.2.12)(react@18.2.0) 2976 3016 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 2977 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3017 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 2978 3018 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 2979 3019 '@types/react': 18.2.12 2980 - '@types/react-dom': 18.2.5 3020 + '@types/react-dom': 18.2.7 2981 3021 react: 18.2.0 2982 3022 react-dom: 18.2.0(react@18.2.0) 2983 3023 dev: false 2984 3024 2985 - /@radix-ui/react-alert-dialog@1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3025 + /@radix-ui/react-alert-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 2986 3026 resolution: {integrity: sha512-jbfBCRlKYlhbitueOAv7z74PXYeIQmWpKwm3jllsdkw7fGWNkxqP3v0nY9WmOzcPqpQuoorNtvViBgL46n5gVg==} 2987 3027 peerDependencies: 2988 3028 '@types/react': '*' ··· 2999 3039 '@radix-ui/primitive': 1.0.1 3000 3040 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3001 3041 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3002 - '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3003 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3042 + '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3043 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3004 3044 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3005 3045 '@types/react': 18.2.12 3006 - '@types/react-dom': 18.2.5 3046 + '@types/react-dom': 18.2.7 3007 3047 react: 18.2.0 3008 3048 react-dom: 18.2.0(react@18.2.0) 3009 3049 dev: false 3010 3050 3011 - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3051 + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3012 3052 resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} 3013 3053 peerDependencies: 3014 3054 '@types/react': '*' ··· 3022 3062 optional: true 3023 3063 dependencies: 3024 3064 '@babel/runtime': 7.22.15 3025 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3065 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3026 3066 '@types/react': 18.2.12 3027 - '@types/react-dom': 18.2.5 3067 + '@types/react-dom': 18.2.7 3028 3068 react: 18.2.0 3029 3069 react-dom: 18.2.0(react@18.2.0) 3030 3070 dev: false 3031 3071 3032 - /@radix-ui/react-avatar@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3072 + /@radix-ui/react-avatar@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3033 3073 resolution: {integrity: sha512-9ToF7YNex3Ste45LrAeTlKtONI9yVRt/zOS158iilIkW5K/Apeyb/TUQlcEFTEFvWr8Kzdi2ZYrm1/suiXPajQ==} 3034 3074 peerDependencies: 3035 3075 '@types/react': '*' ··· 3044 3084 dependencies: 3045 3085 '@babel/runtime': 7.22.15 3046 3086 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3047 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3087 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3048 3088 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3049 3089 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3050 3090 '@types/react': 18.2.12 3051 - '@types/react-dom': 18.2.5 3091 + '@types/react-dom': 18.2.7 3052 3092 react: 18.2.0 3053 3093 react-dom: 18.2.0(react@18.2.0) 3054 3094 dev: false 3055 3095 3056 - /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3096 + /@radix-ui/react-checkbox@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3057 3097 resolution: {integrity: sha512-CBuGQa52aAYnADZVt/KBQzXrwx6TqnlwtcIPGtVt5JkkzQwMOLJjPukimhfKEr4GQNd43C+djUh5Ikopj8pSLg==} 3058 3098 peerDependencies: 3059 3099 '@types/react': '*' ··· 3070 3110 '@radix-ui/primitive': 1.0.1 3071 3111 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3072 3112 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3073 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3074 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3113 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3114 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3075 3115 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3076 3116 '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3077 3117 '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3078 3118 '@types/react': 18.2.12 3079 - '@types/react-dom': 18.2.5 3119 + '@types/react-dom': 18.2.7 3080 3120 react: 18.2.0 3081 3121 react-dom: 18.2.0(react@18.2.0) 3082 3122 dev: false 3083 3123 3084 - /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3124 + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3085 3125 resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} 3086 3126 peerDependencies: 3087 3127 '@types/react': '*' ··· 3099 3139 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3100 3140 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3101 3141 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3102 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3103 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3142 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3143 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3104 3144 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3105 3145 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3106 3146 '@types/react': 18.2.12 3107 - '@types/react-dom': 18.2.5 3147 + '@types/react-dom': 18.2.7 3108 3148 react: 18.2.0 3109 3149 react-dom: 18.2.0(react@18.2.0) 3110 3150 dev: false 3111 3151 3112 - /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3152 + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3113 3153 resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} 3114 3154 peerDependencies: 3115 3155 '@types/react': '*' ··· 3125 3165 '@babel/runtime': 7.22.15 3126 3166 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3127 3167 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3128 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3168 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3129 3169 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3130 3170 '@types/react': 18.2.12 3131 - '@types/react-dom': 18.2.5 3171 + '@types/react-dom': 18.2.7 3132 3172 react: 18.2.0 3133 3173 react-dom: 18.2.0(react@18.2.0) 3134 3174 dev: false ··· 3156 3196 react: 18.2.0 3157 3197 dev: false 3158 3198 3159 - /@radix-ui/react-context-menu@2.1.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3199 + /@radix-ui/react-context-menu@2.1.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3160 3200 resolution: {integrity: sha512-HVHLUtZOBiR2Fh5l07qQ9y0IgX4dGZF0S9Gwdk4CVA+DL9afSphvFNa4nRiw6RNgb6quwLV4dLPF/gFDvNaOcQ==} 3161 3201 peerDependencies: 3162 3202 '@types/react': '*' ··· 3172 3212 '@babel/runtime': 7.22.15 3173 3213 '@radix-ui/primitive': 1.0.1 3174 3214 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3175 - '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3176 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3215 + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3216 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3177 3217 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3178 3218 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3179 3219 '@types/react': 18.2.12 3180 - '@types/react-dom': 18.2.5 3220 + '@types/react-dom': 18.2.7 3181 3221 react: 18.2.0 3182 3222 react-dom: 18.2.0(react@18.2.0) 3183 3223 dev: false ··· 3232 3272 - '@types/react' 3233 3273 dev: false 3234 3274 3235 - /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3275 + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3236 3276 resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} 3237 3277 peerDependencies: 3238 3278 '@types/react': '*' ··· 3249 3289 '@radix-ui/primitive': 1.0.1 3250 3290 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3251 3291 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3252 - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3292 + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3253 3293 '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3254 - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3294 + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3255 3295 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3256 - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3257 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3258 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3296 + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3297 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3298 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3259 3299 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3260 3300 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3261 3301 '@types/react': 18.2.12 3262 - '@types/react-dom': 18.2.5 3302 + '@types/react-dom': 18.2.7 3263 3303 aria-hidden: 1.2.3 3264 3304 react: 18.2.0 3265 3305 react-dom: 18.2.0(react@18.2.0) ··· 3296 3336 react-dom: 18.2.0(react@18.2.0) 3297 3337 dev: false 3298 3338 3299 - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3339 + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3300 3340 resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} 3301 3341 peerDependencies: 3302 3342 '@types/react': '*' ··· 3312 3352 '@babel/runtime': 7.22.15 3313 3353 '@radix-ui/primitive': 1.0.1 3314 3354 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3315 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3355 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3316 3356 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3317 3357 '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.12)(react@18.2.0) 3318 3358 '@types/react': 18.2.12 3319 - '@types/react-dom': 18.2.5 3359 + '@types/react-dom': 18.2.7 3320 3360 react: 18.2.0 3321 3361 react-dom: 18.2.0(react@18.2.0) 3322 3362 dev: false 3323 3363 3324 - /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3364 + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3325 3365 resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} 3326 3366 peerDependencies: 3327 3367 '@types/react': '*' ··· 3339 3379 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3340 3380 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3341 3381 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3342 - '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3343 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3382 + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3383 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3344 3384 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3345 3385 '@types/react': 18.2.12 3346 - '@types/react-dom': 18.2.5 3386 + '@types/react-dom': 18.2.7 3347 3387 react: 18.2.0 3348 3388 react-dom: 18.2.0(react@18.2.0) 3349 3389 dev: false ··· 3385 3425 react-dom: 18.2.0(react@18.2.0) 3386 3426 dev: false 3387 3427 3388 - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3428 + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3389 3429 resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} 3390 3430 peerDependencies: 3391 3431 '@types/react': '*' ··· 3400 3440 dependencies: 3401 3441 '@babel/runtime': 7.22.15 3402 3442 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3403 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3443 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3404 3444 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3405 3445 '@types/react': 18.2.12 3406 - '@types/react-dom': 18.2.5 3446 + '@types/react-dom': 18.2.7 3407 3447 react: 18.2.0 3408 3448 react-dom: 18.2.0(react@18.2.0) 3409 3449 dev: false 3410 3450 3411 - /@radix-ui/react-hover-card@1.0.6(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3451 + /@radix-ui/react-hover-card@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3412 3452 resolution: {integrity: sha512-2K3ToJuMk9wjwBOa+jdg2oPma+AmLdcEyTNsG/iC4BDVG3E0/mGCjbY8PEDSLxJcUi+nJi2QII+ec/4kWd88DA==} 3413 3453 peerDependencies: 3414 3454 '@types/react': '*' ··· 3425 3465 '@radix-ui/primitive': 1.0.1 3426 3466 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3427 3467 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3428 - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3429 - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3430 - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3431 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3432 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3468 + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3469 + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3470 + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3471 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3472 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3433 3473 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3434 3474 '@types/react': 18.2.12 3435 - '@types/react-dom': 18.2.5 3475 + '@types/react-dom': 18.2.7 3436 3476 react: 18.2.0 3437 3477 react-dom: 18.2.0(react@18.2.0) 3438 3478 dev: false ··· 3462 3502 react: 18.2.0 3463 3503 dev: false 3464 3504 3465 - /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3505 + /@radix-ui/react-label@2.0.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3466 3506 resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==} 3467 3507 peerDependencies: 3468 3508 '@types/react': '*' ··· 3476 3516 optional: true 3477 3517 dependencies: 3478 3518 '@babel/runtime': 7.22.15 3479 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3519 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3480 3520 '@types/react': 18.2.12 3481 - '@types/react-dom': 18.2.5 3521 + '@types/react-dom': 18.2.7 3482 3522 react: 18.2.0 3483 3523 react-dom: 18.2.0(react@18.2.0) 3484 3524 dev: false 3485 3525 3486 - /@radix-ui/react-menu@2.0.5(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3526 + /@radix-ui/react-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3487 3527 resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} 3488 3528 peerDependencies: 3489 3529 '@types/react': '*' ··· 3498 3538 dependencies: 3499 3539 '@babel/runtime': 7.22.15 3500 3540 '@radix-ui/primitive': 1.0.1 3501 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3541 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3502 3542 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3503 3543 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3504 3544 '@radix-ui/react-direction': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3505 - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3545 + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3506 3546 '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3507 - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3547 + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3508 3548 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3509 - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3510 - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3511 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3512 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3513 - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3549 + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3550 + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3551 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3552 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3553 + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3514 3554 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3515 3555 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3516 3556 '@types/react': 18.2.12 3517 - '@types/react-dom': 18.2.5 3557 + '@types/react-dom': 18.2.7 3518 3558 aria-hidden: 1.2.3 3519 3559 react: 18.2.0 3520 3560 react-dom: 18.2.0(react@18.2.0) 3521 3561 react-remove-scroll: 2.5.5(@types/react@18.2.12)(react@18.2.0) 3522 3562 dev: false 3523 3563 3524 - /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3564 + /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3525 3565 resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} 3526 3566 peerDependencies: 3527 3567 '@types/react': '*' ··· 3538 3578 '@radix-ui/primitive': 1.0.1 3539 3579 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3540 3580 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3541 - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3581 + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3542 3582 '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3543 - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3583 + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3544 3584 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3545 - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3546 - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3547 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3548 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3585 + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3586 + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3587 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3588 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3549 3589 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3550 3590 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3551 3591 '@types/react': 18.2.12 3552 - '@types/react-dom': 18.2.5 3592 + '@types/react-dom': 18.2.7 3553 3593 aria-hidden: 1.2.3 3554 3594 react: 18.2.0 3555 3595 react-dom: 18.2.0(react@18.2.0) 3556 3596 react-remove-scroll: 2.5.5(@types/react@18.2.12)(react@18.2.0) 3557 3597 dev: false 3558 3598 3559 - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3599 + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3560 3600 resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} 3561 3601 peerDependencies: 3562 3602 '@types/react': '*' ··· 3571 3611 dependencies: 3572 3612 '@babel/runtime': 7.22.15 3573 3613 '@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0) 3574 - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3614 + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3575 3615 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3576 3616 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3577 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3617 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3578 3618 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3579 3619 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3580 3620 '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3581 3621 '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3582 3622 '@radix-ui/rect': 1.0.1 3583 3623 '@types/react': 18.2.12 3584 - '@types/react-dom': 18.2.5 3624 + '@types/react-dom': 18.2.7 3585 3625 react: 18.2.0 3586 3626 react-dom: 18.2.0(react@18.2.0) 3587 3627 dev: false ··· 3598 3638 react-dom: 18.2.0(react@18.2.0) 3599 3639 dev: false 3600 3640 3601 - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3641 + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3602 3642 resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} 3603 3643 peerDependencies: 3604 3644 '@types/react': '*' ··· 3612 3652 optional: true 3613 3653 dependencies: 3614 3654 '@babel/runtime': 7.22.15 3615 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3655 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3616 3656 '@types/react': 18.2.12 3617 - '@types/react-dom': 18.2.5 3657 + '@types/react-dom': 18.2.7 3618 3658 react: 18.2.0 3619 3659 react-dom: 18.2.0(react@18.2.0) 3620 3660 dev: false ··· 3632 3672 react-dom: 18.2.0(react@18.2.0) 3633 3673 dev: false 3634 3674 3635 - /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3675 + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3636 3676 resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} 3637 3677 peerDependencies: 3638 3678 '@types/react': '*' ··· 3649 3689 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3650 3690 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3651 3691 '@types/react': 18.2.12 3652 - '@types/react-dom': 18.2.5 3692 + '@types/react-dom': 18.2.7 3653 3693 react: 18.2.0 3654 3694 react-dom: 18.2.0(react@18.2.0) 3655 3695 dev: false ··· 3666 3706 react-dom: 18.2.0(react@18.2.0) 3667 3707 dev: false 3668 3708 3669 - /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3709 + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3670 3710 resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} 3671 3711 peerDependencies: 3672 3712 '@types/react': '*' ··· 3682 3722 '@babel/runtime': 7.22.15 3683 3723 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3684 3724 '@types/react': 18.2.12 3685 - '@types/react-dom': 18.2.5 3725 + '@types/react-dom': 18.2.7 3686 3726 react: 18.2.0 3687 3727 react-dom: 18.2.0(react@18.2.0) 3688 3728 dev: false 3689 3729 3690 - /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3730 + /@radix-ui/react-radio-group@1.1.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3691 3731 resolution: {integrity: sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==} 3692 3732 peerDependencies: 3693 3733 '@types/react': '*' ··· 3705 3745 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3706 3746 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3707 3747 '@radix-ui/react-direction': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3708 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3709 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3710 - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3748 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3749 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3750 + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3711 3751 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3712 3752 '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3713 3753 '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3714 3754 '@types/react': 18.2.12 3715 - '@types/react-dom': 18.2.5 3755 + '@types/react-dom': 18.2.7 3716 3756 react: 18.2.0 3717 3757 react-dom: 18.2.0(react@18.2.0) 3718 3758 dev: false 3719 3759 3720 - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3760 + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3721 3761 resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} 3722 3762 peerDependencies: 3723 3763 '@types/react': '*' ··· 3732 3772 dependencies: 3733 3773 '@babel/runtime': 7.22.15 3734 3774 '@radix-ui/primitive': 1.0.1 3735 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3775 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3736 3776 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3737 3777 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3738 3778 '@radix-ui/react-direction': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3739 3779 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3740 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3780 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3741 3781 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3742 3782 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3743 3783 '@types/react': 18.2.12 3744 - '@types/react-dom': 18.2.5 3784 + '@types/react-dom': 18.2.7 3745 3785 react: 18.2.0 3746 3786 react-dom: 18.2.0(react@18.2.0) 3747 3787 dev: false 3748 3788 3749 - /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3789 + /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3750 3790 resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==} 3751 3791 peerDependencies: 3752 3792 '@types/react': '*' ··· 3762 3802 '@babel/runtime': 7.22.15 3763 3803 '@radix-ui/number': 1.0.1 3764 3804 '@radix-ui/primitive': 1.0.1 3765 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3805 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3766 3806 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3767 3807 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3768 3808 '@radix-ui/react-direction': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3769 - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3809 + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3770 3810 '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3771 - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3811 + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3772 3812 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3773 - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3774 - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3775 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3813 + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3814 + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3815 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3776 3816 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3777 3817 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3778 3818 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3779 3819 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3780 3820 '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3781 - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3821 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3782 3822 '@types/react': 18.2.12 3783 - '@types/react-dom': 18.2.5 3823 + '@types/react-dom': 18.2.7 3784 3824 aria-hidden: 1.2.3 3785 3825 react: 18.2.0 3786 3826 react-dom: 18.2.0(react@18.2.0) 3787 3827 react-remove-scroll: 2.5.5(@types/react@18.2.12)(react@18.2.0) 3788 3828 dev: false 3789 3829 3790 - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3830 + /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3791 3831 resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} 3792 3832 peerDependencies: 3793 3833 '@types/react': '*' ··· 3801 3841 optional: true 3802 3842 dependencies: 3803 3843 '@babel/runtime': 7.22.15 3804 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3844 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3805 3845 '@types/react': 18.2.12 3806 - '@types/react-dom': 18.2.5 3846 + '@types/react-dom': 18.2.7 3807 3847 react: 18.2.0 3808 3848 react-dom: 18.2.0(react@18.2.0) 3809 3849 dev: false ··· 3833 3873 react: 18.2.0 3834 3874 dev: false 3835 3875 3836 - /@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3876 + /@radix-ui/react-switch@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3837 3877 resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==} 3838 3878 peerDependencies: 3839 3879 '@types/react': '*' ··· 3850 3890 '@radix-ui/primitive': 1.0.1 3851 3891 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3852 3892 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3853 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3893 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3854 3894 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3855 3895 '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3856 3896 '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3857 3897 '@types/react': 18.2.12 3858 - '@types/react-dom': 18.2.5 3898 + '@types/react-dom': 18.2.7 3859 3899 react: 18.2.0 3860 3900 react-dom: 18.2.0(react@18.2.0) 3861 3901 dev: false 3862 3902 3863 - /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3903 + /@radix-ui/react-tabs@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3864 3904 resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==} 3865 3905 peerDependencies: 3866 3906 '@types/react': '*' ··· 3878 3918 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3879 3919 '@radix-ui/react-direction': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3880 3920 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3881 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3882 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3883 - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3921 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3922 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3923 + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3884 3924 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3885 3925 '@types/react': 18.2.12 3886 - '@types/react-dom': 18.2.5 3926 + '@types/react-dom': 18.2.7 3887 3927 react: 18.2.0 3888 3928 react-dom: 18.2.0(react@18.2.0) 3889 3929 dev: false 3890 3930 3891 - /@radix-ui/react-toast@1.1.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3931 + /@radix-ui/react-toast@1.1.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3892 3932 resolution: {integrity: sha512-wf+fc8DOywrpRK3jlPlWVe+ELYGHdKDaaARJZNuUTWyWYq7+ANCFLp4rTjZ/mcGkJJQ/vZ949Zis9xxEpfq9OA==} 3893 3933 peerDependencies: 3894 3934 '@types/react': '*' ··· 3903 3943 dependencies: 3904 3944 '@babel/runtime': 7.22.15 3905 3945 '@radix-ui/primitive': 1.0.1 3906 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3946 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3907 3947 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3908 3948 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3909 - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3910 - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3911 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3912 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3949 + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3950 + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3951 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3952 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3913 3953 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3914 3954 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3915 3955 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3916 - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3956 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3917 3957 '@types/react': 18.2.12 3918 - '@types/react-dom': 18.2.5 3958 + '@types/react-dom': 18.2.7 3919 3959 react: 18.2.0 3920 3960 react-dom: 18.2.0(react@18.2.0) 3921 3961 dev: false 3922 3962 3923 - /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3963 + /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 3924 3964 resolution: {integrity: sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==} 3925 3965 peerDependencies: 3926 3966 '@types/react': '*' ··· 3937 3977 '@radix-ui/primitive': 1.0.1 3938 3978 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3939 3979 '@radix-ui/react-context': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3940 - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3980 + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3941 3981 '@radix-ui/react-id': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3942 - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3943 - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3944 - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3945 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3982 + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3983 + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3984 + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3985 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3946 3986 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.12)(react@18.2.0) 3947 3987 '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.12)(react@18.2.0) 3948 - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3988 + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 3949 3989 '@types/react': 18.2.12 3950 - '@types/react-dom': 18.2.5 3990 + '@types/react-dom': 18.2.7 3951 3991 react: 18.2.0 3952 3992 react-dom: 18.2.0(react@18.2.0) 3953 3993 dev: false ··· 4092 4132 react: 18.2.0 4093 4133 dev: false 4094 4134 4095 - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 4135 + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0): 4096 4136 resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} 4097 4137 peerDependencies: 4098 4138 '@types/react': '*' ··· 4106 4146 optional: true 4107 4147 dependencies: 4108 4148 '@babel/runtime': 7.22.15 4109 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.5)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 4149 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.12)(react-dom@18.2.0)(react@18.2.0) 4110 4150 '@types/react': 18.2.12 4111 - '@types/react-dom': 18.2.5 4151 + '@types/react-dom': 18.2.7 4112 4152 react: 18.2.0 4113 4153 react-dom: 18.2.0(react@18.2.0) 4114 4154 dev: false ··· 5131 5171 /@types/hoist-non-react-statics@3.3.2: 5132 5172 resolution: {integrity: sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw==} 5133 5173 dependencies: 5134 - '@types/react': 18.2.16 5174 + '@types/react': 18.2.12 5135 5175 hoist-non-react-statics: 3.3.2 5136 5176 dev: false 5137 5177 ··· 5279 5319 /@types/react-dom@18.2.5: 5280 5320 resolution: {integrity: sha512-sRQsOS/sCLnpQhR4DSKGTtWFE3FZjpQa86KPVbhUqdYMRZ9FEFcfAytKhR/vUG2rH1oFbOOej6cuD7MFSobDRQ==} 5281 5321 dependencies: 5282 - '@types/react': 18.2.16 5322 + '@types/react': 18.2.21 5323 + dev: true 5283 5324 5284 5325 /@types/react-dom@18.2.7: 5285 5326 resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} 5286 5327 dependencies: 5287 - '@types/react': 18.2.16 5288 - dev: true 5328 + '@types/react': 18.2.12 5289 5329 5290 5330 /@types/react@18.2.12: 5291 5331 resolution: {integrity: sha512-ndmBMLCgn38v3SntMeoJaIrO6tGHYKMEBohCUmw8HoLLQdRMOIGXfeYaBTLe2lsFaSB3MOK1VXscYFnmLtTSmw==} ··· 5294 5334 '@types/scheduler': 0.16.3 5295 5335 csstype: 3.1.2 5296 5336 5297 - /@types/react@18.2.16: 5298 - resolution: {integrity: sha512-LLFWr12ZhBJ4YVw7neWLe6Pk7Ey5R9OCydfuMsz1L8bZxzaawJj2p06Q8/EFEHDeTBQNFLF62X+CG7B2zIyu0Q==} 5337 + /@types/react@18.2.21: 5338 + resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==} 5299 5339 dependencies: 5300 5340 '@types/prop-types': 15.7.6 5301 5341 '@types/scheduler': 0.16.3 5302 5342 csstype: 3.1.2 5343 + dev: true 5303 5344 5304 5345 /@types/resolve@1.20.2: 5305 5346 resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} ··· 5334 5375 /@types/swagger-ui-react@4.18.0: 5335 5376 resolution: {integrity: sha512-XtvFXmj46Zibe89tFQwSQknrq1NxEtOep2rZuxth7K88tyPEP00FnoA6H7ATYhocAEA4XUWaNHNFWFRl1KX8aQ==} 5336 5377 dependencies: 5337 - '@types/react': 18.2.16 5378 + '@types/react': 18.2.12 5338 5379 dev: true 5339 5380 5340 5381 /@types/through@0.0.31: ··· 7245 7286 '@cloudflare/workers-types': '>=3' 7246 7287 '@libsql/client': '*' 7247 7288 '@neondatabase/serverless': '>=0.1' 7248 - '@opentelemetry/api': ^1.4.1 7289 + '@opentelemetry/api': 1.4.1 7249 7290 '@planetscale/database': '>=1' 7250 7291 '@types/better-sqlite3': '*' 7251 7292 '@types/pg': '*' ··· 10718 10759 engines: {node: '>=16.8.0'} 10719 10760 hasBin: true 10720 10761 peerDependencies: 10721 - '@opentelemetry/api': ^1.1.0 10762 + '@opentelemetry/api': 1.4.1 10722 10763 fibers: '>= 3.1.0' 10723 10764 react: ^18.2.0 10724 10765 react-dom: ^18.2.0 ··· 10761 10802 engines: {node: '>=16.8.0'} 10762 10803 hasBin: true 10763 10804 peerDependencies: 10764 - '@opentelemetry/api': ^1.1.0 10805 + '@opentelemetry/api': 1.4.1 10765 10806 react: ^18.2.0 10766 10807 react-dom: ^18.2.0 10767 10808 sass: ^1.3.0 ··· 14479 14520 14480 14521 /zod@3.21.4: 14481 14522 resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} 14523 + 14524 + /zod@3.22.2: 14525 + resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} 14526 + dev: false 14482 14527 14483 14528 /zwitch@2.0.4: 14484 14529 resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}