From 7f2e2b600fb746cc36c8464629d63ca3aa1a430b Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Tue, 4 Oct 2022 16:13:56 +0300 Subject: [PATCH 01/41] fix(clerk-js): Replace gravatar with Boring avatar --- package-lock.json | 13 ++++++ package.json | 3 ++ packages/clerk-js/src/ui/elements/Avatar.tsx | 44 +++++++++++++------- 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 93a8111b19b..b2e598642bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "@clerk/javascript", "version": "0.0.0", "license": "MIT", + "dependencies": { + "boring-avatars": "^1.7.0" + }, "devDependencies": { "@commitlint/cli": "^16.0.2", "@commitlint/config-conventional": "^16.0.0", @@ -11854,6 +11857,11 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "node_modules/boring-avatars": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/boring-avatars/-/boring-avatars-1.7.0.tgz", + "integrity": "sha512-ZNHd8J7C/V0IjQMGQowLJ5rScEFU23WxePigH6rqKcT2Esf0qhYvYxw8s9i3srmlfCnCV00ddBjaoGey1eNOfA==" + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -47433,6 +47441,11 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "boring-avatars": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/boring-avatars/-/boring-avatars-1.7.0.tgz", + "integrity": "sha512-ZNHd8J7C/V0IjQMGQowLJ5rScEFU23WxePigH6rqKcT2Esf0qhYvYxw8s9i3srmlfCnCV00ddBjaoGey1eNOfA==" + }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", diff --git a/package.json b/package.json index 01068dd68a0..79931b53af6 100644 --- a/package.json +++ b/package.json @@ -49,5 +49,8 @@ "lerna": "lerna", "nuke": "rm -r node_modules; for d in packages/*/node_modules; do echo $d; rm -r $d; done", "yalc:all": "for d in packages/*/; do echo $d; cd $d; yalc push --replace; cd '../../'; done" + }, + "dependencies": { + "boring-avatars": "^1.7.0" } } diff --git a/packages/clerk-js/src/ui/elements/Avatar.tsx b/packages/clerk-js/src/ui/elements/Avatar.tsx index 86508a0a0d3..758d7ab86a8 100644 --- a/packages/clerk-js/src/ui/elements/Avatar.tsx +++ b/packages/clerk-js/src/ui/elements/Avatar.tsx @@ -1,7 +1,8 @@ import { isRetinaDisplay } from '@clerk/shared/utils/isRetinaDisplay'; +import { default as BoringAvatar } from 'boring-avatars'; import React from 'react'; -import { descriptors, Flex, Image, Text } from '../customizables'; +import { descriptors, Flex, Image, Text, useAppearance } from '../customizables'; import { ElementDescriptor } from '../customizables/elementDescriptors'; import { InternalTheme } from '../foundations'; import { common, ThemableCssProp } from '../styledSystem'; @@ -34,14 +35,11 @@ export const Avatar = (props: AvatarProps) => { imageElementDescriptor, } = props; const [error, setError] = React.useState(false); - const initials = getInitials({ firstName, lastName, name }); const fullName = getFullName({ firstName, lastName, name }); const avatarExists = hasAvatar(profileImageUrl); let src; - if (!avatarExists) { - src = GRAVATAR_DEFAULT_AVATAR; - } else if (!optimize && profileImageUrl) { + if (avatarExists && !optimize && profileImageUrl) { const optimizedHeight = Math.max(profileImageFetchSize) * (isRetinaDisplay() ? 2 : 1); const srcUrl = new URL(profileImageUrl); srcUrl.searchParams.append('height', optimizedHeight.toString()); @@ -51,14 +49,14 @@ export const Avatar = (props: AvatarProps) => { } const ImgOrFallback = - initials && (!avatarExists || error) ? ( + !avatarExists || error ? ( <InitialsAvatarFallback {...props} /> ) : ( <Image elementDescriptor={imageElementDescriptor || descriptors.avatarImage} alt={fullName} title={fullName} - src={src || GRAVATAR_DEFAULT_AVATAR} + src={src || (profileImageUrl as string)} width='100%' height='100%' onError={() => setError(true)} @@ -93,21 +91,37 @@ export const Avatar = (props: AvatarProps) => { function InitialsAvatarFallback(props: AvatarProps) { const initials = getInitials(props); + const { parsedInternalTheme } = useAppearance(); return ( - <Text - as='span' - sx={{ ...common.centeredFlex('inline-flex'), width: '100%' }} + <Flex + sx={{ position: 'relative' }} + justify='center' + align='center' > - {initials} - </Text> + <BoringAvatar + size={props.size?.(parsedInternalTheme)} + name={`${props.firstName} ${props.lastName}`} + colors={['#CEEBD1', '#B6DEB9', '#B1CCB4', '#AEBFAF', '#A6ADA7']} + /> + {initials && ( + <Text + as='span' + sx={{ ...common.centeredFlex('inline-flex'), width: '100%', position: 'absolute' }} + > + {initials} + </Text> + )} + </Flex> ); } const CLERK_IMAGE_URL_REGEX = /https:\/\/images\.(lcl)?clerk/i; -const GRAVATAR_DEFAULT_AVATAR = 'https://www.gravatar.com/avatar?d=mp'; - +const GRAVATAR_URL_REGEX = /gravatar/i; // TODO: How do we want to handle this? export function hasAvatar(profileImageUrl: string | undefined | null): boolean { - return CLERK_IMAGE_URL_REGEX.test(profileImageUrl!) || !!profileImageUrl; + return ( + (CLERK_IMAGE_URL_REGEX.test(profileImageUrl!) || !!profileImageUrl) && + !GRAVATAR_URL_REGEX.test(profileImageUrl as string) + ); } From ca5420b4dd6a6ddb26086c1f1641e9b2b44ea7b2 Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Wed, 5 Oct 2022 12:15:11 +0300 Subject: [PATCH 02/41] fix(clerk-js): Extract BoringAvatar library module fix(clerk-js): Add copyright comment --- package-lock.json | 13 -- package.json | 3 - .../clerk-js/src/ui/common/BoringAvatar.tsx | 144 ++++++++++++++++++ packages/clerk-js/src/ui/common/index.ts | 1 + packages/clerk-js/src/ui/elements/Avatar.tsx | 6 +- 5 files changed, 148 insertions(+), 19 deletions(-) create mode 100644 packages/clerk-js/src/ui/common/BoringAvatar.tsx diff --git a/package-lock.json b/package-lock.json index b2e598642bf..93a8111b19b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,6 @@ "name": "@clerk/javascript", "version": "0.0.0", "license": "MIT", - "dependencies": { - "boring-avatars": "^1.7.0" - }, "devDependencies": { "@commitlint/cli": "^16.0.2", "@commitlint/config-conventional": "^16.0.0", @@ -11857,11 +11854,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "node_modules/boring-avatars": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/boring-avatars/-/boring-avatars-1.7.0.tgz", - "integrity": "sha512-ZNHd8J7C/V0IjQMGQowLJ5rScEFU23WxePigH6rqKcT2Esf0qhYvYxw8s9i3srmlfCnCV00ddBjaoGey1eNOfA==" - }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -47441,11 +47433,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, - "boring-avatars": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/boring-avatars/-/boring-avatars-1.7.0.tgz", - "integrity": "sha512-ZNHd8J7C/V0IjQMGQowLJ5rScEFU23WxePigH6rqKcT2Esf0qhYvYxw8s9i3srmlfCnCV00ddBjaoGey1eNOfA==" - }, "boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", diff --git a/package.json b/package.json index 79931b53af6..01068dd68a0 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,5 @@ "lerna": "lerna", "nuke": "rm -r node_modules; for d in packages/*/node_modules; do echo $d; rm -r $d; done", "yalc:all": "for d in packages/*/; do echo $d; cd $d; yalc push --replace; cd '../../'; done" - }, - "dependencies": { - "boring-avatars": "^1.7.0" } } diff --git a/packages/clerk-js/src/ui/common/BoringAvatar.tsx b/packages/clerk-js/src/ui/common/BoringAvatar.tsx new file mode 100644 index 00000000000..402e6340098 --- /dev/null +++ b/packages/clerk-js/src/ui/common/BoringAvatar.tsx @@ -0,0 +1,144 @@ +/** + This module was extracted from the boring-avatars library (https://github.com/boringdesigners/boring-avatars) + MIT License, Copyright (c) 2021 boringdesigners + */ + +const ELEMENTS = 3; +const SIZE = 80; + +export const hashCode = (name: string) => { + let hash = 0; + for (let i = 0; i < name.length; i++) { + const character = name.charCodeAt(i); + hash = (hash << 5) - hash + character; + hash = hash & hash; // Convert to 32bit integer + } + return Math.abs(hash); +}; + +export const getDigit = (number: number, ntn: number) => { + return Math.floor((number / Math.pow(10, ntn)) % 10); +}; + +export const getUnit = (number: number, range: number, index?: number) => { + const value = number % range; + + if (index && getDigit(number, index) % 2 === 0) { + return -value; + } else { + return value; + } +}; + +export const getRandomColor = (number: number, colors: string[], range: number) => { + return colors[number % range]; +}; + +function generateColors(name: string, colors: string[]) { + const numFromName = hashCode(name); + const range = colors && colors.length; + + const elementsProperties = Array.from({ length: ELEMENTS }, (_, i) => ({ + color: getRandomColor(numFromName + i, colors, range), + translateX: getUnit(numFromName * (i + 1), SIZE / 10, 1), + translateY: getUnit(numFromName * (i + 1), SIZE / 10, 2), + scale: 1.2 + getUnit(numFromName * (i + 1), SIZE / 20) / 10, + rotate: getUnit(numFromName * (i + 1), 360, 1), + })); + + return elementsProperties; +} + +const AvatarMarble = props => { + const properties = generateColors(props.name, props.colors); + + return ( + <svg + viewBox={`0 0 ${SIZE} ${SIZE}`} + fill='none' + role='img' + xmlns='http://www.w3.org/2000/svg' + width={props.size} + height={props.size} + > + {props.title && <title>{props.name}</title>} + <mask + id='mask__marble' + maskUnits='userSpaceOnUse' + x={0} + y={0} + width={SIZE} + height={SIZE} + > + <rect + width={SIZE} + height={SIZE} + rx={props.square ? undefined : SIZE * 2} + fill='#FFFFFF' + /> + </mask> + <g mask='url(#mask__marble)'> + <rect + width={SIZE} + height={SIZE} + fill={properties[0].color} + /> + <path + filter='url(#prefix__filter0_f)' + d='M32.414 59.35L50.376 70.5H72.5v-71H33.728L26.5 13.381l19.057 27.08L32.414 59.35z' + fill={properties[1].color} + transform={`translate(${properties[1].translateX} ${properties[1].translateY}) rotate(${ + properties[1].rotate + } ${SIZE / 2} ${SIZE / 2}) scale(${properties[2].scale})`} + /> + <path + filter='url(#prefix__filter0_f)' + style={{ + mixBlendMode: 'overlay', + }} + d='M22.216 24L0 46.75l14.108 38.129L78 86l-3.081-59.276-22.378 4.005 12.972 20.186-23.35 27.395L22.215 24z' + fill={properties[2].color} + transform={`translate(${properties[2].translateX} ${properties[2].translateY}) rotate(${ + properties[2].rotate + } ${SIZE / 2} ${SIZE / 2}) scale(${properties[2].scale})`} + /> + </g> + <defs> + <filter + id='prefix__filter0_f' + filterUnits='userSpaceOnUse' + colorInterpolationFilters='sRGB' + > + <feFlood + floodOpacity={0} + result='BackgroundImageFix' + /> + <feBlend + in='SourceGraphic' + in2='BackgroundImageFix' + result='shape' + /> + <feGaussianBlur + stdDeviation={7} + result='effect1_foregroundBlur' + /> + </filter> + </defs> + </svg> + ); +}; + +const Avatar = ({ + colors = ['#92A1C6', '#146A7C', '#F0AB3D', '#C271B4', '#C20D90'], + name = 'Clara Barton', + square = false, + title = false, + size = 40, + ...props +}) => { + const avatarProps = { colors, name, title, size, square, ...props }; + + return <AvatarMarble {...avatarProps} />; +}; + +export default Avatar; diff --git a/packages/clerk-js/src/ui/common/index.ts b/packages/clerk-js/src/ui/common/index.ts index 02163dc7b89..31cfac52722 100644 --- a/packages/clerk-js/src/ui/common/index.ts +++ b/packages/clerk-js/src/ui/common/index.ts @@ -9,3 +9,4 @@ export * from './EmailLinkVerify'; export * from './EmailLinkStatusCard'; export * from './Wizard'; export * from './PrintableComponent'; +export * from './BoringAvatar'; diff --git a/packages/clerk-js/src/ui/elements/Avatar.tsx b/packages/clerk-js/src/ui/elements/Avatar.tsx index 758d7ab86a8..b198cd31880 100644 --- a/packages/clerk-js/src/ui/elements/Avatar.tsx +++ b/packages/clerk-js/src/ui/elements/Avatar.tsx @@ -1,7 +1,7 @@ import { isRetinaDisplay } from '@clerk/shared/utils/isRetinaDisplay'; -import { default as BoringAvatar } from 'boring-avatars'; import React from 'react'; +import { default as BoringAvatar } from '../common/BoringAvatar'; import { descriptors, Flex, Image, Text, useAppearance } from '../customizables'; import { ElementDescriptor } from '../customizables/elementDescriptors'; import { InternalTheme } from '../foundations'; @@ -56,7 +56,7 @@ export const Avatar = (props: AvatarProps) => { elementDescriptor={imageElementDescriptor || descriptors.avatarImage} alt={fullName} title={fullName} - src={src || (profileImageUrl as string)} + src={src || ''} width='100%' height='100%' onError={() => setError(true)} @@ -100,7 +100,7 @@ function InitialsAvatarFallback(props: AvatarProps) { align='center' > <BoringAvatar - size={props.size?.(parsedInternalTheme)} + size={Number(props.size?.(parsedInternalTheme))} name={`${props.firstName} ${props.lastName}`} colors={['#CEEBD1', '#B6DEB9', '#B1CCB4', '#AEBFAF', '#A6ADA7']} /> From 703fbd9922c25b4e34fc8b443020e77d54a11afe Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Fri, 7 Oct 2022 12:18:24 +0300 Subject: [PATCH 03/41] fix(clerk-js): Add default colors for avatar --- packages/clerk-js/src/ui/common/BoringAvatar.tsx | 4 +--- packages/clerk-js/src/ui/elements/Avatar.tsx | 6 ++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/clerk-js/src/ui/common/BoringAvatar.tsx b/packages/clerk-js/src/ui/common/BoringAvatar.tsx index 402e6340098..cbc4f7473e0 100644 --- a/packages/clerk-js/src/ui/common/BoringAvatar.tsx +++ b/packages/clerk-js/src/ui/common/BoringAvatar.tsx @@ -128,7 +128,7 @@ const AvatarMarble = props => { ); }; -const Avatar = ({ +export const BoringAvatar = ({ colors = ['#92A1C6', '#146A7C', '#F0AB3D', '#C271B4', '#C20D90'], name = 'Clara Barton', square = false, @@ -140,5 +140,3 @@ const Avatar = ({ return <AvatarMarble {...avatarProps} />; }; - -export default Avatar; diff --git a/packages/clerk-js/src/ui/elements/Avatar.tsx b/packages/clerk-js/src/ui/elements/Avatar.tsx index b198cd31880..66d410936a7 100644 --- a/packages/clerk-js/src/ui/elements/Avatar.tsx +++ b/packages/clerk-js/src/ui/elements/Avatar.tsx @@ -1,7 +1,7 @@ import { isRetinaDisplay } from '@clerk/shared/utils/isRetinaDisplay'; import React from 'react'; -import { default as BoringAvatar } from '../common/BoringAvatar'; +import { BoringAvatar } from '../common/BoringAvatar'; import { descriptors, Flex, Image, Text, useAppearance } from '../customizables'; import { ElementDescriptor } from '../customizables/elementDescriptors'; import { InternalTheme } from '../foundations'; @@ -89,6 +89,8 @@ export const Avatar = (props: AvatarProps) => { ); }; +const avatarColors = ['#6C47FF', '#5BC5EF', '#FBD486', '#BEF972', '#FF8F8F']; + function InitialsAvatarFallback(props: AvatarProps) { const initials = getInitials(props); const { parsedInternalTheme } = useAppearance(); @@ -102,7 +104,7 @@ function InitialsAvatarFallback(props: AvatarProps) { <BoringAvatar size={Number(props.size?.(parsedInternalTheme))} name={`${props.firstName} ${props.lastName}`} - colors={['#CEEBD1', '#B6DEB9', '#B1CCB4', '#AEBFAF', '#A6ADA7']} + colors={avatarColors} /> {initials && ( <Text From 21cafcb488d66f90a3b0a13a2079d9b0473ecf7e Mon Sep 17 00:00:00 2001 From: Sokratis Vidros <sokratis.vidros@gmail.com> Date: Mon, 10 Oct 2022 11:10:46 +0300 Subject: [PATCH 04/41] fix(types): Remove unused hideNavigation prop from UserProfile --- packages/types/src/clerk.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/types/src/clerk.ts b/packages/types/src/clerk.ts index 48a9bb02af0..034ad9a80ae 100644 --- a/packages/types/src/clerk.ts +++ b/packages/types/src/clerk.ts @@ -424,10 +424,6 @@ export type UserProfileProps = { * Root URL where the component is mounted on, eg: '/user' */ path?: string; - /* - * Hides the default navigation bar - */ - hideNavigation?: boolean; /* * Renders only a specific view of the component eg: 'security' */ From 121d6972889fe8ecc3d534e12e40273766b2ba41 Mon Sep 17 00:00:00 2001 From: Haris Chaniotakis <chanioxaris@gmail.com> Date: Fri, 7 Oct 2022 15:39:05 +0300 Subject: [PATCH 05/41] fix(clerk-js): Introduce FullHeightLoader element and replace Spinner in UserProfile Replace the regular Spinner component with the new FullHeightLoader component in the following UserProfile places: - Generate backup code page - Adding TOTP page - Active session section --- .../ui/UserProfile/ActiveDevicesSection.tsx | 10 ++-- .../ui/UserProfile/AddAuthenticatorApp.tsx | 11 ++--- .../UserProfile/MfaBackupCodeCreatePage.tsx | 49 +++++++++---------- .../src/ui/elements/FullHeightLoader.tsx | 17 +++++++ packages/clerk-js/src/ui/elements/index.ts | 1 + 5 files changed, 47 insertions(+), 41 deletions(-) create mode 100644 packages/clerk-js/src/ui/elements/FullHeightLoader.tsx diff --git a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx b/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx index f0cadbcc826..3ea07a57afe 100644 --- a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx +++ b/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx @@ -3,7 +3,8 @@ import { SessionWithActivitiesResource } from '@clerk/types'; import React from 'react'; import { useCoreSession, useCoreUser } from '../contexts'; -import { Badge, Col, descriptors, Flex, Icon, localizationKeys, Spinner, Text } from '../customizables'; +import { Badge, Col, descriptors, Flex, Icon, localizationKeys, Text } from '../customizables'; +import { FullHeightLoader } from '../elements'; import { DeviceLaptop, DeviceMobile } from '../icons'; import { mqu } from '../styledSystem'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; @@ -25,12 +26,7 @@ export const ActiveDevicesSection = () => { title={localizationKeys('userProfile.start.activeDevicesSection.title')} id='activeDevices' > - {!sessionsWithActivities.length && ( - <Spinner - colorScheme='primary' - size='lg' - /> - )} + {!sessionsWithActivities.length && <FullHeightLoader />} {!!sessionsWithActivities.length && sessionsWithActivities.sort(currentSessionFirst(session?.id)).map(sa => ( <DeviceAccordion diff --git a/packages/clerk-js/src/ui/UserProfile/AddAuthenticatorApp.tsx b/packages/clerk-js/src/ui/UserProfile/AddAuthenticatorApp.tsx index 02c4c305c7c..c3d67d71ac5 100644 --- a/packages/clerk-js/src/ui/UserProfile/AddAuthenticatorApp.tsx +++ b/packages/clerk-js/src/ui/UserProfile/AddAuthenticatorApp.tsx @@ -3,8 +3,8 @@ import { QRCodeSVG } from 'qrcode.react'; import React from 'react'; import { useCoreUser } from '../contexts'; -import { Button, Col, Spinner, Text } from '../customizables'; -import { ClipboardInput, useCardState } from '../elements'; +import { Button, Col, Text } from '../customizables'; +import { ClipboardInput, FullHeightLoader, useCardState } from '../elements'; import { handleError } from '../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; @@ -39,12 +39,7 @@ export const AddAuthenticatorApp = (props: AddAuthenticatorAppProps) => { return ( <ContentPage.Root headerTitle={title}> - {!totp && ( - <Spinner - colorScheme='primary' - size='lg' - /> - )} + {!totp && <FullHeightLoader />} {totp && ( <> diff --git a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeCreatePage.tsx b/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeCreatePage.tsx index 5accec01a7c..c4f5b59ce07 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeCreatePage.tsx +++ b/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeCreatePage.tsx @@ -2,8 +2,8 @@ import { BackupCodeResource } from '@clerk/types'; import React from 'react'; import { useCoreUser } from '../contexts'; -import { localizationKeys, Spinner, Text } from '../customizables'; -import { useCardState } from '../elements'; +import { localizationKeys, Text } from '../customizables'; +import { FullHeightLoader, useCardState } from '../elements'; import { handleError } from '../utils'; import { FormButtonContainer } from './FormButtons'; import { MfaBackupCodeList } from './MfaBackupCodeList'; @@ -34,34 +34,31 @@ export const MfaBackupCodeCreatePage = () => { return <ContentPage.Root headerTitle={title} />; } - if (!backupCode) { - return ( - <Spinner - colorScheme='primary' - size='lg' - /> - ); - } - return ( <ContentPage.Root headerTitle={title}> - <Text - localizationKey={text} - variant='regularRegular' - /> + {!backupCode ? ( + <FullHeightLoader /> + ) : ( + <> + <Text + localizationKey={text} + variant='regularRegular' + /> - <MfaBackupCodeList - subtitle={'Store them securely and keep them secret.'} - backupCodes={backupCode.codes} - /> + <MfaBackupCodeList + subtitle={'Store them securely and keep them secret.'} + backupCodes={backupCode.codes} + /> - <FormButtonContainer> - <NavigateToFlowStartButton - variant='solid' - autoFocus - localizationKey={localizationKeys('userProfile.formButtonPrimary__finish')} - /> - </FormButtonContainer> + <FormButtonContainer> + <NavigateToFlowStartButton + variant='solid' + autoFocus + localizationKey={localizationKeys('userProfile.formButtonPrimary__finish')} + /> + </FormButtonContainer> + </> + )} </ContentPage.Root> ); }; diff --git a/packages/clerk-js/src/ui/elements/FullHeightLoader.tsx b/packages/clerk-js/src/ui/elements/FullHeightLoader.tsx new file mode 100644 index 00000000000..4caa9ef4928 --- /dev/null +++ b/packages/clerk-js/src/ui/elements/FullHeightLoader.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +import { Flex, Spinner } from '../customizables'; + +export const FullHeightLoader = (): JSX.Element => { + return ( + <Flex + center + sx={{ height: '100%' }} + > + <Spinner + colorScheme='primary' + size='lg' + /> + </Flex> + ); +}; diff --git a/packages/clerk-js/src/ui/elements/index.ts b/packages/clerk-js/src/ui/elements/index.ts index eefe3ac4ed1..764e36f0a03 100644 --- a/packages/clerk-js/src/ui/elements/index.ts +++ b/packages/clerk-js/src/ui/elements/index.ts @@ -27,3 +27,4 @@ export * from './RootBox'; export * from './InvisibleRootBox'; export * from './ClipboardInput'; export * from './TileButton'; +export * from './FullHeightLoader'; From d9428cdf21889318a181310f32ea77fe1f627e7e Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Thu, 6 Oct 2022 14:51:23 +0300 Subject: [PATCH 06/41] fix(clerk-js): Implement tabs components fix(clerk-js): Correct typo --- packages/clerk-js/src/ui/elements/Tabs.tsx | 191 ++++++++++++++++++ packages/clerk-js/src/ui/elements/index.ts | 1 + .../src/ui/utils/getValidReactChildren.ts | 5 + packages/clerk-js/src/ui/utils/index.ts | 1 + 4 files changed, 198 insertions(+) create mode 100644 packages/clerk-js/src/ui/elements/Tabs.tsx create mode 100644 packages/clerk-js/src/ui/utils/getValidReactChildren.ts diff --git a/packages/clerk-js/src/ui/elements/Tabs.tsx b/packages/clerk-js/src/ui/elements/Tabs.tsx new file mode 100644 index 00000000000..796843f7d3e --- /dev/null +++ b/packages/clerk-js/src/ui/elements/Tabs.tsx @@ -0,0 +1,191 @@ +import React from 'react'; + +import * as Primitives from '../../ui/primitives'; +import { Button, Flex } from '../customizables'; +import { createContextAndHook, getValidChildren } from '../utils'; + +const { Box } = Primitives; + +type TabsContextValue = { + selectedIndex: number; + setSelectedIndex: (item: number) => void; + focusedIndex: number; + setFocusedIndex: (item: number) => void; +}; +export const [TabsContext, useTabsContext] = createContextAndHook<TabsContextValue>('TabsContext'); +export const TabsContextProvider = (props: React.PropsWithChildren<{ value: TabsContextValue }>) => { + const ctxValue = React.useMemo( + () => ({ value: props.value }), + [props.value.selectedIndex, props.value.setFocusedIndex], + ); + return <TabsContext.Provider value={ctxValue}>{props.children}</TabsContext.Provider>; +}; + +/** + * TabsProps + */ +type TabsProps = { + children: React.ReactNode; + defaultIndex?: number | null; +}; + +export const Tabs = ({ children, ...props }: TabsProps) => { + const { defaultIndex = null } = props; + const [selectedIndex, setSelectedIndex] = React.useState(defaultIndex ?? 0); + const [focusedIndex, setFocusedIndex] = React.useState(defaultIndex ?? 0); + + return ( + <TabsContextProvider value={{ selectedIndex, setSelectedIndex, focusedIndex, setFocusedIndex }}> + <Box>{children}</Box> + </TabsContextProvider> + ); +}; + +/** + * TabsList + */ +type TabsListProps = React.PropsWithChildren<any>; +export const TabsList = (props: TabsListProps) => { + const { children } = props; + const { setSelectedIndex, selectedIndex, setFocusedIndex } = useTabsContext(); + + const validChildren = getValidChildren(children); + const childrenWithProps = validChildren.map((child, index) => + React.cloneElement(child as React.ReactElement<React.PropsWithChildren<any>>, { + tabIndex: index, + }), + ); + + const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => { + const tabCount = Object.keys(childrenWithProps).length; + + if (e.key === 'ArrowLeft') { + const prev = selectedIndex === 0 ? tabCount - 1 : selectedIndex - 1; + setFocusedIndex(prev); + return setSelectedIndex(prev); + } + if (e.key === 'ArrowRight') { + const next = tabCount - 1 === selectedIndex ? 0 : selectedIndex + 1; + setFocusedIndex(next); + return setSelectedIndex(next); + } + }; + + return ( + <Flex + onKeyDown={onKeyDown} + direction='row' + sx={theme => ({ borderBottom: theme.borders.$normal, borderColor: theme.colors.$blackAlpha300 })} + > + {childrenWithProps} + </Flex> + ); +}; + +/** + * Tab + */ +type TabProps = React.PropsWithChildren<any>; +type TabPropsWithTabIndex = TabProps & { tabIndex?: number }; +export const Tab = (props: TabProps) => { + const { children, tabIndex } = props as TabPropsWithTabIndex; + + if (tabIndex === undefined) { + throw new Error('Tab component must be a direct child of TabList.'); + } + + const { setSelectedIndex, selectedIndex, focusedIndex, setFocusedIndex } = useTabsContext(); + const ref = React.useRef<HTMLButtonElement | any>(null); + const isActive = tabIndex === selectedIndex; + const isFocused = tabIndex === focusedIndex; + + const onClick = () => { + setSelectedIndex(tabIndex); + setFocusedIndex(-1); + }; + + React.useEffect(() => { + if (ref && isFocused) { + ref.current.focus(); + } + }, [ref, isFocused]); + + return ( + <Flex + direction='row' + sx={{ position: 'relative' }} + > + <Button + onClick={onClick} + focusRing={isFocused} + variant='ghost' + aria-selected={isActive} + id={`tab-${tabIndex}`} + aria-controls={`tabpanel-${tabIndex}`} + role='tab' + ref={ref} + sx={t => ({ + background: t.colors.$transparent, + color: isActive ? t.colors.$blackAlpha900 : t.colors.$blackAlpha700, + gap: t.space.$1x5, + fontWeight: t.fontWeights.$medium, + borderBottom: t.borders.$normal, + borderColor: isActive ? t.colors.$blackAlpha700 : t.colors.$transparent, + borderRadius: 0, + width: 'fit-content', + '&:hover': { backgroundColor: t.colors.$transparent }, + })} + > + {children} + </Button> + </Flex> + ); +}; + +/** + * TabPanels + */ +type TabPanelsProps = React.PropsWithChildren<any>; +export const TabPanels = (props: TabPanelsProps) => { + const { children } = props; + + const validChildren = getValidChildren(children); + const childrenWithProps = validChildren.map((child, index) => + React.cloneElement(child as React.ReactElement<React.PropsWithChildren<any>>, { + tabIndex: index, + }), + ); + + return <Flex>{childrenWithProps}</Flex>; +}; + +/** + * TabPanel + */ +type TabPanelProps = React.PropsWithChildren<any>; +type TabPanelPropsWithTabIndex = TabPanelProps & { tabIndex?: number }; +export const TabPanel = (props: TabPanelProps) => { + const { tabIndex, children } = props as TabPanelPropsWithTabIndex; + + if (tabIndex === undefined) { + throw new Error('TabPanel component must be a direct child of TabPanels.'); + } + + const { selectedIndex } = useTabsContext(); + const isOpen = tabIndex === selectedIndex; + + if (!isOpen) { + return null; + } + + return ( + <Flex + id={`tabpanel-${tabIndex}`} + role='tabpanel' + tabIndex={0} + aria-labelledby={`tab-${tabIndex}`} + > + {children} + </Flex> + ); +}; diff --git a/packages/clerk-js/src/ui/elements/index.ts b/packages/clerk-js/src/ui/elements/index.ts index 764e36f0a03..171b2bb169f 100644 --- a/packages/clerk-js/src/ui/elements/index.ts +++ b/packages/clerk-js/src/ui/elements/index.ts @@ -28,3 +28,4 @@ export * from './InvisibleRootBox'; export * from './ClipboardInput'; export * from './TileButton'; export * from './FullHeightLoader'; +export * from './Tabs'; diff --git a/packages/clerk-js/src/ui/utils/getValidReactChildren.ts b/packages/clerk-js/src/ui/utils/getValidReactChildren.ts new file mode 100644 index 00000000000..edf8bae4c9e --- /dev/null +++ b/packages/clerk-js/src/ui/utils/getValidReactChildren.ts @@ -0,0 +1,5 @@ +import React from 'react'; + +export function getValidChildren(children: React.ReactNode) { + return React.Children.toArray(children).filter(child => React.isValidElement(child)) as React.ReactElement[]; +} diff --git a/packages/clerk-js/src/ui/utils/index.ts b/packages/clerk-js/src/ui/utils/index.ts index 929a455c97a..28bcac91dca 100644 --- a/packages/clerk-js/src/ui/utils/index.ts +++ b/packages/clerk-js/src/ui/utils/index.ts @@ -16,3 +16,4 @@ export * from './getIdentifier'; export * from './readObjectPath'; export * from './useFormControl'; export * from './errorHandler'; +export * from './getValidReactChildren'; From ae87f0025b457ac64a60bd5176406bb46b1d532f Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Thu, 6 Oct 2022 17:29:25 +0300 Subject: [PATCH 07/41] fix(clerk-js): Improve keyboard nav and handle disabled tabs order of focus --- packages/clerk-js/src/ui/elements/Tabs.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/clerk-js/src/ui/elements/Tabs.tsx b/packages/clerk-js/src/ui/elements/Tabs.tsx index 796843f7d3e..165bacb4b8c 100644 --- a/packages/clerk-js/src/ui/elements/Tabs.tsx +++ b/packages/clerk-js/src/ui/elements/Tabs.tsx @@ -57,15 +57,17 @@ export const TabsList = (props: TabsListProps) => { ); const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => { - const tabCount = Object.keys(childrenWithProps).length; + const tabs = childrenWithProps.filter(child => !child.props?.isDisabled).map(child => child.props.tabIndex); + const tabsLenth = tabs.length; + const current = tabs.indexOf(selectedIndex); if (e.key === 'ArrowLeft') { - const prev = selectedIndex === 0 ? tabCount - 1 : selectedIndex - 1; + const prev = current === 0 ? tabs[tabsLenth - 1] : tabs[current - 1]; setFocusedIndex(prev); return setSelectedIndex(prev); } if (e.key === 'ArrowRight') { - const next = tabCount - 1 === selectedIndex ? 0 : selectedIndex + 1; + const next = tabsLenth - 1 === current ? tabs[0] : tabs[current + 1]; setFocusedIndex(next); return setSelectedIndex(next); } @@ -88,7 +90,7 @@ export const TabsList = (props: TabsListProps) => { type TabProps = React.PropsWithChildren<any>; type TabPropsWithTabIndex = TabProps & { tabIndex?: number }; export const Tab = (props: TabProps) => { - const { children, tabIndex } = props as TabPropsWithTabIndex; + const { children, tabIndex, isDisabled } = props as TabPropsWithTabIndex; if (tabIndex === undefined) { throw new Error('Tab component must be a direct child of TabList.'); @@ -104,6 +106,12 @@ export const Tab = (props: TabProps) => { setFocusedIndex(-1); }; + React.useEffect(() => { + if (isDisabled && tabIndex === 0) { + setSelectedIndex((tabIndex as number) + 1); + } + }, []); + React.useEffect(() => { if (ref && isFocused) { ref.current.focus(); @@ -118,6 +126,7 @@ export const Tab = (props: TabProps) => { <Button onClick={onClick} focusRing={isFocused} + isDisabled={isDisabled} variant='ghost' aria-selected={isActive} id={`tab-${tabIndex}`} From 8e1d32b660e33c2131642de0e9d0435e40544362 Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Mon, 10 Oct 2022 13:12:25 +0300 Subject: [PATCH 08/41] fix(clerk-js): Minor refactor in naming and types --- .../clerk-js/src/ui/UserProfile/RootPage.tsx | 16 +++++- packages/clerk-js/src/ui/elements/Tabs.tsx | 49 ++++++++----------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/packages/clerk-js/src/ui/UserProfile/RootPage.tsx b/packages/clerk-js/src/ui/UserProfile/RootPage.tsx index 3eecf78492e..4593f4d8025 100644 --- a/packages/clerk-js/src/ui/UserProfile/RootPage.tsx +++ b/packages/clerk-js/src/ui/UserProfile/RootPage.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useEnvironment } from '../contexts'; import { Col, descriptors, localizationKeys } from '../customizables'; -import { Header } from '../elements'; +import { Header, Tab, TabPanel, TabPanels, Tabs, TabsList } from '../elements'; import { ActiveDevicesSection } from './ActiveDevicesSection'; import { ConnectedAccountsSection } from './ConnectedAccountsSection'; import { EmailsSection } from './EmailSection'; @@ -44,6 +44,20 @@ export const RootPage = () => { <Header.Subtitle localizationKey={localizationKeys('userProfile.start.headerSubtitle__account')} /> </Header.Root> <UserProfileSection /> + + <Tabs> + <TabsList> + <Tab>Active</Tab> + <Tab>Invited</Tab> + <Tab>Danger</Tab> + </TabsList> + <TabPanels> + <TabPanel>section 1</TabPanel> + <TabPanel>section 2</TabPanel> + <TabPanel>section 3</TabPanel> + </TabPanels> + </Tabs> + {showUsername && <UsernameSection />} {showEmail && <EmailsSection />} {showPhone && <PhoneSection />} diff --git a/packages/clerk-js/src/ui/elements/Tabs.tsx b/packages/clerk-js/src/ui/elements/Tabs.tsx index 165bacb4b8c..11068883f2c 100644 --- a/packages/clerk-js/src/ui/elements/Tabs.tsx +++ b/packages/clerk-js/src/ui/elements/Tabs.tsx @@ -1,11 +1,8 @@ import React from 'react'; -import * as Primitives from '../../ui/primitives'; -import { Button, Flex } from '../customizables'; +import { Button, Col, Flex } from '../customizables'; import { createContextAndHook, getValidChildren } from '../utils'; -const { Box } = Primitives; - type TabsContextValue = { selectedIndex: number; setSelectedIndex: (item: number) => void; @@ -26,17 +23,17 @@ export const TabsContextProvider = (props: React.PropsWithChildren<{ value: Tabs */ type TabsProps = { children: React.ReactNode; - defaultIndex?: number | null; + defaultIndex?: number; }; export const Tabs = ({ children, ...props }: TabsProps) => { - const { defaultIndex = null } = props; - const [selectedIndex, setSelectedIndex] = React.useState(defaultIndex ?? 0); - const [focusedIndex, setFocusedIndex] = React.useState(defaultIndex ?? 0); + const { defaultIndex = 0 } = props; + const [selectedIndex, setSelectedIndex] = React.useState(defaultIndex); + const [focusedIndex, setFocusedIndex] = React.useState(defaultIndex); return ( <TabsContextProvider value={{ selectedIndex, setSelectedIndex, focusedIndex, setFocusedIndex }}> - <Box>{children}</Box> + <Col>{children}</Col> </TabsContextProvider> ); }; @@ -49,9 +46,8 @@ export const TabsList = (props: TabsListProps) => { const { children } = props; const { setSelectedIndex, selectedIndex, setFocusedIndex } = useTabsContext(); - const validChildren = getValidChildren(children); - const childrenWithProps = validChildren.map((child, index) => - React.cloneElement(child as React.ReactElement<React.PropsWithChildren<any>>, { + const childrenWithProps = getValidChildren(children).map((child, index) => + React.cloneElement(child, { tabIndex: index, }), ); @@ -76,7 +72,6 @@ export const TabsList = (props: TabsListProps) => { return ( <Flex onKeyDown={onKeyDown} - direction='row' sx={theme => ({ borderBottom: theme.borders.$normal, borderColor: theme.colors.$blackAlpha300 })} > {childrenWithProps} @@ -97,7 +92,7 @@ export const Tab = (props: TabProps) => { } const { setSelectedIndex, selectedIndex, focusedIndex, setFocusedIndex } = useTabsContext(); - const ref = React.useRef<HTMLButtonElement | any>(null); + const buttonRef = React.useRef<HTMLButtonElement | any>(null); const isActive = tabIndex === selectedIndex; const isFocused = tabIndex === focusedIndex; @@ -113,26 +108,23 @@ export const Tab = (props: TabProps) => { }, []); React.useEffect(() => { - if (ref && isFocused) { - ref.current.focus(); + if (buttonRef.current && isFocused) { + buttonRef.current.focus(); } - }, [ref, isFocused]); + }, [isFocused]); return ( - <Flex - direction='row' - sx={{ position: 'relative' }} - > + <Flex sx={{ position: 'relative' }}> <Button onClick={onClick} focusRing={isFocused} isDisabled={isDisabled} variant='ghost' aria-selected={isActive} - id={`tab-${tabIndex}`} - aria-controls={`tabpanel-${tabIndex}`} + id={`cl-tab-${tabIndex}`} + aria-controls={`cl-tabpanel-${tabIndex}`} role='tab' - ref={ref} + ref={buttonRef} sx={t => ({ background: t.colors.$transparent, color: isActive ? t.colors.$blackAlpha900 : t.colors.$blackAlpha700, @@ -158,9 +150,8 @@ type TabPanelsProps = React.PropsWithChildren<any>; export const TabPanels = (props: TabPanelsProps) => { const { children } = props; - const validChildren = getValidChildren(children); - const childrenWithProps = validChildren.map((child, index) => - React.cloneElement(child as React.ReactElement<React.PropsWithChildren<any>>, { + const childrenWithProps = getValidChildren(children).map((child, index) => + React.cloneElement(child, { tabIndex: index, }), ); @@ -189,10 +180,10 @@ export const TabPanel = (props: TabPanelProps) => { return ( <Flex - id={`tabpanel-${tabIndex}`} + id={`cl-tabpanel-${tabIndex}`} role='tabpanel' tabIndex={0} - aria-labelledby={`tab-${tabIndex}`} + aria-labelledby={`cl-tab-${tabIndex}`} > {children} </Flex> From 1f08717c5925573de9d4483f09692b3cb1f83f3f Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Thu, 6 Oct 2022 21:54:40 +0300 Subject: [PATCH 09/41] chore(repo): Add a `clean` task to all packages --- packages/backend-core/package.json | 1 + packages/clerk-js/package.json | 2 ++ packages/edge/package.json | 3 ++- packages/expo/package.json | 3 ++- packages/gatsby-plugin-clerk/package.json | 3 ++- packages/nextjs/package.json | 1 + packages/react/package.json | 1 + packages/remix/package.json | 3 ++- packages/sdk-node/package.json | 1 + packages/themes/package.json | 3 ++- packages/types/package.json | 6 +++--- 11 files changed, 19 insertions(+), 8 deletions(-) diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index e9c760dfb0f..3a8f208265f 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -5,6 +5,7 @@ "description": "Clerk Backend API core resources and authentication utilities for JavaScript environments.", "scripts": { "build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && ./moduleTypeFix", + "clean": "rimraf ./dist", "dev": "tsc -p tsconfig.esm.json --watch", "test": "jest" }, diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 46f54a55d92..3cd695f242f 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -29,6 +29,7 @@ "build:bundle": "webpack --config webpack.dev.js --env production", "build:declarations": "tsc -p tsconfig.declarations.json", "dev": "webpack serve --config webpack.dev.js", + "clean": "rimraf ./dist", "prepublishOnly": "npm run build", "postpublish": "node ./scripts/purge-cache.mjs", "start": "echo \"Noop\"", @@ -37,6 +38,7 @@ }, "dependencies": { "@clerk/types": "^3.10.1", + "@clerk/common": "^0.0.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", diff --git a/packages/edge/package.json b/packages/edge/package.json index 92895933bda..2b80b93ca7a 100644 --- a/packages/edge/package.json +++ b/packages/edge/package.json @@ -33,7 +33,8 @@ } }, "scripts": { - "build": "node ./scripts/info.cjs && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && ./moduleTypeFix" + "build": "node ./scripts/info.cjs && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && ./moduleTypeFix", + "clean": "rimraf ./dist" }, "dependencies": { "@clerk/backend-core": "^2.8.1", diff --git a/packages/expo/package.json b/packages/expo/package.json index 6c63aad5711..02e5eea3e5e 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -22,7 +22,8 @@ ], "scripts": { "build": "tsc -p tsconfig.build.json", - "dev": "tsc -p tsconfig.build.json --watch" + "dev": "tsc -p tsconfig.build.json --watch", + "clean": "rimraf ./dist" }, "dependencies": { "@clerk/clerk-js": "^4.9.0", diff --git a/packages/gatsby-plugin-clerk/package.json b/packages/gatsby-plugin-clerk/package.json index a53cbd688b8..c5613819df6 100644 --- a/packages/gatsby-plugin-clerk/package.json +++ b/packages/gatsby-plugin-clerk/package.json @@ -27,7 +27,8 @@ "scripts": { "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", - "dev": "tsc -p tsconfig.build.json --watch" + "dev": "tsc -p tsconfig.build.json --watch", + "clean": "rimraf ./dist" }, "dependencies": { "@clerk/clerk-react": "^4.2.0-staging.0", diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index a3a8fefdc8f..b06cf54160d 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -30,6 +30,7 @@ "scripts": { "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", + "clean": "rimraf ./dist", "dev": "tsc -p tsconfig.build.json --watch" }, "dependencies": { diff --git a/packages/react/package.json b/packages/react/package.json index 2b575b88f54..973502d0247 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -22,6 +22,7 @@ "scripts": { "build": "node ./scripts/info.js && tsc -p tsconfig.build.json", "dev": "node ./scripts/info.js && tsc -p tsconfig.build.json --watch", + "clean": "rimraf ./dist", "prepublishOnly": "npm run build", "test:coverage": "echo \"Error: no test specified yet\"", "test": "jest" diff --git a/packages/remix/package.json b/packages/remix/package.json index d4edea1f167..7728e72f1ce 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -28,7 +28,8 @@ "scripts": { "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", - "dev": "tsc -p tsconfig.build.json --watch" + "dev": "tsc -p tsconfig.build.json --watch", + "clean": "rimraf ./dist" }, "dependencies": { "@clerk/clerk-react": "^4.2.6", diff --git a/packages/sdk-node/package.json b/packages/sdk-node/package.json index 06571644680..12565acc828 100644 --- a/packages/sdk-node/package.json +++ b/packages/sdk-node/package.json @@ -17,6 +17,7 @@ "build:es5": "node ./scripts/info.js && tsc -p tsconfig.build.json", "build:esm": "node ./scripts/info.js && tsc -p tsconfig.esm.json", "build": "run-p build:es5 build:esm", + "clean": "rimraf ./dist", "test": "jest", "lint": "eslint ./src --ext .ts", "pack": "npm pack" diff --git a/packages/themes/package.json b/packages/themes/package.json index 597dba7ca24..8004b58fc75 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -23,7 +23,8 @@ ], "scripts": { "build": "tsc -p tsconfig.build.json", - "dev": "tsc -p tsconfig.build.json --watch" + "dev": "tsc -p tsconfig.build.json --watch", + "clean": "rimraf ./dist" }, "devDependencies": { "@clerk/types": "^3.10.1", diff --git a/packages/types/package.json b/packages/types/package.json index e07b580a824..4d6471ad488 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -17,13 +17,13 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "files": [ - "dist", - "src" + "dist" ], "scripts": { "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", - "dev": "tsc -p tsconfig.build.json --watch" + "dev": "tsc -p tsconfig.build.json --watch", + "clean": "rimraf ./dist" }, "dependencies": { "csstype": "^3.1.0" From c994fcc73ace07120de8c1957fe32c0e0d1e94b5 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Thu, 6 Oct 2022 21:55:47 +0300 Subject: [PATCH 10/41] chore(repo): Update turbo and move all pipelines to turbo.json instead of lerna --- package.json | 9 +++++---- tsconfig.eslint.json | 2 +- tsconfig.json | 1 - turbo.json | 14 +++++++++++--- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 01068dd68a0..8ba38415564 100644 --- a/package.json +++ b/package.json @@ -28,11 +28,14 @@ "prettier": "^2.6.0", "pretty-quick": "^3.1.3", "rimraf": "^3.0.2", - "turbo": "^1.1.5", + "turbo": "^1.5.5", "typescript": "^4.6.4" }, "scripts": { - "dev": "lerna run dev --parallel --ignore @clerk/{expo}", + "dev": "turbo dev --filter=!@clerk/expo", + "build": "turbo build --concurrency=${TURBO_CONCURRENCY:-2}", + "test": "turbo test --concurrency=${TURBO_CONCURRENCY:-2}", + "clean": "turbo clean", "lint-fix": "eslint . --ext .ts", "bump": "lerna version", "bump:next": "lerna version --conventional-prerelease --preid next --no-changelog", @@ -42,8 +45,6 @@ "release": "lerna publish from-package", "prerelease": "npx rimraf packages/*/dist && turbo run build test --concurrency=${TURBO_CONCURRENCY:-2}", "release:next": "lerna publish from-package --dist-tag next", - "build": "turbo run build --concurrency=${TURBO_CONCURRENCY:-2}", - "test": "turbo run test --concurrency=${TURBO_CONCURRENCY:-2}", "prepare": "husky install", "version": "./scripts/version-info.sh", "lerna": "lerna", diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json index 763a0535fca..995f938ee24 100644 --- a/tsconfig.eslint.json +++ b/tsconfig.eslint.json @@ -3,5 +3,5 @@ "compilerOptions": { "noEmit": true }, - "include": ["packages/*/src", "packages/*/*.js"] + "include": ["packages/*/src", "packages/*/*.js", "packages/*/*.config.ts"] } diff --git a/tsconfig.json b/tsconfig.json index 2f81a5b4bcb..72561fa78a9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -22,7 +22,6 @@ "pretty": true, "sourceMap": false, "strict": true, - // "types": ["node"], "target": "ES2019", "noErrorTruncation": true }, diff --git a/turbo.json b/turbo.json index 92aa1d5b0fd..0e72acae02b 100644 --- a/turbo.json +++ b/turbo.json @@ -1,14 +1,22 @@ { - "npmClient": "npm", - "baseBranch": "origin/main", + "$schema": "https://turborepo.org/schema.json", "pipeline": { "build": { "dependsOn": ["^build"], "outputs": [] }, + "dev": { + "dependsOn": [], + "cache": false + }, + "clean": { + "dependsOn": [], + "cache": false + }, "test": { "dependsOn": ["build"], - "outputs": [] + "outputs": [], + "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"] } } } From ea37b0a2d2c30c3ea0015bfd3544fc5bbe5b05c6 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Thu, 6 Oct 2022 22:17:10 +0300 Subject: [PATCH 11/41] chore(repo): Extract eslint config to the eslint-config-custom package --- .eslintrc.js | 41 +-------------------- package.json | 7 +--- packages/eslint-config-custom/index.js | 43 ++++++++++++++++++++++ packages/eslint-config-custom/package.json | 17 +++++++++ 4 files changed, 63 insertions(+), 45 deletions(-) create mode 100644 packages/eslint-config-custom/index.js create mode 100644 packages/eslint-config-custom/package.json diff --git a/.eslintrc.js b/.eslintrc.js index b61de76c5e3..03ee7431b98 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,43 +1,4 @@ module.exports = { root: true, - parser: '@typescript-eslint/parser', - env: { - node: true, - browser: true, - }, - parserOptions: { - tsconfigRootDir: __dirname, - project: ['./tsconfig.eslint.json'], - }, - plugins: ['@typescript-eslint', 'simple-import-sort'], - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'prettier', - ], - rules: { - curly: 'error', - '@typescript-eslint/no-non-null-assertion': 'warn', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-argument': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/ban-ts-comment': 'off', - 'simple-import-sort/imports': 'error', - 'no-restricted-imports': [ - 'error', - { - patterns: [ - { - group: ['@emotion/*'], - message: - 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', - }, - ], - }, - ], - }, + extends: ['custom'], }; diff --git a/package.json b/package.json index 8ba38415564..8deffc4998c 100644 --- a/package.json +++ b/package.json @@ -17,12 +17,9 @@ "@commitlint/cli": "^16.0.2", "@commitlint/config-conventional": "^16.0.0", "@commitlint/config-lerna-scopes": "^16.0.0", - "@typescript-eslint/eslint-plugin": "^5.15.0", - "@typescript-eslint/parser": "^5.15.0", "conventional-changelog-conventionalcommits": "^4.6.3", - "eslint": "^8.11.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-simple-import-sort": "^7.0.0", + "eslint": "^8.24.0", + "eslint-config-custom": "*", "husky": "^7.0.4", "lerna": "^4.0.0", "prettier": "^2.6.0", diff --git a/packages/eslint-config-custom/index.js b/packages/eslint-config-custom/index.js new file mode 100644 index 00000000000..3498db30582 --- /dev/null +++ b/packages/eslint-config-custom/index.js @@ -0,0 +1,43 @@ +module.exports = { + parser: '@typescript-eslint/parser', + env: { + node: true, + browser: true, + }, + parserOptions: { + tsconfigRootDir: __dirname, + project: ['../../tsconfig.eslint.json'], + }, + plugins: ['@typescript-eslint', 'simple-import-sort'], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'prettier', + 'turbo', + ], + rules: { + curly: 'error', + '@typescript-eslint/no-non-null-assertion': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + 'simple-import-sort/imports': 'error', + 'no-restricted-imports': [ + 'error', + { + patterns: [ + { + group: ['@emotion/*'], + message: + 'Please do not import emotion directly. Import helpers from ./design-system or ./primitives instead.', + }, + ], + }, + ], + }, +}; diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json new file mode 100644 index 00000000000..64700ad4a0c --- /dev/null +++ b/packages/eslint-config-custom/package.json @@ -0,0 +1,17 @@ +{ + "name": "eslint-config-custom", + "version": "0.0.0", + "main": "index.js", + "license": "MIT", + "dependencies": { + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-react": "7.28.0", + "eslint-config-turbo": "latest", + "@typescript-eslint/eslint-plugin": "^5.15.0", + "@typescript-eslint/parser": "^5.15.0", + "eslint-plugin-simple-import-sort": "^7.0.0" + }, + "publishConfig": { + "access": "public" + } +} From c057a31d30ca94a13be3766ce32bda6d2e639c48 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Thu, 6 Oct 2022 22:18:57 +0300 Subject: [PATCH 12/41] chore(repo): Add a `lint` task to all packages --- package.json | 7 ++++--- packages/backend-core/package.json | 1 + packages/clerk-js/package.json | 1 + packages/edge/package.json | 3 ++- packages/expo/package.json | 3 ++- packages/gatsby-plugin-clerk/package.json | 3 ++- packages/nextjs/package.json | 1 + packages/react/package.json | 1 + packages/remix/package.json | 3 ++- packages/sdk-node/package.json | 2 +- packages/themes/package.json | 3 ++- packages/types/package.json | 3 ++- turbo.json | 4 ++++ 13 files changed, 25 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 8deffc4998c..059f3178486 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "conventional-changelog-conventionalcommits": "^4.6.3", "eslint": "^8.24.0", "eslint-config-custom": "*", - "husky": "^7.0.4", + "husky": "^8.0.1", "lerna": "^4.0.0", "prettier": "^2.6.0", "pretty-quick": "^3.1.3", @@ -33,6 +33,7 @@ "build": "turbo build --concurrency=${TURBO_CONCURRENCY:-2}", "test": "turbo test --concurrency=${TURBO_CONCURRENCY:-2}", "clean": "turbo clean", + "lint": "turbo lint", "lint-fix": "eslint . --ext .ts", "bump": "lerna version", "bump:next": "lerna version --conventional-prerelease --preid next --no-changelog", @@ -42,10 +43,10 @@ "release": "lerna publish from-package", "prerelease": "npx rimraf packages/*/dist && turbo run build test --concurrency=${TURBO_CONCURRENCY:-2}", "release:next": "lerna publish from-package --dist-tag next", - "prepare": "husky install", "version": "./scripts/version-info.sh", "lerna": "lerna", "nuke": "rm -r node_modules; for d in packages/*/node_modules; do echo $d; rm -r $d; done", - "yalc:all": "for d in packages/*/; do echo $d; cd $d; yalc push --replace; cd '../../'; done" + "yalc:all": "for d in packages/*/; do echo $d; cd $d; yalc push --replace; cd '../../'; done", + "prepare": "husky install" } } diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 3a8f208265f..76344ec8411 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -6,6 +6,7 @@ "scripts": { "build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && ./moduleTypeFix", "clean": "rimraf ./dist", + "lint": "eslint .", "dev": "tsc -p tsconfig.esm.json --watch", "test": "jest" }, diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 3cd695f242f..c2c90f8b661 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -30,6 +30,7 @@ "build:declarations": "tsc -p tsconfig.declarations.json", "dev": "webpack serve --config webpack.dev.js", "clean": "rimraf ./dist", + "lint": "eslint .", "prepublishOnly": "npm run build", "postpublish": "node ./scripts/purge-cache.mjs", "start": "echo \"Noop\"", diff --git a/packages/edge/package.json b/packages/edge/package.json index 2b80b93ca7a..8cbdd8246eb 100644 --- a/packages/edge/package.json +++ b/packages/edge/package.json @@ -34,7 +34,8 @@ }, "scripts": { "build": "node ./scripts/info.cjs && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && ./moduleTypeFix", - "clean": "rimraf ./dist" + "clean": "rimraf ./dist", + "lint": "eslint ." }, "dependencies": { "@clerk/backend-core": "^2.8.1", diff --git a/packages/expo/package.json b/packages/expo/package.json index 02e5eea3e5e..c2016c3047d 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -23,7 +23,8 @@ "scripts": { "build": "tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch", - "clean": "rimraf ./dist" + "clean": "rimraf ./dist", + "lint": "eslint ." }, "dependencies": { "@clerk/clerk-js": "^4.9.0", diff --git a/packages/gatsby-plugin-clerk/package.json b/packages/gatsby-plugin-clerk/package.json index c5613819df6..31342231ce0 100644 --- a/packages/gatsby-plugin-clerk/package.json +++ b/packages/gatsby-plugin-clerk/package.json @@ -28,7 +28,8 @@ "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch", - "clean": "rimraf ./dist" + "clean": "rimraf ./dist", + "lint": "eslint ." }, "dependencies": { "@clerk/clerk-react": "^4.2.0-staging.0", diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index b06cf54160d..7187939f639 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -31,6 +31,7 @@ "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", "clean": "rimraf ./dist", + "lint": "eslint .", "dev": "tsc -p tsconfig.build.json --watch" }, "dependencies": { diff --git a/packages/react/package.json b/packages/react/package.json index 973502d0247..673b517ae76 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -23,6 +23,7 @@ "build": "node ./scripts/info.js && tsc -p tsconfig.build.json", "dev": "node ./scripts/info.js && tsc -p tsconfig.build.json --watch", "clean": "rimraf ./dist", + "lint": "eslint .", "prepublishOnly": "npm run build", "test:coverage": "echo \"Error: no test specified yet\"", "test": "jest" diff --git a/packages/remix/package.json b/packages/remix/package.json index 7728e72f1ce..c6fafeffc19 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -29,7 +29,8 @@ "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch", - "clean": "rimraf ./dist" + "clean": "rimraf ./dist", + "lint": "eslint ." }, "dependencies": { "@clerk/clerk-react": "^4.2.6", diff --git a/packages/sdk-node/package.json b/packages/sdk-node/package.json index 12565acc828..6c8ea295381 100644 --- a/packages/sdk-node/package.json +++ b/packages/sdk-node/package.json @@ -18,8 +18,8 @@ "build:esm": "node ./scripts/info.js && tsc -p tsconfig.esm.json", "build": "run-p build:es5 build:esm", "clean": "rimraf ./dist", + "lint": "eslint .", "test": "jest", - "lint": "eslint ./src --ext .ts", "pack": "npm pack" }, "name": "@clerk/clerk-sdk-node", diff --git a/packages/themes/package.json b/packages/themes/package.json index 8004b58fc75..49997974fd2 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -24,7 +24,8 @@ "scripts": { "build": "tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch", - "clean": "rimraf ./dist" + "clean": "rimraf ./dist", + "lint": "eslint ." }, "devDependencies": { "@clerk/types": "^3.10.1", diff --git a/packages/types/package.json b/packages/types/package.json index 4d6471ad488..df74beaab0a 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -23,7 +23,8 @@ "prepublishOnly": "npm run build", "build": "tsc -p tsconfig.build.json", "dev": "tsc -p tsconfig.build.json --watch", - "clean": "rimraf ./dist" + "clean": "rimraf ./dist", + "lint": "eslint ." }, "dependencies": { "csstype": "^3.1.0" diff --git a/turbo.json b/turbo.json index 0e72acae02b..787e64329fc 100644 --- a/turbo.json +++ b/turbo.json @@ -17,6 +17,10 @@ "dependsOn": ["build"], "outputs": [], "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx"] + }, + "lint": { + "dependsOn": [], + "outputs": [] } } } From 52bb1cb950edc88b53c8ea05c88b3cfd6b1d377e Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Sun, 9 Oct 2022 14:44:01 +0300 Subject: [PATCH 13/41] fix(clerk-js): Fix useSupportEmail.test.tsx --- .../clerk-js/src/ui/hooks/useSupportEmail.test.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx index 5fa5eeccafd..ec3d2d3a280 100644 --- a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx +++ b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx @@ -1,19 +1,19 @@ -import { renderHook } from '@clerk/shared/testUtils'; +import { renderHook } from '@clerk/common/testUtils'; + +import { useSupportEmail } from './useSupportEmail'; const mockUseOptions = jest.fn(); const mockUseEnvironment = jest.fn(); -import { useSupportEmail } from './useSupportEmail'; - -jest.mock('ui/contexts', () => { +jest.mock('../contexts', () => { return { useCoreClerk: () => { return { frontendApi: 'clerk.clerk.dev', }; }, - useEnvironment: mockUseEnvironment, - useOptions: mockUseOptions, + useEnvironment: () => mockUseEnvironment(), + useOptions: () => mockUseOptions(), }; }); From dbf1ea1ba263352976b34f1f9a5879943fe940e2 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Sun, 9 Oct 2022 19:49:39 +0300 Subject: [PATCH 14/41] chore(repo): Bump typescript to 8.6.4 --- package-lock.json | 734 +++++++++--------- package.json | 6 +- packages/backend-core/package.json | 2 +- packages/backend-core/tsconfig.json | 3 +- packages/clerk-js/package.json | 2 +- .../src/ui/contexts/CoreSessionContext.tsx | 2 +- .../src/ui/contexts/CoreUserContext.tsx | 2 +- .../src/ui/hooks/useSupportEmail.test.tsx | 2 +- packages/edge/package.json | 2 +- packages/edge/src/vercel-edge/types.ts | 6 +- packages/expo/package.json | 2 +- packages/gatsby-plugin-clerk/package.json | 2 +- packages/gatsby-plugin-clerk/src/ssr/types.ts | 4 +- packages/nextjs/package.json | 2 +- packages/nextjs/src/middleware/types.ts | 4 +- packages/react/package.json | 2 +- .../src/utils/useMaxAllowedInstancesGuard.tsx | 2 +- packages/remix/package.json | 2 +- packages/remix/src/ssr/types.ts | 2 +- packages/sdk-node/package.json | 2 +- packages/themes/package.json | 2 +- packages/types/package.json | 2 +- 22 files changed, 417 insertions(+), 372 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54457502695..25dc21fcd89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,19 +12,16 @@ "@commitlint/cli": "^16.0.2", "@commitlint/config-conventional": "^16.0.0", "@commitlint/config-lerna-scopes": "^16.0.0", - "@typescript-eslint/eslint-plugin": "^5.15.0", - "@typescript-eslint/parser": "^5.15.0", "conventional-changelog-conventionalcommits": "^4.6.3", - "eslint": "^8.11.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-simple-import-sort": "^7.0.0", - "husky": "^7.0.4", + "eslint": "^8.24.0", + "eslint-config-custom": "*", + "husky": "^8.0.1", "lerna": "^4.0.0", "prettier": "^2.6.0", "pretty-quick": "^3.1.3", "rimraf": "^3.0.2", - "turbo": "^1.1.5", - "typescript": "^4.6.4" + "turbo": "^1.5.5", + "typescript": "4.8.4" }, "engines": { "node": ">=16.8.0", @@ -2839,28 +2836,31 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", + "espree": "^9.4.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dependencies": { "type-fest": "^0.20.2" }, @@ -3627,9 +3627,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -3639,6 +3639,18 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -9835,7 +9847,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.15.0.tgz", "integrity": "sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA==", - "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.15.0", "@typescript-eslint/type-utils": "5.15.0", @@ -9868,7 +9879,6 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -10005,7 +10015,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.15.0.tgz", "integrity": "sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ==", - "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.15.0", "@typescript-eslint/types": "5.15.0", @@ -10032,7 +10041,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz", "integrity": "sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.15.0", "@typescript-eslint/visitor-keys": "5.15.0" @@ -10049,7 +10057,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz", "integrity": "sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA==", - "dev": true, "dependencies": { "@typescript-eslint/utils": "5.15.0", "debug": "^4.3.2", @@ -10075,7 +10082,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.15.0.tgz", "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -10088,7 +10094,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz", "integrity": "sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.15.0", "@typescript-eslint/visitor-keys": "5.15.0", @@ -10115,7 +10120,6 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -10130,7 +10134,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.15.0.tgz", "integrity": "sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.15.0", @@ -10154,7 +10157,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz", "integrity": "sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.15.0", "eslint-visitor-keys": "^3.0.0" @@ -10874,7 +10876,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10939,7 +10940,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -15476,7 +15476,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "peer": true, "dependencies": { "has": "^1.0.3" } @@ -16051,12 +16050,13 @@ } }, "node_modules/eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", + "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", "dependencies": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -16066,30 +16066,32 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", + "find-up": "^5.0.0", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -16101,11 +16103,14 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-custom": { + "resolved": "packages/eslint-config-custom", + "link": true + }, "node_modules/eslint-config-prettier": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -16113,6 +16118,17 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-config-turbo": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-0.0.4.tgz", + "integrity": "sha512-HErPS/wfWkSdV9Yd2dDkhZt3W2B78Ih/aWPFfaHmCMjzPalh+5KxRRGTf8MOBQLCebcWJX0lP1Zvc1rZIHlXGg==", + "dependencies": { + "eslint-plugin-turbo": "0.0.4" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", @@ -16399,11 +16415,18 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", - "dev": true, "peerDependencies": { "eslint": ">=5.0.0" } }, + "node_modules/eslint-plugin-turbo": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-0.0.4.tgz", + "integrity": "sha512-dfmYE/iPvoJInQq+5E/0mj140y/rYwKtzZkn3uVK8+nvwC5zmWKQ6ehMWrL4bYBkGzSgpOndZM+jOXhPQ2m8Cg==", + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -16570,9 +16593,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dependencies": { "type-fest": "^0.20.2" }, @@ -16603,16 +16626,19 @@ } }, "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -17895,7 +17921,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -21063,6 +21088,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, "node_modules/graphql": { "version": "15.8.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", @@ -21893,15 +21923,15 @@ } }, "node_modules/husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", "dev": true, "bin": { "husky": "lib/bin.js" }, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/typicode" @@ -25303,6 +25333,11 @@ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -25528,7 +25563,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "peer": true, "dependencies": { "array-includes": "^3.1.5", "object.assign": "^4.1.3" @@ -28152,7 +28186,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -28166,7 +28199,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -28200,7 +28232,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "peer": true, "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.19.5" @@ -28226,7 +28257,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -31888,7 +31918,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -33940,7 +33969,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -35675,33 +35703,27 @@ } }, "node_modules/turbo": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.1.5.tgz", - "integrity": "sha512-jXW8G4lr01/E/jS/66LYpEjwWFQAksC8TxR8gi3VGea7OeNj28l8zmXoY3IgT5H22MBnhmtOKV/GhsbPjI2Jrg==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.5.5.tgz", + "integrity": "sha512-PVQSDl0STC9WXIyHcYUWs9gXsf8JjQig/FuHfuB8N6+XlgCGB3mPbfMEE6zrChGz2hufH4/guKRX1XJuNL6XTA==", "dev": true, "hasInstallScript": true, "bin": { "turbo": "bin/turbo" }, "optionalDependencies": { - "turbo-darwin-64": "1.1.5", - "turbo-darwin-arm64": "1.1.5", - "turbo-freebsd-64": "1.1.5", - "turbo-freebsd-arm64": "1.1.5", - "turbo-linux-32": "1.1.5", - "turbo-linux-64": "1.1.5", - "turbo-linux-arm": "1.1.5", - "turbo-linux-arm64": "1.1.5", - "turbo-linux-mips64le": "1.1.5", - "turbo-linux-ppc64le": "1.1.5", - "turbo-windows-32": "1.1.5", - "turbo-windows-64": "1.1.5" + "turbo-darwin-64": "1.5.5", + "turbo-darwin-arm64": "1.5.5", + "turbo-linux-64": "1.5.5", + "turbo-linux-arm64": "1.5.5", + "turbo-windows-64": "1.5.5", + "turbo-windows-arm64": "1.5.5" } }, "node_modules/turbo-darwin-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.1.5.tgz", - "integrity": "sha512-qdGMylQ408NmYhzuMmx+25W0iHFyFMRPO4579tDEv+WBiVDfAEYEzjajE4c+CQOLhd1aVEaPdSa+YhngQUgoDQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.5.5.tgz", + "integrity": "sha512-HvEn6P2B+NXDekq9LRpRgUjcT9/oygLTcK47U0qsAJZXRBSq/2hvD7lx4nAwgY/4W3rhYJeWtHTzbhoN6BXqGQ==", "cpu": [ "x64" ], @@ -35712,9 +35734,9 @@ ] }, "node_modules/turbo-darwin-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.1.5.tgz", - "integrity": "sha512-mXU324d3vYzxRT9FSSkW9yG2BvFosd0f4DUvqy4qms8wzM6Yv9Aeo4zZTL86rF88UYGUkbiRaPQUeceb/QARVg==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.5.5.tgz", + "integrity": "sha512-Dmxr09IUy6M0nc7/xWod9galIO2DD500B75sJSkHeT+CCdJOWnlinux0ZPF8CSygNqymwYO8AO2l15/6yxcycg==", "cpu": [ "arm64" ], @@ -35724,49 +35746,10 @@ "darwin" ] }, - "node_modules/turbo-freebsd-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.1.5.tgz", - "integrity": "sha512-qjjPTnZKOxw2x1Ito3yZAYDcwsCEg/5kYJwbPVvDn1jyXoxr3pUxTHUohroxQ6EmyxQ28qL7QpCVWDoQpDwrOQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/turbo-freebsd-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.1.5.tgz", - "integrity": "sha512-jYW+Th9Y6yEYevaFe7v3lFQoxyrpd8wX5KuuvqLazMRbNxvKgqTDmT7AbCOGJY5ejzqGnMlTGkQr8c3g3B8ndA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/turbo-linux-32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.1.5.tgz", - "integrity": "sha512-c5I8tdR1jD8L8pJWk+rlO734bpWI1gwGdvNOaA/IGZxzOfDSn4CGoUErnUPgOadT8azi7lT9UPQf/pLfEvjCOw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/turbo-linux-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.1.5.tgz", - "integrity": "sha512-BZAxLfIkEtQa7u+VPYpdeVVJH6ab4WwXv4oCrUDaZf2BseDUxr57y2ASAWNFsg40T3oXXt4Kcbdc5LibjWQdtQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.5.5.tgz", + "integrity": "sha512-wd07TZ4zXXWjzZE00FcFMLmkybQQK/NV9ff66vvAV0vdiuacSMBCNLrD6Mm4ncfrUPW/rwFW5kU/7hyuEqqtDw==", "cpu": [ "x64" ], @@ -35776,23 +35759,10 @@ "linux" ] }, - "node_modules/turbo-linux-arm": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.1.5.tgz", - "integrity": "sha512-X6J05gQSWTc2c/TCkOQdFLhr35pUjEExY6K8yanYs2QKgd4GvDHmxYaBZ+6f90qcIUHYpe++adDPJcuAUv+8ug==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/turbo-linux-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.1.5.tgz", - "integrity": "sha512-8/yz5L0B6Jb0pNcvx/08LcPswizqggxQ0zlFEw+Oh9RAC+ZM5+X2YiMyKolvLCpkoRqrlKku0lmXH7mx6DWbig==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.5.5.tgz", + "integrity": "sha512-q3q33tuo74R7gicnfvFbnZZvqmlq7Vakcvx0eshifnJw4PR+oMnTCb4w8ElVFx070zsb8DVTibq99y8NJH8T1Q==", "cpu": [ "arm64" ], @@ -35802,38 +35772,12 @@ "linux" ] }, - "node_modules/turbo-linux-mips64le": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.1.5.tgz", - "integrity": "sha512-K26bEFcLDGPkcaW7Eq4CMSxUbJf/x58aE92+0tONhrxXzamaBqTrSxPYlk/T8OoH7HxOvja2ctkpeI/NRAoIyw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-linux-ppc64le": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.1.5.tgz", - "integrity": "sha512-fr1/5yf8fe1BJiW/6Y9lmV+kxZZC3u3xvSBC5AXDSl9u3aJFZl96CRE9tOJbTZMaOVGxhplKD+EiHbjIxUnTrA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-windows-32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.1.5.tgz", - "integrity": "sha512-K9LdIgQXJ7jL0aLJS0l2asJAH/vYBFP7qFzODiAcJ1EeKBjYqAVnIxFQrUN07lzNDtL9WK/aN5q0bJCDnhwTQw==", + "node_modules/turbo-windows-64": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.5.5.tgz", + "integrity": "sha512-lPp9kHonNFfqgovbaW+UAPO5cLmoAN+m3G3FzqcrRPnlzt97vXYsDhDd/4Zy3oAKoAcprtP4CGy0ddisqsKTVw==", "cpu": [ - "ia32" + "x64" ], "dev": true, "optional": true, @@ -35841,12 +35785,12 @@ "win32" ] }, - "node_modules/turbo-windows-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.1.5.tgz", - "integrity": "sha512-c2Jkmw8yGZVz4opzEvB5HAf9XkA8CZBnorie46s44ec0FaNbcP9SCuUNvgAHxqDIHTGWC4A5PoPn0owkD3ss6A==", + "node_modules/turbo-windows-arm64": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.5.5.tgz", + "integrity": "sha512-3AfGULKNZiZVrEzsIE+W79ZRW1+f5r4nM4wLlJ1PTBHyRxBZdD6KTH1tijGfy/uTlcV5acYnKHEkDc6Q9PAXGQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "optional": true, @@ -35929,9 +35873,9 @@ } }, "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -36526,7 +36470,8 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "peer": true }, "node_modules/v8-to-istanbul": { "version": "8.1.1", @@ -38378,7 +38323,7 @@ "jest": "^27.4.7", "nock": "^13.2.1", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" @@ -38414,6 +38359,7 @@ "version": "4.9.0", "license": "MIT", "dependencies": { + "@clerk/common": "^0.0.1", "@clerk/types": "^3.10.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", @@ -38483,7 +38429,7 @@ "ts-jest": "^27.1.3", "ts-loader": "^9.3.0", "type-fest": "^0.20.2", - "typescript": "^4.6.4", + "typescript": "*", "webpack": "^5.72.1", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.2", @@ -38574,7 +38520,7 @@ "@types/jest": "^27.4.0", "jest": "^27.4.7", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=12" @@ -38851,6 +38797,80 @@ } } }, + "packages/eslint-config-custom": { + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.15.0", + "@typescript-eslint/parser": "^5.15.0", + "eslint-config-prettier": "^8.5.0", + "eslint-config-turbo": "latest", + "eslint-plugin-react": "7.28.0", + "eslint-plugin-simple-import-sort": "^7.0.0" + } + }, + "packages/eslint-config-custom/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "packages/eslint-config-custom/node_modules/eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "packages/eslint-config-custom/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "packages/eslint-config-custom/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "packages/expo": { "name": "@clerk/clerk-expo", "version": "0.9.62", @@ -38872,7 +38892,7 @@ "react-dom": "17.0.2", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" @@ -38899,7 +38919,7 @@ "devDependencies": { "@types/cookie": "^0.5.0", "@types/node": "^16.11.55", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=16" @@ -39003,7 +39023,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" @@ -39340,7 +39360,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" @@ -39376,7 +39396,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=16" @@ -39434,7 +39454,7 @@ "npm-run-all": "^4.1.5", "prettier": "^2.5.0", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" @@ -39517,7 +39537,7 @@ "license": "MIT", "devDependencies": { "@clerk/types": "^3.10.1", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" @@ -39537,7 +39557,7 @@ "@types/jest": "^27.4.0", "jest": "^27.4.7", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" @@ -41012,7 +41032,7 @@ "snakecase-keys": "^5.1.2", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@types/node": { @@ -41039,7 +41059,7 @@ "react-native-url-polyfill": "^1.3.0", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@types/node": { @@ -41059,6 +41079,7 @@ "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.5", "@babel/preset-typescript": "^7.12.1", + "@clerk/common": "^0.0.1", "@clerk/shared": "^0.3.27", "@clerk/types": "^3.10.1", "@emotion/cache": "^11.7.1", @@ -41120,7 +41141,7 @@ "ts-jest": "^27.1.3", "ts-loader": "^9.3.0", "type-fest": "^0.20.2", - "typescript": "^4.6.4", + "typescript": "*", "webpack": "^5.72.1", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.2", @@ -41188,7 +41209,7 @@ "swr": "^1.3.0", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@types/node": { @@ -41223,7 +41244,7 @@ "snakecase-keys": "^3.2.1", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "snakecase-keys": { @@ -41256,7 +41277,7 @@ "jest": "^27.4.7", "next": "^12.2.0", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@next/env": { @@ -41404,7 +41425,7 @@ "react-dom": "17.0.2", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@next/env": { @@ -41572,7 +41593,7 @@ "react-dom": "17.0.2", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@types/cookie": { @@ -41647,7 +41668,7 @@ "version": "file:packages/themes", "requires": { "@clerk/types": "^3.10.1", - "typescript": "^4.6.4" + "typescript": "*" } }, "@clerk/types": { @@ -41657,7 +41678,7 @@ "csstype": "^3.1.0", "jest": "^27.4.7", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" } }, "@commitlint/cli": { @@ -42188,25 +42209,25 @@ "peer": true }, "@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", + "espree": "^9.4.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "requires": { "type-fest": "^0.20.2" } @@ -42846,15 +42867,20 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -47608,7 +47634,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.15.0.tgz", "integrity": "sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA==", - "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.15.0", "@typescript-eslint/type-utils": "5.15.0", @@ -47625,7 +47650,6 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -47708,7 +47732,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.15.0.tgz", "integrity": "sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ==", - "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.15.0", "@typescript-eslint/types": "5.15.0", @@ -47720,7 +47743,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.15.0.tgz", "integrity": "sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==", - "dev": true, "requires": { "@typescript-eslint/types": "5.15.0", "@typescript-eslint/visitor-keys": "5.15.0" @@ -47730,7 +47752,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.15.0.tgz", "integrity": "sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA==", - "dev": true, "requires": { "@typescript-eslint/utils": "5.15.0", "debug": "^4.3.2", @@ -47740,14 +47761,12 @@ "@typescript-eslint/types": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.15.0.tgz", - "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==", - "dev": true + "integrity": "sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==" }, "@typescript-eslint/typescript-estree": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.15.0.tgz", "integrity": "sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==", - "dev": true, "requires": { "@typescript-eslint/types": "5.15.0", "@typescript-eslint/visitor-keys": "5.15.0", @@ -47762,7 +47781,6 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -47773,7 +47791,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.15.0.tgz", "integrity": "sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==", - "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@typescript-eslint/scope-manager": "5.15.0", @@ -47787,7 +47804,6 @@ "version": "5.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.15.0.tgz", "integrity": "sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==", - "dev": true, "requires": { "@typescript-eslint/types": "5.15.0", "eslint-visitor-keys": "^3.0.0" @@ -48371,7 +48387,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -48415,7 +48430,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -51962,7 +51976,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "peer": true, "requires": { "has": "^1.0.3" } @@ -52306,12 +52319,13 @@ } }, "eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", + "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", "requires": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -52321,30 +52335,32 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", + "find-up": "^5.0.0", "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "ansi-styles": { @@ -52397,9 +52413,9 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "requires": { "type-fest": "^0.20.2" } @@ -52419,13 +52435,77 @@ } } }, + "eslint-config-custom": { + "version": "file:packages/eslint-config-custom", + "requires": { + "@typescript-eslint/eslint-plugin": "^5.15.0", + "@typescript-eslint/parser": "^5.15.0", + "eslint-config-prettier": "^8.5.0", + "eslint-config-turbo": "latest", + "eslint-plugin-react": "7.28.0", + "eslint-plugin-simple-import-sort": "^7.0.0" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, "eslint-config-prettier": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, "requires": {} }, + "eslint-config-turbo": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-0.0.4.tgz", + "integrity": "sha512-HErPS/wfWkSdV9Yd2dDkhZt3W2B78Ih/aWPFfaHmCMjzPalh+5KxRRGTf8MOBQLCebcWJX0lP1Zvc1rZIHlXGg==", + "requires": { + "eslint-plugin-turbo": "0.0.4" + } + }, "eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", @@ -52660,7 +52740,12 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", - "dev": true, + "requires": {} + }, + "eslint-plugin-turbo": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-0.0.4.tgz", + "integrity": "sha512-dfmYE/iPvoJInQq+5E/0mj140y/rYwKtzZkn3uVK8+nvwC5zmWKQ6ehMWrL4bYBkGzSgpOndZM+jOXhPQ2m8Cg==", "requires": {} }, "eslint-scope": { @@ -52725,12 +52810,12 @@ } }, "espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } }, @@ -53708,8 +53793,7 @@ "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "peer": true + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" }, "gatsby": { "version": "4.20.0", @@ -55542,7 +55626,7 @@ "@types/node": "^16.11.55", "cookie": "^0.5.0", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@clerk/backend-core": { @@ -56203,6 +56287,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, "graphql": { "version": "15.8.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", @@ -56853,9 +56942,9 @@ } }, "husky": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", "dev": true }, "iconv-lite": { @@ -59390,6 +59479,11 @@ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -59570,7 +59664,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "peer": true, "requires": { "array-includes": "^3.1.5", "object.assign": "^4.1.3" @@ -61671,7 +61764,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -61682,7 +61774,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -61704,7 +61795,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "peer": true, "requires": { "define-properties": "^1.1.4", "es-abstract": "^1.19.5" @@ -61724,7 +61814,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -64441,7 +64530,6 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -66056,7 +66144,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -67226,106 +67313,58 @@ } }, "turbo": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.1.5.tgz", - "integrity": "sha512-jXW8G4lr01/E/jS/66LYpEjwWFQAksC8TxR8gi3VGea7OeNj28l8zmXoY3IgT5H22MBnhmtOKV/GhsbPjI2Jrg==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.5.5.tgz", + "integrity": "sha512-PVQSDl0STC9WXIyHcYUWs9gXsf8JjQig/FuHfuB8N6+XlgCGB3mPbfMEE6zrChGz2hufH4/guKRX1XJuNL6XTA==", "dev": true, "requires": { - "turbo-darwin-64": "1.1.5", - "turbo-darwin-arm64": "1.1.5", - "turbo-freebsd-64": "1.1.5", - "turbo-freebsd-arm64": "1.1.5", - "turbo-linux-32": "1.1.5", - "turbo-linux-64": "1.1.5", - "turbo-linux-arm": "1.1.5", - "turbo-linux-arm64": "1.1.5", - "turbo-linux-mips64le": "1.1.5", - "turbo-linux-ppc64le": "1.1.5", - "turbo-windows-32": "1.1.5", - "turbo-windows-64": "1.1.5" + "turbo-darwin-64": "1.5.5", + "turbo-darwin-arm64": "1.5.5", + "turbo-linux-64": "1.5.5", + "turbo-linux-arm64": "1.5.5", + "turbo-windows-64": "1.5.5", + "turbo-windows-arm64": "1.5.5" } }, "turbo-darwin-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.1.5.tgz", - "integrity": "sha512-qdGMylQ408NmYhzuMmx+25W0iHFyFMRPO4579tDEv+WBiVDfAEYEzjajE4c+CQOLhd1aVEaPdSa+YhngQUgoDQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.5.5.tgz", + "integrity": "sha512-HvEn6P2B+NXDekq9LRpRgUjcT9/oygLTcK47U0qsAJZXRBSq/2hvD7lx4nAwgY/4W3rhYJeWtHTzbhoN6BXqGQ==", "dev": true, "optional": true }, "turbo-darwin-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.1.5.tgz", - "integrity": "sha512-mXU324d3vYzxRT9FSSkW9yG2BvFosd0f4DUvqy4qms8wzM6Yv9Aeo4zZTL86rF88UYGUkbiRaPQUeceb/QARVg==", - "dev": true, - "optional": true - }, - "turbo-freebsd-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.1.5.tgz", - "integrity": "sha512-qjjPTnZKOxw2x1Ito3yZAYDcwsCEg/5kYJwbPVvDn1jyXoxr3pUxTHUohroxQ6EmyxQ28qL7QpCVWDoQpDwrOQ==", - "dev": true, - "optional": true - }, - "turbo-freebsd-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.1.5.tgz", - "integrity": "sha512-jYW+Th9Y6yEYevaFe7v3lFQoxyrpd8wX5KuuvqLazMRbNxvKgqTDmT7AbCOGJY5ejzqGnMlTGkQr8c3g3B8ndA==", - "dev": true, - "optional": true - }, - "turbo-linux-32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.1.5.tgz", - "integrity": "sha512-c5I8tdR1jD8L8pJWk+rlO734bpWI1gwGdvNOaA/IGZxzOfDSn4CGoUErnUPgOadT8azi7lT9UPQf/pLfEvjCOw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.5.5.tgz", + "integrity": "sha512-Dmxr09IUy6M0nc7/xWod9galIO2DD500B75sJSkHeT+CCdJOWnlinux0ZPF8CSygNqymwYO8AO2l15/6yxcycg==", "dev": true, "optional": true }, "turbo-linux-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.1.5.tgz", - "integrity": "sha512-BZAxLfIkEtQa7u+VPYpdeVVJH6ab4WwXv4oCrUDaZf2BseDUxr57y2ASAWNFsg40T3oXXt4Kcbdc5LibjWQdtQ==", - "dev": true, - "optional": true - }, - "turbo-linux-arm": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.1.5.tgz", - "integrity": "sha512-X6J05gQSWTc2c/TCkOQdFLhr35pUjEExY6K8yanYs2QKgd4GvDHmxYaBZ+6f90qcIUHYpe++adDPJcuAUv+8ug==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.5.5.tgz", + "integrity": "sha512-wd07TZ4zXXWjzZE00FcFMLmkybQQK/NV9ff66vvAV0vdiuacSMBCNLrD6Mm4ncfrUPW/rwFW5kU/7hyuEqqtDw==", "dev": true, "optional": true }, "turbo-linux-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.1.5.tgz", - "integrity": "sha512-8/yz5L0B6Jb0pNcvx/08LcPswizqggxQ0zlFEw+Oh9RAC+ZM5+X2YiMyKolvLCpkoRqrlKku0lmXH7mx6DWbig==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.5.5.tgz", + "integrity": "sha512-q3q33tuo74R7gicnfvFbnZZvqmlq7Vakcvx0eshifnJw4PR+oMnTCb4w8ElVFx070zsb8DVTibq99y8NJH8T1Q==", "dev": true, "optional": true }, - "turbo-linux-mips64le": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.1.5.tgz", - "integrity": "sha512-K26bEFcLDGPkcaW7Eq4CMSxUbJf/x58aE92+0tONhrxXzamaBqTrSxPYlk/T8OoH7HxOvja2ctkpeI/NRAoIyw==", - "dev": true, - "optional": true - }, - "turbo-linux-ppc64le": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.1.5.tgz", - "integrity": "sha512-fr1/5yf8fe1BJiW/6Y9lmV+kxZZC3u3xvSBC5AXDSl9u3aJFZl96CRE9tOJbTZMaOVGxhplKD+EiHbjIxUnTrA==", - "dev": true, - "optional": true - }, - "turbo-windows-32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.1.5.tgz", - "integrity": "sha512-K9LdIgQXJ7jL0aLJS0l2asJAH/vYBFP7qFzODiAcJ1EeKBjYqAVnIxFQrUN07lzNDtL9WK/aN5q0bJCDnhwTQw==", + "turbo-windows-64": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.5.5.tgz", + "integrity": "sha512-lPp9kHonNFfqgovbaW+UAPO5cLmoAN+m3G3FzqcrRPnlzt97vXYsDhDd/4Zy3oAKoAcprtP4CGy0ddisqsKTVw==", "dev": true, "optional": true }, - "turbo-windows-64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.1.5.tgz", - "integrity": "sha512-c2Jkmw8yGZVz4opzEvB5HAf9XkA8CZBnorie46s44ec0FaNbcP9SCuUNvgAHxqDIHTGWC4A5PoPn0owkD3ss6A==", + "turbo-windows-arm64": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.5.5.tgz", + "integrity": "sha512-3AfGULKNZiZVrEzsIE+W79ZRW1+f5r4nM4wLlJ1PTBHyRxBZdD6KTH1tijGfy/uTlcV5acYnKHEkDc6Q9PAXGQ==", "dev": true, "optional": true }, @@ -67389,9 +67428,9 @@ } }, "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" }, "ua-parser-js": { "version": "0.7.31", @@ -67835,7 +67874,8 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "peer": true }, "v8-to-istanbul": { "version": "8.1.1", diff --git a/package.json b/package.json index 059f3178486..064946ccef0 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,11 @@ "pretty-quick": "^3.1.3", "rimraf": "^3.0.2", "turbo": "^1.5.5", - "typescript": "^4.6.4" + "typescript": "4.8.4" }, "scripts": { - "dev": "turbo dev --filter=!@clerk/expo", + "dev": "turbo dev --filter=@clerk/* --filter=!@clerk/expo", + "dev:playground": "echo 'Not ready for use yet' && exit 1 && turbo dev --filter=@playground/*", "build": "turbo build --concurrency=${TURBO_CONCURRENCY:-2}", "test": "turbo test --concurrency=${TURBO_CONCURRENCY:-2}", "clean": "turbo clean", @@ -44,7 +45,6 @@ "prerelease": "npx rimraf packages/*/dist && turbo run build test --concurrency=${TURBO_CONCURRENCY:-2}", "release:next": "lerna publish from-package --dist-tag next", "version": "./scripts/version-info.sh", - "lerna": "lerna", "nuke": "rm -r node_modules; for d in packages/*/node_modules; do echo $d; rm -r $d; done", "yalc:all": "for d in packages/*/; do echo $d; cd $d; yalc push --replace; cd '../../'; done", "prepare": "husky install" diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 76344ec8411..d7882493cca 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -28,7 +28,7 @@ "jest": "^27.4.7", "nock": "^13.2.1", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "publishConfig": { "access": "public" diff --git a/packages/backend-core/tsconfig.json b/packages/backend-core/tsconfig.json index b5d6ae5dc28..145d275b1dc 100644 --- a/packages/backend-core/tsconfig.json +++ b/packages/backend-core/tsconfig.json @@ -14,7 +14,8 @@ "resolveJsonModule": true, "sourceMap": false, "strict": true, - "target": "ES2020" + "target": "ES2020", + "skipLibCheck": true }, "include": ["src"], "exclude": ["node_modules", "dist", "src/**/*.spec.ts", "src/**/*.test.ts", "src/__tests__"] diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index c2c90f8b661..2cf85f50fbf 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -108,7 +108,7 @@ "ts-jest": "^27.1.3", "ts-loader": "^9.3.0", "type-fest": "^0.20.2", - "typescript": "^4.6.4", + "typescript": "*", "webpack": "^5.72.1", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.9.2", diff --git a/packages/clerk-js/src/ui/contexts/CoreSessionContext.tsx b/packages/clerk-js/src/ui/contexts/CoreSessionContext.tsx index 47f860c1708..dcd6539e28f 100644 --- a/packages/clerk-js/src/ui/contexts/CoreSessionContext.tsx +++ b/packages/clerk-js/src/ui/contexts/CoreSessionContext.tsx @@ -31,7 +31,7 @@ export function withCoreSessionSwitchGuard<P>(Component: React.ComponentType<P>) if (context.value === undefined) { return null; } - return <Component {...props} />; + return <Component {...(props as any)} />; }; const displayName = Component.displayName || Component.name || 'Component'; diff --git a/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx b/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx index 808f42ffa65..8ddb62ff677 100644 --- a/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx +++ b/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx @@ -25,7 +25,7 @@ export function withCoreUserGuard<P>(Component: React.ComponentType<P>): React.C if (!user) { return null; } - return <Component {...props} />; + return <Component {...(props as any)} />; }; const displayName = Component.displayName || Component.name || 'Component'; diff --git a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx index ec3d2d3a280..11454ee7684 100644 --- a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx +++ b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx @@ -1,4 +1,4 @@ -import { renderHook } from '@clerk/common/testUtils'; +import { renderHook } from '@clerk/shared/testUtils'; import { useSupportEmail } from './useSupportEmail'; diff --git a/packages/edge/package.json b/packages/edge/package.json index 8cbdd8246eb..589605f774a 100644 --- a/packages/edge/package.json +++ b/packages/edge/package.json @@ -54,7 +54,7 @@ "@types/jest": "^27.4.0", "jest": "^27.4.7", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "repository": { "type": "git", diff --git a/packages/edge/src/vercel-edge/types.ts b/packages/edge/src/vercel-edge/types.ts index a31e84b4aa0..3a7669c296c 100644 --- a/packages/edge/src/vercel-edge/types.ts +++ b/packages/edge/src/vercel-edge/types.ts @@ -10,12 +10,12 @@ export type WithEdgeMiddlewareAuthOptions = { strict?: boolean; }; -export type WithEdgeMiddlewareAuthCallback<Return, Options> = ( +export type WithEdgeMiddlewareAuthCallback<Return, Options extends WithEdgeMiddlewareAuthOptions> = ( req: RequestWithAuth<Options>, event: NextFetchEvent, ) => Return; -export type WithEdgeMiddlewareAuthMiddlewareResult<CallbackReturn, Options> = ( +export type WithEdgeMiddlewareAuthMiddlewareResult<CallbackReturn, Options extends WithEdgeMiddlewareAuthOptions> = ( req: RequestWithAuth<Options>, event: NextFetchEvent, ) => Promise<Awaited<CallbackReturn>>; @@ -30,7 +30,7 @@ export type RequestWithAuth<Options extends WithEdgeMiddlewareAuthOptions = any> type NextMiddlewareReturnOptions = NextResponse | Response | null | undefined; export type NextMiddlewareResult = NextMiddlewareReturnOptions; -export type WithAuthNextMiddlewareHandler<Options> = ( +export type WithAuthNextMiddlewareHandler<Options extends WithEdgeMiddlewareAuthOptions> = ( req: RequestWithAuth<Options>, event: NextFetchEvent, ) => NextMiddlewareResult | Promise<NextMiddlewareResult>; diff --git a/packages/expo/package.json b/packages/expo/package.json index c2016c3047d..6a18a01f5ec 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -43,7 +43,7 @@ "react-dom": "17.0.2", "ts-jest": "^27.1.3", "tslib": "^2.3.1", - "typescript": "^4.6.4" + "typescript": "*" }, "peerDependencies": { "react": ">=16" diff --git a/packages/gatsby-plugin-clerk/package.json b/packages/gatsby-plugin-clerk/package.json index 31342231ce0..b356f53864b 100644 --- a/packages/gatsby-plugin-clerk/package.json +++ b/packages/gatsby-plugin-clerk/package.json @@ -41,7 +41,7 @@ "devDependencies": { "@types/cookie": "^0.5.0", "@types/node": "^16.11.55", - "typescript": "^4.6.4" + "typescript": "*" }, "peerDependencies": { "gatsby": "^4.0.0" diff --git a/packages/gatsby-plugin-clerk/src/ssr/types.ts b/packages/gatsby-plugin-clerk/src/ssr/types.ts index 7fe6ea7325d..e870ff5497f 100644 --- a/packages/gatsby-plugin-clerk/src/ssr/types.ts +++ b/packages/gatsby-plugin-clerk/src/ssr/types.ts @@ -9,7 +9,9 @@ export type GetServerDataPropsWithAuth<Options extends WithServerAuthOptions = a } & (Options extends { loadSession: true } ? { session: Session | null } : {}) & (Options extends { loadUser: true } ? { user: User | null } : {}); -export type WithServerAuthCallback<Return, Options> = (props: GetServerDataPropsWithAuth<Options>) => Return; +export type WithServerAuthCallback<Return, Options extends WithServerAuthOptions> = ( + props: GetServerDataPropsWithAuth<Options>, +) => Return; export type WithServerAuthOptions = { loadUser?: boolean; diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 7187939f639..2f0a03e8978 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -51,7 +51,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "peerDependencies": { "next": ">=10" diff --git a/packages/nextjs/src/middleware/types.ts b/packages/nextjs/src/middleware/types.ts index 66c55037e2e..6855bc7dfcf 100644 --- a/packages/nextjs/src/middleware/types.ts +++ b/packages/nextjs/src/middleware/types.ts @@ -13,7 +13,9 @@ export type WithServerSideAuthOptions = { authorizedParties?: string[]; }; -export type WithServerSideAuthCallback<Return, Options> = (context: ContextWithAuth<Options>) => Return; +export type WithServerSideAuthCallback<Return, Options extends WithServerSideAuthOptions> = ( + context: ContextWithAuth<Options>, +) => Return; export type WithServerSideAuthResult<CallbackReturn> = ( context: GetServerSidePropsContext, diff --git a/packages/react/package.json b/packages/react/package.json index 673b517ae76..2547e6b46a4 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -50,7 +50,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "peerDependencies": { "react": ">=16" diff --git a/packages/react/src/utils/useMaxAllowedInstancesGuard.tsx b/packages/react/src/utils/useMaxAllowedInstancesGuard.tsx index 71e902167bb..cd2c223c12a 100644 --- a/packages/react/src/utils/useMaxAllowedInstancesGuard.tsx +++ b/packages/react/src/utils/useMaxAllowedInstancesGuard.tsx @@ -24,7 +24,7 @@ export function withMaxAllowedInstancesGuard<P>( const displayName = WrappedComponent.displayName || WrappedComponent.name || name || 'Component'; const Hoc = (props: P) => { useMaxAllowedInstancesGuard(name, error); - return <WrappedComponent {...props} />; + return <WrappedComponent {...(props as any)} />; }; Hoc.displayName = `withMaxAllowedInstancesGuard(${displayName})`; return Hoc; diff --git a/packages/remix/package.json b/packages/remix/package.json index c6fafeffc19..03e4fad55ab 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -49,7 +49,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "peerDependencies": { "@remix-run/react": "^1.2.1", diff --git a/packages/remix/src/ssr/types.ts b/packages/remix/src/ssr/types.ts index 67f2bc2d870..17515efdd12 100644 --- a/packages/remix/src/ssr/types.ts +++ b/packages/remix/src/ssr/types.ts @@ -12,7 +12,7 @@ export type RootAuthLoaderOptions = { authorizedParties?: []; }; -export type RootAuthLoaderCallback<Options> = ( +export type RootAuthLoaderCallback<Options extends RootAuthLoaderOptions> = ( args: LoaderFunctionArgsWithAuth<Options>, ) => RootAuthLoaderCallbackReturn; diff --git a/packages/sdk-node/package.json b/packages/sdk-node/package.json index 6c8ea295381..3abf5747834 100644 --- a/packages/sdk-node/package.json +++ b/packages/sdk-node/package.json @@ -35,7 +35,7 @@ "npm-run-all": "^4.1.5", "prettier": "^2.5.0", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "dependencies": { "@clerk/backend-core": "^2.8.1", diff --git a/packages/themes/package.json b/packages/themes/package.json index 49997974fd2..b77231a8274 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -29,7 +29,7 @@ }, "devDependencies": { "@clerk/types": "^3.10.1", - "typescript": "^4.6.4" + "typescript": "*" }, "peerDependencies": { "react": ">=16" diff --git a/packages/types/package.json b/packages/types/package.json index df74beaab0a..89066632e3d 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -33,7 +33,7 @@ "@types/jest": "^27.4.0", "jest": "^27.4.7", "ts-jest": "^27.1.3", - "typescript": "^4.6.4" + "typescript": "*" }, "engines": { "node": ">=14" From dd8c4165799272b9a8552a56dd2cd917254e56b5 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Sun, 9 Oct 2022 20:18:46 +0300 Subject: [PATCH 15/41] chore(repo): Introduce @clerk/common --- .gitignore | 1 + package-lock.json | 262 +++++------------- packages/backend-core/package.json | 2 +- packages/clerk-js/package.json | 2 - packages/clerk-js/src/core/clerk.ts | 4 +- packages/clerk-js/src/core/fapiClient.ts | 2 +- .../src/core/resources/EmailAddress.ts | 2 +- .../src/core/resources/ExternalAccount.ts | 2 +- .../clerk-js/src/core/resources/Session.ts | 2 +- .../clerk-js/src/core/resources/SignIn.ts | 4 +- .../clerk-js/src/core/resources/SignUp.ts | 2 +- packages/clerk-js/src/ui/Components.tsx | 1 - .../src/ui/SignUp/signUpFormHelpers.ts | 2 +- .../ui/UserProfile/ActiveDevicesSection.tsx | 2 +- .../clerk-js/src/ui/common/authPropHelpers.ts | 2 +- .../src/ui/common/withRedirectToHome.test.tsx | 2 +- .../src/ui/contexts/CoreUserContext.tsx | 2 +- packages/clerk-js/src/ui/elements/Avatar.tsx | 2 +- .../src/ui/hooks/useSupportEmail.test.tsx | 2 +- .../src/ui/router/HashRouter.test.tsx | 2 +- .../src/ui/router/PathRouter.test.tsx | 2 +- .../clerk-js/src/ui/router/Switch.test.tsx | 2 +- .../src/ui/router/VirtualRouter.test.tsx | 2 +- .../src/ui/router/__mocks__/RouteContext.tsx | 2 +- packages/clerk-js/src/utils/cookies/client.ts | 2 +- .../clerk-js/src/utils/cookies/client_uat.ts | 2 +- .../clerk-js/src/utils/cookies/handler.ts | 2 +- .../clerk-js/src/utils/cookies/initted.ts | 2 +- .../clerk-js/src/utils/cookies/session.ts | 2 +- .../src/utils/ignoreEventValue.test.ts | 2 +- packages/clerk-js/src/utils/pageLifecycle.ts | 2 +- packages/clerk-js/src/utils/url.ts | 2 +- packages/common/global.d.ts | 6 + packages/common/package.json | 39 +++ packages/common/src/index.ts | 1 + packages/common/src/testUtils/index.ts | 1 + packages/common/src/testUtils/testUtils.ts | 36 +++ packages/common/src/utils/array.test.ts | 17 ++ packages/common/src/utils/array.ts | 12 + packages/common/src/utils/browser.test.ts | 7 + packages/common/src/utils/browser.ts | 3 + .../src/utils/color/cssColorUtils.test.ts | 71 +++++ .../common/src/utils/color/cssColorUtils.ts | 151 ++++++++++ packages/common/src/utils/color/index.ts | 2 + packages/common/src/utils/color/predicates.ts | 37 +++ packages/common/src/utils/cookies.ts | 27 ++ packages/common/src/utils/date.test.ts | 67 +++++ packages/common/src/utils/date.ts | 81 ++++++ packages/common/src/utils/file.ts | 18 ++ packages/common/src/utils/index.ts | 16 ++ packages/common/src/utils/isRetinaDisplay.ts | 9 + .../localStorageBroadcastChannel.test.ts | 44 +++ .../src/utils/localStorageBroadcastChannel.ts | 52 ++++ .../common/src/utils/mimeTypeExtensions.ts | 14 + packages/common/src/utils/noop.ts | 3 + packages/common/src/utils/object.test.ts | 145 ++++++++++ packages/common/src/utils/object.ts | 48 ++++ packages/common/src/utils/poller.ts | 33 +++ packages/common/src/utils/ssr.ts | 3 + packages/common/src/utils/string.test.ts | 20 ++ packages/common/src/utils/string.ts | 19 ++ packages/common/src/utils/url.test.ts | 16 ++ packages/common/src/utils/url.ts | 6 + packages/common/testUtils/package.json | 6 + packages/common/tsconfig.json | 19 ++ packages/common/tsup.config.ts | 19 ++ packages/common/vite.config.ts | 8 + .../src/components/SignInButton.test.tsx | 2 +- .../SignInWithMetamaskButton.test.tsx | 2 +- .../src/components/SignOutButton.test.tsx | 2 +- .../src/components/SignUpButton.test.tsx | 2 +- .../useMaxAllowedInstancesGuard.test.tsx | 2 +- packages/shared/package.json | 5 +- 73 files changed, 1167 insertions(+), 230 deletions(-) create mode 100644 packages/common/global.d.ts create mode 100644 packages/common/package.json create mode 100644 packages/common/src/index.ts create mode 100644 packages/common/src/testUtils/index.ts create mode 100644 packages/common/src/testUtils/testUtils.ts create mode 100644 packages/common/src/utils/array.test.ts create mode 100644 packages/common/src/utils/array.ts create mode 100644 packages/common/src/utils/browser.test.ts create mode 100644 packages/common/src/utils/browser.ts create mode 100644 packages/common/src/utils/color/cssColorUtils.test.ts create mode 100644 packages/common/src/utils/color/cssColorUtils.ts create mode 100644 packages/common/src/utils/color/index.ts create mode 100644 packages/common/src/utils/color/predicates.ts create mode 100644 packages/common/src/utils/cookies.ts create mode 100644 packages/common/src/utils/date.test.ts create mode 100644 packages/common/src/utils/date.ts create mode 100644 packages/common/src/utils/file.ts create mode 100644 packages/common/src/utils/index.ts create mode 100644 packages/common/src/utils/isRetinaDisplay.ts create mode 100644 packages/common/src/utils/localStorageBroadcastChannel.test.ts create mode 100644 packages/common/src/utils/localStorageBroadcastChannel.ts create mode 100644 packages/common/src/utils/mimeTypeExtensions.ts create mode 100644 packages/common/src/utils/noop.ts create mode 100644 packages/common/src/utils/object.test.ts create mode 100644 packages/common/src/utils/object.ts create mode 100644 packages/common/src/utils/poller.ts create mode 100644 packages/common/src/utils/ssr.ts create mode 100644 packages/common/src/utils/string.test.ts create mode 100644 packages/common/src/utils/string.ts create mode 100644 packages/common/src/utils/url.test.ts create mode 100644 packages/common/src/utils/url.ts create mode 100644 packages/common/testUtils/package.json create mode 100644 packages/common/tsconfig.json create mode 100644 packages/common/tsup.config.ts create mode 100644 packages/common/vite.config.ts diff --git a/.gitignore b/.gitignore index 169707027f8..56a856da391 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ Thumbs.db lerna-debug.log playground +playground1 diff --git a/package-lock.json b/package-lock.json index 25dc21fcd89..94dcedb6357 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8877,7 +8877,6 @@ "version": "7.31.2", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -8896,7 +8895,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -8911,7 +8909,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8927,7 +8924,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -8938,14 +8934,12 @@ "node_modules/@testing-library/dom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@testing-library/dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -8954,7 +8948,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8966,7 +8959,6 @@ "version": "5.16.2", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", - "dev": true, "dependencies": { "@babel/runtime": "^7.9.2", "@types/testing-library__jest-dom": "^5.9.1", @@ -8988,7 +8980,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9003,7 +8994,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "dev": true, "engines": { "node": ">=6.0" } @@ -9012,7 +9002,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9025,7 +9014,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -9036,14 +9024,12 @@ "node_modules/@testing-library/jest-dom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@testing-library/jest-dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -9052,7 +9038,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -9064,7 +9049,6 @@ "version": "11.2.7", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", - "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^7.28.1" @@ -9081,7 +9065,6 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-3.7.0.tgz", "integrity": "sha512-TwfbY6BWtWIHitjT05sbllyLIProcysC0dF0q1bbDa7OHLC6A6rJOYJwZ13hzfz3O4RtOuInmprBozJRyyo7/g==", - "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", "@types/testing-library__react-hooks": "^3.4.0" @@ -9095,7 +9078,6 @@ "version": "12.8.3", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz", "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==", - "dev": true, "dependencies": { "@babel/runtime": "^7.12.5" }, @@ -9175,8 +9157,7 @@ "node_modules/@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "dev": true + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" }, "node_modules/@types/babel__core": { "version": "7.1.18", @@ -9448,14 +9429,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -9464,7 +9443,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -9473,7 +9451,6 @@ "version": "27.4.0", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", - "dev": true, "dependencies": { "jest-diff": "^27.0.0", "pretty-format": "^27.0.0" @@ -9483,7 +9460,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -9495,7 +9471,6 @@ "version": "27.4.6", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -9506,9 +9481,9 @@ } }, "node_modules/@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", "dev": true }, "node_modules/@types/json-buffer": { @@ -9669,7 +9644,6 @@ "version": "17.0.1", "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz", "integrity": "sha512-3Fi2O6Zzq/f3QR9dRnlnHso9bMl7weKCviFmfF6B4LS1Uat6Hkm15k0ZAQuDz+UBq6B3+g+NM6IT2nr5QgPzCw==", - "dev": true, "dependencies": { "@types/react": "*" } @@ -9768,7 +9742,6 @@ "version": "5.14.2", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz", "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", - "dev": true, "dependencies": { "@types/jest": "*" } @@ -9777,7 +9750,6 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.4.1.tgz", "integrity": "sha512-G4JdzEcq61fUyV6wVW9ebHWEiLK2iQvaBuCHHn9eMSbZzVh4Z4wHnUGIvQOYCCYeu5DnUtFyNYuAAgbSaO/43Q==", - "dev": true, "dependencies": { "@types/react-test-renderer": "*" } @@ -9834,8 +9806,7 @@ "node_modules/@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "node_modules/@types/yoga-layout": { "version": "1.9.2", @@ -11101,7 +11072,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "devOptional": true, "bin": { "atob": "bin/atob.js" }, @@ -13887,7 +13857,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dev": true, "dependencies": { "inherits": "^2.0.4", "source-map": "^0.6.1", @@ -14100,7 +14069,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14948,7 +14916,6 @@ "version": "27.4.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } @@ -15005,8 +14972,7 @@ "node_modules/dom-accessibility-api": { "version": "0.5.11", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", - "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==", - "dev": true + "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==" }, "node_modules/dom-converter": { "version": "0.2.0", @@ -22112,7 +22078,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -23746,7 +23711,6 @@ "version": "27.4.6", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", - "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^27.4.0", @@ -23761,7 +23725,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -23776,7 +23739,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23792,7 +23754,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -23803,14 +23764,12 @@ "node_modules/jest-diff/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/jest-diff/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -23819,7 +23778,6 @@ "version": "27.4.6", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -23833,7 +23791,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, "engines": { "node": ">=10" }, @@ -23845,7 +23802,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -24016,7 +23972,6 @@ "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } @@ -25329,9 +25284,13 @@ "dev": true }, "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/js-sdsl": { "version": "4.1.5", @@ -26329,7 +26288,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", - "dev": true, "bin": { "lz-string": "bin/bin.js" } @@ -26735,7 +26693,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, "engines": { "node": ">=4" } @@ -30302,7 +30259,6 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, "dependencies": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -30317,7 +30273,6 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -30333,7 +30288,6 @@ "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -30342,7 +30296,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -30357,7 +30310,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -30373,7 +30325,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -30384,14 +30335,12 @@ "node_modules/pretty-format/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/pretty-format/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -30400,7 +30349,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -31304,8 +31252,7 @@ "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", @@ -31386,7 +31333,6 @@ "version": "16.14.1", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", - "dev": true, "dependencies": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0" @@ -31399,7 +31345,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, "dependencies": { "object-assign": "^4.1.1", "react-is": "^17.0.2", @@ -31844,7 +31789,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -33067,9 +33011,9 @@ } }, "node_modules/snakecase-keys": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-5.1.2.tgz", - "integrity": "sha512-fvtDQZqPBqYb0dEY97TGuOMbN2NJ05Tj4MaoKwjTKkmjcG6mrd58JYGr23UWZRi6Aqv49Fk4HtjTIStOQenaug==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-5.4.4.tgz", + "integrity": "sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA==", "dependencies": { "map-obj": "^4.1.0", "snake-case": "^3.0.4", @@ -33496,7 +33440,6 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0" @@ -34065,7 +34008,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, "dependencies": { "min-indent": "^1.0.0" }, @@ -38315,7 +38257,7 @@ "@types/node-fetch": "^2", "node-fetch": "^2.6.0", "query-string": "^7.0.1", - "snakecase-keys": "^5.1.2", + "snakecase-keys": "^5.4.4", "tslib": "^2.3.1" }, "devDependencies": { @@ -38371,7 +38313,6 @@ "core-js": "^3.18.3", "deepmerge": "^4.2.2", "dequal": "^2.0.2", - "js-cookie": "^2.2.1", "qrcode.react": "^3.1.0", "qs": "^6.9.4", "react": "17.0.2", @@ -38386,7 +38327,6 @@ "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.5", "@babel/preset-typescript": "^7.12.1", - "@clerk/shared": "^0.3.27", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@svgr/webpack": "^6.2.1", "@testing-library/dom": "^7.28.1", @@ -38497,12 +38437,25 @@ } }, "packages/common": { + "name": "@clerk/common", "version": "0.0.1", "license": "ISC", "devDependencies": { + "@clerk/types": "^3.10.1", + "@types/js-cookie": "^3.0.2", + "js-cookie": "^3.0.1", "tsup": "^6.2.3", - "typescript": "^4.6.4", + "typescript": "*", "vitest": "^0.23.4" + }, + "peerDependencies": { + "@testing-library/dom": "^7.28.1", + "@testing-library/jest-dom": "^5.11.6", + "@testing-library/react": "^11.2.1", + "@testing-library/react-hooks": "^3.4.2", + "@testing-library/user-event": "^12.2.2", + "react": "17.0.2", + "react-dom": "17.0.2" } }, "packages/edge": { @@ -39492,7 +39445,6 @@ "@types/babel__preset-env": "^7", "@types/classnames": "^2", "@types/jest": "^27.4.0", - "@types/js-cookie": "^2", "@types/node": "^16.11.55", "@types/react": "^17.0.39", "@types/react-color": "^3.0.4", @@ -39505,7 +39457,6 @@ "core-js": "^3.18.3", "identity-obj-proxy": "^3.0.0", "jest": "^27.4.7", - "js-cookie": "^2.2.1", "react": "17.0.2", "react-color": "2.19.3", "react-dom": "17.0.2", @@ -39517,7 +39468,6 @@ "@popperjs/core": "^2.5.4", "@svgr/webpack": "^6.2.1", "core-js": "^3.18.3", - "js-cookie": "^2.2.1", "react": "17.0.2", "react-color": "2.19.3", "react-dom": "17.0.2", @@ -41029,7 +40979,7 @@ "nock": "^13.2.1", "node-fetch": "^2.6.0", "query-string": "^7.0.1", - "snakecase-keys": "^5.1.2", + "snakecase-keys": "^5.4.4", "ts-jest": "^27.1.3", "tslib": "^2.3.1", "typescript": "*" @@ -41080,7 +41030,6 @@ "@babel/preset-react": "^7.12.5", "@babel/preset-typescript": "^7.12.1", "@clerk/common": "^0.0.1", - "@clerk/shared": "^0.3.27", "@clerk/types": "^3.10.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", @@ -41119,7 +41068,6 @@ "fork-ts-checker-webpack-plugin": "^7.2.11", "identity-obj-proxy": "^3.0.0", "jest": "^27.4.7", - "js-cookie": "^2.2.1", "jsonwebtoken": "^8.5.1", "node-fetch": "^3.2.0", "postcss": "^8.4.13", @@ -41261,8 +41209,11 @@ "@clerk/common": { "version": "file:packages/common", "requires": { + "@clerk/types": "^3.10.1", + "@types/js-cookie": "^3.0.2", + "js-cookie": "^3.0.1", "tsup": "^6.2.3", - "typescript": "^4.6.4", + "typescript": "*", "vitest": "^0.23.4" } }, @@ -41634,7 +41585,6 @@ "@types/babel__preset-env": "^7", "@types/classnames": "^2", "@types/jest": "^27.4.0", - "@types/js-cookie": "^2", "@types/node": "^16.11.55", "@types/react": "^17.0.39", "@types/react-color": "^3.0.4", @@ -41647,7 +41597,6 @@ "core-js": "^3.18.3", "identity-obj-proxy": "^3.0.0", "jest": "^27.4.7", - "js-cookie": "^2.2.1", "react": "17.0.2", "react-color": "2.19.3", "react-dom": "17.0.2", @@ -46746,7 +46695,6 @@ "version": "7.31.2", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", - "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -46762,7 +46710,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -46771,7 +46718,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -46781,7 +46727,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -46789,20 +46734,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -46813,7 +46755,6 @@ "version": "5.16.2", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz", "integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==", - "dev": true, "requires": { "@babel/runtime": "^7.9.2", "@types/testing-library__jest-dom": "^5.9.1", @@ -46830,7 +46771,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -46838,14 +46778,12 @@ "aria-query": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "dev": true + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==" }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -46855,7 +46793,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -46863,20 +46800,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -46887,7 +46821,6 @@ "version": "11.2.7", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", - "dev": true, "requires": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^7.28.1" @@ -46897,7 +46830,6 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-3.7.0.tgz", "integrity": "sha512-TwfbY6BWtWIHitjT05sbllyLIProcysC0dF0q1bbDa7OHLC6A6rJOYJwZ13hzfz3O4RtOuInmprBozJRyyo7/g==", - "dev": true, "requires": { "@babel/runtime": "^7.12.5", "@types/testing-library__react-hooks": "^3.4.0" @@ -46907,7 +46839,6 @@ "version": "12.8.3", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz", "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==", - "dev": true, "requires": { "@babel/runtime": "^7.12.5" } @@ -46971,8 +46902,7 @@ "@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "dev": true + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" }, "@types/babel__core": { "version": "7.1.18", @@ -47243,14 +47173,12 @@ "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -47259,7 +47187,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -47268,7 +47195,6 @@ "version": "27.4.0", "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.4.0.tgz", "integrity": "sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ==", - "dev": true, "requires": { "jest-diff": "^27.0.0", "pretty-format": "^27.0.0" @@ -47277,14 +47203,12 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" }, "pretty-format": { "version": "27.4.6", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, "requires": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -47294,9 +47218,9 @@ } }, "@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.2.tgz", + "integrity": "sha512-6+0ekgfusHftJNYpihfkMu8BWdeHs9EOJuGcSofErjstGPfPGEu9yTu4t460lTzzAMl2cM5zngQJqPMHbbnvYA==", "dev": true }, "@types/json-buffer": { @@ -47457,7 +47381,6 @@ "version": "17.0.1", "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-17.0.1.tgz", "integrity": "sha512-3Fi2O6Zzq/f3QR9dRnlnHso9bMl7weKCviFmfF6B4LS1Uat6Hkm15k0ZAQuDz+UBq6B3+g+NM6IT2nr5QgPzCw==", - "dev": true, "requires": { "@types/react": "*" } @@ -47556,7 +47479,6 @@ "version": "5.14.2", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz", "integrity": "sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg==", - "dev": true, "requires": { "@types/jest": "*" } @@ -47565,7 +47487,6 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.4.1.tgz", "integrity": "sha512-G4JdzEcq61fUyV6wVW9ebHWEiLK2iQvaBuCHHn9eMSbZzVh4Z4wHnUGIvQOYCCYeu5DnUtFyNYuAAgbSaO/43Q==", - "dev": true, "requires": { "@types/react-test-renderer": "*" } @@ -47621,8 +47542,7 @@ "@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "@types/yoga-layout": { "version": "1.9.2", @@ -48564,8 +48484,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "devOptional": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "auto-bind": { "version": "4.0.0", @@ -50740,7 +50659,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dev": true, "requires": { "inherits": "^2.0.4", "source-map": "^0.6.1", @@ -50750,8 +50668,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -51559,8 +51476,7 @@ "diff-sequences": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", - "dev": true + "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==" }, "dir-glob": { "version": "3.0.1", @@ -51608,8 +51524,7 @@ "dom-accessibility-api": { "version": "0.5.11", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz", - "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==", - "dev": true + "integrity": "sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw==" }, "dom-converter": { "version": "0.2.0", @@ -57063,8 +56978,7 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "infer-owner": { "version": "1.0.4", @@ -58279,7 +58193,6 @@ "version": "27.4.6", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", - "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^27.4.0", @@ -58291,7 +58204,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -58300,7 +58212,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -58310,7 +58221,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -58318,20 +58228,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "pretty-format": { "version": "27.4.6", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", - "dev": true, "requires": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -58341,8 +58248,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -58350,7 +58256,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -58481,8 +58386,7 @@ "jest-get-type": { "version": "27.4.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", - "dev": true + "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==" }, "jest-haste-map": { "version": "27.4.6", @@ -59475,9 +59379,10 @@ "dev": true }, "js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.1.tgz", + "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==", + "dev": true }, "js-sdsl": { "version": "4.1.5", @@ -60327,8 +60232,7 @@ "lz-string": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", - "dev": true + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=" }, "make-dir": { "version": "3.1.0", @@ -60640,8 +60544,7 @@ "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" }, "mini-css-extract-plugin": { "version": "1.6.2", @@ -63290,7 +63193,6 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, "requires": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -63302,7 +63204,6 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -63315,7 +63216,6 @@ "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -63324,7 +63224,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -63333,7 +63232,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -63343,7 +63241,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -63351,20 +63248,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -64035,8 +63929,7 @@ "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "react-lifecycles-compat": { "version": "3.0.4", @@ -64097,7 +63990,6 @@ "version": "16.14.1", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", - "dev": true, "requires": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0" @@ -64107,7 +63999,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, "requires": { "object-assign": "^4.1.1", "react-is": "^17.0.2", @@ -64467,7 +64358,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, "requires": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -65403,9 +65293,9 @@ } }, "snakecase-keys": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-5.1.2.tgz", - "integrity": "sha512-fvtDQZqPBqYb0dEY97TGuOMbN2NJ05Tj4MaoKwjTKkmjcG6mrd58JYGr23UWZRi6Aqv49Fk4HtjTIStOQenaug==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/snakecase-keys/-/snakecase-keys-5.4.4.tgz", + "integrity": "sha512-YTywJG93yxwHLgrYLZjlC75moVEX04LZM4FHfihjHe1FCXm+QaLOFfSf535aXOAd0ArVQMWUAe8ZPm4VtWyXaA==", "requires": { "map-obj": "^4.1.0", "snake-case": "^3.0.4", @@ -65757,7 +65647,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0" @@ -66213,7 +66102,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, "requires": { "min-indent": "^1.0.0" } diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index d7882493cca..178e0bb4c06 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -20,7 +20,7 @@ "@types/node-fetch": "^2", "node-fetch": "^2.6.0", "query-string": "^7.0.1", - "snakecase-keys": "^5.1.2", + "snakecase-keys": "^5.4.4", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 2cf85f50fbf..6e2b1476c4b 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -50,7 +50,6 @@ "core-js": "^3.18.3", "deepmerge": "^4.2.2", "dequal": "^2.0.2", - "js-cookie": "^2.2.1", "qrcode.react": "^3.1.0", "qs": "^6.9.4", "react": "17.0.2", @@ -65,7 +64,6 @@ "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.5", "@babel/preset-typescript": "^7.12.1", - "@clerk/shared": "^0.3.27", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@svgr/webpack": "^6.2.1", "@testing-library/dom": "^7.28.1", diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index c3a80485ba3..46d229250e5 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1,6 +1,4 @@ -import { LocalStorageBroadcastChannel } from '@clerk/shared/utils/localStorageBroadcastChannel'; -import { noop } from '@clerk/shared/utils/noop'; -import { inClientSide } from '@clerk/shared/utils/ssr'; +import { inClientSide, LocalStorageBroadcastChannel, noop } from '@clerk/common'; import type { ActiveSessionResource, AuthenticateWithMetamaskParams, diff --git a/packages/clerk-js/src/core/fapiClient.ts b/packages/clerk-js/src/core/fapiClient.ts index 45866eaa8d3..1afc2645c94 100644 --- a/packages/clerk-js/src/core/fapiClient.ts +++ b/packages/clerk-js/src/core/fapiClient.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/shared/utils'; +import { camelToSnake } from '@clerk/common'; import type { Clerk, ClerkAPIErrorJSON, ClientJSON } from '@clerk/types'; import qs from 'qs'; diff --git a/packages/clerk-js/src/core/resources/EmailAddress.ts b/packages/clerk-js/src/core/resources/EmailAddress.ts index 49c6984f3c5..cd80793e3c3 100644 --- a/packages/clerk-js/src/core/resources/EmailAddress.ts +++ b/packages/clerk-js/src/core/resources/EmailAddress.ts @@ -1,4 +1,4 @@ -import { Poller } from '@clerk/shared/utils/poller'; +import { Poller } from '@clerk/common'; import type { AttemptEmailAddressVerificationParams, CreateMagicLinkFlowReturn, diff --git a/packages/clerk-js/src/core/resources/ExternalAccount.ts b/packages/clerk-js/src/core/resources/ExternalAccount.ts index c131d5b8a1d..37828b49dc0 100644 --- a/packages/clerk-js/src/core/resources/ExternalAccount.ts +++ b/packages/clerk-js/src/core/resources/ExternalAccount.ts @@ -1,4 +1,4 @@ -import { titleize } from '@clerk/shared/utils/string'; +import { titleize } from '@clerk/common'; import type { ExternalAccountJSON, ExternalAccountResource, OAuthProvider, VerificationResource } from '@clerk/types'; import { BaseResource } from './Base'; diff --git a/packages/clerk-js/src/core/resources/Session.ts b/packages/clerk-js/src/core/resources/Session.ts index a28bf8eae00..54383138708 100644 --- a/packages/clerk-js/src/core/resources/Session.ts +++ b/packages/clerk-js/src/core/resources/Session.ts @@ -1,4 +1,4 @@ -import { deepSnakeToCamel } from '@clerk/shared/utils'; +import { deepSnakeToCamel } from '@clerk/common'; import type { ActJWTClaim, PublicUserData, SessionJSON, SessionResource, SessionStatus } from '@clerk/types'; import { GetToken, GetTokenOptions, UserResource } from '@clerk/types/src'; diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 257c6222cf0..76a41cd7767 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -1,5 +1,5 @@ -import { deepSnakeToCamel } from '@clerk/shared/utils/object'; -import { Poller } from '@clerk/shared/utils/poller'; +import { deepSnakeToCamel } from '@clerk/common'; +import { Poller } from '@clerk/common'; import type { AttemptFirstFactorParams, AttemptSecondFactorParams, diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 3e14f6e8aac..5348791e21d 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -1,4 +1,4 @@ -import { Poller } from '@clerk/shared/utils/poller'; +import { Poller } from '@clerk/common'; import type { AttemptEmailAddressVerificationParams, AttemptPhoneNumberVerificationParams, diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx index 6f28dbadd1c..66ad14bcbb1 100644 --- a/packages/clerk-js/src/ui/Components.tsx +++ b/packages/clerk-js/src/ui/Components.tsx @@ -1,4 +1,3 @@ -// import { Modal } from '@clerk/shared/components/modal'; import type { Appearance, Clerk, ClerkOptions, EnvironmentResource, SignInProps, SignUpProps } from '@clerk/types'; import { UserProfileProps } from '@clerk/types/src'; import React from 'react'; diff --git a/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts b/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts index 46b0d06ac83..fe152641d54 100644 --- a/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts +++ b/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/shared/utils'; +import { camelToSnake } from '@clerk/common'; import type { Attributes, SignUpResource } from '@clerk/types'; import { UserSettingsResource } from '@clerk/types'; diff --git a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx b/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx index 3ea07a57afe..65ddad501d0 100644 --- a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx +++ b/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx @@ -1,4 +1,4 @@ -import { formatRelative } from '@clerk/shared/utils/date'; +import { formatRelative } from '@clerk/common'; import { SessionWithActivitiesResource } from '@clerk/types'; import React from 'react'; diff --git a/packages/clerk-js/src/ui/common/authPropHelpers.ts b/packages/clerk-js/src/ui/common/authPropHelpers.ts index 40cdac89402..784bdcaba6a 100644 --- a/packages/clerk-js/src/ui/common/authPropHelpers.ts +++ b/packages/clerk-js/src/ui/common/authPropHelpers.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/shared/utils'; +import { camelToSnake } from '@clerk/common'; import type { DisplayConfigResource } from '@clerk/types'; import type { ParsedQs } from 'qs'; import qs from 'qs'; diff --git a/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx b/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx index 82a136dbfb5..abfa49bf303 100644 --- a/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx +++ b/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx @@ -1,4 +1,4 @@ -import { render, screen } from '@clerk/shared/testUtils'; +import { render, screen } from '@clerk/common/testUtils'; import { EnvironmentResource } from '@clerk/types'; import React from 'react'; diff --git a/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx b/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx index 8ddb62ff677..69749568f23 100644 --- a/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx +++ b/packages/clerk-js/src/ui/contexts/CoreUserContext.tsx @@ -1,5 +1,5 @@ import { UserResource } from '@clerk/types'; -import * as React from 'react'; +import React from 'react'; import { clerkCoreErrorUserIsNotDefined } from '../../core/errors'; import { assertContextExists } from './utils'; diff --git a/packages/clerk-js/src/ui/elements/Avatar.tsx b/packages/clerk-js/src/ui/elements/Avatar.tsx index 66d410936a7..8aed67b9e29 100644 --- a/packages/clerk-js/src/ui/elements/Avatar.tsx +++ b/packages/clerk-js/src/ui/elements/Avatar.tsx @@ -1,4 +1,4 @@ -import { isRetinaDisplay } from '@clerk/shared/utils/isRetinaDisplay'; +import { isRetinaDisplay } from '@clerk/common'; import React from 'react'; import { BoringAvatar } from '../common/BoringAvatar'; diff --git a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx index 11454ee7684..ec3d2d3a280 100644 --- a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx +++ b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx @@ -1,4 +1,4 @@ -import { renderHook } from '@clerk/shared/testUtils'; +import { renderHook } from '@clerk/common/testUtils'; import { useSupportEmail } from './useSupportEmail'; diff --git a/packages/clerk-js/src/ui/router/HashRouter.test.tsx b/packages/clerk-js/src/ui/router/HashRouter.test.tsx index 2c940c77f58..714cb21275f 100644 --- a/packages/clerk-js/src/ui/router/HashRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/HashRouter.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, userEvent } from '@clerk/shared/testUtils'; +import { act, render, screen, userEvent } from '@clerk/common/testUtils'; import React from 'react'; import Clerk from '../../core/clerk'; diff --git a/packages/clerk-js/src/ui/router/PathRouter.test.tsx b/packages/clerk-js/src/ui/router/PathRouter.test.tsx index 79df8e4d519..b224f61520d 100644 --- a/packages/clerk-js/src/ui/router/PathRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/PathRouter.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, userEvent } from '@clerk/shared/testUtils'; +import { act, render, screen, userEvent } from '@clerk/common/testUtils'; import React from 'react'; import Clerk from '../../core/clerk'; diff --git a/packages/clerk-js/src/ui/router/Switch.test.tsx b/packages/clerk-js/src/ui/router/Switch.test.tsx index 039fd9cefdb..f130e8d921e 100644 --- a/packages/clerk-js/src/ui/router/Switch.test.tsx +++ b/packages/clerk-js/src/ui/router/Switch.test.tsx @@ -1,4 +1,4 @@ -import { render, screen } from '@clerk/shared/testUtils'; +import { render, screen } from '@clerk/common/testUtils'; import React from 'react'; import { HashRouter, Route, Switch } from 'ui/router'; diff --git a/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx b/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx index 0b9be4c11c9..6d1f09f8e39 100644 --- a/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, userEvent } from '@clerk/shared/testUtils'; +import { act, render, screen, userEvent } from '@clerk/common/testUtils'; import React from 'react'; import { Route, useRouter, VirtualRouter } from './'; diff --git a/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx b/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx index 7693d51fe48..e41505f0b03 100644 --- a/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx +++ b/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx @@ -1,4 +1,4 @@ -import { noop } from '@clerk/shared/utils'; +import { noop } from '@clerk/common'; export const useRouter = () => ({ resolve: jest.fn(() => ({ diff --git a/packages/clerk-js/src/utils/cookies/client.ts b/packages/clerk-js/src/utils/cookies/client.ts index 068388d3874..fcf45fae2d9 100644 --- a/packages/clerk-js/src/utils/cookies/client.ts +++ b/packages/clerk-js/src/utils/cookies/client.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/shared/utils'; +import { createCookieHandler } from '@clerk/common'; const CLIENT_COOKIE_NAME = '__client'; diff --git a/packages/clerk-js/src/utils/cookies/client_uat.ts b/packages/clerk-js/src/utils/cookies/client_uat.ts index 7bd8476087c..e68ba258780 100644 --- a/packages/clerk-js/src/utils/cookies/client_uat.ts +++ b/packages/clerk-js/src/utils/cookies/client_uat.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/shared/utils'; +import { createCookieHandler } from '@clerk/common'; const CLIENT_UAT_COOKIE_NAME = '__client_uat'; diff --git a/packages/clerk-js/src/utils/cookies/handler.ts b/packages/clerk-js/src/utils/cookies/handler.ts index 31cfb2d3fef..ada8c345759 100644 --- a/packages/clerk-js/src/utils/cookies/handler.ts +++ b/packages/clerk-js/src/utils/cookies/handler.ts @@ -1,4 +1,4 @@ -import { addYears } from '@clerk/shared/utils/date'; +import { addYears } from '@clerk/common'; import type { ClientResource } from '@clerk/types'; import { buildURL, getAllETLDs } from '../url'; diff --git a/packages/clerk-js/src/utils/cookies/initted.ts b/packages/clerk-js/src/utils/cookies/initted.ts index cba25f67add..87c877fee14 100644 --- a/packages/clerk-js/src/utils/cookies/initted.ts +++ b/packages/clerk-js/src/utils/cookies/initted.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/shared/utils'; +import { createCookieHandler } from '@clerk/common'; const INITTED_COOKIE_NAME = '__initted'; diff --git a/packages/clerk-js/src/utils/cookies/session.ts b/packages/clerk-js/src/utils/cookies/session.ts index d1a3b18fd7b..62f912969e3 100644 --- a/packages/clerk-js/src/utils/cookies/session.ts +++ b/packages/clerk-js/src/utils/cookies/session.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/shared/utils'; +import { createCookieHandler } from '@clerk/common'; const SESSION_COOKIE_NAME = '__session'; diff --git a/packages/clerk-js/src/utils/ignoreEventValue.test.ts b/packages/clerk-js/src/utils/ignoreEventValue.test.ts index c426d370aaa..9105559c02c 100644 --- a/packages/clerk-js/src/utils/ignoreEventValue.test.ts +++ b/packages/clerk-js/src/utils/ignoreEventValue.test.ts @@ -1,4 +1,4 @@ -import { noop } from '@clerk/shared/testUtils'; +import { noop } from '@clerk/common/testUtils'; import { ignoreEventValue } from './ignoreEventValue'; diff --git a/packages/clerk-js/src/utils/pageLifecycle.ts b/packages/clerk-js/src/utils/pageLifecycle.ts index ffbb4524859..e076ebde932 100644 --- a/packages/clerk-js/src/utils/pageLifecycle.ts +++ b/packages/clerk-js/src/utils/pageLifecycle.ts @@ -1,4 +1,4 @@ -import { inClientSide } from '@clerk/shared/utils/ssr'; +import { inClientSide } from '@clerk/common'; const noop = () => { // diff --git a/packages/clerk-js/src/utils/url.ts b/packages/clerk-js/src/utils/url.ts index dbefb00e26c..b7813226154 100644 --- a/packages/clerk-js/src/utils/url.ts +++ b/packages/clerk-js/src/utils/url.ts @@ -1,4 +1,4 @@ -import { camelToSnake, isIPV4Address } from '@clerk/shared/utils/string'; +import { camelToSnake, isIPV4Address } from '@clerk/common'; import { SignUpResource } from '@clerk/types'; import { loadScript } from '../utils'; diff --git a/packages/common/global.d.ts b/packages/common/global.d.ts new file mode 100644 index 00000000000..8c7a4b73b56 --- /dev/null +++ b/packages/common/global.d.ts @@ -0,0 +1,6 @@ +export {}; + +declare global { + const PACKAGE_VERSION: string; + const __DEV__: boolean; +} diff --git a/packages/common/package.json b/packages/common/package.json new file mode 100644 index 00000000000..43b815a5a31 --- /dev/null +++ b/packages/common/package.json @@ -0,0 +1,39 @@ +{ + "name": "@clerk/common", + "version": "0.0.1", + "description": "Internal package utils used by the Clerk SDKs", + "types": "./dist/types/index.d.ts", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "files": [ + "dist", + "testUtils" + ], + "scripts": { + "dev": "tsup --watch", + "build": "tsup --env.NODE_ENV production", + "clean": "rimraf ./dist", + "lint": "eslint .", + "test": "vitest run", + "test:watch": "vitest" + }, + "devDependencies": { + "js-cookie": "^3.0.1", + "@clerk/types": "^3.10.1", + "@types/js-cookie": "^3.0.2", + "tsup": "^6.2.3", + "typescript": "*", + "vitest": "^0.23.4" + }, + "peerDependencies": { + "@testing-library/dom": "^7.28.1", + "@testing-library/jest-dom": "^5.11.6", + "@testing-library/react": "^11.2.1", + "@testing-library/react-hooks": "^3.4.2", + "@testing-library/user-event": "^12.2.2", + "react": "17.0.2", + "react-dom": "17.0.2" + }, + "author": "", + "license": "ISC" +} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts new file mode 100644 index 00000000000..04bca77e0de --- /dev/null +++ b/packages/common/src/index.ts @@ -0,0 +1 @@ +export * from './utils'; diff --git a/packages/common/src/testUtils/index.ts b/packages/common/src/testUtils/index.ts new file mode 100644 index 00000000000..f6f5b15ff09 --- /dev/null +++ b/packages/common/src/testUtils/index.ts @@ -0,0 +1 @@ +export * from './testUtils'; diff --git a/packages/common/src/testUtils/testUtils.ts b/packages/common/src/testUtils/testUtils.ts new file mode 100644 index 00000000000..7917101fc9c --- /dev/null +++ b/packages/common/src/testUtils/testUtils.ts @@ -0,0 +1,36 @@ +import '@testing-library/jest-dom/extend-expect'; + +import { render, RenderOptions } from '@testing-library/react'; +import React from 'react'; +import renderer from 'react-test-renderer'; + +import { noop } from '../utils'; + +// Wrap components with test providers +const customRender = (ui: React.ReactElement, options?: RenderOptions) => { + return render(ui, options); +}; + +// To be used for structural snapshot testing +const renderJSON = (c: React.ReactElement) => renderer.create(c).toJSON(); + +// To be used for structural snapshot testing after the first rerender on mount +const renderJSONAfterFirstAct = (c: React.ReactElement) => { + let root; + + renderer.act(() => { + root = renderer.create(c); + }); + + // @ts-ignore + return root.toJSON(); +}; + +// Re-export everything +export * from '@testing-library/react'; +export { act as actHook, renderHook } from '@testing-library/react-hooks'; +export { default as userEvent } from '@testing-library/user-event'; +export { mocked } from 'jest-mock'; + +// Override render method +export { customRender as render, renderJSON, renderJSONAfterFirstAct, noop }; diff --git a/packages/common/src/utils/array.test.ts b/packages/common/src/utils/array.test.ts new file mode 100644 index 00000000000..07854bdc440 --- /dev/null +++ b/packages/common/src/utils/array.test.ts @@ -0,0 +1,17 @@ +import { toSentence } from './array'; + +describe.concurrent('toSentence', () => { + it('returns a single item as-is', () => { + expect(toSentence(['xyz'])).toBe('xyz'); + expect(toSentence(['abc'])).toBe('abc'); + }); + + it('joins multiple items but the last with a comma and the last with ", or"', () => { + expect(toSentence(['abc', 'def'])).toBe('abc, or def'); + expect(toSentence(['qwe', 'zxc', 'asd'])).toBe('qwe, zxc, or asd'); + }); + + it('returns empty string if passed an empty array', () => { + expect(toSentence([])).toBe(''); + }); +}); diff --git a/packages/common/src/utils/array.ts b/packages/common/src/utils/array.ts new file mode 100644 index 00000000000..6e72606e37e --- /dev/null +++ b/packages/common/src/utils/array.ts @@ -0,0 +1,12 @@ +export const toSentence = (items: string[]): string => { + // TODO: Once Safari supports it, use Intl.ListFormat + if (items.length == 0) { + return ''; + } + if (items.length == 1) { + return items[0]; + } + let sentence = items.slice(0, -1).join(', '); + sentence += `, or ${items.slice(-1)}`; + return sentence; +}; diff --git a/packages/common/src/utils/browser.test.ts b/packages/common/src/utils/browser.test.ts new file mode 100644 index 00000000000..8c06171c58f --- /dev/null +++ b/packages/common/src/utils/browser.test.ts @@ -0,0 +1,7 @@ +import { inBrowser } from './browser'; + +describe.concurrent('inBrowser()', () => { + it('returns true if window is defined', () => { + expect(inBrowser()).toBe(true); + }); +}); diff --git a/packages/common/src/utils/browser.ts b/packages/common/src/utils/browser.ts new file mode 100644 index 00000000000..442f85e93e4 --- /dev/null +++ b/packages/common/src/utils/browser.ts @@ -0,0 +1,3 @@ +export function inBrowser(): boolean { + return typeof window !== 'undefined'; +} diff --git a/packages/common/src/utils/color/cssColorUtils.test.ts b/packages/common/src/utils/color/cssColorUtils.test.ts new file mode 100644 index 00000000000..bc5d4a4c1dd --- /dev/null +++ b/packages/common/src/utils/color/cssColorUtils.test.ts @@ -0,0 +1,71 @@ +import { Color } from '@clerk/types'; + +import { colorToSameTypeString, hexStringToRgbaColor, stringToHslaColor, stringToSameTypeColor } from './cssColorUtils'; + +describe.concurrent('stringToHslaColor(color)', function () { + const hsla = { h: 195, s: 1, l: 0.5 }; + const cases: Array<[string, Color | null]> = [ + ['', null], + ['transparent', { h: 0, s: 0, l: 0, a: 0 }], + ['#00bfff', hsla], + ['00bfff', hsla], + ['rgb(0, 191, 255)', hsla], + ['rgba(0, 191, 255, 0.3)', { ...hsla, a: 0.3 }], + ]; + + it.each(cases)('.stringToHslaColor(%s) => %s', (a, expected) => { + expect(stringToHslaColor(a)).toEqual(expected); + }); +}); + +describe.concurrent('hexStringToRgbaColor(color)', function () { + const cases: Array<[string, Color | null]> = [ + ['#00bfff', { r: 0, g: 191, b: 255 }], + ['00bfff', { r: 0, g: 191, b: 255 }], + ]; + + it.each(cases)('.hexStringToRgbaColor(%s) => %s', (a, expected) => { + expect(hexStringToRgbaColor(a)).toEqual(expected); + }); +}); + +describe.concurrent('stringToSameTypeColor(color)', function () { + const cases: Array<[string, Color | null]> = [ + ['', ''], + ['invalid', ''], + ['12ff12', '#12ff12'], + ['#12ff12', '#12ff12'], + ['1ff', '#1ff'], + ['transparent', 'transparent'], + ['rgb(100,100,100)', { r: 100, g: 100, b: 100, a: undefined }], + ['rgba(100,100,100,0.5)', { r: 100, g: 100, b: 100, a: 0.5 }], + ['rgb(100,100,100)', { r: 100, g: 100, b: 100, a: undefined }], + ['rgba(100,100,100,0.5)', { r: 100, g: 100, b: 100, a: 0.5 }], + ['hsl(244,66%,33%)', { h: 244, s: 0.66, l: 0.33, a: undefined }], + ['hsla(244,66%,33%,0.5)', { h: 244, s: 0.66, l: 0.33, a: 0.5 }], + ['hsl(244,66%,33)', ''], + ['hsla(244,66%,33,0.5)', ''], + ]; + + it.each(cases)('.stringToSameTypeColor(%s) => %s', (a, expected) => { + expect(stringToSameTypeColor(a)).toEqual(expected); + }); +}); + +describe.concurrent('colorToSameTypeString(color)', function () { + const cases: Array<[Color, string]> = [ + ['', ''], + ['invalid', ''], + ['#12ff12', '#12ff12'], + ['#12ff12', '#12ff12'], + ['#1ff', '#1ff'], + [{ r: 100, g: 100, b: 100, a: undefined }, 'rgb(100,100,100)'], + [{ r: 100, g: 100, b: 100, a: 0.5 }, 'rgba(100,100,100,0.5)'], + [{ h: 100, s: 0.55, l: 0.33, a: undefined }, 'hsl(100,55%,33%)'], + [{ h: 100, s: 1, l: 1, a: 0.5 }, 'hsla(100,100%,100%,0.5)'], + ]; + + it.each(cases)('.colorToSameTypeString(%s) => %s', (a, expected) => { + expect(colorToSameTypeString(a)).toEqual(expected); + }); +}); diff --git a/packages/common/src/utils/color/cssColorUtils.ts b/packages/common/src/utils/color/cssColorUtils.ts new file mode 100644 index 00000000000..51b8b59c7c6 --- /dev/null +++ b/packages/common/src/utils/color/cssColorUtils.ts @@ -0,0 +1,151 @@ +import { Color, HslaColor, RgbaColor, TransparentColor } from '@clerk/types'; + +import { + isHSLColor, + isRGBColor, + isTransparent, + isValidHexString, + isValidHslaString, + isValidRgbaString, +} from './predicates'; + +const CLEAN_HSLA_REGEX = /[hsla()]/g; +const CLEAN_RGBA_REGEX = /[rgba()]/g; + +export const stringToHslaColor = (value: string): HslaColor | null => { + if (value === 'transparent') { + return { h: 0, s: 0, l: 0, a: 0 }; + } + + if (isValidHexString(value)) { + return hexStringToHslaColor(value); + } + + if (isValidHslaString(value)) { + return parseHslaString(value); + } + + if (isValidRgbaString(value)) { + return rgbaStringToHslaColor(value); + } + + return null; +}; + +export const stringToSameTypeColor = (value: string): Color => { + value = value.trim(); + if (isValidHexString(value)) { + return value.startsWith('#') ? value : `#${value}`; + } + + if (isValidRgbaString(value)) { + return parseRgbaString(value); + } + + if (isValidHslaString(value)) { + return parseHslaString(value); + } + + if (isTransparent(value)) { + return value; + } + return ''; +}; + +export const colorToSameTypeString = (color: Color): string | TransparentColor => { + if (typeof color === 'string' && (isValidHexString(color) || isTransparent(color))) { + return color; + } + + if (isRGBColor(color)) { + return rgbaColorToRgbaString(color); + } + + if (isHSLColor(color)) { + return hslaColorToHslaString(color); + } + + return ''; +}; + +export const hexStringToRgbaColor = (hex: string): RgbaColor => { + hex = hex.replace('#', ''); + const r = parseInt(hex.substring(0, 2), 16); + const g = parseInt(hex.substring(2, 4), 16); + const b = parseInt(hex.substring(4, 6), 16); + return { r, g, b }; +}; + +const rgbaColorToRgbaString = (color: RgbaColor): string => { + const { a, b, g, r } = color; + return color.a === 0 ? 'transparent' : color.a != undefined ? `rgba(${r},${g},${b},${a})` : `rgb(${r},${g},${b})`; +}; + +const hslaColorToHslaString = (color: HslaColor): string => { + const { h, s, l, a } = color; + const sPerc = Math.round(s * 100); + const lPerc = Math.round(l * 100); + return color.a === 0 + ? 'transparent' + : color.a != undefined + ? `hsla(${h},${sPerc}%,${lPerc}%,${a})` + : `hsl(${h},${sPerc}%,${lPerc}%)`; +}; + +const hexStringToHslaColor = (hex: string): HslaColor => { + const rgbaString = colorToSameTypeString(hexStringToRgbaColor(hex)); + return rgbaStringToHslaColor(rgbaString); +}; + +const rgbaStringToHslaColor = (rgba: string): HslaColor => { + const rgbaColor = parseRgbaString(rgba); + const r = rgbaColor.r / 255; + const g = rgbaColor.g / 255; + const b = rgbaColor.b / 255; + + const max = Math.max(r, g, b), + min = Math.min(r, g, b); + let h, s; + const l = (max + min) / 2; + + if (max == min) { + h = s = 0; + } else { + const d = max - min; + s = l >= 0.5 ? d / (2 - (max + min)) : d / (max + min); + switch (max) { + case r: + h = ((g - b) / d) * 60; + break; + case g: + h = ((b - r) / d + 2) * 60; + break; + default: + h = ((r - g) / d + 4) * 60; + break; + } + } + + const res: HslaColor = { h: Math.round(h), s, l }; + const a = rgbaColor.a; + if (a != undefined) { + res.a = a; + } + return res; +}; + +const parseRgbaString = (str: string): RgbaColor => { + const [r, g, b, a] = str + .replace(CLEAN_RGBA_REGEX, '') + .split(',') + .map(c => Number.parseFloat(c)); + return { r, g, b, a }; +}; + +const parseHslaString = (str: string): HslaColor => { + const [h, s, l, a] = str + .replace(CLEAN_HSLA_REGEX, '') + .split(',') + .map(c => Number.parseFloat(c)); + return { h, s: s / 100, l: l / 100, a }; +}; diff --git a/packages/common/src/utils/color/index.ts b/packages/common/src/utils/color/index.ts new file mode 100644 index 00000000000..738532889d3 --- /dev/null +++ b/packages/common/src/utils/color/index.ts @@ -0,0 +1,2 @@ +export * from './cssColorUtils'; +export * from './predicates'; diff --git a/packages/common/src/utils/color/predicates.ts b/packages/common/src/utils/color/predicates.ts new file mode 100644 index 00000000000..c17424f1710 --- /dev/null +++ b/packages/common/src/utils/color/predicates.ts @@ -0,0 +1,37 @@ +import { Color, HslaColor, RgbaColor, TransparentColor } from '@clerk/types'; + +const IS_HEX_COLOR_REGEX = /^#?([A-F0-9]{6}|[A-F0-9]{3})$/i; + +const IS_RGB_COLOR_REGEX = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/i; +const IS_RGBA_COLOR_REGEX = /^rgba\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+(\.\d+)?)\)$/i; + +const IS_HSL_COLOR_REGEX = /^hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)$/i; +const IS_HSLA_COLOR_REGEX = /^hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%(,\s*\d+(\.\d+)?)*\)$/i; + +export const isValidHexString = (s: string) => { + return !!s.match(IS_HEX_COLOR_REGEX); +}; + +export const isValidRgbaString = (s: string) => { + return !!(s.match(IS_RGB_COLOR_REGEX) || s.match(IS_RGBA_COLOR_REGEX)); +}; + +export const isValidHslaString = (s: string) => { + return !!s.match(IS_HSL_COLOR_REGEX) || !!s.match(IS_HSLA_COLOR_REGEX); +}; + +export const isRGBColor = (c: Color): c is RgbaColor => { + return typeof c !== 'string' && 'r' in c; +}; + +export const isHSLColor = (c: Color): c is HslaColor => { + return typeof c !== 'string' && 'h' in c; +}; + +export const isTransparent = (c: Color): c is TransparentColor => { + return c === 'transparent'; +}; + +export const hasAlpha = (color: Color): boolean => { + return typeof color !== 'string' && color.a != undefined && color.a < 1; +}; diff --git a/packages/common/src/utils/cookies.ts b/packages/common/src/utils/cookies.ts new file mode 100644 index 00000000000..ee87cf233d9 --- /dev/null +++ b/packages/common/src/utils/cookies.ts @@ -0,0 +1,27 @@ +import Cookies from 'js-cookie'; + +type LocationAttributes = { + path?: string; + domain?: string; +}; + +export function createCookieHandler(cookieName: string) { + return { + get() { + return Cookies.get(cookieName); + }, + /** + * Setting a cookie will use some defaults such as path being set to "/". + */ + set(newValue: string, options: Cookies.CookieAttributes = {}) { + return Cookies.set(cookieName, newValue, options); + }, + /** + * On removing a cookie, you have to pass the exact same path/domain attributes used to set it initially + * @see https://github.com/js-cookie/js-cookie#basic-usage + */ + remove(locationAttributes?: LocationAttributes) { + Cookies.remove(cookieName, locationAttributes); + }, + }; +} diff --git a/packages/common/src/utils/date.test.ts b/packages/common/src/utils/date.test.ts new file mode 100644 index 00000000000..d93b4eb1418 --- /dev/null +++ b/packages/common/src/utils/date.test.ts @@ -0,0 +1,67 @@ +import { addYears, dateTo12HourTime, differenceInCalendarDays, formatRelative } from './date'; + +describe.concurrent('date utils', () => { + describe.concurrent('dateTo12HourTime(date)', () => { + const cases: Array<[Date | undefined, string]> = [ + [undefined, ''], + [new Date('1/1/2020 23:15'), '11:15 PM'], + [new Date('1/1/2020 11:15'), '11:15 AM'], + [new Date('1/1/2020 01:59'), '01:59 AM'], + [new Date('1/1/2020 13:59'), '01:59 PM'], + [new Date('1/1/2020 00:59'), '12:59 AM'], + ]; + + it.each(cases)('.dateTo12HourTime(%s) => %s', (a, expected) => { + expect(dateTo12HourTime(a as any)).toBe(expected); + }); + }); + + describe.concurrent('differenceInCalendarDays(date1, date2)', () => { + const cases: Array<[Date | undefined, Date, { absolute: boolean }, number]> = [ + [undefined, new Date(), { absolute: true }, 0], + [new Date('1/1/2020'), new Date('1/2/2020'), { absolute: true }, 1], + [new Date('1/1/2020'), new Date('1/3/2020'), { absolute: true }, 2], + [new Date('1/30/2020'), new Date('1/31/2020'), { absolute: true }, 1], + [new Date('1/30/2020'), new Date('2/1/2020'), { absolute: true }, 2], + [new Date('1/1/2020'), new Date('2/1/2020'), { absolute: true }, 31], + [new Date('1/1/2020'), new Date('1/2/2020'), { absolute: false }, 1], + [new Date('1/1/2020'), new Date('1/5/2020'), { absolute: false }, 4], + [new Date('1/5/2020'), new Date('1/1/2020'), { absolute: true }, 4], + [new Date('1/5/2020'), new Date('1/1/2020'), { absolute: false }, -4], + ]; + + it.each(cases)('.differenceInCalendarDays(%s,%s) => %s', (a, b, c, expected) => { + expect(differenceInCalendarDays(a as Date, b, c)).toBe(expected); + }); + }); + + describe.concurrent('formatRelative(date)', () => { + const cases: Array<[Date | undefined, Date | undefined, string]> = [ + [undefined, undefined, ''], + [new Date('1/1/2020 23:15'), new Date('1/1/2020'), 'today at 11:15 PM'], + [new Date('1/5/2020 23:15'), new Date('1/6/2020'), 'yesterday at 11:15 PM'], + [new Date('1/3/2020 23:15'), new Date('1/6/2020'), 'last Friday at 11:15 PM'], + [new Date('1/7/2020 23:15'), new Date('1/6/2020'), 'tomorrow at 11:15 PM'], + [new Date('1/10/2020 23:15'), new Date('1/6/2020'), 'Friday at 11:15 PM'], + [new Date('12/10/2020 23:15'), new Date('1/6/2020'), '12/10/2020'], + [new Date('12/10/2020 23:15'), new Date('1/6/2021'), '12/10/2020'], + ]; + + it.each(cases)('.formatRelative(%s, %s) => %s', (a, b, expected) => { + expect(formatRelative(a as Date, b as Date)).toBe(expected); + }); + }); + + describe.concurrent('addYears(date, number)', () => { + const cases: Array<[Date, number, Date]> = [ + [new Date('1/1/2020 23:15'), 1, new Date('1/1/2021 23:15')], + [new Date('1/1/2019 23:15'), 1, new Date('1/1/2020 23:15')], + [new Date('1/1/2021 23:15'), 100, new Date('1/1/2121 23:15')], + [new Date('1/1/2021 23:15'), 0, new Date('1/1/2021 23:15')], + ]; + + it.each(cases)('.addYears(%s, %s) => %s', (a, b, expected) => { + expect(addYears(a, b)).toStrictEqual(expected); + }); + }); +}); diff --git a/packages/common/src/utils/date.ts b/packages/common/src/utils/date.ts new file mode 100644 index 00000000000..31402e411e8 --- /dev/null +++ b/packages/common/src/utils/date.ts @@ -0,0 +1,81 @@ +const MILLISECONDS_IN_DAY = 86400000; +const DAYS_EN = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; + +export function dateTo12HourTime(date: Date): string { + if (!date) { + return ''; + } + return date.toLocaleString('en-US', { + hour: '2-digit', + minute: 'numeric', + hour12: true, + }); +} + +export function differenceInCalendarDays(a: Date, b: Date, { absolute = true } = {}): number { + if (!a || !b) { + return 0; + } + const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); + const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); + const diff = Math.floor((utcB - utcA) / MILLISECONDS_IN_DAY); + return absolute ? Math.abs(diff) : diff; +} + +function normalizeDate(d: Date | string | number): Date { + try { + return new Date(d || new Date()); + } catch (e) { + return new Date(); + } +} + +/* + * Follows date-fns format, see here: + * https://date-fns.org/v2.21.1/docs/formatRelative + * TODO: support localisation + * | Distance to the base date | Result | + * |---------------------------|---------------------------| + * | Previous 6 days | last Sunday at 04:30 AM | + * | Last day | yesterday at 04:30 AM | + * | Same day | today at 04:30 AM | + * | Next day | tomorrow at 04:30 AM | + * | Next 6 days | Sunday at 04:30 AM | + * | Other | 12/31/2017 | + */ +export function formatRelative(date: Date, relativeTo: Date): string { + if (!date || !relativeTo) { + return ''; + } + const a = normalizeDate(date); + const b = normalizeDate(relativeTo); + const differenceInDays = differenceInCalendarDays(b, a, { absolute: false }); + const time12Hour = dateTo12HourTime(a); + const dayName = DAYS_EN[a.getDay()]; + + if (differenceInDays < -6) { + return a.toLocaleDateString(); + } + if (differenceInDays < -1) { + return `last ${dayName} at ${time12Hour}`; + } + if (differenceInDays === -1) { + return `yesterday at ${time12Hour}`; + } + if (differenceInDays === 0) { + return `today at ${time12Hour}`; + } + if (differenceInDays === 1) { + return `tomorrow at ${time12Hour}`; + } + if (differenceInDays < 7) { + return `${dayName} at ${time12Hour}`; + } + return a.toLocaleDateString(); +} + +export function addYears(initialDate: Date | number | string, yearsToAdd: number): Date { + const date = normalizeDate(initialDate); + date.setFullYear(date.getFullYear() + yearsToAdd); + return date; +} diff --git a/packages/common/src/utils/file.ts b/packages/common/src/utils/file.ts new file mode 100644 index 00000000000..82dc23a7132 --- /dev/null +++ b/packages/common/src/utils/file.ts @@ -0,0 +1,18 @@ +/** + * Read an expected JSON type File. + * + * Probably paired with: + * <input type='file' accept='application/JSON' ... /> + */ +export function readJSONFile(file: File): Promise<unknown> { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.addEventListener('load', function () { + const result = JSON.parse(reader.result as string); + resolve(result); + }); + + reader.addEventListener('error', reject); + reader.readAsText(file); + }); +} diff --git a/packages/common/src/utils/index.ts b/packages/common/src/utils/index.ts new file mode 100644 index 00000000000..133276ea77c --- /dev/null +++ b/packages/common/src/utils/index.ts @@ -0,0 +1,16 @@ +export * from './array'; +export * from './browser'; +export * from './color'; +export * from './cookies'; +export * from './date'; +export * from './file'; +export * from './index'; +export * from './isRetinaDisplay'; +export * from './localStorageBroadcastChannel'; +export * from './mimeTypeExtensions'; +export * from './noop'; +export * from './object'; +export * from './poller'; +export * from './ssr'; +export * from './string'; +export * from './url'; diff --git a/packages/common/src/utils/isRetinaDisplay.ts b/packages/common/src/utils/isRetinaDisplay.ts new file mode 100644 index 00000000000..3e35b03f1ae --- /dev/null +++ b/packages/common/src/utils/isRetinaDisplay.ts @@ -0,0 +1,9 @@ +export function isRetinaDisplay(): boolean { + if (!window.matchMedia) { + return false; + } + const mq = window.matchMedia( + 'only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)', + ); + return (mq && mq.matches) || window.devicePixelRatio > 1; +} diff --git a/packages/common/src/utils/localStorageBroadcastChannel.test.ts b/packages/common/src/utils/localStorageBroadcastChannel.test.ts new file mode 100644 index 00000000000..10c823b4dad --- /dev/null +++ b/packages/common/src/utils/localStorageBroadcastChannel.test.ts @@ -0,0 +1,44 @@ +import { vi } from 'vitest'; + +import { LocalStorageBroadcastChannel } from './localStorageBroadcastChannel'; + +const bcName = 'clerk'; + +describe.concurrent('LocalStorageBroadcastChannel', () => { + let localStorageMock; + beforeEach(() => { + localStorageMock = (() => { + const store: Record<string, any> = {}; + return { + setItem: vi.fn((key, value) => { + store[key] = value; + window.dispatchEvent(new StorageEvent('storage', { key, newValue: value })); + }), + removeItem: vi.fn(key => { + store[key] = undefined; + window.dispatchEvent(new Event('storage')); + }), + }; + })(); + Object.defineProperty(window, 'localStorage', { value: localStorageMock }); + }); + + it('notifies other LocalStorageBroadcastChannel with same name', () => { + const tab1ClerkBCListener = vi.fn(); + const tab1DifferentBCListener = vi.fn(); + const tab2ClerkBCListener = vi.fn(); + + const tab1ClerkBC = new LocalStorageBroadcastChannel(bcName); + const tab1DifferentBC = new LocalStorageBroadcastChannel('somethingElse'); + const tab2ClerkBC = new LocalStorageBroadcastChannel(bcName); + + tab1ClerkBC.addEventListener('message', tab1ClerkBCListener); + tab1DifferentBC.addEventListener('message', tab1DifferentBCListener); + tab2ClerkBC.addEventListener('message', tab2ClerkBCListener); + + const message = 'a message from tab1'; + tab1ClerkBC.postMessage(message); + expect(tab1DifferentBCListener).not.toHaveBeenCalled(); + expect(tab2ClerkBCListener).toHaveBeenCalled(); + }); +}); diff --git a/packages/common/src/utils/localStorageBroadcastChannel.ts b/packages/common/src/utils/localStorageBroadcastChannel.ts new file mode 100644 index 00000000000..3c88c272417 --- /dev/null +++ b/packages/common/src/utils/localStorageBroadcastChannel.ts @@ -0,0 +1,52 @@ +type Listener<T> = (e: MessageEvent<T>) => void; + +const KEY_PREFIX = '__lsbc__'; + +export class LocalStorageBroadcastChannel<E> { + private readonly eventTarget = window; + private readonly channelKey: string; + + constructor(name: string) { + this.channelKey = KEY_PREFIX + name; + this.setupLocalStorageListener(); + } + + public postMessage = (data: E): void => { + try { + localStorage.setItem(this.channelKey, JSON.stringify(data)); + localStorage.removeItem(this.channelKey); + } catch (e) { + // + } + }; + + public addEventListener = (eventName: 'message', listener: Listener<E>): void => { + this.eventTarget.addEventListener(this.prefixEventName(eventName), e => { + listener(e as MessageEvent); + }); + }; + + private setupLocalStorageListener = () => { + const notifyListeners = (e: StorageEvent) => { + if (e.key !== this.channelKey || !e.newValue) { + return; + } + + try { + const data = JSON.parse(e.newValue || ''); + const event = new MessageEvent(this.prefixEventName('message'), { + data, + }); + this.eventTarget.dispatchEvent(event); + } catch (e) { + // + } + }; + + window.addEventListener('storage', notifyListeners); + }; + + private prefixEventName(eventName: string): string { + return this.channelKey + eventName; + } +} diff --git a/packages/common/src/utils/mimeTypeExtensions.ts b/packages/common/src/utils/mimeTypeExtensions.ts new file mode 100644 index 00000000000..3d206056ad6 --- /dev/null +++ b/packages/common/src/utils/mimeTypeExtensions.ts @@ -0,0 +1,14 @@ +const MimeTypeToExtensionMap = Object.freeze({ + 'image/png': 'png', + 'image/jpeg': 'jpg', + 'image/gif': 'gif', + 'image/webp': 'webp', + 'image/x-icon': 'ico', + 'image/vnd.microsoft.icon': 'ico', +} as const); + +export type SupportedMimeType = keyof typeof MimeTypeToExtensionMap; + +export const extension = (mimeType: SupportedMimeType): string => { + return MimeTypeToExtensionMap[mimeType]; +}; diff --git a/packages/common/src/utils/noop.ts b/packages/common/src/utils/noop.ts new file mode 100644 index 00000000000..e65a0290b94 --- /dev/null +++ b/packages/common/src/utils/noop.ts @@ -0,0 +1,3 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +/* eslint-disable @typescript-eslint/no-empty-function */ +export const noop = (..._args: any[]): void => {}; diff --git a/packages/common/src/utils/object.test.ts b/packages/common/src/utils/object.test.ts new file mode 100644 index 00000000000..5229170c2ad --- /dev/null +++ b/packages/common/src/utils/object.test.ts @@ -0,0 +1,145 @@ +import { deepCamelToSnake, deepSnakeToCamel } from './object'; + +describe.concurrent('camelToSnakeKeys', () => { + it('creates a copy and does not modify the original', () => { + const original = { + an_arr: [{ hello_there: 'hey' }], + a_nested_object: { a_message: 'hey' }, + }; + const originalCopy = { ...original }; + const res = deepSnakeToCamel(original); + expect(res).toStrictEqual({ + anArr: [{ helloThere: 'hey' }], + aNestedObject: { aMessage: 'hey' }, + }); + expect(original).toStrictEqual(originalCopy); + expect(original === res).toBeFalsy(); + }); + + it('transforms camelCased keys to snake_cased', () => { + expect(deepCamelToSnake({ key: 1, anotherKey: 2 })).toStrictEqual({ + key: 1, + another_key: 2, + }); + + expect( + deepCamelToSnake({ + key: 1, + anotherKey: 2, + nestAttribute: { nestedKey: 3 }, + }), + ).toStrictEqual({ + key: 1, + another_key: 2, + nest_attribute: { + nested_key: 3, + }, + }); + }); + + it('handles null and undefined values', () => { + expect(deepCamelToSnake({ key: 1, anotherKey: null })).toStrictEqual({ + key: 1, + another_key: null, + }); + + expect( + deepCamelToSnake({ + key: 1, + anotherKey: 2, + nestAttribute: { nestedKey: null }, + }), + ).toStrictEqual({ + key: 1, + another_key: 2, + nest_attribute: { + nested_key: null, + }, + }); + }); + + it('transforms and removes camelCased keys', () => { + const sampleObject = deepCamelToSnake({ key: 1, anotherKey: 2 }); + expect(sampleObject).not.toHaveProperty('anotherKey'); + expect(sampleObject).toHaveProperty('another_key'); + }); + + it('deeply transforms objects and arrays to camelCase', () => { + const sample = { + sessions: [ + { + last_active_at: 1647133602586, + user: { + primary_web3_wallet_id: null, + email_addresses: [ + { + email_address: 'n@ck.dev', + verification: { + status: 'verified', + strategy: 'email_link', + expire_at: 1645216476574, + }, + linked_to: [{ type: 'oauth_google', id: 'idn_25QqWb' }], + }, + ], + web3_wallets: [], + external_accounts: [ + { + identification_id: 'idn_25QqWbzargsao', + provider_user_id: '106087', + }, + ], + }, + }, + ], + sign_in_attempt: null, + }; + + const expected = { + sessions: [ + { + user: { + primaryWeb3WalletId: null, + emailAddresses: [ + { + verification: { + status: 'verified', + strategy: 'email_link', + expireAt: 1645216476574, + }, + emailAddress: 'n@ck.dev', + linkedTo: [ + { + type: 'oauth_google', + id: 'idn_25QqWb', + }, + ], + }, + ], + web3Wallets: [], + externalAccounts: [ + { + identificationId: 'idn_25QqWbzargsao', + providerUserId: '106087', + }, + ], + }, + lastActiveAt: 1647133602586, + }, + ], + signInAttempt: null, + }; + const res = deepSnakeToCamel(sample); + expect(res).toStrictEqual(expected); + }); + + it('prioritizes the camelCased property', () => { + const sampleObject = deepCamelToSnake({ oneKey: 1, one_key: 2 }); + const anotherSampleObject = deepCamelToSnake({ one_key: 2, oneKey: 1 }); + + expect(sampleObject.one_key).toEqual(1); + expect(sampleObject).not.toHaveProperty('oneKey'); + expect(anotherSampleObject.one_key).toEqual(1); + expect(anotherSampleObject).not.toHaveProperty('oneKey'); + }); +}); diff --git a/packages/common/src/utils/object.ts b/packages/common/src/utils/object.ts new file mode 100644 index 00000000000..d59b9b0c279 --- /dev/null +++ b/packages/common/src/utils/object.ts @@ -0,0 +1,48 @@ +import { camelToSnake, snakeToCamel } from './string'; + +const createDeepObjectTransformer = (transform: any) => { + const deepTransform = (obj: any): any => { + if (!obj) { + return obj; + } + + if (Array.isArray(obj)) { + return obj.map(el => { + if (typeof el === 'object' || Array.isArray(el)) { + return deepTransform(el); + } + return el; + }); + } + + const copy = { ...obj }; + const keys = Object.keys(copy) as string[]; + for (const oldName of keys) { + const newName = transform(oldName.toString()); + if (newName !== oldName) { + copy[newName] = copy[oldName]; + delete copy[oldName]; + } + if (typeof copy[newName] === 'object') { + copy[newName] = deepTransform(copy[newName]); + } + } + return copy; + }; + + return deepTransform; +}; + +/** + * Transforms camelCased objects/ arrays to snake_cased. + * This function recursively traverses all objects and arrays of the passed value + * camelCased keys are removed. + */ +export const deepCamelToSnake = createDeepObjectTransformer(camelToSnake); + +/** + * Transforms snake_cased objects/ arrays to camelCased. + * This function recursively traverses all objects and arrays of the passed value + * camelCased keys are removed. + */ +export const deepSnakeToCamel = createDeepObjectTransformer(snakeToCamel); diff --git a/packages/common/src/utils/poller.ts b/packages/common/src/utils/poller.ts new file mode 100644 index 00000000000..8b24dcf1733 --- /dev/null +++ b/packages/common/src/utils/poller.ts @@ -0,0 +1,33 @@ +export type PollerStop = () => void; +export type PollerCallback = (stop: PollerStop) => Promise<unknown>; +export type PollerRun = (cb: PollerCallback) => Promise<void>; + +type PollerOptions = { + delayInMs: number; +}; + +export type Poller = { + run: PollerRun; + stop: PollerStop; +}; + +export function Poller({ delayInMs }: PollerOptions = { delayInMs: 1000 }): Poller { + let timerId: number | undefined; + let stopped = false; + + const stop: PollerStop = () => { + clearTimeout(timerId); + stopped = true; + }; + + const run: PollerRun = async cb => { + stopped = false; + await cb(stop); + if (stopped) { + return; + } + timerId = setTimeout(() => run(cb), delayInMs) as any as number; + }; + + return { run, stop }; +} diff --git a/packages/common/src/utils/ssr.ts b/packages/common/src/utils/ssr.ts new file mode 100644 index 00000000000..e0ede1979d2 --- /dev/null +++ b/packages/common/src/utils/ssr.ts @@ -0,0 +1,3 @@ +export const inClientSide = (): boolean => { + return typeof window !== 'undefined'; +}; diff --git a/packages/common/src/utils/string.test.ts b/packages/common/src/utils/string.test.ts new file mode 100644 index 00000000000..0d7aaa3f62f --- /dev/null +++ b/packages/common/src/utils/string.test.ts @@ -0,0 +1,20 @@ +import { isIPV4Address, titleize } from './string'; + +describe.concurrent('isIPV4Address(str)', () => { + it('checks if as string is an IP V4', () => { + expect(isIPV4Address(null)).toBe(false); + expect(isIPV4Address(undefined)).toBe(false); + expect(isIPV4Address('')).toBe(false); + expect(isIPV4Address('127.0.0.1')).toBe(true); + }); +}); + +describe.concurrent('titleize(str)', () => { + it('titleizes the string', () => { + expect(titleize(null)).toBe(''); + expect(titleize(undefined)).toBe(''); + expect(titleize('')).toBe(''); + expect(titleize('foo')).toBe('Foo'); + expect(titleize('foo bar')).toBe('Foo bar'); + }); +}); diff --git a/packages/common/src/utils/string.ts b/packages/common/src/utils/string.ts new file mode 100644 index 00000000000..08b8b0d9d86 --- /dev/null +++ b/packages/common/src/utils/string.ts @@ -0,0 +1,19 @@ +const IP_V4_ADDRESS_REGEX = + /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; + +export function isIPV4Address(str: string | undefined | null): boolean { + return IP_V4_ADDRESS_REGEX.test(str || ''); +} + +export function titleize(str: string | undefined | null): string { + const s = str || ''; + return s.charAt(0).toUpperCase() + s.slice(1); +} + +export function snakeToCamel(str: string): string { + return str.replace(/([-_][a-z])/g, match => match.toUpperCase().replace(/-|_/, '')); +} + +export function camelToSnake(str: string): string { + return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`); +} diff --git a/packages/common/src/utils/url.test.ts b/packages/common/src/utils/url.test.ts new file mode 100644 index 00000000000..4a8dd9e0e99 --- /dev/null +++ b/packages/common/src/utils/url.test.ts @@ -0,0 +1,16 @@ +import { parseSearchParams } from './url'; + +describe.concurrent('parseSearchParams(queryString)', () => { + it('parses query string and returns a URLSearchParams object', () => { + let searchParams = parseSearchParams(''); + expect(searchParams.get('foo')).toBeNull(); + + searchParams = parseSearchParams('foo=42&bar=43'); + expect(searchParams.get('foo')).toBe('42'); + expect(searchParams.get('bar')).toBe('43'); + + searchParams = parseSearchParams('?foo=42&bar=43'); + expect(searchParams.get('foo')).toBe('42'); + expect(searchParams.get('bar')).toBe('43'); + }); +}); diff --git a/packages/common/src/utils/url.ts b/packages/common/src/utils/url.ts new file mode 100644 index 00000000000..bc33767cae0 --- /dev/null +++ b/packages/common/src/utils/url.ts @@ -0,0 +1,6 @@ +export function parseSearchParams(queryString = ''): URLSearchParams { + if (queryString.startsWith('?')) { + queryString = queryString.slice(1); + } + return new URLSearchParams(queryString); +} diff --git a/packages/common/testUtils/package.json b/packages/common/testUtils/package.json new file mode 100644 index 00000000000..61203e7748e --- /dev/null +++ b/packages/common/testUtils/package.json @@ -0,0 +1,6 @@ +{ + "name": "testUtils", + "main": "../dist/testUtils/index.js", + "module": "../dist/testUtils/index.mjs", + "types": "../dist/types/testUtils/index.d.ts" +} diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json new file mode 100644 index 00000000000..de640a6217a --- /dev/null +++ b/packages/common/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "moduleResolution": "node", + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "resolveJsonModule": true, + "declarationDir": "dist/types" + }, + "exclude": ["node_modules"], + "include": ["src/index.ts", "src/testUtils/index.ts", "global.d.ts"] +} diff --git a/packages/common/tsup.config.ts b/packages/common/tsup.config.ts new file mode 100644 index 00000000000..c660434d51c --- /dev/null +++ b/packages/common/tsup.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from 'tsup'; + +// @ts-expect-error +import { version } from './package.json'; + +export default defineConfig(overrideOptions => { + const isProd = overrideOptions.env?.NODE_ENV === 'production'; + + return { + entry: ['src/index.ts', 'src/testUtils/index.ts'], + onSuccess: 'tsc', + minify: isProd, + clean: true, + sourcemap: true, + format: ['cjs', 'esm'], + define: { PACKAGE_VERSION: `"${version}"`, __DEV__: `${!isProd}` }, + external: ['@testing-library', 'react', 'react-test-renderer'], + }; +}); diff --git a/packages/common/vite.config.ts b/packages/common/vite.config.ts new file mode 100644 index 00000000000..527089358ab --- /dev/null +++ b/packages/common/vite.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + environment: 'jsdom', + }, +}); diff --git a/packages/react/src/components/SignInButton.test.tsx b/packages/react/src/components/SignInButton.test.tsx index eb1c695c7cc..de742583d13 100644 --- a/packages/react/src/components/SignInButton.test.tsx +++ b/packages/react/src/components/SignInButton.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, userEvent, waitFor } from '@clerk/shared/utils/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; import React from 'react'; import { SignInButton } from './SignInButton'; diff --git a/packages/react/src/components/SignInWithMetamaskButton.test.tsx b/packages/react/src/components/SignInWithMetamaskButton.test.tsx index 35dc28aeed8..39a38c0275e 100644 --- a/packages/react/src/components/SignInWithMetamaskButton.test.tsx +++ b/packages/react/src/components/SignInWithMetamaskButton.test.tsx @@ -1,6 +1,6 @@ /* eslint-disable react/display-name */ -import { render, screen, userEvent, waitFor } from '@clerk/shared/utils/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; import React from 'react'; import { SignInWithMetamaskButton } from './SignInWithMetamaskButton'; diff --git a/packages/react/src/components/SignOutButton.test.tsx b/packages/react/src/components/SignOutButton.test.tsx index d8d116087c1..3da21cb4801 100644 --- a/packages/react/src/components/SignOutButton.test.tsx +++ b/packages/react/src/components/SignOutButton.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, userEvent, waitFor } from '@clerk/shared/utils/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; import React from 'react'; import { SignOutButton } from './SignOutButton'; diff --git a/packages/react/src/components/SignUpButton.test.tsx b/packages/react/src/components/SignUpButton.test.tsx index 4920978cc54..bacf684f729 100644 --- a/packages/react/src/components/SignUpButton.test.tsx +++ b/packages/react/src/components/SignUpButton.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, userEvent, waitFor } from '@clerk/shared/utils/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; import React from 'react'; import { SignUpButton } from './SignUpButton'; diff --git a/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx b/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx index eec5baf2796..81920fb65f7 100644 --- a/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx +++ b/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx @@ -1,4 +1,4 @@ -import { render } from '@clerk/shared/testUtils'; +import { render } from '@clerk/common/testUtils'; import React from 'react'; import { useMaxAllowedInstancesGuard, withMaxAllowedInstancesGuard } from './useMaxAllowedInstancesGuard'; diff --git a/packages/shared/package.json b/packages/shared/package.json index 148694f5e33..cfd07327910 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -15,9 +15,8 @@ "@popperjs/core": "^2.5.4", "@svgr/webpack": "^6.2.1", "core-js": "^3.18.3", - "js-cookie": "^2.2.1", - "react": "17.0.2", "react-color": "2.19.3", + "react": "17.0.2", "react-dom": "17.0.2", "react-popper": "^2.2.4", "regenerator-runtime": "^0.13.7" @@ -39,7 +38,6 @@ "@types/babel__preset-env": "^7", "@types/classnames": "^2", "@types/jest": "^27.4.0", - "@types/js-cookie": "^2", "@types/node": "^16.11.55", "@types/react": "^17.0.39", "@types/react-color": "^3.0.4", @@ -52,7 +50,6 @@ "core-js": "^3.18.3", "identity-obj-proxy": "^3.0.0", "jest": "^27.4.7", - "js-cookie": "^2.2.1", "react": "17.0.2", "react-color": "2.19.3", "react-dom": "17.0.2", From d04f37f71acf78864b8529b6cee592b9f9c30b04 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Sun, 9 Oct 2022 22:44:21 +0300 Subject: [PATCH 16/41] chore(repo): Remove old shared package and replace it with common --- package-lock.json | 509 +----------------- packages/clerk-js/jest.config.js | 1 - packages/clerk-js/package.json | 2 +- packages/clerk-js/src/core/clerk.ts | 2 +- packages/clerk-js/src/core/fapiClient.ts | 2 +- .../src/core/resources/EmailAddress.ts | 2 +- .../src/core/resources/ExternalAccount.ts | 2 +- .../clerk-js/src/core/resources/Session.ts | 2 +- .../clerk-js/src/core/resources/SignIn.ts | 4 +- .../clerk-js/src/core/resources/SignUp.ts | 2 +- .../src/ui/SignUp/signUpFormHelpers.ts | 2 +- .../ui/UserProfile/ActiveDevicesSection.tsx | 2 +- .../clerk-js/src/ui/common/authPropHelpers.ts | 2 +- .../src/ui/common/withRedirectToHome.test.tsx | 2 +- packages/clerk-js/src/ui/elements/Avatar.tsx | 2 +- .../src/ui/hooks/useSupportEmail.test.tsx | 2 +- .../src/ui/router/HashRouter.test.tsx | 2 +- .../src/ui/router/PathRouter.test.tsx | 2 +- .../clerk-js/src/ui/router/Switch.test.tsx | 2 +- .../src/ui/router/VirtualRouter.test.tsx | 2 +- .../src/ui/router/__mocks__/RouteContext.tsx | 2 +- .../src/ui/utils/colorTransformations.test.ts | 50 -- packages/clerk-js/src/ui/utils/index.ts | 1 - packages/clerk-js/src/utils/cookies/client.ts | 2 +- .../clerk-js/src/utils/cookies/client_uat.ts | 2 +- .../clerk-js/src/utils/cookies/handler.ts | 2 +- .../clerk-js/src/utils/cookies/initted.ts | 2 +- .../clerk-js/src/utils/cookies/session.ts | 2 +- .../src/utils/ignoreEventValue.test.ts | 2 +- packages/clerk-js/src/utils/pageLifecycle.ts | 2 +- packages/clerk-js/src/utils/url.ts | 2 +- packages/common/global.d.ts | 6 - packages/common/package.json | 39 -- packages/common/tsconfig.json | 19 - .../src/components/SignInButton.test.tsx | 2 +- .../SignInWithMetamaskButton.test.tsx | 2 +- .../src/components/SignOutButton.test.tsx | 2 +- .../src/components/SignUpButton.test.tsx | 2 +- .../useMaxAllowedInstancesGuard.test.tsx | 2 +- packages/shared/CHANGELOG.md | 321 ----------- packages/shared/global.d.ts | 9 +- packages/shared/index.d.ts | 2 - packages/shared/index.js | 1 - packages/shared/jest.config.js | 49 -- packages/shared/package.json | 73 +-- packages/{common => shared}/src/index.ts | 0 .../{common => shared}/src/testUtils/index.ts | 0 .../src/testUtils/testUtils.ts | 0 .../src/utils/array.test.ts | 0 .../{common => shared}/src/utils/array.ts | 0 .../src/utils/browser.test.ts | 0 .../{common => shared}/src/utils/browser.ts | 0 .../src/utils/color/cssColorUtils.test.ts | 0 .../src/utils/color/cssColorUtils.ts | 0 .../src/utils/color/index.ts | 0 .../src/utils/color/predicates.ts | 0 .../{common => shared}/src/utils/cookies.ts | 0 .../{common => shared}/src/utils/date.test.ts | 0 packages/{common => shared}/src/utils/date.ts | 0 packages/{common => shared}/src/utils/file.ts | 0 .../{common => shared}/src/utils/index.ts | 0 .../src/utils/isRetinaDisplay.ts | 0 .../localStorageBroadcastChannel.test.ts | 0 .../src/utils/localStorageBroadcastChannel.ts | 0 .../src/utils/mimeTypeExtensions.ts | 0 packages/{common => shared}/src/utils/noop.ts | 0 .../src/utils/object.test.ts | 0 .../{common => shared}/src/utils/object.ts | 0 .../{common => shared}/src/utils/poller.ts | 0 packages/{common => shared}/src/utils/ssr.ts | 0 .../src/utils/string.test.ts | 0 .../{common => shared}/src/utils/string.ts | 0 .../{common => shared}/src/utils/url.test.ts | 0 packages/{common => shared}/src/utils/url.ts | 0 packages/shared/testUtils.d.ts | 1 - packages/shared/testUtils.js | 1 - .../{common => shared}/testUtils/package.json | 0 packages/shared/tsconfig.json | 19 +- packages/shared/tsconfig.test.json | 7 - packages/{common => shared}/tsup.config.ts | 0 packages/shared/utils/array.test.ts | 17 - packages/shared/utils/array.ts | 12 - packages/shared/utils/browser.test.ts | 7 - packages/shared/utils/browser.ts | 3 - .../shared/utils/color/cssColorUtils.test.ts | 71 --- packages/shared/utils/color/cssColorUtils.ts | 151 ------ packages/shared/utils/color/index.ts | 2 - packages/shared/utils/color/predicates.ts | 37 -- packages/shared/utils/cookies.ts | 27 - packages/shared/utils/date.test.ts | 67 --- packages/shared/utils/date.ts | 81 --- packages/shared/utils/file.ts | 18 - packages/shared/utils/index.ts | 8 - packages/shared/utils/isRetinaDisplay.ts | 9 - .../localStorageBroadcastChannel.test.ts | 41 -- .../utils/localStorageBroadcastChannel.ts | 52 -- packages/shared/utils/mimeTypeExtensions.ts | 14 - packages/shared/utils/noop.ts | 3 - packages/shared/utils/object.test.ts | 145 ----- packages/shared/utils/object.ts | 48 -- packages/shared/utils/poller.ts | 33 -- packages/shared/utils/ssr.ts | 3 - packages/shared/utils/string.test.ts | 20 - packages/shared/utils/string.ts | 19 - packages/shared/utils/svgTransform.js | 22 - packages/shared/utils/testUtils.ts | 36 -- packages/shared/utils/url.test.ts | 16 - packages/shared/utils/url.ts | 6 - packages/{common => shared}/vite.config.ts | 0 109 files changed, 101 insertions(+), 2041 deletions(-) delete mode 100644 packages/clerk-js/src/ui/utils/colorTransformations.test.ts delete mode 100644 packages/common/global.d.ts delete mode 100644 packages/common/package.json delete mode 100644 packages/common/tsconfig.json delete mode 100644 packages/shared/CHANGELOG.md delete mode 100644 packages/shared/index.d.ts delete mode 100644 packages/shared/index.js delete mode 100644 packages/shared/jest.config.js rename packages/{common => shared}/src/index.ts (100%) rename packages/{common => shared}/src/testUtils/index.ts (100%) rename packages/{common => shared}/src/testUtils/testUtils.ts (100%) rename packages/{common => shared}/src/utils/array.test.ts (100%) rename packages/{common => shared}/src/utils/array.ts (100%) rename packages/{common => shared}/src/utils/browser.test.ts (100%) rename packages/{common => shared}/src/utils/browser.ts (100%) rename packages/{common => shared}/src/utils/color/cssColorUtils.test.ts (100%) rename packages/{common => shared}/src/utils/color/cssColorUtils.ts (100%) rename packages/{common => shared}/src/utils/color/index.ts (100%) rename packages/{common => shared}/src/utils/color/predicates.ts (100%) rename packages/{common => shared}/src/utils/cookies.ts (100%) rename packages/{common => shared}/src/utils/date.test.ts (100%) rename packages/{common => shared}/src/utils/date.ts (100%) rename packages/{common => shared}/src/utils/file.ts (100%) rename packages/{common => shared}/src/utils/index.ts (100%) rename packages/{common => shared}/src/utils/isRetinaDisplay.ts (100%) rename packages/{common => shared}/src/utils/localStorageBroadcastChannel.test.ts (100%) rename packages/{common => shared}/src/utils/localStorageBroadcastChannel.ts (100%) rename packages/{common => shared}/src/utils/mimeTypeExtensions.ts (100%) rename packages/{common => shared}/src/utils/noop.ts (100%) rename packages/{common => shared}/src/utils/object.test.ts (100%) rename packages/{common => shared}/src/utils/object.ts (100%) rename packages/{common => shared}/src/utils/poller.ts (100%) rename packages/{common => shared}/src/utils/ssr.ts (100%) rename packages/{common => shared}/src/utils/string.test.ts (100%) rename packages/{common => shared}/src/utils/string.ts (100%) rename packages/{common => shared}/src/utils/url.test.ts (100%) rename packages/{common => shared}/src/utils/url.ts (100%) delete mode 100644 packages/shared/testUtils.d.ts delete mode 100644 packages/shared/testUtils.js rename packages/{common => shared}/testUtils/package.json (100%) delete mode 100644 packages/shared/tsconfig.test.json rename packages/{common => shared}/tsup.config.ts (100%) delete mode 100644 packages/shared/utils/array.test.ts delete mode 100644 packages/shared/utils/array.ts delete mode 100644 packages/shared/utils/browser.test.ts delete mode 100644 packages/shared/utils/browser.ts delete mode 100644 packages/shared/utils/color/cssColorUtils.test.ts delete mode 100644 packages/shared/utils/color/cssColorUtils.ts delete mode 100644 packages/shared/utils/color/index.ts delete mode 100644 packages/shared/utils/color/predicates.ts delete mode 100644 packages/shared/utils/cookies.ts delete mode 100644 packages/shared/utils/date.test.ts delete mode 100644 packages/shared/utils/date.ts delete mode 100644 packages/shared/utils/file.ts delete mode 100644 packages/shared/utils/index.ts delete mode 100644 packages/shared/utils/isRetinaDisplay.ts delete mode 100644 packages/shared/utils/localStorageBroadcastChannel.test.ts delete mode 100644 packages/shared/utils/localStorageBroadcastChannel.ts delete mode 100644 packages/shared/utils/mimeTypeExtensions.ts delete mode 100644 packages/shared/utils/noop.ts delete mode 100644 packages/shared/utils/object.test.ts delete mode 100644 packages/shared/utils/object.ts delete mode 100644 packages/shared/utils/poller.ts delete mode 100644 packages/shared/utils/ssr.ts delete mode 100644 packages/shared/utils/string.test.ts delete mode 100644 packages/shared/utils/string.ts delete mode 100644 packages/shared/utils/svgTransform.js delete mode 100644 packages/shared/utils/testUtils.ts delete mode 100644 packages/shared/utils/url.test.ts delete mode 100644 packages/shared/utils/url.ts rename packages/{common => shared}/vite.config.ts (100%) diff --git a/package-lock.json b/package-lock.json index 94dcedb6357..f26f042be78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2088,10 +2088,6 @@ "resolved": "packages/sdk-node", "link": true }, - "node_modules/@clerk/common": { - "resolved": "packages/common", - "link": true - }, "node_modules/@clerk/edge": { "resolved": "packages/edge", "link": true @@ -3671,15 +3667,6 @@ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", "peer": true }, - "node_modules/@icons/material": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", - "dev": true, - "peerDependencies": { - "react": "*" - } - }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -8383,117 +8370,6 @@ "node": ">= 8" } }, - "node_modules/@sentry/browser": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.17.4.tgz", - "integrity": "sha512-ezLZ/FP2ZJPPemzGKMiu8RCHvuRYfDYXbkQb9KhUbpylJokL4GSRZHy8EYkcHugnvAiov7p8cdj7QgOZQPDAgw==", - "dev": true, - "dependencies": { - "@sentry/core": "6.17.4", - "@sentry/types": "6.17.4", - "@sentry/utils": "6.17.4", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/core": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.17.4.tgz", - "integrity": "sha512-7QFgw+I9YK/X1Gie0c7phwT5pHMow66UCXHzDzHR2aK/0X3Lhn8OWlcGjIt5zmiBK/LHwNfQBNMskbktbYHgdA==", - "dev": true, - "dependencies": { - "@sentry/hub": "6.17.4", - "@sentry/minimal": "6.17.4", - "@sentry/types": "6.17.4", - "@sentry/utils": "6.17.4", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/hub": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.17.4.tgz", - "integrity": "sha512-6+EvPcrPCwUmayeieIpm1ZrRNWriqMHWZFyw+MzunFLgG8IH8G45cJU1zNnTY9Jwwg4sFIS9xrHy3AOkctnIGw==", - "dev": true, - "dependencies": { - "@sentry/types": "6.17.4", - "@sentry/utils": "6.17.4", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/minimal": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.17.4.tgz", - "integrity": "sha512-p1A8UTtRt7bhV4ygu7yDNCannFr9E9dmqgeZWC7HrrTfygcnhNRFvTXTj92wEb0bFKuZr67wPSKnoXlkqkGxsw==", - "dev": true, - "dependencies": { - "@sentry/hub": "6.17.4", - "@sentry/types": "6.17.4", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/types": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.17.4.tgz", - "integrity": "sha512-RUyiXCKf61k2GIMP7FQX0naoSew4zLxe+UrtbjwVcWU4AFPZfH7tLNtTpVE85zAKbxsaiq3OD2FPtTZarHcwxQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.17.4.tgz", - "integrity": "sha512-+ENzZbrlVL1JJ+FoK2EOS27nbA/yToeaJPFlyVOnbthUxVyN3TTi9Uzn9F05fIE/2BTkOEk89wPtgcHafgrD6A==", - "dev": true, - "dependencies": { - "@sentry/types": "6.17.4", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -9181,12 +9057,6 @@ "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel__preset-env": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@types/babel__preset-env/-/babel__preset-env-7.9.2.tgz", - "integrity": "sha512-epEgKQiqTDZdPgYwtriYK1GVAGcyVZVvvw2UatX3+95mogKGimebApcMEWLF12uhUbNIvX284CSQEavnV/OIgw==", - "dev": true - }, "node_modules/@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", @@ -9621,16 +9491,6 @@ "csstype": "^3.0.2" } }, - "node_modules/@types/react-color": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.6.tgz", - "integrity": "sha512-OzPIO5AyRmLA7PlOyISlgabpYUa3En74LP8mTMa0veCA719SvYQov4WLMsHvCgXP+L+KI9yGhYnqZafVGG0P4w==", - "dev": true, - "dependencies": { - "@types/react": "*", - "@types/reactcss": "*" - } - }, "node_modules/@types/react-dom": { "version": "17.0.11", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", @@ -9648,15 +9508,6 @@ "@types/react": "*" } }, - "node_modules/@types/reactcss": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.6.tgz", - "integrity": "sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -12853,26 +12704,6 @@ "node": ">= 10" } }, - "node_modules/clipboard-copy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-4.0.1.tgz", - "integrity": "sha512-wOlqdqziE/NNTUJsfSgXmBMIrYmfd5V0HCGsR8uAKHcg+h9NENWINcfRjtWGU77wDHC8B8ijV4hMTGYbrKovng==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/clipboardy": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", @@ -26011,12 +25842,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -26400,12 +26225,6 @@ "node": ">=0.10.0" } }, - "node_modules/material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", - "dev": true - }, "node_modules/md5-file": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", @@ -30972,24 +30791,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-color": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", - "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", - "dev": true, - "dependencies": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.15", - "lodash-es": "^4.17.15", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" - }, - "peerDependencies": { - "react": "*" - } - }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -31333,6 +31134,7 @@ "version": "16.14.1", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", + "peer": true, "dependencies": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0" @@ -31345,6 +31147,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", + "peer": true, "dependencies": { "object-assign": "^4.1.1", "react-is": "^17.0.2", @@ -31355,15 +31158,6 @@ "react": "17.0.2" } }, - "node_modules/reactcss": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", - "dev": true, - "dependencies": { - "lodash": "^4.0.1" - } - }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -34656,6 +34450,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "peer": true, "engines": { "node": "*" } @@ -38301,7 +38096,7 @@ "version": "4.9.0", "license": "MIT", "dependencies": { - "@clerk/common": "^0.0.1", + "@clerk/shared": "^0.0.1", "@clerk/types": "^3.10.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", @@ -38439,6 +38234,7 @@ "packages/common": { "name": "@clerk/common", "version": "0.0.1", + "extraneous": true, "license": "ISC", "devDependencies": { "@clerk/types": "^3.10.1", @@ -39427,60 +39223,26 @@ }, "packages/shared": { "name": "@clerk/shared", - "version": "0.3.27", + "version": "0.0.1", + "license": "ISC", "devDependencies": { - "@babel/core": "^7.13.14", - "@babel/preset-env": "^7.13.12", - "@babel/preset-react": "^7.13.13", "@clerk/types": "^3.10.1", - "@popperjs/core": "^2.5.4", - "@sentry/browser": "^6.3.0", - "@svgr/webpack": "^6.2.1", + "@types/js-cookie": "^3.0.2", + "js-cookie": "^3.0.1", + "tsup": "^6.2.3", + "typescript": "*", + "vitest": "^0.23.4" + }, + "peerDependencies": { "@testing-library/dom": "^7.28.1", "@testing-library/jest-dom": "^5.11.6", "@testing-library/react": "^11.2.1", "@testing-library/react-hooks": "^3.4.2", "@testing-library/user-event": "^12.2.2", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/classnames": "^2", - "@types/jest": "^27.4.0", - "@types/node": "^16.11.55", - "@types/react": "^17.0.39", - "@types/react-color": "^3.0.4", - "@types/react-dom": "^17.0.11", - "@types/react-test-renderer": "^17", - "@types/testing-library__jest-dom": "^5", - "@types/testing-library__react-hooks": "^3", - "classnames": "^2.3.1", - "clipboard-copy": "^4.0.1", - "core-js": "^3.18.3", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.7", - "react": "17.0.2", - "react-color": "2.19.3", - "react-dom": "17.0.2", - "react-popper": "^2.2.4", - "react-test-renderer": "17.0.2", - "ts-jest": "^27.1.3" - }, - "peerDependencies": { - "@popperjs/core": "^2.5.4", - "@svgr/webpack": "^6.2.1", - "core-js": "^3.18.3", "react": "17.0.2", - "react-color": "2.19.3", - "react-dom": "17.0.2", - "react-popper": "^2.2.4", - "regenerator-runtime": "^0.13.7" + "react-dom": "17.0.2" } }, - "packages/shared/node_modules/@types/node": { - "version": "16.11.56", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.56.tgz", - "integrity": "sha512-aFcUkv7EddxxOa/9f74DINReQ/celqH8DiB3fRYgVDM2Xm5QJL8sl80QKuAnGvwAsMn+H3IFA6WCrQh1CY7m1A==", - "dev": true - }, "packages/themes": { "name": "@clerk/themes", "version": "1.2.17", @@ -41029,7 +40791,7 @@ "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.5", "@babel/preset-typescript": "^7.12.1", - "@clerk/common": "^0.0.1", + "@clerk/shared": "^0.0.1", "@clerk/types": "^3.10.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", @@ -41206,17 +40968,6 @@ } } }, - "@clerk/common": { - "version": "file:packages/common", - "requires": { - "@clerk/types": "^3.10.1", - "@types/js-cookie": "^3.0.2", - "js-cookie": "^3.0.1", - "tsup": "^6.2.3", - "typescript": "*", - "vitest": "^0.23.4" - } - }, "@clerk/edge": { "version": "file:packages/edge", "requires": { @@ -41569,48 +41320,12 @@ "@clerk/shared": { "version": "file:packages/shared", "requires": { - "@babel/core": "^7.13.14", - "@babel/preset-env": "^7.13.12", - "@babel/preset-react": "^7.13.13", "@clerk/types": "^3.10.1", - "@popperjs/core": "^2.5.4", - "@sentry/browser": "^6.3.0", - "@svgr/webpack": "^6.2.1", - "@testing-library/dom": "^7.28.1", - "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.1", - "@testing-library/react-hooks": "^3.4.2", - "@testing-library/user-event": "^12.2.2", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/classnames": "^2", - "@types/jest": "^27.4.0", - "@types/node": "^16.11.55", - "@types/react": "^17.0.39", - "@types/react-color": "^3.0.4", - "@types/react-dom": "^17.0.11", - "@types/react-test-renderer": "^17", - "@types/testing-library__jest-dom": "^5", - "@types/testing-library__react-hooks": "^3", - "classnames": "^2.3.1", - "clipboard-copy": "^4.0.1", - "core-js": "^3.18.3", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.7", - "react": "17.0.2", - "react-color": "2.19.3", - "react-dom": "17.0.2", - "react-popper": "^2.2.4", - "react-test-renderer": "17.0.2", - "ts-jest": "^27.1.3" - }, - "dependencies": { - "@types/node": { - "version": "16.11.56", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.56.tgz", - "integrity": "sha512-aFcUkv7EddxxOa/9f74DINReQ/celqH8DiB3fRYgVDM2Xm5QJL8sl80QKuAnGvwAsMn+H3IFA6WCrQh1CY7m1A==", - "dev": true - } + "@types/js-cookie": "^3.0.2", + "js-cookie": "^3.0.1", + "tsup": "^6.2.3", + "typescript": "*", + "vitest": "^0.23.4" } }, "@clerk/themes": { @@ -42847,13 +42562,6 @@ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", "peer": true }, - "@icons/material": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", - "dev": true, - "requires": {} - }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -46358,109 +46066,6 @@ } } }, - "@sentry/browser": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.17.4.tgz", - "integrity": "sha512-ezLZ/FP2ZJPPemzGKMiu8RCHvuRYfDYXbkQb9KhUbpylJokL4GSRZHy8EYkcHugnvAiov7p8cdj7QgOZQPDAgw==", - "dev": true, - "requires": { - "@sentry/core": "6.17.4", - "@sentry/types": "6.17.4", - "@sentry/utils": "6.17.4", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/core": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.17.4.tgz", - "integrity": "sha512-7QFgw+I9YK/X1Gie0c7phwT5pHMow66UCXHzDzHR2aK/0X3Lhn8OWlcGjIt5zmiBK/LHwNfQBNMskbktbYHgdA==", - "dev": true, - "requires": { - "@sentry/hub": "6.17.4", - "@sentry/minimal": "6.17.4", - "@sentry/types": "6.17.4", - "@sentry/utils": "6.17.4", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/hub": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.17.4.tgz", - "integrity": "sha512-6+EvPcrPCwUmayeieIpm1ZrRNWriqMHWZFyw+MzunFLgG8IH8G45cJU1zNnTY9Jwwg4sFIS9xrHy3AOkctnIGw==", - "dev": true, - "requires": { - "@sentry/types": "6.17.4", - "@sentry/utils": "6.17.4", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/minimal": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.17.4.tgz", - "integrity": "sha512-p1A8UTtRt7bhV4ygu7yDNCannFr9E9dmqgeZWC7HrrTfygcnhNRFvTXTj92wEb0bFKuZr67wPSKnoXlkqkGxsw==", - "dev": true, - "requires": { - "@sentry/hub": "6.17.4", - "@sentry/types": "6.17.4", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@sentry/types": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.17.4.tgz", - "integrity": "sha512-RUyiXCKf61k2GIMP7FQX0naoSew4zLxe+UrtbjwVcWU4AFPZfH7tLNtTpVE85zAKbxsaiq3OD2FPtTZarHcwxQ==", - "dev": true - }, - "@sentry/utils": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.17.4.tgz", - "integrity": "sha512-+ENzZbrlVL1JJ+FoK2EOS27nbA/yToeaJPFlyVOnbthUxVyN3TTi9Uzn9F05fIE/2BTkOEk89wPtgcHafgrD6A==", - "dev": true, - "requires": { - "@sentry/types": "6.17.4", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -46926,12 +46531,6 @@ "@babel/types": "^7.0.0" } }, - "@types/babel__preset-env": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@types/babel__preset-env/-/babel__preset-env-7.9.2.tgz", - "integrity": "sha512-epEgKQiqTDZdPgYwtriYK1GVAGcyVZVvvw2UatX3+95mogKGimebApcMEWLF12uhUbNIvX284CSQEavnV/OIgw==", - "dev": true - }, "@types/babel__template": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", @@ -47358,16 +46957,6 @@ "csstype": "^3.0.2" } }, - "@types/react-color": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.6.tgz", - "integrity": "sha512-OzPIO5AyRmLA7PlOyISlgabpYUa3En74LP8mTMa0veCA719SvYQov4WLMsHvCgXP+L+KI9yGhYnqZafVGG0P4w==", - "dev": true, - "requires": { - "@types/react": "*", - "@types/reactcss": "*" - } - }, "@types/react-dom": { "version": "17.0.11", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.11.tgz", @@ -47385,15 +46974,6 @@ "@types/react": "*" } }, - "@types/reactcss": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.6.tgz", - "integrity": "sha512-qaIzpCuXNWomGR1Xq8SCFTtF4v8V27Y6f+b9+bzHiv087MylI/nTCqqdChNeWS7tslgROmYB7yeiruWX7WnqNg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, "@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", @@ -49876,12 +49456,6 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, - "clipboard-copy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-4.0.1.tgz", - "integrity": "sha512-wOlqdqziE/NNTUJsfSgXmBMIrYmfd5V0HCGsR8uAKHcg+h9NENWINcfRjtWGU77wDHC8B8ijV4hMTGYbrKovng==", - "dev": true - }, "clipboardy": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", @@ -59970,12 +59544,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true - }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -60317,12 +59885,6 @@ "object-visit": "^1.0.0" } }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", - "dev": true - }, "md5-file": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", @@ -63723,21 +63285,6 @@ "object-assign": "^4.1.1" } }, - "react-color": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", - "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", - "dev": true, - "requires": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.15", - "lodash-es": "^4.17.15", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" - } - }, "react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -63990,6 +63537,7 @@ "version": "16.14.1", "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", + "peer": true, "requires": { "object-assign": "^4.1.1", "react-is": "^16.12.0 || ^17.0.0" @@ -63999,6 +63547,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", + "peer": true, "requires": { "object-assign": "^4.1.1", "react-is": "^17.0.2", @@ -64006,15 +63555,6 @@ "scheduler": "^0.20.2" } }, - "reactcss": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", - "dev": true, - "requires": { - "lodash": "^4.0.1" - } - }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -66585,7 +66125,8 @@ "tinycolor2": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "peer": true }, "tinypool": { "version": "0.3.0", diff --git a/packages/clerk-js/jest.config.js b/packages/clerk-js/jest.config.js index 59d6c47f457..4d00fe4e58e 100644 --- a/packages/clerk-js/jest.config.js +++ b/packages/clerk-js/jest.config.js @@ -28,7 +28,6 @@ module.exports = { // using ts-jest transform: { '^.+\\.tsx?$': 'ts-jest', - '^.+\\.svg$': '<rootDir>../shared/utils/svgTransform.js', }, // For mocking fetch diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 6e2b1476c4b..1e762786d5e 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -39,7 +39,7 @@ }, "dependencies": { "@clerk/types": "^3.10.1", - "@clerk/common": "^0.0.1", + "@clerk/shared": "^0.0.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 46d229250e5..2f419f0cab7 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1,4 +1,4 @@ -import { inClientSide, LocalStorageBroadcastChannel, noop } from '@clerk/common'; +import { inClientSide, LocalStorageBroadcastChannel, noop } from '@clerk/shared'; import type { ActiveSessionResource, AuthenticateWithMetamaskParams, diff --git a/packages/clerk-js/src/core/fapiClient.ts b/packages/clerk-js/src/core/fapiClient.ts index 1afc2645c94..4fb1ee4e73c 100644 --- a/packages/clerk-js/src/core/fapiClient.ts +++ b/packages/clerk-js/src/core/fapiClient.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/common'; +import { camelToSnake } from '@clerk/shared'; import type { Clerk, ClerkAPIErrorJSON, ClientJSON } from '@clerk/types'; import qs from 'qs'; diff --git a/packages/clerk-js/src/core/resources/EmailAddress.ts b/packages/clerk-js/src/core/resources/EmailAddress.ts index cd80793e3c3..2d7394112ef 100644 --- a/packages/clerk-js/src/core/resources/EmailAddress.ts +++ b/packages/clerk-js/src/core/resources/EmailAddress.ts @@ -1,4 +1,4 @@ -import { Poller } from '@clerk/common'; +import { Poller } from '@clerk/shared'; import type { AttemptEmailAddressVerificationParams, CreateMagicLinkFlowReturn, diff --git a/packages/clerk-js/src/core/resources/ExternalAccount.ts b/packages/clerk-js/src/core/resources/ExternalAccount.ts index 37828b49dc0..ceb312ef5da 100644 --- a/packages/clerk-js/src/core/resources/ExternalAccount.ts +++ b/packages/clerk-js/src/core/resources/ExternalAccount.ts @@ -1,4 +1,4 @@ -import { titleize } from '@clerk/common'; +import { titleize } from '@clerk/shared'; import type { ExternalAccountJSON, ExternalAccountResource, OAuthProvider, VerificationResource } from '@clerk/types'; import { BaseResource } from './Base'; diff --git a/packages/clerk-js/src/core/resources/Session.ts b/packages/clerk-js/src/core/resources/Session.ts index 54383138708..2a5e0850fc9 100644 --- a/packages/clerk-js/src/core/resources/Session.ts +++ b/packages/clerk-js/src/core/resources/Session.ts @@ -1,4 +1,4 @@ -import { deepSnakeToCamel } from '@clerk/common'; +import { deepSnakeToCamel } from '@clerk/shared'; import type { ActJWTClaim, PublicUserData, SessionJSON, SessionResource, SessionStatus } from '@clerk/types'; import { GetToken, GetTokenOptions, UserResource } from '@clerk/types/src'; diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 76a41cd7767..7758f173f8a 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -1,5 +1,5 @@ -import { deepSnakeToCamel } from '@clerk/common'; -import { Poller } from '@clerk/common'; +import { deepSnakeToCamel } from '@clerk/shared'; +import { Poller } from '@clerk/shared'; import type { AttemptFirstFactorParams, AttemptSecondFactorParams, diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 5348791e21d..9dd29d86ce4 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -1,4 +1,4 @@ -import { Poller } from '@clerk/common'; +import { Poller } from '@clerk/shared'; import type { AttemptEmailAddressVerificationParams, AttemptPhoneNumberVerificationParams, diff --git a/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts b/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts index fe152641d54..a1523fc0aa2 100644 --- a/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts +++ b/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/common'; +import { camelToSnake } from '@clerk/shared'; import type { Attributes, SignUpResource } from '@clerk/types'; import { UserSettingsResource } from '@clerk/types'; diff --git a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx b/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx index 65ddad501d0..be23f61c040 100644 --- a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx +++ b/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx @@ -1,4 +1,4 @@ -import { formatRelative } from '@clerk/common'; +import { formatRelative } from '@clerk/shared'; import { SessionWithActivitiesResource } from '@clerk/types'; import React from 'react'; diff --git a/packages/clerk-js/src/ui/common/authPropHelpers.ts b/packages/clerk-js/src/ui/common/authPropHelpers.ts index 784bdcaba6a..e0a818ef1c1 100644 --- a/packages/clerk-js/src/ui/common/authPropHelpers.ts +++ b/packages/clerk-js/src/ui/common/authPropHelpers.ts @@ -1,4 +1,4 @@ -import { camelToSnake } from '@clerk/common'; +import { camelToSnake } from '@clerk/shared'; import type { DisplayConfigResource } from '@clerk/types'; import type { ParsedQs } from 'qs'; import qs from 'qs'; diff --git a/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx b/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx index abfa49bf303..82a136dbfb5 100644 --- a/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx +++ b/packages/clerk-js/src/ui/common/withRedirectToHome.test.tsx @@ -1,4 +1,4 @@ -import { render, screen } from '@clerk/common/testUtils'; +import { render, screen } from '@clerk/shared/testUtils'; import { EnvironmentResource } from '@clerk/types'; import React from 'react'; diff --git a/packages/clerk-js/src/ui/elements/Avatar.tsx b/packages/clerk-js/src/ui/elements/Avatar.tsx index 8aed67b9e29..323828c42c0 100644 --- a/packages/clerk-js/src/ui/elements/Avatar.tsx +++ b/packages/clerk-js/src/ui/elements/Avatar.tsx @@ -1,4 +1,4 @@ -import { isRetinaDisplay } from '@clerk/common'; +import { isRetinaDisplay } from '@clerk/shared'; import React from 'react'; import { BoringAvatar } from '../common/BoringAvatar'; diff --git a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx index ec3d2d3a280..11454ee7684 100644 --- a/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx +++ b/packages/clerk-js/src/ui/hooks/useSupportEmail.test.tsx @@ -1,4 +1,4 @@ -import { renderHook } from '@clerk/common/testUtils'; +import { renderHook } from '@clerk/shared/testUtils'; import { useSupportEmail } from './useSupportEmail'; diff --git a/packages/clerk-js/src/ui/router/HashRouter.test.tsx b/packages/clerk-js/src/ui/router/HashRouter.test.tsx index 714cb21275f..2c940c77f58 100644 --- a/packages/clerk-js/src/ui/router/HashRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/HashRouter.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, userEvent } from '@clerk/common/testUtils'; +import { act, render, screen, userEvent } from '@clerk/shared/testUtils'; import React from 'react'; import Clerk from '../../core/clerk'; diff --git a/packages/clerk-js/src/ui/router/PathRouter.test.tsx b/packages/clerk-js/src/ui/router/PathRouter.test.tsx index b224f61520d..79df8e4d519 100644 --- a/packages/clerk-js/src/ui/router/PathRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/PathRouter.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, userEvent } from '@clerk/common/testUtils'; +import { act, render, screen, userEvent } from '@clerk/shared/testUtils'; import React from 'react'; import Clerk from '../../core/clerk'; diff --git a/packages/clerk-js/src/ui/router/Switch.test.tsx b/packages/clerk-js/src/ui/router/Switch.test.tsx index f130e8d921e..039fd9cefdb 100644 --- a/packages/clerk-js/src/ui/router/Switch.test.tsx +++ b/packages/clerk-js/src/ui/router/Switch.test.tsx @@ -1,4 +1,4 @@ -import { render, screen } from '@clerk/common/testUtils'; +import { render, screen } from '@clerk/shared/testUtils'; import React from 'react'; import { HashRouter, Route, Switch } from 'ui/router'; diff --git a/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx b/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx index 6d1f09f8e39..0b9be4c11c9 100644 --- a/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx +++ b/packages/clerk-js/src/ui/router/VirtualRouter.test.tsx @@ -1,4 +1,4 @@ -import { act, render, screen, userEvent } from '@clerk/common/testUtils'; +import { act, render, screen, userEvent } from '@clerk/shared/testUtils'; import React from 'react'; import { Route, useRouter, VirtualRouter } from './'; diff --git a/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx b/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx index e41505f0b03..cabc7dfec95 100644 --- a/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx +++ b/packages/clerk-js/src/ui/router/__mocks__/RouteContext.tsx @@ -1,4 +1,4 @@ -import { noop } from '@clerk/common'; +import { noop } from '@clerk/shared'; export const useRouter = () => ({ resolve: jest.fn(() => ({ diff --git a/packages/clerk-js/src/ui/utils/colorTransformations.test.ts b/packages/clerk-js/src/ui/utils/colorTransformations.test.ts deleted file mode 100644 index 40a274acb50..00000000000 --- a/packages/clerk-js/src/ui/utils/colorTransformations.test.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Color } from 'react-color'; - -import { colorToSameTypeString, hexStringToRgbaColor, stringToHslaColor } from './colorTransformations'; - -describe('stringToHslaColor(color)', function () { - const hsla = { h: 195, s: 1, l: 0.5, a: 1 }; - const cases: Array<[string, Color | undefined]> = [ - ['', undefined], - ['transparent', { h: 0, s: 0, l: 0, a: 0 }], - ['#00bfff', hsla], - ['00bfff', hsla], - ['rgb(0, 191, 255)', hsla], - ['rgba(0, 191, 255, 0.3)', { ...hsla, a: 0.3 }], - ['hsla(195, 100%, 50%, 1)', hsla], - ['hsla(195, 100%, 50%, 1)', hsla], - ]; - - it.each(cases)('.stringToHslaColor(%s) => %s', (a, expected) => { - expect(stringToHslaColor(a)).toEqual(expected); - }); -}); - -describe('hexStringToRgbaColor(color)', function () { - const cases: Array<[string, Color | null]> = [ - ['#00bfff', { r: 0, g: 191, b: 255 }], - ['00bfff', { r: 0, g: 191, b: 255 }], - ]; - - it.each(cases)('.hexStringToRgbaColor(%s) => %s', (a, expected) => { - expect(hexStringToRgbaColor(a)).toEqual(expected); - }); -}); - -describe('colorToSameTypeString(color)', function () { - const cases: Array<[Color, string]> = [ - ['', ''], - ['invalid', ''], - ['#12ff12', '#12ff12'], - ['#12ff12', '#12ff12'], - ['#1ff', '#1ff'], - [{ r: 100, g: 100, b: 100, a: undefined }, 'rgb(100,100,100)'], - [{ r: 100, g: 100, b: 100, a: 0.5 }, 'rgba(100,100,100,0.5)'], - [{ h: 100, s: 0.55, l: 0.33, a: undefined }, 'hsl(100,55%,33%)'], - [{ h: 100, s: 1, l: 1, a: 0.5 }, 'hsla(100,100%,100%,0.5)'], - ]; - - it.each(cases)('.colorToSameTypeString(%s) => %s', (a, expected) => { - expect(colorToSameTypeString(a)).toEqual(expected); - }); -}); diff --git a/packages/clerk-js/src/ui/utils/index.ts b/packages/clerk-js/src/ui/utils/index.ts index 929a455c97a..b1484a8b672 100644 --- a/packages/clerk-js/src/ui/utils/index.ts +++ b/packages/clerk-js/src/ui/utils/index.ts @@ -3,7 +3,6 @@ export * from './containsAllOf'; export * from './createContextAndHook'; export * from './createInfiniteAccessProxy'; export * from './fastDeepMerge'; -export * from './colorTransformations'; export * from './colors'; export * from './factorSorting'; export * from './sleep'; diff --git a/packages/clerk-js/src/utils/cookies/client.ts b/packages/clerk-js/src/utils/cookies/client.ts index fcf45fae2d9..60ce9cd82c3 100644 --- a/packages/clerk-js/src/utils/cookies/client.ts +++ b/packages/clerk-js/src/utils/cookies/client.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/common'; +import { createCookieHandler } from '@clerk/shared'; const CLIENT_COOKIE_NAME = '__client'; diff --git a/packages/clerk-js/src/utils/cookies/client_uat.ts b/packages/clerk-js/src/utils/cookies/client_uat.ts index e68ba258780..6b9e2258bda 100644 --- a/packages/clerk-js/src/utils/cookies/client_uat.ts +++ b/packages/clerk-js/src/utils/cookies/client_uat.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/common'; +import { createCookieHandler } from '@clerk/shared'; const CLIENT_UAT_COOKIE_NAME = '__client_uat'; diff --git a/packages/clerk-js/src/utils/cookies/handler.ts b/packages/clerk-js/src/utils/cookies/handler.ts index ada8c345759..c9e8598d077 100644 --- a/packages/clerk-js/src/utils/cookies/handler.ts +++ b/packages/clerk-js/src/utils/cookies/handler.ts @@ -1,4 +1,4 @@ -import { addYears } from '@clerk/common'; +import { addYears } from '@clerk/shared'; import type { ClientResource } from '@clerk/types'; import { buildURL, getAllETLDs } from '../url'; diff --git a/packages/clerk-js/src/utils/cookies/initted.ts b/packages/clerk-js/src/utils/cookies/initted.ts index 87c877fee14..42dcad0268f 100644 --- a/packages/clerk-js/src/utils/cookies/initted.ts +++ b/packages/clerk-js/src/utils/cookies/initted.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/common'; +import { createCookieHandler } from '@clerk/shared'; const INITTED_COOKIE_NAME = '__initted'; diff --git a/packages/clerk-js/src/utils/cookies/session.ts b/packages/clerk-js/src/utils/cookies/session.ts index 62f912969e3..222d0af611e 100644 --- a/packages/clerk-js/src/utils/cookies/session.ts +++ b/packages/clerk-js/src/utils/cookies/session.ts @@ -1,4 +1,4 @@ -import { createCookieHandler } from '@clerk/common'; +import { createCookieHandler } from '@clerk/shared'; const SESSION_COOKIE_NAME = '__session'; diff --git a/packages/clerk-js/src/utils/ignoreEventValue.test.ts b/packages/clerk-js/src/utils/ignoreEventValue.test.ts index 9105559c02c..c426d370aaa 100644 --- a/packages/clerk-js/src/utils/ignoreEventValue.test.ts +++ b/packages/clerk-js/src/utils/ignoreEventValue.test.ts @@ -1,4 +1,4 @@ -import { noop } from '@clerk/common/testUtils'; +import { noop } from '@clerk/shared/testUtils'; import { ignoreEventValue } from './ignoreEventValue'; diff --git a/packages/clerk-js/src/utils/pageLifecycle.ts b/packages/clerk-js/src/utils/pageLifecycle.ts index e076ebde932..b127fdc9d86 100644 --- a/packages/clerk-js/src/utils/pageLifecycle.ts +++ b/packages/clerk-js/src/utils/pageLifecycle.ts @@ -1,4 +1,4 @@ -import { inClientSide } from '@clerk/common'; +import { inClientSide } from '@clerk/shared'; const noop = () => { // diff --git a/packages/clerk-js/src/utils/url.ts b/packages/clerk-js/src/utils/url.ts index b7813226154..0c6a2e8d2b4 100644 --- a/packages/clerk-js/src/utils/url.ts +++ b/packages/clerk-js/src/utils/url.ts @@ -1,4 +1,4 @@ -import { camelToSnake, isIPV4Address } from '@clerk/common'; +import { camelToSnake, isIPV4Address } from '@clerk/shared'; import { SignUpResource } from '@clerk/types'; import { loadScript } from '../utils'; diff --git a/packages/common/global.d.ts b/packages/common/global.d.ts deleted file mode 100644 index 8c7a4b73b56..00000000000 --- a/packages/common/global.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export {}; - -declare global { - const PACKAGE_VERSION: string; - const __DEV__: boolean; -} diff --git a/packages/common/package.json b/packages/common/package.json deleted file mode 100644 index 43b815a5a31..00000000000 --- a/packages/common/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@clerk/common", - "version": "0.0.1", - "description": "Internal package utils used by the Clerk SDKs", - "types": "./dist/types/index.d.ts", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "files": [ - "dist", - "testUtils" - ], - "scripts": { - "dev": "tsup --watch", - "build": "tsup --env.NODE_ENV production", - "clean": "rimraf ./dist", - "lint": "eslint .", - "test": "vitest run", - "test:watch": "vitest" - }, - "devDependencies": { - "js-cookie": "^3.0.1", - "@clerk/types": "^3.10.1", - "@types/js-cookie": "^3.0.2", - "tsup": "^6.2.3", - "typescript": "*", - "vitest": "^0.23.4" - }, - "peerDependencies": { - "@testing-library/dom": "^7.28.1", - "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.1", - "@testing-library/react-hooks": "^3.4.2", - "@testing-library/user-event": "^12.2.2", - "react": "17.0.2", - "react-dom": "17.0.2" - }, - "author": "", - "license": "ISC" -} diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json deleted file mode 100644 index de640a6217a..00000000000 --- a/packages/common/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "moduleResolution": "node", - "preserveWatchOutput": true, - "skipLibCheck": true, - "strict": true, - "emitDeclarationOnly": true, - "declaration": true, - "declarationMap": true, - "outDir": "dist", - "resolveJsonModule": true, - "declarationDir": "dist/types" - }, - "exclude": ["node_modules"], - "include": ["src/index.ts", "src/testUtils/index.ts", "global.d.ts"] -} diff --git a/packages/react/src/components/SignInButton.test.tsx b/packages/react/src/components/SignInButton.test.tsx index de742583d13..e3a23836b7f 100644 --- a/packages/react/src/components/SignInButton.test.tsx +++ b/packages/react/src/components/SignInButton.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/shared/testUtils'; import React from 'react'; import { SignInButton } from './SignInButton'; diff --git a/packages/react/src/components/SignInWithMetamaskButton.test.tsx b/packages/react/src/components/SignInWithMetamaskButton.test.tsx index 39a38c0275e..77df3cb6138 100644 --- a/packages/react/src/components/SignInWithMetamaskButton.test.tsx +++ b/packages/react/src/components/SignInWithMetamaskButton.test.tsx @@ -1,6 +1,6 @@ /* eslint-disable react/display-name */ -import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/shared/testUtils'; import React from 'react'; import { SignInWithMetamaskButton } from './SignInWithMetamaskButton'; diff --git a/packages/react/src/components/SignOutButton.test.tsx b/packages/react/src/components/SignOutButton.test.tsx index 3da21cb4801..4cd982dd301 100644 --- a/packages/react/src/components/SignOutButton.test.tsx +++ b/packages/react/src/components/SignOutButton.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/shared/testUtils'; import React from 'react'; import { SignOutButton } from './SignOutButton'; diff --git a/packages/react/src/components/SignUpButton.test.tsx b/packages/react/src/components/SignUpButton.test.tsx index bacf684f729..d5256aed25f 100644 --- a/packages/react/src/components/SignUpButton.test.tsx +++ b/packages/react/src/components/SignUpButton.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, userEvent, waitFor } from '@clerk/common/testUtils'; +import { render, screen, userEvent, waitFor } from '@clerk/shared/testUtils'; import React from 'react'; import { SignUpButton } from './SignUpButton'; diff --git a/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx b/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx index 81920fb65f7..eec5baf2796 100644 --- a/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx +++ b/packages/react/src/utils/useMaxAllowedInstancesGuard.test.tsx @@ -1,4 +1,4 @@ -import { render } from '@clerk/common/testUtils'; +import { render } from '@clerk/shared/testUtils'; import React from 'react'; import { useMaxAllowedInstancesGuard, withMaxAllowedInstancesGuard } from './useMaxAllowedInstancesGuard'; diff --git a/packages/shared/CHANGELOG.md b/packages/shared/CHANGELOG.md deleted file mode 100644 index be787c070aa..00000000000 --- a/packages/shared/CHANGELOG.md +++ /dev/null @@ -1,321 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -### [0.3.27](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.27-staging.0...@clerk/shared@0.3.27) (2022-10-07) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.26](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.26-staging.0...@clerk/shared@0.3.26) (2022-10-05) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.25](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.25-staging.3...@clerk/shared@0.3.25) (2022-10-03) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.24](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.24-staging.4...@clerk/shared@0.3.24) (2022-09-29) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.23](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.22...@clerk/shared@0.3.23) (2022-09-25) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.22](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.22-staging.1...@clerk/shared@0.3.22) (2022-09-24) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.21](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.21-staging.0...@clerk/shared@0.3.21) (2022-09-22) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.20](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.19-staging.4...@clerk/shared@0.3.20) (2022-09-19) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.19](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.19-staging.4...@clerk/shared@0.3.19) (2022-09-16) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.18](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.18-staging.0...@clerk/shared@0.3.18) (2022-09-07) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.17](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.17-staging.0...@clerk/shared@0.3.17) (2022-09-02) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.16](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.16-staging.0...@clerk/shared@0.3.16) (2022-08-29) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.15](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.15-staging.2...@clerk/shared@0.3.15) (2022-08-29) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.14](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.14-staging.0...@clerk/shared@0.3.14) (2022-08-24) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.13](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.12...@clerk/shared@0.3.13) (2022-08-18) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.12](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.12-staging.0...@clerk/shared@0.3.12) (2022-08-18) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.11](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.10...@clerk/shared@0.3.11) (2022-08-16) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.10](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.10-staging.0...@clerk/shared@0.3.10) (2022-08-09) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.9](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.8...@clerk/shared@0.3.9) (2022-08-07) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.8](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.8-staging.1...@clerk/shared@0.3.8) (2022-08-05) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.7](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.6...@clerk/shared@0.3.7) (2022-08-04) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.6](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.5...@clerk/shared@0.3.6) (2022-07-13) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.5](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.5-staging.0...@clerk/shared@0.3.5) (2022-07-12) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.4](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.3...@clerk/shared@0.3.4) (2022-07-07) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.3](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.2...@clerk/shared@0.3.3) (2022-07-06) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.2](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.1...@clerk/shared@0.3.2) (2022-07-01) - -**Note:** Version bump only for package @clerk/shared - -### [0.3.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.0...@clerk/shared@0.3.1) (2022-06-24) - -**Note:** Version bump only for package @clerk/shared - -## [0.3.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.0-staging.1...@clerk/shared@0.3.0) (2022-06-16) - -**Note:** Version bump only for package @clerk/shared - -## [0.3.0-staging.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.0-staging.0...@clerk/shared@0.3.0-staging.1) (2022-06-16) - -### Bug Fixes - -- **clerk-js:** Default verification status to unverified if verification is missing ([cac67a0](https://github.com/clerkinc/clerk_docker/commit/cac67a0199c0058ba23a7b74834dfa55915a42ae)) - -### [0.2.8](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.8-staging.3...@clerk/shared@0.2.8) (2022-06-06) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.8-staging.3](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.8-staging.2...@clerk/shared@0.2.8-staging.3) (2022-06-03) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.8-staging.2](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.8-staging.1...@clerk/shared@0.2.8-staging.2) (2022-06-02) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.8-staging.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.8-staging.0...@clerk/shared@0.2.8-staging.1) (2022-06-01) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.7](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.7-staging.1...@clerk/shared@0.2.7) (2022-05-20) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.7-staging.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.6...@clerk/shared@0.2.7-staging.1) (2022-05-18) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.7-staging.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.6...@clerk/shared@0.2.7-staging.0) (2022-05-17) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.6](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.3...@clerk/shared@0.2.6) (2022-05-13) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.5](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.3...@clerk/shared@0.2.5) (2022-05-12) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.4](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.3...@clerk/shared@0.2.4) (2022-05-12) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.3](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.3-staging.0...@clerk/shared@0.2.3) (2022-05-11) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.2](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.1...@clerk/shared@0.2.2) (2022-05-06) - -**Note:** Version bump only for package @clerk/shared - -### [0.2.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.1-staging.0...@clerk/shared@0.2.1) (2022-05-05) - -**Note:** Version bump only for package @clerk/shared - -## [0.2.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.2.0-staging.0...@clerk/shared@0.2.0) (2022-04-28) - -### Reverts - -- Revert "feat(clerk-js,shared): Add support for android WebOTP" ([af090cd](https://github.com/clerkinc/clerk_docker/commit/af090cd43d26d2fb53f00a4eb25e2be4d5c8429f)) - -### [0.1.4](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.1.4-staging.1...@clerk/shared@0.1.4) (2022-04-19) - -**Note:** Version bump only for package @clerk/shared - -### [0.1.4-staging.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.1.4-staging.0...@clerk/shared@0.1.4-staging.1) (2022-04-19) - -**Note:** Version bump only for package @clerk/shared - -### [0.1.3](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.1.3-alpha.0...@clerk/shared@0.1.3) (2022-04-18) - -**Note:** Version bump only for package @clerk/shared - -### [0.1.3-alpha.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.1.2...@clerk/shared@0.1.3-alpha.0) (2022-04-15) - -**Note:** Version bump only for package @clerk/shared - -### [0.1.2](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.1.2-staging.0...@clerk/shared@0.1.2) (2022-04-15) - -**Note:** Version bump only for package @clerk/shared - -### [0.1.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.1.1-staging.0...@clerk/shared@0.1.1) (2022-04-13) - -**Note:** Version bump only for package @clerk/shared - -## [0.1.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.21...@clerk/shared@0.1.0) (2022-04-07) - -### Features - -- **clerk-js,shared:** Autofill OTP using WebOTP on Android ([eb41c34](https://github.com/clerkinc/clerk_docker/commit/eb41c34392ebee5f8b725c4172b2be77b68a0baf)) -- **clerk-js,shared:** Rely on onChange event to fill OTP inputs ([b6811b4](https://github.com/clerkinc/clerk_docker/commit/b6811b4259894bec472953a4b3f0ec50ad7996ab)) - -### [0.0.21](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.21-staging.0...@clerk/shared@0.0.21) (2022-04-04) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.20](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.20-staging.0...@clerk/shared@0.0.20) (2022-03-29) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.19](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.19-staging.0...@clerk/shared@0.0.19) (2022-03-28) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.18](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.18-alpha.0...@clerk/shared@0.0.18) (2022-03-24) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.18-staging.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.18-staging.0...@clerk/shared@0.0.18-staging.1) (2022-03-24) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.17-alpha.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.17-staging.0...@clerk/shared@0.0.17-alpha.0) (2022-03-23) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.16-alpha.5](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.16-alpha.4...@clerk/shared@0.0.16-alpha.5) (2022-03-23) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.16-alpha.4](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.16-alpha.3...@clerk/shared@0.0.16-alpha.4) (2022-03-23) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.16-alpha.3](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.16-alpha.2...@clerk/shared@0.0.16-alpha.3) (2022-03-22) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.16-alpha.2](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.16-staging.0...@clerk/shared@0.0.16-alpha.2) (2022-03-22) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.16-alpha.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.16-staging.0...@clerk/shared@0.0.16-alpha.1) (2022-03-20) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.16-alpha.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.16-staging.0...@clerk/shared@0.0.16-alpha.0) (2022-03-19) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.15](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.15-staging.1...@clerk/shared@0.0.15) (2022-03-17) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.15-staging.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.15-staging.0...@clerk/shared@0.0.15-staging.1) (2022-03-17) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.13](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.12...@clerk/shared@0.0.13) (2022-03-11) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.12](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.12-staging.0...@clerk/shared@0.0.12) (2022-03-09) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.10](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.9...@clerk/shared@0.0.10) (2022-03-04) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.9](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.8...@clerk/shared@0.0.9) (2022-03-04) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.8](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.7...@clerk/shared@0.0.8) (2022-03-03) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.7](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.6...@clerk/shared@0.0.7) (2022-03-02) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.6](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.5...@clerk/shared@0.0.6) (2022-03-01) - -### Bug Fixes - -- **shared:** Phone input should start blank ([43f0b06](https://github.com/clerkinc/clerk_docker/commit/43f0b0603608866f6b9e0a37a284c0ea72c0004b)) - -### [0.0.5](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.5-staging.0...@clerk/shared@0.0.5) (2022-02-24) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.5-staging.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.4-staging.0...@clerk/shared@0.0.5-staging.0) (2022-02-24) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.4-staging.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.3-staging.0...@clerk/shared@0.0.4-staging.0) (2022-02-17) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.3-staging.0](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.2...@clerk/shared@0.0.3-staging.0) (2022-02-15) - -**Note:** Version bump only for package @clerk/shared - -### [0.0.2](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.0.2-staging.0...@clerk/shared@0.0.2) (2022-02-14) - -**Note:** Version bump only for package @clerk/shared - -### 0.0.2-staging.0 (2022-02-11) - -**Note:** Version bump only for package @clerk/shared diff --git a/packages/shared/global.d.ts b/packages/shared/global.d.ts index 53d688f03fb..8c7a4b73b56 100644 --- a/packages/shared/global.d.ts +++ b/packages/shared/global.d.ts @@ -1,5 +1,6 @@ -declare namespace NodeJS { - interface Process { - browser: boolean; - } +export {}; + +declare global { + const PACKAGE_VERSION: string; + const __DEV__: boolean; } diff --git a/packages/shared/index.d.ts b/packages/shared/index.d.ts deleted file mode 100644 index 590a7f4c9d1..00000000000 --- a/packages/shared/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './components'; -export * from './utils'; diff --git a/packages/shared/index.js b/packages/shared/index.js deleted file mode 100644 index 04bca77e0de..00000000000 --- a/packages/shared/index.js +++ /dev/null @@ -1 +0,0 @@ -export * from './utils'; diff --git a/packages/shared/jest.config.js b/packages/shared/jest.config.js deleted file mode 100644 index 7c953a5f850..00000000000 --- a/packages/shared/jest.config.js +++ /dev/null @@ -1,49 +0,0 @@ -module.exports = { - // The root of your source code, typically /src - // `<rootDir>` is a token Jest substitutes - roots: ['<rootDir>'], - testEnvironment: 'jsdom', - - // Global settings - globals: { - 'ts-jest': { - tsconfig: 'tsconfig.test.json', - }, - }, - - // Coverage - collectCoverageFrom: [ - '**/*.{js,jsx,ts,tsx}', - '!**/*.d.ts', - '!**/index.ts', - '!**/*.config.{js,ts}', - '!**/coverage/**', - '!**/node_modules/**', - ], - - setupFilesAfterEnv: ['./../../setupJest.afterEnv.js'], - - // Jest transformations -- this adds support for TypeScript - // using ts-jest - transform: { - '^.+\\.tsx?$': 'ts-jest', - '\\.svg?$': '<rootDir>/utils/svgTransform.js', - }, - - // Test spec file resolution pattern - // Matches parent folder `__tests__` and filename - // should contain `test` or `spec`. - testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$', - - // Module file extensions for importings - transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$', '^.+\\.module\\.(css|sass|scss)$'], - - // Use an ES6 Proxy to mock CSS Modules and resource our testUtils - // https://jestjs.io/docs/en/webpack#mocking-css-modules - moduleNameMapper: { - testUtils: '<rootDir>/utils/testUtils', - '\\.(jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': - '<rootDir>/__mocks__/fileMock.js', - '\\.(css|less|scss|sass)$': 'identity-obj-proxy', - }, -}; diff --git a/packages/shared/package.json b/packages/shared/package.json index cfd07327910..1aacd2ecc98 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,60 +1,39 @@ { "name": "@clerk/shared", - "version": "0.3.27", - "private": true, - "main": "index.js", - "module": "index.js", - "typings": "index.d.ts", - "sideEffects": false, + "version": "0.0.1", + "description": "Internal package utils used by the Clerk SDKs", + "types": "./dist/types/index.d.ts", + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "files": [ + "dist", + "testUtils" + ], "scripts": { - "test": "jest", - "test:watch": "jest --watch", - "test:coverage": "jest --collectCoverage" - }, - "peerDependencies": { - "@popperjs/core": "^2.5.4", - "@svgr/webpack": "^6.2.1", - "core-js": "^3.18.3", - "react-color": "2.19.3", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-popper": "^2.2.4", - "regenerator-runtime": "^0.13.7" + "dev": "tsup --watch", + "build": "tsup --env.NODE_ENV production", + "clean": "rimraf ./dist", + "lint": "eslint .", + "test": "vitest run", + "test:watch": "vitest" }, "devDependencies": { - "@babel/core": "^7.13.14", - "@babel/preset-env": "^7.13.12", - "@babel/preset-react": "^7.13.13", + "js-cookie": "^3.0.1", "@clerk/types": "^3.10.1", - "@popperjs/core": "^2.5.4", - "@sentry/browser": "^6.3.0", - "@svgr/webpack": "^6.2.1", + "@types/js-cookie": "^3.0.2", + "tsup": "^6.2.3", + "typescript": "*", + "vitest": "^0.23.4" + }, + "peerDependencies": { "@testing-library/dom": "^7.28.1", "@testing-library/jest-dom": "^5.11.6", "@testing-library/react": "^11.2.1", "@testing-library/react-hooks": "^3.4.2", "@testing-library/user-event": "^12.2.2", - "@types/babel__core": "^7", - "@types/babel__preset-env": "^7", - "@types/classnames": "^2", - "@types/jest": "^27.4.0", - "@types/node": "^16.11.55", - "@types/react": "^17.0.39", - "@types/react-color": "^3.0.4", - "@types/react-dom": "^17.0.11", - "@types/react-test-renderer": "^17", - "@types/testing-library__jest-dom": "^5", - "@types/testing-library__react-hooks": "^3", - "classnames": "^2.3.1", - "clipboard-copy": "^4.0.1", - "core-js": "^3.18.3", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.7", "react": "17.0.2", - "react-color": "2.19.3", - "react-dom": "17.0.2", - "react-popper": "^2.2.4", - "react-test-renderer": "17.0.2", - "ts-jest": "^27.1.3" - } + "react-dom": "17.0.2" + }, + "author": "", + "license": "ISC" } diff --git a/packages/common/src/index.ts b/packages/shared/src/index.ts similarity index 100% rename from packages/common/src/index.ts rename to packages/shared/src/index.ts diff --git a/packages/common/src/testUtils/index.ts b/packages/shared/src/testUtils/index.ts similarity index 100% rename from packages/common/src/testUtils/index.ts rename to packages/shared/src/testUtils/index.ts diff --git a/packages/common/src/testUtils/testUtils.ts b/packages/shared/src/testUtils/testUtils.ts similarity index 100% rename from packages/common/src/testUtils/testUtils.ts rename to packages/shared/src/testUtils/testUtils.ts diff --git a/packages/common/src/utils/array.test.ts b/packages/shared/src/utils/array.test.ts similarity index 100% rename from packages/common/src/utils/array.test.ts rename to packages/shared/src/utils/array.test.ts diff --git a/packages/common/src/utils/array.ts b/packages/shared/src/utils/array.ts similarity index 100% rename from packages/common/src/utils/array.ts rename to packages/shared/src/utils/array.ts diff --git a/packages/common/src/utils/browser.test.ts b/packages/shared/src/utils/browser.test.ts similarity index 100% rename from packages/common/src/utils/browser.test.ts rename to packages/shared/src/utils/browser.test.ts diff --git a/packages/common/src/utils/browser.ts b/packages/shared/src/utils/browser.ts similarity index 100% rename from packages/common/src/utils/browser.ts rename to packages/shared/src/utils/browser.ts diff --git a/packages/common/src/utils/color/cssColorUtils.test.ts b/packages/shared/src/utils/color/cssColorUtils.test.ts similarity index 100% rename from packages/common/src/utils/color/cssColorUtils.test.ts rename to packages/shared/src/utils/color/cssColorUtils.test.ts diff --git a/packages/common/src/utils/color/cssColorUtils.ts b/packages/shared/src/utils/color/cssColorUtils.ts similarity index 100% rename from packages/common/src/utils/color/cssColorUtils.ts rename to packages/shared/src/utils/color/cssColorUtils.ts diff --git a/packages/common/src/utils/color/index.ts b/packages/shared/src/utils/color/index.ts similarity index 100% rename from packages/common/src/utils/color/index.ts rename to packages/shared/src/utils/color/index.ts diff --git a/packages/common/src/utils/color/predicates.ts b/packages/shared/src/utils/color/predicates.ts similarity index 100% rename from packages/common/src/utils/color/predicates.ts rename to packages/shared/src/utils/color/predicates.ts diff --git a/packages/common/src/utils/cookies.ts b/packages/shared/src/utils/cookies.ts similarity index 100% rename from packages/common/src/utils/cookies.ts rename to packages/shared/src/utils/cookies.ts diff --git a/packages/common/src/utils/date.test.ts b/packages/shared/src/utils/date.test.ts similarity index 100% rename from packages/common/src/utils/date.test.ts rename to packages/shared/src/utils/date.test.ts diff --git a/packages/common/src/utils/date.ts b/packages/shared/src/utils/date.ts similarity index 100% rename from packages/common/src/utils/date.ts rename to packages/shared/src/utils/date.ts diff --git a/packages/common/src/utils/file.ts b/packages/shared/src/utils/file.ts similarity index 100% rename from packages/common/src/utils/file.ts rename to packages/shared/src/utils/file.ts diff --git a/packages/common/src/utils/index.ts b/packages/shared/src/utils/index.ts similarity index 100% rename from packages/common/src/utils/index.ts rename to packages/shared/src/utils/index.ts diff --git a/packages/common/src/utils/isRetinaDisplay.ts b/packages/shared/src/utils/isRetinaDisplay.ts similarity index 100% rename from packages/common/src/utils/isRetinaDisplay.ts rename to packages/shared/src/utils/isRetinaDisplay.ts diff --git a/packages/common/src/utils/localStorageBroadcastChannel.test.ts b/packages/shared/src/utils/localStorageBroadcastChannel.test.ts similarity index 100% rename from packages/common/src/utils/localStorageBroadcastChannel.test.ts rename to packages/shared/src/utils/localStorageBroadcastChannel.test.ts diff --git a/packages/common/src/utils/localStorageBroadcastChannel.ts b/packages/shared/src/utils/localStorageBroadcastChannel.ts similarity index 100% rename from packages/common/src/utils/localStorageBroadcastChannel.ts rename to packages/shared/src/utils/localStorageBroadcastChannel.ts diff --git a/packages/common/src/utils/mimeTypeExtensions.ts b/packages/shared/src/utils/mimeTypeExtensions.ts similarity index 100% rename from packages/common/src/utils/mimeTypeExtensions.ts rename to packages/shared/src/utils/mimeTypeExtensions.ts diff --git a/packages/common/src/utils/noop.ts b/packages/shared/src/utils/noop.ts similarity index 100% rename from packages/common/src/utils/noop.ts rename to packages/shared/src/utils/noop.ts diff --git a/packages/common/src/utils/object.test.ts b/packages/shared/src/utils/object.test.ts similarity index 100% rename from packages/common/src/utils/object.test.ts rename to packages/shared/src/utils/object.test.ts diff --git a/packages/common/src/utils/object.ts b/packages/shared/src/utils/object.ts similarity index 100% rename from packages/common/src/utils/object.ts rename to packages/shared/src/utils/object.ts diff --git a/packages/common/src/utils/poller.ts b/packages/shared/src/utils/poller.ts similarity index 100% rename from packages/common/src/utils/poller.ts rename to packages/shared/src/utils/poller.ts diff --git a/packages/common/src/utils/ssr.ts b/packages/shared/src/utils/ssr.ts similarity index 100% rename from packages/common/src/utils/ssr.ts rename to packages/shared/src/utils/ssr.ts diff --git a/packages/common/src/utils/string.test.ts b/packages/shared/src/utils/string.test.ts similarity index 100% rename from packages/common/src/utils/string.test.ts rename to packages/shared/src/utils/string.test.ts diff --git a/packages/common/src/utils/string.ts b/packages/shared/src/utils/string.ts similarity index 100% rename from packages/common/src/utils/string.ts rename to packages/shared/src/utils/string.ts diff --git a/packages/common/src/utils/url.test.ts b/packages/shared/src/utils/url.test.ts similarity index 100% rename from packages/common/src/utils/url.test.ts rename to packages/shared/src/utils/url.test.ts diff --git a/packages/common/src/utils/url.ts b/packages/shared/src/utils/url.ts similarity index 100% rename from packages/common/src/utils/url.ts rename to packages/shared/src/utils/url.ts diff --git a/packages/shared/testUtils.d.ts b/packages/shared/testUtils.d.ts deleted file mode 100644 index 73050a43b22..00000000000 --- a/packages/shared/testUtils.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './utils/testUtils'; diff --git a/packages/shared/testUtils.js b/packages/shared/testUtils.js deleted file mode 100644 index 7d062decd48..00000000000 --- a/packages/shared/testUtils.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./utils/testUtils'); diff --git a/packages/common/testUtils/package.json b/packages/shared/testUtils/package.json similarity index 100% rename from packages/common/testUtils/package.json rename to packages/shared/testUtils/package.json diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index f862ea732df..de640a6217a 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -1,14 +1,19 @@ { "compilerOptions": { - "baseUrl": "./", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "importHelpers": true, - "jsx": "react", - "lib": ["dom", "dom.iterable", "esnext"], - "module": "es2020", + "isolatedModules": true, "moduleResolution": "node", + "preserveWatchOutput": true, + "skipLibCheck": true, "strict": true, - "target": "ES2017" - } + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "resolveJsonModule": true, + "declarationDir": "dist/types" + }, + "exclude": ["node_modules"], + "include": ["src/index.ts", "src/testUtils/index.ts", "global.d.ts"] } diff --git a/packages/shared/tsconfig.test.json b/packages/shared/tsconfig.test.json deleted file mode 100644 index 2a4a5aeb50f..00000000000 --- a/packages/shared/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "jsx": "react", - "strict": false - } -} diff --git a/packages/common/tsup.config.ts b/packages/shared/tsup.config.ts similarity index 100% rename from packages/common/tsup.config.ts rename to packages/shared/tsup.config.ts diff --git a/packages/shared/utils/array.test.ts b/packages/shared/utils/array.test.ts deleted file mode 100644 index 98d65d671ed..00000000000 --- a/packages/shared/utils/array.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { toSentence } from './array'; - -describe('toSentence', () => { - it('returns a single item as-is', () => { - expect(toSentence(['xyz'])).toBe('xyz'); - expect(toSentence(['abc'])).toBe('abc'); - }); - - it('joins multiple items but the last with a comma and the last with ", or"', () => { - expect(toSentence(['abc', 'def'])).toBe('abc, or def'); - expect(toSentence(['qwe', 'zxc', 'asd'])).toBe('qwe, zxc, or asd'); - }); - - it('returns empty string if passed an empty array', () => { - expect(toSentence([])).toBe(''); - }); -}); diff --git a/packages/shared/utils/array.ts b/packages/shared/utils/array.ts deleted file mode 100644 index 6e72606e37e..00000000000 --- a/packages/shared/utils/array.ts +++ /dev/null @@ -1,12 +0,0 @@ -export const toSentence = (items: string[]): string => { - // TODO: Once Safari supports it, use Intl.ListFormat - if (items.length == 0) { - return ''; - } - if (items.length == 1) { - return items[0]; - } - let sentence = items.slice(0, -1).join(', '); - sentence += `, or ${items.slice(-1)}`; - return sentence; -}; diff --git a/packages/shared/utils/browser.test.ts b/packages/shared/utils/browser.test.ts deleted file mode 100644 index 8b2404bbbfc..00000000000 --- a/packages/shared/utils/browser.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { inBrowser } from './browser'; - -describe('inBrowser()', () => { - it('returns true if window is defined', () => { - expect(inBrowser()).toBe(true); - }); -}); diff --git a/packages/shared/utils/browser.ts b/packages/shared/utils/browser.ts deleted file mode 100644 index 442f85e93e4..00000000000 --- a/packages/shared/utils/browser.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function inBrowser(): boolean { - return typeof window !== 'undefined'; -} diff --git a/packages/shared/utils/color/cssColorUtils.test.ts b/packages/shared/utils/color/cssColorUtils.test.ts deleted file mode 100644 index 41143d78498..00000000000 --- a/packages/shared/utils/color/cssColorUtils.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Color } from 'react-color'; - -import { colorToSameTypeString, hexStringToRgbaColor, stringToHslaColor, stringToSameTypeColor } from './cssColorUtils'; - -describe('stringToHslaColor(color)', function () { - const hsla = { h: 195, s: 1, l: 0.5 }; - const cases: Array<[string, Color | null]> = [ - ['', null], - ['transparent', { h: 0, s: 0, l: 0, a: 0 }], - ['#00bfff', hsla], - ['00bfff', hsla], - ['rgb(0, 191, 255)', hsla], - ['rgba(0, 191, 255, 0.3)', { ...hsla, a: 0.3 }], - ]; - - it.each(cases)('.stringToHslaColor(%s) => %s', (a, expected) => { - expect(stringToHslaColor(a)).toEqual(expected); - }); -}); - -describe('hexStringToRgbaColor(color)', function () { - const cases: Array<[string, Color | null]> = [ - ['#00bfff', { r: 0, g: 191, b: 255 }], - ['00bfff', { r: 0, g: 191, b: 255 }], - ]; - - it.each(cases)('.hexStringToRgbaColor(%s) => %s', (a, expected) => { - expect(hexStringToRgbaColor(a)).toEqual(expected); - }); -}); - -describe('stringToSameTypeColor(color)', function () { - const cases: Array<[string, Color | null]> = [ - ['', ''], - ['invalid', ''], - ['12ff12', '#12ff12'], - ['#12ff12', '#12ff12'], - ['1ff', '#1ff'], - ['transparent', 'transparent'], - ['rgb(100,100,100)', { r: 100, g: 100, b: 100, a: undefined }], - ['rgba(100,100,100,0.5)', { r: 100, g: 100, b: 100, a: 0.5 }], - ['rgb(100,100,100)', { r: 100, g: 100, b: 100, a: undefined }], - ['rgba(100,100,100,0.5)', { r: 100, g: 100, b: 100, a: 0.5 }], - ['hsl(244,66%,33%)', { h: 244, s: 0.66, l: 0.33, a: undefined }], - ['hsla(244,66%,33%,0.5)', { h: 244, s: 0.66, l: 0.33, a: 0.5 }], - ['hsl(244,66%,33)', ''], - ['hsla(244,66%,33,0.5)', ''], - ]; - - it.each(cases)('.stringToSameTypeColor(%s) => %s', (a, expected) => { - expect(stringToSameTypeColor(a)).toEqual(expected); - }); -}); - -describe('colorToSameTypeString(color)', function () { - const cases: Array<[Color, string]> = [ - ['', ''], - ['invalid', ''], - ['#12ff12', '#12ff12'], - ['#12ff12', '#12ff12'], - ['#1ff', '#1ff'], - [{ r: 100, g: 100, b: 100, a: undefined }, 'rgb(100,100,100)'], - [{ r: 100, g: 100, b: 100, a: 0.5 }, 'rgba(100,100,100,0.5)'], - [{ h: 100, s: 0.55, l: 0.33, a: undefined }, 'hsl(100,55%,33%)'], - [{ h: 100, s: 1, l: 1, a: 0.5 }, 'hsla(100,100%,100%,0.5)'], - ]; - - it.each(cases)('.colorToSameTypeString(%s) => %s', (a, expected) => { - expect(colorToSameTypeString(a)).toEqual(expected); - }); -}); diff --git a/packages/shared/utils/color/cssColorUtils.ts b/packages/shared/utils/color/cssColorUtils.ts deleted file mode 100644 index 51b8b59c7c6..00000000000 --- a/packages/shared/utils/color/cssColorUtils.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { Color, HslaColor, RgbaColor, TransparentColor } from '@clerk/types'; - -import { - isHSLColor, - isRGBColor, - isTransparent, - isValidHexString, - isValidHslaString, - isValidRgbaString, -} from './predicates'; - -const CLEAN_HSLA_REGEX = /[hsla()]/g; -const CLEAN_RGBA_REGEX = /[rgba()]/g; - -export const stringToHslaColor = (value: string): HslaColor | null => { - if (value === 'transparent') { - return { h: 0, s: 0, l: 0, a: 0 }; - } - - if (isValidHexString(value)) { - return hexStringToHslaColor(value); - } - - if (isValidHslaString(value)) { - return parseHslaString(value); - } - - if (isValidRgbaString(value)) { - return rgbaStringToHslaColor(value); - } - - return null; -}; - -export const stringToSameTypeColor = (value: string): Color => { - value = value.trim(); - if (isValidHexString(value)) { - return value.startsWith('#') ? value : `#${value}`; - } - - if (isValidRgbaString(value)) { - return parseRgbaString(value); - } - - if (isValidHslaString(value)) { - return parseHslaString(value); - } - - if (isTransparent(value)) { - return value; - } - return ''; -}; - -export const colorToSameTypeString = (color: Color): string | TransparentColor => { - if (typeof color === 'string' && (isValidHexString(color) || isTransparent(color))) { - return color; - } - - if (isRGBColor(color)) { - return rgbaColorToRgbaString(color); - } - - if (isHSLColor(color)) { - return hslaColorToHslaString(color); - } - - return ''; -}; - -export const hexStringToRgbaColor = (hex: string): RgbaColor => { - hex = hex.replace('#', ''); - const r = parseInt(hex.substring(0, 2), 16); - const g = parseInt(hex.substring(2, 4), 16); - const b = parseInt(hex.substring(4, 6), 16); - return { r, g, b }; -}; - -const rgbaColorToRgbaString = (color: RgbaColor): string => { - const { a, b, g, r } = color; - return color.a === 0 ? 'transparent' : color.a != undefined ? `rgba(${r},${g},${b},${a})` : `rgb(${r},${g},${b})`; -}; - -const hslaColorToHslaString = (color: HslaColor): string => { - const { h, s, l, a } = color; - const sPerc = Math.round(s * 100); - const lPerc = Math.round(l * 100); - return color.a === 0 - ? 'transparent' - : color.a != undefined - ? `hsla(${h},${sPerc}%,${lPerc}%,${a})` - : `hsl(${h},${sPerc}%,${lPerc}%)`; -}; - -const hexStringToHslaColor = (hex: string): HslaColor => { - const rgbaString = colorToSameTypeString(hexStringToRgbaColor(hex)); - return rgbaStringToHslaColor(rgbaString); -}; - -const rgbaStringToHslaColor = (rgba: string): HslaColor => { - const rgbaColor = parseRgbaString(rgba); - const r = rgbaColor.r / 255; - const g = rgbaColor.g / 255; - const b = rgbaColor.b / 255; - - const max = Math.max(r, g, b), - min = Math.min(r, g, b); - let h, s; - const l = (max + min) / 2; - - if (max == min) { - h = s = 0; - } else { - const d = max - min; - s = l >= 0.5 ? d / (2 - (max + min)) : d / (max + min); - switch (max) { - case r: - h = ((g - b) / d) * 60; - break; - case g: - h = ((b - r) / d + 2) * 60; - break; - default: - h = ((r - g) / d + 4) * 60; - break; - } - } - - const res: HslaColor = { h: Math.round(h), s, l }; - const a = rgbaColor.a; - if (a != undefined) { - res.a = a; - } - return res; -}; - -const parseRgbaString = (str: string): RgbaColor => { - const [r, g, b, a] = str - .replace(CLEAN_RGBA_REGEX, '') - .split(',') - .map(c => Number.parseFloat(c)); - return { r, g, b, a }; -}; - -const parseHslaString = (str: string): HslaColor => { - const [h, s, l, a] = str - .replace(CLEAN_HSLA_REGEX, '') - .split(',') - .map(c => Number.parseFloat(c)); - return { h, s: s / 100, l: l / 100, a }; -}; diff --git a/packages/shared/utils/color/index.ts b/packages/shared/utils/color/index.ts deleted file mode 100644 index 738532889d3..00000000000 --- a/packages/shared/utils/color/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './cssColorUtils'; -export * from './predicates'; diff --git a/packages/shared/utils/color/predicates.ts b/packages/shared/utils/color/predicates.ts deleted file mode 100644 index c17424f1710..00000000000 --- a/packages/shared/utils/color/predicates.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Color, HslaColor, RgbaColor, TransparentColor } from '@clerk/types'; - -const IS_HEX_COLOR_REGEX = /^#?([A-F0-9]{6}|[A-F0-9]{3})$/i; - -const IS_RGB_COLOR_REGEX = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/i; -const IS_RGBA_COLOR_REGEX = /^rgba\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+(\.\d+)?)\)$/i; - -const IS_HSL_COLOR_REGEX = /^hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)$/i; -const IS_HSLA_COLOR_REGEX = /^hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%(,\s*\d+(\.\d+)?)*\)$/i; - -export const isValidHexString = (s: string) => { - return !!s.match(IS_HEX_COLOR_REGEX); -}; - -export const isValidRgbaString = (s: string) => { - return !!(s.match(IS_RGB_COLOR_REGEX) || s.match(IS_RGBA_COLOR_REGEX)); -}; - -export const isValidHslaString = (s: string) => { - return !!s.match(IS_HSL_COLOR_REGEX) || !!s.match(IS_HSLA_COLOR_REGEX); -}; - -export const isRGBColor = (c: Color): c is RgbaColor => { - return typeof c !== 'string' && 'r' in c; -}; - -export const isHSLColor = (c: Color): c is HslaColor => { - return typeof c !== 'string' && 'h' in c; -}; - -export const isTransparent = (c: Color): c is TransparentColor => { - return c === 'transparent'; -}; - -export const hasAlpha = (color: Color): boolean => { - return typeof color !== 'string' && color.a != undefined && color.a < 1; -}; diff --git a/packages/shared/utils/cookies.ts b/packages/shared/utils/cookies.ts deleted file mode 100644 index b701c1da92a..00000000000 --- a/packages/shared/utils/cookies.ts +++ /dev/null @@ -1,27 +0,0 @@ -import Cookies, { CookieAttributes } from 'js-cookie'; - -type LocationAttributes = { - path?: string; - domain?: string; -}; - -export function createCookieHandler(cookieName: string) { - return { - get() { - return Cookies.get(cookieName); - }, - /** - * Setting a cookie will use some defaults such as path being set to "/". - */ - set(newValue: string, options: CookieAttributes = {}) { - return Cookies.set(cookieName, newValue, options); - }, - /** - * On removing a cookie, you have to pass the exact same path/domain attributes used to set it initially - * @see https://github.com/js-cookie/js-cookie#basic-usage - */ - remove(locationAttributes?: LocationAttributes) { - Cookies.remove(cookieName, locationAttributes); - }, - }; -} diff --git a/packages/shared/utils/date.test.ts b/packages/shared/utils/date.test.ts deleted file mode 100644 index ce9e23bf464..00000000000 --- a/packages/shared/utils/date.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { addYears, dateTo12HourTime, differenceInCalendarDays, formatRelative } from './date'; - -describe('date utils', () => { - describe('dateTo12HourTime(date)', () => { - const cases: Array<[Date | undefined, string]> = [ - [undefined, ''], - [new Date('1/1/2020 23:15'), '11:15 PM'], - [new Date('1/1/2020 11:15'), '11:15 AM'], - [new Date('1/1/2020 01:59'), '01:59 AM'], - [new Date('1/1/2020 13:59'), '01:59 PM'], - [new Date('1/1/2020 00:59'), '12:59 AM'], - ]; - - it.each(cases)('.dateTo12HourTime(%s) => %s', (a, expected) => { - expect(dateTo12HourTime(a as any)).toBe(expected); - }); - }); - - describe('differenceInCalendarDays(date1, date2)', () => { - const cases: Array<[Date | undefined, Date, { absolute: boolean }, number]> = [ - [undefined, new Date(), { absolute: true }, 0], - [new Date('1/1/2020'), new Date('1/2/2020'), { absolute: true }, 1], - [new Date('1/1/2020'), new Date('1/3/2020'), { absolute: true }, 2], - [new Date('1/30/2020'), new Date('1/31/2020'), { absolute: true }, 1], - [new Date('1/30/2020'), new Date('2/1/2020'), { absolute: true }, 2], - [new Date('1/1/2020'), new Date('2/1/2020'), { absolute: true }, 31], - [new Date('1/1/2020'), new Date('1/2/2020'), { absolute: false }, 1], - [new Date('1/1/2020'), new Date('1/5/2020'), { absolute: false }, 4], - [new Date('1/5/2020'), new Date('1/1/2020'), { absolute: true }, 4], - [new Date('1/5/2020'), new Date('1/1/2020'), { absolute: false }, -4], - ]; - - it.each(cases)('.differenceInCalendarDays(%s,%s) => %s', (a, b, c, expected) => { - expect(differenceInCalendarDays(a as Date, b, c)).toBe(expected); - }); - }); - - describe('formatRelative(date)', () => { - const cases: Array<[Date | undefined, Date | undefined, string]> = [ - [undefined, undefined, ''], - [new Date('1/1/2020 23:15'), new Date('1/1/2020'), 'today at 11:15 PM'], - [new Date('1/5/2020 23:15'), new Date('1/6/2020'), 'yesterday at 11:15 PM'], - [new Date('1/3/2020 23:15'), new Date('1/6/2020'), 'last Friday at 11:15 PM'], - [new Date('1/7/2020 23:15'), new Date('1/6/2020'), 'tomorrow at 11:15 PM'], - [new Date('1/10/2020 23:15'), new Date('1/6/2020'), 'Friday at 11:15 PM'], - [new Date('12/10/2020 23:15'), new Date('1/6/2020'), '12/10/2020'], - [new Date('12/10/2020 23:15'), new Date('1/6/2021'), '12/10/2020'], - ]; - - it.each(cases)('.formatRelative(%s, %s) => %s', (a, b, expected) => { - expect(formatRelative(a as Date, b as Date)).toBe(expected); - }); - }); - - describe('addYears(date, number)', () => { - const cases: Array<[Date, number, Date]> = [ - [new Date('1/1/2020 23:15'), 1, new Date('1/1/2021 23:15')], - [new Date('1/1/2019 23:15'), 1, new Date('1/1/2020 23:15')], - [new Date('1/1/2021 23:15'), 100, new Date('1/1/2121 23:15')], - [new Date('1/1/2021 23:15'), 0, new Date('1/1/2021 23:15')], - ]; - - it.each(cases)('.addYears(%s, %s) => %s', (a, b, expected) => { - expect(addYears(a, b)).toStrictEqual(expected); - }); - }); -}); diff --git a/packages/shared/utils/date.ts b/packages/shared/utils/date.ts deleted file mode 100644 index 31402e411e8..00000000000 --- a/packages/shared/utils/date.ts +++ /dev/null @@ -1,81 +0,0 @@ -const MILLISECONDS_IN_DAY = 86400000; -const DAYS_EN = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - -export function dateTo12HourTime(date: Date): string { - if (!date) { - return ''; - } - return date.toLocaleString('en-US', { - hour: '2-digit', - minute: 'numeric', - hour12: true, - }); -} - -export function differenceInCalendarDays(a: Date, b: Date, { absolute = true } = {}): number { - if (!a || !b) { - return 0; - } - const utcA = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); - const utcB = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); - const diff = Math.floor((utcB - utcA) / MILLISECONDS_IN_DAY); - return absolute ? Math.abs(diff) : diff; -} - -function normalizeDate(d: Date | string | number): Date { - try { - return new Date(d || new Date()); - } catch (e) { - return new Date(); - } -} - -/* - * Follows date-fns format, see here: - * https://date-fns.org/v2.21.1/docs/formatRelative - * TODO: support localisation - * | Distance to the base date | Result | - * |---------------------------|---------------------------| - * | Previous 6 days | last Sunday at 04:30 AM | - * | Last day | yesterday at 04:30 AM | - * | Same day | today at 04:30 AM | - * | Next day | tomorrow at 04:30 AM | - * | Next 6 days | Sunday at 04:30 AM | - * | Other | 12/31/2017 | - */ -export function formatRelative(date: Date, relativeTo: Date): string { - if (!date || !relativeTo) { - return ''; - } - const a = normalizeDate(date); - const b = normalizeDate(relativeTo); - const differenceInDays = differenceInCalendarDays(b, a, { absolute: false }); - const time12Hour = dateTo12HourTime(a); - const dayName = DAYS_EN[a.getDay()]; - - if (differenceInDays < -6) { - return a.toLocaleDateString(); - } - if (differenceInDays < -1) { - return `last ${dayName} at ${time12Hour}`; - } - if (differenceInDays === -1) { - return `yesterday at ${time12Hour}`; - } - if (differenceInDays === 0) { - return `today at ${time12Hour}`; - } - if (differenceInDays === 1) { - return `tomorrow at ${time12Hour}`; - } - if (differenceInDays < 7) { - return `${dayName} at ${time12Hour}`; - } - return a.toLocaleDateString(); -} - -export function addYears(initialDate: Date | number | string, yearsToAdd: number): Date { - const date = normalizeDate(initialDate); - date.setFullYear(date.getFullYear() + yearsToAdd); - return date; -} diff --git a/packages/shared/utils/file.ts b/packages/shared/utils/file.ts deleted file mode 100644 index 82dc23a7132..00000000000 --- a/packages/shared/utils/file.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Read an expected JSON type File. - * - * Probably paired with: - * <input type='file' accept='application/JSON' ... /> - */ -export function readJSONFile(file: File): Promise<unknown> { - return new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.addEventListener('load', function () { - const result = JSON.parse(reader.result as string); - resolve(result); - }); - - reader.addEventListener('error', reject); - reader.readAsText(file); - }); -} diff --git a/packages/shared/utils/index.ts b/packages/shared/utils/index.ts deleted file mode 100644 index f06f27b309d..00000000000 --- a/packages/shared/utils/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export * from './browser'; -export * from './cookies'; -export * from './file'; -export * from './noop'; -export * from './object'; -export * from './string'; -export * from './url'; -export * from './ssr'; diff --git a/packages/shared/utils/isRetinaDisplay.ts b/packages/shared/utils/isRetinaDisplay.ts deleted file mode 100644 index 3e35b03f1ae..00000000000 --- a/packages/shared/utils/isRetinaDisplay.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function isRetinaDisplay(): boolean { - if (!window.matchMedia) { - return false; - } - const mq = window.matchMedia( - 'only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)', - ); - return (mq && mq.matches) || window.devicePixelRatio > 1; -} diff --git a/packages/shared/utils/localStorageBroadcastChannel.test.ts b/packages/shared/utils/localStorageBroadcastChannel.test.ts deleted file mode 100644 index 5f060b3f0be..00000000000 --- a/packages/shared/utils/localStorageBroadcastChannel.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { LocalStorageBroadcastChannel } from './localStorageBroadcastChannel'; - -const bcName = 'clerk'; -describe('LocalStorageBroadcastChannel', () => { - let localStorageMock; - beforeEach(() => { - localStorageMock = (() => { - const store: Record<string, any> = {}; - return { - setItem: jest.fn((key, value) => { - store[key] = value; - window.dispatchEvent(new StorageEvent('storage', { key, newValue: value })); - }), - removeItem: jest.fn(key => { - store[key] = undefined; - window.dispatchEvent(new Event('storage')); - }), - }; - })(); - Object.defineProperty(window, 'localStorage', { value: localStorageMock }); - }); - - it('notifies other LocalStorageBroadcastChannel with same name', () => { - const tab1ClerkBCListener = jest.fn(); - const tab1DifferentBCListener = jest.fn(); - const tab2ClerkBCListener = jest.fn(); - - const tab1ClerkBC = new LocalStorageBroadcastChannel(bcName); - const tab1DifferentBC = new LocalStorageBroadcastChannel('somethingElse'); - const tab2ClerkBC = new LocalStorageBroadcastChannel(bcName); - - tab1ClerkBC.addEventListener('message', tab1ClerkBCListener); - tab1DifferentBC.addEventListener('message', tab1DifferentBCListener); - tab2ClerkBC.addEventListener('message', tab2ClerkBCListener); - - const message = 'a message from tab1'; - tab1ClerkBC.postMessage(message); - expect(tab1DifferentBCListener).not.toHaveBeenCalled(); - expect(tab2ClerkBCListener).toHaveBeenCalled(); - }); -}); diff --git a/packages/shared/utils/localStorageBroadcastChannel.ts b/packages/shared/utils/localStorageBroadcastChannel.ts deleted file mode 100644 index 3c88c272417..00000000000 --- a/packages/shared/utils/localStorageBroadcastChannel.ts +++ /dev/null @@ -1,52 +0,0 @@ -type Listener<T> = (e: MessageEvent<T>) => void; - -const KEY_PREFIX = '__lsbc__'; - -export class LocalStorageBroadcastChannel<E> { - private readonly eventTarget = window; - private readonly channelKey: string; - - constructor(name: string) { - this.channelKey = KEY_PREFIX + name; - this.setupLocalStorageListener(); - } - - public postMessage = (data: E): void => { - try { - localStorage.setItem(this.channelKey, JSON.stringify(data)); - localStorage.removeItem(this.channelKey); - } catch (e) { - // - } - }; - - public addEventListener = (eventName: 'message', listener: Listener<E>): void => { - this.eventTarget.addEventListener(this.prefixEventName(eventName), e => { - listener(e as MessageEvent); - }); - }; - - private setupLocalStorageListener = () => { - const notifyListeners = (e: StorageEvent) => { - if (e.key !== this.channelKey || !e.newValue) { - return; - } - - try { - const data = JSON.parse(e.newValue || ''); - const event = new MessageEvent(this.prefixEventName('message'), { - data, - }); - this.eventTarget.dispatchEvent(event); - } catch (e) { - // - } - }; - - window.addEventListener('storage', notifyListeners); - }; - - private prefixEventName(eventName: string): string { - return this.channelKey + eventName; - } -} diff --git a/packages/shared/utils/mimeTypeExtensions.ts b/packages/shared/utils/mimeTypeExtensions.ts deleted file mode 100644 index 3d206056ad6..00000000000 --- a/packages/shared/utils/mimeTypeExtensions.ts +++ /dev/null @@ -1,14 +0,0 @@ -const MimeTypeToExtensionMap = Object.freeze({ - 'image/png': 'png', - 'image/jpeg': 'jpg', - 'image/gif': 'gif', - 'image/webp': 'webp', - 'image/x-icon': 'ico', - 'image/vnd.microsoft.icon': 'ico', -} as const); - -export type SupportedMimeType = keyof typeof MimeTypeToExtensionMap; - -export const extension = (mimeType: SupportedMimeType): string => { - return MimeTypeToExtensionMap[mimeType]; -}; diff --git a/packages/shared/utils/noop.ts b/packages/shared/utils/noop.ts deleted file mode 100644 index e65a0290b94..00000000000 --- a/packages/shared/utils/noop.ts +++ /dev/null @@ -1,3 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -/* eslint-disable @typescript-eslint/no-empty-function */ -export const noop = (..._args: any[]): void => {}; diff --git a/packages/shared/utils/object.test.ts b/packages/shared/utils/object.test.ts deleted file mode 100644 index 01b42cd4569..00000000000 --- a/packages/shared/utils/object.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { deepCamelToSnake, deepSnakeToCamel } from './object'; - -describe('camelToSnakeKeys', () => { - it('creates a copy and does not modify the original', () => { - const original = { - an_arr: [{ hello_there: 'hey' }], - a_nested_object: { a_message: 'hey' }, - }; - const originalCopy = { ...original }; - const res = deepSnakeToCamel(original); - expect(res).toStrictEqual({ - anArr: [{ helloThere: 'hey' }], - aNestedObject: { aMessage: 'hey' }, - }); - expect(original).toStrictEqual(originalCopy); - expect(original === res).toBeFalsy(); - }); - - it('transforms camelCased keys to snake_cased', () => { - expect(deepCamelToSnake({ key: 1, anotherKey: 2 })).toStrictEqual({ - key: 1, - another_key: 2, - }); - - expect( - deepCamelToSnake({ - key: 1, - anotherKey: 2, - nestAttribute: { nestedKey: 3 }, - }), - ).toStrictEqual({ - key: 1, - another_key: 2, - nest_attribute: { - nested_key: 3, - }, - }); - }); - - it('handles null and undefined values', () => { - expect(deepCamelToSnake({ key: 1, anotherKey: null })).toStrictEqual({ - key: 1, - another_key: null, - }); - - expect( - deepCamelToSnake({ - key: 1, - anotherKey: 2, - nestAttribute: { nestedKey: null }, - }), - ).toStrictEqual({ - key: 1, - another_key: 2, - nest_attribute: { - nested_key: null, - }, - }); - }); - - it('transforms and removes camelCased keys', () => { - const sampleObject = deepCamelToSnake({ key: 1, anotherKey: 2 }); - expect(sampleObject).not.toHaveProperty('anotherKey'); - expect(sampleObject).toHaveProperty('another_key'); - }); - - it('deeply transforms objects and arrays to camelCase', () => { - const sample = { - sessions: [ - { - last_active_at: 1647133602586, - user: { - primary_web3_wallet_id: null, - email_addresses: [ - { - email_address: 'n@ck.dev', - verification: { - status: 'verified', - strategy: 'email_link', - expire_at: 1645216476574, - }, - linked_to: [{ type: 'oauth_google', id: 'idn_25QqWb' }], - }, - ], - web3_wallets: [], - external_accounts: [ - { - identification_id: 'idn_25QqWbzargsao', - provider_user_id: '106087', - }, - ], - }, - }, - ], - sign_in_attempt: null, - }; - - const expected = { - sessions: [ - { - user: { - primaryWeb3WalletId: null, - emailAddresses: [ - { - verification: { - status: 'verified', - strategy: 'email_link', - expireAt: 1645216476574, - }, - emailAddress: 'n@ck.dev', - linkedTo: [ - { - type: 'oauth_google', - id: 'idn_25QqWb', - }, - ], - }, - ], - web3Wallets: [], - externalAccounts: [ - { - identificationId: 'idn_25QqWbzargsao', - providerUserId: '106087', - }, - ], - }, - lastActiveAt: 1647133602586, - }, - ], - signInAttempt: null, - }; - const res = deepSnakeToCamel(sample); - expect(res).toStrictEqual(expected); - }); - - it('prioritizes the camelCased property', () => { - const sampleObject = deepCamelToSnake({ oneKey: 1, one_key: 2 }); - const anotherSampleObject = deepCamelToSnake({ one_key: 2, oneKey: 1 }); - - expect(sampleObject.one_key).toEqual(1); - expect(sampleObject).not.toHaveProperty('oneKey'); - expect(anotherSampleObject.one_key).toEqual(1); - expect(anotherSampleObject).not.toHaveProperty('oneKey'); - }); -}); diff --git a/packages/shared/utils/object.ts b/packages/shared/utils/object.ts deleted file mode 100644 index d59b9b0c279..00000000000 --- a/packages/shared/utils/object.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { camelToSnake, snakeToCamel } from './string'; - -const createDeepObjectTransformer = (transform: any) => { - const deepTransform = (obj: any): any => { - if (!obj) { - return obj; - } - - if (Array.isArray(obj)) { - return obj.map(el => { - if (typeof el === 'object' || Array.isArray(el)) { - return deepTransform(el); - } - return el; - }); - } - - const copy = { ...obj }; - const keys = Object.keys(copy) as string[]; - for (const oldName of keys) { - const newName = transform(oldName.toString()); - if (newName !== oldName) { - copy[newName] = copy[oldName]; - delete copy[oldName]; - } - if (typeof copy[newName] === 'object') { - copy[newName] = deepTransform(copy[newName]); - } - } - return copy; - }; - - return deepTransform; -}; - -/** - * Transforms camelCased objects/ arrays to snake_cased. - * This function recursively traverses all objects and arrays of the passed value - * camelCased keys are removed. - */ -export const deepCamelToSnake = createDeepObjectTransformer(camelToSnake); - -/** - * Transforms snake_cased objects/ arrays to camelCased. - * This function recursively traverses all objects and arrays of the passed value - * camelCased keys are removed. - */ -export const deepSnakeToCamel = createDeepObjectTransformer(snakeToCamel); diff --git a/packages/shared/utils/poller.ts b/packages/shared/utils/poller.ts deleted file mode 100644 index 8b24dcf1733..00000000000 --- a/packages/shared/utils/poller.ts +++ /dev/null @@ -1,33 +0,0 @@ -export type PollerStop = () => void; -export type PollerCallback = (stop: PollerStop) => Promise<unknown>; -export type PollerRun = (cb: PollerCallback) => Promise<void>; - -type PollerOptions = { - delayInMs: number; -}; - -export type Poller = { - run: PollerRun; - stop: PollerStop; -}; - -export function Poller({ delayInMs }: PollerOptions = { delayInMs: 1000 }): Poller { - let timerId: number | undefined; - let stopped = false; - - const stop: PollerStop = () => { - clearTimeout(timerId); - stopped = true; - }; - - const run: PollerRun = async cb => { - stopped = false; - await cb(stop); - if (stopped) { - return; - } - timerId = setTimeout(() => run(cb), delayInMs) as any as number; - }; - - return { run, stop }; -} diff --git a/packages/shared/utils/ssr.ts b/packages/shared/utils/ssr.ts deleted file mode 100644 index e0ede1979d2..00000000000 --- a/packages/shared/utils/ssr.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const inClientSide = (): boolean => { - return typeof window !== 'undefined'; -}; diff --git a/packages/shared/utils/string.test.ts b/packages/shared/utils/string.test.ts deleted file mode 100644 index db64e565c10..00000000000 --- a/packages/shared/utils/string.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { isIPV4Address, titleize } from './string'; - -describe('isIPV4Address(str)', () => { - it('checks if as string is an IP V4', () => { - expect(isIPV4Address(null)).toBe(false); - expect(isIPV4Address(undefined)).toBe(false); - expect(isIPV4Address('')).toBe(false); - expect(isIPV4Address('127.0.0.1')).toBe(true); - }); -}); - -describe('titleize(str)', () => { - it('titleizes the string', () => { - expect(titleize(null)).toBe(''); - expect(titleize(undefined)).toBe(''); - expect(titleize('')).toBe(''); - expect(titleize('foo')).toBe('Foo'); - expect(titleize('foo bar')).toBe('Foo bar'); - }); -}); diff --git a/packages/shared/utils/string.ts b/packages/shared/utils/string.ts deleted file mode 100644 index 08b8b0d9d86..00000000000 --- a/packages/shared/utils/string.ts +++ /dev/null @@ -1,19 +0,0 @@ -const IP_V4_ADDRESS_REGEX = - /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; - -export function isIPV4Address(str: string | undefined | null): boolean { - return IP_V4_ADDRESS_REGEX.test(str || ''); -} - -export function titleize(str: string | undefined | null): string { - const s = str || ''; - return s.charAt(0).toUpperCase() + s.slice(1); -} - -export function snakeToCamel(str: string): string { - return str.replace(/([-_][a-z])/g, match => match.toUpperCase().replace(/-|_/, '')); -} - -export function camelToSnake(str: string): string { - return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`); -} diff --git a/packages/shared/utils/svgTransform.js b/packages/shared/utils/svgTransform.js deleted file mode 100644 index 472f3f896d4..00000000000 --- a/packages/shared/utils/svgTransform.js +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-disable */ -const path = require('path'); -const babel = require('@babel/core'); -const reactPreset = require('@babel/preset-react'); -const presetEnv = require('@babel/preset-env'); - -module.exports = { - process(_, filename) { - const code = babel.transform( - ` - import React from 'react'; - export default () => (<svg data-filename="${path.relative(process.cwd(), filename)}" />); - `, - { - filename, - presets: [presetEnv, reactPreset], - retainLines: true, - }, - ).code; - return code; - }, -}; diff --git a/packages/shared/utils/testUtils.ts b/packages/shared/utils/testUtils.ts deleted file mode 100644 index 7917101fc9c..00000000000 --- a/packages/shared/utils/testUtils.ts +++ /dev/null @@ -1,36 +0,0 @@ -import '@testing-library/jest-dom/extend-expect'; - -import { render, RenderOptions } from '@testing-library/react'; -import React from 'react'; -import renderer from 'react-test-renderer'; - -import { noop } from '../utils'; - -// Wrap components with test providers -const customRender = (ui: React.ReactElement, options?: RenderOptions) => { - return render(ui, options); -}; - -// To be used for structural snapshot testing -const renderJSON = (c: React.ReactElement) => renderer.create(c).toJSON(); - -// To be used for structural snapshot testing after the first rerender on mount -const renderJSONAfterFirstAct = (c: React.ReactElement) => { - let root; - - renderer.act(() => { - root = renderer.create(c); - }); - - // @ts-ignore - return root.toJSON(); -}; - -// Re-export everything -export * from '@testing-library/react'; -export { act as actHook, renderHook } from '@testing-library/react-hooks'; -export { default as userEvent } from '@testing-library/user-event'; -export { mocked } from 'jest-mock'; - -// Override render method -export { customRender as render, renderJSON, renderJSONAfterFirstAct, noop }; diff --git a/packages/shared/utils/url.test.ts b/packages/shared/utils/url.test.ts deleted file mode 100644 index 8d06b7a94a7..00000000000 --- a/packages/shared/utils/url.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { parseSearchParams } from './url'; - -describe('parseSearchParams(queryString)', () => { - it('parses query string and returns a URLSearchParams object', () => { - let searchParams = parseSearchParams(''); - expect(searchParams.get('foo')).toBeNull(); - - searchParams = parseSearchParams('foo=42&bar=43'); - expect(searchParams.get('foo')).toBe('42'); - expect(searchParams.get('bar')).toBe('43'); - - searchParams = parseSearchParams('?foo=42&bar=43'); - expect(searchParams.get('foo')).toBe('42'); - expect(searchParams.get('bar')).toBe('43'); - }); -}); diff --git a/packages/shared/utils/url.ts b/packages/shared/utils/url.ts deleted file mode 100644 index bc33767cae0..00000000000 --- a/packages/shared/utils/url.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function parseSearchParams(queryString = ''): URLSearchParams { - if (queryString.startsWith('?')) { - queryString = queryString.slice(1); - } - return new URLSearchParams(queryString); -} diff --git a/packages/common/vite.config.ts b/packages/shared/vite.config.ts similarity index 100% rename from packages/common/vite.config.ts rename to packages/shared/vite.config.ts From 342e0a55e4d070a68643f6f28e70016a551cf0ab Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Sun, 9 Oct 2022 22:50:55 +0300 Subject: [PATCH 17/41] chore(repo): Introduce nextjs playground app --- .gitignore | 2 - playground/nextjs/.eslintrc.json | 3 + playground/nextjs/.gitignore | 36 + playground/nextjs/README.md | 34 + playground/nextjs/next.config.js | 17 + playground/nextjs/package-lock.json | 5574 ++++++++++++++++++++++ playground/nextjs/package.json | 25 + playground/nextjs/pages/_app.tsx | 21 + playground/nextjs/pages/api/hello.ts | 10 + playground/nextjs/pages/index.tsx | 86 + playground/nextjs/public/favicon.ico | Bin 0 -> 25931 bytes playground/nextjs/public/vercel.svg | 4 + playground/nextjs/styles/Home.module.css | 129 + playground/nextjs/styles/globals.css | 26 + playground/nextjs/tsconfig.json | 20 + 15 files changed, 5985 insertions(+), 2 deletions(-) create mode 100644 playground/nextjs/.eslintrc.json create mode 100644 playground/nextjs/.gitignore create mode 100644 playground/nextjs/README.md create mode 100644 playground/nextjs/next.config.js create mode 100644 playground/nextjs/package-lock.json create mode 100644 playground/nextjs/package.json create mode 100644 playground/nextjs/pages/_app.tsx create mode 100644 playground/nextjs/pages/api/hello.ts create mode 100644 playground/nextjs/pages/index.tsx create mode 100644 playground/nextjs/public/favicon.ico create mode 100644 playground/nextjs/public/vercel.svg create mode 100644 playground/nextjs/styles/Home.module.css create mode 100644 playground/nextjs/styles/globals.css create mode 100644 playground/nextjs/tsconfig.json diff --git a/.gitignore b/.gitignore index 56a856da391..e804d4e0df4 100644 --- a/.gitignore +++ b/.gitignore @@ -50,5 +50,3 @@ Thumbs.db .turbo lerna-debug.log -playground -playground1 diff --git a/playground/nextjs/.eslintrc.json b/playground/nextjs/.eslintrc.json new file mode 100644 index 00000000000..bffb357a712 --- /dev/null +++ b/playground/nextjs/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/playground/nextjs/.gitignore b/playground/nextjs/.gitignore new file mode 100644 index 00000000000..c87c9b392c0 --- /dev/null +++ b/playground/nextjs/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/playground/nextjs/README.md b/playground/nextjs/README.md new file mode 100644 index 00000000000..c87e0421d22 --- /dev/null +++ b/playground/nextjs/README.md @@ -0,0 +1,34 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. + +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. + +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/playground/nextjs/next.config.js b/playground/nextjs/next.config.js new file mode 100644 index 00000000000..aab0bc034af --- /dev/null +++ b/playground/nextjs/next.config.js @@ -0,0 +1,17 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + swcMinify: true, + // Configure webpack NOT to ignore node_modules changes for HMR + webpack: config => { + config.snapshot = { + ...(config.snapshot ?? {}), + // Add all node_modules but @next module to managedPaths + // Allows for hot refresh of changes to @next module + managedPaths: [/^(.+?[\\/]node_modules[\\/])(?!@next)/], + }; + return config; + }, +}; + +module.exports = nextConfig; diff --git a/playground/nextjs/package-lock.json b/playground/nextjs/package-lock.json new file mode 100644 index 00000000000..e7b34441cee --- /dev/null +++ b/playground/nextjs/package-lock.json @@ -0,0 +1,5574 @@ +{ + "name": "@playground/nextjs", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@playground/nextjs", + "version": "0.1.0", + "dependencies": { + "@clerk/backend-core": "file:../../packages/backend-core/", + "@clerk/clerk-react": "file:../../packages/react/", + "@clerk/clerk-sdk-node": "file:../../packages/sdk-node/", + "@clerk/edge": "file:../../packages/edge/", + "@clerk/nextjs": "file:../../packages/nextjs/", + "@clerk/shared": "file:../../packages/common/", + "@clerk/types": "file:../../packages/types/", + "next": "12.3.1", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "18.8.3", + "@types/react": "18.0.21", + "@types/react-dom": "18.0.6", + "eslint": "8.24.0", + "eslint-config-next": "12.3.1", + "typescript": "4.8.4" + } + }, + "../../packages/backend-core": { + "version": "2.8.1", + "license": "MIT", + "dependencies": { + "@clerk/types": "^3.10.1", + "@peculiar/webcrypto": "^1.4.0", + "@types/node": "^16.11.55", + "@types/node-fetch": "^2", + "node-fetch": "^2.6.0", + "query-string": "^7.0.1", + "snakecase-keys": "^5.4.4", + "tslib": "^2.3.1" + }, + "devDependencies": { + "@types/jest": "^27.4.0", + "jest": "^27.4.7", + "nock": "^13.2.1", + "ts-jest": "^27.1.3", + "typescript": "*" + }, + "engines": { + "node": ">=14" + } + }, + "../../packages/common": { + "version": "0.0.1", + "license": "ISC", + "devDependencies": { + "tsup": "^6.2.3", + "typescript": "^4.6.4", + "vitest": "^0.23.4" + } + }, + "../../packages/common/dist": { + "extraneous": true + }, + "../../packages/edge": { + "version": "1.12.2", + "license": "MIT", + "dependencies": { + "@clerk/backend-core": "^2.8.1", + "@clerk/types": "^3.10.1", + "@peculiar/webcrypto": "^1.4.0", + "@types/node": "^16.11.55", + "next": "^12.2.0" + }, + "devDependencies": { + "@types/jest": "^27.4.0", + "jest": "^27.4.7", + "ts-jest": "^27.1.3", + "typescript": "*" + }, + "engines": { + "node": ">=12" + } + }, + "../../packages/nextjs": { + "name": "@clerk/nextjs", + "version": "4.5.2", + "license": "MIT", + "dependencies": { + "@clerk/clerk-react": "^4.2.6", + "@clerk/clerk-sdk-node": "^4.4.2", + "@clerk/edge": "^1.12.2", + "@clerk/types": "^3.10.1", + "tslib": "^2.3.1" + }, + "devDependencies": { + "@types/jest": "^27.4.0", + "@types/node": "^16.11.55", + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "jest": "^27.4.7", + "next": "^12.2.3", + "react": "17.0.2", + "react-dom": "17.0.2", + "ts-jest": "^27.1.3", + "typescript": "*" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "next": ">=10" + } + }, + "../../packages/react": { + "name": "@clerk/clerk-react", + "version": "4.2.6", + "license": "MIT", + "dependencies": { + "@clerk/types": "^3.10.1", + "swr": "^1.3.0", + "tslib": "^2.3.1" + }, + "devDependencies": { + "@testing-library/dom": "^7.28.1", + "@testing-library/jest-dom": "^5.11.6", + "@testing-library/react": "^11.2.1", + "@testing-library/react-hooks": "^3.4.2", + "@testing-library/user-event": "^12.2.2", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.55", + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "@types/react-test-renderer": "^17", + "@types/testing-library__jest-dom": "^5", + "@types/testing-library__react-hooks": "^3", + "jest": "^27.4.7", + "react": "17.0.2", + "react-dom": "17.0.2", + "ts-jest": "^27.1.3", + "typescript": "*" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "../../packages/react/dist": { + "extraneous": true + }, + "../../packages/sdk-node": { + "version": "4.4.2", + "license": "MIT", + "dependencies": { + "@clerk/backend-core": "^2.8.1", + "@clerk/types": "^3.10.1", + "@peculiar/webcrypto": "^1.4.0", + "@types/cookies": "^0.7.7", + "@types/express": "^4.17.11", + "@types/jsonwebtoken": "^8.5.6", + "@types/node-fetch": "^2", + "camelcase-keys": "^6.2.2", + "cookies": "^0.8.0", + "deepmerge": "^4.2.2", + "jsonwebtoken": "^8.5.1", + "jwks-rsa": "^2.0.4", + "node-fetch": "^2.6.0", + "snakecase-keys": "^3.2.1", + "tslib": "^2.3.1" + }, + "devDependencies": { + "@types/jest": "^27.4.0", + "jest": "^27.4.7", + "nock": "^13.0.7", + "npm-run-all": "^4.1.5", + "prettier": "^2.5.0", + "ts-jest": "^27.1.3", + "typescript": "*" + }, + "engines": { + "node": ">=14" + } + }, + "../../packages/types": { + "version": "3.10.1", + "license": "MIT", + "dependencies": { + "csstype": "^3.1.0" + }, + "devDependencies": { + "@types/jest": "^27.4.0", + "jest": "^27.4.7", + "ts-jest": "^27.1.3", + "typescript": "*" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@babel/runtime": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz", + "integrity": "sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@clerk/backend-core": { + "resolved": "../../packages/backend-core", + "link": true + }, + "node_modules/@clerk/clerk-react": { + "resolved": "../../packages/react", + "link": true + }, + "node_modules/@clerk/clerk-sdk-node": { + "resolved": "../../packages/sdk-node", + "link": true + }, + "node_modules/@clerk/edge": { + "resolved": "../../packages/edge", + "link": true + }, + "node_modules/@clerk/nextjs": { + "resolved": "../../packages/nextjs", + "link": true + }, + "node_modules/@clerk/shared": { + "resolved": "../../packages/common", + "link": true + }, + "node_modules/@clerk/types": { + "resolved": "../../packages/types", + "link": true + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@next/env": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz", + "integrity": "sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz", + "integrity": "sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.1.tgz", + "integrity": "sha512-i+BvKA8tB//srVPPQxIQN5lvfROcfv4OB23/L1nXznP+N/TyKL8lql3l7oo2LNhnH66zWhfoemg3Q4VJZSruzQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.1.tgz", + "integrity": "sha512-CmgU2ZNyBP0rkugOOqLnjl3+eRpXBzB/I2sjwcGZ7/Z6RcUJXK5Evz+N0ucOxqE4cZ3gkTeXtSzRrMK2mGYV8Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz", + "integrity": "sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.1.tgz", + "integrity": "sha512-9S6EVueCVCyGf2vuiLiGEHZCJcPAxglyckTZcEwLdJwozLqN0gtS0Eq0bQlGS3dH49Py/rQYpZ3KVWZ9BUf/WA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.1.tgz", + "integrity": "sha512-qcuUQkaBZWqzM0F1N4AkAh88lLzzpfE6ImOcI1P6YeyJSsBmpBIV8o70zV+Wxpc26yV9vpzb+e5gCyxNjKJg5Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.1.tgz", + "integrity": "sha512-diL9MSYrEI5nY2wc/h/DBewEDUzr/DqBjIgHJ3RUNtETAOB3spMNHvJk2XKUDjnQuluLmFMloet9tpEqU2TT9w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.1.tgz", + "integrity": "sha512-o/xB2nztoaC7jnXU3Q36vGgOolJpsGG8ETNjxM1VAPxRwM7FyGCPHOMk1XavG88QZSQf+1r+POBW0tLxQOJ9DQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.1.tgz", + "integrity": "sha512-2WEasRxJzgAmP43glFNhADpe8zB7kJofhEAVNbDJZANp+H4+wq+/cW1CdDi8DqjkShPEA6/ejJw+xnEyDID2jg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.1.tgz", + "integrity": "sha512-JWEaMyvNrXuM3dyy9Pp5cFPuSSvG82+yABqsWugjWlvfmnlnx9HOQZY23bFq3cNghy5V/t0iPb6cffzRWylgsA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.1.tgz", + "integrity": "sha512-xoEWQQ71waWc4BZcOjmatuvPUXKTv6MbIFzpm4LFeCHsg2iwai0ILmNXf81rJR+L1Wb9ifEke2sQpZSPNz1Iyg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.1.tgz", + "integrity": "sha512-hswVFYQYIeGHE2JYaBVtvqmBQ1CppplQbZJS/JgrVI3x2CurNhEkmds/yqvDONfwfbttTtH4+q9Dzf/WVl3Opw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.1.tgz", + "integrity": "sha512-Kny5JBehkTbKPmqulr5i+iKntO5YMP+bVM8Hf8UAmjSMVo3wehyLVc9IZkNmcbxi+vwETnQvJaT5ynYBkJ9dWA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.1.tgz", + "integrity": "sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.8.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.3.tgz", + "integrity": "sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", + "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", + "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", + "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", + "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", + "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.39.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/axe-core": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", + "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001416", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz", + "integrity": "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-js-pure": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.1.tgz", + "integrity": "sha512-EN/xwKPU6jz1G0Qi6Bd/BqMnHLyRAL0VsaQaWA7F3KkjAgZHi4f1uL1JKGWNxdQpHTW/sdGONBd0bzxUka/DJg==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "12.3.1", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.21.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.31.8", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz", + "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.1.tgz", + "integrity": "sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==", + "dependencies": { + "@next/env": "12.3.1", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "12.3.1", + "@next/swc-android-arm64": "12.3.1", + "@next/swc-darwin-arm64": "12.3.1", + "@next/swc-darwin-x64": "12.3.1", + "@next/swc-freebsd-x64": "12.3.1", + "@next/swc-linux-arm-gnueabihf": "12.3.1", + "@next/swc-linux-arm64-gnu": "12.3.1", + "@next/swc-linux-arm64-musl": "12.3.1", + "@next/swc-linux-x64-gnu": "12.3.1", + "@next/swc-linux-x64-musl": "12.3.1", + "@next/swc-win32-arm64-msvc": "12.3.1", + "@next/swc-win32-ia32-msvc": "12.3.1", + "@next/swc-win32-x64-msvc": "12.3.1" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", + "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.1.tgz", + "integrity": "sha512-j2vJGnkopRzH+ykJ8h68wrHnEUmtK//E723jjixiAl/PPf6FhqY/vYRcMVlNydRKQjQsTsYEjpx+DZMIvnGk/g==", + "dev": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.4" + } + }, + "@clerk/backend-core": { + "version": "file:../../packages/backend-core", + "requires": { + "@clerk/types": "^3.10.1", + "@peculiar/webcrypto": "^1.4.0", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.55", + "@types/node-fetch": "^2", + "jest": "^27.4.7", + "nock": "^13.2.1", + "node-fetch": "^2.6.0", + "query-string": "^7.0.1", + "snakecase-keys": "^5.4.4", + "ts-jest": "^27.1.3", + "tslib": "^2.3.1", + "typescript": "*" + } + }, + "@clerk/clerk-react": { + "version": "file:../../packages/react", + "requires": { + "@clerk/types": "^3.10.1", + "@testing-library/dom": "^7.28.1", + "@testing-library/jest-dom": "^5.11.6", + "@testing-library/react": "^11.2.1", + "@testing-library/react-hooks": "^3.4.2", + "@testing-library/user-event": "^12.2.2", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.55", + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "@types/react-test-renderer": "^17", + "@types/testing-library__jest-dom": "^5", + "@types/testing-library__react-hooks": "^3", + "jest": "^27.4.7", + "react": "17.0.2", + "react-dom": "17.0.2", + "swr": "^1.3.0", + "ts-jest": "^27.1.3", + "tslib": "^2.3.1", + "typescript": "*" + } + }, + "@clerk/clerk-sdk-node": { + "version": "file:../../packages/sdk-node", + "requires": { + "@clerk/backend-core": "^2.8.1", + "@clerk/types": "^3.10.1", + "@peculiar/webcrypto": "^1.4.0", + "@types/cookies": "^0.7.7", + "@types/express": "^4.17.11", + "@types/jest": "^27.4.0", + "@types/jsonwebtoken": "^8.5.6", + "@types/node-fetch": "^2", + "camelcase-keys": "^6.2.2", + "cookies": "^0.8.0", + "deepmerge": "^4.2.2", + "jest": "^27.4.7", + "jsonwebtoken": "^8.5.1", + "jwks-rsa": "^2.0.4", + "nock": "^13.0.7", + "node-fetch": "^2.6.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.5.0", + "snakecase-keys": "^3.2.1", + "ts-jest": "^27.1.3", + "tslib": "^2.3.1", + "typescript": "*" + } + }, + "@clerk/edge": { + "version": "file:../../packages/edge", + "requires": { + "@clerk/backend-core": "^2.8.1", + "@clerk/types": "^3.10.1", + "@peculiar/webcrypto": "^1.4.0", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.55", + "jest": "^27.4.7", + "next": "^12.2.0", + "ts-jest": "^27.1.3", + "typescript": "*" + } + }, + "@clerk/nextjs": { + "version": "file:../../packages/nextjs", + "requires": { + "@clerk/clerk-react": "^4.2.6", + "@clerk/clerk-sdk-node": "^4.4.2", + "@clerk/edge": "^1.12.2", + "@clerk/types": "^3.10.1", + "@types/jest": "^27.4.0", + "@types/node": "^16.11.55", + "@types/react": "^17.0.39", + "@types/react-dom": "^17.0.11", + "jest": "^27.4.7", + "next": "^12.2.3", + "react": "17.0.2", + "react-dom": "17.0.2", + "ts-jest": "^27.1.3", + "tslib": "^2.3.1", + "typescript": "*" + } + }, + "@clerk/shared": { + "version": "file:../../packages/common", + "requires": { + "tsup": "^6.2.3", + "typescript": "^4.6.4", + "vitest": "^0.23.4" + } + }, + "@clerk/types": { + "version": "file:../../packages/types", + "requires": { + "@types/jest": "^27.4.0", + "csstype": "^3.1.0", + "jest": "^27.4.7", + "ts-jest": "^27.1.3", + "typescript": "*" + } + }, + "@eslint/eslintrc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", + "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@next/env": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.3.1.tgz", + "integrity": "sha512-9P9THmRFVKGKt9DYqeC2aKIxm8rlvkK38V1P1sRE7qyoPBIs8l9oo79QoSdPtOWfzkbDAVUqvbQGgTMsb8BtJg==" + }, + "@next/eslint-plugin-next": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz", + "integrity": "sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==", + "dev": true, + "requires": { + "glob": "7.1.7" + } + }, + "@next/swc-android-arm-eabi": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.3.1.tgz", + "integrity": "sha512-i+BvKA8tB//srVPPQxIQN5lvfROcfv4OB23/L1nXznP+N/TyKL8lql3l7oo2LNhnH66zWhfoemg3Q4VJZSruzQ==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.3.1.tgz", + "integrity": "sha512-CmgU2ZNyBP0rkugOOqLnjl3+eRpXBzB/I2sjwcGZ7/Z6RcUJXK5Evz+N0ucOxqE4cZ3gkTeXtSzRrMK2mGYV8Q==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.3.1.tgz", + "integrity": "sha512-hT/EBGNcu0ITiuWDYU9ur57Oa4LybD5DOQp4f22T6zLfpoBMfBibPtR8XktXmOyFHrL/6FC2p9ojdLZhWhvBHg==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.3.1.tgz", + "integrity": "sha512-9S6EVueCVCyGf2vuiLiGEHZCJcPAxglyckTZcEwLdJwozLqN0gtS0Eq0bQlGS3dH49Py/rQYpZ3KVWZ9BUf/WA==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.3.1.tgz", + "integrity": "sha512-qcuUQkaBZWqzM0F1N4AkAh88lLzzpfE6ImOcI1P6YeyJSsBmpBIV8o70zV+Wxpc26yV9vpzb+e5gCyxNjKJg5Q==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.3.1.tgz", + "integrity": "sha512-diL9MSYrEI5nY2wc/h/DBewEDUzr/DqBjIgHJ3RUNtETAOB3spMNHvJk2XKUDjnQuluLmFMloet9tpEqU2TT9w==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.3.1.tgz", + "integrity": "sha512-o/xB2nztoaC7jnXU3Q36vGgOolJpsGG8ETNjxM1VAPxRwM7FyGCPHOMk1XavG88QZSQf+1r+POBW0tLxQOJ9DQ==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.3.1.tgz", + "integrity": "sha512-2WEasRxJzgAmP43glFNhADpe8zB7kJofhEAVNbDJZANp+H4+wq+/cW1CdDi8DqjkShPEA6/ejJw+xnEyDID2jg==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.3.1.tgz", + "integrity": "sha512-JWEaMyvNrXuM3dyy9Pp5cFPuSSvG82+yABqsWugjWlvfmnlnx9HOQZY23bFq3cNghy5V/t0iPb6cffzRWylgsA==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.3.1.tgz", + "integrity": "sha512-xoEWQQ71waWc4BZcOjmatuvPUXKTv6MbIFzpm4LFeCHsg2iwai0ILmNXf81rJR+L1Wb9ifEke2sQpZSPNz1Iyg==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.3.1.tgz", + "integrity": "sha512-hswVFYQYIeGHE2JYaBVtvqmBQ1CppplQbZJS/JgrVI3x2CurNhEkmds/yqvDONfwfbttTtH4+q9Dzf/WVl3Opw==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.3.1.tgz", + "integrity": "sha512-Kny5JBehkTbKPmqulr5i+iKntO5YMP+bVM8Hf8UAmjSMVo3wehyLVc9IZkNmcbxi+vwETnQvJaT5ynYBkJ9dWA==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.1.tgz", + "integrity": "sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA==", + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "@swc/helpers": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.11.tgz", + "integrity": "sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "@types/node": { + "version": "18.8.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.3.tgz", + "integrity": "sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/react": { + "version": "18.0.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.21.tgz", + "integrity": "sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@typescript-eslint/parser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", + "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.39.0", + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/typescript-estree": "5.39.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", + "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0" + } + }, + "@typescript-eslint/types": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", + "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", + "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/visitor-keys": "5.39.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", + "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.39.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-includes": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", + "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "axe-core": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", + "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001416", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz", + "integrity": "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "core-js-pure": { + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", + "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.2", + "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + } + }, + "eslint-config-next": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.1.tgz", + "integrity": "sha512-EN/xwKPU6jz1G0Qi6Bd/BqMnHLyRAL0VsaQaWA7F3KkjAgZHi4f1uL1JKGWNxdQpHTW/sdGONBd0bzxUka/DJg==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "12.3.1", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.21.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", + "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-react": { + "version": "7.31.8", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz", + "integrity": "sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "next": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/next/-/next-12.3.1.tgz", + "integrity": "sha512-l7bvmSeIwX5lp07WtIiP9u2ytZMv7jIeB8iacR28PuUEFG5j0HGAPnMqyG5kbZNBG2H7tRsrQ4HCjuMOPnANZw==", + "requires": { + "@next/env": "12.3.1", + "@next/swc-android-arm-eabi": "12.3.1", + "@next/swc-android-arm64": "12.3.1", + "@next/swc-darwin-arm64": "12.3.1", + "@next/swc-darwin-x64": "12.3.1", + "@next/swc-freebsd-x64": "12.3.1", + "@next/swc-linux-arm-gnueabihf": "12.3.1", + "@next/swc-linux-arm64-gnu": "12.3.1", + "@next/swc-linux-arm64-musl": "12.3.1", + "@next/swc-linux-x64-gnu": "12.3.1", + "@next/swc-linux-x64-musl": "12.3.1", + "@next/swc-win32-arm64-msvc": "12.3.1", + "@next/swc-win32-ia32-msvc": "12.3.1", + "@next/swc-win32-x64-msvc": "12.3.1", + "@swc/helpers": "0.4.11", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.0.7", + "use-sync-external-store": "1.2.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "styled-jsx": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.7.tgz", + "integrity": "sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==", + "requires": {} + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/playground/nextjs/package.json b/playground/nextjs/package.json new file mode 100644 index 00000000000..4f5e06508c1 --- /dev/null +++ b/playground/nextjs/package.json @@ -0,0 +1,25 @@ +{ + "name": "@playground/nextjs", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "rm -rf .next && next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@clerk/nextjs": "file:../../packages/nextjs/", + "next": "12.3.1", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "18.8.3", + "@types/react": "18.0.21", + "@types/react-dom": "18.0.6", + "eslint": "8.24.0", + "eslint-config-next": "12.3.1", + "typescript": "4.8.4" + } +} diff --git a/playground/nextjs/pages/_app.tsx b/playground/nextjs/pages/_app.tsx new file mode 100644 index 00000000000..21e4fb80b59 --- /dev/null +++ b/playground/nextjs/pages/_app.tsx @@ -0,0 +1,21 @@ +import '../styles/globals.css'; +import type { AppProps } from 'next/app'; + +import { ClerkProvider, SignedOut, SignIn } from '@clerk/nextjs'; + +function MyApp({ Component, pageProps }: AppProps) { + return ( + <ClerkProvider + frontendApi={'clerk.touching.camel-78.dev.lclclerk.com'} + clerkJSUrl={'https://js.lclclerk.com/npm/clerk.browser.js'} + {...pageProps} + > + <SignedOut> + <SignIn /> + </SignedOut> + <Component {...pageProps} /> + </ClerkProvider> + ); +} + +export default MyApp; diff --git a/playground/nextjs/pages/api/hello.ts b/playground/nextjs/pages/api/hello.ts new file mode 100644 index 00000000000..eb4cc6657b3 --- /dev/null +++ b/playground/nextjs/pages/api/hello.ts @@ -0,0 +1,10 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next'; + +type Data = { + name: string; +}; + +export default function handler(req: NextApiRequest, res: NextApiResponse<Data>) { + res.status(200).json({ name: 'John Doe' }); +} diff --git a/playground/nextjs/pages/index.tsx b/playground/nextjs/pages/index.tsx new file mode 100644 index 00000000000..9613544210c --- /dev/null +++ b/playground/nextjs/pages/index.tsx @@ -0,0 +1,86 @@ +import type { NextPage } from 'next'; +import Head from 'next/head'; +import Image from 'next/image'; +import styles from '../styles/Home.module.css'; + +const Home: NextPage = () => { + return ( + <div className={styles.container}> + <Head> + <title>Create Next App</title> + <meta + name='description' + content='Generated by create next app' + /> + <link + rel='icon' + href='/favicon.ico' + /> + </Head> + + <main className={styles.main}> + <h1 className={styles.title}> + Welcome to <a href='https://nextjs.org'>Next.js!</a> + </h1> + + <p className={styles.description}> + Get started by editing <code className={styles.code}>pages/index.tsx</code> + </p> + + <div className={styles.grid}> + <a + href='https://nextjs.org/docs' + className={styles.card} + > + <h2>Documentation →</h2> + <p>Find in-depth information about Next.js features and API.</p> + </a> + + <a + href='https://nextjs.org/learn' + className={styles.card} + > + <h2>Learn →</h2> + <p>Learn about Next.js in an interactive course with quizzes!</p> + </a> + + <a + href='https://github.com/vercel/next.js/tree/canary/examples' + className={styles.card} + > + <h2>Examples →</h2> + <p>Discover and deploy boilerplate example Next.js projects.</p> + </a> + + <a + href='https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app' + className={styles.card} + > + <h2>Deploy →</h2> + <p>Instantly deploy your Next.js site to a public URL with Vercel.</p> + </a> + </div> + </main> + + <footer className={styles.footer}> + <a + href='https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app' + target='_blank' + rel='noopener noreferrer' + > + Powered by{' '} + <span className={styles.logo}> + <Image + src='/vercel.svg' + alt='Vercel Logo' + width={72} + height={16} + /> + </span> + </a> + </footer> + </div> + ); +}; + +export default Home; diff --git a/playground/nextjs/public/favicon.ico b/playground/nextjs/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 zcmeHv30#a{`}aL_*G&7qml|y<+KVaDM2m#dVr!KsA!#An?kSQM(q<_dDNCpjEux83 zLb9Z^XxbDl(w>%i@8hT6>)&Gu{h#Oeyszu?xtw#Zb1mO<?sK2}EE5RAKnxHU7lft+ zNRAPL3?T?25I&drAjl1ssi=G|D?(7bFsgtO(2o>{pgX9699l+Qppw7jXaYf~-84xW z)w4x8?=youko|}Vr~(D$UX<xm7|19n6Hxvd5m6xx<*9a4%RmR{en}E&p$X-wy5A}T zU0^dwXVA>IbiXABHh`p1?nn8Po~fxRJv}|0e(BPs|G`(TT%kKVJAdg5*Z|x0leQq0 zkdUBvb#>9F()jo|T~kx@OM8$9wzs~t2l;K=woNssA3l6|sx2r3+kdfVW@e^8e*E}v zA1y5{bRi+3Z`uD3{F7LgFJDdvm;nJilkzDku>BwXH(8ItVCXk*-lSJnR?-2UN%<G) zWdETe=&R39RaKR)udn|#TOgZ!e!yM=<=+`Uz{l^5UtkZ2fHDQ;UwMB}v%l$A-`~F- z{Qr^x^CSUf63Sry{6y#+`<sMA?dPFvg)$lC_RkFRKnCi7&P<a6>hJ){&rlvg`CDTj z)Bzo!3v7Ou#83zEDEFcKt(f1E0~=rqeEbTnMvWR#{+9pg%7G8y>u1OVRUSoox-ovF z2Ydma(;=YuBY(eI|04{hXzZD6_f(v~H;C~y5=DhAC{MMS>2fm~1H_t2$56pc$NH8( z5bH|<)71dV-_oCHIrzrT`2s-5w_+2CM0$95I6X8p^r!gHp+j_gd;9O<1~CEQQGS8) zS9Qh3#p&JM-G8rHekNmKVewU;pJRcTAog68KYo^dRo}(M<!8cv(gkb9@A>>36U4Us zfgYWSiHZL3;lpWT=<n~R&zm>zNAW>Dh#mB!_@Lg%$ms8N-;aPqMn+C2HqZgz&9~Eu z4|Kp<`$q)Uw1R?y(~S>ePdonHxpV1#eSP1B;Ogo+-Pk}6#0GsZZ5!||ev2MGdh}_m z{DeR7?0-1^zVs&`AV6<!ZvGbtU{7FdY&`9DeD(=q|M30$GCs(E?S0J1$e@G0#Z=wz zl)*a>Vt;r3`I`OI_wgs*w=eO%_#7Kepl{B<UyBc9U%rn&@xFZ-e{%i>@xiyCANc(l zzIyd4y|c6PXWq9-|KM8(zIk8LPk(>a)zyFWjhT!$HJ$qX1vo@d25W<<x-(q{Yn-pG zKTz?fwGmh&&2-F3f57**)?Xk#p#S9h^DhK{VVKE&0KR^-_MMD9nf@pDACnmVll!kp z3?Tha?LWW70P;AL{}cP~sW|?W|MbA09{7Kt2f!i(y>fvZQ2zUz5WRc(UnFMKHwe1| zWmlB1qdbiA(C0jmnV<}GfbKtmcu^2*P^O?<jWWPHxu*D53Uq)j1!ZtH3Vi&#Nd^rV zj`B>MBLZKt|As~ge8&AAO~2K@zbXelK|4T<{|y4`raF{=72kC2Kn(L4YyenWgrPiv z@^mr$t{#X5VuIMeL!7Ab6_kG$&#&5p*Z{+?5U|TZ`B!7llpVmp@skYz&n^8QfPJzL z0G6K_OJM9x+Wu2gfN45phANGt{7=C>i34CV{Xqlx(fWpeAoj^N0Biu`w+MVcCUyU* zDZuzO0>4Z6fbu^T_arWW5n!E45vX8N=bxTVeFoep_G#VmNlQzAI_KTIc{6>c+04vr zx@W}zE5JNSU>!THJ{J=cqjz+4{L4A{Ob9$ZJ*S1?Ggg3klFp!+Y1@K+pK1DqI|_gq z5ZDXVpge8-cs!o|;K73#YXZ3AShj50wBvuq3NTOZ`M&qtjj#GOFfgExjg8Gn8>Vq5 z`85n+9|!iLCZF5$HJ$Iu($dm?8~-ofu}tEc+-pyke=3!im#6pk_Wo8IA|fJwD&~~F zc16osQ)EBo58U7XDuMexaPRjU@h8tXe%S{fA0NH3vGJFhuyyO!Uyl2^&EOpX{9As0 zWj+P>{@}jxH)8|r;2HdupP!vie{sJ28b&bo!8`D^x}TE$%zXNb^X1p@0PJ86`dZyj z%ce7*{^oo+6%&~I!8hQy-vQ7E)0t0ybH4l%KltWOo~8cO`T=157JqL(oq_rC%ea&4 z2NcTJe-HgFjNg-gZ$6!Y`SMHrlj}Etf7<Kk?_r;;``Uc^3+u}-v3@Q8<@$Nr`<F?K z-%F>?r!zQTPPSv}{so2e>Fjs1{<qUF=hGRSFDG$<z3x<+@%{Vd%a`e+qodRP&D<om zAEn>gzk~LGeesX%r(Lh6rbhSo_n)@@G-FTQy93;l#E)hgP@d_SGvyCp0~o(Y;Ee8{ zdVUDbHm5`2taPUOY^MAGOw*<R_VaVlPH<<CgYr!E->>=s7=Gst=D+p+2yON!0%Hk` zz5mAhyT4lS*T3LS^WSxUy86q&GnoHxzQ6vm8)VS}_zuqG?+3td68_x;etQAdu@sc6 zQJ&5|4(I?~3d-QOAODHpZ=hlSg(lBZ!JZWCtHHSj`0Wh93-Uk)_S%zsJ~aD>{`A0~ z9{AG(e|q3g5B%wYKRxiL2Y$8(4w<boVrLOyLG9R$m+7N>6bzchKuloQW#e&S3n+P- z8!ds-%f;TJ1>)v)##>gd{PdS2Oc3VaR`fr=`O8QIO(6(N!A?pr5C#6fc~Ge@N%Vvu zaoAX2&(a6eWy_q&UwOhU)|P3J0Qc%OdhzW=F4D|pt0E4osw;%<%Dn58hAWD^XnZD= z>9~H(3bmLtxpF?a7su6J7M*x1By7YSUbxGi)Ot0P77`}P<HJ;%@cvfCkvm6xcMjdY zed_u6xK)F%|1Hy`)`e~K(f*MqTJ?92I+4lga{A5`-U@Cab35G6unNk<*dpB|Rtkp; z?32o^yBlJsuA-^abQ~7;%<oa^k<DbKc{lOW2!yM#nEALvv)IhY7b|Wfg(UhtiurTM zY-B6L26$JQo&Kt3nh3JTJ)garEgw^{uEM3__%b$U5{~+aMO*k)6R#grkER2`U6KS- z=j1=QhCkuy%iiHWrqH8CeGNw*C?epTpl2Bo@ugUPKRFeiVHOpL7PHu-SAgX@qmTGH z_%ePz1`io8XDfwLmip;Rn;1yo+3>3{)&5Un{KD?`-e?r21!4vTTnN(4Y6Lin?UkSM z`MXCTC1@4A4~mvz%Rh2&EwY))LeoT=*`tMoqcEXI>TZU9WTP#l?uFv+@Dn~b(>xh2 z;>B?;Tz2SR&KVb>vGiBSB`@U7VIWFSo=LDSb9F{GF^DbmWAfpms8Sx9OX4CnBJca3 zlj9(x!dIjN?OG1X4l*imJNvRCk}F%!?SOfiOq5y^mZW)jFL@<gIi}tCXee1<sGV$i z4r_`X#mEQbiDh!Efji0GjM9z-0bF}p0(*s(OzMJ|;K&OJBar<ARLp}T>a|r-@d#f7 z2gmU8L3IZq0ynIws=}~m^#@&C%J6QFo~Mo4V`>v7MI-_!EBMMtb%_M&kvAaN)@ZVw z+`toz&WG#HkWDjnZE!6nk{e-oFdL^$YnbOCN}JC&{$#$O27@|Tn-skXr)2ml2~O!5 zX+gYoxhoc7qoU?C^3~&!U?kRFtnSEecWuH0B0OvLodgUAi}8p1<ZO0#U-k07ifx!> zrO6RSXHH}D<I*>Mc$&|?D004<Y&c6)m74d`LOLU@ruR+Um4>DiOVMHV8kXCP@7NKB zgaZq^^O<7PoKEp72kby@W0Z!Y*A<g|TlOeriuPP`vK2IntATvs?Iv|J14j&;NFSFo zyJ+sca?G+8C%!b{Sq=6cJJqS>y{&vfg#C&gG@YVR9g?FEocMUi1gSN$+V+ayF45{a zuDZDT<?u;)RfLQwg>N}mS|;BO%gEf}pjBfN2-gIrU#G5~cucA;dokXW89%>AyXJJI z9X4Ul<x{xc_m~`mWBP0<g-{#wm}Vv~Ef3pKWC&N_<~88zSbEk;;+{DnJ9-u&Zc74s zJ6TCQyl_^|5cY;wmDdrU@LTL-3v0H#Ui?8ICQV{imof1MHuM$`e*ux>IWA|ZYHgbI z5?oFk@A=Ik7lrEQPDH!H+b`7_Y~aDb_qa=B2^Y&Ow41cU=4WDd40dp5(QS-WMN-=Y z9g;6_-JdNU;|6cPwf$ak*aJIcwL@1n$#l~zi{c{EW?T;DaW*E8DYq?Umtz{nJ&w-M zEMyT<MDk{HKbd#ckg5-pS_?QUVhZv?&Q-ioBS}$nvBd)nE7YO0deN~G(#zCJAbY$E z!)g3Ytl=_NDUV%pykcE+Q<{EoZ_4FR@&#d<hqs%N>DrC&9K$d|kZe2#ws6)L=7K+{ zQw{XnV6UC$6-rW0emqm8wJoeZK)wJIcV?dST}Z;G0Arq{dVDu0&4kd%N!3F1*;*pW zR&qUiFzK=@44#QGw7k1`3t_d8&*kBV->O##t|tonFc2YWrL7_eqg+=+k;!F-`^b8> z#KWCE8%u4k@EprxqiV$VmmtiWxDLgnGu$Vs<8rppV5E<MCr+anDo)-{XRlCJ;D#M( zT=3WgR02;Nm!54biUb^FtzPh8iGrf412epnki-k+G4mdkzC|lJqaRMbb0~Jjp-{}I z5Do5afZi>ajBXL4nyyZM$SWVm!wnCj-B!Wjqj5-5dNXukI2$$|Bu3Lrw}z65Lc=1G z^-#WuQOj$hwNGG?*CM_TO8Bg-1+qc>J7k5c51U8g?ZU5n?HYor;~JIjoWH-G>AoUP ztrWWLbRNqIjW#RT*WqZgPJXU7C)VaW5}MiijYbABmzoru6EmQ*N8cVK7a3|aOB#O& zBl8JY2WKfmj;h#Q!pN%9o@VNLv{OUL?rixHwOZuvX7{IJ{(EdPpuVFoQqIOa7gi<U zTpbX&UCeYeNu>LVkBOKL@^smUA!tZ1CKRK}#SSM)iQHk)*R~?M!qkCruaS!#oIL1c z<cK@1=jX>?J<BS8bpdt^R+}%A_DEhF^%o}8e!!lc`Y!qU>;U~&FfH#*98^G?i}pA{ z9Jg36t4=%6mhY(quYq*vSxptes9qy|7xSlH?G=S@>u>Ebe;|LVhs~@+06N<4CViBk zUiY$thvX;>Tby6z9Y1e<Q<iIG*|o$r?OTFp`s)@_nHs4LeWbGvg7^}NK)>dAMQaiH zm^r3v#$Q#2T=X>bsY#D%s!bhs^M9PMAcHbCc0FMHV{u-dwlL;a1eJ63v5U*?Q_8JO zT#50!RD619#j_Uf))0ooADz~*9&lN!bBDRUgE>Vud-i5ck%vT=r^yD*^?Mp@Q^v+V zG#-?gKlr}Eeqifb{|So?HM&g91<J5P5=Ly{?(NNY{6`O~L5r@sJe3rNZn06%SLk); z9?hvE^Hr{!*G$<_doyzGn#*z*#}?)8dH=eYTgvc)T~}Jw!kCv68<+KL5{5?EXtDAZ zWeNqp8%KIuBi&icn5s815Vho<+99VW1~m@L8l0=$c`t-L{q))~<!p*~vCdUcBcPz` zyUi}!-k_`G{>P8|av8hQoCmQXkd?7wIJw<dY^{|7OQJUHKB~nksN_|Xy;DL?xjxU^ zbMa`WdfTBnr<wTd$mY&SgJ4U|X``k`#`gN@M+0x2W{YgC3kbLk<uYFJWglkx_)2#b ztRiuA!EK9o)f`I2k)l;Of%E`ff91WlZh8yfRi6#N-mC`Ma(yr~U82SyAhc9B+ur!f zP-3igg*KeYs9mGOAw@OaXYy9DnGjn0<m`JH&Q^h}^!h+uS9Ct*o-oEy(?iT6Yco>b z_^v8bbg`<ZOL)a;i=IdfK0Zvw4nXsoC?eTOMpY)_ptiORm%J(1CD3dE0Z%Vy<2iHp zcp>SAn{I*4bH$u(RZ6*x<DqKJ+5;a6Jq~=Y8V&c?Vsyq88!2nD?H?Eww58Mqt$7R8 z5BMjmKx>UhuA~hc=8czK8SHEKTzSxgbwi~9(OqJB&gwb^l4+m`k*Q;_?>Y-APi1{k zAHQ)P)G)f|AyjSgcCFps)Fh6Bca*Xznq3<?y%xNvu0N78_R?~<RDFQx0ynlRG(E|j zvEGN3bF<E_9p-I!UwQXFqcSGV#e^98tgFqLp+z9eP}y!jNA{)r*a+%M-_20xg?94< zzmM{}syi0cd&P)zywMdS&Y_9k5JDtOM!L)b^2WP!+fHYGv>6!pV6Az&m{O8$wGFD? zY&O*3*J0;_EqM#jh6^gMQKpXV?#1?>$ml1xvh8nSN>-?H=V;nJIwB07YX$e6vLxH( zqYwQ>qxwR(i4f)DLd)-$P>T-no_c!LsN@)8`e;W@)-Hj0>nJ-}Kla4-ZdPJzI&Mce zv)V_j;(3ERN3_@I$N<^|4Lf`B;8n+bX@bHbcZTopEmDI*Jfl)-pFDvo6svPRoo@(x z);_{lY<;);XzT`dBFpRmGrr}z5u1=p<K1~3>C^<jVp}L(pzgMB_Vs-O?{Z?y$8M;) zi@7zwpzV9#m72%En~(9@E)GWV^(~J*@^*K*TE0mynAnGJ5YSLCEnC42H-`tr4L=oW zI}N{xQ$HT8Q6CVHf%RY&xw7!Zj(0xmg(K#UQ4u!ej95z7V4phlcTJ2&AR}$)zV-s! zO7bqY6(=?1t+JCOW_z%HRE>S-{ce6iXQlLGcItwJ^mZx{m$&DA_oEZ)B{_bYPq-HA zcH8WGoBG(aBU_j)vEy+_71T34@4dmSg!|M8Vf92Zj6WH7Q7t#OHQqWgFE3ARt+%!T z?oLovLVlnf?2c7pTc)~cc^($_8nyKwsN`RA-23ed3sdj(ys%pjjM+9JrctL;dy8a( z@en&CQmnV(()bu|Y%G1-4a(6x{aLytn$T-;(&{QIJB9vMox11U-1HpD@d(QkaJdEb zG{)+6Dos_L+O3NpWo^=gR?evp|CqEG?L&Ut#D*KLaRFOgOEK(Kq1@!EGcTfo+%A&I z=dLbB+d$u{sh?u)xP{PF8L%;YPPW53+@{>5W=Jt#wQpN;0_HYdw1{ksf_XhO4#2F= zyPx6Lx2<92L-;L5PD`zn6zwIH`Jk(<gsVPionpJ-imI56$j4P0!br@ny3=!{x2TY^ zCD=)8_PgmN)E!^nczcDGc9Wm7oo5O3@fh=k=kh8J?_3KqEp7JHdv8z_iZ5#KmbiPt z2Bt8Ro^p$7pS!xL3mtj<iN3f}#r6_&$Es0PnJTE?c;0#$%cGdu`T%~`gW;c^VD-S= zrAatMf^%Lzr*wQ4kHSOb?WOUuEsJQ3xr{Imf1t{~iNmRwb_SP9!?FFN=b-E){!8P2 ztWCT~262O8`%?3<W4Wg+ovWY<re)?^kZ|Yi>$?Qw({erA$^bC;q33hv!d!>%wRhj# zal^hk+WGNg;rJtb-EB(?czvOM=H7dl=vblBwAv>}%1@{}mnpUznfq1cE^sgsL0*4I zJ##!*B?=vI_OEVis5o+_IwMIRrpQyT_Sq~ZU%oY7c5JMIADzpD!Upz9h@iWg_>>~j zOLS;wp^i$-E?4<_cp?RiS%Rd?i;f*mOz=~(&3lo<=@(nR!_Rqiprh@weZlL!t#NCc zO!QTcInq|%#>OVgobj{~ixEUec`E25zJ~*DofsQdzIa@5^nOXj2T;8O`l--(QyU<o zeu8G~Z>^$t?TGY^7#&FQ+2SS3B#qK*k3`ye?8jUYSajE5iBbJls75CCc(m3dk{t?- zopcER9{Z?TC)mk~gpi^kbbu>b-+a{m#8-y2^p$ka4n60w;Sc2}HMf<8JUvh<G@KZw z+<GL!lpeahq2+nO{>CL0B&Btk)T`ctE$*qNW8L$`7!r^9T+>=<=2qaq-;ll2{`{Rg zc5a0ZUI$oG&j-qVOuKa=*v4aY#IsoM+1|c4Z)<}lEDvy;5huB@1RJPquU2U*U-;gu z=En2m+qjBzR#DEJDO`WU)hdd{Vj%^0V*KoyZ|5lzV87&g_j~NCjwv0uQVqXOb*QrQ zy|Qn`hxx(58c<SELWpDAg~83oY-J_WoDiI6d7>70$E;L(X0uZZ72M1!6oeg)(cdKO ze0gDaTz+ohR-#d)NbAH4x{I(21yjwvBQfmpLu$)|m{XolbgF!pmsqJ#D}(ylp6uC> z{bqtcI#hT#HW=wl7>p!38sKsJ`r8}lt-q%Keqy%u(xk=yiIJiUw6|5IvkS+#?JTBl z8H5(Q?l#wzazujH!8o>1xtn8#_w+397*<wp?Ryt$UFh41$qd}LyNJ7Oao(Aw2g|wy zH_nZ+R#~EUME^#j4$@^5&>_cy8!pQGP%K(Ga3pAjsaTbbXJlQF_+m+-UpUUent@xM zg%jqLUExj~o^vQ3Gl*>wh=_gOr2*|U64_iXb+-111a<qXXnUI&{l`dM&{4Gw)jZn; zlj{VxW@#OcVE1Y%J*u^Z@H+XSqL6SwA|^jv2RU_+d;O!mk)dw7-m9B4{6*G1zRdR6 zQ}6v&Xt7R2h3Xp}EQk4nF2TULG{Ri=D|JC<a+K7dldN1}CY_f!vK#u}K3`g#TpO&W z;!;64`0$d9raD!VbYP`kuFUasaMh!;&81y}LHS(SuGRxwEn4LZb4DS1j9iAq$MXd@ z(Ebka7_Gc(ljGaJqtI-OzmA@c@sYB$)Vg!RP4~``vaVyRq$rJXRjIPwtepN;(B%wy zmU>H}$TjeajM+I20xw(((>fej-@CIz4S1pi$(#}P7`4({6QS2CaQS4NPENDp>sAqD z$bH4KGzXGffkJ7R>V>)>tC)uax{UsN*dbeNC*v}#8Y#OWYwL4t$ePR?VTyIs!wea+ z5Urmc)X|^`MG~*dS6pGSbU+gPJoq*^a=_>$n4|P^w$sMBBy@f*Z^Jg6?n5?oId6f{ z$LW4M|4m502z0t7g<#Bx%X;9<=)smFolV&(V^(7Cv2-sxbxopQ!)*#ZRhTBpx1)Fc zNm1T%bONzv6@#|dz(w02AH8OXe>kQ#1FMCzO}2J_mST)+ExmBr9cva-@?;wnmWMOk z{3_~EX_xadgJGv&H@zK_8{(x84`}+c?oSBX*Ge3VdfTt&F}yCpFP?CpW+BE^cWY0^ zb&uBN!Ja3UzYHK-CTyA5=L<c0d<h!DNBIa<xax8W3(Ru8L0cVXQ18|Y^|*S%)R96z zBT$(=zQ}2vmt6LzN~Oyf_Y92%P@QOx{7~}5!UIqCdfu?VwC0Nb!2@iiit8-5zUWFG z*G&+GLIU#J;}hvowNJWnglvb^<2q~lS#?ixVtYT@(O3{TC|4kFJYLB*jni-4YZi0> zEMW{l3Usky#ly=7px648W31UNV@K)&Ub&zP1c7%)`{);I4b0Q<)B}3;NMG2JH=X$U zfIW4)4n9ZM`-yRj67I)YSLDK)qfUJ_ij}a#aZN~9EXrh8eZY2&=uY%2N0UFF7<~%M zsB8=erOWZ>Ct_#^tHZ|*q`H;A)5;ycw*I<Cd*bZlOJ9YmRUK2<qXkpRR3nr6r~%Jz z*(8tA&DYO)etdgVmoonqD{*<5Fog4ClIs-~_uhjuZOI}#Wy+ce${%#oyHloXelqfz z8)?D3Y_>cmVxi8_0Xk}aJA^ath+E;xg!x+As(M#0=)3!NJR6H&9+zd#iP(m0PIW8$ z1Y^VX`>jm`W!=WpF*{ioM?C9`yOR>@0q=u7o>BP-eSHqCgMDj!2anwH?s%i2p+Q7D zzszIf5XJpE)IG4;d_(La-xenmF(tgAxK`Y4sQ}BSJEPs6N_U2vI{8=0C_F?@7<(G; zo$~G=8p+076G;`}>{MQ>t>7cm=zGtfbdDXm6||jUU|?X?CaE?(<6bKDYKeHlz}DA8 zXT={X=yp_R;HfJ9h%?eWvQ!dRgz&Su*JfNt!Wu>|XfU<MM~gB&J0gc}IH}?|B4WRK zWPL0FhctFGdMucOFdhrVunIe5)4K^H9IjB#eA)p5w?c#v7kp8jx^~bxxJB{;hPFL9 zkR9Dbpj+T5ZMgHQg|oj*DS;x&jK}1rn&}Shp9sgOI*7puQD-w?3H*cg72;5H(_zW* zApJBIM-p2~F;qWDj!n|Kd=5|T8OPkQ_G;ujgvKybr5@~eci2{8WAz+%NUSp-&eoG! zOGLNLJewWl&1*NT467W3god~fYgX?!f0?NCFnjD$qE-fyQ)|Q_DLc*{olmXSVl$g_ z$vj}o?RatMy(o*j8?q1Mgw{OUOgVR6_qvS<Co*&!cR`ROi|*I`ajyG5s@L8agnX2J zF=DLkMG`z{RP&996y0yAtvJcb<cba?TV#j4VYFPC>&68iRikRrHRW|ZxzRR^`eIGt zIeiDgVS>IeExKVRWW8-=<xUfo0v~z=RA=cFWKXgcMECd}xHp7iqkBanH}TZ0h0rA= zqxUZ>A=<k-RjTtwbJkkep{8z*173wY^e%-U0{Ue!n@wbg^2q)Vx5c(_RfvuR4}XXn z+JE>yA`}`)ZkWBrZD`hpWIxBGkh&f#ijr449~m`j6{4jiJ*C!oVA8ZC?$1RM#K(_b zL9TW)kN*Y4%^-qPpMP7d4)o?Nk#>aoYHT(*g)qmRUb?**F@pnNiy6Fv9rEiUqD(^O zzyS?nBrX63BTRYduaG(0VVG2yJRe%o&rVrLjbxTaAFTd8s;<<@Qs>u(<193R8>}2_ zuwp{7;H2a*X7_jryzriZXMg?bTuegABb^87@SsKkr2)0Gyiax8KQWstw^v<oS3Xw7 zu51m`3~hoyxErcHymdFTZd#AO59{EkuFTcpAR33(3xc{zRnn1~1Ei(i*^HdCvM~;; za&}Uip|u>#ix45EVrcEhr>!NMhprl<CqZuKa#zuI&@zymVzIicetS0bq#u?m(r_@S zJ79bl%4EyHCQ3fK@en+A1@)e}HWLP|gr_zuoA{}Z<(-*53Zu@k+=^%~5F(z$EFLI; z-TQTS8$W|GRbZq93Ha1?lu+`O;rn>$InQMzjSFH54x5k9qHc`@9uKQzvL4ihcq{^B zPrVR=o_ic%Y>6&rMN)hTZsI7I<3&`#(nl+3y3ys9A~<Ao%ZuW})CJ)6^(aRV(gGxR z89#(FDW;GZEAf;rI$+PU)rEV|rASrwP0_mr^Ldv)IuUf1M>&^=4?PL&nd8)`OfG#n zwAMN$1&>K++c{^|7<<q5KGu)u(OEfEJJw2aEi(;x-i=Y=j3ram9H2n-Fuqv0dVlXJ z&WgG5X({!vJFDrEbm+CWDca^zIe2@s1@a;;Y3!U9Q)&P0UXFmCP51_!wvTfAIyR^M z7^R*O@yz1b-s4VC>4P=2y(B{jJsQ0a#U;HTo4ZmWZYvI{+s;Td{Yzem%0*k#)vjpB zia;J&>}ICate44SFYY3vEelqStQWFihx%^vQ@Do(sOy7yR2@WNv7Y9I^yL=nZr3mb zXKV5t@=?-Sk|b{XMhA7ZGB@2hqsx}4xwCW!in#C<kr{U&JG{9FhoZ<aTve_lLz39> zI@}sc<h3gsW}hp-`WUywKA>Zlr3-NFJ@NFaJlhyfcw{k^vvtGl`N9xSo**rDW4S}i zM9{fMPWo%4wYDG~BZ18BD+}h|GQKc-g^{++3MY>}W_uq7jGHx{mwE9fZiPCoxN$+7 zrODGGJrOkcPQUB(FD5aoS4g~7#6NR^ma7-!>mHuJfY5kTe6PpNNKC9GGRiu^L31uG z$7v`*JknQHsYB!Tm_W{a32TM099djW%5e+j0Ve_ct}IM>XLF1Ap+YvcrLV=|CKo6S zb+<Td{{5RWR}u2f(q<b(D$9JsF0OOzJ*+z0P5kc1t}CXlYgua%x*2lSgp|*WS3H-# zdYr7?GQOL18zUS<2|;+vi4|4sQBM2Gs&WVS!D`q5Lz;XR@5rEfa{uG-!q?R8Ncz%( z5K6~LQ@d2wp#)5q4u<ENlFbS)U4o1t9{-d>9Nl3_YdKP6%Cxy@6TxZ>;4&nTneadr z_ES90ydCev)LV!dN=#(*f}|ZORFdvkYBni^aLbUk>BajeWIOcmHP#8S)*2U~QKI%S zyrLmtPqb&TphJ;>yAxri#;{uyk`JJqODDw%(Z=2<VfJZemI(PFAD{6Sm|uE%BTbkl zROsg*MOh20YgGs3H7?@pmQ>`1uc}br^V%>j!gS)D*q*f_-qf8&D;W1dJgQMlaH5er zN2U<%Smb7==vE}dDI8K7cKz!vs^73o9f>2sgiTzWcwY|BMYHH5%Vn7#kiw&eItCqa zIkR2~Q}>X=Ar8W|^Ms41Fm8o6IB2_j60eOeBB1Br!boW7JnoeX6Gs)?7rW0^5psc- zjS16yb>dFn>KPOF;imD}e!enuIniFzv}n$m2#gCCv4jM#ArwlzZ$7@9&XkFxZ4n!V zj3dyiwW4Ki2QG{@i>yuZXQizw_OkZI^-3otXC{!(lUpJF33gI60ak;Uqitp74|B6I zgg{b=Iz}WkhCGj1M<xTd?60J5qsr1Cg7F~~U2N!(@lC<>=hu4#Aw173YxIVbISaoc z-nLZC*6Tgivd5V`K%GxhBsp@SUU60-rfc$=wb>zdJzXS&-5(NRRodFk;Kxk!S(<ov z$YXcI9;^grAyiJ4dWTv3b}K~Ww09(;mLY4+kj|$A?IMr}`7q?mIS1>O(a0e7oY=E( zAyS;Ow?6Q&XA+cnkCb{28_1N8H#?J!*$MmIwLq^*T_9-z^&UE@A(z9oGYtFy6EZef LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/playground/nextjs/public/vercel.svg b/playground/nextjs/public/vercel.svg new file mode 100644 index 00000000000..fbf0e25a651 --- /dev/null +++ b/playground/nextjs/public/vercel.svg @@ -0,0 +1,4 @@ +<svg width="283" height="64" viewBox="0 0 283 64" fill="none" + xmlns="http://www.w3.org/2000/svg"> + <path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/> +</svg> \ No newline at end of file diff --git a/playground/nextjs/styles/Home.module.css b/playground/nextjs/styles/Home.module.css new file mode 100644 index 00000000000..83c0edbe20b --- /dev/null +++ b/playground/nextjs/styles/Home.module.css @@ -0,0 +1,129 @@ +.container { + padding: 0 2rem; +} + +.main { + min-height: 100vh; + padding: 4rem 0; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.footer { + display: flex; + flex: 1; + padding: 2rem 0; + border-top: 1px solid #eaeaea; + justify-content: center; + align-items: center; +} + +.footer a { + display: flex; + justify-content: center; + align-items: center; + flex-grow: 1; +} + +.title a { + color: #0070f3; + text-decoration: none; +} + +.title a:hover, +.title a:focus, +.title a:active { + text-decoration: underline; +} + +.title { + margin: 0; + line-height: 1.15; + font-size: 4rem; +} + +.title, +.description { + text-align: center; +} + +.description { + margin: 4rem 0; + line-height: 1.5; + font-size: 1.5rem; +} + +.code { + background: #fafafa; + border-radius: 5px; + padding: 0.75rem; + font-size: 1.1rem; + font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, + monospace; +} + +.grid { + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + max-width: 800px; +} + +.card { + margin: 1rem; + padding: 1.5rem; + text-align: left; + color: inherit; + text-decoration: none; + border: 1px solid #eaeaea; + border-radius: 10px; + transition: color 0.15s ease, border-color 0.15s ease; + max-width: 300px; +} + +.card:hover, +.card:focus, +.card:active { + color: #0070f3; + border-color: #0070f3; +} + +.card h2 { + margin: 0 0 1rem 0; + font-size: 1.5rem; +} + +.card p { + margin: 0; + font-size: 1.25rem; + line-height: 1.5; +} + +.logo { + height: 1em; + margin-left: 0.5rem; +} + +@media (max-width: 600px) { + .grid { + width: 100%; + flex-direction: column; + } +} + +@media (prefers-color-scheme: dark) { + .card, + .footer { + border-color: #222; + } + .code { + background: #111; + } + .logo img { + filter: invert(1); + } +} diff --git a/playground/nextjs/styles/globals.css b/playground/nextjs/styles/globals.css new file mode 100644 index 00000000000..aa3b7f2a5b3 --- /dev/null +++ b/playground/nextjs/styles/globals.css @@ -0,0 +1,26 @@ +html, +body { + padding: 0; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, + Helvetica Neue, sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +* { + box-sizing: border-box; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } + body { + color: white; + background: black; + } +} diff --git a/playground/nextjs/tsconfig.json b/playground/nextjs/tsconfig.json new file mode 100644 index 00000000000..99710e85787 --- /dev/null +++ b/playground/nextjs/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} From 49c97e2165eb54a430c22a74e86649e298205644 Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Mon, 10 Oct 2022 14:18:13 +0300 Subject: [PATCH 18/41] fix(clerk-js): Remove redundant code --- packages/clerk-js/src/ui/UserProfile/RootPage.tsx | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/packages/clerk-js/src/ui/UserProfile/RootPage.tsx b/packages/clerk-js/src/ui/UserProfile/RootPage.tsx index 4593f4d8025..71a1823f5d0 100644 --- a/packages/clerk-js/src/ui/UserProfile/RootPage.tsx +++ b/packages/clerk-js/src/ui/UserProfile/RootPage.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { useEnvironment } from '../contexts'; import { Col, descriptors, localizationKeys } from '../customizables'; -import { Header, Tab, TabPanel, TabPanels, Tabs, TabsList } from '../elements'; +import { Header } from '../elements'; import { ActiveDevicesSection } from './ActiveDevicesSection'; import { ConnectedAccountsSection } from './ConnectedAccountsSection'; import { EmailsSection } from './EmailSection'; @@ -45,19 +45,6 @@ export const RootPage = () => { </Header.Root> <UserProfileSection /> - <Tabs> - <TabsList> - <Tab>Active</Tab> - <Tab>Invited</Tab> - <Tab>Danger</Tab> - </TabsList> - <TabPanels> - <TabPanel>section 1</TabPanel> - <TabPanel>section 2</TabPanel> - <TabPanel>section 3</TabPanel> - </TabPanels> - </Tabs> - {showUsername && <UsernameSection />} {showEmail && <EmailsSection />} {showPhone && <PhoneSection />} From 1e34e6986ee49aeb9ca9f72cdc5d799d6611b53f Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Tue, 4 Oct 2022 11:11:11 +0300 Subject: [PATCH 19/41] feat(clerk-js,clerk-react,types): Wire up `OrganizationSwitcher` and `OrganizationProfile` --- packages/clerk-js/src/core/clerk.ts | 49 +++++++++- packages/clerk-js/src/ui/Components.tsx | 41 ++++++++- .../src/ui/customizables/parseAppearance.ts | 2 +- .../elements/contexts/FlowMetadataContext.tsx | 2 +- packages/clerk-js/src/ui/types.ts | 19 +++- .../react/src/components/uiComponents.tsx | 31 ++++++- packages/react/src/isomorphicClerk.ts | 52 +++++++++++ packages/types/src/appearance.ts | 10 +++ packages/types/src/clerk.ts | 90 ++++++++++++++++++- 9 files changed, 287 insertions(+), 9 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 2f419f0cab7..40d6f820abe 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -14,13 +14,17 @@ import type { ListenerCallback, OrganizationInvitationResource, OrganizationMembershipResource, + OrganizationProfileProps, OrganizationResource, + OrganizationSwitcherProps, RedirectOptions, Resources, + SetActiveParams, SignInProps, SignInResource, SignOut, SignOutCallback, + SignOutOptions, SignUpProps, SignUpResource, UnsubscribeCallback, @@ -28,7 +32,6 @@ import type { UserProfileProps, UserResource, } from '@clerk/types'; -import { SetActiveParams, SignOutOptions } from '@clerk/types/src'; import packageJSON from '../../package.json'; import type { ComponentControls, MountComponentRenderer } from '../ui'; @@ -205,6 +208,16 @@ export default class Clerk implements ClerkInterface { this.#componentControls?.closeModal('userProfile'); }; + public openOrganizationProfile = (props?: OrganizationProfileProps): void => { + this.assertComponentsReady(this.#componentControls); + this.#componentControls?.openModal('organizationProfile', props || {}); + }; + + public closeOrganizationProfile = (): void => { + this.assertComponentsReady(this.#componentControls); + this.#componentControls?.closeModal('organizationProfile'); + }; + public mountSignIn = (node: HTMLDivElement, props?: SignInProps): void => { this.assertComponentsReady(this.#componentControls); this.#componentControls.mountComponent({ @@ -256,6 +269,40 @@ export default class Clerk implements ClerkInterface { }); }; + public mountOrganizationProfile = (node: HTMLDivElement, props?: OrganizationProfileProps): void => { + this.assertComponentsReady(this.#componentControls); + this.#componentControls.mountComponent({ + name: 'OrganizationProfile', + appearanceKey: 'userProfile', + node, + props, + }); + }; + + public unmountOrganizationProfile = (node: HTMLDivElement): void => { + this.assertComponentsReady(this.#componentControls); + this.#componentControls.unmountComponent({ + node, + }); + }; + + public mountOrganizationSwitcher = (node: HTMLDivElement, props?: OrganizationSwitcherProps): void => { + this.assertComponentsReady(this.#componentControls); + this.#componentControls.mountComponent({ + name: 'OrganizationSwitcher', + appearanceKey: 'userProfile', + node, + props, + }); + }; + + public unmountOrganizationSwitcher = (node: HTMLDivElement): void => { + this.assertComponentsReady(this.#componentControls); + this.#componentControls.unmountComponent({ + node, + }); + }; + public mountUserButton = (node: HTMLDivElement, props?: UserButtonProps): void => { this.assertComponentsReady(this.#componentControls); this.#componentControls.mountComponent({ diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx index 66ad14bcbb1..7c488a0b868 100644 --- a/packages/clerk-js/src/ui/Components.tsx +++ b/packages/clerk-js/src/ui/Components.tsx @@ -1,4 +1,5 @@ import type { Appearance, Clerk, ClerkOptions, EnvironmentResource, SignInProps, SignUpProps } from '@clerk/types'; +import { OrganizationProfileProps } from '@clerk/types'; import { UserProfileProps } from '@clerk/types/src'; import React from 'react'; import ReactDOM from 'react-dom'; @@ -43,11 +44,11 @@ export type ComponentControls = { node?: HTMLDivElement; props?: unknown; }) => void; - openModal: <T extends 'signIn' | 'signUp' | 'userProfile'>( + openModal: <T extends 'signIn' | 'signUp' | 'userProfile' | 'organizationProfile'>( modal: T, props: T extends 'signIn' ? SignInProps : T extends 'signUp' ? SignUpProps : UserProfileProps, ) => void; - closeModal: (modal: 'signIn' | 'signUp' | 'userProfile') => void; + closeModal: (modal: 'signIn' | 'signUp' | 'userProfile' | 'organizationProfile') => void; }; const AvailableComponents = { @@ -55,6 +56,8 @@ const AvailableComponents = { SignUp, UserButton, UserProfile, + OrganizationProfile: () => <div>hello from org profile</div>, + OrganizationSwitcher: () => <div>hello from org switcher</div>, }; type AvailableComponentNames = keyof typeof AvailableComponents; @@ -78,6 +81,7 @@ interface ComponentsState { signInModal: null | SignInProps; signUpModal: null | SignUpProps; userProfileModal: null | UserProfileProps; + organizationProfileModal: null | OrganizationProfileProps; nodes: Map<HTMLDivElement, HtmlNodeOptions>; } @@ -125,9 +129,10 @@ const Components = (props: ComponentsProps) => { signInModal: null, signUpModal: null, userProfileModal: null, + organizationProfileModal: null, nodes: new Map(), }); - const { signInModal, signUpModal, userProfileModal, nodes } = state; + const { signInModal, signUpModal, userProfileModal, organizationProfileModal, nodes } = state; useSafeLayoutEffect(() => { componentsControls.mountComponent = params => { @@ -255,6 +260,35 @@ const Components = (props: ComponentsProps) => { </AppearanceProvider> ); + const mountedOrganizationProfileModal = ( + <AppearanceProvider + globalAppearance={state.appearance} + appearanceKey='organizationProfile' + appearance={organizationProfileModal?.appearance} + > + <FlowMetadataProvider flow='organizationProfile'> + <InternalThemeProvider> + <Modal + handleClose={() => componentsControls.closeModal('organizationProfile')} + containerSx={{ alignItems: 'center' }} + contentSx={t => ({ + height: `min(${t.sizes.$176}, calc(100% - ${t.sizes.$12}))`, + margin: 0, + })} + > + <VirtualRouter + preservedParams={PRESERVED_QUERYSTRING_PARAMS} + onExternalNavigate={() => componentsControls.closeModal('organizationProfile')} + startPath='/user' + > + hello from org profil + </VirtualRouter> + </Modal> + </InternalThemeProvider> + </FlowMetadataProvider> + </AppearanceProvider> + ); + const mountedImpersonationFab = ( <AppearanceProvider globalAppearance={state.appearance} @@ -292,6 +326,7 @@ const Components = (props: ComponentsProps) => { {signInModal && mountedSignInModal} {signUpModal && mountedSignUpModal} {userProfileModal && mountedUserProfileModal} + {organizationProfileModal && mountedOrganizationProfileModal} {mountedImpersonationFab} </OptionsProvider> </EnvironmentProvider> diff --git a/packages/clerk-js/src/ui/customizables/parseAppearance.ts b/packages/clerk-js/src/ui/customizables/parseAppearance.ts index 57254aea1ff..0b595c043fa 100644 --- a/packages/clerk-js/src/ui/customizables/parseAppearance.ts +++ b/packages/clerk-js/src/ui/customizables/parseAppearance.ts @@ -17,7 +17,7 @@ export type ParsedElements = Elements[]; export type ParsedInternalTheme = InternalTheme; export type ParsedLayout = Required<Layout>; -type PublicAppearanceTopLevelKey = keyof Pick<Appearance, 'signIn' | 'signUp' | 'userProfile' | 'userButton'>; +type PublicAppearanceTopLevelKey = keyof Omit<Appearance, 'baseTheme' | 'elements' | 'layout' | 'variables'>; export type AppearanceCascade = { globalAppearance?: Appearance; diff --git a/packages/clerk-js/src/ui/elements/contexts/FlowMetadataContext.tsx b/packages/clerk-js/src/ui/elements/contexts/FlowMetadataContext.tsx index a17fbcb26ea..64737600a37 100644 --- a/packages/clerk-js/src/ui/elements/contexts/FlowMetadataContext.tsx +++ b/packages/clerk-js/src/ui/elements/contexts/FlowMetadataContext.tsx @@ -3,7 +3,7 @@ import React from 'react'; import { createContextAndHook } from '../../utils'; type FlowMetadata = { - flow: 'signIn' | 'signUp' | 'userButton' | 'userProfile'; + flow: 'signIn' | 'signUp' | 'userButton' | 'userProfile' | 'organizationProfile' | 'organizationSwitcher'; part?: | 'start' | 'emailCode' diff --git a/packages/clerk-js/src/ui/types.ts b/packages/clerk-js/src/ui/types.ts index 0f0b8b2a378..e26645e0da5 100644 --- a/packages/clerk-js/src/ui/types.ts +++ b/packages/clerk-js/src/ui/types.ts @@ -1,4 +1,5 @@ import type { SignInProps, SignUpProps, UserButtonProps, UserProfileProps } from '@clerk/types'; +import { OrganizationProfileProps, OrganizationSwitcherProps } from '@clerk/types'; export type { SignInProps, SignUpProps, UserButtonProps, UserProfileProps }; @@ -26,4 +27,20 @@ export type UserButtonCtx = UserButtonProps & { mode?: ComponentMode; }; -export type AvailableComponentCtx = SignInCtx | SignUpCtx | UserButtonCtx | UserProfileCtx; +export type OrganizationProfileCtx = OrganizationProfileProps & { + componentName: 'OrganizationProfile'; + mode?: ComponentMode; +}; + +export type OrganizationSwitcherCtx = OrganizationSwitcherProps & { + componentName: 'OrganizationSwitcher'; + mode?: ComponentMode; +}; + +export type AvailableComponentCtx = + | SignInCtx + | SignUpCtx + | UserButtonCtx + | UserProfileCtx + | OrganizationProfileCtx + | OrganizationSwitcherCtx; diff --git a/packages/react/src/components/uiComponents.tsx b/packages/react/src/components/uiComponents.tsx index 185c73c27ba..39b2a28c435 100644 --- a/packages/react/src/components/uiComponents.tsx +++ b/packages/react/src/components/uiComponents.tsx @@ -1,4 +1,11 @@ -import { SignInProps, SignUpProps, UserButtonProps, UserProfileProps } from '@clerk/types'; +import { + OrganizationProfileProps, + OrganizationSwitcherProps, + SignInProps, + SignUpProps, + UserButtonProps, + UserProfileProps, +} from '@clerk/types'; import React from 'react'; import { MountProps, WithClerkProp } from '../types'; @@ -101,3 +108,25 @@ export const UserButton = withClerk(({ clerk, ...props }: WithClerkProp<UserButt /> ); }, 'UserButton'); + +export const OrganizationProfile = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationProfileProps>) => { + return ( + <Portal + mount={clerk.mountOrganizationProfile} + unmount={clerk.unmountOrganizationProfile} + updateProps={(clerk as any).__unstable__updateProps} + props={props} + /> + ); +}, 'OrganizationProfile'); + +export const OrganizationSwitcher = withClerk(({ clerk, ...props }: WithClerkProp<OrganizationSwitcherProps>) => { + return ( + <Portal + mount={clerk.mountOrganizationSwitcher} + unmount={clerk.unmountOrganizationSwitcher} + updateProps={(clerk as any).__unstable__updateProps} + props={props} + /> + ); +}, 'OrganizationSwitcher'); diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index c0f71874e9a..2a66db14544 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -19,6 +19,7 @@ import type { UserProfileProps, UserResource, } from '@clerk/types'; +import { OrganizationProfileProps, OrganizationSwitcherProps } from '@clerk/types/src'; import { noFrontendApiError } from './errors'; import type { BrowserClerk, BrowserClerkConstructor, ClerkProp, IsomorphicClerkOptions } from './types'; @@ -50,10 +51,13 @@ export default class IsomorphicClerk { private preopenSignIn?: null | SignInProps = null; private preopenSignUp?: null | SignUpProps = null; private preopenUserProfile?: null | UserProfileProps = null; + private preopenOrganizationProfile?: null | OrganizationProfileProps = null; private premountSignInNodes = new Map<HTMLDivElement, SignInProps>(); private premountSignUpNodes = new Map<HTMLDivElement, SignUpProps>(); private premountUserProfileNodes = new Map<HTMLDivElement, UserProfileProps>(); private premountUserButtonNodes = new Map<HTMLDivElement, UserButtonProps>(); + private premountOrganizationProfileNodes = new Map<HTMLDivElement, OrganizationProfileProps>(); + private premountOrganizationSwitcherNodes = new Map<HTMLDivElement, OrganizationSwitcherProps>(); private premountMethodCalls = new Map<MethodName<BrowserClerk>, MethodCallback>(); private loadedListeners: Array<() => void> = []; @@ -321,6 +325,22 @@ export default class IsomorphicClerk { } }; + openOrganizationProfile = (props?: OrganizationProfileProps): void => { + if (this.clerkjs && this.#loaded) { + this.clerkjs.openOrganizationProfile(props); + } else { + this.preopenOrganizationProfile = props; + } + }; + + closeOrganizationProfile = (): void => { + if (this.clerkjs && this.#loaded) { + this.clerkjs.closeOrganizationProfile(); + } else { + this.preopenOrganizationProfile = null; + } + }; + openSignUp = (props?: SignUpProps): void => { if (this.clerkjs && this.#loaded) { this.clerkjs.openSignUp(props); @@ -385,6 +405,38 @@ export default class IsomorphicClerk { } }; + mountOrganizationProfile = (node: HTMLDivElement, props: OrganizationProfileProps): void => { + if (this.clerkjs && this.#loaded) { + this.clerkjs.mountOrganizationProfile(node, props); + } else { + this.premountOrganizationProfileNodes.set(node, props); + } + }; + + unmountOrganizationProfile = (node: HTMLDivElement): void => { + if (this.clerkjs && this.#loaded) { + this.clerkjs.unmountOrganizationProfile(node); + } else { + this.premountOrganizationProfileNodes.delete(node); + } + }; + + mountOrganizationSwitcher = (node: HTMLDivElement, props: OrganizationSwitcherProps): void => { + if (this.clerkjs && this.#loaded) { + this.clerkjs.mountOrganizationSwitcher(node, props); + } else { + this.premountOrganizationSwitcherNodes.set(node, props); + } + }; + + unmountOrganizationSwitcher = (node: HTMLDivElement): void => { + if (this.clerkjs && this.#loaded) { + this.clerkjs.unmountOrganizationSwitcher(node); + } else { + this.premountOrganizationSwitcherNodes.delete(node); + } + }; + mountUserButton = (node: HTMLDivElement, userButtonProps: UserButtonProps): void => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountUserButton(node, userButtonProps); diff --git a/packages/types/src/appearance.ts b/packages/types/src/appearance.ts index 8158a3e76fc..f36c7b196dd 100644 --- a/packages/types/src/appearance.ts +++ b/packages/types/src/appearance.ts @@ -505,6 +505,8 @@ export type SignInTheme = Theme; export type SignUpTheme = Theme; export type UserButtonTheme = Theme; export type UserProfileTheme = Theme; +export type OrganizationSwitcherTheme = Theme; +export type OrganizationProfileTheme = Theme; export type Appearance<T = Theme> = T & { /** @@ -523,4 +525,12 @@ export type Appearance<T = Theme> = T & { * Theme overrides that only apply to the `<UserProfile/>` component */ userProfile?: T; + /** + * Theme overrides that only apply to the `<OrganizationSwitcher/>` component + */ + organizationSwitcher?: T; + /** + * Theme overrides that only apply to the `<OrganizationProfile/>` component + */ + organizationProfile?: T; }; diff --git a/packages/types/src/clerk.ts b/packages/types/src/clerk.ts index 034ad9a80ae..24a1944196f 100644 --- a/packages/types/src/clerk.ts +++ b/packages/types/src/clerk.ts @@ -1,4 +1,12 @@ -import { Appearance, SignInTheme, SignUpTheme, UserButtonTheme, UserProfileTheme } from './appearance'; +import { + Appearance, + OrganizationProfileTheme, + OrganizationSwitcherTheme, + SignInTheme, + SignUpTheme, + UserButtonTheme, + UserProfileTheme, +} from './appearance'; import { ClientResource } from './client'; import { DisplayThemeJSON } from './json'; import { LocalizationResource } from './localization'; @@ -98,6 +106,17 @@ export interface Clerk { */ closeUserProfile: () => void; + /** + * Opens the Clerk OrganizationProfile modal. + * @param props Optional props that will be passed to the OrganizationProfile component. + */ + openOrganizationProfile: (props?: OrganizationProfileProps) => void; + + /** + * Closes the Clerk OrganizationProfile modal. + */ + closeOrganizationProfile: () => void; + /** * Mounts a sign in flow component at the target element. * @param targetNode Target node to mount the SignIn component. @@ -161,6 +180,32 @@ export interface Clerk { */ unmountUserProfile: (targetNode: HTMLDivElement) => void; + /** + * Mount an organization profile component at the target element. + * @param targetNode Target to mount the UserProfile component. + * @param props Configuration parameters. + */ + mountOrganizationProfile: (targetNode: HTMLDivElement, props?: OrganizationProfileProps) => void; + + /** + * Unmount the organization profile component from the target node. + * @param targetNode Target node to unmount the UserProfile component from. + */ + unmountOrganizationProfile: (targetNode: HTMLDivElement) => void; + + /** + * Mount an organization switcher component at the target element. + * @param targetNode Target to mount the UserProfile component. + * @param props Configuration parameters. + */ + mountOrganizationSwitcher: (targetNode: HTMLDivElement, props?: OrganizationSwitcherProps) => void; + + /** + * Unmount the organization profile component from the target node.* + * @param targetNode Target node to unmount the UserProfile component from. + */ + unmountOrganizationSwitcher: (targetNode: HTMLDivElement) => void; + /** * Register a listener that triggers a callback each time important Clerk resources are changed. * Allows to hook up at different steps in the sign up, sign in processes. @@ -436,6 +481,31 @@ export type UserProfileProps = { appearance?: UserProfileTheme; }; +export type OrganizationProfileProps = { + /* + * Page routing strategy + */ + routing?: RoutingStrategy; + /* + * Root URL where the component is mounted on, eg: '/user' + */ + path?: string; + /* + * Hides the default navigation bar + */ + hideNavigation?: boolean; + /* + * Renders only a specific view of the component eg: 'security' + */ + only?: 'account' | 'security'; + /** + * Customisation options to fully match the Clerk components to your own brand. + * These options serve as overrides and will be merged with the global `appearance` + * prop of ClerkProvided (if one is provided) + */ + appearance?: OrganizationProfileTheme; +}; + export type UserButtonProps = { /** * Controls if the username is displayed next to the trigger button @@ -483,6 +553,24 @@ export type UserButtonProps = { appearance?: UserButtonTheme & { userProfile?: UserProfileTheme }; }; +export type OrganizationSwitcherProps = { + /** + Controls the default state of the OrganizationSwitcher + */ + defaultOpen?: boolean; + /** + * Full URL or path to navigate after successful account change. + * Multi-session mode only. + */ + afterSwitchSessionUrl?: string; + /** + * Customisation options to fully match the Clerk components to your own brand. + * These options serve as overrides and will be merged with the global `appearance` + * prop of ClerkProvided (if one is provided) + */ + appearance?: OrganizationSwitcherTheme; +}; + export interface HandleMagicLinkVerificationParams { /** * Full URL or path to navigate after successful magic link verification From 16a91fe681ff694894f327fa14404b00fa73bbfa Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Mon, 10 Oct 2022 21:52:57 +0300 Subject: [PATCH 20/41] chore(clerk-js): Move all prebuilt components under ui/components --- packages/clerk-js/src/ui/Components.tsx | 8 +++---- .../src/ui/SignIn/SignInSSOCallback.tsx | 4 ---- .../src/ui/SignUp/SignUpSSOCallback.tsx | 4 ---- .../src/ui/common/EmailLinkVerify.tsx | 2 +- .../SignIn/AlternativeMethods.tsx | 10 ++++---- .../{ => components}/SignIn/HavingTrouble.tsx | 6 ++--- .../src/ui/{ => components}/SignIn/SignIn.tsx | 8 +++---- .../SignIn/SignInAccountSwitcher.tsx | 18 +++++++------- .../SignIn/SignInFactorOne.tsx | 8 +++---- .../SignIn/SignInFactorOneCodeForm.tsx | 16 ++++++------- .../SignIn/SignInFactorOneEmailCodeCard.tsx | 4 ++-- .../SignIn/SignInFactorOneEmailLinkCard.tsx | 18 +++++++------- .../SignIn/SignInFactorOnePasswordCard.tsx | 14 +++++------ .../SignIn/SignInFactorOnePhoneCodeCard.tsx | 4 ++-- .../SignIn/SignInFactorTwo.tsx | 6 ++--- .../SignInFactorTwoAlternativeMethods.tsx | 10 ++++---- .../SignIn/SignInFactorTwoBackupCodeCard.tsx | 12 +++++----- .../SignIn/SignInFactorTwoCodeForm.tsx | 12 +++++----- .../SignIn/SignInFactorTwoPhoneCodeCard.tsx | 4 ++-- .../SignIn/SignInFactorTwoTOTPCard.tsx | 2 +- .../components/SignIn/SignInSSOCallback.tsx | 4 ++++ .../SignIn/SignInSocialButtons.tsx | 14 +++++------ .../{ => components}/SignIn/SignInStart.tsx | 24 +++++++++---------- .../src/ui/{ => components}/SignIn/index.ts | 0 .../strategies/factorSortingUtils.test.tsx | 0 .../SignIn/strategies/factorSortingUtils.tsx | 0 .../ui/{ => components}/SignIn/utils.test.ts | 0 .../src/ui/{ => components}/SignIn/utils.ts | 4 ++-- .../src/ui/{ => components}/SignUp/SignUp.tsx | 8 +++---- .../SignUp/SignUpContinue.tsx | 14 +++++------ .../SignUp/SignUpEmailCodeCard.tsx | 4 ++-- .../SignUp/SignUpEmailLinkCard.tsx | 18 +++++++------- .../ui/{ => components}/SignUp/SignUpForm.tsx | 6 ++--- .../SignUp/SignUpPhoneCodeCard.tsx | 6 ++--- .../components/SignUp/SignUpSSOCallback.tsx | 4 ++++ .../SignUp/SignUpSocialButtons.tsx | 14 +++++------ .../{ => components}/SignUp/SignUpStart.tsx | 20 ++++++++-------- .../SignUp/SignUpVerificationCodeForm.tsx | 8 +++---- .../SignUp/SignUpVerifyEmail.tsx | 4 ++-- .../SignUp/SignUpVerifyPhone.tsx | 0 .../src/ui/{ => components}/SignUp/index.ts | 0 .../SignUp/signUpFormHelpers.test.ts | 0 .../SignUp/signUpFormHelpers.ts | 2 +- .../ui/{ => components}/SignUp/util.test.ts | 0 .../src/ui/{ => components}/SignUp/util.ts | 0 .../UserButton/CurrentAccountActions.tsx | 10 ++++---- .../UserButton/OtherSessionActions.tsx | 8 +++---- .../UserButton/UserButton.tsx | 12 +++++----- .../UserButton/UserButtonPopover.tsx | 12 +++++----- .../UserButton/UserButtonTrigger.tsx | 8 +++---- .../ui/{ => components}/UserButton/index.ts | 0 .../UserButton/useMultisessionActions.tsx | 10 ++++---- .../UserProfile/ActiveDevicesSection.tsx | 10 ++++---- .../UserProfile/AddAuthenticatorApp.tsx | 8 +++---- .../UserProfile/Breadcrumbs.tsx | 6 ++--- .../UserProfile/ConnectedAccountsPage.tsx | 14 +++++------ .../UserProfile/ConnectedAccountsSection.tsx | 12 +++++----- .../{ => components}/UserProfile/Content.tsx | 6 ++--- .../UserProfile/EmailPage.tsx | 12 +++++----- .../UserProfile/EmailSection.tsx | 10 ++++---- .../UserProfile/FormButtons.tsx | 6 ++--- .../UserProfile/LinkButtonWithDescription.tsx | 6 ++--- .../UserProfile/MfaBackupCodeAccordion.tsx | 6 ++--- .../UserProfile/MfaBackupCodeCreatePage.tsx | 8 +++---- .../UserProfile/MfaBackupCodeList.tsx | 12 +++++----- .../UserProfile/MfaBackupCodePage.tsx | 6 ++--- .../UserProfile/MfaBackupCodeTile.tsx | 2 +- .../{ => components}/UserProfile/MfaPage.tsx | 10 ++++---- .../UserProfile/MfaPhoneCodeAccordion.tsx | 10 ++++---- .../UserProfile/MfaPhoneCodePage.tsx | 10 ++++---- .../UserProfile/MfaSection.tsx | 6 ++--- .../UserProfile/MfaTOTPAccordion.tsx | 6 ++--- .../UserProfile/MfaTOTPPage.tsx | 4 ++-- .../{ => components}/UserProfile/Navbar.tsx | 12 +++++----- .../UserProfile/NavigateToFlowStartButton.tsx | 6 ++--- .../ui/{ => components}/UserProfile/Page.tsx | 6 ++--- .../UserProfile/PasswordPage.tsx | 10 ++++---- .../UserProfile/PasswordSection.tsx | 6 ++--- .../UserProfile/PhonePage.tsx | 12 +++++----- .../UserProfile/PhoneSection.tsx | 10 ++++---- .../UserProfile/ProfilePage.tsx | 10 ++++---- .../UserProfile/RemoveResourcePage.tsx | 14 +++++------ .../{ => components}/UserProfile/RootPage.tsx | 10 ++++---- .../{ => components}/UserProfile/Section.tsx | 6 ++--- .../UserProfile/SuccessPage.tsx | 2 +- .../UserProfile/UserProfile.tsx | 10 ++++---- .../UserProfile/UserProfileAccordion.tsx | 6 ++--- .../UserProfile/UserProfileBlockButtons.tsx | 8 +++---- .../UserProfile/UserProfileSection.tsx | 8 +++---- .../UserProfile/UsernamePage.tsx | 10 ++++---- .../UserProfile/UsernameSection.tsx | 6 ++--- .../UserProfile/VerifyTOTP.tsx | 12 +++++----- .../UserProfile/VerifyWithCode.tsx | 10 ++++---- .../UserProfile/VerifyWithLink.tsx | 14 +++++------ .../{ => components}/UserProfile/Web3Page.tsx | 16 ++++++------- .../UserProfile/Web3Section.tsx | 8 +++---- .../ui/{ => components}/UserProfile/index.ts | 0 .../ui/{ => components}/UserProfile/utils.ts | 0 98 files changed, 383 insertions(+), 383 deletions(-) delete mode 100644 packages/clerk-js/src/ui/SignIn/SignInSSOCallback.tsx delete mode 100644 packages/clerk-js/src/ui/SignUp/SignUpSSOCallback.tsx rename packages/clerk-js/src/ui/{ => components}/SignIn/AlternativeMethods.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/SignIn/HavingTrouble.tsx (66%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignIn.tsx (90%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInAccountSwitcher.tsx (84%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorOne.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorOneCodeForm.tsx (87%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorOneEmailCodeCard.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorOneEmailLinkCard.tsx (87%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorOnePasswordCard.tsx (88%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorOnePhoneCodeCard.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorTwo.tsx (93%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorTwoAlternativeMethods.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorTwoBackupCodeCard.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorTwoCodeForm.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorTwoPhoneCodeCard.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInFactorTwoTOTPCard.tsx (92%) create mode 100644 packages/clerk-js/src/ui/components/SignIn/SignInSSOCallback.tsx rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInSocialButtons.tsx (75%) rename packages/clerk-js/src/ui/{ => components}/SignIn/SignInStart.tsx (92%) rename packages/clerk-js/src/ui/{ => components}/SignIn/index.ts (100%) rename packages/clerk-js/src/ui/{ => components}/SignIn/strategies/factorSortingUtils.test.tsx (100%) rename packages/clerk-js/src/ui/{ => components}/SignIn/strategies/factorSortingUtils.tsx (100%) rename packages/clerk-js/src/ui/{ => components}/SignIn/utils.test.ts (100%) rename packages/clerk-js/src/ui/{ => components}/SignIn/utils.ts (97%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUp.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpContinue.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpEmailCodeCard.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpEmailLinkCard.tsx (84%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpForm.tsx (96%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpPhoneCodeCard.tsx (88%) create mode 100644 packages/clerk-js/src/ui/components/SignUp/SignUpSSOCallback.tsx rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpSocialButtons.tsx (76%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpStart.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpVerificationCodeForm.tsx (90%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpVerifyEmail.tsx (82%) rename packages/clerk-js/src/ui/{ => components}/SignUp/SignUpVerifyPhone.tsx (100%) rename packages/clerk-js/src/ui/{ => components}/SignUp/index.ts (100%) rename packages/clerk-js/src/ui/{ => components}/SignUp/signUpFormHelpers.test.ts (100%) rename packages/clerk-js/src/ui/{ => components}/SignUp/signUpFormHelpers.ts (99%) rename packages/clerk-js/src/ui/{ => components}/SignUp/util.test.ts (100%) rename packages/clerk-js/src/ui/{ => components}/SignUp/util.ts (100%) rename packages/clerk-js/src/ui/{ => components}/UserButton/CurrentAccountActions.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/UserButton/OtherSessionActions.tsx (84%) rename packages/clerk-js/src/ui/{ => components}/UserButton/UserButton.tsx (81%) rename packages/clerk-js/src/ui/{ => components}/UserButton/UserButtonPopover.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/UserButton/UserButtonTrigger.tsx (78%) rename packages/clerk-js/src/ui/{ => components}/UserButton/index.ts (100%) rename packages/clerk-js/src/ui/{ => components}/UserButton/useMultisessionActions.tsx (90%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/ActiveDevicesSection.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/AddAuthenticatorApp.tsx (94%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/Breadcrumbs.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/ConnectedAccountsPage.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/ConnectedAccountsSection.tsx (92%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/Content.tsx (96%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/EmailPage.tsx (90%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/EmailSection.tsx (94%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/FormButtons.tsx (87%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/LinkButtonWithDescription.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaBackupCodeAccordion.tsx (86%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaBackupCodeCreatePage.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaBackupCodeList.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaBackupCodePage.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaBackupCodeTile.tsx (87%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaPage.tsx (93%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaPhoneCodeAccordion.tsx (88%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaPhoneCodePage.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaSection.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaTOTPAccordion.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/MfaTOTPPage.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/Navbar.tsx (95%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/NavigateToFlowStartButton.tsx (82%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/Page.tsx (81%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/PasswordPage.tsx (88%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/PasswordSection.tsx (86%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/PhonePage.tsx (90%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/PhoneSection.tsx (94%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/ProfilePage.tsx (93%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/RemoveResourcePage.tsx (93%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/RootPage.tsx (89%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/Section.tsx (91%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/SuccessPage.tsx (93%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/UserProfile.tsx (84%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/UserProfileAccordion.tsx (60%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/UserProfileBlockButtons.tsx (80%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/UserProfileSection.tsx (78%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/UsernamePage.tsx (83%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/UsernameSection.tsx (85%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/VerifyTOTP.tsx (85%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/VerifyWithCode.tsx (88%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/VerifyWithLink.tsx (84%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/Web3Page.tsx (92%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/Web3Section.tsx (90%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/index.ts (100%) rename packages/clerk-js/src/ui/{ => components}/UserProfile/utils.ts (100%) diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx index 7c488a0b868..b1d81282239 100644 --- a/packages/clerk-js/src/ui/Components.tsx +++ b/packages/clerk-js/src/ui/Components.tsx @@ -6,6 +6,10 @@ import ReactDOM from 'react-dom'; import { PRESERVED_QUERYSTRING_PARAMS } from '../core/constants'; import { clerkUIErrorDOMElementNotFound } from '../core/errors'; +import { SignIn, SignInModal } from './components/SignIn'; +import { SignUp, SignUpModal } from './components/SignUp'; +import { UserButton } from './components/UserButton'; +import { UserProfile, UserProfileModal } from './components/UserProfile'; import { EnvironmentProvider, OptionsProvider } from './contexts'; import { CoreClerkContextWrapper } from './contexts/CoreClerkContextWrapper'; import { AppearanceProvider } from './customizables'; @@ -14,13 +18,9 @@ import { useSafeLayoutEffect } from './hooks'; import { ImpersonationFab } from './ImpersonationFab'; import Portal from './portal'; import { VirtualRouter } from './router'; -import { SignIn, SignInModal } from './SignIn'; -import { SignUp, SignUpModal } from './SignUp'; import { InternalThemeProvider } from './styledSystem'; import type { AvailableComponentProps } from './types'; import { AvailableComponentCtx } from './types'; -import { UserButton } from './UserButton'; -import { UserProfile, UserProfileModal } from './UserProfile'; const ROOT_ELEMENT_ID = 'clerk-components'; diff --git a/packages/clerk-js/src/ui/SignIn/SignInSSOCallback.tsx b/packages/clerk-js/src/ui/SignIn/SignInSSOCallback.tsx deleted file mode 100644 index 436921c04a3..00000000000 --- a/packages/clerk-js/src/ui/SignIn/SignInSSOCallback.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { SSOCallback } from '../common'; - -export const SignInSSOCallback = withRedirectToHome(SSOCallback); diff --git a/packages/clerk-js/src/ui/SignUp/SignUpSSOCallback.tsx b/packages/clerk-js/src/ui/SignUp/SignUpSSOCallback.tsx deleted file mode 100644 index f3c7c019d2a..00000000000 --- a/packages/clerk-js/src/ui/SignUp/SignUpSSOCallback.tsx +++ /dev/null @@ -1,4 +0,0 @@ -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { SSOCallback } from '../common'; - -export const SignUpSSOCallback = withRedirectToHome(SSOCallback); diff --git a/packages/clerk-js/src/ui/common/EmailLinkVerify.tsx b/packages/clerk-js/src/ui/common/EmailLinkVerify.tsx index 6976e0a11e5..875add973b1 100644 --- a/packages/clerk-js/src/ui/common/EmailLinkVerify.tsx +++ b/packages/clerk-js/src/ui/common/EmailLinkVerify.tsx @@ -2,9 +2,9 @@ import React from 'react'; import { isMagicLinkError, MagicLinkErrorCode } from '../../core/resources/Error'; import { VerificationStatus } from '../../utils/getClerkQueryParam'; +import { completeSignUpFlow } from '../components/SignUp/util'; import { useCoreClerk, useCoreSignUp } from '../contexts'; import { useNavigate } from '../hooks/useNavigate'; -import { completeSignUpFlow } from '../SignUp/util'; import { sleep } from '../utils'; import { EmailLinkStatusCard } from './EmailLinkStatusCard'; diff --git a/packages/clerk-js/src/ui/SignIn/AlternativeMethods.tsx b/packages/clerk-js/src/ui/components/SignIn/AlternativeMethods.tsx similarity index 95% rename from packages/clerk-js/src/ui/SignIn/AlternativeMethods.tsx rename to packages/clerk-js/src/ui/components/SignIn/AlternativeMethods.tsx index 08000b64c95..378b9b9ced4 100644 --- a/packages/clerk-js/src/ui/SignIn/AlternativeMethods.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/AlternativeMethods.tsx @@ -1,11 +1,11 @@ import { SignInFactor } from '@clerk/types'; import React from 'react'; -import { useCoreSignIn } from '../../ui/contexts/'; -import { descriptors, Flex, Flow, LocalizationKey, localizationKeys } from '../customizables'; -import { ArrowBlockButton, Card, CardAlert, Footer, Header } from '../elements'; -import { useCardState } from '../elements/contexts'; -import { allStrategiesButtonsComparator, formatSafeIdentifier } from '../utils'; +import { useCoreSignIn } from '../../contexts'; +import { descriptors, Flex, Flow, LocalizationKey, localizationKeys } from '../../customizables'; +import { ArrowBlockButton, Card, CardAlert, Footer, Header } from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { allStrategiesButtonsComparator, formatSafeIdentifier } from '../../utils'; import { HavingTrouble } from './HavingTrouble'; import { SignInSocialButtons } from './SignInSocialButtons'; import { factorHasLocalStrategy } from './utils'; diff --git a/packages/clerk-js/src/ui/SignIn/HavingTrouble.tsx b/packages/clerk-js/src/ui/components/SignIn/HavingTrouble.tsx similarity index 66% rename from packages/clerk-js/src/ui/SignIn/HavingTrouble.tsx rename to packages/clerk-js/src/ui/components/SignIn/HavingTrouble.tsx index 251e0339013..eac2ce3eefc 100644 --- a/packages/clerk-js/src/ui/SignIn/HavingTrouble.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/HavingTrouble.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { localizationKeys } from '../customizables'; -import { ErrorCard } from '../elements'; -import { PropsOfComponent } from '../styledSystem'; +import { localizationKeys } from '../../customizables'; +import { ErrorCard } from '../../elements'; +import { PropsOfComponent } from '../../styledSystem'; export const HavingTrouble = (props: PropsOfComponent<typeof ErrorCard>) => { const { onBackLinkClick } = props; diff --git a/packages/clerk-js/src/ui/SignIn/SignIn.tsx b/packages/clerk-js/src/ui/components/SignIn/SignIn.tsx similarity index 90% rename from packages/clerk-js/src/ui/SignIn/SignIn.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignIn.tsx index 6c302890c4c..f65e46c4a1c 100644 --- a/packages/clerk-js/src/ui/SignIn/SignIn.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignIn.tsx @@ -1,10 +1,10 @@ import { SignInProps } from '@clerk/types'; import React from 'react'; -import { ComponentContext, useCoreClerk, useSignInContext, withCoreSessionSwitchGuard } from '../../ui/contexts'; -import { Route, Switch, VIRTUAL_ROUTER_BASE_PATH } from '../../ui/router'; -import { SignInEmailLinkFlowComplete } from '../common/EmailLinkCompleteFlowCard'; -import { Flow } from '../customizables'; +import { SignInEmailLinkFlowComplete } from '../../common/EmailLinkCompleteFlowCard'; +import { ComponentContext, useCoreClerk, useSignInContext, withCoreSessionSwitchGuard } from '../../contexts'; +import { Flow } from '../../customizables'; +import { Route, Switch, VIRTUAL_ROUTER_BASE_PATH } from '../../router'; import { SignInAccountSwitcher } from './SignInAccountSwitcher'; import { SignInFactorOne } from './SignInFactorOne'; import { SignInFactorTwo } from './SignInFactorTwo'; diff --git a/packages/clerk-js/src/ui/SignIn/SignInAccountSwitcher.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx similarity index 84% rename from packages/clerk-js/src/ui/SignIn/SignInAccountSwitcher.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx index eb8ec7e6032..06a15600aed 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInAccountSwitcher.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInAccountSwitcher.tsx @@ -1,14 +1,14 @@ import React from 'react'; -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { useEnvironment, useSignInContext } from '../../ui/contexts'; -import { useNavigate } from '../../ui/hooks'; -import { Button, Col, descriptors, Flow, Icon } from '../customizables'; -import { Card, CardAlert, Header, UserPreview, UserPreviewProps, withCardStateProvider } from '../elements'; -import { ArrowBlockButton } from '../elements/ArrowBlockButton'; -import { useCardState } from '../elements/contexts'; -import { Plus, SignOutDouble } from '../icons'; -import { PropsOfComponent } from '../styledSystem'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; +import { useEnvironment, useSignInContext } from '../../contexts'; +import { Button, Col, descriptors, Flow, Icon } from '../../customizables'; +import { Card, CardAlert, Header, UserPreview, UserPreviewProps, withCardStateProvider } from '../../elements'; +import { ArrowBlockButton } from '../../elements/ArrowBlockButton'; +import { useCardState } from '../../elements/contexts'; +import { useNavigate } from '../../hooks'; +import { Plus, SignOutDouble } from '../../icons'; +import { PropsOfComponent } from '../../styledSystem'; import { useMultisessionActions } from '../UserButton/useMultisessionActions'; const _SignInAccountSwitcher = () => { diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorOne.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOne.tsx similarity index 95% rename from packages/clerk-js/src/ui/SignIn/SignInFactorOne.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorOne.tsx index ef917f22346..185612065ea 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorOne.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOne.tsx @@ -1,10 +1,10 @@ import { SignInFactor } from '@clerk/types'; import React from 'react'; -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { useCoreSignIn, useEnvironment } from '../../ui/contexts'; -import { useRouter } from '../../ui/router'; -import { ErrorCard, LoadingCard, withCardStateProvider } from '../elements'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; +import { useCoreSignIn, useEnvironment } from '../../contexts'; +import { ErrorCard, LoadingCard, withCardStateProvider } from '../../elements'; +import { useRouter } from '../../router'; import { AlternativeMethods } from './AlternativeMethods'; import { SignInFactorOneEmailCodeCard } from './SignInFactorOneEmailCodeCard'; import { SignInFactorOneEmailLinkCard } from './SignInFactorOneEmailLinkCard'; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorOneCodeForm.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx similarity index 87% rename from packages/clerk-js/src/ui/SignIn/SignInFactorOneCodeForm.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx index 9a04faff362..1c5502d2a26 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorOneCodeForm.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneCodeForm.tsx @@ -1,14 +1,14 @@ import { EmailCodeFactor, PhoneCodeFactor } from '@clerk/types'; import React from 'react'; -import { clerkInvalidFAPIResponse } from '../../core/errors'; -import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../ui/contexts'; -import { useSupportEmail } from '../../ui/hooks/useSupportEmail'; -import { useRouter } from '../../ui/router'; -import { LocalizationKey } from '../customizables'; -import { VerificationCodeCard, VerificationCodeCardProps } from '../elements'; -import { useCardState } from '../elements/contexts'; -import { handleError } from '../utils'; +import { clerkInvalidFAPIResponse } from '../../../core/errors'; +import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../contexts'; +import { LocalizationKey } from '../../customizables'; +import { VerificationCodeCard, VerificationCodeCardProps } from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { useSupportEmail } from '../../hooks/useSupportEmail'; +import { useRouter } from '../../router'; +import { handleError } from '../../utils'; export type SignInFactorOneCodeCard = Pick<VerificationCodeCardProps, 'onShowAlternativeMethodsClicked'> & { factor: EmailCodeFactor | PhoneCodeFactor; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorOneEmailCodeCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneEmailCodeCard.tsx similarity index 89% rename from packages/clerk-js/src/ui/SignIn/SignInFactorOneEmailCodeCard.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorOneEmailCodeCard.tsx index 8f6c4171827..e2314d3ec4f 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorOneEmailCodeCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneEmailCodeCard.tsx @@ -1,8 +1,8 @@ import { EmailCodeFactor } from '@clerk/types'; import React from 'react'; -import { useEnvironment } from '../../ui/contexts'; -import { Flow, localizationKeys } from '../customizables'; +import { useEnvironment } from '../../contexts'; +import { Flow, localizationKeys } from '../../customizables'; import { SignInFactorOneCodeCard, SignInFactorOneCodeForm } from './SignInFactorOneCodeForm'; type SignInFactorOneEmailCodeCardProps = SignInFactorOneCodeCard & { factor: EmailCodeFactor }; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorOneEmailLinkCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneEmailLinkCard.tsx similarity index 87% rename from packages/clerk-js/src/ui/SignIn/SignInFactorOneEmailLinkCard.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorOneEmailLinkCard.tsx index c855984e206..e919a7aec20 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorOneEmailLinkCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneEmailLinkCard.tsx @@ -1,15 +1,15 @@ import { EmailLinkFactor, SignInResource } from '@clerk/types'; import React from 'react'; -import { buildMagicLinkRedirectUrl } from '../../ui/common/redirects'; -import { useCoreClerk, useCoreSignIn, useEnvironment, useSignInContext } from '../../ui/contexts'; -import { useMagicLink } from '../../ui/hooks/useMagicLink'; -import { useRouter } from '../../ui/router/RouteContext'; -import { EmailLinkStatusCard } from '../common'; -import { Flow, localizationKeys } from '../customizables'; -import { VerificationCodeCardProps, VerificationLinkCard } from '../elements'; -import { useCardState } from '../elements/contexts'; -import { handleError } from '../utils'; +import { EmailLinkStatusCard } from '../../common'; +import { buildMagicLinkRedirectUrl } from '../../common/redirects'; +import { useCoreClerk, useCoreSignIn, useEnvironment, useSignInContext } from '../../contexts'; +import { Flow, localizationKeys } from '../../customizables'; +import { VerificationCodeCardProps, VerificationLinkCard } from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { useMagicLink } from '../../hooks/useMagicLink'; +import { useRouter } from '../../router/RouteContext'; +import { handleError } from '../../utils'; type SignInFactorOneEmailLinkCardProps = Pick<VerificationCodeCardProps, 'onShowAlternativeMethodsClicked'> & { factor: EmailLinkFactor; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorOnePasswordCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePasswordCard.tsx similarity index 88% rename from packages/clerk-js/src/ui/SignIn/SignInFactorOnePasswordCard.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePasswordCard.tsx index 568cf6e2650..03019176d85 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorOnePasswordCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePasswordCard.tsx @@ -1,12 +1,12 @@ import React from 'react'; -import { clerkInvalidFAPIResponse } from '../../core/errors'; -import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../ui/contexts'; -import { useSupportEmail } from '../../ui/hooks/useSupportEmail'; -import { useRouter } from '../../ui/router/RouteContext'; -import { descriptors, Flex, Flow, localizationKeys } from '../customizables'; -import { Card, CardAlert, Footer, Form, Header, IdentityPreview, useCardState } from '../elements'; -import { handleError, useFormControl } from '../utils'; +import { clerkInvalidFAPIResponse } from '../../../core/errors'; +import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../contexts'; +import { descriptors, Flex, Flow, localizationKeys } from '../../customizables'; +import { Card, CardAlert, Footer, Form, Header, IdentityPreview, useCardState } from '../../elements'; +import { useSupportEmail } from '../../hooks/useSupportEmail'; +import { useRouter } from '../../router/RouteContext'; +import { handleError, useFormControl } from '../../utils'; type SignInFactorOnePasswordProps = { onShowAlternativeMethodsClick: React.MouseEventHandler; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorOnePhoneCodeCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePhoneCodeCard.tsx similarity index 89% rename from packages/clerk-js/src/ui/SignIn/SignInFactorOnePhoneCodeCard.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePhoneCodeCard.tsx index 20d3fb559f8..02104448cb5 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorOnePhoneCodeCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePhoneCodeCard.tsx @@ -1,8 +1,8 @@ import { PhoneCodeFactor } from '@clerk/types'; import React from 'react'; -import { useEnvironment } from '../contexts'; -import { Flow, localizationKeys } from '../customizables'; +import { useEnvironment } from '../../contexts'; +import { Flow, localizationKeys } from '../../customizables'; import { SignInFactorOneCodeCard, SignInFactorOneCodeForm } from './SignInFactorOneCodeForm'; type SignInFactorOnePhoneCodeCardProps = SignInFactorOneCodeCard & { factor: PhoneCodeFactor }; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorTwo.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwo.tsx similarity index 93% rename from packages/clerk-js/src/ui/SignIn/SignInFactorTwo.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorTwo.tsx index 7bc0771153b..7fd8a0d5f51 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorTwo.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwo.tsx @@ -1,9 +1,9 @@ import { SignInFactor } from '@clerk/types'; import React from 'react'; -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { useCoreSignIn } from '../../ui/contexts'; -import { LoadingCard, withCardStateProvider } from '../elements'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; +import { useCoreSignIn } from '../../contexts'; +import { LoadingCard, withCardStateProvider } from '../../elements'; import { SignInFactorTwoAlternativeMethods } from './SignInFactorTwoAlternativeMethods'; import { SignInFactorTwoBackupCodeCard } from './SignInFactorTwoBackupCodeCard'; import { SignInFactorTwoPhoneCodeCard } from './SignInFactorTwoPhoneCodeCard'; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoAlternativeMethods.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoAlternativeMethods.tsx similarity index 95% rename from packages/clerk-js/src/ui/SignIn/SignInFactorTwoAlternativeMethods.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoAlternativeMethods.tsx index 1db9710d9bd..b394a338ed2 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoAlternativeMethods.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoAlternativeMethods.tsx @@ -1,11 +1,11 @@ import { SignInFactor } from '@clerk/types'; import React from 'react'; -import { useCoreSignIn } from '../../ui/contexts/'; -import { Col, descriptors, Flow, LocalizationKey, localizationKeys } from '../customizables'; -import { ArrowBlockButton, Card, CardAlert, Footer, Header } from '../elements'; -import { useCardState } from '../elements/contexts'; -import { backupCodePrefFactorComparator, formatSafeIdentifier } from '../utils'; +import { useCoreSignIn } from '../../contexts'; +import { Col, descriptors, Flow, LocalizationKey, localizationKeys } from '../../customizables'; +import { ArrowBlockButton, Card, CardAlert, Footer, Header } from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { backupCodePrefFactorComparator, formatSafeIdentifier } from '../../utils'; import { HavingTrouble } from './HavingTrouble'; export type AlternativeMethodsProps = { diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoBackupCodeCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoBackupCodeCard.tsx similarity index 89% rename from packages/clerk-js/src/ui/SignIn/SignInFactorTwoBackupCodeCard.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoBackupCodeCard.tsx index 02b6317e79a..eeb6433cb7c 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoBackupCodeCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoBackupCodeCard.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import { clerkInvalidFAPIResponse } from '../../core/errors'; -import { useCoreClerk, useCoreSignIn, useEnvironment, useSignInContext } from '../contexts'; -import { Col, descriptors, localizationKeys } from '../customizables'; -import { Card, CardAlert, Footer, Form, Header, useCardState } from '../elements'; -import { useSupportEmail } from '../hooks/useSupportEmail'; -import { handleError, useFormControl } from '../utils'; +import { clerkInvalidFAPIResponse } from '../../../core/errors'; +import { useCoreClerk, useCoreSignIn, useEnvironment, useSignInContext } from '../../contexts'; +import { Col, descriptors, localizationKeys } from '../../customizables'; +import { Card, CardAlert, Footer, Form, Header, useCardState } from '../../elements'; +import { useSupportEmail } from '../../hooks/useSupportEmail'; +import { handleError, useFormControl } from '../../utils'; type SignInFactorTwoBackupCodeCardProps = { onShowAlternativeMethodsClicked: React.MouseEventHandler; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoCodeForm.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoCodeForm.tsx similarity index 89% rename from packages/clerk-js/src/ui/SignIn/SignInFactorTwoCodeForm.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoCodeForm.tsx index a665ca98792..31bf5a72a6b 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoCodeForm.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoCodeForm.tsx @@ -1,12 +1,12 @@ import { PhoneCodeFactor, SignInResource, TOTPFactor } from '@clerk/types'; import React from 'react'; -import { clerkInvalidFAPIResponse } from '../../core/errors'; -import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../ui/contexts'; -import { useSupportEmail } from '../../ui/hooks/useSupportEmail'; -import { LocalizationKey } from '../customizables'; -import { useCardState, VerificationCodeCard, VerificationCodeCardProps } from '../elements'; -import { handleError } from '../utils'; +import { clerkInvalidFAPIResponse } from '../../../core/errors'; +import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../contexts'; +import { LocalizationKey } from '../../customizables'; +import { useCardState, VerificationCodeCard, VerificationCodeCardProps } from '../../elements'; +import { useSupportEmail } from '../../hooks/useSupportEmail'; +import { handleError } from '../../utils'; export type SignInFactorTwoCodeCard = Pick<VerificationCodeCardProps, 'onShowAlternativeMethodsClicked'> & { factor: PhoneCodeFactor | TOTPFactor; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoPhoneCodeCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoPhoneCodeCard.tsx similarity index 91% rename from packages/clerk-js/src/ui/SignIn/SignInFactorTwoPhoneCodeCard.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoPhoneCodeCard.tsx index 42c121f8e3b..eb89634df2c 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoPhoneCodeCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoPhoneCodeCard.tsx @@ -1,8 +1,8 @@ import { PhoneCodeFactor } from '@clerk/types'; import React from 'react'; -import { useCoreSignIn } from '../../ui/contexts'; -import { Flow, localizationKeys } from '../customizables'; +import { useCoreSignIn } from '../../contexts'; +import { Flow, localizationKeys } from '../../customizables'; import { SignInFactorTwoCodeCard, SignInFactorTwoCodeForm } from './SignInFactorTwoCodeForm'; type SignInFactorTwoPhoneCodeCardProps = SignInFactorTwoCodeCard & { factor: PhoneCodeFactor }; diff --git a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoTOTPCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoTOTPCard.tsx similarity index 92% rename from packages/clerk-js/src/ui/SignIn/SignInFactorTwoTOTPCard.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoTOTPCard.tsx index 745ac2d5f6f..035f1ecbab3 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInFactorTwoTOTPCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorTwoTOTPCard.tsx @@ -1,7 +1,7 @@ import { TOTPFactor } from '@clerk/types'; import React from 'react'; -import { Flow, localizationKeys } from '../customizables'; +import { Flow, localizationKeys } from '../../customizables'; import { SignInFactorTwoCodeCard, SignInFactorTwoCodeForm } from './SignInFactorTwoCodeForm'; type SignInFactorTwoTOTPCardProps = SignInFactorTwoCodeCard & { factor: TOTPFactor }; diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInSSOCallback.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInSSOCallback.tsx new file mode 100644 index 00000000000..9a955c26164 --- /dev/null +++ b/packages/clerk-js/src/ui/components/SignIn/SignInSSOCallback.tsx @@ -0,0 +1,4 @@ +import { SSOCallback } from '../../common'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; + +export const SignInSSOCallback = withRedirectToHome(SSOCallback); diff --git a/packages/clerk-js/src/ui/SignIn/SignInSocialButtons.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx similarity index 75% rename from packages/clerk-js/src/ui/SignIn/SignInSocialButtons.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx index 4000c372881..99efcbbbefc 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInSocialButtons.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx @@ -1,12 +1,12 @@ import React from 'react'; -import { buildSSOCallbackURL } from '../../ui/common/redirects'; -import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../ui/contexts'; -import { useEnvironment } from '../../ui/contexts/EnvironmentContext'; -import { useNavigate } from '../../ui/hooks'; -import { useCardState } from '../elements/contexts'; -import { SocialButtons, SocialButtonsProps } from '../elements/SocialButtons'; -import { handleError } from '../utils'; +import { buildSSOCallbackURL } from '../../common/redirects'; +import { useCoreClerk, useCoreSignIn, useSignInContext } from '../../contexts'; +import { useEnvironment } from '../../contexts/EnvironmentContext'; +import { useCardState } from '../../elements/contexts'; +import { SocialButtons, SocialButtonsProps } from '../../elements/SocialButtons'; +import { useNavigate } from '../../hooks'; +import { handleError } from '../../utils'; export const SignInSocialButtons = React.memo((props: SocialButtonsProps) => { const clerk = useCoreClerk(); diff --git a/packages/clerk-js/src/ui/SignIn/SignInStart.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInStart.tsx similarity index 92% rename from packages/clerk-js/src/ui/SignIn/SignInStart.tsx rename to packages/clerk-js/src/ui/components/SignIn/SignInStart.tsx index 585f5dee82f..5f24e5bc49c 100644 --- a/packages/clerk-js/src/ui/SignIn/SignInStart.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInStart.tsx @@ -1,14 +1,12 @@ import { ClerkAPIError, SignInCreateParams } from '@clerk/types'; import React from 'react'; -import { clerkInvalidFAPIResponse } from '../../core/errors'; -import { ERROR_CODES, getIdentifierControlDisplayValues } from '../../ui/common/constants'; -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { useCoreClerk, useCoreSignIn, useEnvironment, useSignInContext } from '../../ui/contexts'; -import { useNavigate } from '../../ui/hooks'; -import { useSupportEmail } from '../../ui/hooks/useSupportEmail'; -import { getClerkQueryParam } from '../../utils/getClerkQueryParam'; -import { Col, descriptors, Flow, localizationKeys } from '../customizables'; +import { clerkInvalidFAPIResponse } from '../../../core/errors'; +import { getClerkQueryParam } from '../../../utils/getClerkQueryParam'; +import { ERROR_CODES, getIdentifierControlDisplayValues } from '../../common/constants'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; +import { useCoreClerk, useCoreSignIn, useEnvironment, useSignInContext } from '../../contexts'; +import { Col, descriptors, Flow, localizationKeys } from '../../customizables'; import { Card, CardAlert, @@ -18,10 +16,12 @@ import { LoadingCard, SocialButtonsReversibleContainerWithDivider, withCardStateProvider, -} from '../elements'; -import { useCardState } from '../elements/contexts'; -import { useLoadingStatus } from '../hooks'; -import { buildRequest, FormControlState, handleError, isMobileDevice, useFormControl } from '../utils'; +} from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { useNavigate } from '../../hooks'; +import { useLoadingStatus } from '../../hooks'; +import { useSupportEmail } from '../../hooks/useSupportEmail'; +import { buildRequest, FormControlState, handleError, isMobileDevice, useFormControl } from '../../utils'; import { SignInSocialButtons } from './SignInSocialButtons'; export function _SignInStart(): JSX.Element { diff --git a/packages/clerk-js/src/ui/SignIn/index.ts b/packages/clerk-js/src/ui/components/SignIn/index.ts similarity index 100% rename from packages/clerk-js/src/ui/SignIn/index.ts rename to packages/clerk-js/src/ui/components/SignIn/index.ts diff --git a/packages/clerk-js/src/ui/SignIn/strategies/factorSortingUtils.test.tsx b/packages/clerk-js/src/ui/components/SignIn/strategies/factorSortingUtils.test.tsx similarity index 100% rename from packages/clerk-js/src/ui/SignIn/strategies/factorSortingUtils.test.tsx rename to packages/clerk-js/src/ui/components/SignIn/strategies/factorSortingUtils.test.tsx diff --git a/packages/clerk-js/src/ui/SignIn/strategies/factorSortingUtils.tsx b/packages/clerk-js/src/ui/components/SignIn/strategies/factorSortingUtils.tsx similarity index 100% rename from packages/clerk-js/src/ui/SignIn/strategies/factorSortingUtils.tsx rename to packages/clerk-js/src/ui/components/SignIn/strategies/factorSortingUtils.tsx diff --git a/packages/clerk-js/src/ui/SignIn/utils.test.ts b/packages/clerk-js/src/ui/components/SignIn/utils.test.ts similarity index 100% rename from packages/clerk-js/src/ui/SignIn/utils.test.ts rename to packages/clerk-js/src/ui/components/SignIn/utils.test.ts diff --git a/packages/clerk-js/src/ui/SignIn/utils.ts b/packages/clerk-js/src/ui/components/SignIn/utils.ts similarity index 97% rename from packages/clerk-js/src/ui/SignIn/utils.ts rename to packages/clerk-js/src/ui/components/SignIn/utils.ts index 07750ec8ce0..d4117dcc0c1 100644 --- a/packages/clerk-js/src/ui/SignIn/utils.ts +++ b/packages/clerk-js/src/ui/components/SignIn/utils.ts @@ -1,7 +1,7 @@ import { PreferredSignInStrategy, SignInFactor, SignInResource, SignInStrategy } from '@clerk/types'; -import { PREFERRED_SIGN_IN_STRATEGIES } from '../../ui/common/constants'; -import { titleize } from '../shared'; +import { PREFERRED_SIGN_IN_STRATEGIES } from '../../common/constants'; +import { titleize } from '../../shared'; import { otpPrefFactorComparator, passwordPrefFactorComparator } from './strategies/factorSortingUtils'; const FONT_SIZE_STEP = 2; diff --git a/packages/clerk-js/src/ui/SignUp/SignUp.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUp.tsx similarity index 91% rename from packages/clerk-js/src/ui/SignUp/SignUp.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUp.tsx index a9d3c6cb242..14525dfe99d 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUp.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUp.tsx @@ -1,10 +1,10 @@ import { SignUpProps } from '@clerk/types'; import React from 'react'; -import { ComponentContext, useCoreClerk, useSignUpContext, withCoreSessionSwitchGuard } from '../../ui/contexts'; -import { Route, Switch, VIRTUAL_ROUTER_BASE_PATH } from '../../ui/router'; -import { SignUpEmailLinkFlowComplete } from '../common/EmailLinkCompleteFlowCard'; -import { Flow } from '../customizables'; +import { SignUpEmailLinkFlowComplete } from '../../common/EmailLinkCompleteFlowCard'; +import { ComponentContext, useCoreClerk, useSignUpContext, withCoreSessionSwitchGuard } from '../../contexts'; +import { Flow } from '../../customizables'; +import { Route, Switch, VIRTUAL_ROUTER_BASE_PATH } from '../../router'; import { SignUpContinue } from './SignUpContinue'; import { SignUpSSOCallback } from './SignUpSSOCallback'; import { SignUpStart } from './SignUpStart'; diff --git a/packages/clerk-js/src/ui/SignUp/SignUpContinue.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpContinue.tsx similarity index 95% rename from packages/clerk-js/src/ui/SignUp/SignUpContinue.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpContinue.tsx index c98dd55e2dd..aae3c5eb17e 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpContinue.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpContinue.tsx @@ -1,9 +1,8 @@ import React from 'react'; -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { useCoreClerk, useCoreSignUp, useEnvironment, useSignUpContext } from '../../ui/contexts'; -import { useNavigate } from '../../ui/hooks'; -import { descriptors, Flex, Flow, localizationKeys } from '../customizables'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; +import { useCoreClerk, useCoreSignUp, useEnvironment, useSignUpContext } from '../../contexts'; +import { descriptors, Flex, Flow, localizationKeys } from '../../customizables'; import { Card, CardAlert, @@ -12,9 +11,10 @@ import { LoadingCard, SocialButtonsReversibleContainerWithDivider, withCardStateProvider, -} from '../elements'; -import { useCardState } from '../elements/contexts'; -import { buildRequest, FormControlState, handleError, useFormControl } from '../utils'; +} from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { useNavigate } from '../../hooks'; +import { buildRequest, FormControlState, handleError, useFormControl } from '../../utils'; import { SignUpForm } from './SignUpForm'; import { ActiveIdentifier, diff --git a/packages/clerk-js/src/ui/SignUp/SignUpEmailCodeCard.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpEmailCodeCard.tsx similarity index 91% rename from packages/clerk-js/src/ui/SignUp/SignUpEmailCodeCard.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpEmailCodeCard.tsx index f497848c8be..34d8f6ac96b 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpEmailCodeCard.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpEmailCodeCard.tsx @@ -1,7 +1,7 @@ import React from 'react'; -import { useCoreSignUp, useEnvironment } from '../../ui/contexts'; -import { Flow, localizationKeys } from '../customizables'; +import { useCoreSignUp, useEnvironment } from '../../contexts'; +import { Flow, localizationKeys } from '../../customizables'; import { SignUpVerificationCodeForm } from './SignUpVerificationCodeForm'; export const SignUpEmailCodeCard = () => { diff --git a/packages/clerk-js/src/ui/SignUp/SignUpEmailLinkCard.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpEmailLinkCard.tsx similarity index 84% rename from packages/clerk-js/src/ui/SignUp/SignUpEmailLinkCard.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpEmailLinkCard.tsx index e7a3eacb53e..578ae1652b7 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpEmailLinkCard.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpEmailLinkCard.tsx @@ -1,15 +1,15 @@ import { SignUpResource } from '@clerk/types'; import React from 'react'; -import { buildMagicLinkRedirectUrl } from '../../ui/common/redirects'; -import { useCoreClerk, useCoreSignUp, useEnvironment, useSignUpContext } from '../../ui/contexts'; -import { useNavigate } from '../../ui/hooks'; -import { useMagicLink } from '../../ui/hooks/useMagicLink'; -import { EmailLinkStatusCard } from '../common'; -import { Flow, localizationKeys } from '../customizables'; -import { VerificationLinkCard } from '../elements'; -import { useCardState } from '../elements/contexts'; -import { handleError } from '../utils'; +import { EmailLinkStatusCard } from '../../common'; +import { buildMagicLinkRedirectUrl } from '../../common/redirects'; +import { useCoreClerk, useCoreSignUp, useEnvironment, useSignUpContext } from '../../contexts'; +import { Flow, localizationKeys } from '../../customizables'; +import { VerificationLinkCard } from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { useNavigate } from '../../hooks'; +import { useMagicLink } from '../../hooks/useMagicLink'; +import { handleError } from '../../utils'; import { completeSignUpFlow } from './util'; export const SignUpEmailLinkCard = () => { diff --git a/packages/clerk-js/src/ui/SignUp/SignUpForm.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpForm.tsx similarity index 96% rename from packages/clerk-js/src/ui/SignUp/SignUpForm.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpForm.tsx index 7388b75f278..cb792c6d132 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpForm.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpForm.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useAppearance } from '../customizables'; -import { Form } from '../elements'; -import { FormControlState } from '../utils'; +import { useAppearance } from '../../customizables'; +import { Form } from '../../elements'; +import { FormControlState } from '../../utils'; import { ActiveIdentifier, Fields } from './signUpFormHelpers'; type SignUpFormProps = { diff --git a/packages/clerk-js/src/ui/SignUp/SignUpPhoneCodeCard.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpPhoneCodeCard.tsx similarity index 88% rename from packages/clerk-js/src/ui/SignUp/SignUpPhoneCodeCard.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpPhoneCodeCard.tsx index 7959fb1cf2e..6f3a1c6c53e 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpPhoneCodeCard.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpPhoneCodeCard.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useCoreSignUp, useEnvironment } from '../../ui/contexts'; -import { Flow, localizationKeys } from '../customizables'; -import { withCardStateProvider } from '../elements'; +import { useCoreSignUp, useEnvironment } from '../../contexts'; +import { Flow, localizationKeys } from '../../customizables'; +import { withCardStateProvider } from '../../elements'; import { SignUpVerificationCodeForm } from './SignUpVerificationCodeForm'; export const SignUpPhoneCodeCard = withCardStateProvider(() => { diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpSSOCallback.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpSSOCallback.tsx new file mode 100644 index 00000000000..159edc5204a --- /dev/null +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpSSOCallback.tsx @@ -0,0 +1,4 @@ +import { SSOCallback } from '../../common'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; + +export const SignUpSSOCallback = withRedirectToHome(SSOCallback); diff --git a/packages/clerk-js/src/ui/SignUp/SignUpSocialButtons.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx similarity index 76% rename from packages/clerk-js/src/ui/SignUp/SignUpSocialButtons.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx index d4c33d2e9f3..1b501fd6e78 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpSocialButtons.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx @@ -1,13 +1,13 @@ import { OAuthStrategy } from '@clerk/types'; import React from 'react'; -import { buildSSOCallbackURL } from '../../ui/common/redirects'; -import { useCoreClerk, useCoreSignUp, useSignUpContext } from '../../ui/contexts'; -import { useEnvironment } from '../../ui/contexts/EnvironmentContext'; -import { useNavigate } from '../../ui/hooks'; -import { useCardState } from '../elements'; -import { SocialButtons, SocialButtonsProps } from '../elements/SocialButtons'; -import { handleError } from '../utils'; +import { buildSSOCallbackURL } from '../../common/redirects'; +import { useCoreClerk, useCoreSignUp, useSignUpContext } from '../../contexts'; +import { useEnvironment } from '../../contexts/EnvironmentContext'; +import { useCardState } from '../../elements'; +import { SocialButtons, SocialButtonsProps } from '../../elements/SocialButtons'; +import { useNavigate } from '../../hooks'; +import { handleError } from '../../utils'; export const SignUpSocialButtons = React.memo((props: SocialButtonsProps) => { const clerk = useCoreClerk(); diff --git a/packages/clerk-js/src/ui/SignUp/SignUpStart.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx similarity index 95% rename from packages/clerk-js/src/ui/SignUp/SignUpStart.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx index dc049d0c2f9..4e08742d961 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpStart.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx @@ -1,11 +1,10 @@ import React from 'react'; -import { ERROR_CODES } from '../../ui/common/constants'; -import { withRedirectToHome } from '../../ui/common/withRedirectToHome'; -import { useCoreClerk, useCoreSignUp, useEnvironment, useSignUpContext } from '../../ui/contexts'; -import { useNavigate } from '../../ui/hooks'; -import { getClerkQueryParam } from '../../utils/getClerkQueryParam'; -import { descriptors, Flex, Flow, localizationKeys, useAppearance } from '../customizables'; +import { getClerkQueryParam } from '../../../utils/getClerkQueryParam'; +import { ERROR_CODES } from '../../common/constants'; +import { withRedirectToHome } from '../../common/withRedirectToHome'; +import { useCoreClerk, useCoreSignUp, useEnvironment, useSignUpContext } from '../../contexts'; +import { descriptors, Flex, Flow, localizationKeys, useAppearance } from '../../customizables'; import { Card, CardAlert, @@ -14,10 +13,11 @@ import { LoadingCard, SocialButtonsReversibleContainerWithDivider, withCardStateProvider, -} from '../elements'; -import { useCardState } from '../elements/contexts'; -import { useLoadingStatus } from '../hooks'; -import { buildRequest, FormControlState, handleError, useFormControl } from '../utils'; +} from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { useNavigate } from '../../hooks'; +import { useLoadingStatus } from '../../hooks'; +import { buildRequest, FormControlState, handleError, useFormControl } from '../../utils'; import { SignUpForm } from './SignUpForm'; import { ActiveIdentifier, diff --git a/packages/clerk-js/src/ui/SignUp/SignUpVerificationCodeForm.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpVerificationCodeForm.tsx similarity index 90% rename from packages/clerk-js/src/ui/SignUp/SignUpVerificationCodeForm.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpVerificationCodeForm.tsx index 18d524e830b..2c298afadbf 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpVerificationCodeForm.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpVerificationCodeForm.tsx @@ -1,10 +1,10 @@ import { SignUpResource } from '@clerk/types'; import React from 'react'; -import { useCoreClerk, useSignUpContext } from '../../ui/contexts'; -import { useNavigate } from '../../ui/hooks/useNavigate'; -import { LocalizationKey } from '../customizables'; -import { VerificationCodeCard, VerificationCodeCardProps } from '../elements'; +import { useCoreClerk, useSignUpContext } from '../../contexts'; +import { LocalizationKey } from '../../customizables'; +import { VerificationCodeCard, VerificationCodeCardProps } from '../../elements'; +import { useNavigate } from '../../hooks/useNavigate'; import { completeSignUpFlow } from './util'; type SignInFactorOneCodeFormProps = { diff --git a/packages/clerk-js/src/ui/SignUp/SignUpVerifyEmail.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpVerifyEmail.tsx similarity index 82% rename from packages/clerk-js/src/ui/SignUp/SignUpVerifyEmail.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpVerifyEmail.tsx index f06ec204666..db1d3f4cc89 100644 --- a/packages/clerk-js/src/ui/SignUp/SignUpVerifyEmail.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpVerifyEmail.tsx @@ -1,7 +1,7 @@ import React from 'react'; -import { useEnvironment } from '../../ui/contexts'; -import { withCardStateProvider } from '../elements'; +import { useEnvironment } from '../../contexts'; +import { withCardStateProvider } from '../../elements'; import { SignUpEmailCodeCard } from './SignUpEmailCodeCard'; import { SignUpEmailLinkCard } from './SignUpEmailLinkCard'; diff --git a/packages/clerk-js/src/ui/SignUp/SignUpVerifyPhone.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpVerifyPhone.tsx similarity index 100% rename from packages/clerk-js/src/ui/SignUp/SignUpVerifyPhone.tsx rename to packages/clerk-js/src/ui/components/SignUp/SignUpVerifyPhone.tsx diff --git a/packages/clerk-js/src/ui/SignUp/index.ts b/packages/clerk-js/src/ui/components/SignUp/index.ts similarity index 100% rename from packages/clerk-js/src/ui/SignUp/index.ts rename to packages/clerk-js/src/ui/components/SignUp/index.ts diff --git a/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.test.ts b/packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.test.ts similarity index 100% rename from packages/clerk-js/src/ui/SignUp/signUpFormHelpers.test.ts rename to packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.test.ts diff --git a/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts b/packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.ts similarity index 99% rename from packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts rename to packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.ts index a1523fc0aa2..56357d842e7 100644 --- a/packages/clerk-js/src/ui/SignUp/signUpFormHelpers.ts +++ b/packages/clerk-js/src/ui/components/SignUp/signUpFormHelpers.ts @@ -2,7 +2,7 @@ import { camelToSnake } from '@clerk/shared'; import type { Attributes, SignUpResource } from '@clerk/types'; import { UserSettingsResource } from '@clerk/types'; -import { FieldState } from '../../ui/common'; +import { FieldState } from '../../common'; /** * ActiveIdentifier denotes which one of the email address or phone number takes priority when enabled diff --git a/packages/clerk-js/src/ui/SignUp/util.test.ts b/packages/clerk-js/src/ui/components/SignUp/util.test.ts similarity index 100% rename from packages/clerk-js/src/ui/SignUp/util.test.ts rename to packages/clerk-js/src/ui/components/SignUp/util.test.ts diff --git a/packages/clerk-js/src/ui/SignUp/util.ts b/packages/clerk-js/src/ui/components/SignUp/util.ts similarity index 100% rename from packages/clerk-js/src/ui/SignUp/util.ts rename to packages/clerk-js/src/ui/components/SignUp/util.ts diff --git a/packages/clerk-js/src/ui/UserButton/CurrentAccountActions.tsx b/packages/clerk-js/src/ui/components/UserButton/CurrentAccountActions.tsx similarity index 89% rename from packages/clerk-js/src/ui/UserButton/CurrentAccountActions.tsx rename to packages/clerk-js/src/ui/components/UserButton/CurrentAccountActions.tsx index 2f2306b2567..08d30ec0eda 100644 --- a/packages/clerk-js/src/ui/UserButton/CurrentAccountActions.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/CurrentAccountActions.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { Button, Col, Flex, Icon, LocalizationKey, Spinner, Text } from '../customizables'; -import { ElementDescriptor, ElementId } from '../customizables/elementDescriptors'; -import { useCardState } from '../elements/contexts'; -import { useLoadingStatus } from '../hooks'; -import { PropsOfComponent } from '../styledSystem'; +import { Button, Col, Flex, Icon, LocalizationKey, Spinner, Text } from '../../customizables'; +import { ElementDescriptor, ElementId } from '../../customizables/elementDescriptors'; +import { useCardState } from '../../elements/contexts'; +import { useLoadingStatus } from '../../hooks'; +import { PropsOfComponent } from '../../styledSystem'; export const Actions = (props: PropsOfComponent<typeof Flex>) => { return <Col {...props} />; diff --git a/packages/clerk-js/src/ui/UserButton/OtherSessionActions.tsx b/packages/clerk-js/src/ui/components/UserButton/OtherSessionActions.tsx similarity index 84% rename from packages/clerk-js/src/ui/UserButton/OtherSessionActions.tsx rename to packages/clerk-js/src/ui/components/UserButton/OtherSessionActions.tsx index 18c58fa8c5e..5794add6eb9 100644 --- a/packages/clerk-js/src/ui/UserButton/OtherSessionActions.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/OtherSessionActions.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { Button, Flex, Text } from '../customizables'; -import { UserPreview, UserPreviewProps } from '../elements'; -import { useCardState } from '../elements/contexts'; -import { mqu, PropsOfComponent } from '../styledSystem'; +import { Button, Flex, Text } from '../../customizables'; +import { UserPreview, UserPreviewProps } from '../../elements'; +import { useCardState } from '../../elements/contexts'; +import { mqu, PropsOfComponent } from '../../styledSystem'; import { Actions } from './CurrentAccountActions'; export const SessionActions = (props: PropsOfComponent<typeof Flex>) => { diff --git a/packages/clerk-js/src/ui/UserButton/UserButton.tsx b/packages/clerk-js/src/ui/components/UserButton/UserButton.tsx similarity index 81% rename from packages/clerk-js/src/ui/UserButton/UserButton.tsx rename to packages/clerk-js/src/ui/components/UserButton/UserButton.tsx index 5ef3fe7b36b..91affa0b1f2 100644 --- a/packages/clerk-js/src/ui/UserButton/UserButton.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/UserButton.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import { useCoreUser, useUserButtonContext, withCoreUserGuard } from '../contexts'; -import { descriptors, Flex, Flow, Text } from '../customizables'; -import { withCardStateProvider } from '../elements'; -import { Portal } from '../elements/Portal'; -import { usePopover } from '../hooks'; -import { getFullName, getIdentifier } from '../utils'; +import { useCoreUser, useUserButtonContext, withCoreUserGuard } from '../../contexts'; +import { descriptors, Flex, Flow, Text } from '../../customizables'; +import { withCardStateProvider } from '../../elements'; +import { Portal } from '../../elements/Portal'; +import { usePopover } from '../../hooks'; +import { getFullName, getIdentifier } from '../../utils'; import { UserButtonPopover } from './UserButtonPopover'; import { UserButtonTrigger } from './UserButtonTrigger'; diff --git a/packages/clerk-js/src/ui/UserButton/UserButtonPopover.tsx b/packages/clerk-js/src/ui/components/UserButton/UserButtonPopover.tsx similarity index 95% rename from packages/clerk-js/src/ui/UserButton/UserButtonPopover.tsx rename to packages/clerk-js/src/ui/components/UserButton/UserButtonPopover.tsx index d74fe4b41df..f420117695b 100644 --- a/packages/clerk-js/src/ui/UserButton/UserButtonPopover.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/UserButtonPopover.tsx @@ -1,12 +1,12 @@ import { ActiveSessionResource } from '@clerk/types'; import React from 'react'; -import { useCoreSession, useCoreUser, useEnvironment, useUserButtonContext } from '../contexts'; -import { descriptors, Flex, Flow, Link, localizationKeys, useAppearance } from '../customizables'; -import { BaseCard, PoweredByClerkText, UserPreview } from '../elements'; -import { RootBox } from '../elements/RootBox'; -import { CogFilled, Plus, SignOut, SignOutDouble } from '../icons'; -import { animations, PropsOfComponent } from '../styledSystem'; +import { useCoreSession, useCoreUser, useEnvironment, useUserButtonContext } from '../../contexts'; +import { descriptors, Flex, Flow, Link, localizationKeys, useAppearance } from '../../customizables'; +import { BaseCard, PoweredByClerkText, UserPreview } from '../../elements'; +import { RootBox } from '../../elements/RootBox'; +import { CogFilled, Plus, SignOut, SignOutDouble } from '../../icons'; +import { animations, PropsOfComponent } from '../../styledSystem'; import { Action, Actions } from './CurrentAccountActions'; import { SessionActions, UserPreviewButton } from './OtherSessionActions'; import { useMultisessionActions } from './useMultisessionActions'; diff --git a/packages/clerk-js/src/ui/UserButton/UserButtonTrigger.tsx b/packages/clerk-js/src/ui/components/UserButton/UserButtonTrigger.tsx similarity index 78% rename from packages/clerk-js/src/ui/UserButton/UserButtonTrigger.tsx rename to packages/clerk-js/src/ui/components/UserButton/UserButtonTrigger.tsx index d85be842c86..7d432d9dd62 100644 --- a/packages/clerk-js/src/ui/UserButton/UserButtonTrigger.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/UserButtonTrigger.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import { useCoreUser } from '../contexts'; -import { Button, descriptors } from '../customizables'; -import { Avatar } from '../elements'; -import { PropsOfComponent } from '../styledSystem'; +import { useCoreUser } from '../../contexts'; +import { Button, descriptors } from '../../customizables'; +import { Avatar } from '../../elements'; +import { PropsOfComponent } from '../../styledSystem'; type UserButtonTriggerProps = PropsOfComponent<typeof Button> & { isOpen: boolean }; diff --git a/packages/clerk-js/src/ui/UserButton/index.ts b/packages/clerk-js/src/ui/components/UserButton/index.ts similarity index 100% rename from packages/clerk-js/src/ui/UserButton/index.ts rename to packages/clerk-js/src/ui/components/UserButton/index.ts diff --git a/packages/clerk-js/src/ui/UserButton/useMultisessionActions.tsx b/packages/clerk-js/src/ui/components/UserButton/useMultisessionActions.tsx similarity index 90% rename from packages/clerk-js/src/ui/UserButton/useMultisessionActions.tsx rename to packages/clerk-js/src/ui/components/UserButton/useMultisessionActions.tsx index 73cbaa7042b..e1f0967c4a8 100644 --- a/packages/clerk-js/src/ui/UserButton/useMultisessionActions.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/useMultisessionActions.tsx @@ -1,11 +1,11 @@ import { ActiveSessionResource, UserButtonProps, UserResource } from '@clerk/types'; import React from 'react'; -import { windowNavigate } from '../../utils/windowNavigate'; -import { useCoreClerk, useCoreSessionList } from '../contexts'; -import { useCardState } from '../elements'; -import { useNavigate } from '../hooks'; -import { sleep } from '../utils'; +import { windowNavigate } from '../../../utils/windowNavigate'; +import { useCoreClerk, useCoreSessionList } from '../../contexts'; +import { useCardState } from '../../elements'; +import { useNavigate } from '../../hooks'; +import { sleep } from '../../utils'; type UseMultisessionActionsParams = { user: UserResource | undefined; diff --git a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/ActiveDevicesSection.tsx similarity index 95% rename from packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/ActiveDevicesSection.tsx index be23f61c040..ea775e999aa 100644 --- a/packages/clerk-js/src/ui/UserProfile/ActiveDevicesSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/ActiveDevicesSection.tsx @@ -2,11 +2,11 @@ import { formatRelative } from '@clerk/shared'; import { SessionWithActivitiesResource } from '@clerk/types'; import React from 'react'; -import { useCoreSession, useCoreUser } from '../contexts'; -import { Badge, Col, descriptors, Flex, Icon, localizationKeys, Text } from '../customizables'; -import { FullHeightLoader } from '../elements'; -import { DeviceLaptop, DeviceMobile } from '../icons'; -import { mqu } from '../styledSystem'; +import { useCoreSession, useCoreUser } from '../../contexts'; +import { Badge, Col, descriptors, Flex, Icon, localizationKeys, Text } from '../../customizables'; +import { FullHeightLoader } from '../../elements'; +import { DeviceLaptop, DeviceMobile } from '../../icons'; +import { mqu } from '../../styledSystem'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { ProfileSection } from './Section'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/AddAuthenticatorApp.tsx b/packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx similarity index 94% rename from packages/clerk-js/src/ui/UserProfile/AddAuthenticatorApp.tsx rename to packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx index c3d67d71ac5..cc1518cb035 100644 --- a/packages/clerk-js/src/ui/UserProfile/AddAuthenticatorApp.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx @@ -2,10 +2,10 @@ import { TOTPResource } from '@clerk/types'; import { QRCodeSVG } from 'qrcode.react'; import React from 'react'; -import { useCoreUser } from '../contexts'; -import { Button, Col, Text } from '../customizables'; -import { ClipboardInput, FullHeightLoader, useCardState } from '../elements'; -import { handleError } from '../utils'; +import { useCoreUser } from '../../contexts'; +import { Button, Col, Text } from '../../customizables'; +import { ClipboardInput, FullHeightLoader, useCardState } from '../../elements'; +import { handleError } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; import { ContentPage } from './Page'; diff --git a/packages/clerk-js/src/ui/UserProfile/Breadcrumbs.tsx b/packages/clerk-js/src/ui/components/UserProfile/Breadcrumbs.tsx similarity index 95% rename from packages/clerk-js/src/ui/UserProfile/Breadcrumbs.tsx rename to packages/clerk-js/src/ui/components/UserProfile/Breadcrumbs.tsx index 3d3a0bf0d19..05879ea345a 100644 --- a/packages/clerk-js/src/ui/UserProfile/Breadcrumbs.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Breadcrumbs.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { descriptors, Flex, Icon, Link, LocalizationKey, Text, useLocalizations } from '../customizables'; -import { useRouter } from '../router'; -import { mqu, PropsOfComponent } from '../styledSystem'; +import { descriptors, Flex, Icon, Link, LocalizationKey, Text, useLocalizations } from '../../customizables'; +import { useRouter } from '../../router'; +import { mqu, PropsOfComponent } from '../../styledSystem'; import { BaseRoutes } from './Navbar'; import { useNavigateToFlowStart } from './NavigateToFlowStartButton'; diff --git a/packages/clerk-js/src/ui/UserProfile/ConnectedAccountsPage.tsx b/packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsPage.tsx similarity index 91% rename from packages/clerk-js/src/ui/UserProfile/ConnectedAccountsPage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsPage.tsx index 86c10cb3637..3df420831e8 100644 --- a/packages/clerk-js/src/ui/UserProfile/ConnectedAccountsPage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsPage.tsx @@ -1,13 +1,13 @@ import { ExternalAccountResource, OAuthStrategy } from '@clerk/types'; import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser } from '../contexts'; -import { Col, Image, localizationKeys, Text } from '../customizables'; -import { ArrowBlockButton, useCardState, withCardStateProvider } from '../elements'; -import { useEnabledThirdPartyProviders, useNavigate } from '../hooks'; -import { useRouter } from '../router'; -import { handleError, sleep } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser } from '../../contexts'; +import { Col, Image, localizationKeys, Text } from '../../customizables'; +import { ArrowBlockButton, useCardState, withCardStateProvider } from '../../elements'; +import { useEnabledThirdPartyProviders, useNavigate } from '../../hooks'; +import { useRouter } from '../../router'; +import { handleError, sleep } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; import { ContentPage } from './Page'; diff --git a/packages/clerk-js/src/ui/UserProfile/ConnectedAccountsSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsSection.tsx similarity index 92% rename from packages/clerk-js/src/ui/UserProfile/ConnectedAccountsSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsSection.tsx index a6c36a07663..e4a93ac7bff 100644 --- a/packages/clerk-js/src/ui/UserProfile/ConnectedAccountsSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsSection.tsx @@ -1,12 +1,12 @@ import { OAuthStrategy } from '@clerk/types'; import { ExternalAccountResource } from '@clerk/types/src'; -import { useCoreUser } from '../contexts'; -import { Badge, Col, descriptors, Flex, Image, localizationKeys } from '../customizables'; -import { useCardState, UserPreview } from '../elements'; -import { useEnabledThirdPartyProviders } from '../hooks'; -import { useNavigate } from '../hooks/useNavigate'; -import { handleError } from '../utils'; +import { useCoreUser } from '../../contexts'; +import { Badge, Col, descriptors, Flex, Image, localizationKeys } from '../../customizables'; +import { useCardState, UserPreview } from '../../elements'; +import { useEnabledThirdPartyProviders } from '../../hooks'; +import { useNavigate } from '../../hooks/useNavigate'; +import { handleError } from '../../utils'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { ProfileSection } from './Section'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/Content.tsx b/packages/clerk-js/src/ui/components/UserProfile/Content.tsx similarity index 96% rename from packages/clerk-js/src/ui/UserProfile/Content.tsx rename to packages/clerk-js/src/ui/components/UserProfile/Content.tsx index c4c8adbe620..66133c6e947 100644 --- a/packages/clerk-js/src/ui/UserProfile/Content.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Content.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { Col, descriptors } from '../customizables'; -import { Route, Switch, useRouter } from '../router'; -import { common, mqu } from '../styledSystem'; +import { Col, descriptors } from '../../customizables'; +import { Route, Switch, useRouter } from '../../router'; +import { common, mqu } from '../../styledSystem'; import { ConnectedAccountsPage } from './ConnectedAccountsPage'; import { EmailPage } from './EmailPage'; import { MfaBackupCodeCreatePage } from './MfaBackupCodeCreatePage'; diff --git a/packages/clerk-js/src/ui/UserProfile/EmailPage.tsx b/packages/clerk-js/src/ui/components/UserProfile/EmailPage.tsx similarity index 90% rename from packages/clerk-js/src/ui/UserProfile/EmailPage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/EmailPage.tsx index 3e705919f27..7b221f1284b 100644 --- a/packages/clerk-js/src/ui/UserProfile/EmailPage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/EmailPage.tsx @@ -1,12 +1,12 @@ import { EmailAddressResource } from '@clerk/types'; import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser, useEnvironment } from '../contexts'; -import { localizationKeys, Text } from '../customizables'; -import { Form, useCardState, withCardStateProvider } from '../elements'; -import { useRouter } from '../router'; -import { handleError, useFormControl } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser, useEnvironment } from '../../contexts'; +import { localizationKeys, Text } from '../../customizables'; +import { Form, useCardState, withCardStateProvider } from '../../elements'; +import { useRouter } from '../../router'; +import { handleError, useFormControl } from '../../utils'; import { FormButtons } from './FormButtons'; import { ContentPage } from './Page'; import { SuccessPage } from './SuccessPage'; diff --git a/packages/clerk-js/src/ui/UserProfile/EmailSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/EmailSection.tsx similarity index 94% rename from packages/clerk-js/src/ui/UserProfile/EmailSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/EmailSection.tsx index 8e103fd21a4..e0aae9daf98 100644 --- a/packages/clerk-js/src/ui/UserProfile/EmailSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/EmailSection.tsx @@ -1,11 +1,11 @@ import { EmailAddressResource } from '@clerk/types'; import React from 'react'; -import { useCoreUser } from '../contexts'; -import { Badge, Col, localizationKeys } from '../customizables'; -import { useCardState } from '../elements'; -import { useNavigate } from '../hooks/useNavigate'; -import { handleError } from '../utils'; +import { useCoreUser } from '../../contexts'; +import { Badge, Col, localizationKeys } from '../../customizables'; +import { useCardState } from '../../elements'; +import { useNavigate } from '../../hooks/useNavigate'; +import { handleError } from '../../utils'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { ProfileSection } from './Section'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/FormButtons.tsx b/packages/clerk-js/src/ui/components/UserProfile/FormButtons.tsx similarity index 87% rename from packages/clerk-js/src/ui/UserProfile/FormButtons.tsx rename to packages/clerk-js/src/ui/components/UserProfile/FormButtons.tsx index f2b9cad60ed..8da5575cd51 100644 --- a/packages/clerk-js/src/ui/UserProfile/FormButtons.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/FormButtons.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { Flex, localizationKeys } from '../customizables'; -import { Form } from '../elements'; -import { PropsOfComponent } from '../styledSystem'; +import { Flex, localizationKeys } from '../../customizables'; +import { Form } from '../../elements'; +import { PropsOfComponent } from '../../styledSystem'; import { useNavigateToFlowStart } from './NavigateToFlowStartButton'; type FormButtonsProps = PropsOfComponent<typeof Form.SubmitButton> & { diff --git a/packages/clerk-js/src/ui/UserProfile/LinkButtonWithDescription.tsx b/packages/clerk-js/src/ui/components/UserProfile/LinkButtonWithDescription.tsx similarity index 91% rename from packages/clerk-js/src/ui/UserProfile/LinkButtonWithDescription.tsx rename to packages/clerk-js/src/ui/components/UserProfile/LinkButtonWithDescription.tsx index 5a0a808c602..13729fbf960 100644 --- a/packages/clerk-js/src/ui/UserProfile/LinkButtonWithDescription.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/LinkButtonWithDescription.tsx @@ -1,6 +1,6 @@ -import { Button, Col, Flex, LocalizationKey, Text, useLocalizations } from '../customizables'; -import { useLoadingStatus } from '../hooks'; -import { PropsOfComponent } from '../styledSystem'; +import { Button, Col, Flex, LocalizationKey, Text, useLocalizations } from '../../customizables'; +import { useLoadingStatus } from '../../hooks'; +import { PropsOfComponent } from '../../styledSystem'; type LinkButtonWithTextDescriptionProps = Omit<PropsOfComponent<typeof Button>, 'title'> & { title: LocalizationKey; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeAccordion.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeAccordion.tsx similarity index 86% rename from packages/clerk-js/src/ui/UserProfile/MfaBackupCodeAccordion.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeAccordion.tsx index 79c52aa8b4c..9d525bcda11 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeAccordion.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeAccordion.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { Col, Icon } from '../customizables'; -import { useNavigate } from '../hooks'; -import { DotCircle } from '../icons'; +import { Col, Icon } from '../../customizables'; +import { useNavigate } from '../../hooks'; +import { DotCircle } from '../../icons'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeCreatePage.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeCreatePage.tsx similarity index 89% rename from packages/clerk-js/src/ui/UserProfile/MfaBackupCodeCreatePage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeCreatePage.tsx index c4f5b59ce07..dcbfc20b5d8 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeCreatePage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeCreatePage.tsx @@ -1,10 +1,10 @@ import { BackupCodeResource } from '@clerk/types'; import React from 'react'; -import { useCoreUser } from '../contexts'; -import { localizationKeys, Text } from '../customizables'; -import { FullHeightLoader, useCardState } from '../elements'; -import { handleError } from '../utils'; +import { useCoreUser } from '../../contexts'; +import { localizationKeys, Text } from '../../customizables'; +import { FullHeightLoader, useCardState } from '../../elements'; +import { handleError } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { MfaBackupCodeList } from './MfaBackupCodeList'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeList.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeList.tsx similarity index 91% rename from packages/clerk-js/src/ui/UserProfile/MfaBackupCodeList.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeList.tsx index 05fa84a2a70..98300cf678d 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeList.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeList.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import { PrintableComponent, usePrintable } from '../common'; -import { useCoreUser, useEnvironment } from '../contexts'; -import { Button, Col, Flex, Grid, Heading, LocalizationKey, Text } from '../customizables'; -import { useClipboard } from '../hooks'; -import { mqu } from '../styledSystem'; -import { getIdentifier } from '../utils'; +import { PrintableComponent, usePrintable } from '../../common'; +import { useCoreUser, useEnvironment } from '../../contexts'; +import { Button, Col, Flex, Grid, Heading, LocalizationKey, Text } from '../../customizables'; +import { useClipboard } from '../../hooks'; +import { mqu } from '../../styledSystem'; +import { getIdentifier } from '../../utils'; import { MfaBackupCodeTile } from './MfaBackupCodeTile'; type MfaBackupCodeListProps = { diff --git a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodePage.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodePage.tsx similarity index 89% rename from packages/clerk-js/src/ui/UserProfile/MfaBackupCodePage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodePage.tsx index 85c414059e6..377dfaaa0b4 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodePage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodePage.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { Button, Text } from '../customizables'; -import { withCardStateProvider } from '../elements'; +import { useWizard, Wizard } from '../../common'; +import { Button, Text } from '../../customizables'; +import { withCardStateProvider } from '../../elements'; import { FormButtonContainer } from './FormButtons'; import { MfaBackupCodeCreatePage } from './MfaBackupCodeCreatePage'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeTile.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeTile.tsx similarity index 87% rename from packages/clerk-js/src/ui/UserProfile/MfaBackupCodeTile.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeTile.tsx index edf42d48f5e..ab77fa785f1 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaBackupCodeTile.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeTile.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Flex, Text } from '../customizables'; +import { Flex, Text } from '../../customizables'; export const MfaBackupCodeTile = (props: { code: string }) => { const { code } = props; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaPage.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaPage.tsx similarity index 93% rename from packages/clerk-js/src/ui/UserProfile/MfaPage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaPage.tsx index e6004f528e2..eb42a725c04 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaPage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaPage.tsx @@ -1,11 +1,11 @@ import { VerificationStrategy } from '@clerk/types'; import React from 'react'; -import { useCoreUser, useEnvironment } from '../contexts'; -import { Col, Grid, localizationKeys, Text } from '../customizables'; -import { TileButton, useCardState, withCardStateProvider } from '../elements'; -import { AuthApp, DotCircle, Mobile } from '../icons'; -import { mqu } from '../styledSystem'; +import { useCoreUser, useEnvironment } from '../../contexts'; +import { Col, Grid, localizationKeys, Text } from '../../customizables'; +import { TileButton, useCardState, withCardStateProvider } from '../../elements'; +import { AuthApp, DotCircle, Mobile } from '../../icons'; +import { mqu } from '../../styledSystem'; import { FormButtonContainer } from './FormButtons'; import { MfaBackupCodePage } from './MfaBackupCodePage'; import { MfaPhoneCodePage } from './MfaPhoneCodePage'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaPhoneCodeAccordion.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaPhoneCodeAccordion.tsx similarity index 88% rename from packages/clerk-js/src/ui/UserProfile/MfaPhoneCodeAccordion.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaPhoneCodeAccordion.tsx index 9a00d0aedb3..03f55198c54 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaPhoneCodeAccordion.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaPhoneCodeAccordion.tsx @@ -1,11 +1,11 @@ import { PhoneNumberResource } from '@clerk/types'; import React from 'react'; -import { Badge, Col, Icon } from '../customizables'; -import { FormattedPhoneNumberText, useCardState } from '../elements'; -import { useNavigate } from '../hooks'; -import { Mobile } from '../icons'; -import { handleError } from '../utils'; +import { Badge, Col, Icon } from '../../customizables'; +import { FormattedPhoneNumberText, useCardState } from '../../elements'; +import { useNavigate } from '../../hooks'; +import { Mobile } from '../../icons'; +import { handleError } from '../../utils'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaPhoneCodePage.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaPhoneCodePage.tsx similarity index 95% rename from packages/clerk-js/src/ui/UserProfile/MfaPhoneCodePage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaPhoneCodePage.tsx index 905f4061691..9e3775a3d93 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaPhoneCodePage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaPhoneCodePage.tsx @@ -1,11 +1,11 @@ import { PhoneNumberResource } from '@clerk/types'; import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser } from '../contexts'; -import { Col, Text } from '../customizables'; -import { ArrowBlockButton, useCardState, withCardStateProvider } from '../elements'; -import { getFlagEmojiFromCountryIso, handleError, parsePhoneString, stringToFormattedPhoneString } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser } from '../../contexts'; +import { Col, Text } from '../../customizables'; +import { ArrowBlockButton, useCardState, withCardStateProvider } from '../../elements'; +import { getFlagEmojiFromCountryIso, handleError, parsePhoneString, stringToFormattedPhoneString } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; import { ContentPage } from './Page'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaSection.tsx similarity index 91% rename from packages/clerk-js/src/ui/UserProfile/MfaSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaSection.tsx index 394ad538e1f..fc271f28e06 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaSection.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useCoreUser, useEnvironment } from '../contexts'; -import { localizationKeys } from '../customizables'; -import { useNavigate } from '../hooks'; +import { useCoreUser, useEnvironment } from '../../contexts'; +import { localizationKeys } from '../../customizables'; +import { useNavigate } from '../../hooks'; import { MfaBackupCodeAccordion } from './MfaBackupCodeAccordion'; import { MfaPhoneCodeAccordion } from './MfaPhoneCodeAccordion'; import { MfaTOTPAccordion } from './MfaTOTPAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaTOTPAccordion.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaTOTPAccordion.tsx similarity index 89% rename from packages/clerk-js/src/ui/UserProfile/MfaTOTPAccordion.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaTOTPAccordion.tsx index c15812f03ae..7c569ba7d60 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaTOTPAccordion.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaTOTPAccordion.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useNavigate } from '../hooks'; -import { Badge, Col, Icon } from '../customizables'; -import { AuthApp } from '../icons'; +import { Badge, Col, Icon } from '../../customizables'; +import { useNavigate } from '../../hooks'; +import { AuthApp } from '../../icons'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/MfaTOTPPage.tsx b/packages/clerk-js/src/ui/components/UserProfile/MfaTOTPPage.tsx similarity index 89% rename from packages/clerk-js/src/ui/UserProfile/MfaTOTPPage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/MfaTOTPPage.tsx index 6082801ee5b..74d367d9b8f 100644 --- a/packages/clerk-js/src/ui/UserProfile/MfaTOTPPage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/MfaTOTPPage.tsx @@ -1,8 +1,8 @@ import { TOTPResource } from '@clerk/types'; import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { withCardStateProvider } from '../elements'; +import { useWizard, Wizard } from '../../common'; +import { withCardStateProvider } from '../../elements'; import { AddAuthenticatorApp } from './AddAuthenticatorApp'; import { SuccessPage } from './SuccessPage'; import { VerifyTOTP } from './VerifyTOTP'; diff --git a/packages/clerk-js/src/ui/UserProfile/Navbar.tsx b/packages/clerk-js/src/ui/components/UserProfile/Navbar.tsx similarity index 95% rename from packages/clerk-js/src/ui/UserProfile/Navbar.tsx rename to packages/clerk-js/src/ui/components/UserProfile/Navbar.tsx index 4593d9cd5ab..63c6d65a9fb 100644 --- a/packages/clerk-js/src/ui/UserProfile/Navbar.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Navbar.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import { Button, Col, descriptors, Flex, Icon, localizationKeys, useLocalizations } from '../customizables'; -import { ElementDescriptor, ElementId } from '../customizables/elementDescriptors'; -import { usePopover, useSafeLayoutEffect } from '../hooks'; -import { Menu, TickShield, User } from '../icons'; -import { animations, mqu, PropsOfComponent } from '../styledSystem'; -import { colors, createContextAndHook } from '../utils'; +import { Button, Col, descriptors, Flex, Icon, localizationKeys, useLocalizations } from '../../customizables'; +import { ElementDescriptor, ElementId } from '../../customizables/elementDescriptors'; +import { usePopover, useSafeLayoutEffect } from '../../hooks'; +import { Menu, TickShield, User } from '../../icons'; +import { animations, mqu, PropsOfComponent } from '../../styledSystem'; +import { colors, createContextAndHook } from '../../utils'; import { useNavigateToFlowStart } from './NavigateToFlowStartButton'; type NavbarContextValue = { isOpen: boolean; open: () => void; close: () => void }; diff --git a/packages/clerk-js/src/ui/UserProfile/NavigateToFlowStartButton.tsx b/packages/clerk-js/src/ui/components/UserProfile/NavigateToFlowStartButton.tsx similarity index 82% rename from packages/clerk-js/src/ui/UserProfile/NavigateToFlowStartButton.tsx rename to packages/clerk-js/src/ui/components/UserProfile/NavigateToFlowStartButton.tsx index 8aa24904d6d..ef631707bab 100644 --- a/packages/clerk-js/src/ui/UserProfile/NavigateToFlowStartButton.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/NavigateToFlowStartButton.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useRouter } from '../router'; -import { Button } from '../customizables'; -import { PropsOfComponent } from '../styledSystem'; +import { Button } from '../../customizables'; +import { useRouter } from '../../router'; +import { PropsOfComponent } from '../../styledSystem'; type NavigateToFlowStartButtonProps = PropsOfComponent<typeof Button>; diff --git a/packages/clerk-js/src/ui/UserProfile/Page.tsx b/packages/clerk-js/src/ui/components/UserProfile/Page.tsx similarity index 81% rename from packages/clerk-js/src/ui/UserProfile/Page.tsx rename to packages/clerk-js/src/ui/components/UserProfile/Page.tsx index ba5d3203315..ee4d45c8991 100644 --- a/packages/clerk-js/src/ui/UserProfile/Page.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Page.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { Col, descriptors, LocalizationKey } from '../customizables'; -import { CardAlert, Header, useCardState } from '../elements'; -import { PropsOfComponent } from '../styledSystem'; +import { Col, descriptors, LocalizationKey } from '../../customizables'; +import { CardAlert, Header, useCardState } from '../../elements'; +import { PropsOfComponent } from '../../styledSystem'; import { Breadcrumbs } from './Breadcrumbs'; import { NavbarMenuButtonRow } from './Navbar'; diff --git a/packages/clerk-js/src/ui/UserProfile/PasswordPage.tsx b/packages/clerk-js/src/ui/components/UserProfile/PasswordPage.tsx similarity index 88% rename from packages/clerk-js/src/ui/UserProfile/PasswordPage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/PasswordPage.tsx index b0e47637f0c..5452c6de995 100644 --- a/packages/clerk-js/src/ui/UserProfile/PasswordPage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/PasswordPage.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser } from '../contexts'; -import { localizationKeys } from '../customizables'; -import { Form, useCardState, withCardStateProvider } from '../elements'; -import { handleError, useFormControl } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser } from '../../contexts'; +import { localizationKeys } from '../../customizables'; +import { Form, useCardState, withCardStateProvider } from '../../elements'; +import { handleError, useFormControl } from '../../utils'; import { FormButtons } from './FormButtons'; import { ContentPage } from './Page'; import { SuccessPage } from './SuccessPage'; diff --git a/packages/clerk-js/src/ui/UserProfile/PasswordSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/PasswordSection.tsx similarity index 86% rename from packages/clerk-js/src/ui/UserProfile/PasswordSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/PasswordSection.tsx index 984b3330ee9..e72cdba9f11 100644 --- a/packages/clerk-js/src/ui/UserProfile/PasswordSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/PasswordSection.tsx @@ -1,6 +1,6 @@ -import { useCoreUser } from '../contexts'; -import { localizationKeys, Text } from '../customizables'; -import { useNavigate } from '../hooks/useNavigate'; +import { useCoreUser } from '../../contexts'; +import { localizationKeys, Text } from '../../customizables'; +import { useNavigate } from '../../hooks/useNavigate'; import { ProfileSection } from './Section'; import { AddBlockButton } from './UserProfileBlockButtons'; diff --git a/packages/clerk-js/src/ui/UserProfile/PhonePage.tsx b/packages/clerk-js/src/ui/components/UserProfile/PhonePage.tsx similarity index 90% rename from packages/clerk-js/src/ui/UserProfile/PhonePage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/PhonePage.tsx index 1d6162070bb..d4a493de614 100644 --- a/packages/clerk-js/src/ui/UserProfile/PhonePage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/PhonePage.tsx @@ -1,12 +1,12 @@ import { PhoneNumberResource } from '@clerk/types'; import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser } from '../contexts'; -import { Text } from '../customizables'; -import { Form, useCardState, withCardStateProvider } from '../elements'; -import { useRouter } from '../router'; -import { handleError, useFormControl } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser } from '../../contexts'; +import { Text } from '../../customizables'; +import { Form, useCardState, withCardStateProvider } from '../../elements'; +import { useRouter } from '../../router'; +import { handleError, useFormControl } from '../../utils'; import { FormButtons } from './FormButtons'; import { ContentPage } from './Page'; import { SuccessPage } from './SuccessPage'; diff --git a/packages/clerk-js/src/ui/UserProfile/PhoneSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/PhoneSection.tsx similarity index 94% rename from packages/clerk-js/src/ui/UserProfile/PhoneSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/PhoneSection.tsx index 6bda8d525e5..4adc22c86a2 100644 --- a/packages/clerk-js/src/ui/UserProfile/PhoneSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/PhoneSection.tsx @@ -1,11 +1,11 @@ import { PhoneNumberResource } from '@clerk/types'; import React from 'react'; -import { useCoreUser } from '../contexts'; -import { Badge, Col, localizationKeys, Text } from '../customizables'; -import { useCardState } from '../elements'; -import { useNavigate } from '../hooks'; -import { getFlagEmojiFromCountryIso, handleError, parsePhoneString, stringToFormattedPhoneString } from '../utils'; +import { useCoreUser } from '../../contexts'; +import { Badge, Col, localizationKeys, Text } from '../../customizables'; +import { useCardState } from '../../elements'; +import { useNavigate } from '../../hooks'; +import { getFlagEmojiFromCountryIso, handleError, parsePhoneString, stringToFormattedPhoneString } from '../../utils'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { ProfileSection } from './Section'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/ProfilePage.tsx b/packages/clerk-js/src/ui/components/UserProfile/ProfilePage.tsx similarity index 93% rename from packages/clerk-js/src/ui/UserProfile/ProfilePage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/ProfilePage.tsx index 1d61d007774..871e837f1d1 100644 --- a/packages/clerk-js/src/ui/UserProfile/ProfilePage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/ProfilePage.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser, useEnvironment } from '../contexts'; -import { Button, Col, Flex, localizationKeys, Text } from '../customizables'; -import { Avatar, FileDropArea, Form, useCardState, withCardStateProvider } from '../elements'; -import { handleError, useFormControl } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser, useEnvironment } from '../../contexts'; +import { Button, Col, Flex, localizationKeys, Text } from '../../customizables'; +import { Avatar, FileDropArea, Form, useCardState, withCardStateProvider } from '../../elements'; +import { handleError, useFormControl } from '../../utils'; import { FormButtons } from './FormButtons'; import { ContentPage } from './Page'; import { SuccessPage } from './SuccessPage'; diff --git a/packages/clerk-js/src/ui/UserProfile/RemoveResourcePage.tsx b/packages/clerk-js/src/ui/components/UserProfile/RemoveResourcePage.tsx similarity index 93% rename from packages/clerk-js/src/ui/UserProfile/RemoveResourcePage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/RemoveResourcePage.tsx index f4027674256..fadd42260de 100644 --- a/packages/clerk-js/src/ui/UserProfile/RemoveResourcePage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/RemoveResourcePage.tsx @@ -1,12 +1,12 @@ import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser } from '../contexts'; -import { Text } from '../customizables'; -import { Form, useCardState, withCardStateProvider } from '../elements'; -import { useEnabledThirdPartyProviders } from '../hooks'; -import { useRouter } from '../router'; -import { handleError } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser } from '../../contexts'; +import { Text } from '../../customizables'; +import { Form, useCardState, withCardStateProvider } from '../../elements'; +import { useEnabledThirdPartyProviders } from '../../hooks'; +import { useRouter } from '../../router'; +import { handleError } from '../../utils'; import { FormButtons } from './FormButtons'; import { ContentPage } from './Page'; import { SuccessPage } from './SuccessPage'; diff --git a/packages/clerk-js/src/ui/UserProfile/RootPage.tsx b/packages/clerk-js/src/ui/components/UserProfile/RootPage.tsx similarity index 89% rename from packages/clerk-js/src/ui/UserProfile/RootPage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/RootPage.tsx index 71a1823f5d0..45307e54de8 100644 --- a/packages/clerk-js/src/ui/UserProfile/RootPage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/RootPage.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useEnvironment } from '../contexts'; -import { Col, descriptors, localizationKeys } from '../customizables'; -import { Header } from '../elements'; +import { useEnvironment } from '../../contexts'; +import { Col, descriptors, localizationKeys } from '../../customizables'; +import { Header } from '../../elements'; import { ActiveDevicesSection } from './ActiveDevicesSection'; import { ConnectedAccountsSection } from './ConnectedAccountsSection'; import { EmailsSection } from './EmailSection'; @@ -16,13 +16,13 @@ import { getSecondFactors } from './utils'; import { Web3Section } from './Web3Section'; export const RootPage = () => { - const { attributes, social } = useEnvironment().userSettings; + const { attributes, social, instanceIsPasswordBased } = useEnvironment().userSettings; const showUsername = attributes.username.enabled; const showEmail = attributes.email_address.enabled; const showPhone = attributes.phone_number.enabled; const showConnectedAccounts = social && Object.values(social).filter(p => p.enabled).length > 0; const showWeb3 = attributes.web3_wallet.enabled; - const showPassword = attributes.password.enabled && attributes.password.required; + const showPassword = instanceIsPasswordBased; const showMfa = getSecondFactors(attributes).length > 0; return ( diff --git a/packages/clerk-js/src/ui/UserProfile/Section.tsx b/packages/clerk-js/src/ui/components/UserProfile/Section.tsx similarity index 91% rename from packages/clerk-js/src/ui/UserProfile/Section.tsx rename to packages/clerk-js/src/ui/components/UserProfile/Section.tsx index 7a0a3d6d64b..831ab659aa1 100644 --- a/packages/clerk-js/src/ui/UserProfile/Section.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Section.tsx @@ -1,8 +1,8 @@ import { ProfileSectionId } from '@clerk/types'; -import { Col, descriptors, Flex, LocalizationKey, Text } from '../customizables'; -import { ElementDescriptor, ElementId } from '../customizables/elementDescriptors'; -import { PropsOfComponent } from '../styledSystem'; +import { Col, descriptors, Flex, LocalizationKey, Text } from '../../customizables'; +import { ElementDescriptor, ElementId } from '../../customizables/elementDescriptors'; +import { PropsOfComponent } from '../../styledSystem'; type ProfileSectionProps = Omit<PropsOfComponent<typeof Flex>, 'title'> & { title: LocalizationKey; diff --git a/packages/clerk-js/src/ui/UserProfile/SuccessPage.tsx b/packages/clerk-js/src/ui/components/UserProfile/SuccessPage.tsx similarity index 93% rename from packages/clerk-js/src/ui/UserProfile/SuccessPage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/SuccessPage.tsx index 1aee4281959..033b7e9db7e 100644 --- a/packages/clerk-js/src/ui/UserProfile/SuccessPage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/SuccessPage.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { LocalizationKey, localizationKeys, Text } from '../customizables'; +import { LocalizationKey, localizationKeys, Text } from '../../customizables'; import { FormButtonContainer } from './FormButtons'; import { MfaBackupCodeList } from './MfaBackupCodeList'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; diff --git a/packages/clerk-js/src/ui/UserProfile/UserProfile.tsx b/packages/clerk-js/src/ui/components/UserProfile/UserProfile.tsx similarity index 84% rename from packages/clerk-js/src/ui/UserProfile/UserProfile.tsx rename to packages/clerk-js/src/ui/components/UserProfile/UserProfile.tsx index e267dbf9513..be863a7a5b2 100644 --- a/packages/clerk-js/src/ui/UserProfile/UserProfile.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/UserProfile.tsx @@ -1,11 +1,11 @@ import { UserProfileProps } from '@clerk/types/src'; import React from 'react'; -import { ComponentContext, withCoreUserGuard } from '../contexts'; -import { Route, Switch } from '../router'; -import { UserProfileCtx } from '../types'; -import { Flow } from '../customizables'; -import { UserProfileCard, withCardStateProvider } from '../elements'; +import { ComponentContext, withCoreUserGuard } from '../../contexts'; +import { Flow } from '../../customizables'; +import { UserProfileCard, withCardStateProvider } from '../../elements'; +import { Route, Switch } from '../../router'; +import { UserProfileCtx } from '../../types'; import { Content } from './Content'; import { NavBar, NavbarContextProvider } from './Navbar'; import { VerificationSuccessPage } from './VerifyWithLink'; diff --git a/packages/clerk-js/src/ui/UserProfile/UserProfileAccordion.tsx b/packages/clerk-js/src/ui/components/UserProfile/UserProfileAccordion.tsx similarity index 60% rename from packages/clerk-js/src/ui/UserProfile/UserProfileAccordion.tsx rename to packages/clerk-js/src/ui/components/UserProfile/UserProfileAccordion.tsx index eb84d73a089..eee7bd25cde 100644 --- a/packages/clerk-js/src/ui/UserProfile/UserProfileAccordion.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/UserProfileAccordion.tsx @@ -1,6 +1,6 @@ -import { useUserProfileContext } from '../contexts'; -import { AccordionItem } from '../elements'; -import { PropsOfComponent } from '../styledSystem'; +import { useUserProfileContext } from '../../contexts'; +import { AccordionItem } from '../../elements'; +import { PropsOfComponent } from '../../styledSystem'; export const UserProfileAccordion = (props: PropsOfComponent<typeof AccordionItem>) => { const isModal = useUserProfileContext().mode === 'modal'; diff --git a/packages/clerk-js/src/ui/UserProfile/UserProfileBlockButtons.tsx b/packages/clerk-js/src/ui/components/UserProfile/UserProfileBlockButtons.tsx similarity index 80% rename from packages/clerk-js/src/ui/UserProfile/UserProfileBlockButtons.tsx rename to packages/clerk-js/src/ui/components/UserProfile/UserProfileBlockButtons.tsx index a361145a0ff..76b414ca723 100644 --- a/packages/clerk-js/src/ui/UserProfile/UserProfileBlockButtons.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/UserProfileBlockButtons.tsx @@ -1,7 +1,7 @@ -import { descriptors, Icon } from '../customizables'; -import { ArrowBlockButton } from '../elements'; -import { Plus } from '../icons'; -import { PropsOfComponent } from '../styledSystem'; +import { descriptors, Icon } from '../../customizables'; +import { ArrowBlockButton } from '../../elements'; +import { Plus } from '../../icons'; +import { PropsOfComponent } from '../../styledSystem'; type BlockButtonProps = PropsOfComponent<typeof ArrowBlockButton>; diff --git a/packages/clerk-js/src/ui/UserProfile/UserProfileSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/UserProfileSection.tsx similarity index 78% rename from packages/clerk-js/src/ui/UserProfile/UserProfileSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/UserProfileSection.tsx index ff7d8b1c5e2..16d134dc1a1 100644 --- a/packages/clerk-js/src/ui/UserProfile/UserProfileSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/UserProfileSection.tsx @@ -1,10 +1,10 @@ import { UserResource } from '@clerk/types'; import React from 'react'; -import { useCoreUser } from '../contexts'; -import { localizationKeys } from '../customizables'; -import { UserPreview } from '../elements'; -import { useNavigate } from '../hooks'; +import { useCoreUser } from '../../contexts'; +import { localizationKeys } from '../../customizables'; +import { UserPreview } from '../../elements'; +import { useNavigate } from '../../hooks'; import { ProfileSection } from './Section'; import { BlockButton } from './UserProfileBlockButtons'; diff --git a/packages/clerk-js/src/ui/UserProfile/UsernamePage.tsx b/packages/clerk-js/src/ui/components/UserProfile/UsernamePage.tsx similarity index 83% rename from packages/clerk-js/src/ui/UserProfile/UsernamePage.tsx rename to packages/clerk-js/src/ui/components/UserProfile/UsernamePage.tsx index a94308eafca..0293e1617ef 100644 --- a/packages/clerk-js/src/ui/UserProfile/UsernamePage.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/UsernamePage.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser } from '../contexts'; -import { localizationKeys } from '../customizables'; -import { Form, useCardState, withCardStateProvider } from '../elements'; -import { handleError, useFormControl } from '../utils'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser } from '../../contexts'; +import { localizationKeys } from '../../customizables'; +import { Form, useCardState, withCardStateProvider } from '../../elements'; +import { handleError, useFormControl } from '../../utils'; import { FormButtons } from './FormButtons'; import { ContentPage } from './Page'; import { SuccessPage } from './SuccessPage'; diff --git a/packages/clerk-js/src/ui/UserProfile/UsernameSection.tsx b/packages/clerk-js/src/ui/components/UserProfile/UsernameSection.tsx similarity index 85% rename from packages/clerk-js/src/ui/UserProfile/UsernameSection.tsx rename to packages/clerk-js/src/ui/components/UserProfile/UsernameSection.tsx index 86819722879..0da866ec351 100644 --- a/packages/clerk-js/src/ui/UserProfile/UsernameSection.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/UsernameSection.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useCoreUser } from '../contexts'; -import { localizationKeys, Text } from '../customizables'; -import { useNavigate } from '../hooks/useNavigate'; +import { useCoreUser } from '../../contexts'; +import { localizationKeys, Text } from '../../customizables'; +import { useNavigate } from '../../hooks/useNavigate'; import { ProfileSection } from './Section'; import { AddBlockButton } from './UserProfileBlockButtons'; diff --git a/packages/clerk-js/src/ui/UserProfile/VerifyTOTP.tsx b/packages/clerk-js/src/ui/components/UserProfile/VerifyTOTP.tsx similarity index 85% rename from packages/clerk-js/src/ui/UserProfile/VerifyTOTP.tsx rename to packages/clerk-js/src/ui/components/UserProfile/VerifyTOTP.tsx index a653f0734d3..b0f9e7f64e2 100644 --- a/packages/clerk-js/src/ui/UserProfile/VerifyTOTP.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/VerifyTOTP.tsx @@ -1,12 +1,12 @@ import { TOTPResource } from '@clerk/types'; import React from 'react'; -import { useCoreUser } from '../contexts'; -import { Col } from '../customizables'; -import { useCardState, useCodeControl } from '../elements'; -import { CodeForm } from '../elements/CodeForm'; -import { useLoadingStatus } from '../hooks'; -import { handleError, sleep, useFormControl } from '../utils'; +import { useCoreUser } from '../../contexts'; +import { Col } from '../../customizables'; +import { useCardState, useCodeControl } from '../../elements'; +import { CodeForm } from '../../elements/CodeForm'; +import { useLoadingStatus } from '../../hooks'; +import { handleError, sleep, useFormControl } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; import { ContentPage } from './Page'; diff --git a/packages/clerk-js/src/ui/UserProfile/VerifyWithCode.tsx b/packages/clerk-js/src/ui/components/UserProfile/VerifyWithCode.tsx similarity index 88% rename from packages/clerk-js/src/ui/UserProfile/VerifyWithCode.tsx rename to packages/clerk-js/src/ui/components/UserProfile/VerifyWithCode.tsx index c139263d9f4..da80b05a3e8 100644 --- a/packages/clerk-js/src/ui/UserProfile/VerifyWithCode.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/VerifyWithCode.tsx @@ -1,11 +1,11 @@ import { EmailAddressResource, PhoneNumberResource } from '@clerk/types'; import React from 'react'; -import { localizationKeys } from '../customizables'; -import { useCardState, useCodeControl } from '../elements'; -import { CodeForm } from '../elements/CodeForm'; -import { useLoadingStatus } from '../hooks'; -import { handleError, sleep, useFormControl } from '../utils'; +import { localizationKeys } from '../../customizables'; +import { useCardState, useCodeControl } from '../../elements'; +import { CodeForm } from '../../elements/CodeForm'; +import { useLoadingStatus } from '../../hooks'; +import { handleError, sleep, useFormControl } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; diff --git a/packages/clerk-js/src/ui/UserProfile/VerifyWithLink.tsx b/packages/clerk-js/src/ui/components/UserProfile/VerifyWithLink.tsx similarity index 84% rename from packages/clerk-js/src/ui/UserProfile/VerifyWithLink.tsx rename to packages/clerk-js/src/ui/components/UserProfile/VerifyWithLink.tsx index 9c81432dbd1..f616bcf8f4d 100644 --- a/packages/clerk-js/src/ui/UserProfile/VerifyWithLink.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/VerifyWithLink.tsx @@ -1,13 +1,13 @@ import { EmailAddressResource } from '@clerk/types'; import React from 'react'; -import { EmailLinkStatusCard } from '../common'; -import { buildMagicLinkRedirectUrl } from '../common/redirects'; -import { useEnvironment, useUserProfileContext } from '../contexts'; -import { localizationKeys } from '../customizables'; -import { useCardState, VerificationLink } from '../elements'; -import { useMagicLink } from '../hooks'; -import { handleError } from '../utils'; +import { EmailLinkStatusCard } from '../../common'; +import { buildMagicLinkRedirectUrl } from '../../common/redirects'; +import { useEnvironment, useUserProfileContext } from '../../contexts'; +import { localizationKeys } from '../../customizables'; +import { useCardState, VerificationLink } from '../../elements'; +import { useMagicLink } from '../../hooks'; +import { handleError } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; diff --git a/packages/clerk-js/src/ui/UserProfile/Web3Page.tsx b/packages/clerk-js/src/ui/components/UserProfile/Web3Page.tsx similarity index 92% rename from packages/clerk-js/src/ui/UserProfile/Web3Page.tsx rename to packages/clerk-js/src/ui/components/UserProfile/Web3Page.tsx index ba6ce6f26b7..52798313fec 100644 --- a/packages/clerk-js/src/ui/UserProfile/Web3Page.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3Page.tsx @@ -1,14 +1,14 @@ import { Web3Strategy, Web3WalletResource } from '@clerk/types'; import React from 'react'; -import { generateSignatureWithMetamask, getMetamaskIdentifier } from '../../utils/web3'; -import { useWizard, Wizard } from '../common'; -import { useCoreUser } from '../contexts'; -import { Col, descriptors, Image, Text } from '../customizables'; -import { ArrowBlockButton, useCardState, withCardStateProvider } from '../elements'; -import { useEnabledThirdPartyProviders } from '../hooks'; -import { useRouter } from '../router'; -import { getFieldError, handleError } from '../utils'; +import { generateSignatureWithMetamask, getMetamaskIdentifier } from '../../../utils/web3'; +import { useWizard, Wizard } from '../../common'; +import { useCoreUser } from '../../contexts'; +import { Col, descriptors, Image, Text } from '../../customizables'; +import { ArrowBlockButton, useCardState, withCardStateProvider } from '../../elements'; +import { useEnabledThirdPartyProviders } from '../../hooks'; +import { useRouter } from '../../router'; +import { getFieldError, handleError } from '../../utils'; import { FormButtonContainer } from './FormButtons'; import { NavigateToFlowStartButton } from './NavigateToFlowStartButton'; import { ContentPage } from './Page'; diff --git a/packages/clerk-js/src/ui/UserProfile/Web3Section.tsx b/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx similarity index 90% rename from packages/clerk-js/src/ui/UserProfile/Web3Section.tsx rename to packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx index f190912caa9..02bb7b74173 100644 --- a/packages/clerk-js/src/ui/UserProfile/Web3Section.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx @@ -1,9 +1,9 @@ import { Web3WalletResource } from '@clerk/types'; -import { useCoreUser } from '../contexts'; -import { Col, Flex, Image, localizationKeys } from '../customizables'; -import { useEnabledThirdPartyProviders } from '../hooks'; -import { useNavigate } from '../hooks/useNavigate'; +import { useCoreUser } from '../../contexts'; +import { Col, Flex, Image, localizationKeys } from '../../customizables'; +import { useEnabledThirdPartyProviders } from '../../hooks'; +import { useNavigate } from '../../hooks/useNavigate'; import { LinkButtonWithDescription } from './LinkButtonWithDescription'; import { ProfileSection } from './Section'; import { UserProfileAccordion } from './UserProfileAccordion'; diff --git a/packages/clerk-js/src/ui/UserProfile/index.ts b/packages/clerk-js/src/ui/components/UserProfile/index.ts similarity index 100% rename from packages/clerk-js/src/ui/UserProfile/index.ts rename to packages/clerk-js/src/ui/components/UserProfile/index.ts diff --git a/packages/clerk-js/src/ui/UserProfile/utils.ts b/packages/clerk-js/src/ui/components/UserProfile/utils.ts similarity index 100% rename from packages/clerk-js/src/ui/UserProfile/utils.ts rename to packages/clerk-js/src/ui/components/UserProfile/utils.ts From 722658f223405150e69c094f6f0c73f1d09f1a05 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Mon, 10 Oct 2022 22:19:02 +0300 Subject: [PATCH 21/41] chore(clerk-js): Introduce OrganizationSwitcher file structure --- packages/clerk-js/src/ui/Components.tsx | 3 +- .../OrganizationSwitcher.tsx | 46 +++++++++++++++++++ .../components/OrganizationSwitcher/index.ts | 1 + 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx create mode 100644 packages/clerk-js/src/ui/components/OrganizationSwitcher/index.ts diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx index b1d81282239..97a6f2cc97f 100644 --- a/packages/clerk-js/src/ui/Components.tsx +++ b/packages/clerk-js/src/ui/Components.tsx @@ -6,6 +6,7 @@ import ReactDOM from 'react-dom'; import { PRESERVED_QUERYSTRING_PARAMS } from '../core/constants'; import { clerkUIErrorDOMElementNotFound } from '../core/errors'; +import { OrganizationSwitcher } from './components/OrganizationSwitcher'; import { SignIn, SignInModal } from './components/SignIn'; import { SignUp, SignUpModal } from './components/SignUp'; import { UserButton } from './components/UserButton'; @@ -56,8 +57,8 @@ const AvailableComponents = { SignUp, UserButton, UserProfile, + OrganizationSwitcher, OrganizationProfile: () => <div>hello from org profile</div>, - OrganizationSwitcher: () => <div>hello from org switcher</div>, }; type AvailableComponentNames = keyof typeof AvailableComponents; diff --git a/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx b/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx new file mode 100644 index 00000000000..861d5d19666 --- /dev/null +++ b/packages/clerk-js/src/ui/components/OrganizationSwitcher/OrganizationSwitcher.tsx @@ -0,0 +1,46 @@ +import React from 'react'; + +import { withCoreUserGuard } from '../../contexts'; +import { Flex, Flow } from '../../customizables'; +import { withCardStateProvider } from '../../elements'; +// import {Portal} from '../../elements/Portal'; +import { usePopover } from '../../hooks'; +// import {getFullName, getIdentifier} from '../../utils'; + +const _OrganizationSwitcher = () => { + // const { defaultOpen } = useUserButtonContext(); + const { floating, reference, styles, toggle, isOpen } = usePopover({ + placement: 'bottom-end', + offset: 8, + }); + + return ( + <Flow.Root flow='organizationSwitcher'> + <Flex + // elementDescriptor={descriptors.userButtonBox} + isOpen={isOpen} + align='center' + gap={2} + > + {/*<UserButtonTopLevelIdentifier />*/} + {/*<button*/} + {/* ref={reference}*/} + {/* onClick={toggle}>*/} + {/* // isOpen={isOpen}>*/} + {/* open me*/} + {/*</button>*/} + {/*<Portal>*/} + {/* <div*/} + {/* isOpen={isOpen}*/} + {/* close={toggle}*/} + {/* ref={floating}*/} + {/* style={{ ...styles }}>*/} + {/* hello*/} + {/* </div>*/} + {/*</Portal>*/} + </Flex> + </Flow.Root> + ); +}; + +export const OrganizationSwitcher = withCoreUserGuard(withCardStateProvider(_OrganizationSwitcher)); diff --git a/packages/clerk-js/src/ui/components/OrganizationSwitcher/index.ts b/packages/clerk-js/src/ui/components/OrganizationSwitcher/index.ts new file mode 100644 index 00000000000..d2ce931b01c --- /dev/null +++ b/packages/clerk-js/src/ui/components/OrganizationSwitcher/index.ts @@ -0,0 +1 @@ +export * from './OrganizationSwitcher'; From e7498c82a7539da20ccc84679b9d5cc8a97fe56f Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Mon, 10 Oct 2022 22:21:39 +0300 Subject: [PATCH 22/41] chore(clerk-js): Introduce OrganizationProfile file structure --- packages/clerk-js/src/ui/Components.tsx | 3 +- .../OrganizationProfile.tsx | 54 +++++++++++++++++++ .../components/OrganizationProfile/index.ts | 1 + 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfile.tsx create mode 100644 packages/clerk-js/src/ui/components/OrganizationProfile/index.ts diff --git a/packages/clerk-js/src/ui/Components.tsx b/packages/clerk-js/src/ui/Components.tsx index 97a6f2cc97f..6f1cdafcba5 100644 --- a/packages/clerk-js/src/ui/Components.tsx +++ b/packages/clerk-js/src/ui/Components.tsx @@ -6,6 +6,7 @@ import ReactDOM from 'react-dom'; import { PRESERVED_QUERYSTRING_PARAMS } from '../core/constants'; import { clerkUIErrorDOMElementNotFound } from '../core/errors'; +import { OrganizationProfile } from './components/OrganizationProfile'; import { OrganizationSwitcher } from './components/OrganizationSwitcher'; import { SignIn, SignInModal } from './components/SignIn'; import { SignUp, SignUpModal } from './components/SignUp'; @@ -58,7 +59,7 @@ const AvailableComponents = { UserButton, UserProfile, OrganizationSwitcher, - OrganizationProfile: () => <div>hello from org profile</div>, + OrganizationProfile, }; type AvailableComponentNames = keyof typeof AvailableComponents; diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfile.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfile.tsx new file mode 100644 index 00000000000..1c9df5e9a73 --- /dev/null +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfile.tsx @@ -0,0 +1,54 @@ +import { UserProfileProps } from '@clerk/types/src'; +import React from 'react'; + +import { Flow } from '../../customizables'; +import { withCardStateProvider } from '../../elements'; +import { Route, Switch } from '../../router'; + +const _OrganizationProfile = (_: UserProfileProps) => { + return ( + <Flow.Root flow='organizationProfile'> + <Flow.Part> + <Switch> + {/* PublicRoutes */} + <Route path='verify'>{/*<VerificationSuccessPage />*/}</Route> + <Route>{/*<AuthenticatedRoutes />*/}</Route> + </Switch> + </Flow.Part> + </Flow.Root> + ); +}; + +// const AuthenticatedRoutes = withCoreUserGuard(() => { +// const contentRef = React.useRef<HTMLDivElement>(null); +// return ( +// <UserProfileCard sx={{ height: '100%' }}> +// <NavbarContextProvider> +// <NavBar contentRef={contentRef} /> +// <Content ref={contentRef} /> +// </NavbarContextProvider> +// </UserProfileCard> +// ); +// }); + +export const OrganizationProfile = withCardStateProvider(_OrganizationProfile); +// +// export const UserProfileModal = (props: UserProfileProps): JSX.Element => { +// const userProfileProps: UserProfileCtx = { +// ...props, +// routing: 'virtual', +// componentName: 'OrganizationProfile', +// mode: 'modal', +// }; +// +// return ( +// <Route path='user'> +// <ComponentContext.Provider value={userProfileProps}> +// {/*TODO: Used by InvisibleRootBox, can we simplify? */} +// <div> +// <OrganizationProfile {...userProfileProps} /> +// </div> +// </ComponentContext.Provider> +// </Route> +// ); +// }; diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/index.ts b/packages/clerk-js/src/ui/components/OrganizationProfile/index.ts new file mode 100644 index 00000000000..98a8862a2e4 --- /dev/null +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/index.ts @@ -0,0 +1 @@ +export * from './OrganizationProfile'; From 1262f1bfacd10df0a292fe0250b8843729aa1162 Mon Sep 17 00:00:00 2001 From: George Desipris <73396808+desiprisg@users.noreply.github.com> Date: Wed, 12 Oct 2022 13:30:25 +0300 Subject: [PATCH 23/41] feat(clerk-js): Replace Switch Account text with icon --- .../UserButton/OtherSessionActions.tsx | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/clerk-js/src/ui/components/UserButton/OtherSessionActions.tsx b/packages/clerk-js/src/ui/components/UserButton/OtherSessionActions.tsx index 5794add6eb9..0e2f2f6196a 100644 --- a/packages/clerk-js/src/ui/components/UserButton/OtherSessionActions.tsx +++ b/packages/clerk-js/src/ui/components/UserButton/OtherSessionActions.tsx @@ -1,9 +1,10 @@ import React from 'react'; -import { Button, Flex, Text } from '../../customizables'; +import { Button, Flex, Icon } from '../../customizables'; import { UserPreview, UserPreviewProps } from '../../elements'; import { useCardState } from '../../elements/contexts'; -import { mqu, PropsOfComponent } from '../../styledSystem'; +import { SwitchArrows } from '../../icons'; +import { PropsOfComponent } from '../../styledSystem'; import { Actions } from './CurrentAccountActions'; export const SessionActions = (props: PropsOfComponent<typeof Flex>) => { @@ -38,6 +39,9 @@ export const UserPreviewButton = (props: UserPreviewButtonProps) => { borderRadius: 0, justifyContent: 'space-between', padding: `${theme.space.$3} ${theme.space.$6}`, + ':hover > svg': { + visibility: 'initial', + }, }), rest.sx, ]} @@ -46,17 +50,11 @@ export const UserPreviewButton = (props: UserPreviewButtonProps) => { user={user} size='sm' /> - <Text - variant='smallRegular' - sx={t => ({ - [mqu.xs]: { - display: 'none', - }, - color: t.colors.$blackAlpha500, - })} - > - Switch account - </Text> + + <Icon + icon={SwitchArrows} + sx={t => ({ color: t.colors.$blackAlpha500, marginLeft: t.space.$2, visibility: 'hidden' })} + /> </Button> ); }; From cb56f5c0313ba6f1fce50eae6fc3e3d596cf1b16 Mon Sep 17 00:00:00 2001 From: George Desipris <73396808+desiprisg@users.noreply.github.com> Date: Wed, 12 Oct 2022 14:00:44 +0300 Subject: [PATCH 24/41] feat(clerk-js): Add table and pagination elements * feat(clerk-js): Add first table primitives * fix(clerk-js): Fix the row spacing in the Table primitive * feat(clerk-js): First iteration of Pagination component * feat(clerk-js): Add usePagination hook * chore(clerk-js): Change names of Thead and Tbody components * feat(clerk-js,types): Add localization to Pagination component * refactor(clerk-js): Clean up the Table and Pagination components * refactor(clerk-js): Small code cleanup in Pagination component * fix(clerk-js): Fix by-one error in sibling calculations for Pagination --- .../clerk-js/src/ui/customizables/index.ts | 8 + .../clerk-js/src/ui/elements/Pagination.tsx | 170 ++++++++++++++++++ packages/clerk-js/src/ui/elements/index.ts | 1 + .../ui/localization/defaultEnglishResource.ts | 4 + packages/clerk-js/src/ui/primitives/Table.tsx | 36 ++++ packages/clerk-js/src/ui/primitives/Tbody.tsx | 16 ++ packages/clerk-js/src/ui/primitives/Td.tsx | 16 ++ packages/clerk-js/src/ui/primitives/Th.tsx | 27 +++ packages/clerk-js/src/ui/primitives/Thead.tsx | 16 ++ packages/clerk-js/src/ui/primitives/Tr.tsx | 16 ++ packages/clerk-js/src/ui/primitives/index.ts | 6 + .../clerk-js/src/ui/styledSystem/types.ts | 6 + packages/clerk-js/src/ui/utils/index.ts | 1 + packages/clerk-js/src/ui/utils/range.ts | 1 + packages/types/src/localization.ts | 4 + 15 files changed, 328 insertions(+) create mode 100644 packages/clerk-js/src/ui/elements/Pagination.tsx create mode 100644 packages/clerk-js/src/ui/primitives/Table.tsx create mode 100644 packages/clerk-js/src/ui/primitives/Tbody.tsx create mode 100644 packages/clerk-js/src/ui/primitives/Td.tsx create mode 100644 packages/clerk-js/src/ui/primitives/Th.tsx create mode 100644 packages/clerk-js/src/ui/primitives/Thead.tsx create mode 100644 packages/clerk-js/src/ui/primitives/Tr.tsx create mode 100644 packages/clerk-js/src/ui/utils/range.ts diff --git a/packages/clerk-js/src/ui/customizables/index.ts b/packages/clerk-js/src/ui/customizables/index.ts index e5f91aa05a4..c8d49466ca5 100644 --- a/packages/clerk-js/src/ui/customizables/index.ts +++ b/packages/clerk-js/src/ui/customizables/index.ts @@ -11,6 +11,7 @@ export { localizationKeys, useLocalizations } from '../localization'; export type { LocalizationKey } from '../localization'; export { generateFlowPartClassname } from './classGeneration'; +export const Box = makeCustomizable(sanitizeDomProps(Primitives.Box)); export const Flex = makeCustomizable(sanitizeDomProps(Primitives.Flex)); export const Col = makeCustomizable(sanitizeDomProps(Primitives.Col)); export const Grid = makeCustomizable(sanitizeDomProps(Primitives.Grid)); @@ -36,3 +37,10 @@ export const Spinner = makeCustomizable(sanitizeDomProps(Primitives.Spinner)); export const Badge = makeCustomizable(makeLocalizable(sanitizeDomProps(Primitives.Badge)), { defaultDescriptor: descriptors.badge, }); + +export const Table = makeCustomizable(sanitizeDomProps(Primitives.Table)); +export const Thead = makeCustomizable(sanitizeDomProps(Primitives.Thead)); +export const Tbody = makeCustomizable(sanitizeDomProps(Primitives.Tbody)); +export const Tr = makeCustomizable(sanitizeDomProps(Primitives.Tr)); +export const Th = makeCustomizable(sanitizeDomProps(Primitives.Th)); +export const Td = makeCustomizable(sanitizeDomProps(Primitives.Td)); diff --git a/packages/clerk-js/src/ui/elements/Pagination.tsx b/packages/clerk-js/src/ui/elements/Pagination.tsx new file mode 100644 index 00000000000..3539a4cbea4 --- /dev/null +++ b/packages/clerk-js/src/ui/elements/Pagination.tsx @@ -0,0 +1,170 @@ +import React, { useState } from 'react'; + +import { Button, Flex, localizationKeys, Text } from '../customizables'; +import { PropsOfComponent } from '../styledSystem'; +import { range } from '../utils'; + +type UsePaginationProps = { + defaultPage?: number; +}; + +export const usePagination = (props?: UsePaginationProps) => { + const { defaultPage = 1 } = props || {}; + const [page, setPage] = useState(defaultPage); + + return { page, changePage: setPage }; +}; + +const PageButton = (props: PropsOfComponent<typeof Button> & { isActive?: boolean }) => { + const { sx, isActive, ...rest } = props; + + return ( + <Button + size='xs' + variant='ghost' + colorScheme='neutral' + sx={t => [ + { + color: isActive ? t.colors.$black : t.colors.$blackAlpha700, + }, + sx, + ]} + {...rest} + /> + ); +}; + +type RowInfo = { + startingRow: number; + endingRow: number; + allRowsCount: number; +}; + +type RowInfoProps = { + rowInfo: RowInfo; +}; + +const RowInformation = (props: RowInfoProps) => { + const { + rowInfo: { startingRow, endingRow, allRowsCount }, + } = props; + + return ( + <Text> + <Text + as='span' + sx={t => ({ + color: t.colors.$blackAlpha700, + })} + localizationKey={localizationKeys('paginationRowText__displaying')} + />{' '} + <Text as='span'> + {startingRow} - {endingRow} + </Text>{' '} + <Text + as='span' + sx={t => ({ + color: t.colors.$blackAlpha700, + })} + localizationKey={localizationKeys('paginationRowText__of')} + />{' '} + <Text + as='span' + sx={t => ({ + color: t.colors.$blackAlpha700, + })} + > + {allRowsCount} + </Text> + </Text> + ); +}; + +const shouldShowPageButton = (currentPage: number, pageToShow: number, siblingCount: number, pageCount: number) => { + return Math.abs(currentPage - pageToShow) <= siblingCount || pageToShow === pageCount || pageToShow === 1; +}; + +const shouldShowDots = (currentPage: number, pageToShow: number, siblingCount: number) => { + return Math.abs(currentPage - pageToShow) === siblingCount + 1; +}; + +const ThreeDots = () => ( + <Flex center> + <Text + sx={t => ({ + color: t.colors.$blackAlpha500, + })} + > + ... + </Text> + </Flex> +); + +type PaginationProps = { + page: number; + count: number; + rowInfo?: { + startingRow: number; + endingRow: number; + allRowsCount: number; + }; + siblingCount?: number; + onChange?: (page: number) => void; +}; + +export const Pagination = (props: PaginationProps) => { + const { page, count, rowInfo, siblingCount = 1, onChange } = props; + + return ( + <Flex + justify={rowInfo ? 'between' : 'center'} + align='center' + sx={t => ({ + fontSize: t.fontSizes.$xs, + '*': { + fontSize: 'inherit', + }, + })} + > + {rowInfo && <RowInformation rowInfo={rowInfo} />} + + <Flex gap={2}> + <PageButton + isDisabled={page === 1} + localizationKey={localizationKeys('paginationButton__previous')} + onClick={() => { + onChange?.(page - 1); + }} + /> + {range(1, count).map(p => { + if (shouldShowPageButton(page, p, siblingCount, count)) { + return ( + <PageButton + key={p} + isActive={p === page} + onClick={() => { + onChange?.(p); + }} + > + {p} + </PageButton> + ); + } + + if (shouldShowDots(page, p, siblingCount)) { + return <ThreeDots key={p} />; + } + + return null; + })} + <PageButton + isDisabled={page === count} + localizationKey={localizationKeys('paginationButton__next')} + onClick={() => { + onChange?.(page + 1); + }} + /> + </Flex> + </Flex> + ); +}; diff --git a/packages/clerk-js/src/ui/elements/index.ts b/packages/clerk-js/src/ui/elements/index.ts index 171b2bb169f..1ff6778edf4 100644 --- a/packages/clerk-js/src/ui/elements/index.ts +++ b/packages/clerk-js/src/ui/elements/index.ts @@ -27,5 +27,6 @@ export * from './RootBox'; export * from './InvisibleRootBox'; export * from './ClipboardInput'; export * from './TileButton'; +export * from './Pagination'; export * from './FullHeightLoader'; export * from './Tabs'; diff --git a/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts b/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts index 2ef5c018b93..0a93a1dd1e2 100644 --- a/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts +++ b/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts @@ -55,6 +55,10 @@ export const defaultResource: DeepRequired<LocalizationResource> = { footerPageLink__help: 'Help', footerPageLink__privacy: 'Privacy', footerPageLink__terms: 'Terms', + paginationButton__previous: 'Previous', + paginationButton__next: 'Next', + paginationRowText__displaying: 'Displaying', + paginationRowText__of: 'of', signUp: { start: { title: 'Create your account', diff --git a/packages/clerk-js/src/ui/primitives/Table.tsx b/packages/clerk-js/src/ui/primitives/Table.tsx new file mode 100644 index 00000000000..a53950aced6 --- /dev/null +++ b/packages/clerk-js/src/ui/primitives/Table.tsx @@ -0,0 +1,36 @@ +import React from 'react'; + +import { createVariants, PrimitiveProps, StyleVariants } from '../styledSystem'; +import { Box, BoxProps } from './Box'; + +const { applyVariants, filterProps } = createVariants(theme => { + return { + base: { + borderCollapse: 'collapse', + 'td:not(:first-of-type)': { + paddingLeft: theme.sizes.$2, + }, + 'th:not(:first-of-type)': { + paddingLeft: theme.sizes.$2, + }, + 'tr:not(:last-of-type)>td': { + paddingBottom: theme.sizes.$2, + }, + width: '100%', + }, + variants: {}, + }; +}); + +export type TableProps = PrimitiveProps<'table'> & Omit<BoxProps, 'as'> & StyleVariants<typeof applyVariants>; + +export const Table = React.forwardRef<HTMLTableCellElement, TableProps>((props, ref) => { + return ( + <Box + as='table' + {...filterProps(props)} + css={applyVariants(props)} + ref={ref} + /> + ); +}); diff --git a/packages/clerk-js/src/ui/primitives/Tbody.tsx b/packages/clerk-js/src/ui/primitives/Tbody.tsx new file mode 100644 index 00000000000..f47f6107708 --- /dev/null +++ b/packages/clerk-js/src/ui/primitives/Tbody.tsx @@ -0,0 +1,16 @@ +import React from 'react'; + +import { PrimitiveProps } from '../styledSystem'; +import { Box, BoxProps } from './Box'; + +export type TbodyProps = PrimitiveProps<'tbody'> & Omit<BoxProps, 'as'>; + +export const Tbody = React.forwardRef<HTMLTableSectionElement, TbodyProps>((props, ref) => { + return ( + <Box + as='tbody' + {...props} + ref={ref} + /> + ); +}); diff --git a/packages/clerk-js/src/ui/primitives/Td.tsx b/packages/clerk-js/src/ui/primitives/Td.tsx new file mode 100644 index 00000000000..5dd1233afbe --- /dev/null +++ b/packages/clerk-js/src/ui/primitives/Td.tsx @@ -0,0 +1,16 @@ +import React from 'react'; + +import { PrimitiveProps } from '../styledSystem'; +import { Box, BoxProps } from './Box'; + +export type TdProps = PrimitiveProps<'td'> & Omit<BoxProps, 'as'>; + +export const Td = React.forwardRef<HTMLTableCellElement, TdProps>((props, ref) => { + return ( + <Box + as='td' + {...props} + ref={ref} + /> + ); +}); diff --git a/packages/clerk-js/src/ui/primitives/Th.tsx b/packages/clerk-js/src/ui/primitives/Th.tsx new file mode 100644 index 00000000000..95a00f698c4 --- /dev/null +++ b/packages/clerk-js/src/ui/primitives/Th.tsx @@ -0,0 +1,27 @@ +import React from 'react'; + +import { createVariants, PrimitiveProps, StyleVariants } from '../styledSystem'; +import { Box, BoxProps } from './Box'; + +const { applyVariants, filterProps } = createVariants(theme => ({ + base: { + textAlign: 'left', + fontWeight: theme.fontWeights.$medium, + borderBottom: theme.borders.$normal, + borderColor: theme.colors.$blackAlpha300, + }, + variants: {}, +})); + +export type ThProps = PrimitiveProps<'th'> & Omit<BoxProps, 'as'> & StyleVariants<typeof applyVariants>; + +export const Th = React.forwardRef<HTMLTableCellElement, ThProps>((props, ref) => { + return ( + <Box + as='th' + {...filterProps(props)} + css={applyVariants(props)} + ref={ref} + /> + ); +}); diff --git a/packages/clerk-js/src/ui/primitives/Thead.tsx b/packages/clerk-js/src/ui/primitives/Thead.tsx new file mode 100644 index 00000000000..e7500957807 --- /dev/null +++ b/packages/clerk-js/src/ui/primitives/Thead.tsx @@ -0,0 +1,16 @@ +import React from 'react'; + +import { PrimitiveProps } from '../styledSystem'; +import { Box, BoxProps } from './Box'; + +export type TheadProps = PrimitiveProps<'thead'> & Omit<BoxProps, 'as'>; + +export const Thead = React.forwardRef<HTMLTableSectionElement, TheadProps>((props, ref) => { + return ( + <Box + as='thead' + {...props} + ref={ref} + /> + ); +}); diff --git a/packages/clerk-js/src/ui/primitives/Tr.tsx b/packages/clerk-js/src/ui/primitives/Tr.tsx new file mode 100644 index 00000000000..f715653e5ff --- /dev/null +++ b/packages/clerk-js/src/ui/primitives/Tr.tsx @@ -0,0 +1,16 @@ +import React from 'react'; + +import { PrimitiveProps } from '../styledSystem'; +import { Box, BoxProps } from './Box'; + +export type TrProps = PrimitiveProps<'tr'> & Omit<BoxProps, 'as'>; + +export const Tr = React.forwardRef<HTMLTableCellElement, TrProps>((props, ref) => { + return ( + <Box + as='tr' + {...props} + ref={ref} + /> + ); +}); diff --git a/packages/clerk-js/src/ui/primitives/index.ts b/packages/clerk-js/src/ui/primitives/index.ts index 36b01bf78e8..ef56c1ae2b3 100644 --- a/packages/clerk-js/src/ui/primitives/index.ts +++ b/packages/clerk-js/src/ui/primitives/index.ts @@ -17,3 +17,9 @@ export * from './FormLabel'; export * from './Form'; export * from './Icon'; export * from './Badge'; +export * from './Table'; +export * from './Thead'; +export * from './Tbody'; +export * from './Tr'; +export * from './Th'; +export * from './Td'; diff --git a/packages/clerk-js/src/ui/styledSystem/types.ts b/packages/clerk-js/src/ui/styledSystem/types.ts index 0b1c2321b07..2ee2d962a13 100644 --- a/packages/clerk-js/src/ui/styledSystem/types.ts +++ b/packages/clerk-js/src/ui/styledSystem/types.ts @@ -25,6 +25,12 @@ type ElementProps = { label: JSX.IntrinsicElements['label']; img: JSX.IntrinsicElements['img']; form: JSX.IntrinsicElements['form']; + table: JSX.IntrinsicElements['table']; + thead: JSX.IntrinsicElements['thead']; + tbody: JSX.IntrinsicElements['tbody']; + th: JSX.IntrinsicElements['th']; + tr: JSX.IntrinsicElements['tr']; + td: JSX.IntrinsicElements['td']; }; /** diff --git a/packages/clerk-js/src/ui/utils/index.ts b/packages/clerk-js/src/ui/utils/index.ts index 0095a568534..6f39f3c52eb 100644 --- a/packages/clerk-js/src/ui/utils/index.ts +++ b/packages/clerk-js/src/ui/utils/index.ts @@ -15,4 +15,5 @@ export * from './getIdentifier'; export * from './readObjectPath'; export * from './useFormControl'; export * from './errorHandler'; +export * from './range'; export * from './getValidReactChildren'; diff --git a/packages/clerk-js/src/ui/utils/range.ts b/packages/clerk-js/src/ui/utils/range.ts new file mode 100644 index 00000000000..5ef7ae1c5e6 --- /dev/null +++ b/packages/clerk-js/src/ui/utils/range.ts @@ -0,0 +1 @@ +export const range = (min: number, max: number) => Array.from({ length: max - min + 1 }, (_, i) => min + i); diff --git a/packages/types/src/localization.ts b/packages/types/src/localization.ts index 50e0fe85bdf..06df00b5d46 100644 --- a/packages/types/src/localization.ts +++ b/packages/types/src/localization.ts @@ -55,6 +55,10 @@ type _LocalizationResource = { footerPageLink__help: LocalizationValue; footerPageLink__privacy: LocalizationValue; footerPageLink__terms: LocalizationValue; + paginationButton__previous: LocalizationValue; + paginationButton__next: LocalizationValue; + paginationRowText__displaying: LocalizationValue; + paginationRowText__of: LocalizationValue; signUp: { start: { title: LocalizationValue; From f4b4586816734a97a06bc7a9ee1c12f728973daa Mon Sep 17 00:00:00 2001 From: George Desipris <73396808+desiprisg@users.noreply.github.com> Date: Wed, 12 Oct 2022 15:56:45 +0300 Subject: [PATCH 25/41] feat(clerk-js): Introduce Menu element * feat(clerk-js): Introduce Menu element * fix(clerk-js): Prevent default on key down in Menu component * refactor(clerk-js): Replace MenuButton with MenuTrigger * fix(clerk-js): Compose onClick handlers in MenuTrigger --- packages/clerk-js/src/ui/elements/Menu.tsx | 181 ++++++++++++++++++ packages/clerk-js/src/ui/elements/index.ts | 1 + .../clerk-js/src/ui/foundations/zIndices.ts | 1 + packages/clerk-js/src/ui/hooks/usePopover.ts | 2 + 4 files changed, 185 insertions(+) create mode 100644 packages/clerk-js/src/ui/elements/Menu.tsx diff --git a/packages/clerk-js/src/ui/elements/Menu.tsx b/packages/clerk-js/src/ui/elements/Menu.tsx new file mode 100644 index 00000000000..03851628c6a --- /dev/null +++ b/packages/clerk-js/src/ui/elements/Menu.tsx @@ -0,0 +1,181 @@ +import React, { cloneElement, isValidElement, PropsWithChildren, useEffect, useRef } from 'react'; + +import { createContextAndHook } from '../../ui/utils'; +import { Button, Col } from '../customizables'; +import { usePopover, UsePopoverReturn } from '../hooks'; +import { animations, PropsOfComponent } from '../styledSystem'; +import { colors } from '../utils/colors'; +import { Portal } from './Portal'; + +type MenuState = { + popoverCtx: UsePopoverReturn; +}; + +const [MenuStateCtx, useMenuState] = createContextAndHook<MenuState>('MenuState'); + +type MenuProps = PropsWithChildren<Record<never, never>>; + +export const Menu = (props: MenuProps) => { + const popoverCtx = usePopover({ + placement: 'right-start', + offset: 8, + }); + + const value = React.useMemo(() => ({ value: { popoverCtx } }), [{ ...popoverCtx }]); + + return ( + <MenuStateCtx.Provider + value={value} + {...props} + /> + ); +}; + +type MenuTriggerProps = React.PropsWithChildren<Record<never, never>>; + +export const MenuTrigger = (props: MenuTriggerProps) => { + const { children } = props; + const { popoverCtx } = useMenuState(); + const { reference, toggle } = popoverCtx; + + if (!isValidElement(children)) { + return null; + } + + return cloneElement(children, { + ref: reference, + onClick: (e: React.MouseEvent) => { + children.props?.onClick?.(e); + toggle(); + }, + }); +}; + +const findMenuItem = (el: Element, siblingType: 'prev' | 'next', options?: { countSelf?: boolean }) => { + let tagName = options?.countSelf ? el.tagName : ''; + let sibling: Element | null = el; + while (sibling && tagName.toUpperCase() !== 'BUTTON') { + sibling = sibling[siblingType === 'prev' ? 'previousElementSibling' : 'nextElementSibling']; + tagName = sibling?.tagName ?? ''; + } + return sibling; +}; + +type MenuListProps = PropsOfComponent<typeof Col>; + +export const MenuList = (props: MenuListProps) => { + const { sx, ...rest } = props; + const { popoverCtx } = useMenuState(); + const { floating, styles, isOpen } = popoverCtx; + const containerRef = useRef<HTMLDivElement>(null); + + useEffect(() => { + const current = containerRef.current; + floating(current); + current?.focus(); + }, [isOpen]); + + const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => { + const current = containerRef.current; + if (!current) { + return; + } + + if (current !== document.activeElement) { + return; + } + + if (e.key === 'ArrowDown') { + e.preventDefault(); + return (findMenuItem(current.children[0], 'next', { countSelf: true }) as HTMLElement)?.focus(); + } + }; + + if (!isOpen) { + return null; + } + + return ( + <Portal> + <Col + ref={containerRef} + role='menu' + onKeyDown={onKeyDown} + tabIndex={0} + sx={[ + theme => ({ + backgroundColor: colors.makeSolid(theme.colors.$colorBackground), + border: theme.borders.$normal, + outline: 'none', + borderRadius: theme.radii.$lg, + borderColor: theme.colors.$blackAlpha200, + paddingTop: theme.space.$2, + paddingBottom: theme.space.$2, + overflow: 'hidden', + top: `calc(100% + ${theme.space.$2})`, + animation: `${animations.dropdownSlideInScaleAndFade} ${theme.transitionDuration.$slower} ${theme.transitionTiming.$slowBezier}`, + transformOrigin: 'top center', + boxShadow: theme.shadows.$boxShadow1, + zIndex: theme.zIndices.$dropdown, + }), + sx, + ]} + style={styles} + {...rest} + /> + </Portal> + ); +}; + +type MenuItemProps = PropsOfComponent<typeof Button>; + +export const MenuItem = (props: MenuItemProps) => { + const { sx, onClick, ...rest } = props; + const { popoverCtx } = useMenuState(); + const { toggle } = popoverCtx; + const buttonRef = useRef<HTMLButtonElement>(null); + + const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => { + const current = buttonRef.current; + if (!current) { + return; + } + + const key = e.key; + if (key !== 'ArrowUp' && key !== 'ArrowDown') { + return; + } + + e.preventDefault(); + const sibling = findMenuItem(current, key === 'ArrowUp' ? 'prev' : 'next'); + (sibling as HTMLElement)?.focus(); + }; + + return ( + <Button + ref={buttonRef} + focusRing={false} + variant='ghost' + colorScheme='neutral' + role='menuitem' + onKeyDown={onKeyDown} + onClick={e => { + onClick?.(e); + toggle(); + }} + sx={[ + theme => ({ + justifyContent: 'start', + borderRadius: theme.radii.$none, + paddingLeft: theme.space.$4, + paddingRight: theme.space.$4, + ':focus': { + backgroundColor: theme.colors.$blackAlpha200, + }, + }), + sx, + ]} + {...rest} + /> + ); +}; diff --git a/packages/clerk-js/src/ui/elements/index.ts b/packages/clerk-js/src/ui/elements/index.ts index 1ff6778edf4..b8b6157be69 100644 --- a/packages/clerk-js/src/ui/elements/index.ts +++ b/packages/clerk-js/src/ui/elements/index.ts @@ -27,6 +27,7 @@ export * from './RootBox'; export * from './InvisibleRootBox'; export * from './ClipboardInput'; export * from './TileButton'; +export * from './Menu'; export * from './Pagination'; export * from './FullHeightLoader'; export * from './Tabs'; diff --git a/packages/clerk-js/src/ui/foundations/zIndices.ts b/packages/clerk-js/src/ui/foundations/zIndices.ts index ca05553413f..f4f81f5a699 100644 --- a/packages/clerk-js/src/ui/foundations/zIndices.ts +++ b/packages/clerk-js/src/ui/foundations/zIndices.ts @@ -2,4 +2,5 @@ export const zIndices = Object.freeze({ navbar: '100', fab: '9000', modal: '10000', + dropdown: '11000', } as const); diff --git a/packages/clerk-js/src/ui/hooks/usePopover.ts b/packages/clerk-js/src/ui/hooks/usePopover.ts index 367a14ca43e..8728e400a50 100644 --- a/packages/clerk-js/src/ui/hooks/usePopover.ts +++ b/packages/clerk-js/src/ui/hooks/usePopover.ts @@ -16,6 +16,8 @@ type UsePopoverProps = { autoUpdate?: boolean; }; +export type UsePopoverReturn = ReturnType<typeof usePopover>; + export const usePopover = (props: UsePopoverProps = {}) => { const [isOpen, setIsOpen] = React.useState(props.defaultOpen || false); const { update, reference, floating, strategy, x, y, context } = useFloating({ From 088fbfacce234d57706a1f4a9fdd1e086455a63b Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Thu, 13 Oct 2022 11:07:50 +0300 Subject: [PATCH 26/41] chore(clerk-js): Increase bundlewatch limit to 157kb --- packages/clerk-js/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 1e762786d5e..aaea1705cf2 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -118,7 +118,7 @@ "files": [ { "path": "./dist/clerk.browser.js", - "maxSize": "155kB" + "maxSize": "157kB" }, { "path": "./dist/clerk.headless.js", From 9619bfe6da4fb876f2ba6279f2c08d6a8c2d263c Mon Sep 17 00:00:00 2001 From: George Desipris <george.desipris.56@gmail.com> Date: Wed, 5 Oct 2022 20:05:02 +0300 Subject: [PATCH 27/41] feat(clerk-js): Introduce Select element and use it in PhoneInput --- packages/clerk-js/src/ui/elements/Menu.tsx | 1 + .../src/ui/elements/PhoneInput/PhoneInput.tsx | 215 +++-------- packages/clerk-js/src/ui/elements/Select.tsx | 342 ++++++++++++++++++ packages/clerk-js/src/ui/elements/index.ts | 2 + 4 files changed, 404 insertions(+), 156 deletions(-) create mode 100644 packages/clerk-js/src/ui/elements/Select.tsx diff --git a/packages/clerk-js/src/ui/elements/Menu.tsx b/packages/clerk-js/src/ui/elements/Menu.tsx index 03851628c6a..4d8d44c770e 100644 --- a/packages/clerk-js/src/ui/elements/Menu.tsx +++ b/packages/clerk-js/src/ui/elements/Menu.tsx @@ -43,6 +43,7 @@ export const MenuTrigger = (props: MenuTriggerProps) => { } return cloneElement(children, { + // @ts-expect-error ref: reference, onClick: (e: React.MouseEvent) => { children.props?.onClick?.(e); diff --git a/packages/clerk-js/src/ui/elements/PhoneInput/PhoneInput.tsx b/packages/clerk-js/src/ui/elements/PhoneInput/PhoneInput.tsx index c78358a4f38..805b0fa1e19 100644 --- a/packages/clerk-js/src/ui/elements/PhoneInput/PhoneInput.tsx +++ b/packages/clerk-js/src/ui/elements/PhoneInput/PhoneInput.tsx @@ -1,15 +1,13 @@ import React from 'react'; -import { Button, Flex, Icon, Input, Text } from '../../customizables'; -import { usePopover, useSearchInput } from '../../hooks'; -import { Caret } from '../../icons'; +import { Flex, Input, Text } from '../../customizables'; +import { Select, SelectButton, SelectOptionList } from '../../elements'; import { PropsOfComponent } from '../../styledSystem'; import { getFlagEmojiFromCountryIso } from '../../utils'; import { CountryEntry, CountryIso, IsoToCountryMap } from './countryCodeData'; -import { DropdownBox, DropdownItemContainer, DropdownSearchbar } from './Dropdown'; import { useFormattedPhoneNumber } from './useFormattedPhoneNumber'; -const createDropdownOption = (country: CountryEntry) => { +const createSelectOption = (country: CountryEntry) => { return { searchTerm: `${country.iso} ${country.name} ${country.code}`, country, @@ -17,30 +15,17 @@ const createDropdownOption = (country: CountryEntry) => { }; }; -const countryOptions = [...IsoToCountryMap.values()].map(createDropdownOption); +const countryOptions = [...IsoToCountryMap.values()].map(createSelectOption); type PhoneInputProps = PropsOfComponent<typeof Input>; export const PhoneInput = (props: PhoneInputProps) => { const { onChange: onChangeProp, value, ...rest } = props; const phoneInputRef = React.useRef<HTMLInputElement>(null); - const selectedItemRef = React.useRef<HTMLDivElement>(null); - const [selectedIndex, setSelectedIndex] = React.useState(0); - const { floating, reference, styles, toggle: togglePopover, isOpen } = usePopover({ autoUpdate: false }); - const { selectedIso, setPhoneNumber, cleanPhoneNumber, formattedPhoneNumber, setSelectedIso } = - useFormattedPhoneNumber({ defaultPhone: value as string }); - const { filteredItems, searchInputProps } = useSearchInput({ - items: countryOptions, - comparator: (term, item) => item.searchTerm.toLowerCase().includes(term.toLowerCase()), - }); - - const scrollToItemOnSelectedIndexChange = () => { - if (!isOpen) { - setSelectedIndex(0); - return; - } - selectedItemRef.current?.scrollIntoView({ block: 'nearest' }); - }; + const { setPhoneNumber, cleanPhoneNumber, formattedPhoneNumber, selectedIso, setSelectedIso } = + useFormattedPhoneNumber({ + defaultPhone: value as string, + }); const callOnChangeProp = () => { // Quick and dirty way to match this component's public API @@ -49,40 +34,11 @@ export const PhoneInput = (props: PhoneInputProps) => { onChangeProp?.({ target: { value: cleanPhoneNumber } } as any); }; - React.useEffect(callOnChangeProp, [cleanPhoneNumber]); - React.useEffect(scrollToItemOnSelectedIndexChange, [selectedIndex, isOpen]); - - const selectIso = React.useCallback( - (iso: CountryIso) => { - setSelectedIso(iso); - togglePopover(); - phoneInputRef.current?.focus(); - }, - [togglePopover, setSelectedIso], - ); - - const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => { - if (e.key === 'ArrowUp') { - e.preventDefault(); - if (isOpen) { - return setSelectedIndex((i = 0) => Math.max(i - 1, 0)); - } - return togglePopover(); - } - - if (e.key === 'ArrowDown') { - e.preventDefault(); - if (isOpen) { - return setSelectedIndex((i = 0) => Math.min(i + 1, filteredItems.length - 1)); - } - return togglePopover(); - } + const selectedCountryOption = React.useMemo(() => { + return countryOptions.find(o => o.country.iso === selectedIso) || countryOptions[0]; + }, [selectedIso]); - if (e.key === 'Enter') { - e.preventDefault(); - return selectIso(filteredItems[selectedIndex].country.iso); - } - }; + React.useEffect(callOnChangeProp, [cleanPhoneNumber]); return ( <Flex @@ -90,130 +46,77 @@ export const PhoneInput = (props: PhoneInputProps) => { justify='center' sx={theme => ({ position: 'relative', borderRadius: theme.radii.$md })} > - <DropdownTrigger - selectedIso={selectedIso} - ref={reference} - isOpen={isOpen} - onClick={togglePopover} - isDisabled={rest.isDisabled} - /> + <Select + value={selectedCountryOption} + options={countryOptions} + optionBuilder={(option, _index, isSelected) => ( + <CountryCodeListItem + sx={theme => ({ + ...(isSelected && { backgroundColor: theme.colors.$blackAlpha200 }), + '&:hover': { + backgroundColor: theme.colors.$blackAlpha200, + }, + })} + country={option.country} + /> + )} + onChange={option => { + setSelectedIso(option.country.iso); + phoneInputRef.current?.focus(); + }} + noResultsMessage='No countries found' + placeholder='Search country or code' + comparator={(term, option) => option.searchTerm.toLowerCase().includes(term.toLowerCase())} + > + <Flex + sx={{ + position: 'absolute', + height: `calc(100% - 2px)`, + marginLeft: '1px', + }} + > + <SelectButton> + <Flag iso={selectedIso} /> + </SelectButton> + </Flex> + <SelectOptionList /> + </Select> <Input value={formattedPhoneNumber} onChange={el => setPhoneNumber(el.target.value)} maxLength={25} type='tel' sx={theme => ({ paddingLeft: theme.space.$20 })} - {...rest} ref={phoneInputRef} + {...rest} /> - <DropdownBox - isOpen={isOpen} - ref={floating} - style={{ ...styles, left: styles.left - 1 }} - onKeyDown={onKeyDown} - > - <DropdownSearchbar - placeholder='Search country or code' - {...searchInputProps} - /> - <DropdownItemContainer> - {filteredItems.map((item, i) => ( - <CountryCodeListItem - key={i} - country={item.country} - selectIso={selectIso} - isSelected={i === selectedIndex} - innerRef={i === selectedIndex ? selectedItemRef : undefined} - /> - ))} - {filteredItems.length === 0 && <NoResults />} - </DropdownItemContainer> - </DropdownBox> </Flex> ); }; -const DropdownTrigger = React.forwardRef< - HTMLButtonElement, - PropsOfComponent<typeof Button> & { selectedIso: CountryIso; isOpen: boolean } ->((props, ref) => { - return ( - <Button - ref={ref} - onClick={props.onClick} - colorScheme='neutral' - variant='ghost' - textVariant='smallMedium' - isDisabled={props.isDisabled} - sx={theme => ({ - paddingLeft: theme.space.$3x5, - paddingRight: theme.space.$3x5, - backgroundColor: theme.colors.$blackAlpha50, - position: 'absolute', - height: 'calc(100% - 2px)', - marginLeft: '1px', - width: theme.space.$16, - borderRadius: theme.radii.$md, - borderBottomRightRadius: '0', - borderTopRightRadius: '0', - })} - > - <Flag iso={props.selectedIso} /> - <Icon - icon={Caret} - sx={theme => ({ - width: theme.sizes.$3x5, - marginLeft: theme.space.$1, - transitionProperty: theme.transitionProperty.$common, - transitionDuration: theme.transitionDuration.$controls, - transform: `rotate(${props.isOpen ? '180' : '0'}deg)`, - })} - /> - </Button> - ); -}); - -type CountryCodeListItem = React.PropsWithChildren<{ +type CountryCodeListItem = PropsOfComponent<typeof Flex> & { country: CountryEntry; - selectIso: (iso: CountryIso) => void; - isSelected: boolean; - innerRef: any; -}>; - -const NoResults = () => { - return ( - <Text - as='div' - variant='smallRegular' - sx={theme => ({ width: '100%', padding: `${theme.space.$2} 0 0 ${theme.space.$4}` })} - > - No countries found - </Text> - ); }; const CountryCodeListItem = React.memo((props: CountryCodeListItem) => { - const { country, selectIso, isSelected, innerRef, ...rest } = props; + const { country, sx, ...rest } = props; return ( <Flex - ref={innerRef} - onClick={() => selectIso(country.iso)} center - sx={theme => ({ - userSelect: 'none', - gap: theme.space.$2, - padding: `${theme.space.$0x5} ${theme.space.$4}`, - ...(isSelected && { backgroundColor: theme.colors.$blackAlpha200 }), - '&:hover': { - backgroundColor: theme.colors.$blackAlpha200, - }, - })} + sx={[ + theme => ({ + width: '100%', + gap: theme.space.$2, + padding: `${theme.space.$0x5} ${theme.space.$4}`, + }), + sx, + ]} + {...rest} > <Flag iso={country.iso} /> <Text as='div' variant='smallRegular' - {...rest} sx={{ width: '100%' }} > {country.name} diff --git a/packages/clerk-js/src/ui/elements/Select.tsx b/packages/clerk-js/src/ui/elements/Select.tsx new file mode 100644 index 00000000000..7eb98c7610f --- /dev/null +++ b/packages/clerk-js/src/ui/elements/Select.tsx @@ -0,0 +1,342 @@ +import React, { isValidElement, PropsWithChildren, useState } from 'react'; + +import { usePopover, useSearchInput } from '../../ui/hooks'; +import { Button, Flex, Icon, Text } from '../customizables'; +import { Caret, MagnifyingGlass } from '../icons'; +import { animations, PropsOfComponent } from '../styledSystem'; +import { colors, createContextAndHook } from '../utils'; +import { InputWithIcon } from './InputWithIcon'; + +type UsePopoverReturn = ReturnType<typeof usePopover>; +type UseSearchInputReturn = ReturnType<typeof useSearchInput>; + +type OptionBuilder<O> = (option: O, index?: number, isSelected?: boolean) => JSX.Element; + +type SelectProps<O> = { + options: O[]; + value: O; + onChange: (option: O) => void; + placeholder?: string; + comparator?: (term: string, option: O) => boolean; + noResultsMessage?: string; + optionBuilder?: OptionBuilder<O>; +}; + +type SelectState<O = any> = Pick<SelectProps<O>, 'placeholder' | 'comparator' | 'noResultsMessage'> & { + popoverCtx: UsePopoverReturn; + searchInputCtx: UseSearchInputReturn; + optionBuilder: OptionBuilder<O>; + selectedOption: O; + select: (option: O) => void; + selectedItemRef: React.RefObject<HTMLDivElement>; + onTriggerClick: () => void; +}; + +const [SelectStateCtx, useSelectState] = createContextAndHook<SelectState>('SelectState'); + +const defaultOptionBuilder = <O,>(option: O, _index?: number, isSelected?: boolean) => { + if (typeof option !== 'string' && typeof option !== 'number') { + throw new Error('Provide an optionBuilder function'); + } + + return ( + <Flex + sx={theme => ({ + width: '100%', + paddingLeft: theme.space.$2, + paddingRight: theme.space.$2, + ...(isSelected && { backgroundColor: theme.colors.$blackAlpha200 }), + '&:hover': { + backgroundColor: theme.colors.$blackAlpha200, + }, + })} + > + <Text>{option}</Text> + </Flex> + ); +}; + +export const Select = <O,>(props: PropsWithChildren<SelectProps<O>>) => { + const { + value, + options, + onChange, + optionBuilder = defaultOptionBuilder, + noResultsMessage, + comparator, + placeholder, + ...rest + } = props; + const popoverCtx = usePopover({ autoUpdate: false }); + const togglePopover = popoverCtx.toggle; + const selectedItemRef = React.useRef<HTMLDivElement>(null); + const searchInputCtx = useSearchInput({ + items: options, + comparator: comparator || (() => true), + }); + + const select = React.useCallback( + option => { + onChange?.(option); + togglePopover(); + }, + [togglePopover, onChange], + ); + + return ( + <SelectStateCtx.Provider + value={{ + value: { + popoverCtx, + searchInputCtx, + selectedOption: value, + noResultsMessage, + selectedItemRef, + optionBuilder, + placeholder, + comparator, + select, + onTriggerClick: togglePopover, + }, + }} + {...rest} + /> + ); +}; + +type SelectOptionBuilderProps<O = unknown> = { + option: O; + index: number; + optionBuilder: OptionBuilder<O>; + handleSelect: (option: O) => void; + isSelected: boolean; +}; + +const _SelectOptionBuilder = (props: SelectOptionBuilderProps, ref?: React.ForwardedRef<HTMLDivElement>) => { + const { option, optionBuilder, index, handleSelect, isSelected } = props; + return ( + <Flex + ref={ref} + sx={{ + userSelect: 'none', + }} + onClick={() => { + handleSelect(option); + }} + > + {optionBuilder(option, index, isSelected)} + </Flex> + ); +}; + +const SelectOptionBuilder = React.memo(React.forwardRef(_SelectOptionBuilder)); + +const SelectSearchbar = (props: PropsOfComponent<typeof InputWithIcon>) => { + const { sx, ...rest } = props; + React.useEffect(() => { + // @ts-expect-error + return () => props.onChange({ target: { value: '' } }); + }, []); + + return ( + <Flex sx={theme => ({ borderBottom: theme.borders.$normal, borderColor: theme.colors.$blackAlpha200 })}> + <InputWithIcon + focusRing={false} + autoFocus + leftIcon={ + <Icon + colorScheme='neutral' + icon={MagnifyingGlass} + /> + } + sx={[{ border: 'none', borderRadius: '0' }, sx]} + {...rest} + /> + </Flex> + ); +}; + +export const SelectNoResults = (props: PropsOfComponent<typeof Text>) => { + const { sx, ...rest } = props; + return ( + <Text + as='div' + variant='smallRegular' + sx={[theme => ({ width: '100%', padding: `${theme.space.$2} 0 0 ${theme.space.$4}` }), sx]} + {...rest} + /> + ); +}; + +type SelectOptionListProps = PropsOfComponent<typeof Flex>; + +export const SelectOptionList = (props: SelectOptionListProps) => { + const { sx, ...rest } = props; + const { + popoverCtx, + searchInputCtx, + optionBuilder, + placeholder, + comparator, + selectedItemRef, + noResultsMessage, + select, + onTriggerClick, + } = useSelectState(); + const { filteredItems: options, searchInputProps } = searchInputCtx; + const [selectedIndex, setSelectedIndex] = useState(0); + const { isOpen, floating, styles } = popoverCtx; + const containerRef = React.useRef<HTMLDivElement>(null); + + const scrollToItemOnSelectedIndexChange = () => { + if (!isOpen) { + setSelectedIndex(0); + return; + } + selectedItemRef.current?.scrollIntoView({ block: 'nearest' }); + }; + + React.useEffect(scrollToItemOnSelectedIndexChange, [selectedIndex, isOpen]); + React.useEffect(() => { + if (!comparator) { + containerRef?.current?.focus(); + } + }, [isOpen]); + + const onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => { + if (e.key === 'ArrowUp') { + e.preventDefault(); + if (isOpen) { + return setSelectedIndex((i = 0) => Math.max(i - 1, 0)); + } + return onTriggerClick(); + } + + if (e.key === 'ArrowDown') { + e.preventDefault(); + if (isOpen) { + return setSelectedIndex((i = 0) => Math.min(i + 1, options.length - 1)); + } + return onTriggerClick(); + } + + if (e.key === 'Enter') { + e.preventDefault(); + return select(options[selectedIndex]); + } + }; + + if (!isOpen) { + return null; + } + + return ( + <Flex + ref={floating} + onKeyDown={onKeyDown} + direction='col' + justify='start' + sx={[ + theme => ({ + backgroundColor: colors.makeSolid(theme.colors.$colorBackground), + border: theme.borders.$normal, + borderRadius: theme.radii.$lg, + borderColor: theme.colors.$blackAlpha200, + overflow: 'hidden', + width: '100%', + animation: `${animations.dropdownSlideInScaleAndFade} ${theme.transitionDuration.$slower} ${theme.transitionTiming.$slowBezier}`, + transformOrigin: 'top center', + boxShadow: theme.shadows.$cardDropShadow, + zIndex: theme.zIndices.$dropdown, + }), + sx, + ]} + style={{ ...styles, left: styles.left - 1 }} + {...rest} + > + {comparator && ( + <SelectSearchbar + placeholder={placeholder} + {...searchInputProps} + /> + )} + <Flex + ref={containerRef} + direction='col' + tabIndex={comparator ? undefined : 0} + sx={[ + theme => ({ + outline: 'none', + overflowY: 'scroll', + maxHeight: '18vh', + paddingBottom: theme.space.$2, + }), + sx, + ]} + {...rest} + > + {options.map((option, index) => { + const isSelected = index === selectedIndex; + return ( + <SelectOptionBuilder + key={index} + index={index} + ref={isSelected ? selectedItemRef : undefined} + option={option} + optionBuilder={optionBuilder} + isSelected={isSelected} + handleSelect={select} + /> + ); + })} + {noResultsMessage && options.length === 0 && <SelectNoResults>{noResultsMessage}</SelectNoResults>} + </Flex> + </Flex> + ); +}; + +export const SelectButton = (props: PropsOfComponent<typeof Button>) => { + const { sx, children, ...rest } = props; + const { popoverCtx, onTriggerClick, optionBuilder, selectedOption } = useSelectState(); + const { isOpen, reference } = popoverCtx; + + let show: React.ReactNode = children; + if (!isValidElement(children)) { + show = optionBuilder(selectedOption); + } + + return ( + <Button + ref={reference} + colorScheme='neutral' + variant='ghost' + textVariant='smallMedium' + onClick={onTriggerClick} + sx={[ + theme => ({ + paddingLeft: theme.space.$3x5, + paddingRight: theme.space.$3x5, + backgroundColor: theme.colors.$blackAlpha50, + borderRadius: theme.radii.$md, + borderBottomRightRadius: '0', + borderTopRightRadius: '0', + '> *': { pointerEvents: 'none' }, + }), + sx, + ]} + {...rest} + > + {show} + <Icon + icon={Caret} + sx={theme => ({ + width: theme.sizes.$3x5, + marginLeft: theme.space.$1, + transitionProperty: theme.transitionProperty.$common, + transitionDuration: theme.transitionDuration.$controls, + transform: `rotate(${isOpen ? '180' : '0'}deg)`, + })} + /> + </Button> + ); +}; diff --git a/packages/clerk-js/src/ui/elements/index.ts b/packages/clerk-js/src/ui/elements/index.ts index b8b6157be69..8fe211334d4 100644 --- a/packages/clerk-js/src/ui/elements/index.ts +++ b/packages/clerk-js/src/ui/elements/index.ts @@ -27,7 +27,9 @@ export * from './RootBox'; export * from './InvisibleRootBox'; export * from './ClipboardInput'; export * from './TileButton'; +export * from './Select'; export * from './Menu'; export * from './Pagination'; export * from './FullHeightLoader'; export * from './Tabs'; +export * from './InputWithIcon'; From ac8df241c620afc2eb11c0b97b219c7daef0d414 Mon Sep 17 00:00:00 2001 From: George Desipris <george.desipris.56@gmail.com> Date: Thu, 13 Oct 2022 19:12:11 +0300 Subject: [PATCH 28/41] refactor(clerk-js): Remove Dropdown element --- .../src/ui/elements/PhoneInput/Dropdown.tsx | 76 ------------------- 1 file changed, 76 deletions(-) delete mode 100644 packages/clerk-js/src/ui/elements/PhoneInput/Dropdown.tsx diff --git a/packages/clerk-js/src/ui/elements/PhoneInput/Dropdown.tsx b/packages/clerk-js/src/ui/elements/PhoneInput/Dropdown.tsx deleted file mode 100644 index 89c10b12015..00000000000 --- a/packages/clerk-js/src/ui/elements/PhoneInput/Dropdown.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; - -import { Flex, Icon } from '../../customizables'; -import { MagnifyingGlass } from '../../icons'; -import { animations, PropsOfComponent } from '../../styledSystem'; -import { colors } from '../../utils'; -import { InputWithIcon } from '../InputWithIcon'; - -type DropdownBoxProps = PropsOfComponent<typeof Flex> & { isOpen: boolean }; - -export const DropdownBox = React.forwardRef<HTMLDivElement, DropdownBoxProps>((props, ref) => { - const { isOpen, ...rest } = props; - if (!isOpen) { - return null; - } - - return ( - <Flex - ref={ref} - direction='col' - justify='start' - sx={theme => ({ - backgroundColor: colors.makeSolid(theme.colors.$colorBackground), - border: theme.borders.$normal, - borderRadius: theme.radii.$lg, - borderColor: theme.colors.$blackAlpha200, - overflow: 'hidden', - width: '100%', - top: `calc(100% + ${theme.space.$2})`, - animation: `${animations.dropdownSlideInScaleAndFade} 250ms ${theme.transitionTiming.$slowBezier}`, - transformOrigin: 'top center', - boxShadow: theme.shadows.$cardDropShadow, - zIndex: 10, - })} - {...rest} - /> - ); -}); - -export const DropdownSearchbar = (props: PropsOfComponent<typeof InputWithIcon>) => { - React.useEffect(() => { - // @ts-expect-error - return () => props.onChange({ target: { value: '' } }); - }, []); - - return ( - <Flex sx={theme => ({ borderBottom: theme.borders.$normal, borderColor: theme.colors.$blackAlpha200 })}> - <InputWithIcon - focusRing={false} - autoFocus - leftIcon={ - <Icon - colorScheme='neutral' - icon={MagnifyingGlass} - /> - } - sx={{ border: 'none', borderRadius: '0' }} - {...props} - /> - </Flex> - ); -}; - -export const DropdownItemContainer = (props: React.PropsWithChildren<any>) => { - return ( - <Flex - direction='col' - sx={theme => ({ - overflowY: 'scroll', - maxHeight: '18vh', - paddingBottom: theme.space.$2, - })} - {...props} - /> - ); -}; From 96cde45b4f1db5ff074289b57ff58c40bf80f6e1 Mon Sep 17 00:00:00 2001 From: John Raptis <johnsitpar@gmail.com> Date: Thu, 13 Oct 2022 19:41:34 +0300 Subject: [PATCH 29/41] fix(clerk-js): Add appearance customization support for avatar gradient * fix(clerk-js): Add customization for avatar gradient from appearance provider * fix(clerk-js): Refactor types * fix(clerk-js): Refactor some props in boring avatar * fix(clerk-js): Eliminate warnings regarding svg attributes * fix(clerk-js): Prevent deep-merging of arrays in fastDeepMerge * fix(clerk-js): Fix type issues * fix(clerk-js): Fix issue with avatar initials color font * feat(clerk-js): Replace `avatar` with `avatarBox` descriptor Co-authored-by: Nikos Douvlis <nikosdouvlis@gmail.com> --- .../clerk-js/src/ui/common/BoringAvatar.tsx | 14 +++++++++++--- .../src/ui/customizables/elementDescriptors.ts | 2 +- .../src/ui/customizables/parseVariables.ts | 2 ++ packages/clerk-js/src/ui/elements/Avatar.tsx | 18 ++++++++++-------- packages/clerk-js/src/ui/foundations/colors.ts | 1 + .../src/ui/utils/fastDeepMerge.test.ts | 14 ++++++++++++++ .../clerk-js/src/ui/utils/fastDeepMerge.ts | 6 ++++-- packages/types/src/appearance.ts | 9 ++++++++- 8 files changed, 51 insertions(+), 15 deletions(-) diff --git a/packages/clerk-js/src/ui/common/BoringAvatar.tsx b/packages/clerk-js/src/ui/common/BoringAvatar.tsx index cbc4f7473e0..d1d124b1e15 100644 --- a/packages/clerk-js/src/ui/common/BoringAvatar.tsx +++ b/packages/clerk-js/src/ui/common/BoringAvatar.tsx @@ -49,7 +49,15 @@ function generateColors(name: string, colors: string[]) { return elementsProperties; } -const AvatarMarble = props => { +type AvatarProps = { + colors: string[]; + name: string; + square: boolean; + title: boolean; + size: string; +}; + +const AvatarMarble = (props: AvatarProps) => { const properties = generateColors(props.name, props.colors); return ( @@ -130,10 +138,10 @@ const AvatarMarble = props => { export const BoringAvatar = ({ colors = ['#92A1C6', '#146A7C', '#F0AB3D', '#C271B4', '#C20D90'], - name = 'Clara Barton', + name = '', square = false, title = false, - size = 40, + size = '40px', ...props }) => { const avatarProps = { colors, name, title, size, square, ...props }; diff --git a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts index 5eec620fad9..f2a4aad15ed 100644 --- a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts +++ b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts @@ -89,7 +89,7 @@ export const APPEARANCE_KEYS = containsAllElementsConfigKeys([ 'formFieldInputCopyToClipboardButton', 'formFieldInputCopyToClipboardIcon', - 'avatar', + 'avatarBox', 'avatarImage', 'userButtonBox', diff --git a/packages/clerk-js/src/ui/customizables/parseVariables.ts b/packages/clerk-js/src/ui/customizables/parseVariables.ts index 1aa8eb2a564..e3320482859 100644 --- a/packages/clerk-js/src/ui/customizables/parseVariables.ts +++ b/packages/clerk-js/src/ui/customizables/parseVariables.ts @@ -7,6 +7,7 @@ import { colorOptionToHslaAlphaScale, colorOptionToHslaLightnessScale } from './ export const createColorScales = (theme: Theme) => { const variables = theme.variables || {}; + return removeUndefinedProps({ ...colorOptionToHslaLightnessScale(variables.colorPrimary, 'primary'), ...colorOptionToHslaLightnessScale(variables.colorDanger, 'danger'), @@ -19,6 +20,7 @@ export const createColorScales = (theme: Theme) => { colorInputText: toHSLA(variables.colorInputText), colorBackground: toHSLA(variables.colorBackground), colorInputBackground: toHSLA(variables.colorInputBackground), + colorAvatarGradient: variables.colorAvatarGradient?.length ? variables.colorAvatarGradient.map(toHSLA) : undefined, }); }; diff --git a/packages/clerk-js/src/ui/elements/Avatar.tsx b/packages/clerk-js/src/ui/elements/Avatar.tsx index 323828c42c0..f63de239ae4 100644 --- a/packages/clerk-js/src/ui/elements/Avatar.tsx +++ b/packages/clerk-js/src/ui/elements/Avatar.tsx @@ -53,7 +53,7 @@ export const Avatar = (props: AvatarProps) => { <InitialsAvatarFallback {...props} /> ) : ( <Image - elementDescriptor={imageElementDescriptor || descriptors.avatarImage} + elementDescriptor={[imageElementDescriptor, descriptors.avatarImage]} alt={fullName} title={fullName} src={src || ''} @@ -66,7 +66,7 @@ export const Avatar = (props: AvatarProps) => { // TODO: Revise size handling. Do we need to be this dynamic or should we use the theme instead? return ( <Flex - elementDescriptor={boxElementDescriptor || descriptors.avatar} + elementDescriptor={[boxElementDescriptor, descriptors.avatarBox]} sx={[ theme => ({ flexShrink: 0, @@ -89,8 +89,6 @@ export const Avatar = (props: AvatarProps) => { ); }; -const avatarColors = ['#6C47FF', '#5BC5EF', '#FBD486', '#BEF972', '#FF8F8F']; - function InitialsAvatarFallback(props: AvatarProps) { const initials = getInitials(props); const { parsedInternalTheme } = useAppearance(); @@ -102,14 +100,18 @@ function InitialsAvatarFallback(props: AvatarProps) { align='center' > <BoringAvatar - size={Number(props.size?.(parsedInternalTheme))} - name={`${props.firstName} ${props.lastName}`} - colors={avatarColors} + size={`${props.size?.(parsedInternalTheme)}`} + colors={[...parsedInternalTheme.colors.$colorAvatarGradient]} /> {initials && ( <Text as='span' - sx={{ ...common.centeredFlex('inline-flex'), width: '100%', position: 'absolute' }} + colorScheme='inherit' + sx={{ + ...common.centeredFlex('inline-flex'), + width: '100%', + position: 'absolute', + }} > {initials} </Text> diff --git a/packages/clerk-js/src/ui/foundations/colors.ts b/packages/clerk-js/src/ui/foundations/colors.ts index 27ca096b8e2..4e2b5941f6e 100644 --- a/packages/clerk-js/src/ui/foundations/colors.ts +++ b/packages/clerk-js/src/ui/foundations/colors.ts @@ -37,6 +37,7 @@ export const colors = Object.freeze({ ...whiteAlpha, colorBackground: 'white', colorInputBackground: 'white', + colorAvatarGradient: ['#6C47FF', '#5BC5EF', '#FBD486', '#BEF972', '#FF8F8F'], colorText: 'black', colorTextOnPrimaryBackground: 'white', colorTextSecondary: 'rgba(0,0,0,0.65)', diff --git a/packages/clerk-js/src/ui/utils/fastDeepMerge.test.ts b/packages/clerk-js/src/ui/utils/fastDeepMerge.test.ts index a8c541918b0..c7086783e72 100644 --- a/packages/clerk-js/src/ui/utils/fastDeepMerge.test.ts +++ b/packages/clerk-js/src/ui/utils/fastDeepMerge.test.ts @@ -28,6 +28,13 @@ describe('fastDeepMergeReplace', () => { fastDeepMergeAndReplace(source, target); expect(target).toEqual({ a: '1', b: '2', c: '3', obj: { a: '1', b: '2' } }); }); + + it('does not deep-merge arrays', () => { + const source = { obj: { a: 1 }, arr: [1, 2, 3] }; + const target = { obj: { b: 2 }, arr: [1, 2, 3, 4, 5, 6] }; + fastDeepMergeAndReplace(source, target); + expect(target).toEqual({ obj: { a: 1, b: 2 }, arr: [1, 2, 3] }); + }); }); describe('fastDeepMergeKeep', () => { @@ -58,4 +65,11 @@ describe('fastDeepMergeKeep', () => { fastDeepMergeAndKeep(source, target); expect(target).toEqual({ a: '10', b: '2', c: '3', obj: { a: '10', b: '20' } }); }); + + it('does not deep-merge arrays', () => { + const source = { obj: { a: 1 }, arr: [1, 2, 3] }; + const target = { obj: { b: 2 }, arr: [1, 2, 3, 4, 5, 6] }; + fastDeepMergeAndKeep(source, target); + expect(target).toEqual({ obj: { a: 1, b: 2 }, arr: [1, 2, 3, 4, 5, 6] }); + }); }); diff --git a/packages/clerk-js/src/ui/utils/fastDeepMerge.ts b/packages/clerk-js/src/ui/utils/fastDeepMerge.ts index 007eb4cc495..7cec1c3b7fa 100644 --- a/packages/clerk-js/src/ui/utils/fastDeepMerge.ts +++ b/packages/clerk-js/src/ui/utils/fastDeepMerge.ts @@ -12,7 +12,8 @@ export const fastDeepMergeAndReplace = ( } for (const key in source) { - if (source[key] !== null && typeof source[key] === `object`) { + // Deep merge objects but shallow-copy arrays + if (source[key] !== null && typeof source[key] === `object` && !Array.isArray(source[key])) { if (target[key] === undefined) { target[key] = new (Object.getPrototypeOf(source[key]).constructor)(); } @@ -32,7 +33,8 @@ export const fastDeepMergeAndKeep = ( } for (const key in source) { - if (source[key] !== null && typeof source[key] === `object`) { + // Deep merge objects but shallow-copy arrays + if (source[key] !== null && typeof source[key] === `object` && !Array.isArray(source[key])) { if (target[key] === undefined) { target[key] = new (Object.getPrototypeOf(source[key]).constructor)(); } diff --git a/packages/types/src/appearance.ts b/packages/types/src/appearance.ts index f36c7b196dd..53bc964844e 100644 --- a/packages/types/src/appearance.ts +++ b/packages/types/src/appearance.ts @@ -206,7 +206,7 @@ export type ElementsConfig = { formFieldInputCopyToClipboardButton: WithOptions<never, never, never>; formFieldInputCopyToClipboardIcon: WithOptions<never, never, never>; - avatar: WithOptions<never, never, never>; + avatarBox: WithOptions<never, never, never>; avatarImage: WithOptions<never, never, never>; // TODO: We can remove "Popover" from these: @@ -361,6 +361,13 @@ export type Variables = { * The background color for the card container. */ colorBackground?: CssColor; + + /* + * If a user hasn't provided an avatar image, a colorful gradient avatar will be shown as fallback. + * To customise the gradient,pass an array of CSS colors. + * @default ['#6C47FF', '#5BC5EF', '#FBD486', '#BEF972', '#FF8F8F']; + */ + colorAvatarGradient?: CssColor[]; /** * The default text color inside input elements. To customise the input background color instead, use {@link Variables.colorInputBackground}. * @default The value of {@link Variables.colorText} From e674272bfe61d8eae24db3c10436f92eaf98a5da Mon Sep 17 00:00:00 2001 From: Sokratis Vidros <sokratis.vidros@gmail.com> Date: Thu, 13 Oct 2022 21:05:01 +0300 Subject: [PATCH 30/41] fix(clerk-js): Make global errors localizable When calling setGlobalError pass the full error object so that its code can be used by the internal translateError function. --- .../src/ui/elements/contexts/CardStateContext.tsx | 3 ++- packages/clerk-js/src/ui/localization/makeLocalizable.tsx | 2 +- packages/clerk-js/src/ui/utils/errorHandler.ts | 8 ++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/clerk-js/src/ui/elements/contexts/CardStateContext.tsx b/packages/clerk-js/src/ui/elements/contexts/CardStateContext.tsx index b358ea9ef40..fd7d87e8295 100644 --- a/packages/clerk-js/src/ui/elements/contexts/CardStateContext.tsx +++ b/packages/clerk-js/src/ui/elements/contexts/CardStateContext.tsx @@ -1,3 +1,4 @@ +import { ClerkAPIError } from '@clerk/types'; import React from 'react'; import { useLocalizations } from '../../customizables'; @@ -31,7 +32,7 @@ const useCardState = () => { return { setIdle: (metadata?: Metadata) => setState(s => ({ ...s, status: 'idle', metadata })), - setError: (metadata: Metadata) => + setError: (metadata: ClerkAPIError | Metadata) => setState(s => { return { ...s, error: translateError(metadata) }; }), diff --git a/packages/clerk-js/src/ui/localization/makeLocalizable.tsx b/packages/clerk-js/src/ui/localization/makeLocalizable.tsx index 87c584cc44c..a6c559aa0cb 100644 --- a/packages/clerk-js/src/ui/localization/makeLocalizable.tsx +++ b/packages/clerk-js/src/ui/localization/makeLocalizable.tsx @@ -65,7 +65,7 @@ export const useLocalizations = () => { return localizedStringFromKey(localizationKey, parsedResource, globalTokens); }; - const translateError = (error: string | ClerkAPIError | undefined) => { + const translateError = (error: ClerkAPIError | string | undefined) => { if (!error || typeof error === 'string') { return t(error); } diff --git a/packages/clerk-js/src/ui/utils/errorHandler.ts b/packages/clerk-js/src/ui/utils/errorHandler.ts index f659e41e43d..38739ede2d6 100644 --- a/packages/clerk-js/src/ui/utils/errorHandler.ts +++ b/packages/clerk-js/src/ui/utils/errorHandler.ts @@ -43,7 +43,11 @@ function parseErrors(errors: ClerkAPIError[]): ParserErrors { } type HandleError = { - (err: Error, fieldStates: Array<FormControlState<string>>, setGlobalError?: (err: string | undefined) => void): void; + ( + err: Error, + fieldStates: Array<FormControlState<string>>, + setGlobalError?: (err: ClerkAPIError | string | undefined) => void, + ): void; }; export const handleError: HandleError = (err, fieldStates, setGlobalError) => { @@ -107,7 +111,7 @@ const handleClerkApiError: HandleError = (err, fieldStates, setGlobalError) => { // TODO: Make global errors localizable const firstGlobalError = globalErrors[0]; if (firstGlobalError) { - setGlobalError(firstGlobalError.longMessage || firstGlobalError.message || undefined); + setGlobalError(firstGlobalError); } } }; From 0313fe5ce4e0afca20865ad1b6d0503502ea6e4d Mon Sep 17 00:00:00 2001 From: Sokratis Vidros <sokratis.vidros@gmail.com> Date: Thu, 13 Oct 2022 21:05:44 +0300 Subject: [PATCH 31/41] fix(clerk-js): Add global not_allowed_access error to localization prop --- packages/clerk-js/src/ui/localization/defaultEnglishResource.ts | 1 + packages/types/src/localization.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts b/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts index 0a93a1dd1e2..6c85c55c1d1 100644 --- a/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts +++ b/packages/clerk-js/src/ui/localization/defaultEnglishResource.ts @@ -298,5 +298,6 @@ export const defaultResource: DeepRequired<LocalizationResource> = { form_param_nil: '', form_code_incorrect: '', form_password_incorrect: '', + not_allowed_access: '', }, } as const; diff --git a/packages/types/src/localization.ts b/packages/types/src/localization.ts index 06df00b5d46..a48cf8dad7e 100644 --- a/packages/types/src/localization.ts +++ b/packages/types/src/localization.ts @@ -308,5 +308,6 @@ type _LocalizationResource = { form_param_nil: LocalizationValue; form_code_incorrect: LocalizationValue; form_password_incorrect: LocalizationValue; + not_allowed_access: LocalizationValue; }; }; From 78627ca84f96627c3b5ccd77e4fbbcb52f5df784 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis <nikosdouvlis@gmail.com> Date: Thu, 13 Oct 2022 21:12:57 +0300 Subject: [PATCH 32/41] fix(clerk-js): Make translateError fallback to longMessage first --- packages/clerk-js/src/ui/localization/makeLocalizable.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/localization/makeLocalizable.tsx b/packages/clerk-js/src/ui/localization/makeLocalizable.tsx index a6c559aa0cb..aa0018e228c 100644 --- a/packages/clerk-js/src/ui/localization/makeLocalizable.tsx +++ b/packages/clerk-js/src/ui/localization/makeLocalizable.tsx @@ -69,11 +69,11 @@ export const useLocalizations = () => { if (!error || typeof error === 'string') { return t(error); } - const { code, message } = error || {}; + const { code, message, longMessage } = error || {}; if (!code) { return ''; } - return t(localizationKeys(`unstable__errors.${code}` as any)) || message; + return t(localizationKeys(`unstable__errors.${code}` as any)) || longMessage || message; }; return { t, translateError }; From 85d65f8ae962cb16b14ddf9b77b4bf42cb1423da Mon Sep 17 00:00:00 2001 From: George Desipris <george.desipris.56@gmail.com> Date: Thu, 13 Oct 2022 10:54:02 +0300 Subject: [PATCH 33/41] feat(clerk-js): Make the whole ImpersonationFab draggable --- .../src/ui/ImpersonationFab/ImpersonationFab.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx index d66232e22d8..0cbd104750a 100644 --- a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx +++ b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx @@ -1,4 +1,4 @@ -import React, { PointerEventHandler, useEffect, useRef } from 'react'; +import React, { PointerEventHandler, TransitionEventHandler, useEffect, useRef, useState } from 'react'; import { mqu, PropsOfComponent } from '../../ui/styledSystem'; import { getFullName, getIdentifier } from '../../ui/utils'; @@ -174,6 +174,7 @@ export const ImpersonationFab = () => { <Flex ref={containerRef} elementDescriptor={descriptors.impersonationFab} + onPointerDown={onPointerDown} align='center' sx={t => ({ position: 'fixed', @@ -185,6 +186,9 @@ export const ImpersonationFab = () => { borderRadius: t.radii.$halfHeight, //to match the circular eye perfectly backgroundColor: t.colors.$white, fontFamily: t.fonts.$main, + ':hover': { + cursor: 'grab', + }, ':hover #cl-impersonationText': { maxWidth: `min(calc(50vw - ${eyeWidth} - 2 * ${defaultRight}px), ${titleLength}ch)`, [mqu.md]: { @@ -197,12 +201,6 @@ export const ImpersonationFab = () => { })} > <EyeCircle - onPointerDown={onPointerDown} - sx={{ - ':hover': { - cursor: 'grab', - }, - }} width={eyeWidth} height={eyeHeight} /> From 25c24b29564ea14e933ca6bfeb108b5fbeee0405 Mon Sep 17 00:00:00 2001 From: George Desipris <george.desipris.56@gmail.com> Date: Thu, 13 Oct 2022 12:29:19 +0300 Subject: [PATCH 34/41] feat(clerk-js): Fade in text for ImpersonationFab --- .../clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx index 0cbd104750a..866f9687fdf 100644 --- a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx +++ b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx @@ -1,4 +1,4 @@ -import React, { PointerEventHandler, TransitionEventHandler, useEffect, useRef, useState } from 'react'; +import React, { PointerEventHandler, useEffect, useRef } from 'react'; import { mqu, PropsOfComponent } from '../../ui/styledSystem'; import { getFullName, getIdentifier } from '../../ui/utils'; @@ -190,10 +190,12 @@ export const ImpersonationFab = () => { cursor: 'grab', }, ':hover #cl-impersonationText': { + transition: `max-width ${t.transitionDuration.$slowest} ease, opacity ${t.transitionDuration.$slower} ease ${t.transitionDuration.$slowest}`, maxWidth: `min(calc(50vw - ${eyeWidth} - 2 * ${defaultRight}px), ${titleLength}ch)`, [mqu.md]: { maxWidth: `min(calc(100vw - ${eyeWidth} - 2 * ${defaultRight}px), ${titleLength}ch)`, }, + opacity: 1, }, ':hover #cl-impersonationEye': { transform: 'rotate(-180deg)', @@ -208,8 +210,9 @@ export const ImpersonationFab = () => { <Flex id='cl-impersonationText' sx={t => ({ + transition: `max-width ${t.transitionDuration.$slowest} ease, opacity ${t.transitionDuration.$fast} ease`, maxWidth: '0px', - transition: `max-width ${t.transitionDuration.$slowest} ease`, + opacity: 0, })} > <FabContent From 49f4182d939fca922e6c190b3642a80d9b2f8b6a Mon Sep 17 00:00:00 2001 From: George Desipris <george.desipris.56@gmail.com> Date: Thu, 13 Oct 2022 13:52:13 +0300 Subject: [PATCH 35/41] refactor(clerk-js): Code cleanup in ImpersonationFab --- .../clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx index 866f9687fdf..dfcc1b4aede 100644 --- a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx +++ b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx @@ -27,14 +27,12 @@ const EyeCircle = ({ width, height, ...props }: EyeCircleProps) => { const { sx, ...rest } = props; return ( <Col - id='cl-impersonationEye' elementDescriptor={descriptors.impersonationFabIconContainer} center sx={[ t => ({ width, height, - transition: `transform ${t.transitionDuration.$slowest} ease`, backgroundColor: t.colors.$danger500, borderRadius: t.radii.$circle, }), @@ -203,8 +201,12 @@ export const ImpersonationFab = () => { })} > <EyeCircle + id='cl-impersonationEye' width={eyeWidth} height={eyeHeight} + sx={t => ({ + transition: `transform ${t.transitionDuration.$slowest} ease`, + })} /> <Flex From b53d0a88b898e9aa8161906b671e0cd70c5ba2e9 Mon Sep 17 00:00:00 2001 From: George Desipris <george.desipris.56@gmail.com> Date: Thu, 13 Oct 2022 14:06:07 +0300 Subject: [PATCH 36/41] fix(clerk-js): Consistent ImpersonationFab drag behaviour in mobile --- packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx index dfcc1b4aede..6b5c7c03654 100644 --- a/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx +++ b/packages/clerk-js/src/ui/ImpersonationFab/ImpersonationFab.tsx @@ -175,6 +175,7 @@ export const ImpersonationFab = () => { onPointerDown={onPointerDown} align='center' sx={t => ({ + touchAction: 'none', //for drag to work on mobile consistently position: 'fixed', overflow: 'hidden', top: `var(${topProperty}, ${defaultTop}px)`, From 250a47daf561928e7d09b48873b19be4de28a581 Mon Sep 17 00:00:00 2001 From: Haris Chaniotakis <chanioxaris@gmail.com> Date: Thu, 13 Oct 2022 13:19:19 +0300 Subject: [PATCH 37/41] feat(backend-core): Add support for updating user's totp secret and backup codes https://www.notion.so/clerkdev/Allow-updating-totp_secret-backup_codes-for-a-user-via-BAPI-77ed76eeed3d4681b54f04e2ae566016 --- packages/backend-core/API.md | 3 +++ .../backend-core/src/__tests__/endpoints/UserApi.test.ts | 5 +++++ packages/backend-core/src/api/endpoints/UserApi.ts | 3 +++ 3 files changed, 11 insertions(+) diff --git a/packages/backend-core/API.md b/packages/backend-core/API.md index 1927cf54e1a..02aed20385b 100644 --- a/packages/backend-core/API.md +++ b/packages/backend-core/API.md @@ -560,6 +560,7 @@ Available parameters are: - _firstName_ User's first name. - _lastName_ User's last name. - _totpSecret_ User's secret for TOTP. Useful while migrating users with enabled 2FA Authenticator Apps. +- _backupCodes_ User's backup codes. Useful while migrating users with already existed 2FA backup codes. - _publicMetadata_ Metadata saved on the user, that is visible to both your Frontend and Backend APIs. - _privateMetadata_ Metadata saved on the user, that is only visible to your Backend API. - _unsafeMetadata_ Metadata saved on the user, that can be updated from both the Frontend and Backend APIs. Note: Since this data can be modified from the frontend, it is not guaranteed to be safe. @@ -587,6 +588,8 @@ Supported user attributes for update are: | primaryPhoneNumberID | string | | publicMetadata | Record<string, unknown> | | privateMetadata | Record<string, unknown> | +| totpSecret | string | +| backupCodes | string[] | #### deleteUser(userId) diff --git a/packages/backend-core/src/__tests__/endpoints/UserApi.test.ts b/packages/backend-core/src/__tests__/endpoints/UserApi.test.ts index 961995e5774..d2e6ffa5c49 100644 --- a/packages/backend-core/src/__tests__/endpoints/UserApi.test.ts +++ b/packages/backend-core/src/__tests__/endpoints/UserApi.test.ts @@ -148,6 +148,7 @@ test('createUser() creates a user', async () => { firstName: 'Boss', lastName: 'Clerk', totpSecret: 'AICJ3HCXKO4KOY6NDH6RII4E3ZYL5ZBH', + backupCodes: ['1234', 'abcd'], }; nock(defaultServerAPIUrl) @@ -169,6 +170,8 @@ test('updateUser() updates a user', async () => { nestedKey: 42, }, }, + totpSecret: 'AICJ3HCXKO4KOY6NDH6RII4E3ZYL5ZBH', + backupCodes: ['1234', 'abcd'], }; nock(defaultServerAPIUrl) @@ -181,6 +184,8 @@ test('updateUser() updates a user', async () => { nestedKey: 42, }, }, + totp_secret: 'AICJ3HCXKO4KOY6NDH6RII4E3ZYL5ZBH', + backup_codes: ['1234', 'abcd'], }) .replyWithFile(200, __dirname + '/responses/updateUser.json', { 'Content-Type': '', diff --git a/packages/backend-core/src/api/endpoints/UserApi.ts b/packages/backend-core/src/api/endpoints/UserApi.ts index f2c50c52213..0ebbcb6e189 100644 --- a/packages/backend-core/src/api/endpoints/UserApi.ts +++ b/packages/backend-core/src/api/endpoints/UserApi.ts @@ -36,6 +36,7 @@ type CreateUserParams = { skipPasswordChecks?: boolean; skipPasswordRequirement?: boolean; totpSecret?: string; + backupCodes?: string[]; } & UserMetadataParams; interface UpdateUserParams extends UserMetadataParams { @@ -45,6 +46,8 @@ interface UpdateUserParams extends UserMetadataParams { password?: string; primaryEmailAddressID?: string; primaryPhoneNumberID?: string; + totpSecret?: string; + backupCodes?: string[]; } type GetOrganizationMembershipListParams = { From 443149f314022910caa78f32a4a47951122e3f74 Mon Sep 17 00:00:00 2001 From: Sokratis Vidros <sokratis.vidros@gmail.com> Date: Thu, 13 Oct 2022 21:28:55 +0300 Subject: [PATCH 38/41] chore(release): Publish - @clerk/backend-core@2.8.2-staging.0 - @clerk/clerk-js@4.10.0-staging.0 - @clerk/edge@1.12.3-staging.0 - eslint-config-custom@0.0.1-staging.0 - @clerk/clerk-expo@0.9.63-staging.0 - @clerk/nextjs@4.5.3-staging.0 - @clerk/clerk-react@4.3.0-staging.0 - @clerk/remix@1.3.7-staging.0 - @clerk/clerk-sdk-node@4.4.3-staging.0 - @clerk/shared@0.0.2-staging.0 - @clerk/themes@1.2.18-staging.0 - @clerk/types@3.11.0-staging.0 --- package-lock.json | 149 ++++++++++++++------- packages/backend-core/package.json | 4 +- packages/clerk-js/package.json | 6 +- packages/edge/package.json | 6 +- packages/edge/src/info.ts | 2 +- packages/eslint-config-custom/package.json | 8 +- packages/expo/package.json | 8 +- packages/nextjs/package.json | 10 +- packages/react/package.json | 4 +- packages/react/src/info.ts | 2 +- packages/remix/package.json | 8 +- packages/sdk-node/package.json | 6 +- packages/sdk-node/src/info.ts | 2 +- packages/shared/package.json | 6 +- packages/themes/package.json | 4 +- packages/types/package.json | 2 +- 16 files changed, 136 insertions(+), 91 deletions(-) diff --git a/package-lock.json b/package-lock.json index f26f042be78..ef4d4633e8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38043,10 +38043,10 @@ }, "packages/backend-core": { "name": "@clerk/backend-core", - "version": "2.8.1", + "version": "2.8.2-staging.0", "license": "MIT", "dependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "@types/node-fetch": "^2", @@ -38093,11 +38093,11 @@ }, "packages/clerk-js": { "name": "@clerk/clerk-js", - "version": "4.9.0", + "version": "4.10.0-staging.0", "license": "MIT", "dependencies": { - "@clerk/shared": "^0.0.1", - "@clerk/types": "^3.10.1", + "@clerk/shared": "^0.0.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", @@ -38256,11 +38256,11 @@ }, "packages/edge": { "name": "@clerk/edge", - "version": "1.12.2", + "version": "1.12.3-staging.0", "license": "MIT", "dependencies": { - "@clerk/backend-core": "^2.8.1", - "@clerk/types": "^3.10.1", + "@clerk/backend-core": "^2.8.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "next": "^12.2.0" @@ -38547,7 +38547,7 @@ } }, "packages/eslint-config-custom": { - "version": "0.0.0", + "version": "0.0.1-staging.0", "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "^5.15.0", @@ -38622,16 +38622,16 @@ }, "packages/expo": { "name": "@clerk/clerk-expo", - "version": "0.9.62", + "version": "0.9.63-staging.0", "license": "MIT", "dependencies": { - "@clerk/clerk-js": "^4.9.0", - "@clerk/clerk-react": "^4.2.6", + "@clerk/clerk-js": "^4.10.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.0", "base-64": "^1.0.0", "react-native-url-polyfill": "^1.3.0" }, "devDependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", @@ -38695,6 +38695,22 @@ "node": ">=14" } }, + "packages/gatsby-plugin-clerk/node_modules/@clerk/clerk-react": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-4.2.6.tgz", + "integrity": "sha512-830Ykdr9vI8Ld8lBybZWAXXmxSYlxnZOsc8RQF1StEtACF0tFnga+AO7Amgi0z2s8yiX/EsT84SxK0fwLOekHQ==", + "dependencies": { + "@clerk/types": "^3.10.1", + "swr": "^1.3.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16" + } + }, "packages/gatsby-plugin-clerk/node_modules/@clerk/clerk-sdk-node": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@clerk/clerk-sdk-node/-/clerk-sdk-node-4.3.0.tgz", @@ -38732,6 +38748,17 @@ "node": ">=8" } }, + "packages/gatsby-plugin-clerk/node_modules/@clerk/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@clerk/types/-/types-3.10.1.tgz", + "integrity": "sha512-RZgTSkWu0CWeAWKw0WaYOVu7O/vlLsvBN4rptxDH5c4uQOgRmF/wBILmniSCmBMhyyihTW2pfiXsZpCatbJixQ==", + "dependencies": { + "csstype": "^3.1.0" + }, + "engines": { + "node": ">=14" + } + }, "packages/gatsby-plugin-clerk/node_modules/@types/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.0.tgz", @@ -38753,13 +38780,13 @@ }, "packages/nextjs": { "name": "@clerk/nextjs", - "version": "4.5.2", + "version": "4.5.3-staging.0", "license": "MIT", "dependencies": { - "@clerk/clerk-react": "^4.2.6", - "@clerk/clerk-sdk-node": "^4.4.2", - "@clerk/edge": "^1.12.2", - "@clerk/types": "^3.10.1", + "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-sdk-node": "^4.4.3-staging.0", + "@clerk/edge": "^1.12.3-staging.0", + "@clerk/types": "^3.11.0-staging.0", "tslib": "^2.3.1" }, "devDependencies": { @@ -39085,10 +39112,10 @@ }, "packages/react": { "name": "@clerk/clerk-react", - "version": "4.2.6", + "version": "4.3.0-staging.0", "license": "MIT", "dependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "swr": "^1.3.0", "tslib": "^2.3.1" }, @@ -39126,12 +39153,12 @@ }, "packages/remix": { "name": "@clerk/remix", - "version": "1.3.6", + "version": "1.3.7-staging.0", "license": "MIT", "dependencies": { - "@clerk/clerk-react": "^4.2.6", - "@clerk/clerk-sdk-node": "^4.4.2", - "@clerk/types": "^3.10.1", + "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-sdk-node": "^4.4.3-staging.0", + "@clerk/types": "^3.11.0-staging.0", "cookie": "^0.5.0", "tslib": "^2.3.1" }, @@ -39177,11 +39204,11 @@ }, "packages/sdk-node": { "name": "@clerk/clerk-sdk-node", - "version": "4.4.2", + "version": "4.4.3-staging.0", "license": "MIT", "dependencies": { - "@clerk/backend-core": "^2.8.1", - "@clerk/types": "^3.10.1", + "@clerk/backend-core": "^2.8.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/cookies": "^0.7.7", "@types/express": "^4.17.11", @@ -39223,10 +39250,10 @@ }, "packages/shared": { "name": "@clerk/shared", - "version": "0.0.1", + "version": "0.0.2-staging.0", "license": "ISC", "devDependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@types/js-cookie": "^3.0.2", "js-cookie": "^3.0.1", "tsup": "^6.2.3", @@ -39245,10 +39272,10 @@ }, "packages/themes": { "name": "@clerk/themes", - "version": "1.2.17", + "version": "1.2.18-staging.0", "license": "MIT", "devDependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "typescript": "*" }, "engines": { @@ -39260,7 +39287,7 @@ }, "packages/types": { "name": "@clerk/types", - "version": "3.10.1", + "version": "3.11.0-staging.0", "license": "MIT", "dependencies": { "csstype": "^3.1.0" @@ -40732,7 +40759,7 @@ "@clerk/backend-core": { "version": "file:packages/backend-core", "requires": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", @@ -40757,9 +40784,9 @@ "@clerk/clerk-expo": { "version": "file:packages/expo", "requires": { - "@clerk/clerk-js": "^4.9.0", - "@clerk/clerk-react": "^4.2.6", - "@clerk/types": "^3.10.1", + "@clerk/clerk-js": "^4.10.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", @@ -40791,8 +40818,8 @@ "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.5", "@babel/preset-typescript": "^7.12.1", - "@clerk/shared": "^0.0.1", - "@clerk/types": "^3.10.1", + "@clerk/shared": "^0.0.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", @@ -40900,7 +40927,7 @@ "@clerk/clerk-react": { "version": "file:packages/react", "requires": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@testing-library/dom": "^7.28.1", "@testing-library/jest-dom": "^5.11.6", "@testing-library/react": "^11.2.1", @@ -40933,8 +40960,8 @@ "@clerk/clerk-sdk-node": { "version": "file:packages/sdk-node", "requires": { - "@clerk/backend-core": "^2.8.1", - "@clerk/types": "^3.10.1", + "@clerk/backend-core": "^2.8.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/cookies": "^0.7.7", "@types/express": "^4.17.11", @@ -40971,8 +40998,8 @@ "@clerk/edge": { "version": "file:packages/edge", "requires": { - "@clerk/backend-core": "^2.8.1", - "@clerk/types": "^3.10.1", + "@clerk/backend-core": "^2.8.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", @@ -41113,10 +41140,10 @@ "@clerk/nextjs": { "version": "file:packages/nextjs", "requires": { - "@clerk/clerk-react": "^4.2.6", - "@clerk/clerk-sdk-node": "^4.4.2", - "@clerk/edge": "^1.12.2", - "@clerk/types": "^3.10.1", + "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-sdk-node": "^4.4.3-staging.0", + "@clerk/edge": "^1.12.3-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", @@ -41281,9 +41308,9 @@ "@clerk/remix": { "version": "file:packages/remix", "requires": { - "@clerk/clerk-react": "^4.2.6", - "@clerk/clerk-sdk-node": "^4.4.2", - "@clerk/types": "^3.10.1", + "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-sdk-node": "^4.4.3-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@types/cookie": "^0.5.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", @@ -41320,7 +41347,7 @@ "@clerk/shared": { "version": "file:packages/shared", "requires": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@types/js-cookie": "^3.0.2", "js-cookie": "^3.0.1", "tsup": "^6.2.3", @@ -41331,7 +41358,7 @@ "@clerk/themes": { "version": "file:packages/themes", "requires": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "typescript": "*" } }, @@ -55133,6 +55160,16 @@ "tslib": "^2.3.1" } }, + "@clerk/clerk-react": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@clerk/clerk-react/-/clerk-react-4.2.6.tgz", + "integrity": "sha512-830Ykdr9vI8Ld8lBybZWAXXmxSYlxnZOsc8RQF1StEtACF0tFnga+AO7Amgi0z2s8yiX/EsT84SxK0fwLOekHQ==", + "requires": { + "@clerk/types": "^3.10.1", + "swr": "^1.3.0", + "tslib": "^2.3.1" + } + }, "@clerk/clerk-sdk-node": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@clerk/clerk-sdk-node/-/clerk-sdk-node-4.3.0.tgz", @@ -55166,6 +55203,14 @@ } } }, + "@clerk/types": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@clerk/types/-/types-3.10.1.tgz", + "integrity": "sha512-RZgTSkWu0CWeAWKw0WaYOVu7O/vlLsvBN4rptxDH5c4uQOgRmF/wBILmniSCmBMhyyihTW2pfiXsZpCatbJixQ==", + "requires": { + "csstype": "^3.1.0" + } + }, "@types/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.0.tgz", diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 178e0bb4c06..fb4fd423f71 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/backend-core", - "version": "2.8.1", + "version": "2.8.2-staging.0", "license": "MIT", "description": "Clerk Backend API core resources and authentication utilities for JavaScript environments.", "scripts": { @@ -14,7 +14,7 @@ "main": "dist/cjs/index.js", "module": "dist/mjs/index.js", "dependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "@types/node-fetch": "^2", diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index aaea1705cf2..1af467c54d4 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-js", - "version": "4.9.0", + "version": "4.10.0-staging.0", "license": "MIT", "description": "Clerk.dev JS library", "keywords": [ @@ -38,8 +38,8 @@ "test:coverage": "jest --collectCoverage" }, "dependencies": { - "@clerk/types": "^3.10.1", - "@clerk/shared": "^0.0.1", + "@clerk/shared": "^0.0.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", diff --git a/packages/edge/package.json b/packages/edge/package.json index 589605f774a..e42bbf72421 100644 --- a/packages/edge/package.json +++ b/packages/edge/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/edge", - "version": "1.12.2", + "version": "1.12.3-staging.0", "license": "MIT", "description": "Clerk SDK for serverless and edge environments", "keywords": [ @@ -38,8 +38,8 @@ "lint": "eslint ." }, "dependencies": { - "@clerk/backend-core": "^2.8.1", - "@clerk/types": "^3.10.1", + "@clerk/backend-core": "^2.8.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "next": "^12.2.0" diff --git a/packages/edge/src/info.ts b/packages/edge/src/info.ts index b237dcaf750..721552396ee 100644 --- a/packages/edge/src/info.ts +++ b/packages/edge/src/info.ts @@ -1,3 +1,3 @@ /** DO NOT EDIT: This file is automatically generated by ../scripts/info.js */ -export const LIB_VERSION = '1.12.2'; +export const LIB_VERSION = '1.12.3-staging.0'; export const LIB_NAME = '@clerk/edge'; diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json index 64700ad4a0c..46efaf665bf 100644 --- a/packages/eslint-config-custom/package.json +++ b/packages/eslint-config-custom/package.json @@ -1,14 +1,14 @@ { "name": "eslint-config-custom", - "version": "0.0.0", + "version": "0.0.1-staging.0", "main": "index.js", "license": "MIT", "dependencies": { - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-react": "7.28.0", - "eslint-config-turbo": "latest", "@typescript-eslint/eslint-plugin": "^5.15.0", "@typescript-eslint/parser": "^5.15.0", + "eslint-config-prettier": "^8.5.0", + "eslint-config-turbo": "latest", + "eslint-plugin-react": "7.28.0", "eslint-plugin-simple-import-sort": "^7.0.0" }, "publishConfig": { diff --git a/packages/expo/package.json b/packages/expo/package.json index 6a18a01f5ec..aaf08219ec4 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-expo", - "version": "0.9.62", + "version": "0.9.63-staging.0", "license": "MIT", "description": "Clerk.dev React Native/Expo library", "keywords": [ @@ -27,13 +27,13 @@ "lint": "eslint ." }, "dependencies": { - "@clerk/clerk-js": "^4.9.0", - "@clerk/clerk-react": "^4.2.6", + "@clerk/clerk-js": "^4.10.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.0", "base-64": "^1.0.0", "react-native-url-polyfill": "^1.3.0" }, "devDependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 2f0a03e8978..63eb77f64c3 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/nextjs", - "version": "4.5.2", + "version": "4.5.3-staging.0", "license": "MIT", "description": "Clerk.dev SDK for NextJS", "keywords": [ @@ -35,10 +35,10 @@ "dev": "tsc -p tsconfig.build.json --watch" }, "dependencies": { - "@clerk/clerk-react": "^4.2.6", - "@clerk/clerk-sdk-node": "^4.4.2", - "@clerk/edge": "^1.12.2", - "@clerk/types": "^3.10.1", + "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-sdk-node": "^4.4.3-staging.0", + "@clerk/edge": "^1.12.3-staging.0", + "@clerk/types": "^3.11.0-staging.0", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/packages/react/package.json b/packages/react/package.json index 2547e6b46a4..56bfcd49bc5 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-react", - "version": "4.2.6", + "version": "4.3.0-staging.0", "license": "MIT", "description": "Clerk.dev React library", "keywords": [ @@ -29,7 +29,7 @@ "test": "jest" }, "dependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "swr": "^1.3.0", "tslib": "^2.3.1" }, diff --git a/packages/react/src/info.ts b/packages/react/src/info.ts index 290f7494513..b91a8b3734c 100644 --- a/packages/react/src/info.ts +++ b/packages/react/src/info.ts @@ -1,3 +1,3 @@ /** DO NOT EDIT: This file is automatically generated by ../scripts/info.js */ -export const LIB_VERSION = '4.2.6'; +export const LIB_VERSION = '4.3.0-staging.0'; export const LIB_NAME = '@clerk/clerk-react'; diff --git a/packages/remix/package.json b/packages/remix/package.json index 03e4fad55ab..7d2c8ec63b5 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/remix", - "version": "1.3.6", + "version": "1.3.7-staging.0", "license": "MIT", "description": "Clerk.dev SDK for Remix", "keywords": [ @@ -33,9 +33,9 @@ "lint": "eslint ." }, "dependencies": { - "@clerk/clerk-react": "^4.2.6", - "@clerk/clerk-sdk-node": "^4.4.2", - "@clerk/types": "^3.10.1", + "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-sdk-node": "^4.4.3-staging.0", + "@clerk/types": "^3.11.0-staging.0", "cookie": "^0.5.0", "tslib": "^2.3.1" }, diff --git a/packages/sdk-node/package.json b/packages/sdk-node/package.json index 3abf5747834..9c7ec5692bc 100644 --- a/packages/sdk-node/package.json +++ b/packages/sdk-node/package.json @@ -1,5 +1,5 @@ { - "version": "4.4.2", + "version": "4.4.3-staging.0", "license": "MIT", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -38,8 +38,8 @@ "typescript": "*" }, "dependencies": { - "@clerk/backend-core": "^2.8.1", - "@clerk/types": "^3.10.1", + "@clerk/backend-core": "^2.8.2-staging.0", + "@clerk/types": "^3.11.0-staging.0", "@peculiar/webcrypto": "^1.4.0", "@types/cookies": "^0.7.7", "@types/express": "^4.17.11", diff --git a/packages/sdk-node/src/info.ts b/packages/sdk-node/src/info.ts index 4ddc7902d06..00ccc413759 100644 --- a/packages/sdk-node/src/info.ts +++ b/packages/sdk-node/src/info.ts @@ -1,3 +1,3 @@ /** DO NOT EDIT: This file is automatically generated by ../scripts/info.js */ -export const LIB_VERSION = '4.4.2'; +export const LIB_VERSION = '4.4.3-staging.0'; export const LIB_NAME = '@clerk/clerk-sdk-node'; diff --git a/packages/shared/package.json b/packages/shared/package.json index 1aacd2ecc98..38db2a57a04 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/shared", - "version": "0.0.1", + "version": "0.0.2-staging.0", "description": "Internal package utils used by the Clerk SDKs", "types": "./dist/types/index.d.ts", "main": "./dist/index.js", @@ -18,9 +18,9 @@ "test:watch": "vitest" }, "devDependencies": { - "js-cookie": "^3.0.1", - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "@types/js-cookie": "^3.0.2", + "js-cookie": "^3.0.1", "tsup": "^6.2.3", "typescript": "*", "vitest": "^0.23.4" diff --git a/packages/themes/package.json b/packages/themes/package.json index b77231a8274..9d7eec742b0 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/themes", - "version": "1.2.17", + "version": "1.2.18-staging.0", "license": "MIT", "description": "Themes for the Clerk auth components", "keywords": [ @@ -28,7 +28,7 @@ "lint": "eslint ." }, "devDependencies": { - "@clerk/types": "^3.10.1", + "@clerk/types": "^3.11.0-staging.0", "typescript": "*" }, "peerDependencies": { diff --git a/packages/types/package.json b/packages/types/package.json index 89066632e3d..f7fc04ca0ea 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/types", - "version": "3.10.1", + "version": "3.11.0-staging.0", "license": "MIT", "description": "Typings for Clerk libraries.", "keywords": [ From 6430d127b517b4b65d8ab3f5fac02a8b3380cbd2 Mon Sep 17 00:00:00 2001 From: Sokratis Vidros <sokratis.vidros@gmail.com> Date: Thu, 13 Oct 2022 21:47:01 +0300 Subject: [PATCH 39/41] chore(repo): Make eslint-config-custom private --- packages/eslint-config-custom/package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json index 46efaf665bf..64add6adbb8 100644 --- a/packages/eslint-config-custom/package.json +++ b/packages/eslint-config-custom/package.json @@ -2,6 +2,7 @@ "name": "eslint-config-custom", "version": "0.0.1-staging.0", "main": "index.js", + "private": true, "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "^5.15.0", @@ -10,8 +11,5 @@ "eslint-config-turbo": "latest", "eslint-plugin-react": "7.28.0", "eslint-plugin-simple-import-sort": "^7.0.0" - }, - "publishConfig": { - "access": "public" } } From 8858d053fdd221024d18e9502bce6621dbbd80b9 Mon Sep 17 00:00:00 2001 From: Sokratis Vidros <sokratis.vidros@gmail.com> Date: Thu, 13 Oct 2022 21:59:03 +0300 Subject: [PATCH 40/41] chore(repo): Update package.json --- packages/backend-core/package.json | 3 ++- packages/clerk-js/package.json | 3 ++- packages/edge/package.json | 3 ++- packages/expo/package.json | 3 ++- packages/nextjs/package.json | 3 ++- packages/react/package.json | 3 ++- packages/remix/package.json | 3 ++- packages/sdk-node/package.json | 3 ++- packages/shared/package.json | 6 +++++- 9 files changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index fb4fd423f71..73839058db5 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -43,5 +43,6 @@ "homepage": "https://clerk.dev/", "engines": { "node": ">=14" - } + }, + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 1af467c54d4..763f055104e 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -133,5 +133,6 @@ "homepage": "https://clerk.dev/", "bugs": { "url": "https://github.com/clerkinc/javascript/issues" - } + }, + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/edge/package.json b/packages/edge/package.json index e42bbf72421..69a823803df 100644 --- a/packages/edge/package.json +++ b/packages/edge/package.json @@ -62,5 +62,6 @@ }, "bugs": { "url": "https://github.com/clerkinc/javascript/issues" - } + }, + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/expo/package.json b/packages/expo/package.json index aaf08219ec4..69db82aedf1 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -61,5 +61,6 @@ "bugs": { "url": "https://github.com/clerkinc/javascript/issues" }, - "homepage": "https://clerk.dev/" + "homepage": "https://clerk.dev/", + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 63eb77f64c3..cbfd09a3791 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -69,5 +69,6 @@ "bugs": { "url": "https://github.com/clerkinc/javascript/issues" }, - "homepage": "https://clerk.dev/" + "homepage": "https://clerk.dev/", + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/react/package.json b/packages/react/package.json index 56bfcd49bc5..34aa740fd7f 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -68,5 +68,6 @@ "homepage": "https://clerk.dev/", "bugs": { "url": "https://github.com/clerkinc/javascript/issues" - } + }, + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/remix/package.json b/packages/remix/package.json index 7d2c8ec63b5..982cbfa1c7e 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -68,5 +68,6 @@ "bugs": { "url": "https://github.com/clerkinc/javascript/issues" }, - "homepage": "https://clerk.dev/" + "homepage": "https://clerk.dev/", + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/sdk-node/package.json b/packages/sdk-node/package.json index 9c7ec5692bc..86b777b1521 100644 --- a/packages/sdk-node/package.json +++ b/packages/sdk-node/package.json @@ -70,5 +70,6 @@ "homepage": "https://clerk.dev/", "publishConfig": { "access": "public" - } + }, + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce" } diff --git a/packages/shared/package.json b/packages/shared/package.json index 38db2a57a04..23e8798680a 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -35,5 +35,9 @@ "react-dom": "17.0.2" }, "author": "", - "license": "ISC" + "license": "ISC", + "gitHead": "1b19a43b61f712756ab4d8c9ccbee6e8bddbe4ce", + "publishConfig": { + "access": "public" + } } From 7226373edb46763ce006eeba4716d99c16fec47e Mon Sep 17 00:00:00 2001 From: Sokratis Vidros <sokratis.vidros@gmail.com> Date: Thu, 13 Oct 2022 22:00:49 +0300 Subject: [PATCH 41/41] chore(release): Publish - @clerk/backend-core@2.9.0-staging.0 - @clerk/clerk-js@4.10.0-staging.1 - @clerk/edge@1.12.3-staging.1 - eslint-config-custom@0.0.1-staging.1 - @clerk/clerk-expo@0.9.63-staging.1 - @clerk/nextjs@4.5.3-staging.1 - @clerk/clerk-react@4.3.0-staging.1 - @clerk/remix@1.3.7-staging.1 - @clerk/clerk-sdk-node@4.4.3-staging.1 - @clerk/shared@0.0.2-staging.1 - @clerk/themes@1.2.18-staging.1 - @clerk/types@3.11.0-staging.1 --- package-lock.json | 104 ++++++++++----------- packages/backend-core/CHANGELOG.md | 6 ++ packages/backend-core/package.json | 4 +- packages/clerk-js/CHANGELOG.md | 29 ++++++ packages/clerk-js/package.json | 6 +- packages/edge/CHANGELOG.md | 4 + packages/edge/package.json | 6 +- packages/edge/src/info.ts | 2 +- packages/eslint-config-custom/CHANGELOG.md | 8 ++ packages/eslint-config-custom/package.json | 2 +- packages/expo/CHANGELOG.md | 4 + packages/expo/package.json | 8 +- packages/nextjs/CHANGELOG.md | 4 + packages/nextjs/package.json | 10 +- packages/react/CHANGELOG.md | 6 ++ packages/react/package.json | 4 +- packages/react/src/info.ts | 2 +- packages/remix/CHANGELOG.md | 4 + packages/remix/package.json | 8 +- packages/sdk-node/CHANGELOG.md | 4 + packages/sdk-node/package.json | 6 +- packages/sdk-node/src/info.ts | 2 +- packages/shared/CHANGELOG.md | 8 ++ packages/shared/package.json | 4 +- packages/themes/CHANGELOG.md | 4 + packages/themes/package.json | 4 +- packages/types/CHANGELOG.md | 13 +++ packages/types/package.json | 2 +- 28 files changed, 181 insertions(+), 87 deletions(-) create mode 100644 packages/eslint-config-custom/CHANGELOG.md create mode 100644 packages/shared/CHANGELOG.md diff --git a/package-lock.json b/package-lock.json index ef4d4633e8c..1bfb22bc153 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38043,10 +38043,10 @@ }, "packages/backend-core": { "name": "@clerk/backend-core", - "version": "2.8.2-staging.0", + "version": "2.9.0-staging.0", "license": "MIT", "dependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "@types/node-fetch": "^2", @@ -38093,11 +38093,11 @@ }, "packages/clerk-js": { "name": "@clerk/clerk-js", - "version": "4.10.0-staging.0", + "version": "4.10.0-staging.1", "license": "MIT", "dependencies": { - "@clerk/shared": "^0.0.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/shared": "^0.0.2-staging.1", + "@clerk/types": "^3.11.0-staging.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", @@ -38256,11 +38256,11 @@ }, "packages/edge": { "name": "@clerk/edge", - "version": "1.12.3-staging.0", + "version": "1.12.3-staging.1", "license": "MIT", "dependencies": { - "@clerk/backend-core": "^2.8.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/backend-core": "^2.9.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "next": "^12.2.0" @@ -38547,7 +38547,7 @@ } }, "packages/eslint-config-custom": { - "version": "0.0.1-staging.0", + "version": "0.0.1-staging.1", "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "^5.15.0", @@ -38622,16 +38622,16 @@ }, "packages/expo": { "name": "@clerk/clerk-expo", - "version": "0.9.63-staging.0", + "version": "0.9.63-staging.1", "license": "MIT", "dependencies": { - "@clerk/clerk-js": "^4.10.0-staging.0", - "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-js": "^4.10.0-staging.1", + "@clerk/clerk-react": "^4.3.0-staging.1", "base-64": "^1.0.0", "react-native-url-polyfill": "^1.3.0" }, "devDependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", @@ -38780,13 +38780,13 @@ }, "packages/nextjs": { "name": "@clerk/nextjs", - "version": "4.5.3-staging.0", + "version": "4.5.3-staging.1", "license": "MIT", "dependencies": { - "@clerk/clerk-react": "^4.3.0-staging.0", - "@clerk/clerk-sdk-node": "^4.4.3-staging.0", - "@clerk/edge": "^1.12.3-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.1", + "@clerk/clerk-sdk-node": "^4.4.3-staging.1", + "@clerk/edge": "^1.12.3-staging.1", + "@clerk/types": "^3.11.0-staging.1", "tslib": "^2.3.1" }, "devDependencies": { @@ -39112,10 +39112,10 @@ }, "packages/react": { "name": "@clerk/clerk-react", - "version": "4.3.0-staging.0", + "version": "4.3.0-staging.1", "license": "MIT", "dependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "swr": "^1.3.0", "tslib": "^2.3.1" }, @@ -39153,12 +39153,12 @@ }, "packages/remix": { "name": "@clerk/remix", - "version": "1.3.7-staging.0", + "version": "1.3.7-staging.1", "license": "MIT", "dependencies": { - "@clerk/clerk-react": "^4.3.0-staging.0", - "@clerk/clerk-sdk-node": "^4.4.3-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.1", + "@clerk/clerk-sdk-node": "^4.4.3-staging.1", + "@clerk/types": "^3.11.0-staging.1", "cookie": "^0.5.0", "tslib": "^2.3.1" }, @@ -39204,11 +39204,11 @@ }, "packages/sdk-node": { "name": "@clerk/clerk-sdk-node", - "version": "4.4.3-staging.0", + "version": "4.4.3-staging.1", "license": "MIT", "dependencies": { - "@clerk/backend-core": "^2.8.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/backend-core": "^2.9.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/cookies": "^0.7.7", "@types/express": "^4.17.11", @@ -39250,10 +39250,10 @@ }, "packages/shared": { "name": "@clerk/shared", - "version": "0.0.2-staging.0", + "version": "0.0.2-staging.1", "license": "ISC", "devDependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@types/js-cookie": "^3.0.2", "js-cookie": "^3.0.1", "tsup": "^6.2.3", @@ -39272,10 +39272,10 @@ }, "packages/themes": { "name": "@clerk/themes", - "version": "1.2.18-staging.0", + "version": "1.2.18-staging.1", "license": "MIT", "devDependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "typescript": "*" }, "engines": { @@ -39287,7 +39287,7 @@ }, "packages/types": { "name": "@clerk/types", - "version": "3.11.0-staging.0", + "version": "3.11.0-staging.1", "license": "MIT", "dependencies": { "csstype": "^3.1.0" @@ -40759,7 +40759,7 @@ "@clerk/backend-core": { "version": "file:packages/backend-core", "requires": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", @@ -40784,9 +40784,9 @@ "@clerk/clerk-expo": { "version": "file:packages/expo", "requires": { - "@clerk/clerk-js": "^4.10.0-staging.0", - "@clerk/clerk-react": "^4.3.0-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/clerk-js": "^4.10.0-staging.1", + "@clerk/clerk-react": "^4.3.0-staging.1", + "@clerk/types": "^3.11.0-staging.1", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", @@ -40818,8 +40818,8 @@ "@babel/preset-env": "^7.12.1", "@babel/preset-react": "^7.12.5", "@babel/preset-typescript": "^7.12.1", - "@clerk/shared": "^0.0.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/shared": "^0.0.2-staging.1", + "@clerk/types": "^3.11.0-staging.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", @@ -40927,7 +40927,7 @@ "@clerk/clerk-react": { "version": "file:packages/react", "requires": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@testing-library/dom": "^7.28.1", "@testing-library/jest-dom": "^5.11.6", "@testing-library/react": "^11.2.1", @@ -40960,8 +40960,8 @@ "@clerk/clerk-sdk-node": { "version": "file:packages/sdk-node", "requires": { - "@clerk/backend-core": "^2.8.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/backend-core": "^2.9.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/cookies": "^0.7.7", "@types/express": "^4.17.11", @@ -40998,8 +40998,8 @@ "@clerk/edge": { "version": "file:packages/edge", "requires": { - "@clerk/backend-core": "^2.8.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/backend-core": "^2.9.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", @@ -41140,10 +41140,10 @@ "@clerk/nextjs": { "version": "file:packages/nextjs", "requires": { - "@clerk/clerk-react": "^4.3.0-staging.0", - "@clerk/clerk-sdk-node": "^4.4.3-staging.0", - "@clerk/edge": "^1.12.3-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.1", + "@clerk/clerk-sdk-node": "^4.4.3-staging.1", + "@clerk/edge": "^1.12.3-staging.1", + "@clerk/types": "^3.11.0-staging.1", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", @@ -41308,9 +41308,9 @@ "@clerk/remix": { "version": "file:packages/remix", "requires": { - "@clerk/clerk-react": "^4.3.0-staging.0", - "@clerk/clerk-sdk-node": "^4.4.3-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.1", + "@clerk/clerk-sdk-node": "^4.4.3-staging.1", + "@clerk/types": "^3.11.0-staging.1", "@types/cookie": "^0.5.0", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", @@ -41347,7 +41347,7 @@ "@clerk/shared": { "version": "file:packages/shared", "requires": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@types/js-cookie": "^3.0.2", "js-cookie": "^3.0.1", "tsup": "^6.2.3", @@ -41358,7 +41358,7 @@ "@clerk/themes": { "version": "file:packages/themes", "requires": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "typescript": "*" } }, diff --git a/packages/backend-core/CHANGELOG.md b/packages/backend-core/CHANGELOG.md index 59809b21a35..3de43940656 100644 --- a/packages/backend-core/CHANGELOG.md +++ b/packages/backend-core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.9.0-staging.0](https://github.com/clerkinc/javascript/compare/@clerk/backend-core@2.8.1...@clerk/backend-core@2.9.0-staging.0) (2022-10-13) + +### Features + +- **backend-core:** Add support for updating user's totp secret and backup codes ([250a47d](https://github.com/clerkinc/javascript/commit/250a47daf561928e7d09b48873b19be4de28a581)) + ### [2.8.1](https://github.com/clerkinc/javascript/compare/@clerk/backend-core@2.8.1-staging.0...@clerk/backend-core@2.8.1) (2022-10-07) **Note:** Version bump only for package @clerk/backend-core diff --git a/packages/backend-core/package.json b/packages/backend-core/package.json index 73839058db5..14936f3f330 100644 --- a/packages/backend-core/package.json +++ b/packages/backend-core/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/backend-core", - "version": "2.8.2-staging.0", + "version": "2.9.0-staging.0", "license": "MIT", "description": "Clerk Backend API core resources and authentication utilities for JavaScript environments.", "scripts": { @@ -14,7 +14,7 @@ "main": "dist/cjs/index.js", "module": "dist/mjs/index.js", "dependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "@types/node-fetch": "^2", diff --git a/packages/clerk-js/CHANGELOG.md b/packages/clerk-js/CHANGELOG.md index 3ec44d1ac00..208130f94bb 100644 --- a/packages/clerk-js/CHANGELOG.md +++ b/packages/clerk-js/CHANGELOG.md @@ -3,6 +3,35 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.10.0-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/clerk-js@4.9.0...@clerk/clerk-js@4.10.0-staging.1) (2022-10-13) + +### Features + +- **clerk-js,clerk-react,types:** Wire up `OrganizationSwitcher` and `OrganizationProfile` ([1e34e69](https://github.com/clerkinc/javascript/commit/1e34e6986ee49aeb9ca9f72cdc5d799d6611b53f)) +- **clerk-js:** Add table and pagination elements ([cb56f5c](https://github.com/clerkinc/javascript/commit/cb56f5c0313ba6f1fce50eae6fc3e3d596cf1b16)) +- **clerk-js:** Fade in text for ImpersonationFab ([25c24b2](https://github.com/clerkinc/javascript/commit/25c24b29564ea14e933ca6bfeb108b5fbeee0405)) +- **clerk-js:** Introduce Menu element ([f4b4586](https://github.com/clerkinc/javascript/commit/f4b4586816734a97a06bc7a9ee1c12f728973daa)) +- **clerk-js:** Introduce Select element and use it in PhoneInput ([9619bfe](https://github.com/clerkinc/javascript/commit/9619bfe6da4fb876f2ba6279f2c08d6a8c2d263c)) +- **clerk-js:** Make the whole ImpersonationFab draggable ([85d65f8](https://github.com/clerkinc/javascript/commit/85d65f8ae962cb16b14ddf9b77b4bf42cb1423da)) +- **clerk-js:** Replace Switch Account text with icon ([1262f1b](https://github.com/clerkinc/javascript/commit/1262f1bfacd10df0a292fe0250b8843729aa1162)) + +### Bug Fixes + +- **clerk-js:** Add appearance customization support for avatar gradient ([96cde45](https://github.com/clerkinc/javascript/commit/96cde45b4f1db5ff074289b57ff58c40bf80f6e1)) +- **clerk-js:** Add default colors for avatar ([703fbd9](https://github.com/clerkinc/javascript/commit/703fbd9922c25b4e34fc8b443020e77d54a11afe)) +- **clerk-js:** Add global not_allowed_access error to localization prop ([0313fe5](https://github.com/clerkinc/javascript/commit/0313fe5ce4e0afca20865ad1b6d0503502ea6e4d)) +- **clerk-js:** Consistent ImpersonationFab drag behaviour in mobile ([b53d0a8](https://github.com/clerkinc/javascript/commit/b53d0a88b898e9aa8161906b671e0cd70c5ba2e9)) +- **clerk-js:** Extract BoringAvatar library module ([ca5420b](https://github.com/clerkinc/javascript/commit/ca5420b4dd6a6ddb26086c1f1641e9b2b44ea7b2)) +- **clerk-js:** Fix useSupportEmail.test.tsx ([52bb1cb](https://github.com/clerkinc/javascript/commit/52bb1cb950edc88b53c8ea05c88b3cfd6b1d377e)) +- **clerk-js:** Implement tabs components ([d9428cd](https://github.com/clerkinc/javascript/commit/d9428cdf21889318a181310f32ea77fe1f627e7e)) +- **clerk-js:** Improve keyboard nav and handle disabled tabs order of focus ([ae87f00](https://github.com/clerkinc/javascript/commit/ae87f0025b457ac64a60bd5176406bb46b1d532f)) +- **clerk-js:** Introduce FullHeightLoader element and replace Spinner in UserProfile ([121d697](https://github.com/clerkinc/javascript/commit/121d6972889fe8ecc3d534e12e40273766b2ba41)) +- **clerk-js:** Make global errors localizable ([e674272](https://github.com/clerkinc/javascript/commit/e674272bfe61d8eae24db3c10436f92eaf98a5da)) +- **clerk-js:** Make translateError fallback to longMessage first ([78627ca](https://github.com/clerkinc/javascript/commit/78627ca84f96627c3b5ccd77e4fbbcb52f5df784)) +- **clerk-js:** Minor refactor in naming and types ([8e1d32b](https://github.com/clerkinc/javascript/commit/8e1d32b660e33c2131642de0e9d0435e40544362)) +- **clerk-js:** Remove redundant code ([49c97e2](https://github.com/clerkinc/javascript/commit/49c97e2165eb54a430c22a74e86649e298205644)) +- **clerk-js:** Replace gravatar with Boring avatar ([7f2e2b6](https://github.com/clerkinc/javascript/commit/7f2e2b600fb746cc36c8464629d63ca3aa1a430b)) + ## [4.9.0](https://github.com/clerkinc/javascript/compare/@clerk/clerk-js@4.9.0-staging.1...@clerk/clerk-js@4.9.0) (2022-10-07) **Note:** Version bump only for package @clerk/clerk-js diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 763f055104e..81d171ff1e9 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-js", - "version": "4.10.0-staging.0", + "version": "4.10.0-staging.1", "license": "MIT", "description": "Clerk.dev JS library", "keywords": [ @@ -38,8 +38,8 @@ "test:coverage": "jest --collectCoverage" }, "dependencies": { - "@clerk/shared": "^0.0.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/shared": "^0.0.2-staging.1", + "@clerk/types": "^3.11.0-staging.1", "@emotion/cache": "^11.7.1", "@emotion/react": "^11.9.0", "@floating-ui/react-dom-interactions": "^0.6.3", diff --git a/packages/edge/CHANGELOG.md b/packages/edge/CHANGELOG.md index 4c0fdee900e..72c63499d60 100644 --- a/packages/edge/CHANGELOG.md +++ b/packages/edge/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [1.12.3-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/edge@1.12.2...@clerk/edge@1.12.3-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/edge + ### [1.12.2](https://github.com/clerkinc/javascript/compare/@clerk/edge@1.12.2-staging.0...@clerk/edge@1.12.2) (2022-10-07) **Note:** Version bump only for package @clerk/edge diff --git a/packages/edge/package.json b/packages/edge/package.json index 69a823803df..68736a551b2 100644 --- a/packages/edge/package.json +++ b/packages/edge/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/edge", - "version": "1.12.3-staging.0", + "version": "1.12.3-staging.1", "license": "MIT", "description": "Clerk SDK for serverless and edge environments", "keywords": [ @@ -38,8 +38,8 @@ "lint": "eslint ." }, "dependencies": { - "@clerk/backend-core": "^2.8.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/backend-core": "^2.9.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/node": "^16.11.55", "next": "^12.2.0" diff --git a/packages/edge/src/info.ts b/packages/edge/src/info.ts index 721552396ee..3b75a150d43 100644 --- a/packages/edge/src/info.ts +++ b/packages/edge/src/info.ts @@ -1,3 +1,3 @@ /** DO NOT EDIT: This file is automatically generated by ../scripts/info.js */ -export const LIB_VERSION = '1.12.3-staging.0'; +export const LIB_VERSION = '1.12.3-staging.1'; export const LIB_NAME = '@clerk/edge'; diff --git a/packages/eslint-config-custom/CHANGELOG.md b/packages/eslint-config-custom/CHANGELOG.md new file mode 100644 index 00000000000..b5e4795b9a4 --- /dev/null +++ b/packages/eslint-config-custom/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +### 0.0.1-staging.1 (2022-10-13) + +**Note:** Version bump only for package eslint-config-custom diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json index 64add6adbb8..3c0e1af6bde 100644 --- a/packages/eslint-config-custom/package.json +++ b/packages/eslint-config-custom/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-custom", - "version": "0.0.1-staging.0", + "version": "0.0.1-staging.1", "main": "index.js", "private": true, "license": "MIT", diff --git a/packages/expo/CHANGELOG.md b/packages/expo/CHANGELOG.md index 3eb1507cf0c..dea26b2ebf5 100644 --- a/packages/expo/CHANGELOG.md +++ b/packages/expo/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.9.63-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/clerk-expo@0.9.62...@clerk/clerk-expo@0.9.63-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/clerk-expo + ### [0.9.62](https://github.com/clerkinc/javascript/compare/@clerk/clerk-expo@0.9.62-staging.1...@clerk/clerk-expo@0.9.62) (2022-10-07) **Note:** Version bump only for package @clerk/clerk-expo diff --git a/packages/expo/package.json b/packages/expo/package.json index 69db82aedf1..69d9173fec0 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-expo", - "version": "0.9.63-staging.0", + "version": "0.9.63-staging.1", "license": "MIT", "description": "Clerk.dev React Native/Expo library", "keywords": [ @@ -27,13 +27,13 @@ "lint": "eslint ." }, "dependencies": { - "@clerk/clerk-js": "^4.10.0-staging.0", - "@clerk/clerk-react": "^4.3.0-staging.0", + "@clerk/clerk-js": "^4.10.0-staging.1", + "@clerk/clerk-react": "^4.3.0-staging.1", "base-64": "^1.0.0", "react-native-url-polyfill": "^1.3.0" }, "devDependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@types/jest": "^27.4.0", "@types/node": "^16.11.55", "@types/react": "^17.0.39", diff --git a/packages/nextjs/CHANGELOG.md b/packages/nextjs/CHANGELOG.md index 2421358a1a9..de4c2902bf8 100644 --- a/packages/nextjs/CHANGELOG.md +++ b/packages/nextjs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [4.5.3-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/nextjs@4.5.2...@clerk/nextjs@4.5.3-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/nextjs + ### [4.5.2](https://github.com/clerkinc/javascript/compare/@clerk/nextjs@4.5.2-staging.0...@clerk/nextjs@4.5.2) (2022-10-07) **Note:** Version bump only for package @clerk/nextjs diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index cbfd09a3791..e32de020d1e 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/nextjs", - "version": "4.5.3-staging.0", + "version": "4.5.3-staging.1", "license": "MIT", "description": "Clerk.dev SDK for NextJS", "keywords": [ @@ -35,10 +35,10 @@ "dev": "tsc -p tsconfig.build.json --watch" }, "dependencies": { - "@clerk/clerk-react": "^4.3.0-staging.0", - "@clerk/clerk-sdk-node": "^4.4.3-staging.0", - "@clerk/edge": "^1.12.3-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.1", + "@clerk/clerk-sdk-node": "^4.4.3-staging.1", + "@clerk/edge": "^1.12.3-staging.1", + "@clerk/types": "^3.11.0-staging.1", "tslib": "^2.3.1" }, "devDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index afd55d5d6b1..3a52c1e7d66 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [4.3.0-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/clerk-react@4.2.6...@clerk/clerk-react@4.3.0-staging.1) (2022-10-13) + +### Features + +- **clerk-js,clerk-react,types:** Wire up `OrganizationSwitcher` and `OrganizationProfile` ([1e34e69](https://github.com/clerkinc/javascript/commit/1e34e6986ee49aeb9ca9f72cdc5d799d6611b53f)) + ### [4.2.6](https://github.com/clerkinc/javascript/compare/@clerk/clerk-react@4.2.6-staging.0...@clerk/clerk-react@4.2.6) (2022-10-07) **Note:** Version bump only for package @clerk/clerk-react diff --git a/packages/react/package.json b/packages/react/package.json index 34aa740fd7f..2b46f4a95f4 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-react", - "version": "4.3.0-staging.0", + "version": "4.3.0-staging.1", "license": "MIT", "description": "Clerk.dev React library", "keywords": [ @@ -29,7 +29,7 @@ "test": "jest" }, "dependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "swr": "^1.3.0", "tslib": "^2.3.1" }, diff --git a/packages/react/src/info.ts b/packages/react/src/info.ts index b91a8b3734c..82ecffa07cd 100644 --- a/packages/react/src/info.ts +++ b/packages/react/src/info.ts @@ -1,3 +1,3 @@ /** DO NOT EDIT: This file is automatically generated by ../scripts/info.js */ -export const LIB_VERSION = '4.3.0-staging.0'; +export const LIB_VERSION = '4.3.0-staging.1'; export const LIB_NAME = '@clerk/clerk-react'; diff --git a/packages/remix/CHANGELOG.md b/packages/remix/CHANGELOG.md index ae8f6d36b8c..67530dfb318 100644 --- a/packages/remix/CHANGELOG.md +++ b/packages/remix/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [1.3.7-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/remix@1.3.6...@clerk/remix@1.3.7-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/remix + ### [1.3.6](https://github.com/clerkinc/javascript/compare/@clerk/remix@1.3.6-staging.0...@clerk/remix@1.3.6) (2022-10-07) **Note:** Version bump only for package @clerk/remix diff --git a/packages/remix/package.json b/packages/remix/package.json index 982cbfa1c7e..02e1d1b2cbf 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/remix", - "version": "1.3.7-staging.0", + "version": "1.3.7-staging.1", "license": "MIT", "description": "Clerk.dev SDK for Remix", "keywords": [ @@ -33,9 +33,9 @@ "lint": "eslint ." }, "dependencies": { - "@clerk/clerk-react": "^4.3.0-staging.0", - "@clerk/clerk-sdk-node": "^4.4.3-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/clerk-react": "^4.3.0-staging.1", + "@clerk/clerk-sdk-node": "^4.4.3-staging.1", + "@clerk/types": "^3.11.0-staging.1", "cookie": "^0.5.0", "tslib": "^2.3.1" }, diff --git a/packages/sdk-node/CHANGELOG.md b/packages/sdk-node/CHANGELOG.md index 0dfd777efb2..b438b0d3bb5 100644 --- a/packages/sdk-node/CHANGELOG.md +++ b/packages/sdk-node/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [4.4.3-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/clerk-sdk-node@4.4.2...@clerk/clerk-sdk-node@4.4.3-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/clerk-sdk-node + ### [4.4.2](https://github.com/clerkinc/javascript/compare/@clerk/clerk-sdk-node@4.4.2-staging.0...@clerk/clerk-sdk-node@4.4.2) (2022-10-07) **Note:** Version bump only for package @clerk/clerk-sdk-node diff --git a/packages/sdk-node/package.json b/packages/sdk-node/package.json index 86b777b1521..51addba3580 100644 --- a/packages/sdk-node/package.json +++ b/packages/sdk-node/package.json @@ -1,5 +1,5 @@ { - "version": "4.4.3-staging.0", + "version": "4.4.3-staging.1", "license": "MIT", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -38,8 +38,8 @@ "typescript": "*" }, "dependencies": { - "@clerk/backend-core": "^2.8.2-staging.0", - "@clerk/types": "^3.11.0-staging.0", + "@clerk/backend-core": "^2.9.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@peculiar/webcrypto": "^1.4.0", "@types/cookies": "^0.7.7", "@types/express": "^4.17.11", diff --git a/packages/sdk-node/src/info.ts b/packages/sdk-node/src/info.ts index 00ccc413759..92730302c21 100644 --- a/packages/sdk-node/src/info.ts +++ b/packages/sdk-node/src/info.ts @@ -1,3 +1,3 @@ /** DO NOT EDIT: This file is automatically generated by ../scripts/info.js */ -export const LIB_VERSION = '4.4.3-staging.0'; +export const LIB_VERSION = '4.4.3-staging.1'; export const LIB_NAME = '@clerk/clerk-sdk-node'; diff --git a/packages/shared/CHANGELOG.md b/packages/shared/CHANGELOG.md new file mode 100644 index 00000000000..cfca2a29b04 --- /dev/null +++ b/packages/shared/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +### [0.0.2-staging.1](https://github.com/clerkinc/clerk_docker/compare/@clerk/shared@0.3.27...@clerk/shared@0.0.2-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/shared diff --git a/packages/shared/package.json b/packages/shared/package.json index 23e8798680a..41afacdfcb0 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/shared", - "version": "0.0.2-staging.0", + "version": "0.0.2-staging.1", "description": "Internal package utils used by the Clerk SDKs", "types": "./dist/types/index.d.ts", "main": "./dist/index.js", @@ -18,7 +18,7 @@ "test:watch": "vitest" }, "devDependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "@types/js-cookie": "^3.0.2", "js-cookie": "^3.0.1", "tsup": "^6.2.3", diff --git a/packages/themes/CHANGELOG.md b/packages/themes/CHANGELOG.md index 174225928d0..ac42c9c64c9 100644 --- a/packages/themes/CHANGELOG.md +++ b/packages/themes/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [1.2.18-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/themes@1.2.17...@clerk/themes@1.2.18-staging.1) (2022-10-13) + +**Note:** Version bump only for package @clerk/themes + ### [1.2.17](https://github.com/clerkinc/javascript/compare/@clerk/themes@1.2.17-staging.0...@clerk/themes@1.2.17) (2022-10-07) **Note:** Version bump only for package @clerk/themes diff --git a/packages/themes/package.json b/packages/themes/package.json index 9d7eec742b0..b31205508c4 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/themes", - "version": "1.2.18-staging.0", + "version": "1.2.18-staging.1", "license": "MIT", "description": "Themes for the Clerk auth components", "keywords": [ @@ -28,7 +28,7 @@ "lint": "eslint ." }, "devDependencies": { - "@clerk/types": "^3.11.0-staging.0", + "@clerk/types": "^3.11.0-staging.1", "typescript": "*" }, "peerDependencies": { diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index f72a7808e54..a12caceb292 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [3.11.0-staging.1](https://github.com/clerkinc/javascript/compare/@clerk/types@3.10.1...@clerk/types@3.11.0-staging.1) (2022-10-13) + +### Features + +- **clerk-js,clerk-react,types:** Wire up `OrganizationSwitcher` and `OrganizationProfile` ([1e34e69](https://github.com/clerkinc/javascript/commit/1e34e6986ee49aeb9ca9f72cdc5d799d6611b53f)) +- **clerk-js:** Add table and pagination elements ([cb56f5c](https://github.com/clerkinc/javascript/commit/cb56f5c0313ba6f1fce50eae6fc3e3d596cf1b16)) + +### Bug Fixes + +- **clerk-js:** Add appearance customization support for avatar gradient ([96cde45](https://github.com/clerkinc/javascript/commit/96cde45b4f1db5ff074289b57ff58c40bf80f6e1)) +- **clerk-js:** Add global not_allowed_access error to localization prop ([0313fe5](https://github.com/clerkinc/javascript/commit/0313fe5ce4e0afca20865ad1b6d0503502ea6e4d)) +- **types:** Remove unused hideNavigation prop from UserProfile ([21cafcb](https://github.com/clerkinc/javascript/commit/21cafcb488d66f90a3b0a13a2079d9b0473ecf7e)) + ### [3.10.1](https://github.com/clerkinc/javascript/compare/@clerk/types@3.10.1-staging.0...@clerk/types@3.10.1) (2022-10-07) **Note:** Version bump only for package @clerk/types diff --git a/packages/types/package.json b/packages/types/package.json index f7fc04ca0ea..3d5009e962c 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/types", - "version": "3.11.0-staging.0", + "version": "3.11.0-staging.1", "license": "MIT", "description": "Typings for Clerk libraries.", "keywords": [