├── public ├── favicon.ico ├── apple-touch-icon.png └── magic.svg ├── postcss.config.js ├── README.md ├── next.config.js ├── pages ├── _app.tsx ├── api │ └── generate.ts ├── _document.tsx └── index.tsx ├── tailwind.config.js ├── .gitignore ├── components ├── LoadingDots.tsx ├── Header.tsx ├── Input.tsx └── Choices.tsx ├── tsconfig.json ├── package.json ├── styles ├── loading-dots.module.css └── globals.css ├── utils └── OpenAIStream.ts └── pnpm-lock.yaml /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cortez/RoutinesAI/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cortez/RoutinesAI/HEAD/public/apple-touch-icon.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Routines AI 2 | 3 | This project makes API calls to [OpenAI](https://openai.com/api/)'s `gpt-3.5-turbo-instruct` model with engineered prompts and utilizes [Vercel Edge Functions](https://vercel.com/features/edge-functions) to deliver dynamic responses of varying workout plans based on the user's needs. 4 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | 3 | const withBundleAnalyzer = require('@next/bundle-analyzer')({ 4 | enabled: process.env.ANALYZE === 'true', 5 | }) 6 | module.exports = withBundleAnalyzer({ 7 | reactStrictMode: true, 8 | images: { 9 | domains: ['cortez.link', 'cdn.raster.app'] 10 | } 11 | }) -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { Analytics } from '@vercel/analytics/react' 2 | import type { AppProps } from 'next/app' 3 | import '../styles/globals.css' 4 | 5 | function MyApp({ Component, pageProps }: AppProps) { 6 | return ( 7 | <> 8 | 9 | 10 | 11 | ) 12 | } 13 | 14 | export default MyApp 15 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | future: { 4 | hoverOnlyWhenSupported: true 5 | }, 6 | content: [ 7 | './pages/**/*.{js,ts,jsx,tsx}', 8 | './components/**/*.{js,ts,jsx,tsx}', 9 | './app/**/*.{js,ts,jsx,tsx}' 10 | ], 11 | theme: { 12 | extend: { 13 | colors: { 14 | blue: '#0B99FF' 15 | } 16 | } 17 | }, 18 | plugins: [require('@tailwindcss/forms'), require('@headlessui/tailwindcss')] 19 | } 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | .env 38 | 39 | # idea 40 | .idea 41 | -------------------------------------------------------------------------------- /components/LoadingDots.tsx: -------------------------------------------------------------------------------- 1 | import styles from '../styles/loading-dots.module.css' 2 | 3 | const LoadingDots = ({ 4 | color = '#000', 5 | style = 'small' 6 | }: { 7 | color: string 8 | style: string 9 | }) => { 10 | return ( 11 | 12 | 13 | 14 | 15 | 16 | ) 17 | } 18 | 19 | export default LoadingDots 20 | 21 | LoadingDots.defaultProps = { 22 | style: 'small' 23 | } 24 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "pages/api/feedback.jsx", "components/Form.jsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /components/Header.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | 3 | export default function Header() { 4 | return ( 5 |
6 | 10 | Logo 11 | Routines AI 12 | 13 | 19 | GitHub 20 | 21 |
22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /components/Input.tsx: -------------------------------------------------------------------------------- 1 | import React, { ChangeEvent, useState } from 'react' 2 | 3 | interface Props { 4 | placeholder: string 5 | } 6 | 7 | const Input: React.FC = ({ placeholder }) => { 8 | const [input, setInput] = useState('') 9 | 10 | const handleInputChange = (e: ChangeEvent) => { 11 | setInput(e.target.value) 12 | } 13 | 14 | return ( 15 | 21 | ) 22 | } 23 | 24 | export default Input 25 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "next dev", 5 | "build": "next build", 6 | "start": "next start" 7 | }, 8 | "dependencies": { 9 | "@headlessui/tailwindcss": "^0.1.3", 10 | "@next/bundle-analyzer": "^13.1.6", 11 | "@tailwindcss/forms": "^0.5.3", 12 | "@vercel/analytics": "^0.1.8", 13 | "eventsource-parser": "^0.0.5", 14 | "framer-motion": "^8.4.3", 15 | "next": "latest", 16 | "react": "18.2.0", 17 | "react-dom": "18.2.0", 18 | "react-hook-form": "^7.42.0", 19 | "react-hot-toast": "^2.4.0", 20 | "react-use-measure": "^2.1.1" 21 | }, 22 | "devDependencies": { 23 | "@types/aos": "^3.0.4", 24 | "@types/node": "18.11.3", 25 | "@types/react": "18.0.21", 26 | "@types/react-dom": "18.0.6", 27 | "autoprefixer": "^10.4.12", 28 | "postcss": "^8.4.18", 29 | "tailwindcss": "^3.2.4", 30 | "typescript": "4.9.4" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /pages/api/generate.ts: -------------------------------------------------------------------------------- 1 | import type { NextRequest } from 'next/server' 2 | 3 | import { OpenAIStream, OpenAIStreamPayload } from '../../utils/OpenAIStream' 4 | 5 | if (!process.env.OPENAI_API_KEY) { 6 | throw new Error('Missing OpenAI API Key') 7 | } 8 | 9 | export const config = { 10 | runtime: 'edge' 11 | } 12 | 13 | const handler = async (req: NextRequest): Promise => { 14 | const { prompt } = (await req.json()) as { 15 | prompt?: string 16 | } 17 | 18 | if (!prompt) { 19 | return new Response('No prompt in the request', { status: 400 }) 20 | } 21 | 22 | const payload: OpenAIStreamPayload = { 23 | model: 'gpt-3.5-turbo-instruct', 24 | prompt, 25 | temperature: 0.7, 26 | top_p: 1, 27 | frequency_penalty: 0, 28 | presence_penalty: 0, 29 | max_tokens: 300, 30 | stream: true, 31 | n: 1 32 | } 33 | 34 | const stream = await OpenAIStream(payload) 35 | return new Response(stream) 36 | } 37 | 38 | export default handler 39 | -------------------------------------------------------------------------------- /styles/loading-dots.module.css: -------------------------------------------------------------------------------- 1 | .loading { 2 | display: inline-flex; 3 | align-items: center; 4 | } 5 | 6 | .loading .spacer { 7 | margin-right: 2px; 8 | } 9 | 10 | .loading span { 11 | animation-name: blink; 12 | animation-duration: 1.4s; 13 | animation-iteration-count: infinite; 14 | animation-fill-mode: both; 15 | width: 5px; 16 | height: 5px; 17 | border-radius: 50%; 18 | display: inline-block; 19 | margin: 0 1px; 20 | } 21 | 22 | .loading span:nth-of-type(2) { 23 | animation-delay: 0.2s; 24 | } 25 | 26 | .loading span:nth-of-type(3) { 27 | animation-delay: 0.4s; 28 | } 29 | 30 | .loading2 { 31 | display: inline-flex; 32 | align-items: center; 33 | } 34 | 35 | .loading2 .spacer { 36 | margin-right: 2px; 37 | } 38 | 39 | .loading2 span { 40 | animation-name: blink; 41 | animation-duration: 1.4s; 42 | animation-iteration-count: infinite; 43 | animation-fill-mode: both; 44 | width: 4px; 45 | height: 4px; 46 | border-radius: 50%; 47 | display: inline-block; 48 | margin: 0 1px; 49 | } 50 | 51 | .loading2 span:nth-of-type(2) { 52 | animation-delay: 0.2s; 53 | } 54 | 55 | .loading2 span:nth-of-type(3) { 56 | animation-delay: 0.4s; 57 | } 58 | 59 | @keyframes blink { 60 | 0% { 61 | opacity: 0.2; 62 | } 63 | 20% { 64 | opacity: 1; 65 | } 66 | 100% { 67 | opacity: 0.2; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --text: #000000; 7 | --background: #ffffff; 8 | --gray: #f2f2f7; 9 | --gray-hover: #e8e8ed; 10 | --placeholder: #9e9ea3; 11 | --button: #000000; 12 | } 13 | 14 | @media (prefers-color-scheme: dark) { 15 | :root { 16 | --text: #fefefe; 17 | --background: #1c1c1e; 18 | --gray: #272729; 19 | --gray-hover: #313133; 20 | --button: #2c2c2e; 21 | } 22 | } 23 | 24 | @font-face { 25 | font-family: 'satoshi'; 26 | src: url('https://cortez.link/fonts/Satoshi/Satoshi-Medium.otf'); 27 | font-display: swap; 28 | } 29 | 30 | * { 31 | font-family: 'satoshi', ui-sans-serif, system-ui, -apple-system, sans-serif; 32 | -webkit-font-smoothing: antialiased; 33 | text-rendering: optimizeLegibility; 34 | } 35 | 36 | html { 37 | color: var(--text); 38 | background-color: var(--background); 39 | -webkit-tap-highlight-color: transparent; 40 | } 41 | 42 | h2 { 43 | @apply mt-6 mb-3; 44 | } 45 | 46 | img { 47 | pointer-events: none; 48 | } 49 | 50 | .background-animate { 51 | background-size: 400%; 52 | -webkit-animation: AnimateBackground 3s ease infinite; 53 | -moz-animation: AnimateBackground 3s ease infinite; 54 | animation: AnimateBackground 3s ease infinite; 55 | } 56 | 57 | @keyframes AnimateBackground { 58 | 0%, 59 | 100% { 60 | background-position: 0% 50%; 61 | } 62 | 50% { 63 | background-position: 100% 50%; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /public/magic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import Document, { Head, Html, Main, NextScript } from 'next/document' 2 | 3 | class MyDocument extends Document { 4 | render() { 5 | return ( 6 | 7 | 8 | 9 | 13 | 14 | 18 | 19 | 20 | 21 | 25 | 29 | 33 | 34 | 35 | 39 | 40 | 41 | 42 |
43 | 44 | 45 | 46 | ) 47 | } 48 | } 49 | 50 | export default MyDocument 51 | -------------------------------------------------------------------------------- /utils/OpenAIStream.ts: -------------------------------------------------------------------------------- 1 | import { 2 | createParser, 3 | ParsedEvent, 4 | ReconnectInterval 5 | } from 'eventsource-parser' 6 | 7 | export interface OpenAIStreamPayload { 8 | model: string 9 | prompt: string 10 | temperature: number 11 | top_p: number 12 | frequency_penalty: number 13 | presence_penalty: number 14 | max_tokens: number 15 | stream: boolean 16 | n: number 17 | } 18 | 19 | export async function OpenAIStream(payload: OpenAIStreamPayload) { 20 | const encoder = new TextEncoder() 21 | const decoder = new TextDecoder() 22 | 23 | let counter = 0 24 | 25 | const res = await fetch('https://api.openai.com/v1/completions', { 26 | headers: { 27 | 'Content-Type': 'application/json', 28 | Authorization: `Bearer ${process.env.OPENAI_API_KEY ?? ''}` 29 | }, 30 | method: 'POST', 31 | body: JSON.stringify(payload) 32 | }) 33 | 34 | const stream = new ReadableStream({ 35 | async start(controller) { 36 | // callback 37 | function onParse(event: ParsedEvent | ReconnectInterval) { 38 | if (event.type === 'event') { 39 | const data = event.data 40 | // https://beta.openai.com/docs/api-reference/completions/create#completions/create-stream 41 | if (data === '[DONE]') { 42 | controller.close() 43 | return 44 | } 45 | try { 46 | const json = JSON.parse(data) 47 | const text = json.choices[0].text 48 | if (counter < 2 && (text.match(/\n/) || []).length) { 49 | // this is a prefix character (i.e., "\n\n"), do nothing 50 | return 51 | } 52 | const queue = encoder.encode(text) 53 | controller.enqueue(queue) 54 | counter++ 55 | } catch (e) { 56 | // maybe parse error 57 | controller.error(e) 58 | } 59 | } 60 | } 61 | 62 | // stream response (SSE) from OpenAI may be fragmented into multiple chunks 63 | // this ensures we properly read chunks and invoke an event for each SSE event stream 64 | const parser = createParser(onParse) 65 | // https://web.dev/streams/#asynchronous-iteration 66 | for await (const chunk of res.body as any) { 67 | parser.feed(decoder.decode(chunk)) 68 | } 69 | } 70 | }) 71 | 72 | return stream 73 | } 74 | -------------------------------------------------------------------------------- /components/Choices.tsx: -------------------------------------------------------------------------------- 1 | import { Fragment, useRef, useEffect } from 'react' 2 | 3 | type Props = { 4 | choices: string[] 5 | selectedChoice: string 6 | setSelectedChoice: any 7 | } 8 | 9 | const Choices = ({ choices, selectedChoice, setSelectedChoice }: Props) => { 10 | const handleChoiceChange = (event: React.ChangeEvent) => { 11 | setSelectedChoice(event.target.value) 12 | } 13 | 14 | const containerRef = useRef(null) 15 | 16 | useEffect(() => { 17 | const handleKeyDown = (event: KeyboardEvent) => { 18 | if (event.key === 'Enter') { 19 | const focusedElement = document.activeElement as HTMLElement 20 | if (containerRef.current?.contains(focusedElement)) { 21 | setSelectedChoice(focusedElement.getAttribute('data-choice') || '') 22 | } 23 | } 24 | } 25 | 26 | document.addEventListener('keydown', handleKeyDown) 27 | return () => { 28 | document.removeEventListener('keydown', handleKeyDown) 29 | } 30 | }, [setSelectedChoice]) 31 | 32 | return ( 33 |
34 | {choices.map((choice) => ( 35 | 36 | 45 |
{ 54 | event.preventDefault() 55 | setSelectedChoice(choice) 56 | }} 57 | onKeyDown={(event) => { 58 | if (event.key === 'Enter') { 59 | setSelectedChoice(choice) 60 | } 61 | }} 62 | style={{ userSelect: 'none' }} 63 | > 64 | {choice} 65 |
66 |
67 | ))} 68 |
69 | ) 70 | } 71 | 72 | export default Choices 73 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from 'next' 2 | 3 | import { AnimatePresence, motion } from 'framer-motion' 4 | 5 | import Head from 'next/head' 6 | import Image from 'next/image' 7 | 8 | import { useState } from 'react' 9 | 10 | import { Toaster, toast } from 'react-hot-toast' 11 | 12 | import Choices from '../components/Choices' 13 | import Input from '../components/Input' 14 | 15 | import Header from '../components/Header' 16 | import LoadingDots from '../components/LoadingDots' 17 | 18 | const frequencyChoices = ['1', '2', '3', '4', '5', '6', '7'] 19 | const equipmentChoices = [ 20 | 'Any Equipment', 21 | 'Dumbbells Only', 22 | 'Kettlebell', 23 | 'Pull-up Bar', 24 | 'Ballet Barre', 25 | 'Resistance Bands', 26 | 'No Equipment' 27 | ] 28 | 29 | const Home: NextPage = () => { 30 | const [loading, setLoading] = useState(false) 31 | const [frequency, setFrequency] = useState('1') 32 | const [equipment, setEquipment] = useState('Any Equipment') 33 | const [goal, _setGoal] = useState('') 34 | const [limitations, _setLimitations] = useState('') 35 | const [generatedWorkouts, setGeneratedWorkouts] = useState('') 36 | 37 | const prompt = 38 | limitations === '' 39 | ? `Generate ${frequency} workouts using ${equipment} with a goal to ${goal} and are clearly labeled "Workout Day (number) ((type of workout)): ", and so on. Generate the workouts at max 35 words and beginning with reps and sets, formatted with an "x" between, followed by the exercise name.` 40 | : `Generate ${frequency} workouts using ${equipment} with a goal to ${goal} and are clearly labeled "Workout Day (number) ((type of workout)): ", and so on. Generate the workouts at max 35 words and beginning with reps and sets, formatted with an "x" between, followed by the exercise name. Include accommodations for someone with ${limitations}.` 41 | 42 | const generateWorkout = async (e: any) => { 43 | e.preventDefault() 44 | setGeneratedWorkouts('') 45 | setLoading(true) 46 | const response = await fetch('/api/generate', { 47 | method: 'POST', 48 | headers: { 49 | 'Content-Type': 'application/json' 50 | }, 51 | body: JSON.stringify({ 52 | prompt 53 | }) 54 | }) 55 | 56 | if (!response.ok) { 57 | throw new Error(response.statusText) 58 | } 59 | 60 | const data = response.body 61 | if (!data) { 62 | return 63 | } 64 | 65 | const reader = data.getReader() 66 | const decoder = new TextDecoder() 67 | let done = false 68 | 69 | while (!done) { 70 | const { value, done: doneReading } = await reader.read() 71 | done = doneReading 72 | const chunkValue = decoder.decode(value) 73 | setGeneratedWorkouts((prev) => prev + chunkValue) 74 | } 75 | setLoading(false) 76 | } 77 | 78 | return ( 79 |
80 | 81 | Routines AI 82 | 83 | 84 | 85 |
86 | 87 |
88 |

How many workouts/week do you want to do?

89 | 94 | 95 |

What equipment do you have access to?

96 | 101 | 102 |

What is your main goal?

103 | 104 | 105 |

Name any limitations or leave blank.

106 | 107 | 108 |
109 | {!loading ? ( 110 | 123 | ) : ( 124 | 127 | )} 128 |
129 | 130 | 135 | 136 | 137 | {generatedWorkouts && ( 138 | <> 139 |

140 | Your generated workouts 141 |

142 | 143 |
144 | {generatedWorkouts 145 | .split('Workout ') 146 | .splice(1) 147 | .map((generatedWorkout) => { 148 | generatedWorkout = generatedWorkout.replace(/\./g, '') 149 | return ( 150 |
{ 153 | navigator.clipboard.writeText(generatedWorkout) 154 | toast('Copied workout', {}) 155 | }} 156 | key={generatedWorkout} 157 | > 158 | {generatedWorkout} 159 |
160 | ) 161 | })} 162 |
163 | 164 | )} 165 |
166 |
167 |
168 |
169 | ) 170 | } 171 | 172 | export default Home 173 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@headlessui/tailwindcss': 9 | specifier: ^0.1.3 10 | version: 0.1.3(tailwindcss@3.4.0) 11 | '@next/bundle-analyzer': 12 | specifier: ^13.1.6 13 | version: 13.5.6 14 | '@tailwindcss/forms': 15 | specifier: ^0.5.3 16 | version: 0.5.7(tailwindcss@3.4.0) 17 | '@vercel/analytics': 18 | specifier: ^0.1.8 19 | version: 0.1.11(react@18.2.0) 20 | eventsource-parser: 21 | specifier: ^0.0.5 22 | version: 0.0.5 23 | framer-motion: 24 | specifier: ^8.4.3 25 | version: 8.5.5(react-dom@18.2.0)(react@18.2.0) 26 | next: 27 | specifier: latest 28 | version: 14.0.4(react-dom@18.2.0)(react@18.2.0) 29 | react: 30 | specifier: 18.2.0 31 | version: 18.2.0 32 | react-dom: 33 | specifier: 18.2.0 34 | version: 18.2.0(react@18.2.0) 35 | react-hook-form: 36 | specifier: ^7.42.0 37 | version: 7.49.2(react@18.2.0) 38 | react-hot-toast: 39 | specifier: ^2.4.0 40 | version: 2.4.1(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0) 41 | react-use-measure: 42 | specifier: ^2.1.1 43 | version: 2.1.1(react-dom@18.2.0)(react@18.2.0) 44 | 45 | devDependencies: 46 | '@types/aos': 47 | specifier: ^3.0.4 48 | version: 3.0.7 49 | '@types/node': 50 | specifier: 18.11.3 51 | version: 18.11.3 52 | '@types/react': 53 | specifier: 18.0.21 54 | version: 18.0.21 55 | '@types/react-dom': 56 | specifier: 18.0.6 57 | version: 18.0.6 58 | autoprefixer: 59 | specifier: ^10.4.12 60 | version: 10.4.16(postcss@8.4.32) 61 | postcss: 62 | specifier: ^8.4.18 63 | version: 8.4.32 64 | tailwindcss: 65 | specifier: ^3.2.4 66 | version: 3.4.0 67 | typescript: 68 | specifier: 4.9.4 69 | version: 4.9.4 70 | 71 | packages: 72 | 73 | /@alloc/quick-lru@5.2.0: 74 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 75 | engines: {node: '>=10'} 76 | 77 | /@emotion/is-prop-valid@0.8.8: 78 | resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} 79 | requiresBuild: true 80 | dependencies: 81 | '@emotion/memoize': 0.7.4 82 | dev: false 83 | optional: true 84 | 85 | /@emotion/memoize@0.7.4: 86 | resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} 87 | requiresBuild: true 88 | dev: false 89 | optional: true 90 | 91 | /@headlessui/tailwindcss@0.1.3(tailwindcss@3.4.0): 92 | resolution: {integrity: sha512-3aMdDyYZx9A15euRehpppSyQnb2gIw2s/Uccn2ELIoLQ9oDy0+9oRygNWNjXCD5Dt+w1pxo7C+XoiYvGcqA4Kg==} 93 | engines: {node: '>=10'} 94 | peerDependencies: 95 | tailwindcss: ^3.0 96 | dependencies: 97 | tailwindcss: 3.4.0 98 | dev: false 99 | 100 | /@jridgewell/gen-mapping@0.3.3: 101 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 102 | engines: {node: '>=6.0.0'} 103 | dependencies: 104 | '@jridgewell/set-array': 1.1.2 105 | '@jridgewell/sourcemap-codec': 1.4.15 106 | '@jridgewell/trace-mapping': 0.3.20 107 | 108 | /@jridgewell/resolve-uri@3.1.1: 109 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 110 | engines: {node: '>=6.0.0'} 111 | 112 | /@jridgewell/set-array@1.1.2: 113 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 114 | engines: {node: '>=6.0.0'} 115 | 116 | /@jridgewell/sourcemap-codec@1.4.15: 117 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 118 | 119 | /@jridgewell/trace-mapping@0.3.20: 120 | resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} 121 | dependencies: 122 | '@jridgewell/resolve-uri': 3.1.1 123 | '@jridgewell/sourcemap-codec': 1.4.15 124 | 125 | /@motionone/animation@10.16.3: 126 | resolution: {integrity: sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g==} 127 | dependencies: 128 | '@motionone/easing': 10.16.3 129 | '@motionone/types': 10.16.3 130 | '@motionone/utils': 10.16.3 131 | tslib: 2.6.2 132 | dev: false 133 | 134 | /@motionone/dom@10.16.4: 135 | resolution: {integrity: sha512-HPHlVo/030qpRj9R8fgY50KTN4Ko30moWRTA3L3imrsRBmob93cTYmodln49HYFbQm01lFF7X523OkKY0DX6UA==} 136 | dependencies: 137 | '@motionone/animation': 10.16.3 138 | '@motionone/generators': 10.16.4 139 | '@motionone/types': 10.16.3 140 | '@motionone/utils': 10.16.3 141 | hey-listen: 1.0.8 142 | tslib: 2.6.2 143 | dev: false 144 | 145 | /@motionone/easing@10.16.3: 146 | resolution: {integrity: sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w==} 147 | dependencies: 148 | '@motionone/utils': 10.16.3 149 | tslib: 2.6.2 150 | dev: false 151 | 152 | /@motionone/generators@10.16.4: 153 | resolution: {integrity: sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg==} 154 | dependencies: 155 | '@motionone/types': 10.16.3 156 | '@motionone/utils': 10.16.3 157 | tslib: 2.6.2 158 | dev: false 159 | 160 | /@motionone/types@10.16.3: 161 | resolution: {integrity: sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg==} 162 | dev: false 163 | 164 | /@motionone/utils@10.16.3: 165 | resolution: {integrity: sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA==} 166 | dependencies: 167 | '@motionone/types': 10.16.3 168 | hey-listen: 1.0.8 169 | tslib: 2.6.2 170 | dev: false 171 | 172 | /@next/bundle-analyzer@13.5.6: 173 | resolution: {integrity: sha512-4P5YVpR3N/B5+p0TQ/rPAr+9fsjkdfCVTGzJhKwE7XHqS+QME4gYxAYeGKkfkHEkP2A3GKXs8QSp0LjIvWLI3g==} 174 | dependencies: 175 | webpack-bundle-analyzer: 4.7.0 176 | transitivePeerDependencies: 177 | - bufferutil 178 | - utf-8-validate 179 | dev: false 180 | 181 | /@next/env@14.0.4: 182 | resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} 183 | dev: false 184 | 185 | /@next/swc-darwin-arm64@14.0.4: 186 | resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} 187 | engines: {node: '>= 10'} 188 | cpu: [arm64] 189 | os: [darwin] 190 | requiresBuild: true 191 | dev: false 192 | optional: true 193 | 194 | /@next/swc-darwin-x64@14.0.4: 195 | resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} 196 | engines: {node: '>= 10'} 197 | cpu: [x64] 198 | os: [darwin] 199 | requiresBuild: true 200 | dev: false 201 | optional: true 202 | 203 | /@next/swc-linux-arm64-gnu@14.0.4: 204 | resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} 205 | engines: {node: '>= 10'} 206 | cpu: [arm64] 207 | os: [linux] 208 | requiresBuild: true 209 | dev: false 210 | optional: true 211 | 212 | /@next/swc-linux-arm64-musl@14.0.4: 213 | resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} 214 | engines: {node: '>= 10'} 215 | cpu: [arm64] 216 | os: [linux] 217 | requiresBuild: true 218 | dev: false 219 | optional: true 220 | 221 | /@next/swc-linux-x64-gnu@14.0.4: 222 | resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} 223 | engines: {node: '>= 10'} 224 | cpu: [x64] 225 | os: [linux] 226 | requiresBuild: true 227 | dev: false 228 | optional: true 229 | 230 | /@next/swc-linux-x64-musl@14.0.4: 231 | resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} 232 | engines: {node: '>= 10'} 233 | cpu: [x64] 234 | os: [linux] 235 | requiresBuild: true 236 | dev: false 237 | optional: true 238 | 239 | /@next/swc-win32-arm64-msvc@14.0.4: 240 | resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} 241 | engines: {node: '>= 10'} 242 | cpu: [arm64] 243 | os: [win32] 244 | requiresBuild: true 245 | dev: false 246 | optional: true 247 | 248 | /@next/swc-win32-ia32-msvc@14.0.4: 249 | resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} 250 | engines: {node: '>= 10'} 251 | cpu: [ia32] 252 | os: [win32] 253 | requiresBuild: true 254 | dev: false 255 | optional: true 256 | 257 | /@next/swc-win32-x64-msvc@14.0.4: 258 | resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} 259 | engines: {node: '>= 10'} 260 | cpu: [x64] 261 | os: [win32] 262 | requiresBuild: true 263 | dev: false 264 | optional: true 265 | 266 | /@nodelib/fs.scandir@2.1.5: 267 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 268 | engines: {node: '>= 8'} 269 | dependencies: 270 | '@nodelib/fs.stat': 2.0.5 271 | run-parallel: 1.2.0 272 | 273 | /@nodelib/fs.stat@2.0.5: 274 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 275 | engines: {node: '>= 8'} 276 | 277 | /@nodelib/fs.walk@1.2.8: 278 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 279 | engines: {node: '>= 8'} 280 | dependencies: 281 | '@nodelib/fs.scandir': 2.1.5 282 | fastq: 1.16.0 283 | 284 | /@polka/url@1.0.0-next.24: 285 | resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} 286 | dev: false 287 | 288 | /@swc/helpers@0.5.2: 289 | resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} 290 | dependencies: 291 | tslib: 2.6.2 292 | dev: false 293 | 294 | /@tailwindcss/forms@0.5.7(tailwindcss@3.4.0): 295 | resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==} 296 | peerDependencies: 297 | tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' 298 | dependencies: 299 | mini-svg-data-uri: 1.4.4 300 | tailwindcss: 3.4.0 301 | dev: false 302 | 303 | /@types/aos@3.0.7: 304 | resolution: {integrity: sha512-sEhyFqvKauUJZDbvAB3Pggynrq6g+2PS4XB3tmUr+mDL1gfDJnwslUC4QQ7/l8UD+LWpr3RxZVR/rHoZrLqZVg==} 305 | dev: true 306 | 307 | /@types/node@18.11.3: 308 | resolution: {integrity: sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A==} 309 | dev: true 310 | 311 | /@types/prop-types@15.7.11: 312 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} 313 | dev: true 314 | 315 | /@types/react-dom@18.0.6: 316 | resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} 317 | dependencies: 318 | '@types/react': 18.0.21 319 | dev: true 320 | 321 | /@types/react@18.0.21: 322 | resolution: {integrity: sha512-7QUCOxvFgnD5Jk8ZKlUAhVcRj7GuJRjnjjiY/IUBWKgOlnvDvTMLD4RTF7NPyVmbRhNrbomZiOepg7M/2Kj1mA==} 323 | dependencies: 324 | '@types/prop-types': 15.7.11 325 | '@types/scheduler': 0.16.8 326 | csstype: 3.1.3 327 | dev: true 328 | 329 | /@types/scheduler@0.16.8: 330 | resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} 331 | dev: true 332 | 333 | /@vercel/analytics@0.1.11(react@18.2.0): 334 | resolution: {integrity: sha512-mj5CPR02y0BRs1tN3oZcBNAX9a8NxsIUl9vElDPcqxnMfP0RbRc9fI9Ud7+QDg/1Izvt5uMumsr+6YsmVHcyuw==} 335 | peerDependencies: 336 | react: ^16.8||^17||^18 337 | dependencies: 338 | react: 18.2.0 339 | dev: false 340 | 341 | /acorn-walk@8.3.1: 342 | resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} 343 | engines: {node: '>=0.4.0'} 344 | dev: false 345 | 346 | /acorn@8.11.2: 347 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 348 | engines: {node: '>=0.4.0'} 349 | hasBin: true 350 | dev: false 351 | 352 | /ansi-styles@4.3.0: 353 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 354 | engines: {node: '>=8'} 355 | dependencies: 356 | color-convert: 2.0.1 357 | dev: false 358 | 359 | /any-promise@1.3.0: 360 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 361 | 362 | /anymatch@3.1.3: 363 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 364 | engines: {node: '>= 8'} 365 | dependencies: 366 | normalize-path: 3.0.0 367 | picomatch: 2.3.1 368 | 369 | /arg@5.0.2: 370 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 371 | 372 | /autoprefixer@10.4.16(postcss@8.4.32): 373 | resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} 374 | engines: {node: ^10 || ^12 || >=14} 375 | hasBin: true 376 | peerDependencies: 377 | postcss: ^8.1.0 378 | dependencies: 379 | browserslist: 4.22.2 380 | caniuse-lite: 1.0.30001570 381 | fraction.js: 4.3.7 382 | normalize-range: 0.1.2 383 | picocolors: 1.0.0 384 | postcss: 8.4.32 385 | postcss-value-parser: 4.2.0 386 | dev: true 387 | 388 | /balanced-match@1.0.2: 389 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 390 | 391 | /binary-extensions@2.2.0: 392 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 393 | engines: {node: '>=8'} 394 | 395 | /brace-expansion@1.1.11: 396 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 397 | dependencies: 398 | balanced-match: 1.0.2 399 | concat-map: 0.0.1 400 | 401 | /braces@3.0.2: 402 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 403 | engines: {node: '>=8'} 404 | dependencies: 405 | fill-range: 7.0.1 406 | 407 | /browserslist@4.22.2: 408 | resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} 409 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 410 | hasBin: true 411 | dependencies: 412 | caniuse-lite: 1.0.30001570 413 | electron-to-chromium: 1.4.615 414 | node-releases: 2.0.14 415 | update-browserslist-db: 1.0.13(browserslist@4.22.2) 416 | dev: true 417 | 418 | /busboy@1.6.0: 419 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 420 | engines: {node: '>=10.16.0'} 421 | dependencies: 422 | streamsearch: 1.1.0 423 | dev: false 424 | 425 | /camelcase-css@2.0.1: 426 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 427 | engines: {node: '>= 6'} 428 | 429 | /caniuse-lite@1.0.30001570: 430 | resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} 431 | 432 | /chalk@4.1.2: 433 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 434 | engines: {node: '>=10'} 435 | dependencies: 436 | ansi-styles: 4.3.0 437 | supports-color: 7.2.0 438 | dev: false 439 | 440 | /chokidar@3.5.3: 441 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 442 | engines: {node: '>= 8.10.0'} 443 | dependencies: 444 | anymatch: 3.1.3 445 | braces: 3.0.2 446 | glob-parent: 5.1.2 447 | is-binary-path: 2.1.0 448 | is-glob: 4.0.3 449 | normalize-path: 3.0.0 450 | readdirp: 3.6.0 451 | optionalDependencies: 452 | fsevents: 2.3.3 453 | 454 | /client-only@0.0.1: 455 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 456 | dev: false 457 | 458 | /color-convert@2.0.1: 459 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 460 | engines: {node: '>=7.0.0'} 461 | dependencies: 462 | color-name: 1.1.4 463 | dev: false 464 | 465 | /color-name@1.1.4: 466 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 467 | dev: false 468 | 469 | /commander@4.1.1: 470 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 471 | engines: {node: '>= 6'} 472 | 473 | /commander@7.2.0: 474 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 475 | engines: {node: '>= 10'} 476 | dev: false 477 | 478 | /concat-map@0.0.1: 479 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 480 | 481 | /cssesc@3.0.0: 482 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 483 | engines: {node: '>=4'} 484 | hasBin: true 485 | 486 | /csstype@3.1.3: 487 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 488 | 489 | /debounce@1.2.1: 490 | resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} 491 | dev: false 492 | 493 | /didyoumean@1.2.2: 494 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 495 | 496 | /dlv@1.1.3: 497 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 498 | 499 | /duplexer@0.1.2: 500 | resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} 501 | dev: false 502 | 503 | /electron-to-chromium@1.4.615: 504 | resolution: {integrity: sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==} 505 | dev: true 506 | 507 | /escalade@3.1.1: 508 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 509 | engines: {node: '>=6'} 510 | dev: true 511 | 512 | /eventsource-parser@0.0.5: 513 | resolution: {integrity: sha512-BAq82bC3ZW9fPYYZlofXBOAfbpmDzXIOsj+GOehQwgTUYsQZ6HtHs6zuRtge7Ph8OhS6lNH1kJF8q9dj17RcmA==} 514 | engines: {node: '>=12'} 515 | dev: false 516 | 517 | /fast-glob@3.3.2: 518 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 519 | engines: {node: '>=8.6.0'} 520 | dependencies: 521 | '@nodelib/fs.stat': 2.0.5 522 | '@nodelib/fs.walk': 1.2.8 523 | glob-parent: 5.1.2 524 | merge2: 1.4.1 525 | micromatch: 4.0.5 526 | 527 | /fastq@1.16.0: 528 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 529 | dependencies: 530 | reusify: 1.0.4 531 | 532 | /fill-range@7.0.1: 533 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 534 | engines: {node: '>=8'} 535 | dependencies: 536 | to-regex-range: 5.0.1 537 | 538 | /fraction.js@4.3.7: 539 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 540 | dev: true 541 | 542 | /framer-motion@8.5.5(react-dom@18.2.0)(react@18.2.0): 543 | resolution: {integrity: sha512-5IDx5bxkjWHWUF3CVJoSyUVOtrbAxtzYBBowRE2uYI/6VYhkEBD+rbTHEGuUmbGHRj6YqqSfoG7Aa1cLyWCrBA==} 544 | peerDependencies: 545 | react: ^18.0.0 546 | react-dom: ^18.0.0 547 | dependencies: 548 | '@motionone/dom': 10.16.4 549 | hey-listen: 1.0.8 550 | react: 18.2.0 551 | react-dom: 18.2.0(react@18.2.0) 552 | tslib: 2.6.2 553 | optionalDependencies: 554 | '@emotion/is-prop-valid': 0.8.8 555 | dev: false 556 | 557 | /fs.realpath@1.0.0: 558 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 559 | 560 | /fsevents@2.3.3: 561 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 562 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 563 | os: [darwin] 564 | requiresBuild: true 565 | optional: true 566 | 567 | /function-bind@1.1.2: 568 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 569 | 570 | /glob-parent@5.1.2: 571 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 572 | engines: {node: '>= 6'} 573 | dependencies: 574 | is-glob: 4.0.3 575 | 576 | /glob-parent@6.0.2: 577 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 578 | engines: {node: '>=10.13.0'} 579 | dependencies: 580 | is-glob: 4.0.3 581 | 582 | /glob-to-regexp@0.4.1: 583 | resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 584 | dev: false 585 | 586 | /glob@7.1.6: 587 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 588 | dependencies: 589 | fs.realpath: 1.0.0 590 | inflight: 1.0.6 591 | inherits: 2.0.4 592 | minimatch: 3.1.2 593 | once: 1.4.0 594 | path-is-absolute: 1.0.1 595 | 596 | /goober@2.1.13(csstype@3.1.3): 597 | resolution: {integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==} 598 | peerDependencies: 599 | csstype: ^3.0.10 600 | dependencies: 601 | csstype: 3.1.3 602 | dev: false 603 | 604 | /graceful-fs@4.2.11: 605 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 606 | dev: false 607 | 608 | /gzip-size@6.0.0: 609 | resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} 610 | engines: {node: '>=10'} 611 | dependencies: 612 | duplexer: 0.1.2 613 | dev: false 614 | 615 | /has-flag@4.0.0: 616 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 617 | engines: {node: '>=8'} 618 | dev: false 619 | 620 | /hasown@2.0.0: 621 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 622 | engines: {node: '>= 0.4'} 623 | dependencies: 624 | function-bind: 1.1.2 625 | 626 | /hey-listen@1.0.8: 627 | resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} 628 | dev: false 629 | 630 | /inflight@1.0.6: 631 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 632 | dependencies: 633 | once: 1.4.0 634 | wrappy: 1.0.2 635 | 636 | /inherits@2.0.4: 637 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 638 | 639 | /is-binary-path@2.1.0: 640 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 641 | engines: {node: '>=8'} 642 | dependencies: 643 | binary-extensions: 2.2.0 644 | 645 | /is-core-module@2.13.1: 646 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 647 | dependencies: 648 | hasown: 2.0.0 649 | 650 | /is-extglob@2.1.1: 651 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 652 | engines: {node: '>=0.10.0'} 653 | 654 | /is-glob@4.0.3: 655 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 656 | engines: {node: '>=0.10.0'} 657 | dependencies: 658 | is-extglob: 2.1.1 659 | 660 | /is-number@7.0.0: 661 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 662 | engines: {node: '>=0.12.0'} 663 | 664 | /jiti@1.21.0: 665 | resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} 666 | hasBin: true 667 | 668 | /js-tokens@4.0.0: 669 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 670 | dev: false 671 | 672 | /lilconfig@2.1.0: 673 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 674 | engines: {node: '>=10'} 675 | 676 | /lilconfig@3.0.0: 677 | resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} 678 | engines: {node: '>=14'} 679 | 680 | /lines-and-columns@1.2.4: 681 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 682 | 683 | /lodash@4.17.21: 684 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 685 | dev: false 686 | 687 | /loose-envify@1.4.0: 688 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 689 | hasBin: true 690 | dependencies: 691 | js-tokens: 4.0.0 692 | dev: false 693 | 694 | /merge2@1.4.1: 695 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 696 | engines: {node: '>= 8'} 697 | 698 | /micromatch@4.0.5: 699 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 700 | engines: {node: '>=8.6'} 701 | dependencies: 702 | braces: 3.0.2 703 | picomatch: 2.3.1 704 | 705 | /mini-svg-data-uri@1.4.4: 706 | resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} 707 | hasBin: true 708 | dev: false 709 | 710 | /minimatch@3.1.2: 711 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 712 | dependencies: 713 | brace-expansion: 1.1.11 714 | 715 | /mrmime@1.0.1: 716 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 717 | engines: {node: '>=10'} 718 | dev: false 719 | 720 | /mz@2.7.0: 721 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 722 | dependencies: 723 | any-promise: 1.3.0 724 | object-assign: 4.1.1 725 | thenify-all: 1.6.0 726 | 727 | /nanoid@3.3.7: 728 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 729 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 730 | hasBin: true 731 | 732 | /next@14.0.4(react-dom@18.2.0)(react@18.2.0): 733 | resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} 734 | engines: {node: '>=18.17.0'} 735 | hasBin: true 736 | peerDependencies: 737 | '@opentelemetry/api': ^1.1.0 738 | react: ^18.2.0 739 | react-dom: ^18.2.0 740 | sass: ^1.3.0 741 | peerDependenciesMeta: 742 | '@opentelemetry/api': 743 | optional: true 744 | sass: 745 | optional: true 746 | dependencies: 747 | '@next/env': 14.0.4 748 | '@swc/helpers': 0.5.2 749 | busboy: 1.6.0 750 | caniuse-lite: 1.0.30001570 751 | graceful-fs: 4.2.11 752 | postcss: 8.4.31 753 | react: 18.2.0 754 | react-dom: 18.2.0(react@18.2.0) 755 | styled-jsx: 5.1.1(react@18.2.0) 756 | watchpack: 2.4.0 757 | optionalDependencies: 758 | '@next/swc-darwin-arm64': 14.0.4 759 | '@next/swc-darwin-x64': 14.0.4 760 | '@next/swc-linux-arm64-gnu': 14.0.4 761 | '@next/swc-linux-arm64-musl': 14.0.4 762 | '@next/swc-linux-x64-gnu': 14.0.4 763 | '@next/swc-linux-x64-musl': 14.0.4 764 | '@next/swc-win32-arm64-msvc': 14.0.4 765 | '@next/swc-win32-ia32-msvc': 14.0.4 766 | '@next/swc-win32-x64-msvc': 14.0.4 767 | transitivePeerDependencies: 768 | - '@babel/core' 769 | - babel-plugin-macros 770 | dev: false 771 | 772 | /node-releases@2.0.14: 773 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 774 | dev: true 775 | 776 | /normalize-path@3.0.0: 777 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 778 | engines: {node: '>=0.10.0'} 779 | 780 | /normalize-range@0.1.2: 781 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 782 | engines: {node: '>=0.10.0'} 783 | dev: true 784 | 785 | /object-assign@4.1.1: 786 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 787 | engines: {node: '>=0.10.0'} 788 | 789 | /object-hash@3.0.0: 790 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 791 | engines: {node: '>= 6'} 792 | 793 | /once@1.4.0: 794 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 795 | dependencies: 796 | wrappy: 1.0.2 797 | 798 | /opener@1.5.2: 799 | resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} 800 | hasBin: true 801 | dev: false 802 | 803 | /path-is-absolute@1.0.1: 804 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 805 | engines: {node: '>=0.10.0'} 806 | 807 | /path-parse@1.0.7: 808 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 809 | 810 | /picocolors@1.0.0: 811 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 812 | 813 | /picomatch@2.3.1: 814 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 815 | engines: {node: '>=8.6'} 816 | 817 | /pify@2.3.0: 818 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 819 | engines: {node: '>=0.10.0'} 820 | 821 | /pirates@4.0.6: 822 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 823 | engines: {node: '>= 6'} 824 | 825 | /postcss-import@15.1.0(postcss@8.4.32): 826 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 827 | engines: {node: '>=14.0.0'} 828 | peerDependencies: 829 | postcss: ^8.0.0 830 | dependencies: 831 | postcss: 8.4.32 832 | postcss-value-parser: 4.2.0 833 | read-cache: 1.0.0 834 | resolve: 1.22.8 835 | 836 | /postcss-js@4.0.1(postcss@8.4.32): 837 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 838 | engines: {node: ^12 || ^14 || >= 16} 839 | peerDependencies: 840 | postcss: ^8.4.21 841 | dependencies: 842 | camelcase-css: 2.0.1 843 | postcss: 8.4.32 844 | 845 | /postcss-load-config@4.0.2(postcss@8.4.32): 846 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 847 | engines: {node: '>= 14'} 848 | peerDependencies: 849 | postcss: '>=8.0.9' 850 | ts-node: '>=9.0.0' 851 | peerDependenciesMeta: 852 | postcss: 853 | optional: true 854 | ts-node: 855 | optional: true 856 | dependencies: 857 | lilconfig: 3.0.0 858 | postcss: 8.4.32 859 | yaml: 2.3.4 860 | 861 | /postcss-nested@6.0.1(postcss@8.4.32): 862 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 863 | engines: {node: '>=12.0'} 864 | peerDependencies: 865 | postcss: ^8.2.14 866 | dependencies: 867 | postcss: 8.4.32 868 | postcss-selector-parser: 6.0.13 869 | 870 | /postcss-selector-parser@6.0.13: 871 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 872 | engines: {node: '>=4'} 873 | dependencies: 874 | cssesc: 3.0.0 875 | util-deprecate: 1.0.2 876 | 877 | /postcss-value-parser@4.2.0: 878 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 879 | 880 | /postcss@8.4.31: 881 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 882 | engines: {node: ^10 || ^12 || >=14} 883 | dependencies: 884 | nanoid: 3.3.7 885 | picocolors: 1.0.0 886 | source-map-js: 1.0.2 887 | dev: false 888 | 889 | /postcss@8.4.32: 890 | resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} 891 | engines: {node: ^10 || ^12 || >=14} 892 | dependencies: 893 | nanoid: 3.3.7 894 | picocolors: 1.0.0 895 | source-map-js: 1.0.2 896 | 897 | /queue-microtask@1.2.3: 898 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 899 | 900 | /react-dom@18.2.0(react@18.2.0): 901 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 902 | peerDependencies: 903 | react: ^18.2.0 904 | dependencies: 905 | loose-envify: 1.4.0 906 | react: 18.2.0 907 | scheduler: 0.23.0 908 | dev: false 909 | 910 | /react-hook-form@7.49.2(react@18.2.0): 911 | resolution: {integrity: sha512-TZcnSc17+LPPVpMRIDNVITY6w20deMdNi6iehTFLV1x8SqThXGwu93HjlUVU09pzFgZH7qZOvLMM7UYf2ShAHA==} 912 | engines: {node: '>=18', pnpm: '8'} 913 | peerDependencies: 914 | react: ^16.8.0 || ^17 || ^18 915 | dependencies: 916 | react: 18.2.0 917 | dev: false 918 | 919 | /react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.2.0)(react@18.2.0): 920 | resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} 921 | engines: {node: '>=10'} 922 | peerDependencies: 923 | react: '>=16' 924 | react-dom: '>=16' 925 | dependencies: 926 | goober: 2.1.13(csstype@3.1.3) 927 | react: 18.2.0 928 | react-dom: 18.2.0(react@18.2.0) 929 | transitivePeerDependencies: 930 | - csstype 931 | dev: false 932 | 933 | /react-use-measure@2.1.1(react-dom@18.2.0)(react@18.2.0): 934 | resolution: {integrity: sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==} 935 | peerDependencies: 936 | react: '>=16.13' 937 | react-dom: '>=16.13' 938 | dependencies: 939 | debounce: 1.2.1 940 | react: 18.2.0 941 | react-dom: 18.2.0(react@18.2.0) 942 | dev: false 943 | 944 | /react@18.2.0: 945 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 946 | engines: {node: '>=0.10.0'} 947 | dependencies: 948 | loose-envify: 1.4.0 949 | dev: false 950 | 951 | /read-cache@1.0.0: 952 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 953 | dependencies: 954 | pify: 2.3.0 955 | 956 | /readdirp@3.6.0: 957 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 958 | engines: {node: '>=8.10.0'} 959 | dependencies: 960 | picomatch: 2.3.1 961 | 962 | /resolve@1.22.8: 963 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 964 | hasBin: true 965 | dependencies: 966 | is-core-module: 2.13.1 967 | path-parse: 1.0.7 968 | supports-preserve-symlinks-flag: 1.0.0 969 | 970 | /reusify@1.0.4: 971 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 972 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 973 | 974 | /run-parallel@1.2.0: 975 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 976 | dependencies: 977 | queue-microtask: 1.2.3 978 | 979 | /scheduler@0.23.0: 980 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 981 | dependencies: 982 | loose-envify: 1.4.0 983 | dev: false 984 | 985 | /sirv@1.0.19: 986 | resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} 987 | engines: {node: '>= 10'} 988 | dependencies: 989 | '@polka/url': 1.0.0-next.24 990 | mrmime: 1.0.1 991 | totalist: 1.1.0 992 | dev: false 993 | 994 | /source-map-js@1.0.2: 995 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 996 | engines: {node: '>=0.10.0'} 997 | 998 | /streamsearch@1.1.0: 999 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 1000 | engines: {node: '>=10.0.0'} 1001 | dev: false 1002 | 1003 | /styled-jsx@5.1.1(react@18.2.0): 1004 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} 1005 | engines: {node: '>= 12.0.0'} 1006 | peerDependencies: 1007 | '@babel/core': '*' 1008 | babel-plugin-macros: '*' 1009 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 1010 | peerDependenciesMeta: 1011 | '@babel/core': 1012 | optional: true 1013 | babel-plugin-macros: 1014 | optional: true 1015 | dependencies: 1016 | client-only: 0.0.1 1017 | react: 18.2.0 1018 | dev: false 1019 | 1020 | /sucrase@3.34.0: 1021 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 1022 | engines: {node: '>=8'} 1023 | hasBin: true 1024 | dependencies: 1025 | '@jridgewell/gen-mapping': 0.3.3 1026 | commander: 4.1.1 1027 | glob: 7.1.6 1028 | lines-and-columns: 1.2.4 1029 | mz: 2.7.0 1030 | pirates: 4.0.6 1031 | ts-interface-checker: 0.1.13 1032 | 1033 | /supports-color@7.2.0: 1034 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1035 | engines: {node: '>=8'} 1036 | dependencies: 1037 | has-flag: 4.0.0 1038 | dev: false 1039 | 1040 | /supports-preserve-symlinks-flag@1.0.0: 1041 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1042 | engines: {node: '>= 0.4'} 1043 | 1044 | /tailwindcss@3.4.0: 1045 | resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==} 1046 | engines: {node: '>=14.0.0'} 1047 | hasBin: true 1048 | dependencies: 1049 | '@alloc/quick-lru': 5.2.0 1050 | arg: 5.0.2 1051 | chokidar: 3.5.3 1052 | didyoumean: 1.2.2 1053 | dlv: 1.1.3 1054 | fast-glob: 3.3.2 1055 | glob-parent: 6.0.2 1056 | is-glob: 4.0.3 1057 | jiti: 1.21.0 1058 | lilconfig: 2.1.0 1059 | micromatch: 4.0.5 1060 | normalize-path: 3.0.0 1061 | object-hash: 3.0.0 1062 | picocolors: 1.0.0 1063 | postcss: 8.4.32 1064 | postcss-import: 15.1.0(postcss@8.4.32) 1065 | postcss-js: 4.0.1(postcss@8.4.32) 1066 | postcss-load-config: 4.0.2(postcss@8.4.32) 1067 | postcss-nested: 6.0.1(postcss@8.4.32) 1068 | postcss-selector-parser: 6.0.13 1069 | resolve: 1.22.8 1070 | sucrase: 3.34.0 1071 | transitivePeerDependencies: 1072 | - ts-node 1073 | 1074 | /thenify-all@1.6.0: 1075 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1076 | engines: {node: '>=0.8'} 1077 | dependencies: 1078 | thenify: 3.3.1 1079 | 1080 | /thenify@3.3.1: 1081 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1082 | dependencies: 1083 | any-promise: 1.3.0 1084 | 1085 | /to-regex-range@5.0.1: 1086 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1087 | engines: {node: '>=8.0'} 1088 | dependencies: 1089 | is-number: 7.0.0 1090 | 1091 | /totalist@1.1.0: 1092 | resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} 1093 | engines: {node: '>=6'} 1094 | dev: false 1095 | 1096 | /ts-interface-checker@0.1.13: 1097 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1098 | 1099 | /tslib@2.6.2: 1100 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1101 | dev: false 1102 | 1103 | /typescript@4.9.4: 1104 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} 1105 | engines: {node: '>=4.2.0'} 1106 | hasBin: true 1107 | dev: true 1108 | 1109 | /update-browserslist-db@1.0.13(browserslist@4.22.2): 1110 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 1111 | hasBin: true 1112 | peerDependencies: 1113 | browserslist: '>= 4.21.0' 1114 | dependencies: 1115 | browserslist: 4.22.2 1116 | escalade: 3.1.1 1117 | picocolors: 1.0.0 1118 | dev: true 1119 | 1120 | /util-deprecate@1.0.2: 1121 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1122 | 1123 | /watchpack@2.4.0: 1124 | resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} 1125 | engines: {node: '>=10.13.0'} 1126 | dependencies: 1127 | glob-to-regexp: 0.4.1 1128 | graceful-fs: 4.2.11 1129 | dev: false 1130 | 1131 | /webpack-bundle-analyzer@4.7.0: 1132 | resolution: {integrity: sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==} 1133 | engines: {node: '>= 10.13.0'} 1134 | hasBin: true 1135 | dependencies: 1136 | acorn: 8.11.2 1137 | acorn-walk: 8.3.1 1138 | chalk: 4.1.2 1139 | commander: 7.2.0 1140 | gzip-size: 6.0.0 1141 | lodash: 4.17.21 1142 | opener: 1.5.2 1143 | sirv: 1.0.19 1144 | ws: 7.5.9 1145 | transitivePeerDependencies: 1146 | - bufferutil 1147 | - utf-8-validate 1148 | dev: false 1149 | 1150 | /wrappy@1.0.2: 1151 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1152 | 1153 | /ws@7.5.9: 1154 | resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} 1155 | engines: {node: '>=8.3.0'} 1156 | peerDependencies: 1157 | bufferutil: ^4.0.1 1158 | utf-8-validate: ^5.0.2 1159 | peerDependenciesMeta: 1160 | bufferutil: 1161 | optional: true 1162 | utf-8-validate: 1163 | optional: true 1164 | dev: false 1165 | 1166 | /yaml@2.3.4: 1167 | resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} 1168 | engines: {node: '>= 14'} 1169 | --------------------------------------------------------------------------------