Use tailwindcss
Seto Elkahfi committed
Apr 21, 2024 at 14:49 UTC
24e9483e15bcbdbd52a94a46a7f38cc355c17614
73 files changed
+3888
-621
.gitignore
+1
@@ -203,6 +203,7 @@ target/
203
!.vscode/launch.json
204
!.vscode/extensions.json
205
!.vscode/*.code-snippets
206
+*.code-workspace
207
208
# Local History for Visual Studio Code
209
.history/
.nvmrc
new
+1
@@ -0,0 +1 @@
1
+18.17.0
BUILD
+4
-4
@@ -4,11 +4,11 @@ load("@npm//@tauri-apps/cli:index.bzl", "tauri")
4
next(
5
name = "next-build",
6
data = glob([
7
- "pages/**",
7
+ "app/**",
8
"public/**",
9
- "styles/**",
9
]) + [
10
"tsconfig.json",
11
+ "tailwind.config.js",
12
],
13
templated_args = ["build"],
14
)
@@ -16,11 +16,11 @@ next(
16
next(
17
name = "next-dev",
18
data = glob([
19
- "pages/**",
19
+ "app/**",
20
"public/**",
21
- "styles/**",
21
]) + [
22
"tsconfig.json",
23
+ "tailwind.config.js",
24
],
25
templated_args = ["dev"],
26
)
README.md
+6
-1
@@ -1,6 +1,11 @@
1
# tauri-on-bazel
2
3
-A small repository to demonstrate how to build a [Tauri](https://tauri.app/) v1.5 project that is using [NextJS](https://nextjs.org/) v14 + Typescript as a frontend framework with [Bazel](https://bazel.build/) v6.
3
+> {fast, correct} + {optimized, secure} = {tauri-on-bazel}
4
+
5
+A small repository to demonstrate how to build a [Tauri](https://tauri.app/) v1.5 project that is using [NextJS](https://nextjs.org/) v14 + Typescript + Tailwindcss as a frontend framework with [Bazel](https://bazel.build/) v6.
6
+
7
+
8
+
9
10
## Before running it
11
app/_lib/hooks/use-enter-submit.tsx
new
+23
@@ -0,0 +1,23 @@
1
+import { useRef, type RefObject } from 'react'
2
+
3
+export function useEnterSubmit(): {
4
+ formRef: RefObject<HTMLFormElement>
5
+ onKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement>) => void
6
+} {
7
+ const formRef = useRef<HTMLFormElement>(null)
8
+
9
+ const handleKeyDown = (
10
+ event: React.KeyboardEvent<HTMLTextAreaElement>
11
+ ): void => {
12
+ if (
13
+ event.key === 'Enter' &&
14
+ !event.shiftKey &&
15
+ !event.nativeEvent.isComposing
16
+ ) {
17
+ formRef.current?.requestSubmit()
18
+ event.preventDefault()
19
+ }
20
+ }
21
+
22
+ return { formRef, onKeyDown: handleKeyDown }
23
+}
app/_lib/hooks/use-local-storage.ts
new
+24
@@ -0,0 +1,24 @@
1
+import { useEffect, useState } from 'react'
2
+
3
+export const useLocalStorage = <T>(
4
+ key: string,
5
+ initialValue: T
6
+): [T, (value: T) => void] => {
7
+ const [storedValue, setStoredValue] = useState(initialValue)
8
+
9
+ useEffect(() => {
10
+ // Retrieve from localStorage
11
+ const item = window.localStorage.getItem(key)
12
+ if (item) {
13
+ setStoredValue(JSON.parse(item))
14
+ }
15
+ }, [key])
16
+
17
+ const setValue = (value: T) => {
18
+ // Save state
19
+ setStoredValue(value)
20
+ // Save to localStorage
21
+ window.localStorage.setItem(key, JSON.stringify(value))
22
+ }
23
+ return [storedValue, setValue]
24
+}
app/_lib/menus.ts
new
+20
@@ -0,0 +1,20 @@
1
+export type Item = {
2
+ name: string;
3
+ slug: string;
4
+ description?: string;
5
+};
6
+
7
+export const menus: { items: Item[] }[] = [
8
+ {
9
+ items: [
10
+ {
11
+ name: 'Play',
12
+ slug: 'play',
13
+ },
14
+ {
15
+ name: 'Chat 🤖',
16
+ slug: 'chat',
17
+ },
18
+ ],
19
+ },
20
+];
app/_lib/utils.ts
new
+43
@@ -0,0 +1,43 @@
1
+import { clsx, type ClassValue } from 'clsx'
2
+import { customAlphabet } from 'nanoid'
3
+import { twMerge } from 'tailwind-merge'
4
+
5
+export function cn(...inputs: ClassValue[]) {
6
+ return twMerge(clsx(inputs))
7
+}
8
+
9
+export const nanoid = customAlphabet(
10
+ '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
11
+ 7
12
+) // 7-character random string
13
+
14
+export async function fetcher<JSON = any>(
15
+ input: RequestInfo,
16
+ init?: RequestInit
17
+): Promise<JSON> {
18
+ const res = await fetch(input, init)
19
+
20
+ if (!res.ok) {
21
+ const json = await res.json()
22
+ if (json.error) {
23
+ const error = new Error(json.error) as Error & {
24
+ status: number
25
+ }
26
+ error.status = res.status
27
+ throw error
28
+ } else {
29
+ throw new Error('An unexpected error occurred')
30
+ }
31
+ }
32
+
33
+ return res.json()
34
+}
35
+
36
+export function formatDate(input: string | number | Date): string {
37
+ const date = new Date(input)
38
+ return date.toLocaleDateString('en-US', {
39
+ month: 'long',
40
+ day: 'numeric',
41
+ year: 'numeric'
42
+ })
43
+}
app/_ui/address-bar.tsx
new
+79
@@ -0,0 +1,79 @@
1
+'use client';
2
+
3
+import React, { Suspense } from 'react';
4
+import { usePathname, useSearchParams } from 'next/navigation';
5
+import { HomeIcon } from '@heroicons/react/solid';
6
+
7
+function Params() {
8
+ const searchParams = useSearchParams()!;
9
+
10
+ return searchParams.toString().length !== 0 ? (
11
+ <div className="px-2 text-gray-500">
12
+ <span>?</span>
13
+ {Array.from(searchParams.entries()).map(([key, value], index) => {
14
+ return (
15
+ <React.Fragment key={key}>
16
+ {index !== 0 ? <span>&</span> : null}
17
+ <span className="px-1">
18
+ <span
19
+ key={key}
20
+ className="animate-[highlight_1s_ease-in-out_1] text-gray-100"
21
+ >
22
+ {key}
23
+ </span>
24
+ <span>=</span>
25
+ <span
26
+ key={value}
27
+ className="animate-[highlight_1s_ease-in-out_1] text-gray-100"
28
+ >
29
+ {value}
30
+ </span>
31
+ </span>
32
+ </React.Fragment>
33
+ );
34
+ })}
35
+ </div>
36
+ ) : null;
37
+}
38
+
39
+export function AddressBar() {
40
+ const pathname = usePathname();
41
+ console.log('pathname', pathname);
42
+ return (
43
+ <div className="flex items-center gap-x-2 p-3.5 lg:px-5 lg:py-3">
44
+ <div className="text-gray-600">
45
+ <HomeIcon width={16} />
46
+ </div>
47
+ <div className="flex gap-x-1 text-sm font-medium">
48
+ {pathname ? (
49
+ <>
50
+ <span className="text-gray-600">/</span>
51
+ {pathname
52
+ .split('/')
53
+ .slice(1)
54
+ .map((segment) => {
55
+ return (
56
+ <React.Fragment key={segment}>
57
+ <span>
58
+ <span
59
+ key={segment}
60
+ className="animate-[highlight_1s_ease-in-out_1] rounded-full px-1.5 py-0.5 text-gray-100"
61
+ >
62
+ {segment}
63
+ </span>
64
+ </span>
65
+
66
+ <span className="text-gray-600">/</span>
67
+ </React.Fragment>
68
+ );
69
+ })}
70
+ </>
71
+ ) : null}
72
+
73
+ <Suspense>
74
+ <Params />
75
+ </Suspense>
76
+ </div>
77
+ </div>
78
+ );
79
+}
app/_ui/boundary.tsx
new
+82
@@ -0,0 +1,82 @@
1
+import clsx from 'clsx';
2
+import React from 'react';
3
+
4
+const Label = ({
5
+ children,
6
+ animateRerendering,
7
+ color,
8
+}: {
9
+ children: React.ReactNode;
10
+ animateRerendering?: boolean;
11
+ color?: 'default' | 'pink' | 'blue' | 'violet' | 'cyan' | 'orange';
12
+}) => {
13
+ return (
14
+ <div
15
+ className={clsx('rounded-full px-1.5 shadow-[0_0_1px_3px_black]', {
16
+ 'bg-gray-800 text-gray-300': color === 'default',
17
+ 'bg-vercel-pink text-white': color === 'pink',
18
+ 'bg-vercel-blue text-white': color === 'blue',
19
+ 'bg-vercel-cyan text-white': color === 'cyan',
20
+ 'bg-vercel-violet text-violet-100': color === 'violet',
21
+ 'bg-vercel-orange text-white': color === 'orange',
22
+ 'animate-[highlight_1s_ease-in-out_1]': animateRerendering,
23
+ })}
24
+ >
25
+ {children}
26
+ </div>
27
+ );
28
+};
29
+export const Boundary = ({
30
+ children,
31
+ labels = ['children'],
32
+ size = 'default',
33
+ color = 'default',
34
+ animateRerendering = true,
35
+}: {
36
+ children: React.ReactNode;
37
+ labels?: string[];
38
+ size?: 'small' | 'default';
39
+ color?: 'default' | 'pink' | 'blue' | 'violet' | 'cyan' | 'orange';
40
+ animateRerendering?: boolean;
41
+}) => {
42
+ return (
43
+ <div
44
+ className={clsx('relative rounded-lg border border-dashed', {
45
+ 'p-3 lg:p-5': size === 'small',
46
+ 'p-4 lg:p-9': size === 'default',
47
+ 'border-gray-700': color === 'default',
48
+ 'border-vercel-pink': color === 'pink',
49
+ 'border-vercel-blue': color === 'blue',
50
+ 'border-vercel-cyan': color === 'cyan',
51
+ 'border-vercel-violet': color === 'violet',
52
+ 'border-vercel-orange': color === 'orange',
53
+ 'text-vercel-pink animate-[rerender_1s_ease-in-out_1]':
54
+ animateRerendering,
55
+ })}
56
+ >
57
+ <div
58
+ className={clsx(
59
+ 'absolute -top-2.5 flex gap-x-1 text-[9px] uppercase leading-4 tracking-widest',
60
+ {
61
+ 'left-3 lg:left-5': size === 'small',
62
+ 'left-4 lg:left-9': size === 'default',
63
+ },
64
+ )}
65
+ >
66
+ {labels.map((label) => {
67
+ return (
68
+ <Label
69
+ key={label}
70
+ color={color}
71
+ animateRerendering={animateRerendering}
72
+ >
73
+ {label}
74
+ </Label>
75
+ );
76
+ })}
77
+ </div>
78
+
79
+ {children}
80
+ </div>
81
+ );
82
+};
app/_ui/click-counter.tsx
new
+16
@@ -0,0 +1,16 @@
1
+'use client';
2
+
3
+import React from 'react';
4
+
5
+export function ClickCounter() {
6
+ const [count, setCount] = React.useState(0);
7
+
8
+ return (
9
+ <button
10
+ onClick={() => setCount(count + 1)}
11
+ className="whitespace-nowrap rounded-lg bg-gray-700 px-3 py-1 text-sm font-medium tabular-nums text-gray-100 hover:bg-gray-500 hover:text-white"
12
+ >
13
+ {count} Clicks
14
+ </button>
15
+ );
16
+}
app/_ui/components/button.tsx
new
+57
@@ -0,0 +1,57 @@
1
+import * as React from 'react'
2
+import { Slot } from '@radix-ui/react-slot'
3
+import { cva, type VariantProps } from 'class-variance-authority'
4
+import { cn } from '@/app/_lib/utils'
5
+
6
+
7
+const buttonVariants = cva(
8
+ 'inline-flex items-center justify-center rounded-md text-sm font-medium shadow ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default:
13
+ 'bg-primary text-primary-foreground shadow-md hover:bg-primary/90',
14
+ destructive:
15
+ 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
16
+ outline:
17
+ 'border border-input hover:bg-accent hover:text-accent-foreground',
18
+ secondary:
19
+ 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
20
+ ghost: 'shadow-none hover:bg-accent hover:text-accent-foreground',
21
+ link: 'text-primary underline-offset-4 shadow-none hover:underline'
22
+ },
23
+ size: {
24
+ default: 'h-8 px-4 py-2',
25
+ sm: 'h-8 rounded-md px-3',
26
+ lg: 'h-11 rounded-md px-8',
27
+ icon: 'size-8 p-0'
28
+ }
29
+ },
30
+ defaultVariants: {
31
+ variant: 'default',
32
+ size: 'default'
33
+ }
34
+ }
35
+)
36
+
37
+export interface ButtonProps
38
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
39
+ VariantProps<typeof buttonVariants> {
40
+ asChild?: boolean
41
+}
42
+
43
+const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
44
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
45
+ const Comp = asChild ? Slot : 'button'
46
+ return (
47
+ <Comp
48
+ className={cn(buttonVariants({ variant, size, className }))}
49
+ ref={ref}
50
+ {...props}
51
+ />
52
+ )
53
+ }
54
+)
55
+Button.displayName = 'Button'
56
+
57
+export { Button, buttonVariants }
app/_ui/components/chat-panel.tsx
new
+57
@@ -0,0 +1,57 @@
1
+'use client'
2
+
3
+import * as React from 'react'
4
+import { type UseChatHelpers } from 'ai/react'
5
+
6
+import { PromptForm } from './prompt-form'
7
+
8
+export interface ChatPanelProps
9
+ extends Pick<
10
+ UseChatHelpers,
11
+ | 'append'
12
+ | 'isLoading'
13
+ | 'reload'
14
+ | 'messages'
15
+ | 'stop'
16
+ | 'input'
17
+ | 'setInput'
18
+ > {
19
+ id?: string
20
+ title?: string
21
+}
22
+
23
+export function ChatPanel({
24
+ id,
25
+ title,
26
+ isLoading,
27
+ stop,
28
+ append,
29
+ reload,
30
+ input,
31
+ setInput,
32
+ messages
33
+}: ChatPanelProps) {
34
+ const [shareDialogOpen, setShareDialogOpen] = React.useState(false)
35
+
36
+ return (
37
+ <div className="fixed inset-x-0 bottom-0 w-full bg-gradient-to-b from-muted/30 from-0% to-muted/30 to-50% animate-in duration-300 ease-in-out dark:from-background/10 dark:from-10% dark:to-background/80 peer-[[data-state=open]]:group-[]:lg:pl-[250px] peer-[[data-state=open]]:group-[]:xl:pl-[300px]">
38
+ <div className="mx-auto sm:max-w-2xl sm:px-4">
39
+ <div className="flex items-center justify-center h-12"></div>
40
+ <div className="px-4 py-2 space-y-4 border-t shadow-lg bg-background sm:rounded-t-xl sm:border md:py-4">
41
+ <PromptForm
42
+ onSubmit={async value => {
43
+ await append({
44
+ id,
45
+ content: value,
46
+ role: 'user'
47
+ })
48
+ }}
49
+ input={input}
50
+ setInput={setInput}
51
+ isLoading={isLoading}
52
+ />
53
+ </div>
54
+ </div>
55
+ </div>
56
+ )
57
+}
app/_ui/components/empty-screen.tsx
new
+56
@@ -0,0 +1,56 @@
1
+import { UseChatHelpers } from 'ai/react'
2
+
3
+import { Button } from './button'
4
+import { ExternalLink } from './external-link'
5
+import { IconArrowRight } from './icons'
6
+
7
+const exampleMessages = [
8
+ {
9
+ heading: 'Explain technical concepts',
10
+ message: `What is a "serverless function"?`
11
+ },
12
+ {
13
+ heading: 'Summarize an article',
14
+ message: 'Summarize the following article for a 2nd grader: \n'
15
+ },
16
+ {
17
+ heading: 'Draft an email',
18
+ message: `Draft an email to my boss about the following: \n`
19
+ }
20
+]
21
+
22
+export function EmptyScreen({ setInput }: Pick<UseChatHelpers, 'setInput'>) {
23
+ return (
24
+ <div className="mx-auto max-w-2xl px-4">
25
+ <div className="rounded-lg border bg-background p-8">
26
+ <h1 className="mb-2 text-lg font-semibold">
27
+ Welcome to Next.js AI Chatbot!
28
+ </h1>
29
+ <p className="mb-2 leading-normal text-muted-foreground">
30
+ This is an open source AI chatbot app template built with{' '}
31
+ <ExternalLink href="https://nextjs.org">Next.js</ExternalLink> and{' '}
32
+ <ExternalLink href="https://vercel.com/storage/kv">
33
+ Vercel KV
34
+ </ExternalLink>
35
+ .
36
+ </p>
37
+ <p className="leading-normal text-muted-foreground">
38
+ You can start a conversation here or try the following examples:
39
+ </p>
40
+ <div className="mt-4 flex flex-col items-start space-y-2">
41
+ {exampleMessages.map((message, index) => (
42
+ <Button
43
+ key={index}
44
+ variant="link"
45
+ className="h-auto p-0 text-base"
46
+ onClick={() => setInput(message.message)}
47
+ >
48
+ <IconArrowRight className="mr-2 text-muted-foreground" />
49
+ {message.heading}
50
+ </Button>
51
+ ))}
52
+ </div>
53
+ </div>
54
+ </div>
55
+ )
56
+}
app/_ui/components/external-link.tsx
new
+29
@@ -0,0 +1,29 @@
1
+export function ExternalLink({
2
+ href,
3
+ children
4
+}: {
5
+ href: string
6
+ children: React.ReactNode
7
+}) {
8
+ return (
9
+ <a
10
+ href={href}
11
+ target="_blank"
12
+ className="inline-flex flex-1 justify-center gap-1 leading-4 hover:underline"
13
+ >
14
+ <span>{children}</span>
15
+ <svg
16
+ aria-hidden="true"
17
+ height="7"
18
+ viewBox="0 0 6 6"
19
+ width="7"
20
+ className="opacity-70"
21
+ >
22
+ <path
23
+ d="M1.25215 5.54731L0.622742 4.9179L3.78169 1.75597H1.3834L1.38936 0.890915H5.27615V4.78069H4.40513L4.41109 2.38538L1.25215 5.54731Z"
24
+ fill="currentColor"
25
+ ></path>
26
+ </svg>
27
+ </a>
28
+ )
29
+}
app/_ui/components/icons.tsx
new
+506
@@ -0,0 +1,506 @@
1
+'use client'
2
+
3
+import { cn } from '@/app/_lib/utils'
4
+import * as React from 'react'
5
+
6
+function IconNextChat({
7
+ className,
8
+ inverted,
9
+ ...props
10
+}: React.ComponentProps<'svg'> & { inverted?: boolean }) {
11
+ const id = React.useId()
12
+
13
+ return (
14
+ <svg
15
+ viewBox="0 0 17 17"
16
+ fill="none"
17
+ xmlns="http://www.w3.org/2000/svg"
18
+ className={cn('size-4', className)}
19
+ {...props}
20
+ >
21
+ <defs>
22
+ <linearGradient
23
+ id={`gradient-${id}-1`}
24
+ x1="10.6889"
25
+ y1="10.3556"
26
+ x2="13.8445"
27
+ y2="14.2667"
28
+ gradientUnits="userSpaceOnUse"
29
+ >
30
+ <stop stopColor={inverted ? 'white' : 'black'} />
31
+ <stop
32
+ offset={1}
33
+ stopColor={inverted ? 'white' : 'black'}
34
+ stopOpacity={0}
35
+ />
36
+ </linearGradient>
37
+ <linearGradient
38
+ id={`gradient-${id}-2`}
39
+ x1="11.7555"
40
+ y1="4.8"
41
+ x2="11.7376"
42
+ y2="9.50002"
43
+ gradientUnits="userSpaceOnUse"
44
+ >
45
+ <stop stopColor={inverted ? 'white' : 'black'} />
46
+ <stop
47
+ offset={1}
48
+ stopColor={inverted ? 'white' : 'black'}
49
+ stopOpacity={0}
50
+ />
51
+ </linearGradient>
52
+ </defs>
53
+ <path
54
+ d="M1 16L2.58314 11.2506C1.83084 9.74642 1.63835 8.02363 2.04013 6.39052C2.4419 4.75741 3.41171 3.32057 4.776 2.33712C6.1403 1.35367 7.81003 0.887808 9.4864 1.02289C11.1628 1.15798 12.7364 1.8852 13.9256 3.07442C15.1148 4.26363 15.842 5.83723 15.9771 7.5136C16.1122 9.18997 15.6463 10.8597 14.6629 12.224C13.6794 13.5883 12.2426 14.5581 10.6095 14.9599C8.97637 15.3616 7.25358 15.1692 5.74942 14.4169L1 16Z"
55
+ fill={inverted ? 'black' : 'white'}
56
+ stroke={inverted ? 'black' : 'white'}
57
+ strokeWidth={2}
58
+ strokeLinecap="round"
59
+ strokeLinejoin="round"
60
+ />
61
+ <mask
62
+ id="mask0_91_2047"
63
+ style={{ maskType: 'alpha' }}
64
+ maskUnits="userSpaceOnUse"
65
+ x={1}
66
+ y={0}
67
+ width={16}
68
+ height={16}
69
+ >
70
+ <circle cx={9} cy={8} r={8} fill={inverted ? 'black' : 'white'} />
71
+ </mask>
72
+ <g mask="url(#mask0_91_2047)">
73
+ <circle cx={9} cy={8} r={8} fill={inverted ? 'black' : 'white'} />
74
+ <path
75
+ d="M14.2896 14.0018L7.146 4.8H5.80005V11.1973H6.87681V6.16743L13.4444 14.6529C13.7407 14.4545 14.0231 14.2369 14.2896 14.0018Z"
76
+ fill={`url(#gradient-${id}-1)`}
77
+ />
78
+ <rect
79
+ x="11.2222"
80
+ y="4.8"
81
+ width="1.06667"
82
+ height="6.4"
83
+ fill={`url(#gradient-${id}-2)`}
84
+ />
85
+ </g>
86
+ </svg>
87
+ )
88
+}
89
+
90
+function IconOpenAI({ className, ...props }: React.ComponentProps<'svg'>) {
91
+ return (
92
+ <svg
93
+ fill="currentColor"
94
+ viewBox="0 0 24 24"
95
+ role="img"
96
+ xmlns="http://www.w3.org/2000/svg"
97
+ className={cn('size-4', className)}
98
+ {...props}
99
+ >
100
+ <title>OpenAI icon</title>
101
+ <path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z" />
102
+ </svg>
103
+ )
104
+}
105
+
106
+function IconVercel({ className, ...props }: React.ComponentProps<'svg'>) {
107
+ return (
108
+ <svg
109
+ aria-label="Vercel logomark"
110
+ role="img"
111
+ viewBox="0 0 74 64"
112
+ className={cn('size-4', className)}
113
+ {...props}
114
+ >
115
+ <path
116
+ d="M37.5896 0.25L74.5396 64.25H0.639648L37.5896 0.25Z"
117
+ fill="currentColor"
118
+ ></path>
119
+ </svg>
120
+ )
121
+}
122
+
123
+function IconGitHub({ className, ...props }: React.ComponentProps<'svg'>) {
124
+ return (
125
+ <svg
126
+ role="img"
127
+ viewBox="0 0 24 24"
128
+ xmlns="http://www.w3.org/2000/svg"
129
+ fill="currentColor"
130
+ className={cn('size-4', className)}
131
+ {...props}
132
+ >
133
+ <title>GitHub</title>
134
+ <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" />
135
+ </svg>
136
+ )
137
+}
138
+
139
+function IconSeparator({ className, ...props }: React.ComponentProps<'svg'>) {
140
+ return (
141
+ <svg
142
+ fill="none"
143
+ shapeRendering="geometricPrecision"
144
+ stroke="currentColor"
145
+ strokeLinecap="round"
146
+ strokeLinejoin="round"
147
+ strokeWidth="1"
148
+ viewBox="0 0 24 24"
149
+ aria-hidden="true"
150
+ className={cn('size-4', className)}
151
+ {...props}
152
+ >
153
+ <path d="M16.88 3.549L7.12 20.451"></path>
154
+ </svg>
155
+ )
156
+}
157
+
158
+function IconArrowDown({ className, ...props }: React.ComponentProps<'svg'>) {
159
+ return (
160
+ <svg
161
+ xmlns="http://www.w3.org/2000/svg"
162
+ viewBox="0 0 256 256"
163
+ fill="currentColor"
164
+ className={cn('size-4', className)}
165
+ {...props}
166
+ >
167
+ <path d="m205.66 149.66-72 72a8 8 0 0 1-11.32 0l-72-72a8 8 0 0 1 11.32-11.32L120 196.69V40a8 8 0 0 1 16 0v156.69l58.34-58.35a8 8 0 0 1 11.32 11.32Z" />
168
+ </svg>
169
+ )
170
+}
171
+
172
+function IconArrowRight({ className, ...props }: React.ComponentProps<'svg'>) {
173
+ return (
174
+ <svg
175
+ xmlns="http://www.w3.org/2000/svg"
176
+ viewBox="0 0 256 256"
177
+ fill="currentColor"
178
+ className={cn('size-4', className)}
179
+ {...props}
180
+ >
181
+ <path d="m221.66 133.66-72 72a8 8 0 0 1-11.32-11.32L196.69 136H40a8 8 0 0 1 0-16h156.69l-58.35-58.34a8 8 0 0 1 11.32-11.32l72 72a8 8 0 0 1 0 11.32Z" />
182
+ </svg>
183
+ )
184
+}
185
+
186
+function IconUser({ className, ...props }: React.ComponentProps<'svg'>) {
187
+ return (
188
+ <svg
189
+ xmlns="http://www.w3.org/2000/svg"
190
+ viewBox="0 0 256 256"
191
+ fill="currentColor"
192
+ className={cn('size-4', className)}
193
+ {...props}
194
+ >
195
+ <path d="M230.92 212c-15.23-26.33-38.7-45.21-66.09-54.16a72 72 0 1 0-73.66 0c-27.39 8.94-50.86 27.82-66.09 54.16a8 8 0 1 0 13.85 8c18.84-32.56 52.14-52 89.07-52s70.23 19.44 89.07 52a8 8 0 1 0 13.85-8ZM72 96a56 56 0 1 1 56 56 56.06 56.06 0 0 1-56-56Z" />
196
+ </svg>
197
+ )
198
+}
199
+
200
+function IconPlus({ className, ...props }: React.ComponentProps<'svg'>) {
201
+ return (
202
+ <svg
203
+ xmlns="http://www.w3.org/2000/svg"
204
+ viewBox="0 0 256 256"
205
+ fill="currentColor"
206
+ className={cn('size-4', className)}
207
+ {...props}
208
+ >
209
+ <path d="M224 128a8 8 0 0 1-8 8h-80v80a8 8 0 0 1-16 0v-80H40a8 8 0 0 1 0-16h80V40a8 8 0 0 1 16 0v80h80a8 8 0 0 1 8 8Z" />
210
+ </svg>
211
+ )
212
+}
213
+
214
+function IconArrowElbow({ className, ...props }: React.ComponentProps<'svg'>) {
215
+ return (
216
+ <svg
217
+ xmlns="http://www.w3.org/2000/svg"
218
+ viewBox="0 0 256 256"
219
+ fill="currentColor"
220
+ className={cn('size-4', className)}
221
+ {...props}
222
+ >
223
+ <path d="M200 32v144a8 8 0 0 1-8 8H67.31l34.35 34.34a8 8 0 0 1-11.32 11.32l-48-48a8 8 0 0 1 0-11.32l48-48a8 8 0 0 1 11.32 11.32L67.31 168H184V32a8 8 0 0 1 16 0Z" />
224
+ </svg>
225
+ )
226
+}
227
+
228
+function IconSpinner({ className, ...props }: React.ComponentProps<'svg'>) {
229
+ return (
230
+ <svg
231
+ xmlns="http://www.w3.org/2000/svg"
232
+ viewBox="0 0 256 256"
233
+ fill="currentColor"
234
+ className={cn('size-4 animate-spin', className)}
235
+ {...props}
236
+ >
237
+ <path d="M232 128a104 104 0 0 1-208 0c0-41 23.81-78.36 60.66-95.27a8 8 0 0 1 6.68 14.54C60.15 61.59 40 93.27 40 128a88 88 0 0 0 176 0c0-34.73-20.15-66.41-51.34-80.73a8 8 0 0 1 6.68-14.54C208.19 49.64 232 87 232 128Z" />
238
+ </svg>
239
+ )
240
+}
241
+
242
+function IconMessage({ className, ...props }: React.ComponentProps<'svg'>) {
243
+ return (
244
+ <svg
245
+ xmlns="http://www.w3.org/2000/svg"
246
+ viewBox="0 0 256 256"
247
+ fill="currentColor"
248
+ className={cn('size-4', className)}
249
+ {...props}
250
+ >
251
+ <path d="M216 48H40a16 16 0 0 0-16 16v160a15.84 15.84 0 0 0 9.25 14.5A16.05 16.05 0 0 0 40 240a15.89 15.89 0 0 0 10.25-3.78.69.69 0 0 0 .13-.11L82.5 208H216a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16ZM40 224Zm176-32H82.5a16 16 0 0 0-10.3 3.75l-.12.11L40 224V64h176Z" />
252
+ </svg>
253
+ )
254
+}
255
+
256
+function IconTrash({ className, ...props }: React.ComponentProps<'svg'>) {
257
+ return (
258
+ <svg
259
+ xmlns="http://www.w3.org/2000/svg"
260
+ viewBox="0 0 256 256"
261
+ fill="currentColor"
262
+ className={cn('size-4', className)}
263
+ {...props}
264
+ >
265
+ <path d="M216 48h-40v-8a24 24 0 0 0-24-24h-48a24 24 0 0 0-24 24v8H40a8 8 0 0 0 0 16h8v144a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16V64h8a8 8 0 0 0 0-16ZM96 40a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v8H96Zm96 168H64V64h128Zm-80-104v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0Zm48 0v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0Z" />
266
+ </svg>
267
+ )
268
+}
269
+
270
+function IconRefresh({ className, ...props }: React.ComponentProps<'svg'>) {
271
+ return (
272
+ <svg
273
+ xmlns="http://www.w3.org/2000/svg"
274
+ viewBox="0 0 256 256"
275
+ fill="currentColor"
276
+ className={cn('size-4', className)}
277
+ {...props}
278
+ >
279
+ <path d="M197.67 186.37a8 8 0 0 1 0 11.29C196.58 198.73 170.82 224 128 224c-37.39 0-64.53-22.4-80-39.85V208a8 8 0 0 1-16 0v-48a8 8 0 0 1 8-8h48a8 8 0 0 1 0 16H55.44C67.76 183.35 93 208 128 208c36 0 58.14-21.46 58.36-21.68a8 8 0 0 1 11.31.05ZM216 40a8 8 0 0 0-8 8v23.85C192.53 54.4 165.39 32 128 32c-42.82 0-68.58 25.27-69.66 26.34a8 8 0 0 0 11.3 11.34C69.86 69.46 92 48 128 48c35 0 60.24 24.65 72.56 40H168a8 8 0 0 0 0 16h48a8 8 0 0 0 8-8V48a8 8 0 0 0-8-8Z" />
280
+ </svg>
281
+ )
282
+}
283
+
284
+function IconStop({ className, ...props }: React.ComponentProps<'svg'>) {
285
+ return (
286
+ <svg
287
+ xmlns="http://www.w3.org/2000/svg"
288
+ viewBox="0 0 256 256"
289
+ fill="currentColor"
290
+ className={cn('size-4', className)}
291
+ {...props}
292
+ >
293
+ <path d="M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24Zm0 192a88 88 0 1 1 88-88 88.1 88.1 0 0 1-88 88Zm24-120h-48a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8Zm-8 48h-32v-32h32Z" />
294
+ </svg>
295
+ )
296
+}
297
+
298
+function IconSidebar({ className, ...props }: React.ComponentProps<'svg'>) {
299
+ return (
300
+ <svg
301
+ xmlns="http://www.w3.org/2000/svg"
302
+ viewBox="0 0 256 256"
303
+ fill="currentColor"
304
+ className={cn('size-4', className)}
305
+ {...props}
306
+ >
307
+ <path d="M216 40H40a16 16 0 0 0-16 16v144a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V56a16 16 0 0 0-16-16ZM40 56h40v144H40Zm176 144H96V56h120v144Z" />
308
+ </svg>
309
+ )
310
+}
311
+
312
+function IconMoon({ className, ...props }: React.ComponentProps<'svg'>) {
313
+ return (
314
+ <svg
315
+ xmlns="http://www.w3.org/2000/svg"
316
+ viewBox="0 0 256 256"
317
+ fill="currentColor"
318
+ className={cn('size-4', className)}
319
+ {...props}
320
+ >
321
+ <path d="M233.54 142.23a8 8 0 0 0-8-2 88.08 88.08 0 0 1-109.8-109.8 8 8 0 0 0-10-10 104.84 104.84 0 0 0-52.91 37A104 104 0 0 0 136 224a103.09 103.09 0 0 0 62.52-20.88 104.84 104.84 0 0 0 37-52.91 8 8 0 0 0-1.98-7.98Zm-44.64 48.11A88 88 0 0 1 65.66 67.11a89 89 0 0 1 31.4-26A106 106 0 0 0 96 56a104.11 104.11 0 0 0 104 104 106 106 0 0 0 14.92-1.06 89 89 0 0 1-26.02 31.4Z" />
322
+ </svg>
323
+ )
324
+}
325
+
326
+function IconSun({ className, ...props }: React.ComponentProps<'svg'>) {
327
+ return (
328
+ <svg
329
+ xmlns="http://www.w3.org/2000/svg"
330
+ viewBox="0 0 256 256"
331
+ fill="currentColor"
332
+ className={cn('size-4', className)}
333
+ {...props}
334
+ >
335
+ <path d="M120 40V16a8 8 0 0 1 16 0v24a8 8 0 0 1-16 0Zm72 88a64 64 0 1 1-64-64 64.07 64.07 0 0 1 64 64Zm-16 0a48 48 0 1 0-48 48 48.05 48.05 0 0 0 48-48ZM58.34 69.66a8 8 0 0 0 11.32-11.32l-16-16a8 8 0 0 0-11.32 11.32Zm0 116.68-16 16a8 8 0 0 0 11.32 11.32l16-16a8 8 0 0 0-11.32-11.32ZM192 72a8 8 0 0 0 5.66-2.34l16-16a8 8 0 0 0-11.32-11.32l-16 16A8 8 0 0 0 192 72Zm5.66 114.34a8 8 0 0 0-11.32 11.32l16 16a8 8 0 0 0 11.32-11.32ZM48 128a8 8 0 0 0-8-8H16a8 8 0 0 0 0 16h24a8 8 0 0 0 8-8Zm80 80a8 8 0 0 0-8 8v24a8 8 0 0 0 16 0v-24a8 8 0 0 0-8-8Zm112-88h-24a8 8 0 0 0 0 16h24a8 8 0 0 0 0-16Z" />
336
+ </svg>
337
+ )
338
+}
339
+
340
+function IconCopy({ className, ...props }: React.ComponentProps<'svg'>) {
341
+ return (
342
+ <svg
343
+ xmlns="http://www.w3.org/2000/svg"
344
+ viewBox="0 0 256 256"
345
+ fill="currentColor"
346
+ className={cn('size-4', className)}
347
+ {...props}
348
+ >
349
+ <path d="M216 32H88a8 8 0 0 0-8 8v40H40a8 8 0 0 0-8 8v128a8 8 0 0 0 8 8h128a8 8 0 0 0 8-8v-40h40a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8Zm-56 176H48V96h112Zm48-48h-32V88a8 8 0 0 0-8-8H96V48h112Z" />
350
+ </svg>
351
+ )
352
+}
353
+
354
+function IconCheck({ className, ...props }: React.ComponentProps<'svg'>) {
355
+ return (
356
+ <svg
357
+ xmlns="http://www.w3.org/2000/svg"
358
+ viewBox="0 0 256 256"
359
+ fill="currentColor"
360
+ className={cn('size-4', className)}
361
+ {...props}
362
+ >
363
+ <path d="m229.66 77.66-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69 218.34 66.34a8 8 0 0 1 11.32 11.32Z" />
364
+ </svg>
365
+ )
366
+}
367
+
368
+function IconDownload({ className, ...props }: React.ComponentProps<'svg'>) {
369
+ return (
370
+ <svg
371
+ xmlns="http://www.w3.org/2000/svg"
372
+ viewBox="0 0 256 256"
373
+ fill="currentColor"
374
+ className={cn('size-4', className)}
375
+ {...props}
376
+ >
377
+ <path d="M224 152v56a16 16 0 0 1-16 16H48a16 16 0 0 1-16-16v-56a8 8 0 0 1 16 0v56h160v-56a8 8 0 0 1 16 0Zm-101.66 5.66a8 8 0 0 0 11.32 0l40-40a8 8 0 0 0-11.32-11.32L136 132.69V40a8 8 0 0 0-16 0v92.69l-26.34-26.35a8 8 0 0 0-11.32 11.32Z" />
378
+ </svg>
379
+ )
380
+}
381
+
382
+function IconClose({ className, ...props }: React.ComponentProps<'svg'>) {
383
+ return (
384
+ <svg
385
+ xmlns="http://www.w3.org/2000/svg"
386
+ viewBox="0 0 256 256"
387
+ fill="currentColor"
388
+ className={cn('size-4', className)}
389
+ {...props}
390
+ >
391
+ <path d="M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128 50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128Z" />
392
+ </svg>
393
+ )
394
+}
395
+
396
+function IconEdit({ className, ...props }: React.ComponentProps<'svg'>) {
397
+ return (
398
+ <svg
399
+ xmlns="http://www.w3.org/2000/svg"
400
+ fill="none"
401
+ viewBox="0 0 24 24"
402
+ strokeWidth={1.5}
403
+ stroke="currentColor"
404
+ className={cn('size-4', className)}
405
+ {...props}
406
+ >
407
+ <path
408
+ strokeLinecap="round"
409
+ strokeLinejoin="round"
410
+ d="M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10"
411
+ />
412
+ </svg>
413
+ )
414
+}
415
+
416
+function IconShare({ className, ...props }: React.ComponentProps<'svg'>) {
417
+ return (
418
+ <svg
419
+ xmlns="http://www.w3.org/2000/svg"
420
+ fill="currentColor"
421
+ className={cn('size-4', className)}
422
+ viewBox="0 0 256 256"
423
+ {...props}
424
+ >
425
+ <path d="m237.66 106.35-80-80A8 8 0 0 0 144 32v40.35c-25.94 2.22-54.59 14.92-78.16 34.91-28.38 24.08-46.05 55.11-49.76 87.37a12 12 0 0 0 20.68 9.58c11-11.71 50.14-48.74 107.24-52V192a8 8 0 0 0 13.66 5.65l80-80a8 8 0 0 0 0-11.3ZM160 172.69V144a8 8 0 0 0-8-8c-28.08 0-55.43 7.33-81.29 21.8a196.17 196.17 0 0 0-36.57 26.52c5.8-23.84 20.42-46.51 42.05-64.86C99.41 99.77 127.75 88 152 88a8 8 0 0 0 8-8V51.32L220.69 112Z" />
426
+ </svg>
427
+ )
428
+}
429
+
430
+function IconUsers({ className, ...props }: React.ComponentProps<'svg'>) {
431
+ return (
432
+ <svg
433
+ xmlns="http://www.w3.org/2000/svg"
434
+ fill="currentColor"
435
+ className={cn('size-4', className)}
436
+ viewBox="0 0 256 256"
437
+ {...props}
438
+ >
439
+ <path d="M117.25 157.92a60 60 0 1 0-66.5 0 95.83 95.83 0 0 0-47.22 37.71 8 8 0 1 0 13.4 8.74 80 80 0 0 1 134.14 0 8 8 0 0 0 13.4-8.74 95.83 95.83 0 0 0-47.22-37.71ZM40 108a44 44 0 1 1 44 44 44.05 44.05 0 0 1-44-44Zm210.14 98.7a8 8 0 0 1-11.07-2.33A79.83 79.83 0 0 0 172 168a8 8 0 0 1 0-16 44 44 0 1 0-16.34-84.87 8 8 0 1 1-5.94-14.85 60 60 0 0 1 55.53 105.64 95.83 95.83 0 0 1 47.22 37.71 8 8 0 0 1-2.33 11.07Z" />
440
+ </svg>
441
+ )
442
+}
443
+
444
+function IconExternalLink({
445
+ className,
446
+ ...props
447
+}: React.ComponentProps<'svg'>) {
448
+ return (
449
+ <svg
450
+ xmlns="http://www.w3.org/2000/svg"
451
+ fill="currentColor"
452
+ className={cn('size-4', className)}
453
+ viewBox="0 0 256 256"
454
+ {...props}
455
+ >
456
+ <path d="M224 104a8 8 0 0 1-16 0V59.32l-66.33 66.34a8 8 0 0 1-11.32-11.32L196.68 48H152a8 8 0 0 1 0-16h64a8 8 0 0 1 8 8Zm-40 24a8 8 0 0 0-8 8v72H48V80h72a8 8 0 0 0 0-16H48a16 16 0 0 0-16 16v128a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-72a8 8 0 0 0-8-8Z" />
457
+ </svg>
458
+ )
459
+}
460
+
461
+function IconChevronUpDown({
462
+ className,
463
+ ...props
464
+}: React.ComponentProps<'svg'>) {
465
+ return (
466
+ <svg
467
+ xmlns="http://www.w3.org/2000/svg"
468
+ fill="currentColor"
469
+ className={cn('size-4', className)}
470
+ viewBox="0 0 256 256"
471
+ {...props}
472
+ >
473
+ <path d="M181.66 170.34a8 8 0 0 1 0 11.32l-48 48a8 8 0 0 1-11.32 0l-48-48a8 8 0 0 1 11.32-11.32L128 212.69l42.34-42.35a8 8 0 0 1 11.32 0Zm-96-84.68L128 43.31l42.34 42.35a8 8 0 0 0 11.32-11.32l-48-48a8 8 0 0 0-11.32 0l-48 48a8 8 0 0 0 11.32 11.32Z" />
474
+ </svg>
475
+ )
476
+}
477
+
478
+export {
479
+ IconEdit,
480
+ IconNextChat,
481
+ IconOpenAI,
482
+ IconVercel,
483
+ IconGitHub,
484
+ IconSeparator,
485
+ IconArrowDown,
486
+ IconArrowRight,
487
+ IconUser,
488
+ IconPlus,
489
+ IconArrowElbow,
490
+ IconSpinner,
491
+ IconMessage,
492
+ IconTrash,
493
+ IconRefresh,
494
+ IconStop,
495
+ IconSidebar,
496
+ IconMoon,
497
+ IconSun,
498
+ IconCopy,
499
+ IconCheck,
500
+ IconDownload,
501
+ IconClose,
502
+ IconShare,
503
+ IconUsers,
504
+ IconExternalLink,
505
+ IconChevronUpDown
506
+}
app/_ui/components/prompt-form.tsx
new
+97
@@ -0,0 +1,97 @@
1
+'use client';
2
+
3
+import * as React from 'react'
4
+import Textarea from 'react-textarea-autosize'
5
+import { UseChatHelpers } from 'ai/react'
6
+import {
7
+ Tooltip,
8
+ TooltipContent,
9
+ TooltipTrigger
10
+} from './tooltip'
11
+import { IconArrowElbow, IconPlus } from './icons'
12
+import { useRouter } from 'next/navigation'
13
+import { Button, buttonVariants } from './button';
14
+
15
+export interface PromptProps
16
+ extends Pick<UseChatHelpers, 'input' | 'setInput'> {
17
+ onSubmit: (value: string) => void
18
+ isLoading: boolean
19
+}
20
+
21
+export function PromptForm({
22
+ onSubmit,
23
+ input,
24
+ setInput,
25
+ isLoading
26
+}: PromptProps) {
27
+ const { formRef, onKeyDown } = useEnterSubmit()
28
+ const inputRef = React.useRef<HTMLTextAreaElement>(null)
29
+ const router = useRouter()
30
+ React.useEffect(() => {
31
+ if (inputRef.current) {
32
+ inputRef.current.focus()
33
+ }
34
+ }, [])
35
+
36
+ return (
37
+ <form
38
+ onSubmit={async e => {
39
+ e.preventDefault()
40
+ if (!input?.trim()) {
41
+ return
42
+ }
43
+ setInput('')
44
+ await onSubmit(input)
45
+ }}
46
+ ref={formRef}
47
+ >
48
+ <div className="relative flex flex-col w-full px-8 overflow-hidden max-h-60 grow bg-background sm:rounded-md sm:border sm:px-12">
49
+ <Tooltip>
50
+ <TooltipTrigger asChild>
51
+ <button
52
+ onClick={e => {
53
+ e.preventDefault()
54
+ router.refresh()
55
+ router.push('/')
56
+ }}
57
+ className={cn(
58
+ buttonVariants({ size: 'sm', variant: 'outline' }),
59
+ 'absolute left-0 top-4 size-8 rounded-full bg-background p-0 sm:left-4'
60
+ )}
61
+ >
62
+ <IconPlus />
63
+ <span className="sr-only">New Chat</span>
64
+ </button>
65
+ </TooltipTrigger>
66
+ <TooltipContent>New Chat</TooltipContent>
67
+ </Tooltip>
68
+ <Textarea
69
+ ref={inputRef}
70
+ tabIndex={0}
71
+ onKeyDown={onKeyDown}
72
+ rows={1}
73
+ value={input}
74
+ onChange={e => setInput(e.target.value)}
75
+ placeholder="Send a message."
76
+ spellCheck={false}
77
+ className="min-h-[60px] w-full resize-none bg-transparent px-4 py-[1.3rem] focus-within:outline-none sm:text-sm"
78
+ />
79
+ <div className="absolute right-0 top-4 sm:right-4">
80
+ <Tooltip>
81
+ <TooltipTrigger asChild>
82
+ <Button
83
+ type="submit"
84
+ size="icon"
85
+ disabled={isLoading || input === ''}
86
+ >
87
+ <IconArrowElbow />
88
+ <span className="sr-only">Send message</span>
89
+ </Button>
90
+ </TooltipTrigger>
91
+ <TooltipContent>Send message</TooltipContent>
92
+ </Tooltip>
93
+ </div>
94
+ </div>
95
+ </form>
96
+ )
97
+}
app/_ui/components/tooltip.tsx
new
+29
@@ -0,0 +1,29 @@
1
+'use client'
2
+
3
+import * as React from 'react'
4
+import * as TooltipPrimitive from '@radix-ui/react-tooltip'
5
+import { cn } from '@/app/_lib/utils'
6
+
7
+const TooltipProvider = TooltipPrimitive.Provider
8
+
9
+const Tooltip = TooltipPrimitive.Root
10
+
11
+const TooltipTrigger = TooltipPrimitive.Trigger
12
+
13
+const TooltipContent = React.forwardRef<
14
+ React.ElementRef<typeof TooltipPrimitive.Content>,
15
+ React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
16
+>(({ className, sideOffset = 4, ...props }, ref) => (
17
+ <TooltipPrimitive.Content
18
+ ref={ref}
19
+ sideOffset={sideOffset}
20
+ className={cn(
21
+ 'z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-xs font-medium text-popover-foreground shadow-md animate-in fade-in-50 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1',
22
+ className
23
+ )}
24
+ {...props}
25
+ />
26
+))
27
+TooltipContent.displayName = TooltipPrimitive.Content.displayName
28
+
29
+export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
app/_ui/external-link.tsx
new
+20
@@ -0,0 +1,20 @@
1
+import { ArrowRightIcon } from '@heroicons/react/outline';
2
+
3
+export const ExternalLink = ({
4
+ children,
5
+ href,
6
+}: {
7
+ children: React.ReactNode;
8
+ href: string;
9
+}) => {
10
+ return (
11
+ <a
12
+ href={href}
13
+ className="inline-flex gap-x-2 rounded-lg bg-gray-700 px-3 py-1 text-sm font-medium text-gray-100 no-underline hover:bg-gray-500 hover:text-white"
14
+ >
15
+ <div>{children}</div>
16
+
17
+ <ArrowRightIcon className="block w-4" />
18
+ </a>
19
+ );
20
+};
app/_ui/global-nav.tsx
new
+97
@@ -0,0 +1,97 @@
1
+'use client';
2
+
3
+import { menus, type Item } from '../_lib/menus';
4
+import Link from 'next/link';
5
+import { useSelectedLayoutSegment } from 'next/navigation';
6
+import { MenuAlt2Icon, XIcon } from '@heroicons/react/solid';
7
+import clsx from 'clsx';
8
+import { useState } from 'react';
9
+import Image from 'next/image';
10
+
11
+export function GlobalNav() {
12
+ const [isOpen, setIsOpen] = useState(false);
13
+ const close = () => setIsOpen(false);
14
+
15
+ return (
16
+ <div className="fixed top-0 z-10 flex w-full flex-col border-b border-gray-800 bg-black lg:bottom-0 lg:z-auto lg:w-72 lg:border-b-0 lg:border-r lg:border-gray-800">
17
+ <div className="flex h-14 items-center px-4 py-4 lg:h-auto">
18
+ <Link
19
+ href="/"
20
+ className="group flex w-full items-center gap-x-2.5"
21
+ onClick={close}
22
+ >
23
+ <div className="h-7 w-7 rounded-sm border border-white/30 group-hover:border-white/50">
24
+ <Image src="/logo192.png" alt="Tauri on Bazel" width={40} height={40} />
25
+ </div>
26
+
27
+ <h3 className="font-semibold tracking-wide text-gray-400 group-hover:text-gray-50">
28
+ Tauri on Bazel
29
+ </h3>
30
+ </Link>
31
+ </div>
32
+ <button
33
+ type="button"
34
+ className="group absolute right-0 top-0 flex h-14 items-center gap-x-2 px-4 lg:hidden"
35
+ onClick={() => setIsOpen(!isOpen)}
36
+ >
37
+ <div className="font-medium text-gray-100 group-hover:text-gray-400">
38
+ Menu
39
+ </div>
40
+ {isOpen ? (
41
+ <XIcon className="block w-6 text-gray-400" />
42
+ ) : (
43
+ <MenuAlt2Icon className="block w-6 text-gray-400" />
44
+ )}
45
+ </button>
46
+
47
+ <div
48
+ className={clsx('overflow-y-auto lg:static lg:block', {
49
+ 'fixed inset-x-0 bottom-0 top-14 mt-px bg-black': isOpen,
50
+ hidden: !isOpen,
51
+ })}
52
+ >
53
+ <nav className="space-y-6 px-2 pb-24 pt-5">
54
+ {menus.map((section, index) => {
55
+ return (
56
+ <div key={index}>
57
+
58
+ <div className="space-y-1">
59
+ {section.items.map((item) => (
60
+ <GlobalNavItem key={item.slug} item={item} close={close} />
61
+ ))}
62
+ </div>
63
+ </div>
64
+ );
65
+ })}
66
+ </nav>
67
+ </div>
68
+ </div>
69
+ );
70
+}
71
+
72
+function GlobalNavItem({
73
+ item,
74
+ close,
75
+}: {
76
+ item: Item;
77
+ close: () => false | void;
78
+}) {
79
+ const segment = useSelectedLayoutSegment();
80
+ const isActive = item.slug === segment;
81
+
82
+ return (
83
+ <Link
84
+ onClick={close}
85
+ href={`/${item.slug}`}
86
+ className={clsx(
87
+ 'block rounded-md px-3 py-2 text-sm font-medium hover:text-gray-300',
88
+ {
89
+ 'text-gray-400 hover:bg-gray-800': !isActive,
90
+ 'text-white': isActive,
91
+ },
92
+ )}
93
+ >
94
+ {item.name}
95
+ </Link>
96
+ );
97
+}
app/_ui/skeleton-card.tsx
new
+16
@@ -0,0 +1,16 @@
1
+import clsx from 'clsx';
2
+
3
+export const SkeletonCard = ({ isLoading }: { isLoading?: boolean }) => (
4
+ <div
5
+ className={clsx('rounded-2xl bg-gray-900/80 p-4', {
6
+ 'relative overflow-hidden before:absolute before:inset-0 before:-translate-x-full before:animate-[shimmer_1.5s_infinite] before:bg-gradient-to-r before:from-transparent before:via-white/10 before:to-transparent':
7
+ isLoading,
8
+ })}
9
+ >
10
+ <div className="space-y-3">
11
+ <div className="h-14 rounded-lg bg-gray-700" />
12
+ <div className="h-3 w-11/12 rounded-lg bg-gray-700" />
13
+ <div className="h-3 w-8/12 rounded-lg bg-gray-700" />
14
+ </div>
15
+ </div>
16
+);
app/_ui/tab-group.tsx
new
+31
@@ -0,0 +1,31 @@
1
+import { Tab } from "./tab";
2
+
3
+export type Item = {
4
+ text: string;
5
+ slug?: string;
6
+ segment?: string;
7
+ parallelRoutesKey?: string;
8
+};
9
+
10
+export const TabGroup = ({
11
+ path,
12
+ parallelRoutesKey,
13
+ items,
14
+}: {
15
+ path: string;
16
+ parallelRoutesKey?: string;
17
+ items: Item[];
18
+}) => {
19
+ return (
20
+ <div className="flex flex-wrap items-center gap-2">
21
+ {items.map((item) => (
22
+ <Tab
23
+ key={path + item.slug}
24
+ item={item}
25
+ path={path}
26
+ parallelRoutesKey={parallelRoutesKey}
27
+ />
28
+ ))}
29
+ </div>
30
+ );
31
+};
app/_ui/tab-nav-item.tsx
new
+25
@@ -0,0 +1,25 @@
1
+import clsx from 'clsx';
2
+import Link from 'next/link';
3
+
4
+export const TabNavItem = ({
5
+ children,
6
+ href,
7
+ isActive,
8
+}: {
9
+ children: React.ReactNode;
10
+ href: string;
11
+ isActive?: boolean;
12
+}) => {
13
+ return (
14
+ <Link
15
+ href={href}
16
+ className={clsx('rounded-lg px-3 py-1 text-sm font-medium', {
17
+ 'bg-gray-700 text-gray-100 hover:bg-gray-500 hover:text-white':
18
+ !isActive,
19
+ 'bg-vercel-blue text-white': isActive,
20
+ })}
21
+ >
22
+ {children}
23
+ </Link>
24
+ );
25
+};
app/_ui/tab.tsx
new
+39
@@ -0,0 +1,39 @@
1
+'use client';
2
+
3
+import type { Item } from '#/ui/tab-group';
4
+import clsx from 'clsx';
5
+import Link from 'next/link';
6
+import { useSelectedLayoutSegment } from 'next/navigation';
7
+
8
+export const Tab = ({
9
+ path,
10
+ parallelRoutesKey,
11
+ item,
12
+}: {
13
+ path: string;
14
+ parallelRoutesKey?: string;
15
+ item: Item;
16
+}) => {
17
+ const segment = useSelectedLayoutSegment(parallelRoutesKey);
18
+
19
+ const href = item.slug ? path + '/' + item.slug : path;
20
+ const isActive =
21
+ // Example home pages e.g. `/layouts`
22
+ (!item.slug && segment === null) ||
23
+ segment === item.segment ||
24
+ // Nested pages e.g. `/layouts/electronics`
25
+ segment === item.slug;
26
+
27
+ return (
28
+ <Link
29
+ href={href}
30
+ className={clsx('rounded-lg px-3 py-1 text-sm font-medium', {
31
+ 'bg-gray-700 text-gray-100 hover:bg-gray-500 hover:text-white':
32
+ !isActive,
33
+ 'bg-vercel-blue text-white': isActive,
34
+ })}
35
+ >
36
+ {item.text}
37
+ </Link>
38
+ );
39
+};
app/api/categories/category.d.ts
new
+6
@@ -0,0 +1,6 @@
1
+export type Category = {
2
+ name: string;
3
+ slug: string;
4
+ count: number;
5
+ parent: string | null;
6
+};
app/api/categories/getCategories.ts
new
+52
@@ -0,0 +1,52 @@
1
+import { notFound } from 'next/navigation';
2
+import type { Category } from './category';
3
+
4
+// `server-only` guarantees any modules that import code in file
5
+// will never run on the client. Even though this particular api
6
+// doesn't currently use sensitive environment variables, it's
7
+// good practise to add `server-only` preemptively.
8
+import 'server-only';
9
+
10
+export async function getCategories({ parent }: { parent?: string } = {}) {
11
+ const res = await fetch(
12
+ `https://app-router-api.vercel.app/api/categories${
13
+ parent ? `?parent=${parent}` : ''
14
+ }`,
15
+ );
16
+
17
+ if (!res.ok) {
18
+ // Render the closest `error.js` Error Boundary
19
+ throw new Error('Something went wrong!');
20
+ }
21
+
22
+ const categories = (await res.json()) as Category[];
23
+
24
+ if (categories.length === 0) {
25
+ // Render the closest `not-found.js` Error Boundary
26
+ notFound();
27
+ }
28
+
29
+ return categories;
30
+}
31
+
32
+export async function getCategory({ slug }: { slug: string }) {
33
+ const res = await fetch(
34
+ `https://app-router-api.vercel.app/api/categories${
35
+ slug ? `?slug=${slug}` : ''
36
+ }`,
37
+ );
38
+
39
+ if (!res.ok) {
40
+ // Render the closest `error.js` Error Boundary
41
+ throw new Error('Something went wrong!');
42
+ }
43
+
44
+ const category = (await res.json()) as Category;
45
+
46
+ if (!category) {
47
+ // Render the closest `not-found.js` Error Boundary
48
+ notFound();
49
+ }
50
+
51
+ return category;
52
+}
app/chat/[categorySlug]/[subCategorySlug]/page.tsx
new
+22
@@ -0,0 +1,22 @@
1
+import { SkeletonCard } from "@/app/_ui/skeleton-card";
2
+import { getCategory } from "@/app/api/categories/getCategories";
3
+
4
+export default async function Page({
5
+ params,
6
+}: {
7
+ params: { subCategorySlug: string };
8
+}) {
9
+ const category = await getCategory({ slug: params.subCategorySlug });
10
+
11
+ return (
12
+ <div className="space-y-4">
13
+ <h1 className="text-xl font-medium text-gray-400/80">{category.name}</h1>
14
+
15
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
16
+ {Array.from({ length: category.count }).map((_, i) => (
17
+ <SkeletonCard key={i} />
18
+ ))}
19
+ </div>
20
+ </div>
21
+ );
22
+}
app/chat/[categorySlug]/layout.tsx
new
+39
@@ -0,0 +1,39 @@
1
+import { ClickCounter } from "@/app/_ui/click-counter";
2
+import { TabGroup } from "@/app/_ui/tab-group";
3
+import { getCategories, getCategory } from "@/app/api/categories/getCategories";
4
+
5
+export default async function Layout({
6
+ children,
7
+ params,
8
+}: {
9
+ children: React.ReactNode;
10
+ params: { categorySlug: string };
11
+}) {
12
+ const category = await getCategory({ slug: params.categorySlug });
13
+ const categories = await getCategories({ parent: params.categorySlug });
14
+
15
+ return (
16
+ <div className="space-y-9">
17
+ <div className="flex justify-between">
18
+ <TabGroup
19
+ path={`/feed/${category.slug}`}
20
+ items={[
21
+ {
22
+ text: 'All',
23
+ },
24
+ ...categories.map((x) => ({
25
+ text: x.name,
26
+ slug: x.slug,
27
+ })),
28
+ ]}
29
+ />
30
+
31
+ <div className="self-start">
32
+ <ClickCounter />
33
+ </div>
34
+ </div>
35
+
36
+ <div>{children}</div>
37
+ </div>
38
+ );
39
+}
app/chat/[categorySlug]/page.tsx
new
+24
@@ -0,0 +1,24 @@
1
+import { SkeletonCard } from "@/app/_ui/skeleton-card";
2
+import { getCategory } from "@/app/api/categories/getCategories";
3
+
4
+export default async function Page({
5
+ params,
6
+}: {
7
+ params: { categorySlug: string };
8
+}) {
9
+ const category = await getCategory({ slug: params.categorySlug });
10
+
11
+ return (
12
+ <div className="space-y-4">
13
+ <h1 className="text-xl font-medium text-gray-400/80">
14
+ All {category.name}
15
+ </h1>
16
+
17
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
18
+ {Array.from({ length: 9 }).map((_, i) => (
19
+ <SkeletonCard key={i} />
20
+ ))}
21
+ </div>
22
+ </div>
23
+ );
24
+}
app/chat/[categorySlug]/template.tsx
new
+6
@@ -0,0 +1,6 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import React from 'react';
3
+
4
+export default function Template({ children }: { children: React.ReactNode }) {
5
+ return <Boundary>{children}</Boundary>;
6
+}
app/chat/layout.tsx
new
+25
@@ -0,0 +1,25 @@
1
+import { TooltipProvider } from '../_ui/components/tooltip';
2
+import React from 'react';
3
+
4
+const title = 'Nested Layouts';
5
+
6
+export const metadata = {
7
+ metadataBase: new URL('https://splitfire.ai'),
8
+ title,
9
+ openGraph: {
10
+ title,
11
+ images: [`/api/og?title=${title}`],
12
+ },
13
+};
14
+
15
+export default async function Layout({
16
+ children,
17
+}: {
18
+ children: React.ReactNode;
19
+}) {
20
+ return (
21
+ <div className="space-y-9">
22
+ <TooltipProvider>{children}</TooltipProvider>
23
+ </div>
24
+ );
25
+}
app/chat/page.tsx
new
+57
@@ -0,0 +1,57 @@
1
+'use client'
2
+
3
+import { useLocalStorage } from '../_lib/hooks/use-local-storage';
4
+import { cn } from '../_lib/utils';
5
+import { ChatPanel } from '../_ui/components/chat-panel';
6
+import { EmptyScreen } from '../_ui/components/empty-screen';
7
+import { useChat, type Message } from 'ai/react'
8
+import { usePathname } from 'next/navigation';
9
+import { toast } from 'react-hot-toast'
10
+
11
+export interface ChatProps extends React.ComponentProps<'div'> {
12
+ initialMessages?: Message[]
13
+ id?: string
14
+}
15
+
16
+export default function Page({id, initialMessages, className}: ChatProps) {
17
+ const path = usePathname()
18
+ const [previewToken, setPreviewToken] = useLocalStorage<string | null>(
19
+ 'ai-token',
20
+ null
21
+ )
22
+ const { messages, append, reload, stop, isLoading, input, setInput } =
23
+ useChat({
24
+ initialMessages,
25
+ id,
26
+ body: {
27
+ id,
28
+ previewToken
29
+ },
30
+ onResponse(response) {
31
+ if (response.status === 401) {
32
+ toast.error(response.statusText)
33
+ }
34
+ },
35
+ onFinish() {
36
+ if (!path.includes('chat')) {
37
+ window.history.pushState({}, '', `/chat/${id}`)
38
+ }
39
+ }
40
+ })
41
+
42
+ return (
43
+ <div className="prose prose-sm prose-invert max-w-none">
44
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
45
+ <div className={cn('pb-[200px] pt-4 md:pt-10', className)}>
46
+ {messages.length ? (
47
+ <>
48
+ </>
49
+ ) : (
50
+ <EmptyScreen setInput={setInput} />
51
+ )}
52
+ </div>
53
+
54
+ </div>
55
+ </div>
56
+ );
57
+}
app/globals.css
new
+3
@@ -0,0 +1,3 @@
1
+@tailwind base;
2
+@tailwind components;
3
+@tailwind utilities;
app/layout.tsx
new
+31
@@ -0,0 +1,31 @@
1
+'use client'
2
+
3
+import { AddressBar } from './_ui/address-bar';
4
+import { GlobalNav } from './_ui/global-nav';
5
+import './globals.css';
6
+
7
+export default function RootLayout({
8
+ children,
9
+}: {
10
+ children: React.ReactNode;
11
+}) {
12
+ return (
13
+ <html lang="en" className="[color-scheme:dark]">
14
+ <body className="bg-gray-1100 overflow-y-scroll bg-[url('/grid.svg')] pb-36">
15
+ <GlobalNav />
16
+ <div className="lg:pl-72">
17
+ <div className="bg-vc-border-gradient rounded-lg p-px shadow-lg shadow-black/20">
18
+ <div className="rounded-lg bg-black">
19
+ <AddressBar />
20
+ </div>
21
+ </div>
22
+ <div className="mx-auto max-w-4xl space-y-8 px-2 pt-20 lg:px-8 lg:py-8">
23
+ <div className="bg-vc-border-gradient rounded-lg p-px shadow-lg shadow-black/20">
24
+ <div className="rounded-lg bg-black p-3.5 lg:p-6">{children}</div>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </body>
29
+ </html>
30
+ );
31
+}
app/page.tsx
new
+12
@@ -0,0 +1,12 @@
1
+export default function Page() {
2
+ return (
3
+ <div className="space-y-8">
4
+ <h1 className="text-xl font-medium text-gray-300">Hello, Tauri on Bazel!</h1>
5
+ <div className="space-y-10 text-white">
6
+ <div className="space-y-5">
7
+ <div className="grid grid-cols-1 gap-5 lg:grid-cols-2"></div>
8
+ </div>
9
+ </div>
10
+ </div>
11
+ );
12
+}
app/play/(checkout)/checkout/page.tsx
new
+3
@@ -0,0 +1,3 @@
1
+export default function Page() {
2
+ return <h1 className="text-xl font-medium text-gray-400/80">Checkout</h1>;
3
+}
app/play/(checkout)/layout.tsx
new
+23
@@ -0,0 +1,23 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import { TabNavItem } from '@/app/_ui/tab-nav-item';
3
+import React from 'react';
4
+
5
+export default function Layout({ children }: { children: React.ReactNode }) {
6
+ return (
7
+ <Boundary
8
+ labels={['checkout layout']}
9
+ color="blue"
10
+ animateRerendering={false}
11
+ >
12
+ <div className="space-y-9">
13
+ <div className="flex items-center justify-between">
14
+ <div className="flex items-center gap-x-4">
15
+ <TabNavItem href="/play">Back</TabNavItem>
16
+ </div>
17
+ </div>
18
+
19
+ <div>{children}</div>
20
+ </div>
21
+ </Boundary>
22
+ );
23
+}
app/play/(checkout)/template.tsx
new
+6
@@ -0,0 +1,6 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import React from 'react';
3
+
4
+export default function Template({ children }: { children: React.ReactNode }) {
5
+ return <Boundary>{children}</Boundary>;
6
+}
app/play/(main)/layout.tsx
new
+47
@@ -0,0 +1,47 @@
1
+
2
+import { Boundary } from '@/app/_ui/boundary';
3
+import { ClickCounter } from '@/app/_ui/click-counter';
4
+import { TabGroup } from '@/app/_ui/tab-group';
5
+import { getCategories } from '@/app/api/categories/getCategories';
6
+import React from 'react';
7
+
8
+export default async function Layout({
9
+ children,
10
+}: {
11
+ children: React.ReactNode;
12
+}) {
13
+ const categories = await getCategories();
14
+
15
+ return (
16
+ <Boundary
17
+ labels={['main layout']}
18
+ color="orange"
19
+ animateRerendering={false}
20
+ >
21
+ <div className="space-y-9">
22
+ <div className="flex justify-between">
23
+ <TabGroup
24
+ path="/play"
25
+ items={[
26
+ {
27
+ text: 'Home',
28
+ },
29
+ ...categories.map((x) => ({
30
+ text: x.name,
31
+ slug: x.slug,
32
+ })),
33
+ { text: 'Checkout', slug: 'checkout' },
34
+ { text: 'Blog', slug: 'blog' },
35
+ ]}
36
+ />
37
+
38
+ <div className="self-start">
39
+ <ClickCounter />
40
+ </div>
41
+ </div>
42
+
43
+ <div>{children}</div>
44
+ </div>
45
+ </Boundary>
46
+ );
47
+}
app/play/(main)/page.tsx
new
+38
@@ -0,0 +1,38 @@
1
+import { ExternalLink } from "@/app/_ui/external-link";
2
+
3
+export default function Page() {
4
+ return (
5
+ <div className="prose prose-sm prose-invert max-w-none">
6
+ <h1 className="text-xl font-bold">Route Groups</h1>
7
+
8
+ <ul>
9
+ <li>
10
+ This example uses Route Groups to create layouts for different
11
+ sections of the app without affecting the URL structure.
12
+ </li>
13
+ <li>
14
+ Try navigating pages and noting the different layouts used for each
15
+ section.
16
+ </li>
17
+ <li>Route groups can be used to:</li>
18
+ <ul>
19
+ <li>Opt a route segment out of a shared layout.</li>
20
+ <li>Organize routes without affecting the URL structure.</li>
21
+ <li>
22
+ Create multiple root layouts by partitioning the top level of the
23
+ application.
24
+ </li>
25
+ </ul>
26
+ </ul>
27
+
28
+ <div className="flex gap-2">
29
+ <ExternalLink href="https://nextjs.org/docs/app/building-your-application/routing/route-groups">
30
+ Docs
31
+ </ExternalLink>
32
+ <ExternalLink href="https://github.com/vercel/app-playground/tree/main/app/route-groups">
33
+ Code
34
+ </ExternalLink>
35
+ </div>
36
+ </div>
37
+ );
38
+}
app/play/(main)/template.tsx
new
+6
@@ -0,0 +1,6 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import React from 'react';
3
+
4
+export default function Template({ children }: { children: React.ReactNode }) {
5
+ return <Boundary>{children}</Boundary>;
6
+}
app/play/(marketing)/blog/page.tsx
new
+3
@@ -0,0 +1,3 @@
1
+export default function Page() {
2
+ return <h1 className="text-xl font-medium text-gray-400/80">Blog</h1>;
3
+}
app/play/(marketing)/layout.tsx
new
+47
@@ -0,0 +1,47 @@
1
+
2
+import { Boundary } from '@/app/_ui/boundary';
3
+import { ClickCounter } from '@/app/_ui/click-counter';
4
+import { TabGroup } from '@/app/_ui/tab-group';
5
+import { getCategories } from '@/app/api/categories/getCategories';
6
+import React from 'react';
7
+
8
+export default async function Layout({
9
+ children,
10
+}: {
11
+ children: React.ReactNode;
12
+}) {
13
+ const categories = await getCategories();
14
+
15
+ return (
16
+ <Boundary
17
+ labels={['marketing layout']}
18
+ color="violet"
19
+ animateRerendering={false}
20
+ >
21
+ <div className="space-y-9">
22
+ <div className="flex justify-between">
23
+ <TabGroup
24
+ path="/play"
25
+ items={[
26
+ {
27
+ text: 'Home',
28
+ },
29
+ ...categories.map((x) => ({
30
+ text: x.name,
31
+ slug: x.slug,
32
+ })),
33
+ { text: 'Checkout', slug: 'checkout' },
34
+ { text: 'Blog', slug: 'blog' },
35
+ ]}
36
+ />
37
+
38
+ <div className="self-start">
39
+ <ClickCounter />
40
+ </div>
41
+ </div>
42
+
43
+ <div>{children}</div>
44
+ </div>
45
+ </Boundary>
46
+ );
47
+}
app/play/(marketing)/template.tsx
new
+6
@@ -0,0 +1,6 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import React from 'react';
3
+
4
+export default function Template({ children }: { children: React.ReactNode }) {
5
+ return <Boundary>{children}</Boundary>;
6
+}
app/play/(shop)/[categorySlug]/[subCategorySlug]/page.tsx
new
+22
@@ -0,0 +1,22 @@
1
+import { SkeletonCard } from "@/app/_ui/skeleton-card";
2
+import { getCategory } from "@/app/api/categories/getCategories";
3
+
4
+export default async function Page({
5
+ params,
6
+}: {
7
+ params: { categorySlug: string; subCategorySlug: string };
8
+}) {
9
+ const category = await getCategory({ slug: params.subCategorySlug });
10
+
11
+ return (
12
+ <div className="space-y-4">
13
+ <h1 className="text-xl font-medium text-gray-400/80">{category.name}</h1>
14
+
15
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
16
+ {Array.from({ length: category.count }).map((_, i) => (
17
+ <SkeletonCard key={i} />
18
+ ))}
19
+ </div>
20
+ </div>
21
+ );
22
+}
app/play/(shop)/[categorySlug]/layout.tsx
new
+38
@@ -0,0 +1,38 @@
1
+import { ClickCounter } from "@/app/_ui/click-counter";
2
+import { TabGroup } from "@/app/_ui/tab-group";
3
+import { getCategories, getCategory } from "@/app/api/categories/getCategories";
4
+
5
+export default async function Layout({
6
+ children,
7
+ params,
8
+}: {
9
+ children: React.ReactNode;
10
+ params: { categorySlug: string };
11
+}) {
12
+ const category = await getCategory({ slug: params.categorySlug });
13
+ const categories = await getCategories({ parent: params.categorySlug });
14
+
15
+ return (
16
+ <div className="space-y-9">
17
+ <div className="flex justify-between">
18
+ <TabGroup
19
+ path={`/play/${category.slug}`}
20
+ items={[
21
+ {
22
+ text: 'All',
23
+ },
24
+ ...categories.map((x) => ({
25
+ text: x.name,
26
+ slug: x.slug,
27
+ })),
28
+ ]}
29
+ />
30
+
31
+ <div className="self-start">
32
+ <ClickCounter />
33
+ </div>
34
+ </div>
35
+ <div>{children}</div>
36
+ </div>
37
+ );
38
+}
app/play/(shop)/[categorySlug]/page.tsx
new
+23
@@ -0,0 +1,23 @@
1
+import { SkeletonCard } from "@/app/_ui/skeleton-card";
2
+import { getCategory } from "@/app/api/categories/getCategories";
3
+
4
+export default async function Page({
5
+ params,
6
+}: {
7
+ params: { categorySlug: string };
8
+}) {
9
+ const category = await getCategory({ slug: params.categorySlug });
10
+ return (
11
+ <div className="space-y-4">
12
+ <h1 className="text-xl font-medium text-gray-400/80">
13
+ All {category.name}
14
+ </h1>
15
+
16
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
17
+ {Array.from({ length: 9 }).map((_, i) => (
18
+ <SkeletonCard key={i} />
19
+ ))}
20
+ </div>
21
+ </div>
22
+ );
23
+}
app/play/(shop)/[categorySlug]/template.tsx
new
+6
@@ -0,0 +1,6 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import React from 'react';
3
+
4
+export default function Template({ children }: { children: React.ReactNode }) {
5
+ return <Boundary>{children}</Boundary>;
6
+}
app/play/(shop)/layout.tsx
new
+42
@@ -0,0 +1,42 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import { ClickCounter } from '@/app/_ui/click-counter';
3
+import { TabGroup } from '@/app/_ui/tab-group';
4
+import { getCategories } from '@/app/api/categories/getCategories';
5
+import React from 'react';
6
+
7
+export default async function Layout({
8
+ children,
9
+}: {
10
+ children: React.ReactNode;
11
+}) {
12
+ const categories = await getCategories();
13
+
14
+ return (
15
+ <Boundary labels={['shop layout']} color="cyan" animateRerendering={false}>
16
+ <div className="space-y-9">
17
+ <div className="flex justify-between">
18
+ <TabGroup
19
+ path="/play"
20
+ items={[
21
+ {
22
+ text: 'Home',
23
+ },
24
+ ...categories.map((x) => ({
25
+ text: x.name,
26
+ slug: x.slug,
27
+ })),
28
+ { text: 'Checkout', slug: 'checkout' },
29
+ { text: 'Blog', slug: 'blog' },
30
+ ]}
31
+ />
32
+
33
+ <div className="self-start">
34
+ <ClickCounter />
35
+ </div>
36
+ </div>
37
+
38
+ <div>{children}</div>
39
+ </div>
40
+ </Boundary>
41
+ );
42
+}
app/play/(shop)/template.tsx
new
+6
@@ -0,0 +1,6 @@
1
+import { Boundary } from '@/app/_ui/boundary';
2
+import React from 'react';
3
+
4
+export default function Template({ children }: { children: React.ReactNode }) {
5
+ return <Boundary>{children}</Boundary>;
6
+}
app/play/layout.tsx
new
+29
@@ -0,0 +1,29 @@
1
+import React from 'react';
2
+
3
+const title = 'Nested Layouts';
4
+
5
+export const metadata = {
6
+ metadataBase: new URL('https://splitfire.ai'),
7
+ title,
8
+ openGraph: {
9
+ title,
10
+ images: [`/api/og?title=${title}`],
11
+ },
12
+};
13
+
14
+export default async function Layout({
15
+ children,
16
+}: {
17
+ children: React.ReactNode;
18
+}) {
19
+ return (
20
+ <div className="space-y-9">
21
+ <div className="flex justify-between">
22
+ <div className="self-start">
23
+ <h1 className="text-3xl font-bold">Ready to play!</h1>
24
+ </div>
25
+ </div>
26
+ <div>{children}</div>
27
+ </div>
28
+ );
29
+}
app/play/page.tsx
new
+13
@@ -0,0 +1,13 @@
1
+import { SkeletonCard } from '../_ui/skeleton-card';
2
+
3
+export default function Page() {
4
+ return (
5
+ <div className="prose prose-sm prose-invert max-w-none">
6
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
7
+ {Array.from({ length: 6 }).map((_, i) => (
8
+ <SkeletonCard key={i} />
9
+ ))}
10
+ </div>
11
+ </div>
12
+ );
13
+}
next.config.js
+1
-15
@@ -1,18 +1,4 @@
1
/** @type {import('next').NextConfig} */
2
-const nextConfig = {
3
- reactStrictMode: true,
4
- swcMinify: true,
5
- // Note: This experimental feature is required to use NextJS Image in SSG mode.
6
- // See https://nextjs.org/docs/messages/export-image-api for different workarounds.
7
- images: {
8
- unoptimized: true,
9
- },
10
- webpack: (config) =>
11
- {
12
- config.resolve.symlinks = false;
13
- return config;
14
- }
15
-
16
-};
2
+const nextConfig = {};
3
4
module.exports = nextConfig;
package-lock.json
+1754
-52
@@ -8,27 +8,75 @@
8
"name": "tauri-on-bazel",
9
"version": "0.1.0",
10
"dependencies": {
11
+ "@heroicons/react": "1.0.6",
12
+ "@radix-ui/react-slot": "^1.0.2",
13
+ "@radix-ui/react-tooltip": "^1.0.7",
14
"@tauri-apps/api": "^1.5.3",
15
"@types/node": "18.17.0",
16
"@types/react": "18.2.78",
17
"@types/react-dom": "18.2.25",
18
+ "ai": "^2.2.33",
19
+ "class-variance-authority": "^0.7.0",
20
+ "clsx": "1.2.1",
21
"eslint": "8.32.0",
22
"eslint-config-next": "14.1.0",
23
"next": "14.1.0",
24
"react": "18.2.0",
25
"react-dom": "18.2.0",
26
+ "react-hot-toast": "^2.4.1",
27
+ "react-textarea-autosize": "^8.5.3",
28
+ "tailwind-merge": "^2.2.1",
29
"typescript": "4.9.4"
30
},
31
"devDependencies": {
23
- "@tauri-apps/cli": "^1.5.11"
32
+ "@tailwindcss/forms": "0.5.3",
33
+ "@tailwindcss/typography": "0.5.9",
34
+ "@tauri-apps/cli": "^1.5.11",
35
+ "autoprefixer": "^10.4.19",
36
+ "postcss": "^8.4.38",
37
+ "tailwindcss": "^3.4.3"
38
+ }
39
+ },
40
+ "node_modules/@alloc/quick-lru": {
41
+ "version": "5.2.0",
42
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
43
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
44
+ "dev": true,
45
+ "engines": {
46
+ "node": ">=10"
47
+ }
48
+ },
49
+ "node_modules/@ampproject/remapping": {
50
+ "version": "2.3.0",
51
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@ampproject/remapping/-/remapping-2.3.0.tgz",
52
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
53
+ "peer": true,
54
+ "dependencies": {
55
+ "@jridgewell/gen-mapping": "^0.3.5",
56
+ "@jridgewell/trace-mapping": "^0.3.24"
57
+ },
58
+ "engines": {
59
+ "node": ">=6.0.0"
60
+ }
61
+ },
62
+ "node_modules/@babel/parser": {
63
+ "version": "7.24.4",
64
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@babel/parser/-/parser-7.24.4.tgz",
65
+ "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==",
66
+ "peer": true,
67
+ "bin": {
68
+ "parser": "bin/babel-parser.js"
69
+ },
70
+ "engines": {
71
+ "node": ">=6.0.0"
72
}
73
},
74
"node_modules/@babel/runtime": {
27
- "version": "7.20.7",
28
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
29
- "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==",
75
+ "version": "7.24.4",
76
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@babel/runtime/-/runtime-7.24.4.tgz",
77
+ "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==",
78
"dependencies": {
31
- "regenerator-runtime": "^0.13.11"
79
+ "regenerator-runtime": "^0.14.0"
80
},
81
"engines": {
82
"node": ">=6.9.0"
@@ -56,6 +104,48 @@
104
"url": "https://opencollective.com/eslint"
105
}
106
},
107
+ "node_modules/@floating-ui/core": {
108
+ "version": "1.6.0",
109
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@floating-ui/core/-/core-1.6.0.tgz",
110
+ "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==",
111
+ "dependencies": {
112
+ "@floating-ui/utils": "^0.2.1"
113
+ }
114
+ },
115
+ "node_modules/@floating-ui/dom": {
116
+ "version": "1.6.3",
117
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@floating-ui/dom/-/dom-1.6.3.tgz",
118
+ "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==",
119
+ "dependencies": {
120
+ "@floating-ui/core": "^1.0.0",
121
+ "@floating-ui/utils": "^0.2.0"
122
+ }
123
+ },
124
+ "node_modules/@floating-ui/react-dom": {
125
+ "version": "2.0.8",
126
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@floating-ui/react-dom/-/react-dom-2.0.8.tgz",
127
+ "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==",
128
+ "dependencies": {
129
+ "@floating-ui/dom": "^1.6.1"
130
+ },
131
+ "peerDependencies": {
132
+ "react": ">=16.8.0",
133
+ "react-dom": ">=16.8.0"
134
+ }
135
+ },
136
+ "node_modules/@floating-ui/utils": {
137
+ "version": "0.2.1",
138
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@floating-ui/utils/-/utils-0.2.1.tgz",
139
+ "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q=="
140
+ },
141
+ "node_modules/@heroicons/react": {
142
+ "version": "1.0.6",
143
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@heroicons/react/-/react-1.0.6.tgz",
144
+ "integrity": "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==",
145
+ "peerDependencies": {
146
+ "react": ">= 16"
147
+ }
148
+ },
149
"node_modules/@humanwhocodes/config-array": {
150
"version": "0.11.8",
151
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
@@ -121,6 +211,49 @@
211
"node": ">=12"
212
}
213
},
214
+ "node_modules/@jridgewell/gen-mapping": {
215
+ "version": "0.3.5",
216
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
217
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
218
+ "dependencies": {
219
+ "@jridgewell/set-array": "^1.2.1",
220
+ "@jridgewell/sourcemap-codec": "^1.4.10",
221
+ "@jridgewell/trace-mapping": "^0.3.24"
222
+ },
223
+ "engines": {
224
+ "node": ">=6.0.0"
225
+ }
226
+ },
227
+ "node_modules/@jridgewell/resolve-uri": {
228
+ "version": "3.1.2",
229
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
230
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
231
+ "engines": {
232
+ "node": ">=6.0.0"
233
+ }
234
+ },
235
+ "node_modules/@jridgewell/set-array": {
236
+ "version": "1.2.1",
237
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@jridgewell/set-array/-/set-array-1.2.1.tgz",
238
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
239
+ "engines": {
240
+ "node": ">=6.0.0"
241
+ }
242
+ },
243
+ "node_modules/@jridgewell/sourcemap-codec": {
244
+ "version": "1.4.15",
245
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
246
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
247
+ },
248
+ "node_modules/@jridgewell/trace-mapping": {
249
+ "version": "0.3.25",
250
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
251
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
252
+ "dependencies": {
253
+ "@jridgewell/resolve-uri": "^3.1.0",
254
+ "@jridgewell/sourcemap-codec": "^1.4.14"
255
+ }
256
+ },
257
"node_modules/@next/env": {
258
"version": "14.1.0",
259
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@next/env/-/env-14.1.0.tgz",
@@ -366,6 +499,407 @@
499
"url": "https://opencollective.com/unts"
500
}
501
},
502
+ "node_modules/@radix-ui/primitive": {
503
+ "version": "1.0.1",
504
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/primitive/-/primitive-1.0.1.tgz",
505
+ "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==",
506
+ "dependencies": {
507
+ "@babel/runtime": "^7.13.10"
508
+ }
509
+ },
510
+ "node_modules/@radix-ui/react-arrow": {
511
+ "version": "1.0.3",
512
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz",
513
+ "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==",
514
+ "dependencies": {
515
+ "@babel/runtime": "^7.13.10",
516
+ "@radix-ui/react-primitive": "1.0.3"
517
+ },
518
+ "peerDependencies": {
519
+ "@types/react": "*",
520
+ "@types/react-dom": "*",
521
+ "react": "^16.8 || ^17.0 || ^18.0",
522
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
523
+ },
524
+ "peerDependenciesMeta": {
525
+ "@types/react": {
526
+ "optional": true
527
+ },
528
+ "@types/react-dom": {
529
+ "optional": true
530
+ }
531
+ }
532
+ },
533
+ "node_modules/@radix-ui/react-compose-refs": {
534
+ "version": "1.0.1",
535
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
536
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
537
+ "dependencies": {
538
+ "@babel/runtime": "^7.13.10"
539
+ },
540
+ "peerDependencies": {
541
+ "@types/react": "*",
542
+ "react": "^16.8 || ^17.0 || ^18.0"
543
+ },
544
+ "peerDependenciesMeta": {
545
+ "@types/react": {
546
+ "optional": true
547
+ }
548
+ }
549
+ },
550
+ "node_modules/@radix-ui/react-context": {
551
+ "version": "1.0.1",
552
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-context/-/react-context-1.0.1.tgz",
553
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
554
+ "dependencies": {
555
+ "@babel/runtime": "^7.13.10"
556
+ },
557
+ "peerDependencies": {
558
+ "@types/react": "*",
559
+ "react": "^16.8 || ^17.0 || ^18.0"
560
+ },
561
+ "peerDependenciesMeta": {
562
+ "@types/react": {
563
+ "optional": true
564
+ }
565
+ }
566
+ },
567
+ "node_modules/@radix-ui/react-dismissable-layer": {
568
+ "version": "1.0.5",
569
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz",
570
+ "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==",
571
+ "dependencies": {
572
+ "@babel/runtime": "^7.13.10",
573
+ "@radix-ui/primitive": "1.0.1",
574
+ "@radix-ui/react-compose-refs": "1.0.1",
575
+ "@radix-ui/react-primitive": "1.0.3",
576
+ "@radix-ui/react-use-callback-ref": "1.0.1",
577
+ "@radix-ui/react-use-escape-keydown": "1.0.3"
578
+ },
579
+ "peerDependencies": {
580
+ "@types/react": "*",
581
+ "@types/react-dom": "*",
582
+ "react": "^16.8 || ^17.0 || ^18.0",
583
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
584
+ },
585
+ "peerDependenciesMeta": {
586
+ "@types/react": {
587
+ "optional": true
588
+ },
589
+ "@types/react-dom": {
590
+ "optional": true
591
+ }
592
+ }
593
+ },
594
+ "node_modules/@radix-ui/react-id": {
595
+ "version": "1.0.1",
596
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-id/-/react-id-1.0.1.tgz",
597
+ "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==",
598
+ "dependencies": {
599
+ "@babel/runtime": "^7.13.10",
600
+ "@radix-ui/react-use-layout-effect": "1.0.1"
601
+ },
602
+ "peerDependencies": {
603
+ "@types/react": "*",
604
+ "react": "^16.8 || ^17.0 || ^18.0"
605
+ },
606
+ "peerDependenciesMeta": {
607
+ "@types/react": {
608
+ "optional": true
609
+ }
610
+ }
611
+ },
612
+ "node_modules/@radix-ui/react-popper": {
613
+ "version": "1.1.3",
614
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-popper/-/react-popper-1.1.3.tgz",
615
+ "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==",
616
+ "dependencies": {
617
+ "@babel/runtime": "^7.13.10",
618
+ "@floating-ui/react-dom": "^2.0.0",
619
+ "@radix-ui/react-arrow": "1.0.3",
620
+ "@radix-ui/react-compose-refs": "1.0.1",
621
+ "@radix-ui/react-context": "1.0.1",
622
+ "@radix-ui/react-primitive": "1.0.3",
623
+ "@radix-ui/react-use-callback-ref": "1.0.1",
624
+ "@radix-ui/react-use-layout-effect": "1.0.1",
625
+ "@radix-ui/react-use-rect": "1.0.1",
626
+ "@radix-ui/react-use-size": "1.0.1",
627
+ "@radix-ui/rect": "1.0.1"
628
+ },
629
+ "peerDependencies": {
630
+ "@types/react": "*",
631
+ "@types/react-dom": "*",
632
+ "react": "^16.8 || ^17.0 || ^18.0",
633
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
634
+ },
635
+ "peerDependenciesMeta": {
636
+ "@types/react": {
637
+ "optional": true
638
+ },
639
+ "@types/react-dom": {
640
+ "optional": true
641
+ }
642
+ }
643
+ },
644
+ "node_modules/@radix-ui/react-portal": {
645
+ "version": "1.0.4",
646
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-portal/-/react-portal-1.0.4.tgz",
647
+ "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==",
648
+ "dependencies": {
649
+ "@babel/runtime": "^7.13.10",
650
+ "@radix-ui/react-primitive": "1.0.3"
651
+ },
652
+ "peerDependencies": {
653
+ "@types/react": "*",
654
+ "@types/react-dom": "*",
655
+ "react": "^16.8 || ^17.0 || ^18.0",
656
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
657
+ },
658
+ "peerDependenciesMeta": {
659
+ "@types/react": {
660
+ "optional": true
661
+ },
662
+ "@types/react-dom": {
663
+ "optional": true
664
+ }
665
+ }
666
+ },
667
+ "node_modules/@radix-ui/react-presence": {
668
+ "version": "1.0.1",
669
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-presence/-/react-presence-1.0.1.tgz",
670
+ "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==",
671
+ "dependencies": {
672
+ "@babel/runtime": "^7.13.10",
673
+ "@radix-ui/react-compose-refs": "1.0.1",
674
+ "@radix-ui/react-use-layout-effect": "1.0.1"
675
+ },
676
+ "peerDependencies": {
677
+ "@types/react": "*",
678
+ "@types/react-dom": "*",
679
+ "react": "^16.8 || ^17.0 || ^18.0",
680
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
681
+ },
682
+ "peerDependenciesMeta": {
683
+ "@types/react": {
684
+ "optional": true
685
+ },
686
+ "@types/react-dom": {
687
+ "optional": true
688
+ }
689
+ }
690
+ },
691
+ "node_modules/@radix-ui/react-primitive": {
692
+ "version": "1.0.3",
693
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
694
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
695
+ "dependencies": {
696
+ "@babel/runtime": "^7.13.10",
697
+ "@radix-ui/react-slot": "1.0.2"
698
+ },
699
+ "peerDependencies": {
700
+ "@types/react": "*",
701
+ "@types/react-dom": "*",
702
+ "react": "^16.8 || ^17.0 || ^18.0",
703
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
704
+ },
705
+ "peerDependenciesMeta": {
706
+ "@types/react": {
707
+ "optional": true
708
+ },
709
+ "@types/react-dom": {
710
+ "optional": true
711
+ }
712
+ }
713
+ },
714
+ "node_modules/@radix-ui/react-slot": {
715
+ "version": "1.0.2",
716
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
717
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
718
+ "dependencies": {
719
+ "@babel/runtime": "^7.13.10",
720
+ "@radix-ui/react-compose-refs": "1.0.1"
721
+ },
722
+ "peerDependencies": {
723
+ "@types/react": "*",
724
+ "react": "^16.8 || ^17.0 || ^18.0"
725
+ },
726
+ "peerDependenciesMeta": {
727
+ "@types/react": {
728
+ "optional": true
729
+ }
730
+ }
731
+ },
732
+ "node_modules/@radix-ui/react-tooltip": {
733
+ "version": "1.0.7",
734
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz",
735
+ "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==",
736
+ "dependencies": {
737
+ "@babel/runtime": "^7.13.10",
738
+ "@radix-ui/primitive": "1.0.1",
739
+ "@radix-ui/react-compose-refs": "1.0.1",
740
+ "@radix-ui/react-context": "1.0.1",
741
+ "@radix-ui/react-dismissable-layer": "1.0.5",
742
+ "@radix-ui/react-id": "1.0.1",
743
+ "@radix-ui/react-popper": "1.1.3",
744
+ "@radix-ui/react-portal": "1.0.4",
745
+ "@radix-ui/react-presence": "1.0.1",
746
+ "@radix-ui/react-primitive": "1.0.3",
747
+ "@radix-ui/react-slot": "1.0.2",
748
+ "@radix-ui/react-use-controllable-state": "1.0.1",
749
+ "@radix-ui/react-visually-hidden": "1.0.3"
750
+ },
751
+ "peerDependencies": {
752
+ "@types/react": "*",
753
+ "@types/react-dom": "*",
754
+ "react": "^16.8 || ^17.0 || ^18.0",
755
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
756
+ },
757
+ "peerDependenciesMeta": {
758
+ "@types/react": {
759
+ "optional": true
760
+ },
761
+ "@types/react-dom": {
762
+ "optional": true
763
+ }
764
+ }
765
+ },
766
+ "node_modules/@radix-ui/react-use-callback-ref": {
767
+ "version": "1.0.1",
768
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
769
+ "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==",
770
+ "dependencies": {
771
+ "@babel/runtime": "^7.13.10"
772
+ },
773
+ "peerDependencies": {
774
+ "@types/react": "*",
775
+ "react": "^16.8 || ^17.0 || ^18.0"
776
+ },
777
+ "peerDependenciesMeta": {
778
+ "@types/react": {
779
+ "optional": true
780
+ }
781
+ }
782
+ },
783
+ "node_modules/@radix-ui/react-use-controllable-state": {
784
+ "version": "1.0.1",
785
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz",
786
+ "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==",
787
+ "dependencies": {
788
+ "@babel/runtime": "^7.13.10",
789
+ "@radix-ui/react-use-callback-ref": "1.0.1"
790
+ },
791
+ "peerDependencies": {
792
+ "@types/react": "*",
793
+ "react": "^16.8 || ^17.0 || ^18.0"
794
+ },
795
+ "peerDependenciesMeta": {
796
+ "@types/react": {
797
+ "optional": true
798
+ }
799
+ }
800
+ },
801
+ "node_modules/@radix-ui/react-use-escape-keydown": {
802
+ "version": "1.0.3",
803
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz",
804
+ "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==",
805
+ "dependencies": {
806
+ "@babel/runtime": "^7.13.10",
807
+ "@radix-ui/react-use-callback-ref": "1.0.1"
808
+ },
809
+ "peerDependencies": {
810
+ "@types/react": "*",
811
+ "react": "^16.8 || ^17.0 || ^18.0"
812
+ },
813
+ "peerDependenciesMeta": {
814
+ "@types/react": {
815
+ "optional": true
816
+ }
817
+ }
818
+ },
819
+ "node_modules/@radix-ui/react-use-layout-effect": {
820
+ "version": "1.0.1",
821
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz",
822
+ "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==",
823
+ "dependencies": {
824
+ "@babel/runtime": "^7.13.10"
825
+ },
826
+ "peerDependencies": {
827
+ "@types/react": "*",
828
+ "react": "^16.8 || ^17.0 || ^18.0"
829
+ },
830
+ "peerDependenciesMeta": {
831
+ "@types/react": {
832
+ "optional": true
833
+ }
834
+ }
835
+ },
836
+ "node_modules/@radix-ui/react-use-rect": {
837
+ "version": "1.0.1",
838
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz",
839
+ "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==",
840
+ "dependencies": {
841
+ "@babel/runtime": "^7.13.10",
842
+ "@radix-ui/rect": "1.0.1"
843
+ },
844
+ "peerDependencies": {
845
+ "@types/react": "*",
846
+ "react": "^16.8 || ^17.0 || ^18.0"
847
+ },
848
+ "peerDependenciesMeta": {
849
+ "@types/react": {
850
+ "optional": true
851
+ }
852
+ }
853
+ },
854
+ "node_modules/@radix-ui/react-use-size": {
855
+ "version": "1.0.1",
856
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz",
857
+ "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==",
858
+ "dependencies": {
859
+ "@babel/runtime": "^7.13.10",
860
+ "@radix-ui/react-use-layout-effect": "1.0.1"
861
+ },
862
+ "peerDependencies": {
863
+ "@types/react": "*",
864
+ "react": "^16.8 || ^17.0 || ^18.0"
865
+ },
866
+ "peerDependenciesMeta": {
867
+ "@types/react": {
868
+ "optional": true
869
+ }
870
+ }
871
+ },
872
+ "node_modules/@radix-ui/react-visually-hidden": {
873
+ "version": "1.0.3",
874
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz",
875
+ "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==",
876
+ "dependencies": {
877
+ "@babel/runtime": "^7.13.10",
878
+ "@radix-ui/react-primitive": "1.0.3"
879
+ },
880
+ "peerDependencies": {
881
+ "@types/react": "*",
882
+ "@types/react-dom": "*",
883
+ "react": "^16.8 || ^17.0 || ^18.0",
884
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
885
+ },
886
+ "peerDependenciesMeta": {
887
+ "@types/react": {
888
+ "optional": true
889
+ },
890
+ "@types/react-dom": {
891
+ "optional": true
892
+ }
893
+ }
894
+ },
895
+ "node_modules/@radix-ui/rect": {
896
+ "version": "1.0.1",
897
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@radix-ui/rect/-/rect-1.0.1.tgz",
898
+ "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==",
899
+ "dependencies": {
900
+ "@babel/runtime": "^7.13.10"
901
+ }
902
+ },
903
"node_modules/@rushstack/eslint-patch": {
904
"version": "1.10.2",
905
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz",
@@ -379,6 +913,46 @@
913
"tslib": "^2.4.0"
914
}
915
},
916
+ "node_modules/@tailwindcss/forms": {
917
+ "version": "0.5.3",
918
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@tailwindcss/forms/-/forms-0.5.3.tgz",
919
+ "integrity": "sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==",
920
+ "dev": true,
921
+ "dependencies": {
922
+ "mini-svg-data-uri": "^1.2.3"
923
+ },
924
+ "peerDependencies": {
925
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
926
+ }
927
+ },
928
+ "node_modules/@tailwindcss/typography": {
929
+ "version": "0.5.9",
930
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@tailwindcss/typography/-/typography-0.5.9.tgz",
931
+ "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==",
932
+ "dev": true,
933
+ "dependencies": {
934
+ "lodash.castarray": "^4.4.0",
935
+ "lodash.isplainobject": "^4.0.6",
936
+ "lodash.merge": "^4.6.2",
937
+ "postcss-selector-parser": "6.0.10"
938
+ },
939
+ "peerDependencies": {
940
+ "tailwindcss": ">=3.0.0 || insiders"
941
+ }
942
+ },
943
+ "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
944
+ "version": "6.0.10",
945
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
946
+ "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
947
+ "dev": true,
948
+ "dependencies": {
949
+ "cssesc": "^3.0.0",
950
+ "util-deprecate": "^1.0.2"
951
+ },
952
+ "engines": {
953
+ "node": ">=4"
954
+ }
955
+ },
956
"node_modules/@tauri-apps/api": {
957
"version": "1.5.3",
958
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@tauri-apps/api/-/api-1.5.3.tgz",
@@ -573,6 +1147,12 @@
1147
"node": ">= 10"
1148
}
1149
},
1150
+ "node_modules/@types/estree": {
1151
+ "version": "1.0.5",
1152
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@types/estree/-/estree-1.0.5.tgz",
1153
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
1154
+ "peer": true
1155
+ },
1156
"node_modules/@types/json5": {
1157
"version": "0.0.29",
1158
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@types/json5/-/json5-0.0.29.tgz",
@@ -701,10 +1281,121 @@
1281
"url": "https://opencollective.com/typescript-eslint"
1282
}
1283
},
1284
+ "node_modules/@vue/compiler-core": {
1285
+ "version": "3.4.23",
1286
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/compiler-core/-/compiler-core-3.4.23.tgz",
1287
+ "integrity": "sha512-HAFmuVEwNqNdmk+w4VCQ2pkLk1Vw4XYiiyxEp3z/xvl14aLTUBw2OfVH3vBcx+FtGsynQLkkhK410Nah1N2yyQ==",
1288
+ "peer": true,
1289
+ "dependencies": {
1290
+ "@babel/parser": "^7.24.1",
1291
+ "@vue/shared": "3.4.23",
1292
+ "entities": "^4.5.0",
1293
+ "estree-walker": "^2.0.2",
1294
+ "source-map-js": "^1.2.0"
1295
+ }
1296
+ },
1297
+ "node_modules/@vue/compiler-core/node_modules/estree-walker": {
1298
+ "version": "2.0.2",
1299
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/estree-walker/-/estree-walker-2.0.2.tgz",
1300
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
1301
+ "peer": true
1302
+ },
1303
+ "node_modules/@vue/compiler-dom": {
1304
+ "version": "3.4.23",
1305
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/compiler-dom/-/compiler-dom-3.4.23.tgz",
1306
+ "integrity": "sha512-t0b9WSTnCRrzsBGrDd1LNR5HGzYTr7LX3z6nNBG+KGvZLqrT0mY6NsMzOqlVMBKKXKVuusbbB5aOOFgTY+senw==",
1307
+ "peer": true,
1308
+ "dependencies": {
1309
+ "@vue/compiler-core": "3.4.23",
1310
+ "@vue/shared": "3.4.23"
1311
+ }
1312
+ },
1313
+ "node_modules/@vue/compiler-sfc": {
1314
+ "version": "3.4.23",
1315
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/compiler-sfc/-/compiler-sfc-3.4.23.tgz",
1316
+ "integrity": "sha512-fSDTKTfzaRX1kNAUiaj8JB4AokikzStWgHooMhaxyjZerw624L+IAP/fvI4ZwMpwIh8f08PVzEnu4rg8/Npssw==",
1317
+ "peer": true,
1318
+ "dependencies": {
1319
+ "@babel/parser": "^7.24.1",
1320
+ "@vue/compiler-core": "3.4.23",
1321
+ "@vue/compiler-dom": "3.4.23",
1322
+ "@vue/compiler-ssr": "3.4.23",
1323
+ "@vue/shared": "3.4.23",
1324
+ "estree-walker": "^2.0.2",
1325
+ "magic-string": "^0.30.8",
1326
+ "postcss": "^8.4.38",
1327
+ "source-map-js": "^1.2.0"
1328
+ }
1329
+ },
1330
+ "node_modules/@vue/compiler-sfc/node_modules/estree-walker": {
1331
+ "version": "2.0.2",
1332
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/estree-walker/-/estree-walker-2.0.2.tgz",
1333
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
1334
+ "peer": true
1335
+ },
1336
+ "node_modules/@vue/compiler-ssr": {
1337
+ "version": "3.4.23",
1338
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/compiler-ssr/-/compiler-ssr-3.4.23.tgz",
1339
+ "integrity": "sha512-hb6Uj2cYs+tfqz71Wj6h3E5t6OKvb4MVcM2Nl5i/z1nv1gjEhw+zYaNOV+Xwn+SSN/VZM0DgANw5TuJfxfezPg==",
1340
+ "peer": true,
1341
+ "dependencies": {
1342
+ "@vue/compiler-dom": "3.4.23",
1343
+ "@vue/shared": "3.4.23"
1344
+ }
1345
+ },
1346
+ "node_modules/@vue/reactivity": {
1347
+ "version": "3.4.23",
1348
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/reactivity/-/reactivity-3.4.23.tgz",
1349
+ "integrity": "sha512-GlXR9PL+23fQ3IqnbSQ8OQKLodjqCyoCrmdLKZk3BP7jN6prWheAfU7a3mrltewTkoBm+N7qMEb372VHIkQRMQ==",
1350
+ "peer": true,
1351
+ "dependencies": {
1352
+ "@vue/shared": "3.4.23"
1353
+ }
1354
+ },
1355
+ "node_modules/@vue/runtime-core": {
1356
+ "version": "3.4.23",
1357
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/runtime-core/-/runtime-core-3.4.23.tgz",
1358
+ "integrity": "sha512-FeQ9MZEXoFzFkFiw9MQQ/FWs3srvrP+SjDKSeRIiQHIhtkzoj0X4rWQlRNHbGuSwLra6pMyjAttwixNMjc/xLw==",
1359
+ "peer": true,
1360
+ "dependencies": {
1361
+ "@vue/reactivity": "3.4.23",
1362
+ "@vue/shared": "3.4.23"
1363
+ }
1364
+ },
1365
+ "node_modules/@vue/runtime-dom": {
1366
+ "version": "3.4.23",
1367
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/runtime-dom/-/runtime-dom-3.4.23.tgz",
1368
+ "integrity": "sha512-RXJFwwykZWBkMiTPSLEWU3kgVLNAfActBfWFlZd0y79FTUxexogd0PLG4HH2LfOktjRxV47Nulygh0JFXe5f9A==",
1369
+ "peer": true,
1370
+ "dependencies": {
1371
+ "@vue/runtime-core": "3.4.23",
1372
+ "@vue/shared": "3.4.23",
1373
+ "csstype": "^3.1.3"
1374
+ }
1375
+ },
1376
+ "node_modules/@vue/server-renderer": {
1377
+ "version": "3.4.23",
1378
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/server-renderer/-/server-renderer-3.4.23.tgz",
1379
+ "integrity": "sha512-LDwGHtnIzvKFNS8dPJ1SSU5Gvm36p2ck8wCZc52fc3k/IfjKcwCyrWEf0Yag/2wTFUBXrqizfhK9c/mC367dXQ==",
1380
+ "peer": true,
1381
+ "dependencies": {
1382
+ "@vue/compiler-ssr": "3.4.23",
1383
+ "@vue/shared": "3.4.23"
1384
+ },
1385
+ "peerDependencies": {
1386
+ "vue": "3.4.23"
1387
+ }
1388
+ },
1389
+ "node_modules/@vue/shared": {
1390
+ "version": "3.4.23",
1391
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/@vue/shared/-/shared-3.4.23.tgz",
1392
+ "integrity": "sha512-wBQ0gvf+SMwsCQOyusNw/GoXPV47WGd1xB5A1Pgzy0sQ3Bi5r5xm3n+92y3gCnB3MWqnRDdvfkRGxhKtbBRNgg==",
1393
+ "peer": true
1394
+ },
1395
"node_modules/acorn": {
705
- "version": "8.8.1",
706
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
707
- "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
1396
+ "version": "8.11.3",
1397
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/acorn/-/acorn-8.11.3.tgz",
1398
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
1399
"bin": {
1400
"acorn": "bin/acorn"
1401
},
@@ -720,6 +1411,54 @@
1411
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1412
}
1413
},
1414
+ "node_modules/ai": {
1415
+ "version": "2.2.37",
1416
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/ai/-/ai-2.2.37.tgz",
1417
+ "integrity": "sha512-JIYm5N1muGVqBqWnvkt29FmXhESoO5TcDxw74OE41SsM+uIou6NPDDs0XWb/ABcd1gmp6k5zym64KWMPM2xm0A==",
1418
+ "dependencies": {
1419
+ "eventsource-parser": "1.0.0",
1420
+ "nanoid": "3.3.6",
1421
+ "solid-swr-store": "0.10.7",
1422
+ "sswr": "2.0.0",
1423
+ "swr": "2.2.0",
1424
+ "swr-store": "0.10.6",
1425
+ "swrv": "1.0.4"
1426
+ },
1427
+ "engines": {
1428
+ "node": ">=14.6"
1429
+ },
1430
+ "peerDependencies": {
1431
+ "react": "^18.2.0",
1432
+ "solid-js": "^1.7.7",
1433
+ "svelte": "^3.0.0 || ^4.0.0",
1434
+ "vue": "^3.3.4"
1435
+ },
1436
+ "peerDependenciesMeta": {
1437
+ "react": {
1438
+ "optional": true
1439
+ },
1440
+ "solid-js": {
1441
+ "optional": true
1442
+ },
1443
+ "svelte": {
1444
+ "optional": true
1445
+ },
1446
+ "vue": {
1447
+ "optional": true
1448
+ }
1449
+ }
1450
+ },
1451
+ "node_modules/ai/node_modules/nanoid": {
1452
+ "version": "3.3.6",
1453
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/nanoid/-/nanoid-3.3.6.tgz",
1454
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
1455
+ "bin": {
1456
+ "nanoid": "bin/nanoid.cjs"
1457
+ },
1458
+ "engines": {
1459
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1460
+ }
1461
+ },
1462
"node_modules/ajv": {
1463
"version": "6.12.6",
1464
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -757,17 +1496,42 @@
1496
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
1497
}
1498
},
1499
+ "node_modules/any-promise": {
1500
+ "version": "1.3.0",
1501
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/any-promise/-/any-promise-1.3.0.tgz",
1502
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1503
+ "dev": true
1504
+ },
1505
+ "node_modules/anymatch": {
1506
+ "version": "3.1.3",
1507
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/anymatch/-/anymatch-3.1.3.tgz",
1508
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1509
+ "dev": true,
1510
+ "dependencies": {
1511
+ "normalize-path": "^3.0.0",
1512
+ "picomatch": "^2.0.4"
1513
+ },
1514
+ "engines": {
1515
+ "node": ">= 8"
1516
+ }
1517
+ },
1518
+ "node_modules/arg": {
1519
+ "version": "5.0.2",
1520
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/arg/-/arg-5.0.2.tgz",
1521
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1522
+ "dev": true
1523
+ },
1524
"node_modules/argparse": {
1525
"version": "2.0.1",
1526
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1527
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
1528
},
1529
"node_modules/aria-query": {
766
- "version": "5.1.3",
767
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
768
- "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
1530
+ "version": "5.3.0",
1531
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/aria-query/-/aria-query-5.3.0.tgz",
1532
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
1533
"dependencies": {
770
- "deep-equal": "^2.0.5"
1534
+ "dequal": "^2.0.3"
1535
}
1536
},
1537
"node_modules/array-buffer-byte-length": {
@@ -912,6 +1676,29 @@
1676
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
1677
"integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
1678
},
1679
+ "node_modules/autoprefixer": {
1680
+ "version": "10.4.19",
1681
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/autoprefixer/-/autoprefixer-10.4.19.tgz",
1682
+ "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
1683
+ "dev": true,
1684
+ "dependencies": {
1685
+ "browserslist": "^4.23.0",
1686
+ "caniuse-lite": "^1.0.30001599",
1687
+ "fraction.js": "^4.3.7",
1688
+ "normalize-range": "^0.1.2",
1689
+ "picocolors": "^1.0.0",
1690
+ "postcss-value-parser": "^4.2.0"
1691
+ },
1692
+ "bin": {
1693
+ "autoprefixer": "bin/autoprefixer"
1694
+ },
1695
+ "engines": {
1696
+ "node": "^10 || ^12 || >=14"
1697
+ },
1698
+ "peerDependencies": {
1699
+ "postcss": "^8.1.0"
1700
+ }
1701
+ },
1702
"node_modules/available-typed-arrays": {
1703
"version": "1.0.7",
1704
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -944,6 +1731,15 @@
1731
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1732
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
1733
},
1734
+ "node_modules/binary-extensions": {
1735
+ "version": "2.3.0",
1736
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/binary-extensions/-/binary-extensions-2.3.0.tgz",
1737
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
1738
+ "dev": true,
1739
+ "engines": {
1740
+ "node": ">=8"
1741
+ }
1742
+ },
1743
"node_modules/brace-expansion": {
1744
"version": "1.1.11",
1745
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -964,6 +1760,24 @@
1760
"node": ">=8"
1761
}
1762
},
1763
+ "node_modules/browserslist": {
1764
+ "version": "4.23.0",
1765
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/browserslist/-/browserslist-4.23.0.tgz",
1766
+ "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
1767
+ "dev": true,
1768
+ "dependencies": {
1769
+ "caniuse-lite": "^1.0.30001587",
1770
+ "electron-to-chromium": "^1.4.668",
1771
+ "node-releases": "^2.0.14",
1772
+ "update-browserslist-db": "^1.0.13"
1773
+ },
1774
+ "bin": {
1775
+ "browserslist": "cli.js"
1776
+ },
1777
+ "engines": {
1778
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1779
+ }
1780
+ },
1781
"node_modules/busboy": {
1782
"version": "1.6.0",
1783
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/busboy/-/busboy-1.6.0.tgz",
@@ -998,6 +1812,15 @@
1812
"node": ">=6"
1813
}
1814
},
1815
+ "node_modules/camelcase-css": {
1816
+ "version": "2.0.1",
1817
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/camelcase-css/-/camelcase-css-2.0.1.tgz",
1818
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1819
+ "dev": true,
1820
+ "engines": {
1821
+ "node": ">= 6"
1822
+ }
1823
+ },
1824
"node_modules/caniuse-lite": {
1825
"version": "1.0.30001609",
1826
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/caniuse-lite/-/caniuse-lite-1.0.30001609.tgz",
@@ -1018,11 +1841,81 @@
1841
"url": "https://github.com/chalk/chalk?sponsor=1"
1842
}
1843
},
1844
+ "node_modules/chokidar": {
1845
+ "version": "3.6.0",
1846
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/chokidar/-/chokidar-3.6.0.tgz",
1847
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
1848
+ "dev": true,
1849
+ "dependencies": {
1850
+ "anymatch": "~3.1.2",
1851
+ "braces": "~3.0.2",
1852
+ "glob-parent": "~5.1.2",
1853
+ "is-binary-path": "~2.1.0",
1854
+ "is-glob": "~4.0.1",
1855
+ "normalize-path": "~3.0.0",
1856
+ "readdirp": "~3.6.0"
1857
+ },
1858
+ "engines": {
1859
+ "node": ">= 8.10.0"
1860
+ },
1861
+ "optionalDependencies": {
1862
+ "fsevents": "~2.3.2"
1863
+ }
1864
+ },
1865
+ "node_modules/chokidar/node_modules/glob-parent": {
1866
+ "version": "5.1.2",
1867
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/glob-parent/-/glob-parent-5.1.2.tgz",
1868
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1869
+ "dev": true,
1870
+ "dependencies": {
1871
+ "is-glob": "^4.0.1"
1872
+ },
1873
+ "engines": {
1874
+ "node": ">= 6"
1875
+ }
1876
+ },
1877
+ "node_modules/class-variance-authority": {
1878
+ "version": "0.7.0",
1879
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
1880
+ "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==",
1881
+ "dependencies": {
1882
+ "clsx": "2.0.0"
1883
+ }
1884
+ },
1885
+ "node_modules/class-variance-authority/node_modules/clsx": {
1886
+ "version": "2.0.0",
1887
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/clsx/-/clsx-2.0.0.tgz",
1888
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
1889
+ "engines": {
1890
+ "node": ">=6"
1891
+ }
1892
+ },
1893
"node_modules/client-only": {
1894
"version": "0.0.1",
1895
"resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1896
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1897
},
1898
+ "node_modules/clsx": {
1899
+ "version": "1.2.1",
1900
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/clsx/-/clsx-1.2.1.tgz",
1901
+ "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
1902
+ "engines": {
1903
+ "node": ">=6"
1904
+ }
1905
+ },
1906
+ "node_modules/code-red": {
1907
+ "version": "1.0.4",
1908
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/code-red/-/code-red-1.0.4.tgz",
1909
+ "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
1910
+ "peer": true,
1911
+ "dependencies": {
1912
+ "@jridgewell/sourcemap-codec": "^1.4.15",
1913
+ "@types/estree": "^1.0.1",
1914
+ "acorn": "^8.10.0",
1915
+ "estree-walker": "^3.0.3",
1916
+ "periscopic": "^3.1.0"
1917
+ }
1918
+ },
1919
"node_modules/color-convert": {
1920
"version": "2.0.1",
1921
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -1039,6 +1932,15 @@
1932
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1933
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1934
},
1935
+ "node_modules/commander": {
1936
+ "version": "4.1.1",
1937
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/commander/-/commander-4.1.1.tgz",
1938
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1939
+ "dev": true,
1940
+ "engines": {
1941
+ "node": ">= 6"
1942
+ }
1943
+ },
1944
"node_modules/concat-map": {
1945
"version": "0.0.1",
1946
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1057,10 +1959,35 @@
1959
"node": ">= 8"
1960
}
1961
},
1962
+ "node_modules/css-tree": {
1963
+ "version": "2.3.1",
1964
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/css-tree/-/css-tree-2.3.1.tgz",
1965
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
1966
+ "peer": true,
1967
+ "dependencies": {
1968
+ "mdn-data": "2.0.30",
1969
+ "source-map-js": "^1.0.1"
1970
+ },
1971
+ "engines": {
1972
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
1973
+ }
1974
+ },
1975
+ "node_modules/cssesc": {
1976
+ "version": "3.0.0",
1977
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/cssesc/-/cssesc-3.0.0.tgz",
1978
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1979
+ "dev": true,
1980
+ "bin": {
1981
+ "cssesc": "bin/cssesc"
1982
+ },
1983
+ "engines": {
1984
+ "node": ">=4"
1985
+ }
1986
+ },
1987
"node_modules/csstype": {
1061
- "version": "3.1.1",
1062
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
1063
- "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
1988
+ "version": "3.1.3",
1989
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/csstype/-/csstype-3.1.3.tgz",
1990
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
1991
},
1992
"node_modules/damerau-levenshtein": {
1993
"version": "1.0.8",
@@ -1188,6 +2115,20 @@
2115
"node": ">= 0.4"
2116
}
2117
},
2118
+ "node_modules/dequal": {
2119
+ "version": "2.0.3",
2120
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/dequal/-/dequal-2.0.3.tgz",
2121
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
2122
+ "engines": {
2123
+ "node": ">=6"
2124
+ }
2125
+ },
2126
+ "node_modules/didyoumean": {
2127
+ "version": "1.2.2",
2128
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/didyoumean/-/didyoumean-1.2.2.tgz",
2129
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
2130
+ "dev": true
2131
+ },
2132
"node_modules/dir-glob": {
2133
"version": "3.0.1",
2134
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -1199,6 +2140,12 @@
2140
"node": ">=8"
2141
}
2142
},
2143
+ "node_modules/dlv": {
2144
+ "version": "1.1.3",
2145
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/dlv/-/dlv-1.1.3.tgz",
2146
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
2147
+ "dev": true
2148
+ },
2149
"node_modules/doctrine": {
2150
"version": "3.0.0",
2151
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -1215,6 +2162,12 @@
2162
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
2163
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
2164
},
2165
+ "node_modules/electron-to-chromium": {
2166
+ "version": "1.4.736",
2167
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/electron-to-chromium/-/electron-to-chromium-1.4.736.tgz",
2168
+ "integrity": "sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==",
2169
+ "dev": true
2170
+ },
2171
"node_modules/emoji-regex": {
2172
"version": "9.2.2",
2173
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@@ -1232,6 +2185,15 @@
2185
"node": ">=10.13.0"
2186
}
2187
},
2188
+ "node_modules/entities": {
2189
+ "version": "4.5.0",
2190
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/entities/-/entities-4.5.0.tgz",
2191
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
2192
+ "peer": true,
2193
+ "engines": {
2194
+ "node": ">=0.12"
2195
+ }
2196
+ },
2197
"node_modules/es-abstract": {
2198
"version": "1.23.3",
2199
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/es-abstract/-/es-abstract-1.23.3.tgz",
@@ -1398,6 +2360,15 @@
2360
"url": "https://github.com/sponsors/ljharb"
2361
}
2362
},
2363
+ "node_modules/escalade": {
2364
+ "version": "3.1.2",
2365
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/escalade/-/escalade-3.1.2.tgz",
2366
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
2367
+ "dev": true,
2368
+ "engines": {
2369
+ "node": ">=6"
2370
+ }
2371
+ },
2372
"node_modules/escape-string-regexp": {
2373
"version": "4.0.0",
2374
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -1843,6 +2814,15 @@
2814
"node": ">=4.0"
2815
}
2816
},
2817
+ "node_modules/estree-walker": {
2818
+ "version": "3.0.3",
2819
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/estree-walker/-/estree-walker-3.0.3.tgz",
2820
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
2821
+ "peer": true,
2822
+ "dependencies": {
2823
+ "@types/estree": "^1.0.0"
2824
+ }
2825
+ },
2826
"node_modules/esutils": {
2827
"version": "2.0.3",
2828
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -1851,15 +2831,23 @@
2831
"node": ">=0.10.0"
2832
}
2833
},
2834
+ "node_modules/eventsource-parser": {
2835
+ "version": "1.0.0",
2836
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/eventsource-parser/-/eventsource-parser-1.0.0.tgz",
2837
+ "integrity": "sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==",
2838
+ "engines": {
2839
+ "node": ">=14.18"
2840
+ }
2841
+ },
2842
"node_modules/fast-deep-equal": {
2843
"version": "3.1.3",
2844
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2845
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
2846
},
2847
"node_modules/fast-glob": {
1860
- "version": "3.2.12",
1861
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
1862
- "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
2848
+ "version": "3.3.2",
2849
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/fast-glob/-/fast-glob-3.3.2.tgz",
2850
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
2851
"dependencies": {
2852
"@nodelib/fs.stat": "^2.0.2",
2853
"@nodelib/fs.walk": "^1.2.3",
@@ -1974,11 +2962,34 @@
2962
"node": ">=14"
2963
}
2964
},
2965
+ "node_modules/fraction.js": {
2966
+ "version": "4.3.7",
2967
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/fraction.js/-/fraction.js-4.3.7.tgz",
2968
+ "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
2969
+ "dev": true,
2970
+ "engines": {
2971
+ "node": "*"
2972
+ }
2973
+ },
2974
"node_modules/fs.realpath": {
2975
"version": "1.0.0",
2976
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
2977
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
2978
},
2979
+ "node_modules/fsevents": {
2980
+ "version": "2.3.3",
2981
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/fsevents/-/fsevents-2.3.3.tgz",
2982
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
2983
+ "dev": true,
2984
+ "hasInstallScript": true,
2985
+ "optional": true,
2986
+ "os": [
2987
+ "darwin"
2988
+ ],
2989
+ "engines": {
2990
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2991
+ }
2992
+ },
2993
"node_modules/function-bind": {
2994
"version": "1.1.2",
2995
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/function-bind/-/function-bind-1.1.2.tgz",
@@ -2129,6 +3140,14 @@
3140
"resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
3141
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
3142
},
3143
+ "node_modules/goober": {
3144
+ "version": "2.1.14",
3145
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/goober/-/goober-2.1.14.tgz",
3146
+ "integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==",
3147
+ "peerDependencies": {
3148
+ "csstype": "^3.0.10"
3149
+ }
3150
+ },
3151
"node_modules/gopd": {
3152
"version": "1.0.1",
3153
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -2333,6 +3352,18 @@
3352
"url": "https://github.com/sponsors/ljharb"
3353
}
3354
},
3355
+ "node_modules/is-binary-path": {
3356
+ "version": "2.1.0",
3357
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/is-binary-path/-/is-binary-path-2.1.0.tgz",
3358
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
3359
+ "dev": true,
3360
+ "dependencies": {
3361
+ "binary-extensions": "^2.0.0"
3362
+ },
3363
+ "engines": {
3364
+ "node": ">=8"
3365
+ }
3366
+ },
3367
"node_modules/is-boolean-object": {
3368
"version": "1.1.2",
3369
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
@@ -2498,6 +3529,15 @@
3529
"node": ">=8"
3530
}
3531
},
3532
+ "node_modules/is-reference": {
3533
+ "version": "3.0.2",
3534
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/is-reference/-/is-reference-3.0.2.tgz",
3535
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
3536
+ "peer": true,
3537
+ "dependencies": {
3538
+ "@types/estree": "*"
3539
+ }
3540
+ },
3541
"node_modules/is-regex": {
3542
"version": "1.1.4",
3543
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -2649,6 +3689,15 @@
3689
"@pkgjs/parseargs": "^0.11.0"
3690
}
3691
},
3692
+ "node_modules/jiti": {
3693
+ "version": "1.21.0",
3694
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/jiti/-/jiti-1.21.0.tgz",
3695
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
3696
+ "dev": true,
3697
+ "bin": {
3698
+ "jiti": "bin/jiti.js"
3699
+ }
3700
+ },
3701
"node_modules/js-sdsl": {
3702
"version": "4.2.0",
3703
"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
@@ -2732,6 +3781,27 @@
3781
"node": ">= 0.8.0"
3782
}
3783
},
3784
+ "node_modules/lilconfig": {
3785
+ "version": "2.1.0",
3786
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/lilconfig/-/lilconfig-2.1.0.tgz",
3787
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
3788
+ "dev": true,
3789
+ "engines": {
3790
+ "node": ">=10"
3791
+ }
3792
+ },
3793
+ "node_modules/lines-and-columns": {
3794
+ "version": "1.2.4",
3795
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
3796
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
3797
+ "dev": true
3798
+ },
3799
+ "node_modules/locate-character": {
3800
+ "version": "3.0.0",
3801
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/locate-character/-/locate-character-3.0.0.tgz",
3802
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
3803
+ "peer": true
3804
+ },
3805
"node_modules/locate-path": {
3806
"version": "6.0.0",
3807
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -2746,6 +3816,18 @@
3816
"url": "https://github.com/sponsors/sindresorhus"
3817
}
3818
},
3819
+ "node_modules/lodash.castarray": {
3820
+ "version": "4.4.0",
3821
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
3822
+ "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
3823
+ "dev": true
3824
+ },
3825
+ "node_modules/lodash.isplainobject": {
3826
+ "version": "4.0.6",
3827
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
3828
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
3829
+ "dev": true
3830
+ },
3831
"node_modules/lodash.merge": {
3832
"version": "4.6.2",
3833
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -2773,6 +3855,21 @@
3855
"node": ">=10"
3856
}
3857
},
3858
+ "node_modules/magic-string": {
3859
+ "version": "0.30.10",
3860
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/magic-string/-/magic-string-0.30.10.tgz",
3861
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
3862
+ "peer": true,
3863
+ "dependencies": {
3864
+ "@jridgewell/sourcemap-codec": "^1.4.15"
3865
+ }
3866
+ },
3867
+ "node_modules/mdn-data": {
3868
+ "version": "2.0.30",
3869
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/mdn-data/-/mdn-data-2.0.30.tgz",
3870
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
3871
+ "peer": true
3872
+ },
3873
"node_modules/merge2": {
3874
"version": "1.4.1",
3875
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -2793,6 +3890,15 @@
3890
"node": ">=8.6"
3891
}
3892
},
3893
+ "node_modules/mini-svg-data-uri": {
3894
+ "version": "1.4.4",
3895
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
3896
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
3897
+ "dev": true,
3898
+ "bin": {
3899
+ "mini-svg-data-uri": "cli.js"
3900
+ }
3901
+ },
3902
"node_modules/minimatch": {
3903
"version": "3.1.2",
3904
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -2822,6 +3928,17 @@
3928
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3929
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
3930
},
3931
+ "node_modules/mz": {
3932
+ "version": "2.7.0",
3933
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/mz/-/mz-2.7.0.tgz",
3934
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
3935
+ "dev": true,
3936
+ "dependencies": {
3937
+ "any-promise": "^1.0.0",
3938
+ "object-assign": "^4.0.1",
3939
+ "thenify-all": "^1.0.0"
3940
+ }
3941
+ },
3942
"node_modules/nanoid": {
3943
"version": "3.3.7",
3944
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/nanoid/-/nanoid-3.3.7.tgz",
@@ -2883,6 +4000,43 @@
4000
}
4001
}
4002
},
4003
+ "node_modules/next/node_modules/postcss": {
4004
+ "version": "8.4.31",
4005
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss/-/postcss-8.4.31.tgz",
4006
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
4007
+ "dependencies": {
4008
+ "nanoid": "^3.3.6",
4009
+ "picocolors": "^1.0.0",
4010
+ "source-map-js": "^1.0.2"
4011
+ },
4012
+ "engines": {
4013
+ "node": "^10 || ^12 || >=14"
4014
+ }
4015
+ },
4016
+ "node_modules/node-releases": {
4017
+ "version": "2.0.14",
4018
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/node-releases/-/node-releases-2.0.14.tgz",
4019
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
4020
+ "dev": true
4021
+ },
4022
+ "node_modules/normalize-path": {
4023
+ "version": "3.0.0",
4024
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/normalize-path/-/normalize-path-3.0.0.tgz",
4025
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
4026
+ "dev": true,
4027
+ "engines": {
4028
+ "node": ">=0.10.0"
4029
+ }
4030
+ },
4031
+ "node_modules/normalize-range": {
4032
+ "version": "0.1.2",
4033
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/normalize-range/-/normalize-range-0.1.2.tgz",
4034
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
4035
+ "dev": true,
4036
+ "engines": {
4037
+ "node": ">=0.10.0"
4038
+ }
4039
+ },
4040
"node_modules/object-assign": {
4041
"version": "4.1.1",
4042
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/object-assign/-/object-assign-4.1.1.tgz",
@@ -2891,6 +4045,15 @@
4045
"node": ">=0.10.0"
4046
}
4047
},
4048
+ "node_modules/object-hash": {
4049
+ "version": "3.0.0",
4050
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/object-hash/-/object-hash-3.0.0.tgz",
4051
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
4052
+ "dev": true,
4053
+ "engines": {
4054
+ "node": ">= 6"
4055
+ }
4056
+ },
4057
"node_modules/object-inspect": {
4058
"version": "1.13.1",
4059
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/object-inspect/-/object-inspect-1.13.1.tgz",
@@ -3127,51 +4290,180 @@
4290
"node": "14 || >=16.14"
4291
}
4292
},
3130
- "node_modules/path-type": {
3131
- "version": "4.0.0",
3132
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
3133
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
4293
+ "node_modules/path-type": {
4294
+ "version": "4.0.0",
4295
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
4296
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
4297
+ "engines": {
4298
+ "node": ">=8"
4299
+ }
4300
+ },
4301
+ "node_modules/periscopic": {
4302
+ "version": "3.1.0",
4303
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/periscopic/-/periscopic-3.1.0.tgz",
4304
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
4305
+ "peer": true,
4306
+ "dependencies": {
4307
+ "@types/estree": "^1.0.0",
4308
+ "estree-walker": "^3.0.0",
4309
+ "is-reference": "^3.0.0"
4310
+ }
4311
+ },
4312
+ "node_modules/picocolors": {
4313
+ "version": "1.0.0",
4314
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
4315
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
4316
+ },
4317
+ "node_modules/picomatch": {
4318
+ "version": "2.3.1",
4319
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
4320
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
4321
+ "engines": {
4322
+ "node": ">=8.6"
4323
+ },
4324
+ "funding": {
4325
+ "url": "https://github.com/sponsors/jonschlinkert"
4326
+ }
4327
+ },
4328
+ "node_modules/pify": {
4329
+ "version": "2.3.0",
4330
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/pify/-/pify-2.3.0.tgz",
4331
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
4332
+ "dev": true,
4333
+ "engines": {
4334
+ "node": ">=0.10.0"
4335
+ }
4336
+ },
4337
+ "node_modules/pirates": {
4338
+ "version": "4.0.6",
4339
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/pirates/-/pirates-4.0.6.tgz",
4340
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
4341
+ "dev": true,
4342
+ "engines": {
4343
+ "node": ">= 6"
4344
+ }
4345
+ },
4346
+ "node_modules/possible-typed-array-names": {
4347
+ "version": "1.0.0",
4348
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
4349
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
4350
+ "engines": {
4351
+ "node": ">= 0.4"
4352
+ }
4353
+ },
4354
+ "node_modules/postcss": {
4355
+ "version": "8.4.38",
4356
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss/-/postcss-8.4.38.tgz",
4357
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
4358
+ "dependencies": {
4359
+ "nanoid": "^3.3.7",
4360
+ "picocolors": "^1.0.0",
4361
+ "source-map-js": "^1.2.0"
4362
+ },
4363
+ "engines": {
4364
+ "node": "^10 || ^12 || >=14"
4365
+ }
4366
+ },
4367
+ "node_modules/postcss-import": {
4368
+ "version": "15.1.0",
4369
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss-import/-/postcss-import-15.1.0.tgz",
4370
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
4371
+ "dev": true,
4372
+ "dependencies": {
4373
+ "postcss-value-parser": "^4.0.0",
4374
+ "read-cache": "^1.0.0",
4375
+ "resolve": "^1.1.7"
4376
+ },
4377
+ "engines": {
4378
+ "node": ">=14.0.0"
4379
+ },
4380
+ "peerDependencies": {
4381
+ "postcss": "^8.0.0"
4382
+ }
4383
+ },
4384
+ "node_modules/postcss-js": {
4385
+ "version": "4.0.1",
4386
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss-js/-/postcss-js-4.0.1.tgz",
4387
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
4388
+ "dev": true,
4389
+ "dependencies": {
4390
+ "camelcase-css": "^2.0.1"
4391
+ },
4392
+ "engines": {
4393
+ "node": "^12 || ^14 || >= 16"
4394
+ },
4395
+ "peerDependencies": {
4396
+ "postcss": "^8.4.21"
4397
+ }
4398
+ },
4399
+ "node_modules/postcss-load-config": {
4400
+ "version": "4.0.2",
4401
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
4402
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
4403
+ "dev": true,
4404
+ "dependencies": {
4405
+ "lilconfig": "^3.0.0",
4406
+ "yaml": "^2.3.4"
4407
+ },
4408
"engines": {
3135
- "node": ">=8"
4409
+ "node": ">= 14"
4410
+ },
4411
+ "peerDependencies": {
4412
+ "postcss": ">=8.0.9",
4413
+ "ts-node": ">=9.0.0"
4414
+ },
4415
+ "peerDependenciesMeta": {
4416
+ "postcss": {
4417
+ "optional": true
4418
+ },
4419
+ "ts-node": {
4420
+ "optional": true
4421
+ }
4422
}
4423
},
3138
- "node_modules/picocolors": {
3139
- "version": "1.0.0",
3140
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
3141
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
3142
- },
3143
- "node_modules/picomatch": {
3144
- "version": "2.3.1",
3145
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
3146
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
4424
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
4425
+ "version": "3.1.1",
4426
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/lilconfig/-/lilconfig-3.1.1.tgz",
4427
+ "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==",
4428
+ "dev": true,
4429
"engines": {
3148
- "node": ">=8.6"
3149
- },
3150
- "funding": {
3151
- "url": "https://github.com/sponsors/jonschlinkert"
4430
+ "node": ">=14"
4431
}
4432
},
3154
- "node_modules/possible-typed-array-names": {
3155
- "version": "1.0.0",
3156
- "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
3157
- "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
4433
+ "node_modules/postcss-nested": {
4434
+ "version": "6.0.1",
4435
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss-nested/-/postcss-nested-6.0.1.tgz",
4436
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
4437
+ "dev": true,
4438
+ "dependencies": {
4439
+ "postcss-selector-parser": "^6.0.11"
4440
+ },
4441
"engines": {
3159
- "node": ">= 0.4"
4442
+ "node": ">=12.0"
4443
+ },
4444
+ "peerDependencies": {
4445
+ "postcss": "^8.2.14"
4446
}
4447
},
3162
- "node_modules/postcss": {
3163
- "version": "8.4.31",
3164
- "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss/-/postcss-8.4.31.tgz",
3165
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
4448
+ "node_modules/postcss-selector-parser": {
4449
+ "version": "6.0.16",
4450
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
4451
+ "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
4452
+ "dev": true,
4453
"dependencies": {
3167
- "nanoid": "^3.3.6",
3168
- "picocolors": "^1.0.0",
3169
- "source-map-js": "^1.0.2"
4454
+ "cssesc": "^3.0.0",
4455
+ "util-deprecate": "^1.0.2"
4456
},
4457
"engines": {
3172
- "node": "^10 || ^12 || >=14"
4458
+ "node": ">=4"
4459
}
4460
},
4461
+ "node_modules/postcss-value-parser": {
4462
+ "version": "4.2.0",
4463
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
4464
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
4465
+ "dev": true
4466
+ },
4467
"node_modules/prelude-ls": {
4468
"version": "1.2.1",
4469
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -3240,11 +4532,63 @@
4532
"react": "^18.2.0"
4533
}
4534
},
4535
+ "node_modules/react-hot-toast": {
4536
+ "version": "2.4.1",
4537
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/react-hot-toast/-/react-hot-toast-2.4.1.tgz",
4538
+ "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==",
4539
+ "dependencies": {
4540
+ "goober": "^2.1.10"
4541
+ },
4542
+ "engines": {
4543
+ "node": ">=10"
4544
+ },
4545
+ "peerDependencies": {
4546
+ "react": ">=16",
4547
+ "react-dom": ">=16"
4548
+ }
4549
+ },
4550
"node_modules/react-is": {
4551
"version": "16.13.1",
4552
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/react-is/-/react-is-16.13.1.tgz",
4553
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
4554
},
4555
+ "node_modules/react-textarea-autosize": {
4556
+ "version": "8.5.3",
4557
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz",
4558
+ "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
4559
+ "dependencies": {
4560
+ "@babel/runtime": "^7.20.13",
4561
+ "use-composed-ref": "^1.3.0",
4562
+ "use-latest": "^1.2.1"
4563
+ },
4564
+ "engines": {
4565
+ "node": ">=10"
4566
+ },
4567
+ "peerDependencies": {
4568
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
4569
+ }
4570
+ },
4571
+ "node_modules/read-cache": {
4572
+ "version": "1.0.0",
4573
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/read-cache/-/read-cache-1.0.0.tgz",
4574
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
4575
+ "dev": true,
4576
+ "dependencies": {
4577
+ "pify": "^2.3.0"
4578
+ }
4579
+ },
4580
+ "node_modules/readdirp": {
4581
+ "version": "3.6.0",
4582
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/readdirp/-/readdirp-3.6.0.tgz",
4583
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
4584
+ "dev": true,
4585
+ "dependencies": {
4586
+ "picomatch": "^2.2.1"
4587
+ },
4588
+ "engines": {
4589
+ "node": ">=8.10.0"
4590
+ }
4591
+ },
4592
"node_modules/reflect.getprototypeof": {
4593
"version": "1.0.6",
4594
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
@@ -3263,9 +4607,9 @@
4607
}
4608
},
4609
"node_modules/regenerator-runtime": {
3266
- "version": "0.13.11",
3267
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
3268
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
4610
+ "version": "0.14.1",
4611
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
4612
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
4613
},
4614
"node_modules/regexp.prototype.flags": {
4615
"version": "1.5.2",
@@ -3407,6 +4751,27 @@
4751
"node": ">=10"
4752
}
4753
},
4754
+ "node_modules/seroval": {
4755
+ "version": "1.0.5",
4756
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/seroval/-/seroval-1.0.5.tgz",
4757
+ "integrity": "sha512-TM+Z11tHHvQVQKeNlOUonOWnsNM+2IBwZ4vwoi4j3zKzIpc5IDw8WPwCfcc8F17wy6cBcJGbZbFOR0UCuTZHQA==",
4758
+ "peer": true,
4759
+ "engines": {
4760
+ "node": ">=10"
4761
+ }
4762
+ },
4763
+ "node_modules/seroval-plugins": {
4764
+ "version": "1.0.5",
4765
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/seroval-plugins/-/seroval-plugins-1.0.5.tgz",
4766
+ "integrity": "sha512-8+pDC1vOedPXjKG7oz8o+iiHrtF2WswaMQJ7CKFpccvSYfrzmvKY9zOJWCg+881722wIHfwkdnRmiiDm9ym+zQ==",
4767
+ "peer": true,
4768
+ "engines": {
4769
+ "node": ">=10"
4770
+ },
4771
+ "peerDependencies": {
4772
+ "seroval": "^1.0"
4773
+ }
4774
+ },
4775
"node_modules/set-function-length": {
4776
"version": "1.2.2",
4777
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/set-function-length/-/set-function-length-1.2.2.tgz",
@@ -3486,6 +4851,29 @@
4851
"node": ">=8"
4852
}
4853
},
4854
+ "node_modules/solid-js": {
4855
+ "version": "1.8.16",
4856
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/solid-js/-/solid-js-1.8.16.tgz",
4857
+ "integrity": "sha512-rja94MNU9flF3qQRLNsu60QHKBDKBkVE1DldJZPIfn2ypIn3NV2WpSbGTQIvsyGPBo+9E2IMjwqnqpbgfWuzeg==",
4858
+ "peer": true,
4859
+ "dependencies": {
4860
+ "csstype": "^3.1.0",
4861
+ "seroval": "^1.0.4",
4862
+ "seroval-plugins": "^1.0.3"
4863
+ }
4864
+ },
4865
+ "node_modules/solid-swr-store": {
4866
+ "version": "0.10.7",
4867
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/solid-swr-store/-/solid-swr-store-0.10.7.tgz",
4868
+ "integrity": "sha512-A6d68aJmRP471aWqKKPE2tpgOiR5fH4qXQNfKIec+Vap+MGQm3tvXlT8n0I8UgJSlNAsSAUuw2VTviH2h3Vv5g==",
4869
+ "engines": {
4870
+ "node": ">=10"
4871
+ },
4872
+ "peerDependencies": {
4873
+ "solid-js": "^1.2",
4874
+ "swr-store": "^0.10"
4875
+ }
4876
+ },
4877
"node_modules/source-map-js": {
4878
"version": "1.2.0",
4879
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/source-map-js/-/source-map-js-1.2.0.tgz",
@@ -3494,6 +4882,17 @@
4882
"node": ">=0.10.0"
4883
}
4884
},
4885
+ "node_modules/sswr": {
4886
+ "version": "2.0.0",
4887
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/sswr/-/sswr-2.0.0.tgz",
4888
+ "integrity": "sha512-mV0kkeBHcjcb0M5NqKtKVg/uTIYNlIIniyDfSGrSfxpEdM9C365jK0z55pl9K0xAkNTJi2OAOVFQpgMPUk+V0w==",
4889
+ "dependencies": {
4890
+ "swrev": "^4.0.0"
4891
+ },
4892
+ "peerDependencies": {
4893
+ "svelte": "^4.0.0"
4894
+ }
4895
+ },
4896
"node_modules/stop-iteration-iterator": {
4897
"version": "1.0.0",
4898
"resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
@@ -3687,6 +5086,68 @@
5086
}
5087
}
5088
},
5089
+ "node_modules/sucrase": {
5090
+ "version": "3.35.0",
5091
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/sucrase/-/sucrase-3.35.0.tgz",
5092
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
5093
+ "dev": true,
5094
+ "dependencies": {
5095
+ "@jridgewell/gen-mapping": "^0.3.2",
5096
+ "commander": "^4.0.0",
5097
+ "glob": "^10.3.10",
5098
+ "lines-and-columns": "^1.1.6",
5099
+ "mz": "^2.7.0",
5100
+ "pirates": "^4.0.1",
5101
+ "ts-interface-checker": "^0.1.9"
5102
+ },
5103
+ "bin": {
5104
+ "sucrase": "bin/sucrase",
5105
+ "sucrase-node": "bin/sucrase-node"
5106
+ },
5107
+ "engines": {
5108
+ "node": ">=16 || 14 >=14.17"
5109
+ }
5110
+ },
5111
+ "node_modules/sucrase/node_modules/brace-expansion": {
5112
+ "version": "2.0.1",
5113
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/brace-expansion/-/brace-expansion-2.0.1.tgz",
5114
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
5115
+ "dev": true,
5116
+ "dependencies": {
5117
+ "balanced-match": "^1.0.0"
5118
+ }
5119
+ },
5120
+ "node_modules/sucrase/node_modules/glob": {
5121
+ "version": "10.3.12",
5122
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/glob/-/glob-10.3.12.tgz",
5123
+ "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
5124
+ "dev": true,
5125
+ "dependencies": {
5126
+ "foreground-child": "^3.1.0",
5127
+ "jackspeak": "^2.3.6",
5128
+ "minimatch": "^9.0.1",
5129
+ "minipass": "^7.0.4",
5130
+ "path-scurry": "^1.10.2"
5131
+ },
5132
+ "bin": {
5133
+ "glob": "dist/esm/bin.mjs"
5134
+ },
5135
+ "engines": {
5136
+ "node": ">=16 || 14 >=14.17"
5137
+ }
5138
+ },
5139
+ "node_modules/sucrase/node_modules/minimatch": {
5140
+ "version": "9.0.4",
5141
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/minimatch/-/minimatch-9.0.4.tgz",
5142
+ "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
5143
+ "dev": true,
5144
+ "dependencies": {
5145
+ "brace-expansion": "^2.0.1"
5146
+ },
5147
+ "engines": {
5148
+ "node": ">=16 || 14 >=14.17"
5149
+ }
5150
+ },
5151
"node_modules/supports-color": {
5152
"version": "7.2.0",
5153
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -3706,6 +5167,75 @@
5167
"node": ">= 0.4"
5168
}
5169
},
5170
+ "node_modules/svelte": {
5171
+ "version": "4.2.15",
5172
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/svelte/-/svelte-4.2.15.tgz",
5173
+ "integrity": "sha512-j9KJSccHgLeRERPlhMKrCXpk2TqL2m5Z+k+OBTQhZOhIdCCd3WfqV+ylPWeipEwq17P/ekiSFWwrVQv93i3bsg==",
5174
+ "peer": true,
5175
+ "dependencies": {
5176
+ "@ampproject/remapping": "^2.2.1",
5177
+ "@jridgewell/sourcemap-codec": "^1.4.15",
5178
+ "@jridgewell/trace-mapping": "^0.3.18",
5179
+ "@types/estree": "^1.0.1",
5180
+ "acorn": "^8.9.0",
5181
+ "aria-query": "^5.3.0",
5182
+ "axobject-query": "^4.0.0",
5183
+ "code-red": "^1.0.3",
5184
+ "css-tree": "^2.3.1",
5185
+ "estree-walker": "^3.0.3",
5186
+ "is-reference": "^3.0.1",
5187
+ "locate-character": "^3.0.0",
5188
+ "magic-string": "^0.30.4",
5189
+ "periscopic": "^3.1.0"
5190
+ },
5191
+ "engines": {
5192
+ "node": ">=16"
5193
+ }
5194
+ },
5195
+ "node_modules/svelte/node_modules/axobject-query": {
5196
+ "version": "4.0.0",
5197
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/axobject-query/-/axobject-query-4.0.0.tgz",
5198
+ "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==",
5199
+ "peer": true,
5200
+ "dependencies": {
5201
+ "dequal": "^2.0.3"
5202
+ }
5203
+ },
5204
+ "node_modules/swr": {
5205
+ "version": "2.2.0",
5206
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/swr/-/swr-2.2.0.tgz",
5207
+ "integrity": "sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==",
5208
+ "dependencies": {
5209
+ "use-sync-external-store": "^1.2.0"
5210
+ },
5211
+ "peerDependencies": {
5212
+ "react": "^16.11.0 || ^17.0.0 || ^18.0.0"
5213
+ }
5214
+ },
5215
+ "node_modules/swr-store": {
5216
+ "version": "0.10.6",
5217
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/swr-store/-/swr-store-0.10.6.tgz",
5218
+ "integrity": "sha512-xPjB1hARSiRaNNlUQvWSVrG5SirCjk2TmaUyzzvk69SZQan9hCJqw/5rG9iL7xElHU784GxRPISClq4488/XVw==",
5219
+ "dependencies": {
5220
+ "dequal": "^2.0.3"
5221
+ },
5222
+ "engines": {
5223
+ "node": ">=10"
5224
+ }
5225
+ },
5226
+ "node_modules/swrev": {
5227
+ "version": "4.0.0",
5228
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/swrev/-/swrev-4.0.0.tgz",
5229
+ "integrity": "sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA=="
5230
+ },
5231
+ "node_modules/swrv": {
5232
+ "version": "1.0.4",
5233
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/swrv/-/swrv-1.0.4.tgz",
5234
+ "integrity": "sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==",
5235
+ "peerDependencies": {
5236
+ "vue": ">=3.2.26 < 4"
5237
+ }
5238
+ },
5239
"node_modules/synckit": {
5240
"version": "0.8.4",
5241
"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz",
@@ -3721,6 +5251,51 @@
5251
"url": "https://opencollective.com/unts"
5252
}
5253
},
5254
+ "node_modules/tailwind-merge": {
5255
+ "version": "2.3.0",
5256
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/tailwind-merge/-/tailwind-merge-2.3.0.tgz",
5257
+ "integrity": "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==",
5258
+ "dependencies": {
5259
+ "@babel/runtime": "^7.24.1"
5260
+ }
5261
+ },
5262
+ "node_modules/tailwindcss": {
5263
+ "version": "3.4.3",
5264
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/tailwindcss/-/tailwindcss-3.4.3.tgz",
5265
+ "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==",
5266
+ "dev": true,
5267
+ "dependencies": {
5268
+ "@alloc/quick-lru": "^5.2.0",
5269
+ "arg": "^5.0.2",
5270
+ "chokidar": "^3.5.3",
5271
+ "didyoumean": "^1.2.2",
5272
+ "dlv": "^1.1.3",
5273
+ "fast-glob": "^3.3.0",
5274
+ "glob-parent": "^6.0.2",
5275
+ "is-glob": "^4.0.3",
5276
+ "jiti": "^1.21.0",
5277
+ "lilconfig": "^2.1.0",
5278
+ "micromatch": "^4.0.5",
5279
+ "normalize-path": "^3.0.0",
5280
+ "object-hash": "^3.0.0",
5281
+ "picocolors": "^1.0.0",
5282
+ "postcss": "^8.4.23",
5283
+ "postcss-import": "^15.1.0",
5284
+ "postcss-js": "^4.0.1",
5285
+ "postcss-load-config": "^4.0.1",
5286
+ "postcss-nested": "^6.0.1",
5287
+ "postcss-selector-parser": "^6.0.11",
5288
+ "resolve": "^1.22.2",
5289
+ "sucrase": "^3.32.0"
5290
+ },
5291
+ "bin": {
5292
+ "tailwind": "lib/cli.js",
5293
+ "tailwindcss": "lib/cli.js"
5294
+ },
5295
+ "engines": {
5296
+ "node": ">=14.0.0"
5297
+ }
5298
+ },
5299
"node_modules/tapable": {
5300
"version": "2.2.1",
5301
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -3734,6 +5309,27 @@
5309
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
5310
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
5311
},
5312
+ "node_modules/thenify": {
5313
+ "version": "3.3.1",
5314
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/thenify/-/thenify-3.3.1.tgz",
5315
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
5316
+ "dev": true,
5317
+ "dependencies": {
5318
+ "any-promise": "^1.0.0"
5319
+ }
5320
+ },
5321
+ "node_modules/thenify-all": {
5322
+ "version": "1.6.0",
5323
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/thenify-all/-/thenify-all-1.6.0.tgz",
5324
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
5325
+ "dev": true,
5326
+ "dependencies": {
5327
+ "thenify": ">= 3.1.0 < 4"
5328
+ },
5329
+ "engines": {
5330
+ "node": ">=0.8"
5331
+ }
5332
+ },
5333
"node_modules/tiny-glob": {
5334
"version": "0.2.9",
5335
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
@@ -3754,6 +5350,12 @@
5350
"node": ">=8.0"
5351
}
5352
},
5353
+ "node_modules/ts-interface-checker": {
5354
+ "version": "0.1.13",
5355
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
5356
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
5357
+ "dev": true
5358
+ },
5359
"node_modules/tsconfig-paths": {
5360
"version": "3.15.0",
5361
"resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
@@ -3897,6 +5499,22 @@
5499
"url": "https://github.com/sponsors/ljharb"
5500
}
5501
},
5502
+ "node_modules/update-browserslist-db": {
5503
+ "version": "1.0.13",
5504
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
5505
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
5506
+ "dev": true,
5507
+ "dependencies": {
5508
+ "escalade": "^3.1.1",
5509
+ "picocolors": "^1.0.0"
5510
+ },
5511
+ "bin": {
5512
+ "update-browserslist-db": "cli.js"
5513
+ },
5514
+ "peerDependencies": {
5515
+ "browserslist": ">= 4.21.0"
5516
+ }
5517
+ },
5518
"node_modules/uri-js": {
5519
"version": "4.4.1",
5520
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -3905,6 +5523,78 @@
5523
"punycode": "^2.1.0"
5524
}
5525
},
5526
+ "node_modules/use-composed-ref": {
5527
+ "version": "1.3.0",
5528
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
5529
+ "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
5530
+ "peerDependencies": {
5531
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
5532
+ }
5533
+ },
5534
+ "node_modules/use-isomorphic-layout-effect": {
5535
+ "version": "1.1.2",
5536
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
5537
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
5538
+ "peerDependencies": {
5539
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
5540
+ },
5541
+ "peerDependenciesMeta": {
5542
+ "@types/react": {
5543
+ "optional": true
5544
+ }
5545
+ }
5546
+ },
5547
+ "node_modules/use-latest": {
5548
+ "version": "1.2.1",
5549
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/use-latest/-/use-latest-1.2.1.tgz",
5550
+ "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
5551
+ "dependencies": {
5552
+ "use-isomorphic-layout-effect": "^1.1.1"
5553
+ },
5554
+ "peerDependencies": {
5555
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
5556
+ },
5557
+ "peerDependenciesMeta": {
5558
+ "@types/react": {
5559
+ "optional": true
5560
+ }
5561
+ }
5562
+ },
5563
+ "node_modules/use-sync-external-store": {
5564
+ "version": "1.2.0",
5565
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
5566
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
5567
+ "peerDependencies": {
5568
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
5569
+ }
5570
+ },
5571
+ "node_modules/util-deprecate": {
5572
+ "version": "1.0.2",
5573
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/util-deprecate/-/util-deprecate-1.0.2.tgz",
5574
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
5575
+ "dev": true
5576
+ },
5577
+ "node_modules/vue": {
5578
+ "version": "3.4.23",
5579
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/vue/-/vue-3.4.23.tgz",
5580
+ "integrity": "sha512-X1y6yyGJ28LMUBJ0k/qIeKHstGd+BlWQEOT40x3auJFTmpIhpbKLgN7EFsqalnJXq1Km5ybDEsp6BhuWKciUDg==",
5581
+ "peer": true,
5582
+ "dependencies": {
5583
+ "@vue/compiler-dom": "3.4.23",
5584
+ "@vue/compiler-sfc": "3.4.23",
5585
+ "@vue/runtime-dom": "3.4.23",
5586
+ "@vue/server-renderer": "3.4.23",
5587
+ "@vue/shared": "3.4.23"
5588
+ },
5589
+ "peerDependencies": {
5590
+ "typescript": "*"
5591
+ },
5592
+ "peerDependenciesMeta": {
5593
+ "typescript": {
5594
+ "optional": true
5595
+ }
5596
+ }
5597
+ },
5598
"node_modules/which": {
5599
"version": "2.0.2",
5600
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -4075,6 +5765,18 @@
5765
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
5766
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
5767
},
5768
+ "node_modules/yaml": {
5769
+ "version": "2.4.1",
5770
+ "resolved": "https://viaplay.jfrog.io/artifactory/api/npm/mtg-npm-virtual/yaml/-/yaml-2.4.1.tgz",
5771
+ "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
5772
+ "dev": true,
5773
+ "bin": {
5774
+ "yaml": "bin.mjs"
5775
+ },
5776
+ "engines": {
5777
+ "node": ">= 14"
5778
+ }
5779
+ },
5780
"node_modules/yocto-queue": {
5781
"version": "0.1.0",
5782
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
package.json
+16
-2
@@ -3,18 +3,32 @@
3
"version": "0.1.0",
4
"private": true,
5
"dependencies": {
6
+ "@heroicons/react": "1.0.6",
7
+ "@radix-ui/react-slot": "^1.0.2",
8
+ "@radix-ui/react-tooltip": "^1.0.7",
9
"@tauri-apps/api": "^1.5.3",
10
"@types/node": "18.17.0",
11
"@types/react": "18.2.78",
12
"@types/react-dom": "18.2.25",
13
+ "class-variance-authority": "^0.7.0",
14
+ "ai": "^2.2.33",
15
+ "clsx": "1.2.1",
16
"eslint": "8.32.0",
17
"eslint-config-next": "14.1.0",
18
"next": "14.1.0",
19
"react": "18.2.0",
20
+ "react-hot-toast": "^2.4.1",
21
+ "react-textarea-autosize": "^8.5.3",
22
"react-dom": "18.2.0",
15
- "typescript": "4.9.4"
23
+ "typescript": "4.9.4",
24
+ "tailwind-merge": "^2.2.1"
25
},
26
"devDependencies": {
18
- "@tauri-apps/cli": "^1.5.11"
27
+ "@tailwindcss/forms": "0.5.3",
28
+ "@tailwindcss/typography": "0.5.9",
29
+ "@tauri-apps/cli": "^1.5.11",
30
+ "autoprefixer": "^10.4.19",
31
+ "postcss": "^8.4.38",
32
+ "tailwindcss": "^3.4.3"
33
}
34
}
pages/_app.tsx
deleted
-6
@@ -1,6 +0,0 @@
1
-import '@/styles/globals.css'
2
-import type { AppProps } from 'next/app'
3
-
4
-export default function App({ Component, pageProps }: AppProps) {
5
- return <Component {...pageProps} />
6
-}
pages/_document.tsx
deleted
-13
@@ -1,13 +0,0 @@
1
-import { Html, Head, Main, NextScript } from 'next/document'
2
-
3
-export default function Document() {
4
- return (
5
- <Html lang="en">
6
- <Head />
7
- <body>
8
- <Main />
9
- <NextScript />
10
- </body>
11
- </Html>
12
- )
13
-}
pages/api/hello.ts
deleted
-13
@@ -1,13 +0,0 @@
1
-// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
2
-import type { NextApiRequest, NextApiResponse } from 'next'
3
-
4
-type Data = {
5
- name: string
6
-}
7
-
8
-export default function handler(
9
- req: NextApiRequest,
10
- res: NextApiResponse<Data>
11
-) {
12
- res.status(200).json({ name: 'John Doe' })
13
-}
pages/index.tsx
deleted
-114
@@ -1,114 +0,0 @@
1
-import Head from 'next/head'
2
-import Image from 'next/image'
3
-import { Inter } from "next/font/google"
4
-import styles from '@/styles/Home.module.css'
5
-
6
-const inter = Inter({ subsets: ['latin'] })
7
-
8
-export default function Home() {
9
- return (
10
- <>
11
- <Head>
12
- <title>Create Next App</title>
13
- <meta name="description" content="Generated by create next app" />
14
- <meta name="viewport" content="width=device-width, initial-scale=1" />
15
- <link rel="icon" href="/favicon.ico" />
16
- </Head>
17
- <main className={styles.main}>
18
- <div className={styles.description}>
19
- <p>
20
- Get started by editing
21
- <code className={styles.code}>pages/index.tsx</code>
22
- </p>
23
- <div>
24
- <a
25
- href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
26
- target="_blank"
27
- rel="noopener noreferrer"
28
- >
29
- By{' '}
30
- <Image
31
- src="/vercel.svg"
32
- alt="Vercel Logo"
33
- className={styles.vercelLogo}
34
- width={100}
35
- height={24}
36
- priority
37
- />
38
- </a>
39
- </div>
40
- </div>
41
-
42
- <div className={styles.center}>
43
- <Image
44
- className={styles.logo}
45
- src="/next.svg"
46
- alt="Next.js Logo"
47
- width={180}
48
- height={37}
49
- priority
50
- />
51
- </div>
52
-
53
- <div className={styles.grid}>
54
- <a
55
- href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
56
- className={styles.card}
57
- target="_blank"
58
- rel="noopener noreferrer"
59
- >
60
- <h2 className={inter.className}>
61
- Docs <span>-></span>
62
- </h2>
63
- <p className={inter.className}>
64
- Find in-depth information about Next.js features and API.
65
- </p>
66
- </a>
67
-
68
- <a
69
- href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
70
- className={styles.card}
71
- target="_blank"
72
- rel="noopener noreferrer"
73
- >
74
- <h2 className={inter.className}>
75
- Learn <span>-></span>
76
- </h2>
77
- <p className={inter.className}>
78
- Learn about Next.js in an interactive course with quizzes!
79
- </p>
80
- </a>
81
-
82
- <a
83
- href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
84
- className={styles.card}
85
- target="_blank"
86
- rel="noopener noreferrer"
87
- >
88
- <h2 className={inter.className}>
89
- Templates <span>-></span>
90
- </h2>
91
- <p className={inter.className}>
92
- Discover and deploy boilerplate example Next.js projects.
93
- </p>
94
- </a>
95
-
96
- <a
97
- href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
98
- className={styles.card}
99
- target="_blank"
100
- rel="noopener noreferrer"
101
- >
102
- <h2 className={inter.className}>
103
- Deploy <span>-></span>
104
- </h2>
105
- <p className={inter.className}>
106
- Instantly deploy your Next.js site to a shareable URL
107
- with Vercel.
108
- </p>
109
- </a>
110
- </div>
111
- </main>
112
- </>
113
- )
114
-}
postcss.config.js
new
+6
@@ -0,0 +1,6 @@
1
+module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+}
public/grid.svg
new
+5
@@ -0,0 +1,5 @@
1
+
2
+<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">
3
+ <path d="M96,95h4v1H96v4H95V96H86v4H85V96H76v4H75V96H66v4H65V96H56v4H55V96H46v4H45V96H36v4H35V96H26v4H25V96H16v4H15V96H0V95H15V86H0V85H15V76H0V75H15V66H0V65H15V56H0V55H15V46H0V45H15V36H0V35H15V26H0V25H15V16H0V15H15V0h1V15h9V0h1V15h9V0h1V15h9V0h1V15h9V0h1V15h9V0h1V15h9V0h1V15h9V0h1V15h9V0h1V15h4v1H96v9h4v1H96v9h4v1H96v9h4v1H96v9h4v1H96v9h4v1H96v9h4v1H96v9h4v1H96Zm-1,0V86H86v9ZM85,95V86H76v9ZM75,95V86H66v9ZM65,95V86H56v9ZM55,95V86H46v9ZM45,95V86H36v9ZM35,95V86H26v9ZM25,95V86H16v9ZM16,85h9V76H16Zm10,0h9V76H26Zm10,0h9V76H36Zm10,0h9V76H46Zm10,0h9V76H56Zm10,0h9V76H66Zm10,0h9V76H76Zm10,0h9V76H86Zm9-10V66H86v9ZM85,75V66H76v9ZM75,75V66H66v9ZM65,75V66H56v9ZM55,75V66H46v9ZM45,75V66H36v9ZM35,75V66H26v9ZM25,75V66H16v9ZM16,65h9V56H16Zm10,0h9V56H26Zm10,0h9V56H36Zm10,0h9V56H46Zm10,0h9V56H56Zm10,0h9V56H66Zm10,0h9V56H76Zm10,0h9V56H86Zm9-10V46H86v9ZM85,55V46H76v9ZM75,55V46H66v9ZM65,55V46H56v9ZM55,55V46H46v9ZM45,55V46H36v9ZM35,55V46H26v9ZM25,55V46H16v9ZM16,45h9V36H16Zm10,0h9V36H26Zm10,0h9V36H36Zm10,0h9V36H46Zm10,0h9V36H56Zm10,0h9V36H66Zm10,0h9V36H76Zm10,0h9V36H86Zm9-10V26H86v9ZM85,35V26H76v9ZM75,35V26H66v9ZM65,35V26H56v9ZM55,35V26H46v9ZM45,35V26H36v9ZM35,35V26H26v9ZM25,35V26H16v9ZM16,25h9V16H16Zm10,0h9V16H26Zm10,0h9V16H36Zm10,0h9V16H46Zm10,0h9V16H56Zm10,0h9V16H66Zm10,0h9V16H76Zm10,0h9V16H86Z" fill="rgba(255,255,255,0.2)" fill-rule="evenodd" opacity="0.2"/>
4
+ <path d="M6,5V0H5V5H0V6H5v94H6V6h94V5Z" fill="rgba(255,255,255,0.075)" fill-rule="evenodd"/>
5
+</svg>
public/logo192.png
Binary files /dev/null and b/public/logo192.png differ
public/next.svg
deleted
-3
@@ -1,3 +0,0 @@
1
-version https://git-lfs.github.com/spec/v1
2
-oid sha256:55995dfad6ecb4945a1e856ddca03c5e16aa5bf13fd21b4df6a74ae79357bcfc
3
-size 1375
public/thirteen.svg
deleted
-3
@@ -1,3 +0,0 @@
1
-version https://git-lfs.github.com/spec/v1
2
-oid sha256:6a70cf328586a2b3e98f6f7f5ab88ae84732d4d4f0040d3ccc6b3a3ea0f1eab0
3
-size 1138
public/vercel.svg
deleted
-3
@@ -1,3 +0,0 @@
1
-version https://git-lfs.github.com/spec/v1
2
-oid sha256:3fa5cd757b418e18afc68ddebad55f443206e410327921ddb2bf1be731658880
3
-size 629
screenshots/0.png
Binary files /dev/null and b/screenshots/0.png differ
screenshots/1.png
Binary files /dev/null and b/screenshots/1.png differ
src-tauri/src/main.rs
+1
-1
@@ -6,7 +6,7 @@
6
// Learn more about Tauri commands at https://tauri.app/v1/guides/features/command
7
#[tauri::command]
8
fn greet(name: &str) -> String {
9
- format!("Hello, {}! You've been greeted from Rust!", name)
9
+ format!("Hello, {}! You've been greeted from Rust!!!!", name)
10
}
11
12
fn main() {
src-tauri/tauri.conf.json
+1
-1
@@ -3,7 +3,7 @@
3
"beforeDevCommand": "node node_modules/next/dist/bin/next dev -p 1420",
4
"beforeBuildCommand": "node node_modules/next/dist/bin/next build && node node_modules/next/dist/bin/next export -o next-dist",
5
"devPath": "http://localhost:1420",
6
- "distDir": "../next-dist",
6
+ "distDir": "../dist",
7
"withGlobalTauri": false
8
},
9
"package": {
styles/Home.module.css
deleted
-278
@@ -1,278 +0,0 @@
1
-.main {
2
- display: flex;
3
- flex-direction: column;
4
- justify-content: space-between;
5
- align-items: center;
6
- padding: 6rem;
7
- min-height: 100vh;
8
-}
9
-
10
-.description {
11
- display: inherit;
12
- justify-content: inherit;
13
- align-items: inherit;
14
- font-size: 0.85rem;
15
- max-width: var(--max-width);
16
- width: 100%;
17
- z-index: 2;
18
- font-family: var(--font-mono);
19
-}
20
-
21
-.description a {
22
- display: flex;
23
- justify-content: center;
24
- align-items: center;
25
- gap: 0.5rem;
26
-}
27
-
28
-.description p {
29
- position: relative;
30
- margin: 0;
31
- padding: 1rem;
32
- background-color: rgba(var(--callout-rgb), 0.5);
33
- border: 1px solid rgba(var(--callout-border-rgb), 0.3);
34
- border-radius: var(--border-radius);
35
-}
36
-
37
-.code {
38
- font-weight: 700;
39
- font-family: var(--font-mono);
40
-}
41
-
42
-.grid {
43
- display: grid;
44
- grid-template-columns: repeat(4, minmax(25%, auto));
45
- width: var(--max-width);
46
- max-width: 100%;
47
-}
48
-
49
-.card {
50
- padding: 1rem 1.2rem;
51
- border-radius: var(--border-radius);
52
- background: rgba(var(--card-rgb), 0);
53
- border: 1px solid rgba(var(--card-border-rgb), 0);
54
- transition: background 200ms, border 200ms;
55
-}
56
-
57
-.card span {
58
- display: inline-block;
59
- transition: transform 200ms;
60
-}
61
-
62
-.card h2 {
63
- font-weight: 600;
64
- margin-bottom: 0.7rem;
65
-}
66
-
67
-.card p {
68
- margin: 0;
69
- opacity: 0.6;
70
- font-size: 0.9rem;
71
- line-height: 1.5;
72
- max-width: 30ch;
73
-}
74
-
75
-.center {
76
- display: flex;
77
- justify-content: center;
78
- align-items: center;
79
- position: relative;
80
- padding: 4rem 0;
81
-}
82
-
83
-.center::before {
84
- background: var(--secondary-glow);
85
- border-radius: 50%;
86
- width: 480px;
87
- height: 360px;
88
- margin-left: -400px;
89
-}
90
-
91
-.center::after {
92
- background: var(--primary-glow);
93
- width: 240px;
94
- height: 180px;
95
- z-index: -1;
96
-}
97
-
98
-.center::before,
99
-.center::after {
100
- content: '';
101
- left: 50%;
102
- position: absolute;
103
- filter: blur(45px);
104
- transform: translateZ(0);
105
-}
106
-
107
-.logo,
108
-.thirteen {
109
- position: relative;
110
-}
111
-
112
-.thirteen {
113
- display: flex;
114
- justify-content: center;
115
- align-items: center;
116
- width: 75px;
117
- height: 75px;
118
- padding: 25px 10px;
119
- margin-left: 16px;
120
- transform: translateZ(0);
121
- border-radius: var(--border-radius);
122
- overflow: hidden;
123
- box-shadow: 0px 2px 8px -1px #0000001a;
124
-}
125
-
126
-.thirteen::before,
127
-.thirteen::after {
128
- content: '';
129
- position: absolute;
130
- z-index: -1;
131
-}
132
-
133
-/* Conic Gradient Animation */
134
-.thirteen::before {
135
- animation: 6s rotate linear infinite;
136
- width: 200%;
137
- height: 200%;
138
- background: var(--tile-border);
139
-}
140
-
141
-/* Inner Square */
142
-.thirteen::after {
143
- inset: 0;
144
- padding: 1px;
145
- border-radius: var(--border-radius);
146
- background: linear-gradient(
147
- to bottom right,
148
- rgba(var(--tile-start-rgb), 1),
149
- rgba(var(--tile-end-rgb), 1)
150
- );
151
- background-clip: content-box;
152
-}
153
-
154
-/* Enable hover only on non-touch devices */
155
-@media (hover: hover) and (pointer: fine) {
156
- .card:hover {
157
- background: rgba(var(--card-rgb), 0.1);
158
- border: 1px solid rgba(var(--card-border-rgb), 0.15);
159
- }
160
-
161
- .card:hover span {
162
- transform: translateX(4px);
163
- }
164
-}
165
-
166
-@media (prefers-reduced-motion) {
167
- .thirteen::before {
168
- animation: none;
169
- }
170
-
171
- .card:hover span {
172
- transform: none;
173
- }
174
-}
175
-
176
-/* Mobile */
177
-@media (max-width: 700px) {
178
- .content {
179
- padding: 4rem;
180
- }
181
-
182
- .grid {
183
- grid-template-columns: 1fr;
184
- margin-bottom: 120px;
185
- max-width: 320px;
186
- text-align: center;
187
- }
188
-
189
- .card {
190
- padding: 1rem 2.5rem;
191
- }
192
-
193
- .card h2 {
194
- margin-bottom: 0.5rem;
195
- }
196
-
197
- .center {
198
- padding: 8rem 0 6rem;
199
- }
200
-
201
- .center::before {
202
- transform: none;
203
- height: 300px;
204
- }
205
-
206
- .description {
207
- font-size: 0.8rem;
208
- }
209
-
210
- .description a {
211
- padding: 1rem;
212
- }
213
-
214
- .description p,
215
- .description div {
216
- display: flex;
217
- justify-content: center;
218
- position: fixed;
219
- width: 100%;
220
- }
221
-
222
- .description p {
223
- align-items: center;
224
- inset: 0 0 auto;
225
- padding: 2rem 1rem 1.4rem;
226
- border-radius: 0;
227
- border: none;
228
- border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
229
- background: linear-gradient(
230
- to bottom,
231
- rgba(var(--background-start-rgb), 1),
232
- rgba(var(--callout-rgb), 0.5)
233
- );
234
- background-clip: padding-box;
235
- backdrop-filter: blur(24px);
236
- }
237
-
238
- .description div {
239
- align-items: flex-end;
240
- pointer-events: none;
241
- inset: auto 0 0;
242
- padding: 2rem;
243
- height: 200px;
244
- background: linear-gradient(
245
- to bottom,
246
- transparent 0%,
247
- rgb(var(--background-end-rgb)) 40%
248
- );
249
- z-index: 1;
250
- }
251
-}
252
-
253
-/* Tablet and Smaller Desktop */
254
-@media (min-width: 701px) and (max-width: 1120px) {
255
- .grid {
256
- grid-template-columns: repeat(2, 50%);
257
- }
258
-}
259
-
260
-@media (prefers-color-scheme: dark) {
261
- .vercelLogo {
262
- filter: invert(1);
263
- }
264
-
265
- .logo,
266
- .thirteen img {
267
- filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
268
- }
269
-}
270
-
271
-@keyframes rotate {
272
- from {
273
- transform: rotate(360deg);
274
- }
275
- to {
276
- transform: rotate(0deg);
277
- }
278
-}
styles/globals.css
deleted
-107
@@ -1,107 +0,0 @@
1
-:root {
2
- --max-width: 1100px;
3
- --border-radius: 12px;
4
- --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono',
5
- 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro',
6
- 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;
7
-
8
- --foreground-rgb: 0, 0, 0;
9
- --background-start-rgb: 214, 219, 220;
10
- --background-end-rgb: 255, 255, 255;
11
-
12
- --primary-glow: conic-gradient(
13
- from 180deg at 50% 50%,
14
- #16abff33 0deg,
15
- #0885ff33 55deg,
16
- #54d6ff33 120deg,
17
- #0071ff33 160deg,
18
- transparent 360deg
19
- );
20
- --secondary-glow: radial-gradient(
21
- rgba(255, 255, 255, 1),
22
- rgba(255, 255, 255, 0)
23
- );
24
-
25
- --tile-start-rgb: 239, 245, 249;
26
- --tile-end-rgb: 228, 232, 233;
27
- --tile-border: conic-gradient(
28
- #00000080,
29
- #00000040,
30
- #00000030,
31
- #00000020,
32
- #00000010,
33
- #00000010,
34
- #00000080
35
- );
36
-
37
- --callout-rgb: 238, 240, 241;
38
- --callout-border-rgb: 172, 175, 176;
39
- --card-rgb: 180, 185, 188;
40
- --card-border-rgb: 131, 134, 135;
41
-}
42
-
43
-@media (prefers-color-scheme: dark) {
44
- :root {
45
- --foreground-rgb: 255, 255, 255;
46
- --background-start-rgb: 0, 0, 0;
47
- --background-end-rgb: 0, 0, 0;
48
-
49
- --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));
50
- --secondary-glow: linear-gradient(
51
- to bottom right,
52
- rgba(1, 65, 255, 0),
53
- rgba(1, 65, 255, 0),
54
- rgba(1, 65, 255, 0.3)
55
- );
56
-
57
- --tile-start-rgb: 2, 13, 46;
58
- --tile-end-rgb: 2, 5, 19;
59
- --tile-border: conic-gradient(
60
- #ffffff80,
61
- #ffffff40,
62
- #ffffff30,
63
- #ffffff20,
64
- #ffffff10,
65
- #ffffff10,
66
- #ffffff80
67
- );
68
-
69
- --callout-rgb: 20, 20, 20;
70
- --callout-border-rgb: 108, 108, 108;
71
- --card-rgb: 100, 100, 100;
72
- --card-border-rgb: 200, 200, 200;
73
- }
74
-}
75
-
76
-* {
77
- box-sizing: border-box;
78
- padding: 0;
79
- margin: 0;
80
-}
81
-
82
-html,
83
-body {
84
- max-width: 100vw;
85
- overflow-x: hidden;
86
-}
87
-
88
-body {
89
- color: rgb(var(--foreground-rgb));
90
- background: linear-gradient(
91
- to bottom,
92
- transparent,
93
- rgb(var(--background-end-rgb))
94
- )
95
- rgb(var(--background-start-rgb));
96
-}
97
-
98
-a {
99
- color: inherit;
100
- text-decoration: none;
101
-}
102
-
103
-@media (prefers-color-scheme: dark) {
104
- html {
105
- color-scheme: dark;
106
- }
107
-}
tailwind.config.js
new
+88
@@ -0,0 +1,88 @@
1
+import colors from 'tailwindcss/colors';
2
+import { Config } from 'tailwindcss';
3
+
4
+export default {
5
+ content: [
6
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
7
+ ],
8
+ future: {
9
+ hoverOnlyWhenSupported: true,
10
+ },
11
+ darkMode: 'class',
12
+ theme: {
13
+ extend: {
14
+ // https://vercel.com/design/color
15
+ colors: {
16
+ gray: colors.zinc,
17
+ 'gray-1000': 'rgb(17,17,19)',
18
+ 'gray-1100': 'rgb(10,10,11)',
19
+ vercel: {
20
+ pink: '#FF0080',
21
+ blue: '#0070F3',
22
+ cyan: '#50E3C2',
23
+ orange: '#F5A623',
24
+ violet: '#7928CA',
25
+ },
26
+ },
27
+ backgroundImage: ({ theme }) => ({
28
+ 'vc-border-gradient': `radial-gradient(at left top, ${theme(
29
+ 'colors.gray.500',
30
+ )}, 50px, ${theme('colors.gray.800')} 50%)`,
31
+ }),
32
+ keyframes: ({ theme }) => ({
33
+ rerender: {
34
+ '0%': {
35
+ ['border-color']: theme('colors.vercel.pink'),
36
+ },
37
+ '40%': {
38
+ ['border-color']: theme('colors.vercel.pink'),
39
+ },
40
+ },
41
+ highlight: {
42
+ '0%': {
43
+ background: theme('colors.vercel.pink'),
44
+ color: theme('colors.white'),
45
+ },
46
+ '40%': {
47
+ background: theme('colors.vercel.pink'),
48
+ color: theme('colors.white'),
49
+ },
50
+ },
51
+ loading: {
52
+ '0%': {
53
+ opacity: '.2',
54
+ },
55
+ '20%': {
56
+ opacity: '1',
57
+ transform: 'translateX(1px)',
58
+ },
59
+ to: {
60
+ opacity: '.2',
61
+ },
62
+ },
63
+ shimmer: {
64
+ '100%': {
65
+ transform: 'translateX(100%)',
66
+ },
67
+ },
68
+ translateXReset: {
69
+ '100%': {
70
+ transform: 'translateX(0)',
71
+ },
72
+ },
73
+ fadeToTransparent: {
74
+ '0%': {
75
+ opacity: '1',
76
+ },
77
+ '40%': {
78
+ opacity: '1',
79
+ },
80
+ '100%': {
81
+ opacity: '0',
82
+ },
83
+ },
84
+ }),
85
+ },
86
+ },
87
+ plugins: [require('@tailwindcss/typography'), require('@tailwindcss/forms')],
88
+} satisfies Config;
tsconfig.json
+23
-5
@@ -1,7 +1,11 @@
1
{
2
"compilerOptions": {
3
"target": "es5",
4
- "lib": ["dom", "dom.iterable", "esnext"],
4
+ "lib": [
5
+ "dom",
6
+ "dom.iterable",
7
+ "esnext"
8
+ ],
9
"allowJs": true,
10
"skipLibCheck": true,
11
"strict": true,
@@ -16,9 +20,23 @@
20
"incremental": true,
21
"baseUrl": ".",
22
"paths": {
19
- "@/*": ["./*"]
20
- }
23
+ "@/*": [
24
+ "./*"
25
+ ]
26
+ },
27
+ "plugins": [
28
+ {
29
+ "name": "next"
30
+ }
31
+ ]
32
},
22
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
23
- "exclude": ["node_modules"]
33
+ "include": [
34
+ "next-env.d.ts",
35
+ "**/*.ts",
36
+ "**/*.tsx",
37
+ ".next/types/**/*.ts"
38
+ ],
39
+ "exclude": [
40
+ "node_modules"
41
+ ]
42
}