Invite prefill email (#43)

* Add prepopulation of email field in sign-up form
* Updated packages
This commit is contained in:
Giancarlo Buomprisco
2024-07-11 13:59:14 +08:00
committed by GitHub
parent 4f0e6b9bbb
commit 21f42f14ce
24 changed files with 151 additions and 85 deletions

View File

@@ -20,6 +20,7 @@ import { withI18n } from '~/lib/i18n/with-i18n';
interface Context { interface Context {
searchParams: { searchParams: {
invite_token?: string; invite_token?: string;
email?: string;
}; };
} }
@@ -46,9 +47,15 @@ async function JoinTeamAccountPage({ searchParams }: Context) {
// redirect to the sign up page with the invite token // redirect to the sign up page with the invite token
// so that they will get back to this page after signing up // so that they will get back to this page after signing up
if (auth.error ?? !auth.data) { if (auth.error ?? !auth.data) {
const path = `${pathsConfig.auth.signUp}?invite_token=${token}`; const urlParams = new URLSearchParams({
invite_token: token,
email: searchParams.email ?? '',
});
redirect(path); const signUpPath = `${pathsConfig.auth.signUp}?${urlParams.toString()}`;
// redirect to the sign up page with the invite token
redirect(signUpPath);
} }
// get api to interact with team accounts // get api to interact with team accounts

View File

@@ -52,11 +52,11 @@
"@kit/ui": "workspace:^", "@kit/ui": "workspace:^",
"@makerkit/data-loader-supabase-core": "^0.0.8", "@makerkit/data-loader-supabase-core": "^0.0.8",
"@makerkit/data-loader-supabase-nextjs": "^1.2.3", "@makerkit/data-loader-supabase-nextjs": "^1.2.3",
"@marsidev/react-turnstile": "^0.7.1", "@marsidev/react-turnstile": "^0.7.2",
"@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-icons": "^1.3.0",
"@supabase/supabase-js": "^2.44.3", "@supabase/supabase-js": "^2.44.3",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@tanstack/react-query-next-experimental": "^5.50.1", "@tanstack/react-query-next-experimental": "^5.51.1",
"@tanstack/react-table": "^8.19.2", "@tanstack/react-table": "^8.19.2",
"date-fns": "^3.6.0", "date-fns": "^3.6.0",
"lucide-react": "^0.407.0", "lucide-react": "^0.407.0",

View File

@@ -1,13 +1,13 @@
import { getOrder, getSubscription, getVariant } from '@lemonsqueezy/lemonsqueezy.js'; import {
getOrder,
getSubscription,
getVariant,
} from '@lemonsqueezy/lemonsqueezy.js';
import { BillingConfig, BillingWebhookHandlerService } from '@kit/billing'; import { BillingConfig, BillingWebhookHandlerService } from '@kit/billing';
import { getLogger } from '@kit/shared/logger'; import { getLogger } from '@kit/shared/logger';
import { Database } from '@kit/supabase/database'; import { Database } from '@kit/supabase/database';
import { getLemonSqueezyEnv } from '../schema/lemon-squeezy-server-env.schema'; import { getLemonSqueezyEnv } from '../schema/lemon-squeezy-server-env.schema';
import { OrderWebhook } from '../types/order-webhook'; import { OrderWebhook } from '../types/order-webhook';
import { SubscriptionInvoiceWebhook } from '../types/subscription-invoice-webhook'; import { SubscriptionInvoiceWebhook } from '../types/subscription-invoice-webhook';
@@ -16,7 +16,6 @@ import { initializeLemonSqueezyClient } from './lemon-squeezy-sdk';
import { createLemonSqueezySubscriptionPayloadBuilderService } from './lemon-squeezy-subscription-payload-builder.service'; import { createLemonSqueezySubscriptionPayloadBuilderService } from './lemon-squeezy-subscription-payload-builder.service';
import { createHmac } from './verify-hmac'; import { createHmac } from './verify-hmac';
type UpsertSubscriptionParams = type UpsertSubscriptionParams =
Database['public']['Functions']['upsert_subscription']['Args'] & { Database['public']['Functions']['upsert_subscription']['Args'] & {
line_items: Array<LineItem>; line_items: Array<LineItem>;

View File

@@ -35,7 +35,7 @@
"@kit/ui": "workspace:^", "@kit/ui": "workspace:^",
"@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-icons": "^1.3.0",
"@supabase/supabase-js": "^2.44.3", "@supabase/supabase-js": "^2.44.3",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"lucide-react": "^0.407.0", "lucide-react": "^0.407.0",

View File

@@ -1 +1 @@
export * from './user-workspace-context'; export * from './user-workspace-context';

View File

@@ -22,7 +22,7 @@
"@makerkit/data-loader-supabase-core": "^0.0.8", "@makerkit/data-loader-supabase-core": "^0.0.8",
"@makerkit/data-loader-supabase-nextjs": "^1.2.3", "@makerkit/data-loader-supabase-nextjs": "^1.2.3",
"@supabase/supabase-js": "^2.44.3", "@supabase/supabase-js": "^2.44.3",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@tanstack/react-table": "^8.19.2", "@tanstack/react-table": "^8.19.2",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"lucide-react": "^0.407.0", "lucide-react": "^0.407.0",

View File

@@ -8,7 +8,6 @@ import { Button } from '@kit/ui/button';
import { Heading } from '@kit/ui/heading'; import { Heading } from '@kit/ui/heading';
import { If } from '@kit/ui/if'; import { If } from '@kit/ui/if';
import { ProfileAvatar } from '@kit/ui/profile-avatar'; import { ProfileAvatar } from '@kit/ui/profile-avatar';
import { import {
Table, Table,
TableBody, TableBody,

View File

@@ -26,10 +26,10 @@
"@kit/tailwind-config": "workspace:*", "@kit/tailwind-config": "workspace:*",
"@kit/tsconfig": "workspace:*", "@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:^", "@kit/ui": "workspace:^",
"@marsidev/react-turnstile": "^0.7.1", "@marsidev/react-turnstile": "^0.7.2",
"@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-icons": "^1.3.0",
"@supabase/supabase-js": "^2.44.3", "@supabase/supabase-js": "^2.44.3",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"lucide-react": "^0.407.0", "lucide-react": "^0.407.0",
"next": "14.2.5", "next": "14.2.5",

View File

@@ -28,10 +28,14 @@ export function MagicLinkAuthContainer({
inviteToken, inviteToken,
redirectUrl, redirectUrl,
shouldCreateUser, shouldCreateUser,
defaultValues,
}: { }: {
inviteToken?: string; inviteToken?: string;
redirectUrl: string; redirectUrl: string;
shouldCreateUser: boolean; shouldCreateUser: boolean;
defaultValues?: {
email: string;
};
}) { }) {
const { captchaToken, resetCaptchaToken } = useCaptchaToken(); const { captchaToken, resetCaptchaToken } = useCaptchaToken();
const { t } = useTranslation(); const { t } = useTranslation();
@@ -44,7 +48,7 @@ export function MagicLinkAuthContainer({
}), }),
), ),
defaultValues: { defaultValues: {
email: '', email: defaultValues?.email ?? ''
}, },
}); });

View File

@@ -14,11 +14,16 @@ import { AuthErrorAlert } from './auth-error-alert';
import { PasswordSignUpForm } from './password-sign-up-form'; import { PasswordSignUpForm } from './password-sign-up-form';
interface EmailPasswordSignUpContainerProps { interface EmailPasswordSignUpContainerProps {
defaultValues?: {
email: string;
};
onSignUp?: (userId?: string) => unknown; onSignUp?: (userId?: string) => unknown;
emailRedirectTo: string; emailRedirectTo: string;
} }
export function EmailPasswordSignUpContainer({ export function EmailPasswordSignUpContainer({
defaultValues,
onSignUp, onSignUp,
emailRedirectTo, emailRedirectTo,
}: EmailPasswordSignUpContainerProps) { }: EmailPasswordSignUpContainerProps) {
@@ -72,7 +77,11 @@ export function EmailPasswordSignUpContainer({
<If condition={!showVerifyEmailAlert}> <If condition={!showVerifyEmailAlert}>
<AuthErrorAlert error={signUpMutation.error} /> <AuthErrorAlert error={signUpMutation.error} />
<PasswordSignUpForm onSubmit={onSignupRequested} loading={loading} /> <PasswordSignUpForm
onSubmit={onSignupRequested}
loading={loading}
defaultValues={defaultValues}
/>
</If> </If>
</> </>
); );

View File

@@ -22,9 +22,14 @@ import { Trans } from '@kit/ui/trans';
import { PasswordSignUpSchema } from '../schemas/password-sign-up.schema'; import { PasswordSignUpSchema } from '../schemas/password-sign-up.schema';
export function PasswordSignUpForm({ export function PasswordSignUpForm({
defaultValues,
onSubmit, onSubmit,
loading, loading,
}: { }: {
defaultValues?: {
email: string;
};
onSubmit: (params: { onSubmit: (params: {
email: string; email: string;
password: string; password: string;
@@ -37,7 +42,7 @@ export function PasswordSignUpForm({
const form = useForm({ const form = useForm({
resolver: zodResolver(PasswordSignUpSchema), resolver: zodResolver(PasswordSignUpSchema),
defaultValues: { defaultValues: {
email: '', email: defaultValues?.email ?? '',
password: '', password: '',
repeatPassword: '', repeatPassword: '',
}, },

View File

@@ -27,7 +27,8 @@ export function SignUpMethodsContainer(props: {
inviteToken?: string; inviteToken?: string;
}) { }) {
const redirectUrl = getCallbackUrl(props); const redirectUrl = getCallbackUrl(props);
const defaultValues = getDefaultValues();
return ( return (
<> <>
<If condition={props.inviteToken}> <If condition={props.inviteToken}>
@@ -35,7 +36,10 @@ export function SignUpMethodsContainer(props: {
</If> </If>
<If condition={props.providers.password}> <If condition={props.providers.password}>
<EmailPasswordSignUpContainer emailRedirectTo={redirectUrl} /> <EmailPasswordSignUpContainer
emailRedirectTo={redirectUrl}
defaultValues={defaultValues}
/>
</If> </If>
<If condition={props.providers.magicLink}> <If condition={props.providers.magicLink}>
@@ -43,6 +47,7 @@ export function SignUpMethodsContainer(props: {
inviteToken={props.inviteToken} inviteToken={props.inviteToken}
redirectUrl={redirectUrl} redirectUrl={redirectUrl}
shouldCreateUser={true} shouldCreateUser={true}
defaultValues={defaultValues}
/> />
</If> </If>
@@ -93,6 +98,23 @@ function getCallbackUrl(props: {
return url.href; return url.href;
} }
function getDefaultValues() {
if (!isBrowser()) {
return { email: '' };
}
const searchParams = new URLSearchParams(window.location.search);
const inviteToken = searchParams.get('invite_token');
if (!inviteToken) {
return { email: '' };
}
return {
email: searchParams.get('email') ?? '',
};
}
function InviteAlert() { function InviteAlert() {
return ( return (
<Alert variant={'info'}> <Alert variant={'info'}>

View File

@@ -21,7 +21,7 @@
"@kit/tsconfig": "workspace:*", "@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:*", "@kit/ui": "workspace:*",
"@supabase/supabase-js": "^2.44.3", "@supabase/supabase-js": "^2.44.3",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"lucide-react": "^0.407.0", "lucide-react": "^0.407.0",
"react": "18.3.1", "react": "18.3.1",

View File

@@ -33,7 +33,7 @@
"@kit/tsconfig": "workspace:*", "@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:^", "@kit/ui": "workspace:^",
"@supabase/supabase-js": "^2.44.3", "@supabase/supabase-js": "^2.44.3",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@tanstack/react-table": "^8.19.2", "@tanstack/react-table": "^8.19.2",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",

View File

@@ -5,4 +5,4 @@ export * from './invitations/account-invitations-table';
export * from './settings/team-account-settings-container'; export * from './settings/team-account-settings-container';
export * from './invitations/accept-invitation-container'; export * from './invitations/accept-invitation-container';
export * from './create-team-account-dialog'; export * from './create-team-account-dialog';
export * from './team-account-workspace-context'; export * from './team-account-workspace-context';

View File

@@ -102,9 +102,10 @@ class AccountInvitationsWebhookService {
const { getMailer } = await import('@kit/mailers'); const { getMailer } = await import('@kit/mailers');
const mailer = await getMailer(); const mailer = await getMailer();
const link = this.getInvitationLink(invitation.invite_token, invitation.email);
const { html, subject } = await renderInviteEmail({ const { html, subject } = await renderInviteEmail({
link: this.getInvitationLink(invitation.invite_token), link,
invitedUserEmail: invitation.email, invitedUserEmail: invitation.email,
inviter: inviter.data.name ?? inviter.data.email ?? '', inviter: inviter.data.name ?? inviter.data.email ?? '',
productName: env.productName, productName: env.productName,
@@ -141,7 +142,14 @@ class AccountInvitationsWebhookService {
} }
} }
private getInvitationLink(token: string) { private getInvitationLink(token: string, email: string) {
return new URL(env.invitePath, env.siteURL).href + `?invite_token=${token}`; const searchParams = new URLSearchParams({
invite_token: token,
email,
}).toString();
const href = new URL(env.invitePath, env.siteURL).href;
return `${href}?${searchParams}`;
} }
} }

View File

@@ -21,7 +21,7 @@
"@kit/shared": "workspace:^", "@kit/shared": "workspace:^",
"@kit/tailwind-config": "workspace:*", "@kit/tailwind-config": "workspace:*",
"@kit/tsconfig": "workspace:*", "@kit/tsconfig": "workspace:*",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"react-i18next": "^14.1.2" "react-i18next": "^14.1.2"
}, },
"dependencies": { "dependencies": {

View File

@@ -29,7 +29,7 @@
"@supabase/gotrue-js": "2.64.3", "@supabase/gotrue-js": "2.64.3",
"@supabase/ssr": "^0.4.0", "@supabase/ssr": "^0.4.0",
"@supabase/supabase-js": "^2.44.3", "@supabase/supabase-js": "^2.44.3",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"next": "14.2.5", "next": "14.2.5",
"react": "18.3.1", "react": "18.3.1",

View File

@@ -87,6 +87,12 @@ class AuthCallbackService {
// correct page. // correct page.
url.pathname = params.joinTeamPath; url.pathname = params.joinTeamPath;
searchParams.set('invite_token', inviteToken); searchParams.set('invite_token', inviteToken);
const emailParam = callbackUrl?.searchParams.get('email');
if (emailParam) {
searchParams.set('email', emailParam);
}
} }
if (token_hash && type) { if (token_hash && type) {
@@ -138,7 +144,14 @@ class AuthCallbackService {
// to join a team and we want to make sure they are redirected to the // to join a team and we want to make sure they are redirected to the
// correct page. // correct page.
if (inviteToken) { if (inviteToken) {
nextUrl = `${params.joinTeamPath}?invite_token=${inviteToken}`; const emailParam = searchParams.get('email');
const urlParams = new URLSearchParams({
invite_token: inviteToken,
email: emailParam ?? ''
});
nextUrl = `${params.joinTeamPath}?${urlParams.toString()}`;
} }
if (authCode) { if (authCode) {

View File

@@ -41,7 +41,7 @@
"@kit/tailwind-config": "workspace:*", "@kit/tailwind-config": "workspace:*",
"@kit/tsconfig": "workspace:*", "@kit/tsconfig": "workspace:*",
"@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-icons": "^1.3.0",
"@tanstack/react-query": "5.50.1", "@tanstack/react-query": "5.51.1",
"@tanstack/react-table": "^8.19.2", "@tanstack/react-table": "^8.19.2",
"@types/react": "^18.3.3", "@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",

View File

@@ -22,7 +22,7 @@ export function GlobalLoader({
<If condition={displaySpinner}> <If condition={displaySpinner}>
<div <div
className={ className={
'flex flex-1 flex-col items-center justify-center animate-in fade-in zoom-in-50 slide-in-from-bottom-8' 'flex flex-1 flex-col items-center justify-center duration-500 animate-in fade-in zoom-in-80 slide-in-from-bottom-12'
} }
> >
<LoadingOverlay displayLogo={displayLogo} fullPage={fullPage} /> <LoadingOverlay displayLogo={displayLogo} fullPage={fullPage} />

View File

@@ -12,11 +12,11 @@ import React, {
} from 'react'; } from 'react';
import { Slot, Slottable } from '@radix-ui/react-slot'; import { Slot, Slottable } from '@radix-ui/react-slot';
import { useMutation } from '@tanstack/react-query';
import { Path, UseFormReturn } from 'react-hook-form'; import { Path, UseFormReturn } from 'react-hook-form';
import { z } from 'zod'; import { z } from 'zod';
import { cn } from '../utils'; import { cn } from '../utils';
import {useMutation} from "@tanstack/react-query";
interface MultiStepFormProps<T extends z.ZodType> { interface MultiStepFormProps<T extends z.ZodType> {
schema: T; schema: T;
@@ -287,7 +287,7 @@ export function useMultiStepForm<Schema extends z.ZodType>(
const mutation = useMutation({ const mutation = useMutation({
mutationFn: () => { mutationFn: () => {
return form.handleSubmit(onSubmit)(); return form.handleSubmit(onSubmit)();
} },
}); });
return useMemo( return useMemo(

View File

@@ -165,7 +165,7 @@ function getClassNameBuilder() {
selected: false, selected: false,
complete: false, complete: false,
className: 'bg-muted', className: 'bg-muted',
} },
], ],
defaultVariants: { defaultVariants: {
variant: 'default', variant: 'default',

98
pnpm-lock.yaml generated
View File

@@ -110,10 +110,10 @@ importers:
version: 0.0.8(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3) version: 0.0.8(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)
'@makerkit/data-loader-supabase-nextjs': '@makerkit/data-loader-supabase-nextjs':
specifier: ^1.2.3 specifier: ^1.2.3
version: 1.2.3(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)(@tanstack/react-query@5.50.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 1.2.3(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)(@tanstack/react-query@5.51.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@marsidev/react-turnstile': '@marsidev/react-turnstile':
specifier: ^0.7.1 specifier: ^0.7.2
version: 0.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 0.7.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-icons': '@radix-ui/react-icons':
specifier: ^1.3.0 specifier: ^1.3.0
version: 1.3.0(react@18.3.1) version: 1.3.0(react@18.3.1)
@@ -121,11 +121,11 @@ importers:
specifier: ^2.44.3 specifier: ^2.44.3
version: 2.44.3 version: 2.44.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@tanstack/react-query-next-experimental': '@tanstack/react-query-next-experimental':
specifier: ^5.50.1 specifier: ^5.51.1
version: 5.50.1(@tanstack/react-query@5.50.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 5.51.1(@tanstack/react-query@5.51.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@tanstack/react-table': '@tanstack/react-table':
specifier: ^8.19.2 specifier: ^8.19.2
version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -592,8 +592,8 @@ importers:
specifier: ^2.44.3 specifier: ^2.44.3
version: 2.44.3 version: 2.44.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@types/react': '@types/react':
specifier: ^18.3.3 specifier: ^18.3.3
version: 18.3.3 version: 18.3.3
@@ -662,13 +662,13 @@ importers:
version: 0.0.8(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3) version: 0.0.8(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)
'@makerkit/data-loader-supabase-nextjs': '@makerkit/data-loader-supabase-nextjs':
specifier: ^1.2.3 specifier: ^1.2.3
version: 1.2.3(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)(@tanstack/react-query@5.50.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 1.2.3(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)(@tanstack/react-query@5.51.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@supabase/supabase-js': '@supabase/supabase-js':
specifier: ^2.44.3 specifier: ^2.44.3
version: 2.44.3 version: 2.44.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@tanstack/react-table': '@tanstack/react-table':
specifier: ^8.19.2 specifier: ^8.19.2
version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -721,8 +721,8 @@ importers:
specifier: workspace:^ specifier: workspace:^
version: link:../../ui version: link:../../ui
'@marsidev/react-turnstile': '@marsidev/react-turnstile':
specifier: ^0.7.1 specifier: ^0.7.2
version: 0.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 0.7.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@radix-ui/react-icons': '@radix-ui/react-icons':
specifier: ^1.3.0 specifier: ^1.3.0
version: 1.3.0(react@18.3.1) version: 1.3.0(react@18.3.1)
@@ -730,8 +730,8 @@ importers:
specifier: ^2.44.3 specifier: ^2.44.3
version: 2.44.3 version: 2.44.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@types/react': '@types/react':
specifier: ^18.3.3 specifier: ^18.3.3
version: 18.3.3 version: 18.3.3
@@ -778,8 +778,8 @@ importers:
specifier: ^2.44.3 specifier: ^2.44.3
version: 2.44.3 version: 2.44.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@types/react': '@types/react':
specifier: ^18.3.3 specifier: ^18.3.3
version: 18.3.3 version: 18.3.3
@@ -848,8 +848,8 @@ importers:
specifier: ^2.44.3 specifier: ^2.44.3
version: 2.44.3 version: 2.44.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@tanstack/react-table': '@tanstack/react-table':
specifier: ^8.19.2 specifier: ^8.19.2
version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -918,8 +918,8 @@ importers:
specifier: workspace:* specifier: workspace:*
version: link:../../tooling/typescript version: link:../../tooling/typescript
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
react-i18next: react-i18next:
specifier: ^14.1.2 specifier: ^14.1.2
version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -1041,7 +1041,7 @@ importers:
dependencies: dependencies:
'@sentry/nextjs': '@sentry/nextjs':
specifier: ^8.17.0 specifier: ^8.17.0
version: 8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(next@14.2.5(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1) version: 8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1)
devDependencies: devDependencies:
'@kit/eslint-config': '@kit/eslint-config':
specifier: workspace:* specifier: workspace:*
@@ -1144,8 +1144,8 @@ importers:
specifier: ^2.44.3 specifier: ^2.44.3
version: 2.44.3 version: 2.44.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@types/react': '@types/react':
specifier: ^18.3.3 specifier: ^18.3.3
version: 18.3.3 version: 18.3.3
@@ -1256,8 +1256,8 @@ importers:
specifier: ^1.3.0 specifier: ^1.3.0
version: 1.3.0(react@18.3.1) version: 1.3.0(react@18.3.1)
'@tanstack/react-query': '@tanstack/react-query':
specifier: 5.50.1 specifier: 5.51.1
version: 5.50.1(react@18.3.1) version: 5.51.1(react@18.3.1)
'@tanstack/react-table': '@tanstack/react-table':
specifier: ^8.19.2 specifier: ^8.19.2
version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -1825,8 +1825,8 @@ packages:
react: react:
optional: true optional: true
'@marsidev/react-turnstile@0.7.1': '@marsidev/react-turnstile@0.7.2':
resolution: {integrity: sha512-SGa0cweJ2mP1RRi9oJJrlPpZHvlklLqu8tlXDLEbsQ/WExM8Ng9cr9439lZcnu8+tfeVpQIe8qFB1UU5uE+KlQ==} resolution: {integrity: sha512-0jwLvAUkcLkaYaS6jBOZB3zzUiKi5dU3kZtlaeBX6yV7Y4CbFEtfHCY352ovphNz1v0ZjpOj6+3QUczJvD56VA==}
peerDependencies: peerDependencies:
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1 react-dom: 18.3.1
@@ -3807,18 +3807,18 @@ packages:
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
'@tanstack/query-core@5.50.1': '@tanstack/query-core@5.51.1':
resolution: {integrity: sha512-lpfhKPrJlyV2DSVcQb/HuozH3Av3kws4ge22agx+lNGpFkS4vLZ7St0l3GLwlAD+bqB+qXGex3JdRKUNtMviEQ==} resolution: {integrity: sha512-fJBMQMpo8/KSsWW5ratJR5+IFr7YNJ3K2kfP9l5XObYHsgfVy1w3FJUWU4FT2fj7+JMaEg33zOcNDBo0LMwHnw==}
'@tanstack/react-query-next-experimental@5.50.1': '@tanstack/react-query-next-experimental@5.51.1':
resolution: {integrity: sha512-AgMhRPYbNRvol44orcKcf1KToGJcHTNDcKp7RRkEZ7FBNQZoQeNnWmKQBjaEgrC52mbj6rf5QOy1B2FqFZzQDw==} resolution: {integrity: sha512-0rhmO2ZWx6w5eOiLCIVuayJQAkuVCDOEN+oCU1GDQCLCRhRAt1XWtR706ZNY+cWmQF28AVenNNb3HDKPlC4bwg==}
peerDependencies: peerDependencies:
'@tanstack/react-query': ^5.50.1 '@tanstack/react-query': ^5.51.1
next: ^13 || ^14 || ^15 next: ^13 || ^14 || ^15
react: 18.3.1 react: 18.3.1
'@tanstack/react-query@5.50.1': '@tanstack/react-query@5.51.1':
resolution: {integrity: sha512-s0DW3rVBDPReDDovUjVqItVa3R2nPfUANK9nqGvarO2DwTiY9U4EBTsqizMxItRCoGgK5apeM7D3mxlHrSKpdQ==} resolution: {integrity: sha512-s47HKFnQ4HOJAHoIiXcpna/roMMPZJPy6fJ6p4ZNVn8+/onlLBEDd1+xc8OnDuwgvecqkZD7Z2mnSRbcWefrKw==}
peerDependencies: peerDependencies:
react: 18.3.1 react: 18.3.1
@@ -4854,8 +4854,8 @@ packages:
electron-to-chromium@1.4.812: electron-to-chromium@1.4.812:
resolution: {integrity: sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==} resolution: {integrity: sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==}
electron-to-chromium@1.4.823: electron-to-chromium@1.4.824:
resolution: {integrity: sha512-4h+oPeAiGQOHFyUJOqpoEcPj/xxlicxBzOErVeYVMMmAiXUXsGpsFd0QXBMaUUbnD8hhSfLf9uw+MlsoIA7j5w==} resolution: {integrity: sha512-GTQnZOP1v0wCuoWzKOxL8rurg9T13QRYISkoICGaZzskBf9laC3V8g9BHTpJv+j9vBRcKOulbGXwMzuzNdVrAA==}
emery@1.4.3: emery@1.4.3:
resolution: {integrity: sha512-DrP24dscOZx5BJpOo32X1CjaWgbFojS4sAXKtlmTQmCJ01Vv2brjeWKIS6cQ4Rblt/hZIN+6pdV2L7Y9Rsh8EA==} resolution: {integrity: sha512-DrP24dscOZx5BJpOo32X1CjaWgbFojS4sAXKtlmTQmCJ01Vv2brjeWKIS6cQ4Rblt/hZIN+6pdV2L7Y9Rsh8EA==}
@@ -8416,11 +8416,11 @@ snapshots:
'@supabase/supabase-js': 2.44.3 '@supabase/supabase-js': 2.44.3
ts-case-convert: 2.0.7 ts-case-convert: 2.0.7
'@makerkit/data-loader-supabase-nextjs@1.2.3(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)(@tanstack/react-query@5.50.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': '@makerkit/data-loader-supabase-nextjs@1.2.3(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)(@tanstack/react-query@5.51.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@makerkit/data-loader-supabase-core': 0.0.8(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3) '@makerkit/data-loader-supabase-core': 0.0.8(@supabase/postgrest-js@1.15.8)(@supabase/supabase-js@2.44.3)
'@supabase/supabase-js': 2.44.3 '@supabase/supabase-js': 2.44.3
'@tanstack/react-query': 5.50.1(react@18.3.1) '@tanstack/react-query': 5.51.1(react@18.3.1)
next: 14.2.5(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: 14.2.5(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
transitivePeerDependencies: transitivePeerDependencies:
@@ -8466,7 +8466,7 @@ snapshots:
'@types/react': 18.3.3 '@types/react': 18.3.3
react: 18.3.1 react: 18.3.1
'@marsidev/react-turnstile@0.7.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': '@marsidev/react-turnstile@0.7.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
react: 18.3.1 react: 18.3.1
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
@@ -10817,7 +10817,7 @@ snapshots:
'@sentry/types': 8.17.0 '@sentry/types': 8.17.0
'@sentry/utils': 8.17.0 '@sentry/utils': 8.17.0
'@sentry/nextjs@8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(next@14.2.5(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1)': '@sentry/nextjs@8.17.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(webpack@5.92.1)':
dependencies: dependencies:
'@opentelemetry/instrumentation-http': 0.52.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-http': 0.52.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.25.1 '@opentelemetry/semantic-conventions': 1.25.1
@@ -11011,17 +11011,17 @@ snapshots:
dependencies: dependencies:
defer-to-connect: 2.0.1 defer-to-connect: 2.0.1
'@tanstack/query-core@5.50.1': {} '@tanstack/query-core@5.51.1': {}
'@tanstack/react-query-next-experimental@5.50.1(@tanstack/react-query@5.50.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': '@tanstack/react-query-next-experimental@5.51.1(@tanstack/react-query@5.51.1(react@18.3.1))(next@14.2.5(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies: dependencies:
'@tanstack/react-query': 5.50.1(react@18.3.1) '@tanstack/react-query': 5.51.1(react@18.3.1)
next: 14.2.5(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: 14.2.5(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.45.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@tanstack/react-query@5.50.1(react@18.3.1)': '@tanstack/react-query@5.51.1(react@18.3.1)':
dependencies: dependencies:
'@tanstack/query-core': 5.50.1 '@tanstack/query-core': 5.51.1
react: 18.3.1 react: 18.3.1
'@tanstack/react-table@8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': '@tanstack/react-table@8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
@@ -11721,7 +11721,7 @@ snapshots:
browserslist@4.23.2: browserslist@4.23.2:
dependencies: dependencies:
caniuse-lite: 1.0.30001641 caniuse-lite: 1.0.30001641
electron-to-chromium: 1.4.823 electron-to-chromium: 1.4.824
node-releases: 2.0.14 node-releases: 2.0.14
update-browserslist-db: 1.1.0(browserslist@4.23.2) update-browserslist-db: 1.1.0(browserslist@4.23.2)
@@ -12187,7 +12187,7 @@ snapshots:
electron-to-chromium@1.4.812: {} electron-to-chromium@1.4.812: {}
electron-to-chromium@1.4.823: {} electron-to-chromium@1.4.824: {}
emery@1.4.3: {} emery@1.4.3: {}