diff --git a/.env.docker b/.env.docker deleted file mode 100644 index ba19223174..0000000000 --- a/.env.docker +++ /dev/null @@ -1,107 +0,0 @@ -######################################################################## -# ------------ MANDATORY (CHANGE ACCORDING TO YOUR SETUP) ------------# -######################################################################## - - -############ -# BASICS # -############ - -WEBAPP_URL=http://localhost:3000 - -############## -# DATABASE # -############## - -DATABASE_URL='postgresql://postgres:postgres@postgres:5432/formbricks?schema=public' - -# Uncomment to enable a dedicated connection pool for Prisma using Prisma Data Proxy -# Cold boots will be faster and you'll be able to scale your DB independently of your app. -# @see https://www.prisma.io/docs/data-platform/data-proxy/use-data-proxy -# PRISMA_GENERATE_DATAPROXY=true -PRISMA_GENERATE_DATAPROXY= - -############### -# NEXT AUTH # -############### - -# @see: https://next-auth.js.org/configuration/options#nextauth_secret -# You can use: `openssl rand -base64 32` to generate one -NEXTAUTH_SECRET=RANDOM_STRING - -# Set this to your public-facing URL, e.g., https://example.com -# You do not need the NEXTAUTH_URL environment variable in Vercel. -NEXTAUTH_URL=http://localhost:3000 - -# If you encounter NEXT_AUTH URL problems this should always be localhost:3000 (or whatever port your app is running on) -# NEXTAUTH_URL_INTERNAL=http://localhost:3000 - -################ -# MAIL SETUP # -################ - -# Necessary if email verification and password reset are enabled. -# See optional configurations below if you want to disable these features. - -# MAIL_FROM=noreply@example.com -# SMTP_HOST=localhost -# SMTP_PORT=1025 -# Enable SMTP_SECURE_ENABLED for TLS (port 465) -# SMTP_SECURE_ENABLED=0 -# SMTP_USER=smtpUser -# SMTP_PASSWORD=smtpPassword - - -######################################################################## -# ------------------------------ OPTIONAL -----------------------------# -######################################################################## - -# Uncomment the variables you would like to use and customize the values. - -##################### -# Disable Features # -##################### - -# Email Verification. If you enable Email Verification you have to setup SMTP-Settings, too. -EMAIL_VERIFICATION_DISABLED=1 - -# Password Reset. If you enable Password Reset functionality you have to setup SMTP-Settings, too. -PASSWORD_RESET_DISABLED=1 - -# Signup. Disable the ability for new users to create an account. -# SIGNUP_DISABLED=1 - -# Team Invite. Disable the ability for invited users to create an account. -# INVITE_DISABLED=1 - -########## -# Other # -########## - -# Display privacy policy, imprint and terms of service links in the footer of signup & public pages. -PRIVACY_URL= -TERMS_URL= -IMPRINT_URL= - -# Disable Sentry warning -SENTRY_IGNORE_API_RESOLUTION_ERROR=1 - -# Enable Sentry Error Tracking -NEXT_PUBLIC_SENTRY_DSN= - -# Configure Github Login -GITHUB_AUTH_ENABLED=0 -GITHUB_ID= -GITHUB_SECRET= - -# Configure Google Login -GOOGLE_AUTH_ENABLED=0 -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= - -# Cron Secret -CRON_SECRET= - -# Encryption key -# You can use: `openssl rand -base64 16` to generate one -FORMBRICKS_ENCRYPTION_KEY= \ No newline at end of file diff --git a/.env.example b/.env.example index db986396c9..808deb2939 100644 --- a/.env.example +++ b/.env.example @@ -10,19 +10,17 @@ WEBAPP_URL=http://localhost:3000 +SURVEY_BASE_URL=http://localhost:3000/i + +# Set this if you want to have a shorter link for surveys +SHORT_SURVEY_BASE_URL= + ############## # DATABASE # ############## DATABASE_URL='postgresql://postgres:postgres@localhost:5432/formbricks?schema=public' -# Uncomment to enable a dedicated connection pool for Prisma using Prisma Data Proxy -# Cold boots will be faster and you'll be able to scale your DB independently of your app. -# @see https://www.prisma.io/docs/data-platform/data-proxy/use-data-proxy -# PRISMA_GENERATE_DATAPROXY=true -# i dont think we use it so ask Matti and remove it -PRISMA_GENERATE_DATAPROXY= - ############### # NEXT AUTH # ############### @@ -92,6 +90,15 @@ GOOGLE_AUTH_ENABLED=0 GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= +# Cron Secret +CRON_SECRET= + +# Encryption key +# You can use: `openssl rand -base64 16` to generate one +FORMBRICKS_ENCRYPTION_KEY= + +# Configure this when you want to ship JS & CSS files from a complete URL instead of the current domain +# ASSET_PREFIX_URL= # Stripe Billing Variables STRIPE_SECRET_KEY= @@ -102,10 +109,4 @@ NEXT_PUBLIC_FORMBRICKS_API_HOST= NEXT_PUBLIC_FORMBRICKS_ENVIRONMENT_ID= NEXT_PUBLIC_FORMBRICKS_ONBOARDING_SURVEY_ID= -# Cron Secret -CRON_SECRET= - -# Encryption key -# You can use: `openssl rand -base64 16` to generate one -FORMBRICKS_ENCRYPTION_KEY= */ diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml index 90fbd6cf31..073e435bec 100644 --- a/.github/workflows/release-docker.yml +++ b/.github/workflows/release-docker.yml @@ -12,7 +12,13 @@ jobs: env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ secrets.TURBO_TEAM }} + DATABASE_URL: "postgresql://postgres:postgres@localhost:5432/formbricks?schema=public" steps: + - name: Generate Random NEXTAUTH_SECRET + run: | + SECRET=$(openssl rand -hex 16) + echo "NEXTAUTH_SECRET=$SECRET" >> $GITHUB_ENV + - name: Checkout Repo uses: actions/checkout@v2 @@ -41,3 +47,6 @@ jobs: tags: | ${{ secrets.DOCKER_USERNAME }}/formbricks:${{ env.RELEASE_TAG }} ${{ secrets.DOCKER_USERNAME }}/formbricks:latest + build-args: | + NEXTAUTH_SECRET=${{ env.NEXTAUTH_SECRET }} + DATABASE_URL=${{ env.DATABASE_URL }} diff --git a/apps/demo/package.json b/apps/demo/package.json index c7e9694e9f..06e44fe54a 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -13,7 +13,7 @@ "dependencies": { "@formbricks/js": "workspace:*", "@heroicons/react": "^2.0.18", - "next": "13.5.3", + "next": "13.5.4", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/apps/formbricks-com/app/docs/self-hosting/docker/page.mdx b/apps/formbricks-com/app/docs/self-hosting/docker/page.mdx index 0ec213a9f3..8c51e7f3ee 100644 --- a/apps/formbricks-com/app/docs/self-hosting/docker/page.mdx +++ b/apps/formbricks-com/app/docs/self-hosting/docker/page.mdx @@ -61,10 +61,12 @@ Ensure `docker` & `docker compose` are installed on your server/system. Both are You're now ready to start the Formbricks Docker setup. The following command will start Formbricks together with a postgreSQL database using Docker Compose: + We pass the `--env-file /dev/null` flag to docker-compose to prevent it from reading the .env file. This is because we're using environment variables directly in the docker-compose.yml file as the env file is currently in a format not well recognised by docker systems. + ```bash - docker compose up -d + docker compose --env-file /dev/null up -d ``` @@ -103,7 +105,7 @@ Ensure `docker` & `docker compose` are installed on your server/system. Both are ```bash - docker compose up -d + docker compose --env-file /dev/null up -d ``` diff --git a/apps/formbricks-com/app/docs/self-hosting/from-source/page.mdx b/apps/formbricks-com/app/docs/self-hosting/from-source/page.mdx index f6209619e7..c306c28d31 100644 --- a/apps/formbricks-com/app/docs/self-hosting/from-source/page.mdx +++ b/apps/formbricks-com/app/docs/self-hosting/from-source/page.mdx @@ -29,7 +29,7 @@ Ensure `docker` & `docker compose` are installed on your server/system. Both are -2. **Modify the `.env.docker` file as required by your setup.**
This file comes with a basic setup and Formbricks works without making any changes to the file. To enable email sending functionality you need to configure the SMTP settings. If you configured your email credentials, you can also comment the following lines to enable email verification (`# EMAIL_VERIFICATION_DISABLED=1`) and password reset (`# PASSWORD_RESET_DISABLED=1`) +2. **Modify the environment variables in your `docker-compose.yml` file as required by your setup.**
This file comes with a basic setup and Formbricks works without making any changes to the file. To enable email sending functionality you need to configure the SMTP settings. If you configured your email credentials, you can also comment the following lines to enable email verification (`# NEXT_PUBLIC_EMAIL_VERIFICATION_DISABLED=1`) and password reset (`# NEXT_PUBLIC_PASSWORD_RESET_DISABLED=1`) ## Editing a NEXT_PUBLIC_* variable? @@ -38,12 +38,26 @@ Ensure `docker` & `docker compose` are installed on your server/system. Both are to take effect. -3. **Start the docker compose process.**
Finally start the docker compose process to build and spin up the Formbricks container as well as the PostgreSQL database.
_Use docker-compose if you are on an older docker version_ +3. **Generate NextAuth Secret** + + Next, you need to generate a NextAuth secret. This will be used for session signing and encryption. The `sed` command below generates a random string using `openssl`, then replaces the `NEXTAUTH_SECRET:` placeholder in the `docker-compose.yml` file with this generated secret: + + + + ```bash + sed -i "/x-nextauth-secret: &nextauth_secret/s/RANDOM_STRING/$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32)/" docker-compose.yml + ``` + + + +4. **Start the docker compose process.**
Finally start the docker compose process to build and spin up the Formbricks container as well as the PostgreSQL database.
_Use docker-compose if you are on an older docker version_ + + We pass the `--env-file /dev/null` flag to docker-compose to prevent it from reading the .env file. This is because we're using environment variables directly in the docker-compose.yml file as the env file is currently in a format not well recognised by docker systems. ```bash - docker compose up -d + docker compose --env-file /dev/null up ``` @@ -59,7 +73,6 @@ These variables must also be provided at runtime. | WEBAPP_URL | Base URL of the site. | required | `http://localhost:3000` | | SURVEY_BASE_URL | Base URL of the link surveys. | required | `http://localhost:3000/s/` | | DATABASE_URL | Database URL with credentials. | required | `postgresql://postgres:postgres@postgres:5432/formbricks?schema=public` | -| PRISMA_GENERATE_DATAPROXY | Enables a dedicated connection pool for Prisma using Prisma Data Proxy. Uncomment to enable. | optional | | | NEXTAUTH_SECRET | Secret for NextAuth, used for session signing and encryption. | required | (Generated by the user) | | NEXTAUTH_URL | Location of the auth server. By default, this is the Formbricks docker instance itself. | required | `http://localhost:3000` | | PRIVACY_URL | URL for privacy policy. | optional | | diff --git a/apps/formbricks-com/app/docs/self-hosting/migrating-to-1.1/page.mdx b/apps/formbricks-com/app/docs/self-hosting/migrating-to-1.1/page.mdx index 7d3ab4f1b2..d17cbca6e8 100644 --- a/apps/formbricks-com/app/docs/self-hosting/migrating-to-1.1/page.mdx +++ b/apps/formbricks-com/app/docs/self-hosting/migrating-to-1.1/page.mdx @@ -75,12 +75,6 @@ x-environment: &environment # PostgreSQL DB for Formbricks to connect to DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" - # Uncomment to enable a dedicated connection pool for Prisma using Prisma Data Proxy - # Cold boots will be faster and you'll be able to scale your DB independently of your app. - # @see https://www.prisma.io/docs/data-platform/data-proxy/use-data-proxy - # PRISMA_GENERATE_DATAPROXY=true - PRISMA_GENERATE_DATAPROXY: - # NextJS Auth # @see: https://next-auth.js.org/configuration/options#nextauth_secret # You can use: `openssl rand -base64 32` to generate one diff --git a/apps/formbricks-com/package.json b/apps/formbricks-com/package.json index 338b344d89..02dd69fc34 100644 --- a/apps/formbricks-com/package.json +++ b/apps/formbricks-com/package.json @@ -29,7 +29,7 @@ "@sindresorhus/slugify": "^2.2.1", "@tailwindcss/typography": "^0.5.10", "@types/node": "20.6.0", - "@types/react-highlight-words": "^0.16.4", + "@types/react-highlight-words": "^0.16.5", "acorn": "^8.10.0", "autoprefixer": "^10.4.15", "clsx": "^2.0.0", diff --git a/apps/formbricks-com/pages/api/oss-friends/index.ts b/apps/formbricks-com/pages/api/oss-friends/index.ts index 4a3f61c6e2..d126595f4f 100644 --- a/apps/formbricks-com/pages/api/oss-friends/index.ts +++ b/apps/formbricks-com/pages/api/oss-friends/index.ts @@ -64,6 +64,12 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) "Open-source authentication and user management for the passkey era. Integrated in minutes, for web and mobile apps.", href: "https://www.hanko.io", }, + { + name: "Hook0", + description: + "Open-Source Webhooks-as-a-service (WaaS) that makes it easy for developers to send webhooks.", + href: "https://www.hook0.com/", + }, { name: "HTMX", description: diff --git a/apps/formbricks-com/pages/formtribe/index.tsx b/apps/formbricks-com/pages/formtribe/index.tsx index 9a993efd3f..a4561aa022 100644 --- a/apps/formbricks-com/pages/formtribe/index.tsx +++ b/apps/formbricks-com/pages/formtribe/index.tsx @@ -267,12 +267,12 @@ const FAQ = [ const Leaderboard = [ { name: "Piyush", - points: "550", + points: "1250", link: "https://github.com/gupta-piyush19", }, { name: "Suman", - points: "200", + points: "600", }, { name: "Subhdeep", @@ -360,20 +360,20 @@ const Leaderboard = [ }, { name: "Aditya Deshlahre", - points: "550", + points: "820", link: "https://github.com/adityadeshlahre", }, { name: "Rutam", - points: "350", + points: "805", }, { name: "Sagnik Sahoo", - points: "100", + points: "250", }, { name: "Prasoon Mahawar", - points: "100", + points: "500", }, { name: "Dushmanta", @@ -409,8 +409,28 @@ const Leaderboard = [ }, { name: "Rajarshi Misra", + points: "300", + }, + { + name: "Anjaneya Gupta", + points: "300", + }, + { + name: "Sachin Kuber", points: "100", }, + { + name: "Manpreet Singh", + points: "100", + }, + { + name: "Vaibhav Gupta", + points: "100", + }, + { + name: "maciek", + points: "300", + }, ]; export default function FormTribeHackathon() { diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 131bfe5631..95bd1168d1 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -1,11 +1,17 @@ FROM node:18-alpine AS installer RUN corepack enable && corepack prepare pnpm@latest --activate +ARG DATABASE_URL +ENV DATABASE_URL=$DATABASE_URL + +ARG NEXTAUTH_SECRET +ENV NEXTAUTH_SECRET=$NEXTAUTH_SECRET + WORKDIR /app COPY . . -# Copy .env file because Docker don't follow symlinks -COPY .env.docker /app/apps/web/.env +RUN touch /app/apps/web/.env + RUN pnpm install @@ -34,13 +40,13 @@ COPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/publ COPY --from=installer --chown=nextjs:nodejs /app/packages/database/schema.prisma ./packages/database/schema.prisma COPY --from=installer --chown=nextjs:nodejs /app/packages/database/migrations ./packages/database/migrations -ENV NEXTAUTH_SECRET=$NEXTAUTH_SECRET - EXPOSE 3000 +ENV HOSTNAME "0.0.0.0" + CMD if [ "$NEXTAUTH_SECRET" != "RANDOM_STRING" ]; then \ pnpm dlx prisma migrate deploy && node apps/web/server.js; \ else \ - echo "ERROR: Please set a value for NEXTAUTH_SECRET in .env.docker!"; \ + echo "ERROR: Please set a value for NEXTAUTH_SECRET in your docker compose variables!"; \ exit 1; \ fi diff --git a/apps/web/app/(app)/environments/[environmentId]/actions.ts b/apps/web/app/(app)/environments/[environmentId]/actions.ts index ed9c7fc822..bd1091ffab 100644 --- a/apps/web/app/(app)/environments/[environmentId]/actions.ts +++ b/apps/web/app/(app)/environments/[environmentId]/actions.ts @@ -2,17 +2,33 @@ import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; import { prisma } from "@formbricks/database"; +import { SHORT_SURVEY_BASE_URL, SURVEY_BASE_URL } from "@formbricks/lib/constants"; import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; import { createMembership } from "@formbricks/lib/membership/service"; import { createProduct } from "@formbricks/lib/product/service"; -import { createTeam, getTeamByEnvironmentId } from "@formbricks/lib/team/service"; +import { createShortUrl } from "@formbricks/lib/shortUrl/service"; import { canUserAccessSurvey } from "@formbricks/lib/survey/auth"; import { deleteSurvey, getSurvey } from "@formbricks/lib/survey/service"; -import { AuthorizationError, ResourceNotFoundError } from "@formbricks/types/v1/errors"; +import { createTeam, getTeamByEnvironmentId } from "@formbricks/lib/team/service"; +import { AuthenticationError, AuthorizationError, ResourceNotFoundError } from "@formbricks/types/v1/errors"; import { Team } from "@prisma/client"; import { Prisma as prismaClient } from "@prisma/client/"; import { getServerSession } from "next-auth"; +export const createShortUrlAction = async (url: string) => { + const session = await getServerSession(authOptions); + if (!session) throw new AuthenticationError("Not authenticated"); + + const regexPattern = new RegExp("^" + SURVEY_BASE_URL); + const isValidUrl = regexPattern.test(url); + + if (!isValidUrl) throw new Error("Only Formbricks survey URLs are allowed"); + + const shortUrl = await createShortUrl(url); + const fullShortUrl = SHORT_SURVEY_BASE_URL + shortUrl.id; + return fullShortUrl; +}; + export async function createTeamAction(teamName: string): Promise { const session = await getServerSession(authOptions); if (!session) throw new AuthorizationError("Not authorized"); diff --git a/apps/web/app/(app)/environments/[environmentId]/AddProductModal.tsx b/apps/web/app/(app)/environments/[environmentId]/components/AddProductModal.tsx similarity index 100% rename from apps/web/app/(app)/environments/[environmentId]/AddProductModal.tsx rename to apps/web/app/(app)/environments/[environmentId]/components/AddProductModal.tsx diff --git a/apps/web/app/(app)/environments/[environmentId]/EnvironmentsNavbar.tsx b/apps/web/app/(app)/environments/[environmentId]/components/EnvironmentsNavbar.tsx similarity index 89% rename from apps/web/app/(app)/environments/[environmentId]/EnvironmentsNavbar.tsx rename to apps/web/app/(app)/environments/[environmentId]/components/EnvironmentsNavbar.tsx index 1468ed030d..7bf21db525 100644 --- a/apps/web/app/(app)/environments/[environmentId]/EnvironmentsNavbar.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/components/EnvironmentsNavbar.tsx @@ -1,7 +1,7 @@ export const revalidate = REVALIDATION_INTERVAL; -import Navigation from "@/app/(app)/environments/[environmentId]/Navigation"; -import { IS_FORMBRICKS_CLOUD, REVALIDATION_INTERVAL } from "@formbricks/lib/constants"; +import Navigation from "@/app/(app)/environments/[environmentId]/components/Navigation"; +import { IS_FORMBRICKS_CLOUD, REVALIDATION_INTERVAL, SURVEY_BASE_URL } from "@formbricks/lib/constants"; import { getEnvironment, getEnvironments } from "@formbricks/lib/environment/service"; import { getProducts } from "@formbricks/lib/product/service"; import { getTeamByEnvironmentId, getTeamsByUserId } from "@formbricks/lib/team/service"; @@ -43,6 +43,7 @@ export default async function EnvironmentsNavbar({ environmentId, session }: Env environments={environments} session={session} isFormbricksCloud={IS_FORMBRICKS_CLOUD} + surveyBaseUrl={SURVEY_BASE_URL} /> ); } diff --git a/apps/web/app/(app)/environments/[environmentId]/NavbarLoading.tsx b/apps/web/app/(app)/environments/[environmentId]/components/NavbarLoading.tsx similarity index 100% rename from apps/web/app/(app)/environments/[environmentId]/NavbarLoading.tsx rename to apps/web/app/(app)/environments/[environmentId]/components/NavbarLoading.tsx diff --git a/apps/web/app/(app)/environments/[environmentId]/Navigation.tsx b/apps/web/app/(app)/environments/[environmentId]/components/Navigation.tsx similarity index 97% rename from apps/web/app/(app)/environments/[environmentId]/Navigation.tsx rename to apps/web/app/(app)/environments/[environmentId]/components/Navigation.tsx index 00a054f784..447dbd0045 100644 --- a/apps/web/app/(app)/environments/[environmentId]/Navigation.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/components/Navigation.tsx @@ -17,6 +17,7 @@ import { DropdownMenuTrigger, } from "@/components/shared/DropdownMenu"; import CreateTeamModal from "@/components/team/CreateTeamModal"; +import UrlShortenerModal from "./UrlShortenerModal"; import { formbricksLogout } from "@/lib/formbricks"; import { capitalizeFirstLetter, truncate } from "@/lib/utils"; import formbricks from "@formbricks/js"; @@ -52,6 +53,7 @@ import { PlusIcon, UserCircleIcon, UsersIcon, + LinkIcon, } from "@heroicons/react/24/solid"; import clsx from "clsx"; import { MenuIcon } from "lucide-react"; @@ -71,6 +73,7 @@ interface NavigationProps { products: TProduct[]; environments: TEnvironment[]; isFormbricksCloud: boolean; + surveyBaseUrl: string; } export default function Navigation({ @@ -81,6 +84,7 @@ export default function Navigation({ products, environments, isFormbricksCloud, + surveyBaseUrl, }: NavigationProps) { const router = useRouter(); const pathname = usePathname(); @@ -89,6 +93,7 @@ export default function Navigation({ const [widgetSetupCompleted, setWidgetSetupCompleted] = useState(false); const [showAddProductModal, setShowAddProductModal] = useState(false); const [showCreateTeamModal, setShowCreateTeamModal] = useState(false); + const [showLinkShortenerModal, setShowLinkShortenerModal] = useState(false); const product = products.find((product) => product.id === environment.productId); const [mobileNavMenuOpen, setMobileNavMenuOpen] = useState(false); @@ -185,6 +190,14 @@ export default function Navigation({ href: `/environments/${environment.id}/settings/setup`, hidden: widgetSetupCompleted, }, + { + icon: LinkIcon, + label: "Link Shortener", + href: pathname, + onClick: () => { + setShowLinkShortenerModal(true); + }, + }, { icon: CodeBracketIcon, label: "Developer Docs", @@ -441,7 +454,7 @@ export default function Navigation({ (link) => !link.hidden && ( - +
{link.label} @@ -489,6 +502,11 @@ export default function Navigation({ environmentId={environment.id} /> setShowCreateTeamModal(val)} /> + setShowLinkShortenerModal(val)} + surveyBaseUrl={surveyBaseUrl} + /> )} diff --git a/apps/web/app/(app)/environments/[environmentId]/ResponseFilterContext.tsx b/apps/web/app/(app)/environments/[environmentId]/components/ResponseFilterContext.tsx similarity index 100% rename from apps/web/app/(app)/environments/[environmentId]/ResponseFilterContext.tsx rename to apps/web/app/(app)/environments/[environmentId]/components/ResponseFilterContext.tsx diff --git a/apps/web/app/(app)/environments/[environmentId]/components/UrlShortenerModal.tsx b/apps/web/app/(app)/environments/[environmentId]/components/UrlShortenerModal.tsx new file mode 100644 index 0000000000..9f828720a9 --- /dev/null +++ b/apps/web/app/(app)/environments/[environmentId]/components/UrlShortenerModal.tsx @@ -0,0 +1,152 @@ +import Modal from "@/components/shared/Modal"; +import { Button, Input, Label } from "@formbricks/ui"; +import { LinkIcon } from "@heroicons/react/24/outline"; +import clsx from "clsx"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import toast from "react-hot-toast"; +import { createShortUrlAction } from "../actions"; + +type UrlShortenerModalProps = { + open: boolean; + setOpen: (v: boolean) => void; + surveyBaseUrl: string; +}; +type UrlShortenerFormDataProps = { + url: string; +}; +type UrlValidationState = "default" | "valid" | "invalid"; + +export default function UrlShortenerModal({ open, setOpen, surveyBaseUrl }: UrlShortenerModalProps) { + const [urlValidationState, setUrlValidationState] = useState("default"); + const [shortUrl, setShortUrl] = useState(""); + const { + register, + handleSubmit, + watch, + formState: { isSubmitting }, + } = useForm({ + mode: "onSubmit", + defaultValues: { + url: "", + }, + }); + + const handleUrlValidation = () => { + const value = watch("url").trim(); + if (!value) { + setUrlValidationState("default"); + return; + } + + const regexPattern = new RegExp("^" + surveyBaseUrl); + const isValid = regexPattern.test(value); + if (!isValid) { + setUrlValidationState("invalid"); + toast.error("Only formbricks survey links allowed."); + } else { + setUrlValidationState("valid"); + } + }; + + const shortenUrl = async (data: UrlShortenerFormDataProps) => { + if (urlValidationState !== "valid") return; + + const shortUrl = await createShortUrlAction(data.url.trim()); + setShortUrl(shortUrl); + }; + + const resetForm = () => { + setUrlValidationState("default"); + setShortUrl(""); + }; + + const copyShortUrlToClipboard = () => { + navigator.clipboard.writeText(shortUrl); + toast.success("URL copied to clipboard!"); + }; + + return ( + { + setOpen(v); + resetForm(); + }} + noPadding + closeOnOutsideClick={false}> +
+
+
+
+
+ +
+
+
URL shortener
+
+ Create a short URL to make URL params less obvious. +
+
+
+
+
+
+
+ +
+ + +
+
+
+
+ +
+ { + if (shortUrl) { + copyShortUrlToClipboard(); + } + }}> + {shortUrl} + + +
+
+
+
+ ); +} diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/webhooks/actions.ts b/apps/web/app/(app)/environments/[environmentId]/integrations/webhooks/actions.ts index e62860046c..9c5fe1f0fd 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/webhooks/actions.ts +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/webhooks/actions.ts @@ -1,16 +1,33 @@ "use server"; +import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; import { createWebhook, deleteWebhook, updateWebhook } from "@formbricks/lib/webhook/service"; import { TWebhook, TWebhookInput } from "@formbricks/types/v1/webhooks"; +import { getServerSession } from "next-auth"; +import { AuthorizationError } from "@formbricks/types/v1/errors"; +import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; +import { canUserAccessWebhook } from "@formbricks/lib/webhook/auth"; export const createWebhookAction = async ( environmentId: string, webhookInput: TWebhookInput ): Promise => { + const session = await getServerSession(authOptions); + if (!session) throw new AuthorizationError("Not authorized"); + + const isAuthorized = await hasUserEnvironmentAccess(session.user.id, environmentId); + if (!isAuthorized) throw new AuthorizationError("Not authorized"); + return await createWebhook(environmentId, webhookInput); }; export const deleteWebhookAction = async (id: string): Promise => { + const session = await getServerSession(authOptions); + if (!session) throw new AuthorizationError("Not authorized"); + + const isAuthorized = await canUserAccessWebhook(session.user.id, id); + if (!isAuthorized) throw new AuthorizationError("Not authorized"); + return await deleteWebhook(id); }; @@ -19,5 +36,11 @@ export const updateWebhookAction = async ( webhookId: string, webhookInput: Partial ): Promise => { + const session = await getServerSession(authOptions); + if (!session) throw new AuthorizationError("Not authorized"); + + const isAuthorized = await canUserAccessWebhook(session.user.id, webhookId); + if (!isAuthorized) throw new AuthorizationError("Not authorized"); + return await updateWebhook(environmentId, webhookId, webhookInput); }; diff --git a/apps/web/app/(app)/environments/[environmentId]/layout.tsx b/apps/web/app/(app)/environments/[environmentId]/layout.tsx index 4823a18f26..0cdf5abcd7 100644 --- a/apps/web/app/(app)/environments/[environmentId]/layout.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/layout.tsx @@ -1,10 +1,10 @@ -import EnvironmentsNavbar from "@/app/(app)/environments/[environmentId]/EnvironmentsNavbar"; +import EnvironmentsNavbar from "@/app/(app)/environments/[environmentId]/components/EnvironmentsNavbar"; import ToasterClient from "@/components/ToasterClient"; import { getServerSession } from "next-auth"; import { redirect } from "next/navigation"; import { authOptions } from "@/app/api/auth/[...nextauth]/authOptions"; import FormbricksClient from "../../FormbricksClient"; -import { ResponseFilterProvider } from "@/app/(app)/environments/[environmentId]/ResponseFilterContext"; +import { ResponseFilterProvider } from "@/app/(app)/environments/[environmentId]/components/ResponseFilterContext"; import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; import { IS_FORMBRICKS_CLOUD } from "@formbricks/lib/constants"; import { AuthorizationError } from "@formbricks/types/v1/errors"; diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx index eb638264af..55cfa09712 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx @@ -4,7 +4,7 @@ import SummaryHeader from "@/app/(app)/environments/[environmentId]/surveys/[sur import SurveyResultsTabs from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/components/SurveyResultsTabs"; import ResponseTimeline from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseTimeline"; import ContentWrapper from "@/components/shared/ContentWrapper"; -import { useResponseFilter } from "@/app/(app)/environments/[environmentId]/ResponseFilterContext"; +import { useResponseFilter } from "@/app/(app)/environments/[environmentId]/components/ResponseFilterContext"; import { getFilterResponses } from "@/lib/surveys/surveys"; import { TResponse } from "@formbricks/types/v1/responses"; import { TSurvey } from "@formbricks/types/v1/surveys"; diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx index 98bd5601be..b2e6defa7d 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx @@ -6,7 +6,7 @@ import SurveyResultsTabs from "@/app/(app)/environments/[environmentId]/surveys/ import SummaryList from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryList"; import SummaryMetadata from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryMetadata"; import ContentWrapper from "@/components/shared/ContentWrapper"; -import { useResponseFilter } from "@/app/(app)/environments/[environmentId]/ResponseFilterContext"; +import { useResponseFilter } from "@/app/(app)/environments/[environmentId]/components/ResponseFilterContext"; import { getFilterResponses } from "@/lib/surveys/surveys"; import { TResponse } from "@formbricks/types/v1/responses"; import { TSurveyWithAnalytics } from "@formbricks/types/v1/surveys"; diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/CustomFilter.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/CustomFilter.tsx index d87bcf1dc2..ebc25ecb15 100755 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/CustomFilter.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/CustomFilter.tsx @@ -23,7 +23,10 @@ import { TResponse } from "@formbricks/types/v1/responses"; import { TSurvey } from "@formbricks/types/v1/surveys"; import { createId } from "@paralleldrive/cuid2"; import ResponseFilter from "./ResponseFilter"; -import { DateRange, useResponseFilter } from "@/app/(app)/environments/[environmentId]/ResponseFilterContext"; +import { + DateRange, + useResponseFilter, +} from "@/app/(app)/environments/[environmentId]/components/ResponseFilterContext"; import { TTag } from "@formbricks/types/v1/tags"; enum DateSelected { diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/ResponseFilter.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/ResponseFilter.tsx index 45c8db087b..cf532da34e 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/ResponseFilter.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/ResponseFilter.tsx @@ -1,6 +1,6 @@ "use client"; -import { useResponseFilter } from "@/app/(app)/environments/[environmentId]/ResponseFilterContext"; +import { useResponseFilter } from "@/app/(app)/environments/[environmentId]/components/ResponseFilterContext"; import QuestionFilterComboBox from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/QuestionFilterComboBox"; import { TSurveyQuestionType } from "@formbricks/types/v1/surveys"; import { Button, Checkbox, Popover, PopoverContent, PopoverTrigger } from "@formbricks/ui"; diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx index 7b2b177bf1..5a389b2eaa 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/QuestionCard.tsx @@ -244,24 +244,9 @@ export default function QuestionCard({ { - const trimmedValue = e.target.value.trim(); // Remove spaces from the start and end - const hasInternalSpaces = /\S\s\S/.test(trimmedValue); // Test if there are spaces between words - - if ( - !trimmedValue.includes(" ") && - (trimmedValue === "" || hasInternalSpaces || !/\s/.test(trimmedValue)) - ) { - updateQuestion(questionIdx, { backButtonLabel: trimmedValue }); - } - }} + onChange={(e) => updateQuestion(questionIdx, { buttonLabel: e.target.value })} />
@@ -269,11 +254,6 @@ export default function QuestionCard({ updateQuestion(questionIdx, { backButtonLabel: e.target.value })} - className={cn( - isInValid && - question.backButtonLabel?.trim() === "" && - "border border-red-600 focus:border-red-600" - )} /> )} @@ -284,11 +264,6 @@ export default function QuestionCard({ updateQuestion(questionIdx, { backButtonLabel: e.target.value })} - className={cn( - isInValid && - question.backButtonLabel?.trim() === "" && - "border border-red-600 focus:border-red-600" - )} /> )} diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx index 3291268377..eb604942cd 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/SurveyMenuBar.tsx @@ -98,7 +98,6 @@ export default function SurveyMenuBar({ }; const validateSurvey = (survey) => { - const existingLogicConditions = new Set(); const existingQuestionIds = new Set(); if (survey.questions.length === 0) { @@ -123,6 +122,8 @@ export default function SurveyMenuBar({ } for (const question of survey.questions) { + const existingLogicConditions = new Set(); + if (existingQuestionIds.has(question.id)) { toast.error("There are 2 identical question IDs. Please update one."); return false; diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts index 09eb880cf7..125098f640 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/Validation.ts @@ -18,12 +18,7 @@ const validationRules = { return question.label.trim() !== ""; }, defaultValidation: (question: TSurveyQuestion) => { - console.log(question); - return ( - question.headline.trim() !== "" && - question.buttonLabel?.trim() !== "" && - question.backButtonLabel?.trim() !== "" - ); + return question.headline.trim() !== ""; }, }; diff --git a/apps/web/app/i/[shortUrlId]/loading.tsx b/apps/web/app/i/[shortUrlId]/loading.tsx new file mode 100644 index 0000000000..0ef174a70e --- /dev/null +++ b/apps/web/app/i/[shortUrlId]/loading.tsx @@ -0,0 +1,10 @@ +export default function Loading() { + return ( +
+
+
+
+
+
+ ); +} diff --git a/apps/web/app/i/[shortUrlId]/page.tsx b/apps/web/app/i/[shortUrlId]/page.tsx new file mode 100644 index 0000000000..98d4d81961 --- /dev/null +++ b/apps/web/app/i/[shortUrlId]/page.tsx @@ -0,0 +1,29 @@ +import { notFound, redirect } from "next/navigation"; +import { getShortUrl } from "@formbricks/lib/shortUrl/service"; +import { ZShortUrlId } from "@formbricks/types/v1/shortUrl"; + +export default async function ShortUrlPage({ params }) { + if (!params.shortUrlId) { + notFound(); + } + + if (ZShortUrlId.safeParse(params.shortUrlId).success !== true) { + // return not found if unable to parse short url id + notFound(); + } + + let shortUrl; + + try { + shortUrl = await getShortUrl(params.shortUrlId); + } catch (error) { + console.error(error.message); + } + + if (shortUrl) { + redirect(shortUrl.url); + } + + // return not found if short url not found + notFound(); +} diff --git a/apps/web/app/s/[surveyId]/not-found.tsx b/apps/web/app/s/[surveyId]/not-found.tsx index 1ba1493d17..cd077a9041 100644 --- a/apps/web/app/s/[surveyId]/not-found.tsx +++ b/apps/web/app/s/[surveyId]/not-found.tsx @@ -12,7 +12,7 @@ export default function NotFound() {
,

Survey not found.

-

There is not survey with this ID.

+

There is no survey with this ID.

diff --git a/apps/web/env.mjs b/apps/web/env.mjs index 4264843f21..bed57c7429 100644 --- a/apps/web/env.mjs +++ b/apps/web/env.mjs @@ -9,7 +9,6 @@ export const env = createEnv({ server: { WEBAPP_URL: z.string().url().optional(), DATABASE_URL: z.string().url(), - PRISMA_GENERATE_DATAPROXY: z.enum(["true", ""]).optional(), NEXTAUTH_SECRET: z.string().min(1), NEXTAUTH_URL: z.string().url().optional(), MAIL_FROM: z.string().email().optional(), @@ -48,7 +47,8 @@ export const env = createEnv({ INVITE_DISABLED: z.enum(["1", "0"]).optional(), IS_FORMBRICKS_CLOUD: z.enum(["1", "0"]).optional(), VERCEL_URL: z.string().optional(), - SURVEY_BASE_URL: z.string().optional(), + SURVEY_BASE_URL: z.string().url().optional(), + SHORT_SURVEY_BASE_URL: z.string().url().optional().or(z.string().length(0)), GOOGLE_SHEETS_CLIENT_ID: z.string().optional(), GOOGLE_SHEETS_CLIENT_SECRET: z.string().optional(), GOOGLE_SHEETS_REDIRECT_URL: z.string().optional(), @@ -81,7 +81,6 @@ export const env = createEnv({ runtimeEnv: { WEBAPP_URL: process.env.WEBAPP_URL, DATABASE_URL: process.env.DATABASE_URL, - PRISMA_GENERATE_DATAPROXY: process.env.PRISMA_GENERATE_DATAPROXY, NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET, NEXTAUTH_URL: process.env.NEXTAUTH_URL, MAIL_FROM: process.env.MAIL_FROM, @@ -118,6 +117,7 @@ export const env = createEnv({ FORMBRICKS_ENCRYPTION_KEY: process.env.FORMBRICKS_ENCRYPTION_KEY, VERCEL_URL: process.env.VERCEL_URL, SURVEY_BASE_URL: process.env.SURVEY_BASE_URL, + SHORT_SURVEY_BASE_URL: process.env.SHORT_SURVEY_BASE_URL, NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN, }, }); diff --git a/apps/web/lib/surveys/surveys.ts b/apps/web/lib/surveys/surveys.ts index df09243857..3a4db673fc 100644 --- a/apps/web/lib/surveys/surveys.ts +++ b/apps/web/lib/surveys/surveys.ts @@ -1,7 +1,7 @@ import { DateRange, SelectedFilterValue, -} from "@/app/(app)/environments/[environmentId]/ResponseFilterContext"; +} from "@/app/(app)/environments/[environmentId]/components/ResponseFilterContext"; import { OptionsType, QuestionOptions, diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index 69786c062e..c3d216f5a1 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -4,10 +4,8 @@ import { createId } from "@paralleldrive/cuid2"; /** @type {import('next').NextConfig} */ -const isCloud = process.env.IS_FORMBRICKS_CLOUD === "1"; - const nextConfig = { - assetPrefix: isCloud ? process.env.WEBAPP_URL : undefined, + assetPrefix: process.env.ASSET_PREFIX_URL || undefined, output: "standalone", experimental: { serverActions: true, diff --git a/apps/web/package.json b/apps/web/package.json index 9ac218fb07..ed461ca138 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@formbricks/web", - "version": "1.0.3", + "version": "1.1.0", "private": true, "scripts": { "clean": "rimraf .turbo node_modules .next", @@ -26,25 +26,25 @@ "@radix-ui/react-collapsible": "^1.0.3", "@react-email/components": "^0.0.7", "@radix-ui/react-dropdown-menu": "^2.0.6", - "@sentry/nextjs": "^7.72.0", - "@t3-oss/env-nextjs": "^0.6.1", + "@sentry/nextjs": "^7.73.0", + "@t3-oss/env-nextjs": "^0.7.0", "bcryptjs": "^2.4.3", "encoding": "^0.1.13", - "eslint-config-next": "^13.5.3", + "eslint-config-next": "^13.5.4", "googleapis": "^126.0.1", "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", - "lucide-react": "^0.279.0", - "next": "13.5.3", - "next-auth": "^4.23.1", + "lucide-react": "^0.284.0", + "next": "13.5.4", + "next-auth": "^4.23.2", "nodemailer": "^6.9.5", - "posthog-js": "^1.81.1", + "posthog-js": "^1.82.1", "prismjs": "^1.29.0", "react": "18.2.0", "react-beautiful-dnd": "^13.1.1", "react-dom": "18.2.0", - "react-email": "^1.9.4", - "react-hook-form": "^7.46.2", + "react-email": "^1.9.5", + "react-hook-form": "^7.47.0", "react-hot-toast": "^2.4.1", "react-icons": "^4.11.0", "swr": "^2.2.4", @@ -55,7 +55,7 @@ "@formbricks/tsconfig": "workspace:*", "@types/bcryptjs": "^2.4.4", "@types/lodash": "^4.14.199", - "@types/markdown-it": "^13.0.1", + "@types/markdown-it": "^13.0.2", "eslint-config-formbricks": "workspace:*" } } diff --git a/docker-compose.yml b/docker-compose.yml index 7136ede5ce..b15febe476 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,83 @@ version: "3.3" + +# If you already have a local .env then please run this using +# docker compose --env-file /dev/null up + +# This should be the same as below if you are running via docker compose up +x-webapp-url: &webapp_url http://localhost:3000 + +# PostgreSQL DB for Formbricks to connect to +x-database-url: &database_url postgresql://postgres:postgres@postgres:5432/formbricks?schema=public + +# NextJS Auth +# @see: https://next-auth.js.org/configuration/options#nextauth_secret +# You can use: `openssl rand -base64 32` to generate one +x-nextauth-secret: &nextauth_secret luJthrnoDpVgGakjVYlccsZ1FdlwxIWogWIsrxzoQ6E= + +# Set this to your public-facing URL, e.g., https://example.com +# You do not need the NEXTAUTH_URL environment variable in Vercel. +x-nextauth-url: &nextauth_url http://localhost:3000 + +# Encryption key +# You can use: `openssl rand -base64 16` to generate one +x-formbricks-encryption-key: &formbricks_encryption_key + +# Necessary if email verification and password reset are enabled. +# See further below if you want to disable these features. +x-mail-from: &mail_from +x-smtp-host: &smtp_host +x-smtp-port: &smtp_port +# Enable SMTP_SECURE_ENABLED for TLS (port 465) +x-smtp-secure-enabled: &smtp_secure_enabled +x-smtp-user: &smtp_user +x-smtp-password: &smtp_password + +# Set the below value to your public-facing URL, e.g., https://example.com +x-survey-base-url: &survey_base_url http://localhost:3000/s + +# Set the below value if you have and want to share a shorter base URL than the x-survey-base-url +x-short-survey-base-url: &short_survey_base_url + +# Email Verification. If you enable Email Verification you have to setup SMTP-Settings, too. +x-email-verification-disabled: &email_verification_disabled 1 + +# Password Reset. If you enable Password Reset functionality you have to setup SMTP-Settings, too. +x-password-reset-disabled: &password_reset_disabled 1 + +# Signup. Disable the ability for new users to create an account. +x-signup-disabled: &signup_disabled 0 + +# Team Invite. Disable the ability for invited users to create an account. +x-invite-disabled: &invite_disabled 0 + +# Set the below values to display privacy policy, imprint and terms of service links in the footer of signup & public pages. +x-privacy-url: &privacy_url +x-terms-url: &terms_url +x-imprint-url: &imprint_url + + +# Configure Github Login +x-github-auth-enabled: &github_auth_enabled 0 +x-github-id: &github_id +x-github-secret: &github_secret + +# Configure Google Login +x-google-auth-enabled: &google_auth_enabled 0 +x-google-client-id: &google_client_id +x-google-client-secret: &google_client_secret + +# Disable Sentry warning +x-sentry-ignore-api-resolution-error: &sentry_ignore_api_resolution_error + +# Enable Sentry Error Tracking +x-next-public-sentry-dsn: &next_public_sentry_dsn + +# Cron Secret +x-cron-secret: &cron_secret + +# Configure ASSET_PREFIX_URL when you want to ship JS & CSS files from a complete URL instead of the current domain +x-asset-prefix-url: &asset_prefix_url + services: postgres: restart: always @@ -13,13 +92,47 @@ services: build: context: . dockerfile: ./apps/web/Dockerfile + args: + DATABASE_URL: *database_url + NEXTAUTH_SECRET: *nextauth_secret + depends_on: - postgres - env_file: - - .env.docker ports: - 3000:3000 + environment: + WEBAPP_URL: *webapp_url + DATABASE_URL: *database_url + NEXTAUTH_SECRET: *nextauth_secret + NEXTAUTH_URL: *nextauth_url + MAIL_FROM: *mail_from + SMTP_HOST: *smtp_host + SMTP_PORT: *smtp_port + SMTP_SECURE_ENABLED: *smtp_secure_enabled + SMTP_USER: *smtp_user + SMTP_PASSWORD: *smtp_password + FORMBRICKS_ENCRYPTION_KEY: *formbricks_encryption_key + SURVEY_BASE_URL: *survey_base_url + SHORT_SURVEY_BASE_URL: *short_survey_base_url + PRIVACY_URL: *privacy_url + TERMS_URL: *terms_url + IMPRINT_URL: *imprint_url + EMAIL_VERIFICATION_DISABLED: *email_verification_disabled + PASSWORD_RESET_DISABLED: *password_reset_disabled + SIGNUP_DISABLED: *signup_disabled + INVITE_DISABLED: *invite_disabled + SENTRY_IGNORE_API_RESOLUTION_ERROR: *sentry_ignore_api_resolution_error + NEXT_PUBLIC_SENTRY_DSN: *next_public_sentry_dsn + GITHUB_AUTH_ENABLED: *github_auth_enabled + GITHUB_ID: *github_id + GITHUB_SECRET: *github_secret + GOOGLE_AUTH_ENABLED: *google_auth_enabled + GOOGLE_CLIENT_ID: *google_client_id + GOOGLE_CLIENT_SECRET: *google_client_secret + CRON_SECRET: *cron_secret + ASSET_PREFIX_URL: *asset_prefix_url + volumes: postgres: driver: local diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index f71b963e33..2a138d228e 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -7,12 +7,6 @@ x-environment: &environment # PostgreSQL DB for Formbricks to connect to DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" - # Uncomment to enable a dedicated connection pool for Prisma using Prisma Data Proxy - # Cold boots will be faster and you'll be able to scale your DB independently of your app. - # @see https://www.prisma.io/docs/data-platform/data-proxy/use-data-proxy - # PRISMA_GENERATE_DATAPROXY=true - PRISMA_GENERATE_DATAPROXY: - # NextJS Auth # @see: https://next-auth.js.org/configuration/options#nextauth_secret # You can use: `openssl rand -base64 32` to generate one @@ -22,6 +16,10 @@ x-environment: &environment # You do not need the NEXTAUTH_URL environment variable in Vercel. NEXTAUTH_URL: http://localhost:3000 + # Formbricks Encryption Key is used to generate encrypted single use URLs for Link Surveys + # You can use: $(openssl rand -base64 16) to generate one + # FORMBRICKS_ENCRYPTION_KEY: + # PostgreSQL password POSTGRES_PASSWORD: postgres @@ -33,6 +31,12 @@ x-environment: &environment SMTP_USER: SMTP_PASSWORD: + # Set the below value if you want to have another base URL apart from your Domain Name + # SURVEY_BASE_URL: + + # Set the below value if you have and want to use a custom URL for the links created by the Link Shortener + # SHORT_SURVEY_BASE_URL: + # Uncomment the below and set it to 1 to disable Email Verification for new signups # EMAIL_VERIFICATION_DISABLED: @@ -64,6 +68,9 @@ x-environment: &environment # GOOGLE_CLIENT_ID: # GOOGLE_CLIENT_SECRET: + # Configure ASSET_PREFIX_URL when you want to ship JS & CSS files from a complete URL instead of the current domain + # ASSET_PREFIX_URL: *asset_prefix_url + services: postgres: restart: always diff --git a/docker/production.sh b/docker/production.sh index 4b4ff0e604..4a4126b3b9 100644 --- a/docker/production.sh +++ b/docker/production.sh @@ -161,12 +161,6 @@ x-environment: &environment # PostgreSQL DB for Formbricks to connect to DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public" - # Uncomment to enable a dedicated connection pool for Prisma using Prisma Data Proxy - # Cold boots will be faster and you'll be able to scale your DB independently of your app. - # @see https://www.prisma.io/docs/data-platform/data-proxy/use-data-proxy - # PRISMA_GENERATE_DATAPROXY: true - PRISMA_GENERATE_DATAPROXY: - # NextJS Auth # @see: https://next-auth.js.org/configuration/options#nextauth_secret # You can use: $(openssl rand -base64 32) to generate one @@ -176,12 +170,57 @@ x-environment: &environment # You do not need the NEXTAUTH_URL environment variable in Vercel. NEXTAUTH_URL: "https://$domain_name" + # Formbricks Encryption Key is used to generate encrypted single use URLs for Link Surveys + # You can use: $(openssl rand -base64 16) to generate one + FORMBRICKS_ENCRYPTION_KEY: + # PostgreSQL password POSTGRES_PASSWORD: postgres # Email configuration $email_config + # Set the below value if you want to have another base URL apart from your Domain Name + # SURVEY_BASE_URL: + + # Set the below value if you have and want to use a custom URL for the links created by the Link Shortener + # SHORT_SURVEY_BASE_URL: + + # Uncomment the below and set it to 1 to disable Email Verification for new signups + # EMAIL_VERIFICATION_DISABLED: + + # Uncomment the below and set it to 1 to disable Password Reset + # PASSWORD_RESET_DISABLED: + + # Uncomment the below and set it to 1 to disable Signups + # SIGNUP_DISABLED: + + # Uncomment the below and set it to 1 to disable Invites + # INVITE_DISABLED: + + # Uncomment the below and set a value to have your own Privacy Page URL on the signup & login page + # PRIVACY_URL: + + # Uncomment the below and set a value to have your own Terms Page URL on the auth and the surveys page + # TERMS_URL: + + # Uncomment the below and set a value to have your own Imprint Page URL on the auth and the surveys page + # IMPRINT_URL: + + # Uncomment the below and set to 1 if you want to enable GitHub OAuth + # GITHUB_AUTH_ENABLED: + # GITHUB_ID: + # GITHUB_SECRET: + + # Uncomment the below and set to 1 if you want to enable Google OAuth + # GOOGLE_AUTH_ENABLED: + # GOOGLE_CLIENT_ID: + # GOOGLE_CLIENT_SECRET: + + # Configure ASSET_PREFIX_URL when you want to ship JS & CSS files from a complete URL instead of the current domain + # ASSET_PREFIX_URL: *asset_prefix_url + + services: postgres: restart: always @@ -226,9 +265,16 @@ echo "🚙 Updating NEXTAUTH_SECRET in the Formbricks container..." nextauth_secret=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32) && sed -i "/NEXTAUTH_SECRET:$/s/NEXTAUTH_SECRET:.*/NEXTAUTH_SECRET: $nextauth_secret/" docker-compose.yml echo "🚗 NEXTAUTH_SECRET updated successfully!" +echo "🚙 Updating FORMBRICKS_ENCRYPTION_KEY in the Formbricks container..." +formbricks_encryption_key=$(openssl rand -base64 16 | tr -dc 'a-zA-Z0-9' | head -c 16) && sed -i "/FORMBRICKS_ENCRYPTION_KEY:$/s/FORMBRICKS_ENCRYPTION_KEY:.*/FORMBRICKS_ENCRYPTION_KEY: $formbricks_encryption_key/" docker-compose.yml +echo "🚗 FORMBRICKS_ENCRYPTION_KEY updated successfully!" + + newgrp docker < => { + validateInputs([url, z.string().url()]); + + try { + // Check if an entry with the provided fullUrl already exists. + const existingShortUrl = await getShortUrlByUrl(url); + + if (existingShortUrl) { + return existingShortUrl; + } + + // If an entry with the provided fullUrl does not exist, create a new one. + const id = customAlphabet("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 10)(); + + return await prisma.shortUrl.create({ + data: { + id, + url, + }, + }); + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + throw new DatabaseError("Database operation failed"); + } + + throw error; + } +}; + +// Get the full url from short url and return it +export const getShortUrl = async (id: string): Promise => { + validateInputs([id, ZShortUrlId]); + try { + return await prisma.shortUrl.findUnique({ + where: { + id, + }, + }); + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + throw new DatabaseError("Database operation failed"); + } + + throw error; + } +}; + +export const getShortUrlByUrl = async (url: string): Promise => { + validateInputs([url, z.string().url()]); + try { + return await prisma.shortUrl.findUnique({ + where: { + url, + }, + }); + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + throw new DatabaseError("Database operation failed"); + } + + throw error; + } +}; diff --git a/packages/lib/survey/service.ts b/packages/lib/survey/service.ts index c77b937d6b..0d9cde0c72 100644 --- a/packages/lib/survey/service.ts +++ b/packages/lib/survey/service.ts @@ -99,6 +99,9 @@ export const getSurveyWithAnalytics = async (surveyId: string): Promise => { select: selectSurvey, }); } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } if (error instanceof Prisma.PrismaClientKnownRequestError) { throw new DatabaseError("Database operation failed"); } @@ -192,6 +200,9 @@ export const getSurvey = async (surveyId: string): Promise => { const survey = ZSurvey.parse(transformedSurvey); return survey; } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } if (error instanceof z.ZodError) { console.error(JSON.stringify(error.errors, null, 2)); // log the detailed error information } @@ -243,6 +254,9 @@ export const getSurveysByAttributeClassId = async (attributeClassId: string): Pr } return surveys; } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } if (error instanceof z.ZodError) { console.error(JSON.stringify(error.errors, null, 2)); // log the detailed error information } @@ -277,6 +291,9 @@ export const getSurveysByActionClassId = async (actionClassId: string): Promise< } return surveys; } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } if (error instanceof z.ZodError) { console.error(JSON.stringify(error.errors, null, 2)); // log the detailed error information } @@ -297,6 +314,9 @@ export const getSurveys = async (environmentId: string): Promise => { select: selectSurvey, }); } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } if (error instanceof Prisma.PrismaClientKnownRequestError) { throw new DatabaseError("Database operation failed"); } @@ -317,6 +337,9 @@ export const getSurveys = async (environmentId: string): Promise => { } return surveys; } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } if (error instanceof z.ZodError) { console.error(JSON.stringify(error.errors, null, 2)); // log the detailed error information } @@ -353,6 +376,9 @@ export const getSurveysWithAnalytics = async (environmentId: string): Promise): Promise => + await unstable_cache( + async () => { + validateInputs([userId, ZId], [webhookId, ZId]); + + const webhook = await getWebhook(webhookId); + if (!webhook) return false; + + const hasAccessToEnvironment = await hasUserEnvironmentAccess(userId, webhook.environmentId); + if (!hasAccessToEnvironment) return false; + + return true; + }, + [`${userId}-${webhookId}`], + { + revalidate: 30 * 60, // 30 minutes + } + )(); diff --git a/packages/n8n-node/package.json b/packages/n8n-node/package.json index 09ec8a40b3..d96d4956d7 100644 --- a/packages/n8n-node/package.json +++ b/packages/n8n-node/package.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@types/express": "^4.17.18", - "@types/request-promise-native": "~1.0.18", + "@types/request-promise-native": "~1.0.19", "@typescript-eslint/parser": "~6.7", "eslint-plugin-n8n-nodes-base": "^1.16.0", "gulp": "^4.0.2", diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json index e2c1a9e5ac..cd44bdf7d5 100644 --- a/packages/prettier-config/package.json +++ b/packages/prettier-config/package.json @@ -8,6 +8,6 @@ }, "devDependencies": { "prettier": "^3.0.3", - "prettier-plugin-tailwindcss": "^0.5.4" + "prettier-plugin-tailwindcss": "^0.5.5" } } diff --git a/packages/surveys/package.json b/packages/surveys/package.json index 4f8301ae7a..5499c07f93 100644 --- a/packages/surveys/package.json +++ b/packages/surveys/package.json @@ -21,10 +21,10 @@ "autoprefixer": "^10.4.16", "eslint-config-formbricks": "workspace:*", "postcss": "^8.4.31", - "preact": "^10.17.1", + "preact": "^10.18.1", "tailwindcss": "^3.3.3", - "terser": "^5.20.0", + "terser": "^5.21.0", "typescript": "^5.2.2", - "vite": "^4.4.9" + "vite": "^4.4.11" } } diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json index 18668ba3da..1df9c63c86 100644 --- a/packages/tsconfig/package.json +++ b/packages/tsconfig/package.json @@ -7,9 +7,9 @@ "clean": "rimraf node_modules" }, "devDependencies": { - "@types/node": "20.7.0", - "@types/react": "18.2.23", - "@types/react-dom": "18.2.7", + "@types/node": "20.8.2", + "@types/react": "18.2.25", + "@types/react-dom": "18.2.10", "typescript": "5.2.2" } } diff --git a/packages/types/package.json b/packages/types/package.json index 4ca6cd7e68..fecaf76550 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -11,6 +11,6 @@ "@formbricks/tsconfig": "workspace:*" }, "dependencies": { - "zod": "^3.22.3" + "zod": "^3.22.4" } } diff --git a/packages/types/v1/shortUrl.ts b/packages/types/v1/shortUrl.ts new file mode 100644 index 0000000000..5ffd7317c7 --- /dev/null +++ b/packages/types/v1/shortUrl.ts @@ -0,0 +1,14 @@ +import z from "zod"; + +export const ZShortUrlId = z.string().length(10); + +export type TShortUrlId = z.infer; + +export const ZShortUrl = z.object({ + id: ZShortUrlId, + createdAt: z.date(), + updatedAt: z.date(), + url: z.string().url(), +}); + +export type TShortUrl = z.infer; diff --git a/packages/ui/package.json b/packages/ui/package.json index fc19e19002..4eee2a3e8c 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -43,8 +43,8 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.0.0", "cmdk": "^0.2.0", - "lucide-react": "^0.279.0", - "next": "13.5.3", + "lucide-react": "^0.284.0", + "next": "13.5.4", "react-colorful": "^5.6.1", "react-confetti": "^6.1.0", "react-day-picker": "^8.8.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 259452ba58..d730a53372 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -39,8 +39,8 @@ importers: specifier: ^2.0.18 version: 2.0.18(react@18.2.0) next: - specifier: 13.5.3 - version: 13.5.3(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -62,7 +62,7 @@ importers: version: 1.3.0(react-dom@18.2.0)(react@18.2.0) '@docsearch/react': specifier: ^3.5.2 - version: 3.5.2(@algolia/client-search@4.19.1)(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.6.0) + version: 3.5.2(@algolia/client-search@4.19.1)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.6.0) '@formbricks/lib': specifier: workspace:* version: link:../../packages/lib @@ -98,10 +98,10 @@ importers: version: 2.2.2 '@radix-ui/react-slider': specifier: ^1.1.2 - version: 1.1.2(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + version: 1.1.2(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.0.6 - version: 1.0.7(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.7(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@sindresorhus/slugify': specifier: ^2.2.1 version: 2.2.1 @@ -112,7 +112,7 @@ importers: specifier: 20.6.0 version: 20.6.0 '@types/react-highlight-words': - specifier: ^0.16.4 + specifier: ^0.16.5 version: 0.16.5 acorn: specifier: ^8.10.0 @@ -179,7 +179,7 @@ importers: version: 4.11.0(react@18.2.0) react-markdown: specifier: ^8.0.7 - version: 8.0.7(@types/react@18.2.23)(react@18.2.0) + version: 8.0.7(@types/react@18.2.25)(react@18.2.0) react-responsive-embed: specifier: ^2.1.0 version: 2.1.0(prop-types@15.8.1)(react@18.2.0) @@ -212,7 +212,7 @@ importers: version: 5.0.0 zustand: specifier: ^4.4.1 - version: 4.4.1(@types/react@18.2.23)(react@18.2.0) + version: 4.4.1(@types/react@18.2.25)(react@18.2.0) devDependencies: '@formbricks/tsconfig': specifier: workspace:* @@ -269,11 +269,11 @@ importers: specifier: ^0.0.7 version: 0.0.7 '@sentry/nextjs': - specifier: ^7.72.0 - version: 7.72.0(encoding@0.1.13)(next@13.5.3)(react@18.2.0) + specifier: ^7.73.0 + version: 7.73.0(encoding@0.1.13)(next@13.5.4)(react@18.2.0) '@t3-oss/env-nextjs': - specifier: ^0.6.1 - version: 0.6.1(typescript@5.2.2)(zod@3.22.3) + specifier: ^0.7.0 + version: 0.7.0(typescript@5.2.2)(zod@3.22.4) bcryptjs: specifier: ^2.4.3 version: 2.4.3 @@ -281,8 +281,8 @@ importers: specifier: ^0.1.13 version: 0.1.13 eslint-config-next: - specifier: ^13.5.3 - version: 13.5.3(eslint@8.50.0)(typescript@5.2.2) + specifier: ^13.5.4 + version: 13.5.4(eslint@8.50.0)(typescript@5.2.2) googleapis: specifier: ^126.0.1 version: 126.0.1(encoding@0.1.13) @@ -293,20 +293,20 @@ importers: specifier: ^4.17.21 version: 4.17.21 lucide-react: - specifier: ^0.279.0 - version: 0.279.0(react@18.2.0) + specifier: ^0.284.0 + version: 0.284.0(react@18.2.0) next: - specifier: 13.5.3 - version: 13.5.3(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) next-auth: - specifier: ^4.23.1 - version: 4.23.1(next@13.5.3)(nodemailer@6.9.5)(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.23.2 + version: 4.23.2(next@13.5.4)(nodemailer@6.9.5)(react-dom@18.2.0)(react@18.2.0) nodemailer: specifier: ^6.9.5 version: 6.9.5 posthog-js: - specifier: ^1.81.1 - version: 1.81.1 + specifier: ^1.82.1 + version: 1.82.1 prismjs: specifier: ^1.29.0 version: 1.29.0 @@ -320,11 +320,11 @@ importers: specifier: 18.2.0 version: 18.2.0(react@18.2.0) react-email: - specifier: ^1.9.4 - version: 1.9.4(encoding@0.1.13) + specifier: ^1.9.5 + version: 1.9.5(encoding@0.1.13) react-hook-form: - specifier: ^7.46.2 - version: 7.46.2(react@18.2.0) + specifier: ^7.47.0 + version: 7.47.0(react@18.2.0) react-hot-toast: specifier: ^2.4.1 version: 2.4.1(csstype@3.1.1)(react-dom@18.2.0)(react@18.2.0) @@ -351,8 +351,8 @@ importers: specifier: ^4.14.199 version: 4.14.199 '@types/markdown-it': - specifier: ^13.0.1 - version: 13.0.1 + specifier: ^13.0.2 + version: 13.0.2 eslint-config-formbricks: specifier: workspace:* version: link:../../packages/eslint-config-formbricks @@ -373,19 +373,19 @@ importers: version: link:../eslint-config-formbricks tsup: specifier: ^7.2.0 - version: 7.2.0(typescript@5.1.6) + version: 7.2.0(typescript@5.2.2) typescript: - specifier: 5.1.6 - version: 5.1.6 + specifier: 5.2.2 + version: 5.2.2 packages/database: dependencies: '@prisma/client': - specifier: ^5.3.1 - version: 5.3.1(prisma@5.3.1) + specifier: ^5.4.1 + version: 5.4.1(prisma@5.4.1) '@prisma/extension-accelerate': specifier: ^0.6.2 - version: 0.6.2(@prisma/client@5.3.1) + version: 0.6.2(@prisma/client@5.4.1) dotenv-cli: specifier: ^7.3.0 version: 7.3.0 @@ -400,20 +400,20 @@ importers: specifier: workspace:* version: link:../eslint-config-formbricks prisma: - specifier: ^5.3.1 - version: 5.3.1 + specifier: ^5.4.1 + version: 5.4.1 prisma-dbml-generator: specifier: ^0.10.0 version: 0.10.0 prisma-json-types-generator: specifier: ^3.0.1 - version: 3.0.1(prisma@5.3.1)(typescript@5.2.2) + version: 3.0.1(prisma@5.4.1)(typescript@5.2.2) zod: - specifier: ^3.22.3 - version: 3.22.3 + specifier: ^3.22.4 + version: 3.22.4 zod-prisma: specifier: ^0.5.4 - version: 0.5.4(prisma@5.3.1)(zod@3.22.3) + version: 0.5.4(prisma@5.4.1)(zod@3.22.4) packages/ee: dependencies: @@ -421,8 +421,8 @@ importers: specifier: workspace:* version: link:../database stripe: - specifier: ^13.7.0 - version: 13.7.0 + specifier: ^13.8.0 + version: 13.8.0 devDependencies: '@formbricks/tsconfig': specifier: '*' @@ -440,14 +440,14 @@ importers: specifier: ^8.50.0 version: 8.50.0 eslint-config-next: - specifier: ^13.5.3 - version: 13.5.3(eslint@8.50.0)(typescript@5.2.2) + specifier: ^13.5.4 + version: 13.5.4(eslint@8.50.0)(typescript@5.2.2) eslint-config-prettier: specifier: ^9.0.0 version: 9.0.0(eslint@8.50.0) eslint-config-turbo: specifier: latest - version: 1.10.3(eslint@8.50.0) + version: 1.8.8(eslint@8.50.0) eslint-plugin-react: specifier: 7.33.2 version: 7.33.2(eslint@8.50.0) @@ -482,11 +482,11 @@ importers: specifier: ^29.5.5 version: 29.5.5 '@typescript-eslint/eslint-plugin': - specifier: ^6.7.3 - version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) + specifier: ^6.7.4 + version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.50.0)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^6.7.3 - version: 6.7.3(eslint@8.50.0)(typescript@5.2.2) + specifier: ^6.7.4 + version: 6.7.4(eslint@8.50.0)(typescript@5.2.2) babel-jest: specifier: ^29.7.0 version: 29.7.0(@babel/core@7.23.0) @@ -498,7 +498,7 @@ importers: version: link:../eslint-config-formbricks eslint-config-preact: specifier: ^1.3.0 - version: 1.3.0(@typescript-eslint/eslint-plugin@6.7.3)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2) + version: 1.3.0(@typescript-eslint/eslint-plugin@6.7.4)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2) isomorphic-fetch: specifier: ^3.0.0 version: 3.0.0 @@ -513,25 +513,25 @@ importers: version: 3.0.3 jest-preset-preact: specifier: ^4.1.0 - version: 4.1.0(jest@29.7.0)(preact-render-to-string@6.2.1)(preact@10.17.1) + version: 4.1.0(jest@29.7.0)(preact-render-to-string@6.2.2)(preact@10.18.1) microbundle: specifier: ^0.15.1 version: 0.15.1 preact: - specifier: 10.17.1 - version: 10.17.1 + specifier: 10.18.1 + version: 10.18.1 preact-cli: specifier: ^3.5.0 - version: 3.5.0(eslint@8.50.0)(preact-render-to-string@6.2.1)(preact@10.17.1)(typescript@5.2.2) + version: 3.5.0(eslint@8.50.0)(preact-render-to-string@6.2.2)(preact@10.18.1)(typescript@5.2.2) preact-render-to-string: - specifier: ^6.2.1 - version: 6.2.1(preact@10.17.1) + specifier: ^6.2.2 + version: 6.2.2(preact@10.18.1) regenerator-runtime: specifier: ^0.14.0 version: 0.14.0 terser: - specifier: ^5.20.0 - version: 5.20.0 + specifier: ^5.21.0 + version: 5.21.0 packages/lib: dependencies: @@ -553,9 +553,12 @@ importers: markdown-it: specifier: ^13.0.2 version: 13.0.2 + nanoid: + specifier: ^5.0.1 + version: 5.0.1 next-auth: - specifier: ^4.22.3 - version: 4.23.1(next@13.5.3)(nodemailer@6.9.5)(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.23.2 + version: 4.23.2(next@13.5.4)(nodemailer@6.9.5)(react-dom@18.2.0)(react@18.2.0) nodemailer: specifier: ^6.9.5 version: 6.9.5 @@ -585,8 +588,8 @@ importers: specifier: ^4.17.18 version: 4.17.18 '@types/request-promise-native': - specifier: ~1.0.18 - version: 1.0.18 + specifier: ~1.0.19 + version: 1.0.19 '@typescript-eslint/parser': specifier: ~6.7 version: 6.7.0(eslint@8.50.0)(typescript@5.2.2) @@ -609,8 +612,8 @@ importers: specifier: ^3.0.3 version: 3.0.3 prettier-plugin-tailwindcss: - specifier: ^0.5.4 - version: 0.5.4(prettier@3.0.3) + specifier: ^0.5.5 + version: 0.5.5(prettier@3.0.3) packages/surveys: devDependencies: @@ -619,7 +622,7 @@ importers: version: link:../types '@preact/preset-vite': specifier: ^2.5.0 - version: 2.5.0(@babel/core@7.23.0)(preact@10.17.1)(vite@4.4.9) + version: 2.5.0(@babel/core@7.23.0)(preact@10.18.1)(vite@4.4.11) autoprefixer: specifier: ^10.4.16 version: 10.4.16(postcss@8.4.31) @@ -630,20 +633,20 @@ importers: specifier: ^8.4.31 version: 8.4.31 preact: - specifier: ^10.17.1 - version: 10.17.1 + specifier: ^10.18.1 + version: 10.18.1 tailwindcss: specifier: ^3.3.3 version: 3.3.3 terser: - specifier: ^5.20.0 - version: 5.20.0 + specifier: ^5.21.0 + version: 5.21.0 typescript: specifier: ^5.2.2 version: 5.2.2 vite: - specifier: ^4.4.9 - version: 4.4.9(terser@5.20.0) + specifier: ^4.4.11 + version: 4.4.11(terser@5.21.0) packages/tailwind-config: devDependencies: @@ -666,14 +669,14 @@ importers: packages/tsconfig: devDependencies: '@types/node': - specifier: 20.7.0 - version: 20.7.0 + specifier: 20.8.2 + version: 20.8.2 '@types/react': - specifier: 18.2.23 - version: 18.2.23 + specifier: 18.2.25 + version: 18.2.25 '@types/react-dom': - specifier: 18.2.7 - version: 18.2.7 + specifier: 18.2.10 + version: 18.2.10 typescript: specifier: 5.2.2 version: 5.2.2 @@ -681,8 +684,8 @@ importers: packages/types: dependencies: zod: - specifier: ^3.22.3 - version: 3.22.3 + specifier: ^3.22.4 + version: 3.22.4 devDependencies: '@formbricks/tsconfig': specifier: workspace:* @@ -746,7 +749,7 @@ importers: version: 1.0.3(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.0.7 - version: 1.0.7(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.7(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) boring-avatars: specifier: ^1.10.1 version: 1.10.1 @@ -760,11 +763,11 @@ importers: specifier: ^0.2.0 version: 0.2.0(react-dom@18.2.0)(react@18.2.0) lucide-react: - specifier: ^0.279.0 - version: 0.279.0(react@18.2.0) + specifier: ^0.284.0 + version: 0.284.0(react@18.2.0) next: - specifier: 13.5.3 - version: 13.5.3(react-dom@18.2.0)(react@18.2.0) + specifier: 13.5.4 + version: 13.5.4(react-dom@18.2.0)(react@18.2.0) react-colorful: specifier: ^5.6.1 version: 5.6.1(react-dom@18.2.0)(react@18.2.0) @@ -2756,7 +2759,7 @@ packages: resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} dev: false - /@docsearch/react@3.5.2(@algolia/client-search@4.19.1)(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.6.0): + /@docsearch/react@3.5.2(@algolia/client-search@4.19.1)(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.6.0): resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' @@ -2776,7 +2779,7 @@ packages: '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1)(search-insights@2.6.0) '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.19.1)(algoliasearch@4.19.1) '@docsearch/css': 3.5.2 - '@types/react': 18.2.23 + '@types/react': 18.2.25 algoliasearch: 4.19.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -3371,7 +3374,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -3392,14 +3395,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.7.0) + jest-config: 29.7.0(@types/node@20.8.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -3427,7 +3430,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 jest-mock: 29.7.0 dev: true @@ -3461,7 +3464,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 20.7.0 + '@types/node': 20.8.2 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -3494,7 +3497,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 20.7.0 + '@types/node': 20.8.2 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -3582,7 +3585,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.7.0 + '@types/node': 20.8.2 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -3881,12 +3884,11 @@ packages: fs-extra: 8.1.0 dev: true - /@manypkg/find-root@2.1.0: - resolution: {integrity: sha512-NEYRVlZCJYhRTqQURhv+WBpDcvmsp/M423Wcdvggv8lYJYD4GtqnTMLrQaTjA10fYt/PIc3tSdwV+wxJnWqPfQ==} + /@manypkg/find-root@2.2.1: + resolution: {integrity: sha512-34NlypD5mmTY65cFAK7QPgY5Tzt0qXR4ZRXdg97xAlkiLuwXUPBEXy5Hsqzd+7S2acsLxUz6Cs50rlDZQr4xUA==} engines: {node: '>=14.18.0'} dependencies: '@manypkg/tools': 1.1.0 - '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 dev: false @@ -3994,12 +3996,12 @@ packages: resolution: {integrity: sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==} dev: false - /@next/env@13.5.3: - resolution: {integrity: sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==} + /@next/env@13.5.4: + resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==} dev: false - /@next/eslint-plugin-next@13.5.3: - resolution: {integrity: sha512-lbZOoEjzSuTtpk9UgV9rOmxYw+PsSfNR+00mZcInqooiDMZ1u+RqT1YQYLsEZPW1kumZoQe5+exkCBtZ2xn0uw==} + /@next/eslint-plugin-next@13.5.4: + resolution: {integrity: sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==} dependencies: glob: 7.1.7 @@ -4028,8 +4030,8 @@ packages: dev: false optional: true - /@next/swc-darwin-arm64@13.5.3: - resolution: {integrity: sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw==} + /@next/swc-darwin-arm64@13.5.4: + resolution: {integrity: sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -4046,8 +4048,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@13.5.3: - resolution: {integrity: sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ==} + /@next/swc-darwin-x64@13.5.4: + resolution: {integrity: sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -4064,8 +4066,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@13.5.3: - resolution: {integrity: sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA==} + /@next/swc-linux-arm64-gnu@13.5.4: + resolution: {integrity: sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -4082,8 +4084,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@13.5.3: - resolution: {integrity: sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==} + /@next/swc-linux-arm64-musl@13.5.4: + resolution: {integrity: sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -4100,8 +4102,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@13.5.3: - resolution: {integrity: sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==} + /@next/swc-linux-x64-gnu@13.5.4: + resolution: {integrity: sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -4118,8 +4120,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@13.5.3: - resolution: {integrity: sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==} + /@next/swc-linux-x64-musl@13.5.4: + resolution: {integrity: sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -4136,8 +4138,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@13.5.3: - resolution: {integrity: sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==} + /@next/swc-win32-arm64-msvc@13.5.4: + resolution: {integrity: sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -4154,8 +4156,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@13.5.3: - resolution: {integrity: sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ==} + /@next/swc-win32-ia32-msvc@13.5.4: + resolution: {integrity: sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -4172,8 +4174,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@13.5.3: - resolution: {integrity: sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q==} + /@next/swc-win32-x64-msvc@13.5.4: + resolution: {integrity: sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -4433,7 +4435,7 @@ packages: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: true - /@preact/async-loader@3.0.2(preact@10.17.1): + /@preact/async-loader@3.0.2(preact@10.18.1): resolution: {integrity: sha512-nYIdlAGbZ0+0/u5VJxQdLDgNFgEJmNLzctuqnCBZxW/EpLPMg8lcsnRsoXVl+O28ZZYhVhos3XiWM3KtuN0C3Q==} engines: {node: '>=8'} peerDependencies: @@ -4441,10 +4443,10 @@ packages: dependencies: kleur: 4.1.5 loader-utils: 2.0.4 - preact: 10.17.1 + preact: 10.18.1 dev: true - /@preact/preset-vite@2.5.0(@babel/core@7.23.0)(preact@10.17.1)(vite@4.4.9): + /@preact/preset-vite@2.5.0(@babel/core@7.23.0)(preact@10.18.1)(vite@4.4.11): resolution: {integrity: sha512-BUhfB2xQ6ex0yPkrT1Z3LbfPzjpJecOZwQ/xJrXGFSZD84+ObyS//41RdEoQCMWsM0t7UHGaujUxUBub7WM1Jw==} peerDependencies: '@babel/core': 7.x @@ -4453,13 +4455,13 @@ packages: '@babel/core': 7.23.0 '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.23.0) '@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.23.0) - '@prefresh/vite': 2.4.1(preact@10.17.1)(vite@4.4.9) + '@prefresh/vite': 2.4.1(preact@10.18.1)(vite@4.4.11) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.23.0) debug: 4.3.4 kolorist: 1.8.0 resolve: 1.22.2 - vite: 4.4.9(terser@5.20.0) + vite: 4.4.11(terser@5.21.0) transitivePeerDependencies: - preact - supports-color @@ -4473,20 +4475,20 @@ packages: resolution: {integrity: sha512-joAwpkUDwo7ZqJnufXRGzUb+udk20RBgfA8oLPBh5aJH2LeStmV1luBfeJTztPdyCscC2j2SmZ/tVxFRMIxAEw==} dev: true - /@prefresh/core@1.4.1(preact@10.17.1): + /@prefresh/core@1.4.1(preact@10.18.1): resolution: {integrity: sha512-og1vaBj3LMJagVncNrDb37Gqc0cWaUcDbpVt5hZtsN4i2Iwzd/5hyTsDHvlMirhSym3wL9ihU0Xa2VhSaOue7g==} peerDependencies: preact: ^10.0.0 dependencies: - preact: 10.17.1 + preact: 10.18.1 dev: true - /@prefresh/core@1.5.1(preact@10.17.1): + /@prefresh/core@1.5.1(preact@10.18.1): resolution: {integrity: sha512-e0mB0Oxtog6ZpKPDBYbzFniFJDIktuKMzOHp7sguntU+ot0yi6dbhJRE9Css1qf0u16wdSZjpL2W2ODWuU05Cw==} peerDependencies: preact: ^10.0.0 dependencies: - preact: 10.17.1 + preact: 10.18.1 dev: true /@prefresh/utils@1.1.3: @@ -4497,7 +4499,7 @@ packages: resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} dev: true - /@prefresh/vite@2.4.1(preact@10.17.1)(vite@4.4.9): + /@prefresh/vite@2.4.1(preact@10.18.1)(vite@4.4.11): resolution: {integrity: sha512-vthWmEqu8TZFeyrBNc9YE5SiC3DVSzPgsOCp/WQ7FqdHpOIJi7Z8XvCK06rBPOtG4914S52MjG9Ls22eVAiuqQ==} peerDependencies: preact: ^10.4.0 @@ -4505,16 +4507,16 @@ packages: dependencies: '@babel/core': 7.23.0 '@prefresh/babel-plugin': 0.5.0 - '@prefresh/core': 1.5.1(preact@10.17.1) + '@prefresh/core': 1.5.1(preact@10.18.1) '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 - preact: 10.17.1 - vite: 4.4.9(terser@5.20.0) + preact: 10.18.1 + vite: 4.4.11(terser@5.21.0) transitivePeerDependencies: - supports-color dev: true - /@prefresh/webpack@3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.17.1)(webpack@4.46.0): + /@prefresh/webpack@3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.18.1)(webpack@4.46.0): resolution: {integrity: sha512-RiXS/hvXDup5cQw/267kxkKie81kxaAB7SFbkr8ppshobDEzwgUN1tbGbHNx6Uari0Ql2XByC6HIgQGpaq2Q7w==} peerDependencies: '@prefresh/babel-plugin': ^0.4.0 @@ -4522,14 +4524,14 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: '@prefresh/babel-plugin': 0.4.4 - '@prefresh/core': 1.4.1(preact@10.17.1) + '@prefresh/core': 1.4.1(preact@10.18.1) '@prefresh/utils': 1.1.3 - preact: 10.17.1 + preact: 10.18.1 webpack: 4.46.0 dev: true - /@prisma/client@5.3.1(prisma@5.3.1): - resolution: {integrity: sha512-ArOKjHwdFZIe1cGU56oIfy7wRuTn0FfZjGuU/AjgEBOQh+4rDkB6nF+AGHP8KaVpkBIiHGPQh3IpwQ3xDMdO0Q==} + /@prisma/client@5.4.1(prisma@5.4.1): + resolution: {integrity: sha512-xyD0DJ3gRNfLbPsC+YfMBBuLJtZKQfy1OD2qU/PZg+HKrr7SO+09174LMeTlWP0YF2wca9LxtVd4HnAiB5ketQ==} engines: {node: '>=16.13'} requiresBuild: true peerDependencies: @@ -4538,8 +4540,8 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59 - prisma: 5.3.1 + '@prisma/engines-version': 5.4.1-1.2f302df92bd8945e20ad4595a73def5b96afa54f + prisma: 5.4.1 dev: false /@prisma/debug@3.8.1: @@ -4591,8 +4593,8 @@ packages: - supports-color dev: true - /@prisma/engines-version@5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59: - resolution: {integrity: sha512-y5qbUi3ql2Xg7XraqcXEdMHh0MocBfnBzDn5GbV1xk23S3Mq8MGs+VjacTNiBh3dtEdUERCrUUG7Z3QaJ+h79w==} + /@prisma/engines-version@5.4.1-1.2f302df92bd8945e20ad4595a73def5b96afa54f: + resolution: {integrity: sha512-+nUQM/y8C+1GG5Ioeqcu6itFslCfxvQSAUVSMC9XM2G2Fcq0F4Afnp6m0pXF6X6iUBWen7jZBPmM9Qlq4Nr3/A==} dev: false /@prisma/engines@4.6.1: @@ -4600,17 +4602,17 @@ packages: requiresBuild: true dev: true - /@prisma/engines@5.3.1: - resolution: {integrity: sha512-6QkILNyfeeN67BNEPEtkgh3Xo2tm6D7V+UhrkBbRHqKw9CTaz/vvTP/ROwYSP/3JT2MtIutZm/EnhxUiuOPVDA==} + /@prisma/engines@5.4.1: + resolution: {integrity: sha512-vJTdY4la/5V3N7SFvWRmSMUh4mIQnyb/MNoDjzVbh9iLmEC+uEykj/1GPviVsorvfz7DbYSQC4RiwmlEpTEvGA==} requiresBuild: true - /@prisma/extension-accelerate@0.6.2(@prisma/client@5.3.1): + /@prisma/extension-accelerate@0.6.2(@prisma/client@5.4.1): resolution: {integrity: sha512-KIBVPeWt8qaSg7wQ+TXmCVeUDoW75whtXcdS9dbHxRoO2OWFH5I9+qbkHBhx5Wj/h1wQpS8usuxGnsZqiBjUpQ==} engines: {node: '>=16'} peerDependencies: '@prisma/client': '>=4.16.1' dependencies: - '@prisma/client': 5.3.1(prisma@5.3.1) + '@prisma/client': 5.4.1(prisma@5.4.1) dev: false /@prisma/fetch-engine@4.6.1: @@ -4767,18 +4769,18 @@ packages: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collapsible': 1.0.3(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-collection': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-arrow@1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -4792,8 +4794,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -4813,13 +4815,13 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -4839,18 +4841,18 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-collection@1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-collection@1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: '@types/react': '*' @@ -4864,11 +4866,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -4882,7 +4884,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -4892,7 +4894,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -4905,7 +4907,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -4915,7 +4917,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -4961,24 +4963,24 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(react@18.2.0) '@radix-ui/react-focus-scope': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(react@18.2.0) dev: false - /@radix-ui/react-direction@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-direction@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' @@ -4988,7 +4990,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -5008,7 +5010,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==} peerDependencies: '@types/react': '*' @@ -5023,11 +5025,11 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5047,12 +5049,12 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) '@radix-ui/react-menu': 2.0.6(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5107,9 +5109,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5124,7 +5126,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-id@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -5134,8 +5136,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -5153,7 +5155,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5173,21 +5175,21 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(react@18.2.0) '@radix-ui/react-focus-scope': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-roving-focus': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -5209,25 +5211,25 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(react@18.2.0) '@radix-ui/react-focus-scope': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(react@18.2.0) dev: false - /@radix-ui/react-popper@1.1.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==} peerDependencies: '@types/react': '*' @@ -5242,16 +5244,16 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@floating-ui/react-dom': 2.0.0(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5268,7 +5270,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.4(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.4(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==} peerDependencies: '@types/react': '*' @@ -5282,8 +5284,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5301,7 +5303,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-presence@1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -5315,9 +5317,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5334,7 +5336,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-primitive@1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -5348,8 +5350,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5369,15 +5371,15 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-roving-focus': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5397,14 +5399,14 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5425,30 +5427,30 @@ packages: '@babel/runtime': 7.21.0 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-focus-guards': 1.0.1(react@18.2.0) '@radix-ui/react-focus-scope': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-remove-scroll: 2.5.5(react@18.2.0) dev: false - /@radix-ui/react-slider@1.1.2(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-slider@1.1.2(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NKs15MJylfzVsCagVSWKhGGLNR1W9qWs+HtgbmjjVUB3B9+lb3PYoXxVju3kOrpf0VKyVCtZp+iTwVoqpa1Chw==} peerDependencies: '@types/react': '*' @@ -5464,16 +5466,16 @@ packages: '@babel/runtime': 7.21.0 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-collection': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5488,7 +5490,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-slot@1.0.2(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -5498,8 +5500,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -5518,17 +5520,17 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.23)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.25)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-tooltip@1.0.7(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-tooltip@1.0.7(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==} peerDependencies: '@types/react': '*' @@ -5543,18 +5545,18 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-popper': 1.1.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.4(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-popper': 1.1.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.4(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5568,7 +5570,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -5578,7 +5580,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -5592,7 +5594,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -5602,8 +5604,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -5617,7 +5619,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -5627,8 +5629,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false @@ -5641,7 +5643,7 @@ packages: react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -5651,11 +5653,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' @@ -5665,11 +5667,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -5680,11 +5682,11 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.23)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -5694,12 +5696,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.23)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.25)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-visually-hidden@1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: '@types/react': '*' @@ -5713,8 +5715,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.21.0 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.23)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.23 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.2.25)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.25 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -5922,7 +5924,7 @@ packages: glob: 7.2.3 is-reference: 1.2.1 magic-string: 0.25.9 - resolve: 1.22.2 + resolve: 1.22.6 rollup: 2.79.1 dev: true @@ -5964,7 +5966,7 @@ packages: builtin-modules: 3.3.0 deepmerge: 4.2.2 is-module: 1.0.0 - resolve: 1.22.2 + resolve: 1.22.6 rollup: 2.79.1 dev: true @@ -6023,25 +6025,25 @@ packages: selderee: 0.10.0 dev: false - /@sentry-internal/tracing@7.72.0: - resolution: {integrity: sha512-DToryaRSHk9R5RLgN4ktYEXZjQdqncOAWPqyyIurji8lIobXFRfmLtGL1wjoCK6sQNgWsjhSM9kXxwGnva1DNw==} + /@sentry-internal/tracing@7.73.0: + resolution: {integrity: sha512-ig3WL/Nqp8nRQ52P205NaypGKNfIl/G+cIqge9xPW6zfRb5kJdM1YParw9GSJ1SPjEZBkBORGAML0on5H2FILw==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.72.0 - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry/core': 7.73.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 tslib: 2.6.2 dev: false - /@sentry/browser@7.72.0: - resolution: {integrity: sha512-fcFDTzqhPd3VZAmmYW3KvBTBaEfrKjPmRhlAsfhkGWYLCHqVkNtzsFER4cmUNRGNxjyt9tcG3WlTTqgLRucycQ==} + /@sentry/browser@7.73.0: + resolution: {integrity: sha512-e301hUixcJ5+HNKCJwajFF5smF4opXEFSclyWsJuFNufv5J/1C1SDhbwG2JjBt5zzdSoKWJKT1ewR6vpICyoDw==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.72.0 - '@sentry/core': 7.72.0 - '@sentry/replay': 7.72.0 - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry-internal/tracing': 7.73.0 + '@sentry/core': 7.73.0 + '@sentry/replay': 7.73.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 tslib: 2.6.2 dev: false @@ -6062,27 +6064,28 @@ packages: - supports-color dev: false - /@sentry/core@7.72.0: - resolution: {integrity: sha512-G03JdQ5ZsFNRjcNNi+QvCjqOuBvYqU92Gs1T2iK3GE8dSBTu2khThydMpG4xrKZQLIpHOyiIhlFZiuPtZ66W8w==} + /@sentry/core@7.73.0: + resolution: {integrity: sha512-9FEz4Gq848LOgVN2OxJGYuQqxv7cIVw69VlAzWHEm3njt8mjvlTq+7UiFsGRo84+59V2FQuHxzA7vVjl90WfSg==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 tslib: 2.6.2 dev: false - /@sentry/integrations@7.72.0: - resolution: {integrity: sha512-ay2WgLtjsr0WS8+N7i7VmKzondoZRh3ISx8rb91LjmVrDNu8baleZAB59jkKe/JSy0gYh99umJuptc2te/65+A==} + /@sentry/integrations@7.73.0: + resolution: {integrity: sha512-IjVpn4d+aSL9L1Ntu/oAdRwujz4BzzavDsZf96Xgc/AjBnjAEUT+wT1dAwluThfuKDXmWOJHhZ2cHHMfqI+7vw==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry/core': 7.73.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 localforage: 1.10.0 tslib: 2.6.2 dev: false - /@sentry/nextjs@7.72.0(encoding@0.1.13)(next@13.5.3)(react@18.2.0): - resolution: {integrity: sha512-8S7OHPwFUwm2Ci9lC9lIwsXwNzxgq/lS84RDPma2ChPQv8rbxivVtDArQl/jgr4wn6WJ2UyDKsoic+TbgIumNw==} + /@sentry/nextjs@7.73.0(encoding@0.1.13)(next@13.5.4)(react@18.2.0): + resolution: {integrity: sha512-WTTxb3xFFpQ9u8jLx2jXa5oJIlgQs3kQ7wjHoTVOuuk51kB3wtMvq546tA5Kmsgu5uInjznBe4f2qUFYdqiO9Q==} engines: {node: '>=8'} peerDependencies: next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 @@ -6093,16 +6096,16 @@ packages: optional: true dependencies: '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) - '@sentry/core': 7.72.0 - '@sentry/integrations': 7.72.0 - '@sentry/node': 7.72.0 - '@sentry/react': 7.72.0(react@18.2.0) - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 - '@sentry/vercel-edge': 7.72.0 + '@sentry/core': 7.73.0 + '@sentry/integrations': 7.73.0 + '@sentry/node': 7.73.0 + '@sentry/react': 7.73.0(react@18.2.0) + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 + '@sentry/vercel-edge': 7.73.0 '@sentry/webpack-plugin': 1.20.0(encoding@0.1.13) chalk: 3.0.0 - next: 13.5.3(react-dom@18.2.0)(react@18.2.0) + next: 13.5.4(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 rollup: 2.78.0 stacktrace-parser: 0.1.10 @@ -6112,14 +6115,14 @@ packages: - supports-color dev: false - /@sentry/node@7.72.0: - resolution: {integrity: sha512-R5kNCIdaDa92EN6oCLiGJehw5wxayOM53WF60Ap6EJHZb5U8dM2BnODmQ6SCRLNB677p+620oSV6CCU286IleQ==} + /@sentry/node@7.73.0: + resolution: {integrity: sha512-i50bRfmgkRRx0XXUbg9jGD/RuznDJxJXc4rBILhoJuhl+BjRIaoXA3ayplfJn8JLZxsNh75uJaCq4IUK70SORw==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.72.0 - '@sentry/core': 7.72.0 - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry-internal/tracing': 7.73.0 + '@sentry/core': 7.73.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 cookie: 0.5.0 https-proxy-agent: 5.0.1 lru_map: 0.3.3 @@ -6128,49 +6131,49 @@ packages: - supports-color dev: false - /@sentry/react@7.72.0(react@18.2.0): - resolution: {integrity: sha512-BYFO3uyB9FfdUq05NtsS+OfU636HMZ7avbSEALo24x+OPuaD+fCByTdgxYVpDRYrBPa7lALYzCge0PDcGnGiig==} + /@sentry/react@7.73.0(react@18.2.0): + resolution: {integrity: sha512-RCGlxW0Xp5vsC38LGxUO0Xf11LBzfg75VN+KS3D2FS5GXl0R0JwgUyPNVlod7YMCfwytsKGhfP+YpQvHGQAVwg==} engines: {node: '>=8'} peerDependencies: react: 15.x || 16.x || 17.x || 18.x dependencies: - '@sentry/browser': 7.72.0 - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry/browser': 7.73.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 tslib: 2.6.2 dev: false - /@sentry/replay@7.72.0: - resolution: {integrity: sha512-dHH/mYCFBwJ/kYmL9L5KihjwQKcefiuvcH0otHSwKSpbbeEoM/BV+SHQoYGd6OMSYnL9fq1dHfF7Zo26p5Yu0Q==} + /@sentry/replay@7.73.0: + resolution: {integrity: sha512-a8IC9SowBisLYD2IdLkXzx7gN4iVwHDJhQvLp2B8ARs1PyPjJ7gCxSMHeGrYp94V0gOXtorNYkrxvuX8ayPROA==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.72.0 - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry/core': 7.73.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 dev: false - /@sentry/types@7.72.0: - resolution: {integrity: sha512-g6u0mk62yGshx02rfFADIfyR/S9VXcf3RG2qQPuvykrWtOfN/BOTrZypF7I+MiqKwRW76r3Pcu2C/AB+6z9XQA==} + /@sentry/types@7.73.0: + resolution: {integrity: sha512-/v8++bly8jW7r4cP2wswYiiVpn7eLLcqwnfPUMeCQze4zj3F3nTRIKc9BGHzU0V+fhHa3RwRC2ksqTGq1oJMDg==} engines: {node: '>=8'} dev: false - /@sentry/utils@7.72.0: - resolution: {integrity: sha512-o/MtqI7WJXuswidH0bSgBP40KN2lrnyQEIx5uoyJUJi/QEaboIsqbxU62vaFJpde8SYrbA+rTnP3J3ujF2gUag==} + /@sentry/utils@7.73.0: + resolution: {integrity: sha512-h3ZK/qpf4k76FhJV9uiSbvMz3V/0Ovy94C+5/9UgPMVCJXFmVsdw8n/dwANJ7LupVPfYP23xFGgebDMFlK1/2w==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.72.0 + '@sentry/types': 7.73.0 tslib: 2.6.2 dev: false - /@sentry/vercel-edge@7.72.0: - resolution: {integrity: sha512-H2A+59jVKgQ2E4EQh5nFBqfJ0foEGh+aGItdvbq7PcJSI1sosA4sDeY6pQzoFtdMLL23FC7dojOxOI5b3JTtmg==} + /@sentry/vercel-edge@7.73.0: + resolution: {integrity: sha512-5EIJAuHG9w2OBrG76uH51Zlh4SMg3N8n29YiZgOtsBL0FU7AvBpxsIknECmmQOKPFrfCa0ycu2WSWgFXILCYGQ==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.72.0 - '@sentry/types': 7.72.0 - '@sentry/utils': 7.72.0 + '@sentry/core': 7.73.0 + '@sentry/types': 7.73.0 + '@sentry/utils': 7.73.0 tslib: 2.6.2 dev: false @@ -6251,25 +6254,31 @@ packages: dependencies: defer-to-connect: 1.1.3 - /@t3-oss/env-core@0.6.1(typescript@5.2.2)(zod@3.22.3): - resolution: {integrity: sha512-KQD7qEDJtkWIWWmTVjNvk0wnHpkvAQ6CRbUxbWMFNG/fiosBQDQvtRpBNu6USxBscJCoC4z6y7P9MN52/mLOzw==} + /@t3-oss/env-core@0.7.0(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-cgunN82CqgQOOyuMOK/bGtujX5/ooXQTwGMJVWI6mCowq6WE5EgRLOqF/DRcrElI0gSFGA9i9GrxzCnk73HZLQ==} peerDependencies: typescript: '>=4.7.2' zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true dependencies: typescript: 5.2.2 - zod: 3.22.3 + zod: 3.22.4 dev: false - /@t3-oss/env-nextjs@0.6.1(typescript@5.2.2)(zod@3.22.3): - resolution: {integrity: sha512-z1dIC++Vxj9kmzX5nSPfcrCSkszy3dTEPC4Ssx7Ap5AqR3c2Qa7S0xf8axn6coy7D/vCXDAAnHYnCMDhtcY3SQ==} + /@t3-oss/env-nextjs@0.7.0(typescript@5.2.2)(zod@3.22.4): + resolution: {integrity: sha512-rjQIt6P3tac2eRx4BNQLNaJ+AIb2P8wXw4uFvYbEekqMGShikkUALnX3hUn1twYiGVGHXRm6UbU+LqtjIktuGg==} peerDependencies: typescript: '>=4.7.2' zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@t3-oss/env-core': 0.6.1(typescript@5.2.2)(zod@3.22.3) + '@t3-oss/env-core': 0.7.0(typescript@5.2.2)(zod@3.22.4) typescript: 5.2.2 - zod: 3.22.3 + zod: 3.22.4 dev: false /@tailwindcss/forms@0.5.6(tailwindcss@3.3.3): @@ -6358,13 +6367,13 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/bonjour@3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/caseless@0.12.2: @@ -6375,19 +6384,19 @@ packages: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.33 - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/cross-spawn@6.0.2: resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/debug@4.1.7: @@ -6435,7 +6444,7 @@ packages: /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -6452,7 +6461,7 @@ packages: /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/hast@2.3.4: @@ -6464,14 +6473,14 @@ packages: /@types/hoist-non-react-statics@3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} dependencies: - '@types/react': 18.2.23 + '@types/react': 18.2.25 hoist-non-react-statics: 3.3.2 dev: false /@types/http-proxy@1.17.10: resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/is-ci@3.0.0: @@ -6510,7 +6519,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -6530,7 +6539,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 /@types/linkify-it@3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} @@ -6540,8 +6549,8 @@ packages: resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} dev: true - /@types/markdown-it@13.0.1: - resolution: {integrity: sha512-SUEb8Frsxs3D5Gg9xek6i6EG6XQ5s+O+ZdQzIPESZVZw3Pv3CPQfjCJBI+RgqZd1IBeu18S0Rn600qpPnEK37w==} + /@types/markdown-it@13.0.2: + resolution: {integrity: sha512-Tla7hH9oeXHOlJyBFdoqV61xWE9FZf/y2g+gFVwQ2vE1/eBzjUno5JCd3Hdb5oATve5OF6xNjZ/4VIZhVVx+hA==} dependencies: '@types/linkify-it': 3.0.2 '@types/mdurl': 1.0.2 @@ -6580,6 +6589,7 @@ packages: /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true /@types/node@20.6.0: resolution: {integrity: sha512-najjVq5KN2vsH2U/xyh2opaSEz6cZMR2SetLIlxlj08nOcmPOemJmUK2o4kUzfLqfrWE0PIrNeE16XhYDd3nqg==} @@ -6587,6 +6597,10 @@ packages: /@types/node@20.7.0: resolution: {integrity: sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==} + dev: true + + /@types/node@20.8.2: + resolution: {integrity: sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -6614,23 +6628,23 @@ packages: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} dev: true - /@types/react-dom@18.2.7: - resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + /@types/react-dom@18.2.10: + resolution: {integrity: sha512-5VEC5RgXIk1HHdyN1pHlg0cOqnxHzvPGpMMyGAP5qSaDRmyZNDaQ0kkVAkK6NYlDhP6YBID3llaXlmAS/mdgCA==} dependencies: - '@types/react': 18.2.23 + '@types/react': 18.2.25 dev: true /@types/react-highlight-words@0.16.5: resolution: {integrity: sha512-5vUJpVzB3G15nwXB8OEfWgAhEnwAlDXkm8SH6qF8i5jCSTEG2JOygKMJIsvetgYBJS6Sq1I8x3YQcAUDMjKxzg==} dependencies: - '@types/react': 18.2.23 + '@types/react': 18.2.25 dev: false /@types/react-redux@7.1.25: resolution: {integrity: sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==} dependencies: '@types/hoist-non-react-statics': 3.3.1 - '@types/react': 18.2.23 + '@types/react': 18.2.25 hoist-non-react-statics: 3.3.2 redux: 4.2.1 dev: false @@ -6643,15 +6657,15 @@ packages: csstype: 3.1.1 dev: false - /@types/react@18.2.23: - resolution: {integrity: sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA==} + /@types/react@18.2.25: + resolution: {integrity: sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 csstype: 3.1.1 - /@types/request-promise-native@1.0.18: - resolution: {integrity: sha512-tPnODeISFc/c1LjWyLuZUY+Z0uLB3+IMfNoQyDEi395+j6kTFTTRAqjENjoPJUid4vHRGEozoTrcTrfZM+AcbA==} + /@types/request-promise-native@1.0.19: + resolution: {integrity: sha512-i17J9k5KP2PAMEhoYnoDpHzJHS91aIV1lG0gOqNX1G5mm/48Qm01sIb8gCJMQpddwapXM9KpxdWGSggZNMLKDw==} dependencies: '@types/request': 2.48.8 dev: true @@ -6660,7 +6674,7 @@ packages: resolution: {integrity: sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==} dependencies: '@types/caseless': 0.12.2 - '@types/node': 20.7.0 + '@types/node': 20.8.2 '@types/tough-cookie': 4.0.2 form-data: 2.5.1 dev: true @@ -6668,13 +6682,13 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -6697,13 +6711,13 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/sockjs@0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/source-list-map@0.1.2: @@ -6743,7 +6757,7 @@ packages: /@types/webpack-sources@3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 '@types/source-list-map': 0.1.2 source-map: 0.7.4 dev: true @@ -6751,7 +6765,7 @@ packages: /@types/webpack@4.41.33: resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 '@types/tapable': 1.0.8 '@types/uglify-js': 3.17.1 '@types/webpack-sources': 3.2.0 @@ -6762,7 +6776,7 @@ packages: /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 dev: true /@types/yargs-parser@21.0.0: @@ -6775,8 +6789,8 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} + /@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -6787,11 +6801,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.7.3 - '@typescript-eslint/type-utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.3 + '@typescript-eslint/parser': 6.7.4(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/type-utils': 6.7.4(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 debug: 4.3.4 eslint: 8.50.0 graphemer: 1.4.0 @@ -6838,8 +6852,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} + /@typescript-eslint/parser@6.7.4(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -6848,10 +6862,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.7.3 - '@typescript-eslint/types': 6.7.3 - '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.3 + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.4 debug: 4.3.4 eslint: 8.50.0 typescript: 5.2.2 @@ -6882,15 +6896,15 @@ packages: '@typescript-eslint/visitor-keys': 6.7.0 dev: true - /@typescript-eslint/scope-manager@6.7.3: - resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} + /@typescript-eslint/scope-manager@6.7.4: + resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.3 - '@typescript-eslint/visitor-keys': 6.7.3 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 - /@typescript-eslint/type-utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==} + /@typescript-eslint/type-utils@6.7.4(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -6899,8 +6913,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.2.2) debug: 4.3.4 eslint: 8.50.0 ts-api-utils: 1.0.1(typescript@5.2.2) @@ -6924,8 +6938,8 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/types@6.7.3: - resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} + /@typescript-eslint/types@6.7.4: + resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==} engines: {node: ^16.0.0 || >=18.0.0} /@typescript-eslint/typescript-estree@5.54.0(typescript@5.2.2): @@ -6991,8 +7005,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2): - resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} + /@typescript-eslint/typescript-estree@6.7.4(typescript@5.2.2): + resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -7000,8 +7014,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.3 - '@typescript-eslint/visitor-keys': 6.7.3 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/visitor-keys': 6.7.4 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -7050,8 +7064,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==} + /@typescript-eslint/utils@6.7.4(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -7059,9 +7073,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.7.3 - '@typescript-eslint/types': 6.7.3 - '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.4 + '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) eslint: 8.50.0 semver: 7.5.4 transitivePeerDependencies: @@ -7093,11 +7107,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@6.7.3: - resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} + /@typescript-eslint/visitor-keys@6.7.4: + resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/types': 6.7.4 eslint-visitor-keys: 3.4.3 /@webassemblyjs/ast@1.11.1: @@ -8184,7 +8198,7 @@ packages: dependencies: '@babel/runtime': 7.21.0 cosmiconfig: 7.1.0 - resolve: 1.22.2 + resolve: 1.22.6 dev: true /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.23.0): @@ -8873,10 +8887,6 @@ packages: lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001523: - resolution: {integrity: sha512-I5q5cisATTPZ1mc588Z//pj/Ox80ERYDfR71YnvY7raS/NOk8xXlZcB0sF7JdqaV//kOaa6aus7lRfpdnt1eBA==} - dev: false - /caniuse-lite@1.0.30001540: resolution: {integrity: sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw==} @@ -9763,7 +9773,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 - jest-config: 29.7.0(@types/node@20.7.0) + jest-config: 29.7.0(@types/node@20.8.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -11450,8 +11460,8 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@13.5.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-VN2qbCpq2DMWgs7SVF8KTmc8bVaWz3s4nmcFqRLs7PNBt5AXejOhJuZ4zg2sCEHOvz5RvqdwLeI++NSCV6qHVg==} + /eslint-config-next@13.5.4(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -11459,13 +11469,13 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 13.5.3 + '@next/eslint-plugin-next': 13.5.4 '@rushstack/eslint-patch': 1.5.0 - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.4(eslint@8.50.0)(typescript@5.2.2) eslint: 8.50.0 - eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.28.1)(eslint@8.50.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.50.0) eslint-plugin-react: 7.33.2(eslint@8.50.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) @@ -11474,7 +11484,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@6.7.3)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2): + /eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@6.7.4)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2): resolution: {integrity: sha512-yHYXg5qNzEJd3D/30AmsIW0W8MuY858KpApXp7xxBF08IYUljSKCOqMx+dVucXHQnAm7+11wOnMkgVHIBAechw==} peerDependencies: eslint: 6.x || 7.x || 8.x @@ -11486,7 +11496,7 @@ packages: '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.23.0) eslint: 8.50.0 eslint-plugin-compat: 4.1.2(eslint@8.50.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@6.7.3)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@6.7.4)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2) eslint-plugin-react: 7.33.2(eslint@8.50.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) transitivePeerDependencies: @@ -11509,23 +11519,15 @@ packages: resolution: {integrity: sha512-NB/L/1Y30qyJcG5xZxCJKW/+bqyj+llbcCwo9DEz8bESIP0SLTOQ8T1DWCCFc+wJ61AMEstj4511PSScqMMfCw==} dev: true - /eslint-config-turbo@1.10.3(eslint@8.50.0): - resolution: {integrity: sha512-ggzPfTJfMsMS383oZ4zfTP1zQvyMyiigOQJRUnLt1nqII6SKkTzdKZdwmXRDHU24KFwUfEFtT6c8vnm2VhL0uQ==} + /eslint-config-turbo@1.8.8(eslint@8.50.0): + resolution: {integrity: sha512-+yT22sHOT5iC1sbBXfLIdXfbZuiv9bAyOXsxTxFCWelTeFFnANqmuKB3x274CFvf7WRuZ/vYP/VMjzU9xnFnxA==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 8.50.0 - eslint-plugin-turbo: 1.10.3(eslint@8.50.0) + eslint-plugin-turbo: 1.8.8(eslint@8.50.0) dev: true - /eslint-import-resolver-node@0.3.6: - resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} - dependencies: - debug: 3.2.7 - resolve: 1.22.2 - transitivePeerDependencies: - - supports-color - /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: @@ -11545,16 +11547,16 @@ packages: debug: 4.3.4 enhanced-resolve: 5.12.0 eslint: 8.50.0 - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0) get-tsconfig: 4.4.0 globby: 13.1.2 - is-core-module: 2.11.0 + is-core-module: 2.13.0 is-glob: 4.0.3 synckit: 0.8.4 transitivePeerDependencies: - supports-color - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -11575,7 +11577,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.4(eslint@8.50.0)(typescript@5.2.2) debug: 3.2.7 eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 @@ -11599,7 +11601,7 @@ packages: semver: 7.3.8 dev: true - /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0): + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} peerDependencies: @@ -11609,7 +11611,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': 6.7.4(eslint@8.50.0)(typescript@5.2.2) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.1 @@ -11618,7 +11620,7 @@ packages: doctrine: 2.1.0 eslint: 8.50.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.4)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2)(eslint@8.50.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -11633,7 +11635,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@6.7.3)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2): + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@6.7.4)(eslint@8.50.0)(jest@29.7.0)(typescript@5.2.2): resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -11646,7 +11648,7 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.50.0)(typescript@5.2.2) '@typescript-eslint/experimental-utils': 5.54.0(eslint@8.50.0)(typescript@5.2.2) eslint: 8.50.0 jest: 29.7.0 @@ -11729,8 +11731,8 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.8 - /eslint-plugin-turbo@1.10.3(eslint@8.50.0): - resolution: {integrity: sha512-g3Mnnk7el1FqxHfqbE/MayLvCsYjA/vKmAnUj66kV4AlM7p/EZqdt42NMcMSKtDVEm0w+utQkkzWG2Xsa0Pd/g==} + /eslint-plugin-turbo@1.8.8(eslint@8.50.0): + resolution: {integrity: sha512-zqyTIvveOY4YU5jviDWw9GXHd4RiKmfEgwsjBrV/a965w0PpDwJgEUoSMB/C/dU310Sv9mF3DSdEjxjJLaw6rA==} peerDependencies: eslint: '>6.6.0' dependencies: @@ -12602,8 +12604,8 @@ packages: universalify: 2.0.0 dev: true - /fs-extra@11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.10 @@ -14664,7 +14666,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.0 @@ -14702,7 +14704,7 @@ packages: create-jest: 29.7.0 exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.7.0) + jest-config: 29.7.0(@types/node@20.8.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -14713,7 +14715,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.7.0): + /jest-config@29.7.0(@types/node@20.8.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -14728,7 +14730,7 @@ packages: '@babel/core': 7.23.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 babel-jest: 29.7.0(@babel/core@7.23.0) chalk: 4.1.2 ci-info: 3.7.0 @@ -14821,7 +14823,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -14846,7 +14848,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.5 - '@types/node': 20.7.0 + '@types/node': 20.8.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -14922,7 +14924,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 jest-util: 29.7.0 dev: true @@ -14938,7 +14940,7 @@ packages: jest-resolve: 29.7.0 dev: true - /jest-preset-preact@4.1.0(jest@29.7.0)(preact-render-to-string@6.2.1)(preact@10.17.1): + /jest-preset-preact@4.1.0(jest@29.7.0)(preact-render-to-string@6.2.2)(preact@10.18.1): resolution: {integrity: sha512-2kWg8zQof9bWFSziyD81nn7Kd7vb7AQpzRfwpH5SUlx5ku4ho/nJ4ymVTTSroNzhQMR+TLl690hGDqEO/YSGZA==} peerDependencies: jest: 27.x || 28.x || 29.x @@ -14956,8 +14958,8 @@ packages: jest: 29.7.0 jest-environment-jsdom: 29.7.0 jest-watch-typeahead: 2.2.2(jest@29.7.0) - preact: 10.17.1 - preact-render-to-string: 6.2.1(preact@10.17.1) + preact: 10.18.1 + preact-render-to-string: 6.2.2(preact@10.18.1) transitivePeerDependencies: - bufferutil - canvas @@ -15010,7 +15012,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 @@ -15041,7 +15043,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -15093,7 +15095,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 chalk: 4.1.2 ci-info: 3.7.0 graceful-fs: 4.2.10 @@ -15134,7 +15136,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -15148,7 +15150,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.7.0 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -15160,7 +15162,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -15169,7 +15171,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -15178,7 +15180,7 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15981,8 +15983,8 @@ packages: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: false - /lucide-react@0.279.0(react@18.2.0): - resolution: {integrity: sha512-LJ8g66+Bxc3t3x9vKTeK3wn3xucrOQGfJ9ou9GsBwCt2offsrT2BB90XrTrIzE1noYYDe2O8jZaRHi6sAHXNxw==} + /lucide-react@0.284.0(react@18.2.0): + resolution: {integrity: sha512-dVSMHYAya/TeY3+vsk+VQJEKNQN2AhIo0+Dp09B2qpzvcBuu93H98YZykFcjIAfmanFiDd8nqfXFR38L757cyQ==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: @@ -16420,7 +16422,7 @@ packages: rollup-plugin-typescript2: 0.32.1(rollup@2.79.1)(typescript@4.9.5) rollup-plugin-visualizer: 5.9.0(rollup@2.79.1) sade: 1.8.1 - terser: 5.20.0 + terser: 5.21.0 tiny-glob: 0.2.9 tslib: 2.4.1 typescript: 4.9.5 @@ -17188,6 +17190,12 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /nanoid@5.0.1: + resolution: {integrity: sha512-vWeVtV5Cw68aML/QaZvqN/3QQXc6fBfIieAlu05m7FZW2Dgb+3f0xc0TTxuJW+7u30t7iSDTV/j3kVI0oJqIfQ==} + engines: {node: ^18 || >=20} + hasBin: true + dev: false + /nanomatch@1.2.13: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} engines: {node: '>=0.10.0'} @@ -17233,8 +17241,8 @@ packages: engines: {node: '>=10'} dev: true - /next-auth@4.23.1(next@13.5.3)(nodemailer@6.9.5)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-mL083z8KgRtlrIV6CDca2H1kduWJuK/3pTS0Fe2og15KOm4v2kkLGdSDfc2g+019aEBrJUT0pPW2Xx42ImN1WA==} + /next-auth@4.23.2(next@13.5.4)(nodemailer@6.9.5)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-VRmInu0r/yZNFQheDFeOKtiugu3bt90Po3owAQDnFQ3YLQFmUKgFjcE2+3L0ny5jsJpBXaKbm7j7W2QTc6Ye2A==} peerDependencies: next: ^12.2.5 || ^13 nodemailer: ^6.6.5 @@ -17248,12 +17256,12 @@ packages: '@panva/hkdf': 1.0.2 cookie: 0.5.0 jose: 4.13.1 - next: 13.5.3(react-dom@18.2.0)(react@18.2.0) + next: 13.5.4(react-dom@18.2.0)(react@18.2.0) nodemailer: 6.9.5 oauth: 0.9.15 openid-client: 5.4.0 - preact: 10.17.1 - preact-render-to-string: 5.2.6(preact@10.17.1) + preact: 10.18.1 + preact-render-to-string: 5.2.6(preact@10.18.1) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) uuid: 8.3.2 @@ -17353,8 +17361,8 @@ packages: - babel-plugin-macros dev: false - /next@13.5.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg==} + /next@13.5.4(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==} engines: {node: '>=16.14.0'} hasBin: true peerDependencies: @@ -17368,26 +17376,25 @@ packages: sass: optional: true dependencies: - '@next/env': 13.5.3 + '@next/env': 13.5.4 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001523 - postcss: 8.4.14 + caniuse-lite: 1.0.30001540 + postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) styled-jsx: 5.1.1(react@18.2.0) watchpack: 2.4.0 - zod: 3.21.4 optionalDependencies: - '@next/swc-darwin-arm64': 13.5.3 - '@next/swc-darwin-x64': 13.5.3 - '@next/swc-linux-arm64-gnu': 13.5.3 - '@next/swc-linux-arm64-musl': 13.5.3 - '@next/swc-linux-x64-gnu': 13.5.3 - '@next/swc-linux-x64-musl': 13.5.3 - '@next/swc-win32-arm64-msvc': 13.5.3 - '@next/swc-win32-ia32-msvc': 13.5.3 - '@next/swc-win32-x64-msvc': 13.5.3 + '@next/swc-darwin-arm64': 13.5.4 + '@next/swc-darwin-x64': 13.5.4 + '@next/swc-linux-arm64-gnu': 13.5.4 + '@next/swc-linux-arm64-musl': 13.5.4 + '@next/swc-linux-x64-gnu': 13.5.4 + '@next/swc-linux-x64-musl': 13.5.4 + '@next/swc-win32-arm64-msvc': 13.5.4 + '@next/swc-win32-ia32-msvc': 13.5.4 + '@next/swc-win32-x64-msvc': 13.5.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -17516,7 +17523,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.2 + resolve: 1.22.6 semver: 5.7.2 validate-npm-package-license: 3.0.4 @@ -18697,23 +18704,6 @@ packages: postcss: 8.4.27 yaml: 2.3.1 - /postcss-load-config@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.31 - yaml: 2.3.1 - dev: true - /postcss-loader@4.3.0(postcss@8.4.27)(webpack@4.46.0): resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} engines: {node: '>= 10.13.0'} @@ -19542,8 +19532,8 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 - /posthog-js@1.81.1: - resolution: {integrity: sha512-pQfG9ZGVn3R7Uh1cC/S02trZ6u4TOLs1NhZG3WiNrqMKDA8MJQjZ/PqdkLO0/BeozRBfIbON6pw3xfOIneIclg==} + /posthog-js@1.82.1: + resolution: {integrity: sha512-VqOq11ztae7d8s3cwezct91aeklJGXKRwHw1799F99EzgI+SWtF2tZF2tBvA1Nid0hWBE/R1vUwlO1Qeeb16ng==} dependencies: fflate: 0.4.8 dev: false @@ -19558,7 +19548,7 @@ packages: - debug dev: false - /preact-cli@3.5.0(eslint@8.50.0)(preact-render-to-string@6.2.1)(preact@10.17.1)(typescript@5.2.2): + /preact-cli@3.5.0(eslint@8.50.0)(preact-render-to-string@6.2.2)(preact@10.18.1)(typescript@5.2.2): resolution: {integrity: sha512-x6B3p4aTzI9T1nWrMlXe0itfzJ2h8oC8S5kTJydzikcW/0ORDBSX1M8vT1FmjeLPDlyGvqlrRx1RI17XuxWIOA==} engines: {node: '>=12'} hasBin: true @@ -19588,9 +19578,9 @@ packages: '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.23.0) '@babel/preset-env': 7.22.20(@babel/core@7.23.0) '@babel/preset-typescript': 7.23.0(@babel/core@7.23.0) - '@preact/async-loader': 3.0.2(preact@10.17.1) + '@preact/async-loader': 3.0.2(preact@10.18.1) '@prefresh/babel-plugin': 0.4.4 - '@prefresh/webpack': 3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.17.1)(webpack@4.46.0) + '@prefresh/webpack': 3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.18.1)(webpack@4.46.0) '@types/webpack': 4.41.33 autoprefixer: 10.4.16(postcss@8.4.27) babel-esm-plugin: 0.9.0(webpack@4.46.0) @@ -19628,8 +19618,8 @@ packages: postcss: 8.4.27 postcss-load-config: 3.1.4(postcss@8.4.27) postcss-loader: 4.3.0(postcss@8.4.27)(webpack@4.46.0) - preact: 10.17.1 - preact-render-to-string: 6.2.1(preact@10.17.1) + preact: 10.18.1 + preact-render-to-string: 6.2.2(preact@10.18.1) progress-bar-webpack-plugin: 2.1.0(webpack@4.46.0) promise-polyfill: 8.3.0 prompts: 2.4.2 @@ -19676,26 +19666,26 @@ packages: - webpack-command dev: true - /preact-render-to-string@5.2.6(preact@10.17.1): + /preact-render-to-string@5.2.6(preact@10.18.1): resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==} peerDependencies: preact: '>=10' dependencies: - preact: 10.17.1 + preact: 10.18.1 pretty-format: 3.8.0 dev: false - /preact-render-to-string@6.2.1(preact@10.17.1): - resolution: {integrity: sha512-5t7nFeMUextd53igL3GAakAAMaUD+dVWDHaRYaeh1tbPIjQIBtgJnMw6vf8VS/lviV0ggFtkgebatPxvtJsXyQ==} + /preact-render-to-string@6.2.2(preact@10.18.1): + resolution: {integrity: sha512-YDfXQiVeYZutFR8/DpxLSbW3W6b7GgjBExRBxOOqcjrGq5rA9cziitQdNPMZe4RVMSdfBnf4hYqyeLs/KvtIuA==} peerDependencies: preact: '>=10' dependencies: - preact: 10.17.1 + preact: 10.18.1 pretty-format: 3.8.0 dev: true - /preact@10.17.1: - resolution: {integrity: sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==} + /preact@10.18.1: + resolution: {integrity: sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==} /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} @@ -19744,8 +19734,8 @@ packages: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} engines: {node: '>=4'} - /prettier-plugin-tailwindcss@0.5.4(prettier@3.0.3): - resolution: {integrity: sha512-QZzzB1bID6qPsKHTeA9qPo1APmmxfFrA5DD3LQ+vbTmAnY40eJI7t9Q1ocqel2EKMWNPLJqdTDWZj1hKYgqSgg==} + /prettier-plugin-tailwindcss@0.5.5(prettier@3.0.3): + resolution: {integrity: sha512-voy0CjWv/CM8yeaduv5ZwovovpTGMR5LbzlhGF+LtEvMJt9wBeVTVnW781hL38R/RcDXCJwN2rolsgr94B/n0Q==} engines: {node: '>=14.21.3'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -19890,7 +19880,7 @@ packages: - supports-color dev: true - /prisma-json-types-generator@3.0.1(prisma@5.3.1)(typescript@5.2.2): + /prisma-json-types-generator@3.0.1(prisma@5.4.1)(typescript@5.2.2): resolution: {integrity: sha512-OKQunPOZ5RxRI450VFJqhWpGQQwHoyNTfvYHaUK9/sdf/J/GBvO2KjVk8V9vuYT/VPtyh66+BD3iWqgLTCr8Ag==} engines: {node: '>=14.0'} hasBin: true @@ -19899,20 +19889,20 @@ packages: typescript: ^5.1 dependencies: '@prisma/generator-helper': 5.2.0 - prisma: 5.3.1 + prisma: 5.4.1 tslib: 2.6.2 typescript: 5.2.2 transitivePeerDependencies: - supports-color dev: true - /prisma@5.3.1: - resolution: {integrity: sha512-Wp2msQIlMPHe+5k5Od6xnsI/WNG7UJGgFUJgqv/ygc7kOECZapcSz/iU4NIEzISs3H1W9sFLjAPbg/gOqqtB7A==} + /prisma@5.4.1: + resolution: {integrity: sha512-op9PmU8Bcw5dNAas82wBYTG0yHnpq9/O3bhxbDBrNzwZTwBqsVCxxYRLf6wHNh9HVaDGhgjjHlu1+BcW8qdnBg==} engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 5.3.1 + '@prisma/engines': 5.4.1 /prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} @@ -20236,20 +20226,20 @@ packages: scheduler: 0.23.0 dev: false - /react-email@1.9.4(encoding@0.1.13): - resolution: {integrity: sha512-DNUQb7xzAlMga2ZppG57bnWhJnqOEcTYzxNvLA4IVCiYJkgPNVukFMOZVG2OuQ0W8ddiF6bLZBKDZHnnIenbpw==} + /react-email@1.9.5(encoding@0.1.13): + resolution: {integrity: sha512-c2ubADlAGKAsfmQRDQd0s3/o+wUW/WCVhwiZo+RkUgsP35RhzDBQisFfxHEX8trjNf0eSv4R9g3ASmRF1vAP8A==} engines: {node: '>=16.0.0'} hasBin: true dependencies: '@commander-js/extra-typings': 9.4.1(commander@9.4.1) - '@manypkg/find-root': 2.1.0 + '@manypkg/find-root': 2.2.1 '@octokit/rest': 19.0.7(encoding@0.1.13) '@react-email/render': 0.0.6 chokidar: 3.5.3 commander: 9.4.1 detect-package-manager: 2.0.1 esbuild: 0.16.4 - fs-extra: 11.1.0 + fs-extra: 11.1.1 glob: 8.0.3 log-symbols: 4.1.0 normalize-path: 3.0.0 @@ -20282,8 +20272,8 @@ packages: react: 18.2.0 dev: false - /react-hook-form@7.46.2(react@18.2.0): - resolution: {integrity: sha512-x1DWmHQchV7x2Rq9l99M/cQHC8JGchAnw9Z0uTz5KrPa0bTl/Inm1NR7ceOARfIrkNuQNAhuSuZPYa6k7QYn3Q==} + /react-hook-form@7.47.0(react@18.2.0): + resolution: {integrity: sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg==} engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 @@ -20323,7 +20313,7 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-markdown@8.0.7(@types/react@18.2.23)(react@18.2.0): + /react-markdown@8.0.7(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} peerDependencies: '@types/react': '>=16' @@ -20331,7 +20321,7 @@ packages: dependencies: '@types/hast': 2.3.4 '@types/prop-types': 15.7.5 - '@types/react': 18.2.23 + '@types/react': 18.2.25 '@types/unist': 2.0.6 comma-separated-tokens: 2.0.3 hast-util-whitespace: 2.0.0 @@ -20629,7 +20619,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.2 + resolve: 1.22.6 /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} @@ -21134,7 +21124,7 @@ packages: postcss-load-config: 3.1.4(postcss@8.4.24) postcss-modules: 4.3.1(postcss@8.4.24) promise.series: 0.2.0 - resolve: 1.22.2 + resolve: 1.22.6 rollup-pluginutils: 2.8.2 safe-identifier: 0.4.2 style-inject: 0.3.0 @@ -21152,7 +21142,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.20.0 + terser: 5.21.0 dev: true /rollup-plugin-typescript2@0.32.1(rollup@2.79.1)(typescript@4.9.5): @@ -21164,7 +21154,7 @@ packages: '@rollup/pluginutils': 4.2.1 find-cache-dir: 3.3.2 fs-extra: 10.1.0 - resolve: 1.22.2 + resolve: 1.22.6 rollup: 2.79.1 tslib: 2.6.2 typescript: 4.9.5 @@ -22319,11 +22309,11 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /stripe@13.7.0: - resolution: {integrity: sha512-0cbUNl5aDwt5rIZeE/WgyTxZN/PtwyeA5KcVJrHj260tjN4IOo2BZikN+dxhKoeBfI4aSRAd3E5vHRKmjjaSbA==} + /stripe@13.8.0: + resolution: {integrity: sha512-QFOOeaEwNOAj4k/T9OtSb9sKx9oLVI5y9HrJJn3XN9RJYKGAuE+fMD+rHA5u9ILmf3FDx99jaEvVvykftJtBGA==} engines: {node: '>=12.*'} dependencies: - '@types/node': 20.7.0 + '@types/node': 20.8.2 qs: 6.11.0 dev: false @@ -22765,7 +22755,7 @@ packages: schema-utils: 3.1.1 serialize-javascript: 5.0.1 source-map: 0.6.1 - terser: 5.20.0 + terser: 5.21.0 webpack: 4.46.0 webpack-sources: 1.4.3 transitivePeerDependencies: @@ -22792,7 +22782,7 @@ packages: jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 - terser: 5.20.0 + terser: 5.21.0 webpack: 5.75.0 dev: false @@ -22807,8 +22797,8 @@ packages: source-map-support: 0.5.21 dev: true - /terser@5.20.0: - resolution: {integrity: sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==} + /terser@5.21.0: + resolution: {integrity: sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==} engines: {node: '>=10'} hasBin: true dependencies: @@ -23134,7 +23124,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsup@7.2.0(typescript@5.1.6): + /tsup@7.2.0(typescript@5.2.2): resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} engines: {node: '>=16.14'} hasBin: true @@ -23158,13 +23148,13 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1(postcss@8.4.31) + postcss-load-config: 4.0.1(postcss@8.4.27) resolve-from: 5.0.0 rollup: 3.5.1 source-map: 0.8.0-beta.0 sucrase: 3.32.0 tree-kill: 1.2.2 - typescript: 5.1.6 + typescript: 5.2.2 transitivePeerDependencies: - supports-color - ts-node @@ -23417,12 +23407,6 @@ packages: hasBin: true dev: true - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - /typescript@5.2.2: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} @@ -24142,8 +24126,8 @@ packages: replace-ext: 1.0.1 dev: true - /vite@4.4.9(terser@5.20.0): - resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + /vite@4.4.11(terser@5.21.0): + resolution: {integrity: sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -24173,7 +24157,7 @@ packages: esbuild: 0.18.10 postcss: 8.4.31 rollup: 3.28.1 - terser: 5.20.0 + terser: 5.21.0 optionalDependencies: fsevents: 2.3.2 dev: true @@ -25138,7 +25122,7 @@ packages: readable-stream: 3.6.0 dev: true - /zod-prisma@0.5.4(prisma@5.3.1)(zod@3.22.3): + /zod-prisma@0.5.4(prisma@5.4.1)(zod@3.22.4): resolution: {integrity: sha512-5Ca4Qd1a1jy1T/NqCEpbr0c+EsbjJfJ/7euEHob3zDvtUK2rTuD1Rc/vfzH8q8PtaR2TZbysD88NHmrLwpv3Xg==} engines: {node: '>=14'} hasBin: true @@ -25152,19 +25136,19 @@ packages: dependencies: '@prisma/generator-helper': 3.8.1 parenthesis: 3.1.8 - prisma: 5.3.1 + prisma: 5.4.1 ts-morph: 13.0.3 - zod: 3.22.3 + zod: 3.22.4 dev: true /zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false - /zod@3.22.3: - resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - /zustand@4.4.1(@types/react@18.2.23)(react@18.2.0): + /zustand@4.4.1(@types/react@18.2.25)(react@18.2.0): resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} engines: {node: '>=12.7.0'} peerDependencies: @@ -25179,7 +25163,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.23 + '@types/react': 18.2.25 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false diff --git a/turbo.json b/turbo.json index d192f95f70..d9fa80f804 100644 --- a/turbo.json +++ b/turbo.json @@ -27,9 +27,9 @@ "dependsOn": ["^build"], "outputs": ["dist/**", ".next/**"], "env": [ + "ASSET_PREFIX_URL", "CRON_SECRET", "DEBUG", - "PRISMA_GENERATE_DATAPROXY", "GITHUB_ID", "GITHUB_SECRET", "GOOGLE_CLIENT_ID", @@ -74,6 +74,7 @@ "IMPRINT_URL", "NEXT_PUBLIC_SENTRY_DSN", "SURVEY_BASE_URL", + "SHORT_SURVEY_BASE_URL", "NODE_ENV", "NEXT_PUBLIC_POSTHOG_API_HOST", "NEXT_PUBLIC_POSTHOG_API_KEY", @@ -94,8 +95,7 @@ "cache": false, "dependsOn": [], "outputs": [], - "inputs": ["./schema.prisma"], - "env": ["PRISMA_GENERATE_DATAPROXY"] + "inputs": ["./schema.prisma"] }, "db:setup": { "cache": false,