From e41df49bb3b83750bf2c2ac0c3b4e8fe4be0b99c Mon Sep 17 00:00:00 2001 From: Travis Fischer Date: Sat, 14 Jun 2025 09:27:27 +0700 Subject: [PATCH] feat: wip webapp skeleton things --- .gitignore | 3 +- apps/web/package.json | 5 + apps/web/src/components/hero-button/index.tsx | 56 + .../components/hero-button/styles.module.css | 166 +++ .../components/loading-indicator/index.tsx | 56 + .../loading-indicator/loading-dark.json | 1112 +++++++++++++++++ .../loading-indicator/loading-light.json | 1112 +++++++++++++++++ .../loading-indicator/styles.module.css | 22 + apps/web/src/components/ui/tooltip.tsx | 59 + apps/web/src/lib/bootstrap.ts | 27 + apps/web/src/lib/config.ts | 37 + apps/web/src/router.tsx | 4 + apps/web/src/routes/__root.tsx | 17 +- apps/web/vite.config.ts | 5 +- pnpm-lock.yaml | 215 ++++ 15 files changed, 2891 insertions(+), 5 deletions(-) create mode 100644 apps/web/src/components/hero-button/index.tsx create mode 100644 apps/web/src/components/hero-button/styles.module.css create mode 100644 apps/web/src/components/loading-indicator/index.tsx create mode 100644 apps/web/src/components/loading-indicator/loading-dark.json create mode 100644 apps/web/src/components/loading-indicator/loading-light.json create mode 100644 apps/web/src/components/loading-indicator/styles.module.css create mode 100644 apps/web/src/components/ui/tooltip.tsx create mode 100644 apps/web/src/lib/bootstrap.ts create mode 100644 apps/web/src/lib/config.ts diff --git a/.gitignore b/.gitignore index fc96e21d..4b272d39 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,5 @@ apps/api/auth-db-temp.json .wrangler .sentryclirc .eslintcache -.nitro \ No newline at end of file +.nitro +.tanstack diff --git a/apps/web/package.json b/apps/web/package.json index 175fd21d..e4c18f1c 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -26,14 +26,19 @@ "@agentic/platform-validators": "workspace:*", "@radix-ui/react-dropdown-menu": "^2.1.15", "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-tooltip": "^1.2.7", + "@tanstack/react-query-devtools": "^5.80.7", "@tanstack/react-router": "^1.121.2", "@tanstack/react-router-devtools": "^1.121.8", "@tanstack/react-start": "^1.121.10", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "lucide-react": "^0.515.0", + "motion": "^12.18.1", + "posthog-js": "^1.252.0", "react": "catalog:", "react-dom": "catalog:", + "react-lottie-player": "^2.1.0", "stripe": "catalog:", "tailwind-merge": "^3.3.1", "type-fest": "catalog:", diff --git a/apps/web/src/components/hero-button/index.tsx b/apps/web/src/components/hero-button/index.tsx new file mode 100644 index 00000000..0cd70ff7 --- /dev/null +++ b/apps/web/src/components/hero-button/index.tsx @@ -0,0 +1,56 @@ +import type * as React from 'react' +import cs from 'clsx' +import Link from 'next/link' + +import { Button } from '@/components/ui/button' + +import styles from './styles.module.css' + +export type HeroButtonVariant = 'orange' | 'blue' | 'purple' + +export function HeroButton({ + variant = 'purple', + className, + buttonClassName, + children, + ...buttonProps +}: { + variant?: HeroButtonVariant + className?: string + buttonClassName?: string + children: React.ReactNode +} & React.AnchorHTMLAttributes) { + return ( +
+ {variant === 'blue' && ( + + )} + + {variant === 'purple' && ( + + )} + + {variant === 'orange' && ( + + )} + + {buttonProps.href ? ( + +
{children}
+ + ) : ( + + )} +
+ ) +} diff --git a/apps/web/src/components/hero-button/styles.module.css b/apps/web/src/components/hero-button/styles.module.css new file mode 100644 index 00000000..02e8ecfa --- /dev/null +++ b/apps/web/src/components/hero-button/styles.module.css @@ -0,0 +1,166 @@ +.heroButtonWrapper { + position: relative; + z-index: 100; +} + +.heroButtonBg1 { + --start-color: #00dfd8; + --end-color: #007cf0; + /* animation: heroBgAnimation1 8s infinite; */ +} + +.heroButtonBg2 { + --start-color: #ff0080; + --end-color: #7928ca; + /* animation: heroBgAnimation2 8s infinite; */ +} + +.heroButtonBg3 { + --start-color: #ff4d4d; + --end-color: #f9cb28; + /* animation: heroBgAnimation3 8s infinite; */ +} + +.heroButtonBg { + position: absolute; + width: 100%; + height: 100%; + background-image: linear-gradient( + 165deg, + var(--start-color), + var(--end-color) + ); + border-radius: 5px; + z-index: -2; +} + +.heroButtonBg::before { + position: absolute; + content: ''; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: -1; + border: 12px solid transparent; + filter: blur(24px); + /* animation: pulse 2s ease-in-out infinite alternate; */ + background-image: linear-gradient( + 165deg, + var(--start-color), + var(--end-color) + ); +} + +.heroButton { + position: relative; + cursor: pointer; + + background-color: var(--background); + background-clip: padding-box; + border: 1px solid transparent; + box-shadow: 0 4px 4px 0 #00000010; + color: var(--foreground); + transition-property: color, background-color, box-shadow; + transition-duration: 0.15s; + transition-timing-function: ease; + padding: 12px 24px; + line-height: 1.5em; + border-radius: 5px; + max-width: 100%; + font-weight: 400; + font-size: 1rem; + display: flex; + justify-content: center; + align-items: center; + user-select: none; + outline: none; + + --lighten-color: hsla(0, 0%, 100%, 0.8); + background-image: linear-gradient( + to right, + var(--lighten-color), + var(--lighten-color) + ); +} + +:global(.dark) .heroButton { + --lighten-color: rgba(0, 0, 0, 0.75); +} + +.heroButtonContent { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; +} + +.heroButton:hover { + --lighten-color: transparent; + background-color: transparent; + color: var(--background); +} + +.heroButton:focus:not(:active):not(:hover) { + border-color: var(--foreground); +} + +.heroButton:active { + --lighten-color: hsla(0, 0%, 100%, 0.5); +} + +.heroButtonWrapper:has(.heroButton:disabled) { + opacity: 0.3; + cursor: not-allowed; +} + +.heroButtonWrapper:has(.heroButton:disabled) * { + pointer-events: none; +} + +/* @keyframes heroBgAnimation1 { + 0%, + 16.667%, + to { + opacity: 1; + } + 33%, + 83.333% { + opacity: 0; + } +} + +@keyframes heroBgAnimation2 { + 0%, + 16.667%, + 66.667%, + to { + opacity: 0; + } + 33.333%, + 50% { + opacity: 1; + } +} + +@keyframes heroBgAnimation3 { + 0%, + 50%, + to { + opacity: 0; + } + 66.667%, + 83.333% { + opacity: 1; + } +} */ + +/* @keyframes pulse { + from { + filter: blur(8px); + } + + to { + filter: blur(32px); + } +} */ diff --git a/apps/web/src/components/loading-indicator/index.tsx b/apps/web/src/components/loading-indicator/index.tsx new file mode 100644 index 00000000..fd4c1587 --- /dev/null +++ b/apps/web/src/components/loading-indicator/index.tsx @@ -0,0 +1,56 @@ +'use client' + +import cs from 'clsx' +import { AnimatePresence, motion } from 'motion/react' +import dynamic from 'next/dynamic' +import { useTheme } from 'next-themes' + +import loadingDark from './loading-dark.json' +import loadingLight from './loading-light.json' +import styles from './styles.module.css' + +const Lottie = dynamic(() => import('react-lottie-player'), { + ssr: false +}) + +export function LoadingIndicator({ + isLoading = true, + fill = false, + className, + initial, + animate, + exit, + ...rest +}: { + isLoading?: boolean + fill?: boolean + className?: string + initial?: any + animate?: any + exit?: any +}) { + const { resolvedTheme } = useTheme() + + return ( + + {isLoading ? ( + + + + ) : null} + + ) +} diff --git a/apps/web/src/components/loading-indicator/loading-dark.json b/apps/web/src/components/loading-indicator/loading-dark.json new file mode 100644 index 00000000..a80d229b --- /dev/null +++ b/apps/web/src/components/loading-indicator/loading-dark.json @@ -0,0 +1,1112 @@ +{ + "assets": [ + { + "id": "comp_1", + "layers": [ + { + "ddd": 0, + "ind": 0, + "ty": 4, + "nm": "Shape Layer 3", + "ks": { + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 10.4, + "s": [100], + "e": [0] + }, + { "t": 25.6 } + ] + }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": true, + "mode": "a", + "pt": { + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "n": "0p833_0p833_0p167_0p167", + "t": 12, + "s": [ + { + "i": [ + [134.688, 0], + [0, -134.688], + [-134.688, 0], + [0, 134.688] + ], + "o": [ + [-134.688, 0], + [0, 134.688], + [134.688, 0], + [0, -134.688] + ], + "v": [ + [0, -244.875], + [-243.875, -1], + [0, 242.875], + [243.875, -1] + ], + "c": true + } + ], + "e": [ + { + "i": [ + [176.731, 0], + [0, -176.731], + [-176.731, 0], + [0, 176.731] + ], + "o": [ + [-176.731, 0], + [0, 176.731], + [176.731, 0], + [0, -176.731] + ], + "v": [ + [0, -321], + [-320, -1], + [0, 319], + [320, -1] + ], + "c": true + } + ] + }, + { "t": 22.4 } + ] + }, + "o": { "k": 100 }, + "x": { "k": 0 }, + "nm": "Mask 1" + } + ], + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [-24.109, -23.866], + [-58.097, 2.286], + [-4.307, 101.702], + [108.95, -0.605], + [0, 0], + [36.992, -44.122], + [100.991, -5.514], + [22.177, 25.867], + [6.132, 116.1], + [-41.842, 62.08], + [-30.638, 10.829], + [-51.58, -26.549], + [0, 0] + ], + "o": [ + [0, 0], + [24.109, 23.866], + [74.937, -2.949], + [5.422, -128.032], + [-88.536, 0.492], + [0, 0], + [-17.89, 21.338], + [-138.946, 7.586], + [-22.174, -25.864], + [-2.384, -45.141], + [41.572, -61.679], + [77.499, -27.393], + [92.496, 47.608], + [0, 0] + ], + "v": [ + [116, 52], + [197.891, 144.134], + [328.097, 197.714], + [497.578, 23.032], + [311.536, -190.492], + [139.357, -79.71], + [-73.007, 190.878], + [-281.054, 311.414], + [-531.052, 222.093], + [-620.132, 10.9], + [-568.112, -177.098], + [-425.186, -291.697], + [-199.496, -289.608], + [-46, -153] + ], + "c": false + } + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group" + }, + { + "ind": 1, + "ty": "sh", + "ks": { + "k": { + "i": [ + [-44, -50], + [-152, 2], + [-63.813, 80.106], + [89, 81], + [84, 0], + [52, -59], + [38, -40], + [81, 0], + [-1.027, 116.034], + [-81, 0], + [-31, -36], + [0, 0] + ], + "o": [ + [44, 50], + [105.034, -1.382], + [94, -118], + [-79.495, -72.35], + [-84, 0], + [-52, 59], + [-36.789, 38.725], + [-61.033, 0], + [1, -113], + [81, 0], + [31, 36], + [0, 0] + ], + "v": [ + [41, 152], + [302, 310], + [554, 190], + [536, -217], + [307, -309], + [84, -198], + [-176, 130], + [-327, 196], + [-500, -3], + [-330, -192], + [-183, -127], + [-120, -57] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 8.8, + "s": [30], + "e": [0] + }, + { "t": 22.4 } + ], + "ix": 1 + }, + "e": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 8.8, + "s": [30], + "e": [60] + }, + { "t": 22.4 } + ], + "ix": 2 + }, + "o": { "k": -110, "ix": 3 }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 11 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 2", + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [-24.109, -23.866], + [-58.097, 2.286], + [-4.307, 101.702], + [108.95, -0.605], + [0, 0], + [36.992, -44.122], + [100.991, -5.514], + [22.177, 25.867], + [6.132, 116.1], + [-41.842, 62.08], + [-30.638, 10.829], + [-51.58, -26.549], + [0, 0] + ], + "o": [ + [0, 0], + [24.109, 23.866], + [74.937, -2.949], + [5.422, -128.032], + [-88.536, 0.492], + [0, 0], + [-17.89, 21.338], + [-138.946, 7.586], + [-22.174, -25.864], + [-2.384, -45.141], + [41.572, -61.679], + [77.499, -27.393], + [92.496, 47.608], + [0, 0] + ], + "v": [ + [116, 52], + [197.891, 144.134], + [328.097, 197.714], + [497.578, 23.032], + [311.536, -190.492], + [139.357, -79.71], + [-73.007, 190.878], + [-281.054, 311.414], + [-531.052, 222.093], + [-620.132, 10.9], + [-568.112, -177.098], + [-425.186, -291.697], + [-199.496, -289.608], + [-46, -153] + ], + "c": false + } + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group" + }, + { + "ind": 1, + "ty": "sh", + "ks": { + "k": { + "i": [ + [-44, -50], + [-152, 2], + [-63.813, 80.106], + [89, 81], + [84, 0], + [52, -59], + [38, -40], + [81, 0], + [-1.027, 116.034], + [-81, 0], + [-31, -36], + [0, 0] + ], + "o": [ + [44, 50], + [105.034, -1.382], + [94, -118], + [-79.495, -72.35], + [-84, 0], + [-52, 59], + [-36.789, 38.725], + [-61.033, 0], + [1, -113], + [81, 0], + [31, 36], + [0, 0] + ], + "v": [ + [41, 152], + [302, 310], + [554, 190], + [536, -217], + [307, -309], + [84, -198], + [-176, 130], + [-327, 196], + [-500, -3], + [-330, -192], + [-183, -127], + [-120, -57] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 26, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 0, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 40, + "s": [360], + "e": [720] + }, + { "t": 80 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 11 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 1", + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [102, 102, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [41.593, 144.622], + [169.506, 119.927], + [189.109, 279.448], + [324.733, 198.952], + [451.572, 261.435], + [464.308, 109.882], + [591.263, 63.386], + [489.394, -41.116], + [545.422, -183.975], + [401.99, -165.308], + [315.929, -299.146], + [228.713, -166.646], + [75.238, -178.354], + [75.296, -7.911], + [-76.402, 13.881], + [-74.277, 186.236], + [-211.124, 169.355], + [-300.932, 303.028], + [-390.031, 173.297], + [-533.818, 195.069], + [-486.799, 51.51], + [-603.444, -31.631], + [-472.297, -92.031], + [-477.325, -249.524], + [-333.828, -192.011], + [-212.105, -287.275], + [-181.109, -134.238], + [-48.486, -147.583] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 22, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 0, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 40, + "s": [360], + "e": [720] + }, + { "t": 80 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 10 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Shape Layer 5", + "ks": { + "o": { "k": 18 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [-24.109, -23.866], + [-58.097, 2.286], + [-4.307, 101.702], + [108.95, -0.605], + [0, 0], + [36.992, -44.122], + [100.991, -5.514], + [22.177, 25.867], + [6.132, 116.1], + [-41.842, 62.08], + [-30.638, 10.829], + [-51.58, -26.549], + [0, 0] + ], + "o": [ + [0, 0], + [24.109, 23.866], + [74.937, -2.949], + [5.422, -128.032], + [-88.536, 0.492], + [0, 0], + [-17.89, 21.338], + [-138.946, 7.586], + [-22.174, -25.864], + [-2.384, -45.141], + [41.572, -61.679], + [77.499, -27.393], + [92.496, 47.608], + [0, 0] + ], + "v": [ + [116, 52], + [197.891, 144.134], + [328.097, 197.714], + [497.578, 23.032], + [311.536, -190.492], + [139.357, -79.71], + [-73.007, 190.878], + [-281.054, 311.414], + [-531.052, 222.093], + [-620.132, 10.9], + [-568.112, -177.098], + [-425.186, -291.697], + [-199.496, -289.608], + [-46, -153] + ], + "c": false + } + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group" + }, + { + "ind": 1, + "ty": "sh", + "ks": { + "k": { + "i": [ + [-44, -50], + [-152, 2], + [-63.813, 80.106], + [89, 81], + [84, 0], + [52, -59], + [38, -40], + [81, 0], + [-1.027, 116.034], + [-81, 0], + [-31, -36], + [0, 0] + ], + "o": [ + [44, 50], + [105.034, -1.382], + [94, -118], + [-79.495, -72.35], + [-84, 0], + [-52, 59], + [-36.789, 38.725], + [-61.033, 0], + [1, -113], + [81, 0], + [31, 36], + [0, 0] + ], + "v": [ + [41, 152], + [302, 310], + [554, 190], + [536, -217], + [307, -309], + [84, -198], + [-176, 130], + [-327, 196], + [-500, -3], + [-330, -192], + [-183, -127], + [-120, -57] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 26, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": -33.6, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 6.4, + "s": [360], + "e": [720] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 46.4, + "s": [720], + "e": [1080] + }, + { "t": 86.4 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 11 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": -33.6, + "op": 90.4, + "st": -33.6, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Shape Layer 4", + "ks": { + "o": { "k": 18 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [102, 102, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [41.593, 144.622], + [169.506, 119.927], + [189.109, 279.448], + [324.733, 198.952], + [451.572, 261.435], + [464.308, 109.882], + [591.263, 63.386], + [489.394, -41.116], + [545.422, -183.975], + [401.99, -165.308], + [315.929, -299.146], + [228.713, -166.646], + [75.238, -178.354], + [75.296, -7.911], + [-76.402, 13.881], + [-74.277, 186.236], + [-211.124, 169.355], + [-300.932, 303.028], + [-390.031, 173.297], + [-533.818, 195.069], + [-486.799, 51.51], + [-603.444, -31.631], + [-472.297, -92.031], + [-477.325, -249.524], + [-333.828, -192.011], + [-212.105, -287.275], + [-181.109, -134.238], + [-48.486, -147.583] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 22, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": -33.6, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 6.4, + "s": [360], + "e": [720] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 46.4, + "s": [720], + "e": [1080] + }, + { "t": 86.4 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 10 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": -33.6, + "op": 90.4, + "st": -33.6, + "bm": 0, + "sr": 1 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 0, + "ty": 0, + "nm": "logo", + "td": 1, + "refId": "comp_1", + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [80, 80, 0] }, + "a": { "k": [700, 400, 0] }, + "s": { "k": [10.286, 10.286, 100] } + }, + "ao": 0, + "w": 1400, + "h": 800, + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 1, + "ty": 1, + "nm": "Dark Gray Solid 1", + "tt": 3, + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [80, 80, 0] }, + "a": { "k": [700, 400, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "sw": 1400, + "sh": 800, + "sc": "#eeeeee", + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + } + ], + "v": "4.5.3", + "ddd": 0, + "ip": 0, + "op": 40, + "fr": 20, + "w": 160, + "h": 160 +} diff --git a/apps/web/src/components/loading-indicator/loading-light.json b/apps/web/src/components/loading-indicator/loading-light.json new file mode 100644 index 00000000..91a2e473 --- /dev/null +++ b/apps/web/src/components/loading-indicator/loading-light.json @@ -0,0 +1,1112 @@ +{ + "assets": [ + { + "id": "comp_1", + "layers": [ + { + "ddd": 0, + "ind": 0, + "ty": 4, + "nm": "Shape Layer 3", + "ks": { + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 10.4, + "s": [100], + "e": [0] + }, + { "t": 25.6 } + ] + }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": true, + "mode": "a", + "pt": { + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "n": "0p833_0p833_0p167_0p167", + "t": 12, + "s": [ + { + "i": [ + [134.688, 0], + [0, -134.688], + [-134.688, 0], + [0, 134.688] + ], + "o": [ + [-134.688, 0], + [0, 134.688], + [134.688, 0], + [0, -134.688] + ], + "v": [ + [0, -244.875], + [-243.875, -1], + [0, 242.875], + [243.875, -1] + ], + "c": true + } + ], + "e": [ + { + "i": [ + [176.731, 0], + [0, -176.731], + [-176.731, 0], + [0, 176.731] + ], + "o": [ + [-176.731, 0], + [0, 176.731], + [176.731, 0], + [0, -176.731] + ], + "v": [ + [0, -321], + [-320, -1], + [0, 319], + [320, -1] + ], + "c": true + } + ] + }, + { "t": 22.4 } + ] + }, + "o": { "k": 100 }, + "x": { "k": 0 }, + "nm": "Mask 1" + } + ], + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [-24.109, -23.866], + [-58.097, 2.286], + [-4.307, 101.702], + [108.95, -0.605], + [0, 0], + [36.992, -44.122], + [100.991, -5.514], + [22.177, 25.867], + [6.132, 116.1], + [-41.842, 62.08], + [-30.638, 10.829], + [-51.58, -26.549], + [0, 0] + ], + "o": [ + [0, 0], + [24.109, 23.866], + [74.937, -2.949], + [5.422, -128.032], + [-88.536, 0.492], + [0, 0], + [-17.89, 21.338], + [-138.946, 7.586], + [-22.174, -25.864], + [-2.384, -45.141], + [41.572, -61.679], + [77.499, -27.393], + [92.496, 47.608], + [0, 0] + ], + "v": [ + [116, 52], + [197.891, 144.134], + [328.097, 197.714], + [497.578, 23.032], + [311.536, -190.492], + [139.357, -79.71], + [-73.007, 190.878], + [-281.054, 311.414], + [-531.052, 222.093], + [-620.132, 10.9], + [-568.112, -177.098], + [-425.186, -291.697], + [-199.496, -289.608], + [-46, -153] + ], + "c": false + } + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group" + }, + { + "ind": 1, + "ty": "sh", + "ks": { + "k": { + "i": [ + [-44, -50], + [-152, 2], + [-63.813, 80.106], + [89, 81], + [84, 0], + [52, -59], + [38, -40], + [81, 0], + [-1.027, 116.034], + [-81, 0], + [-31, -36], + [0, 0] + ], + "o": [ + [44, 50], + [105.034, -1.382], + [94, -118], + [-79.495, -72.35], + [-84, 0], + [-52, 59], + [-36.789, 38.725], + [-61.033, 0], + [1, -113], + [81, 0], + [31, 36], + [0, 0] + ], + "v": [ + [41, 152], + [302, 310], + [554, 190], + [536, -217], + [307, -309], + [84, -198], + [-176, 130], + [-327, 196], + [-500, -3], + [-330, -192], + [-183, -127], + [-120, -57] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 8.8, + "s": [30], + "e": [0] + }, + { "t": 22.4 } + ], + "ix": 1 + }, + "e": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 8.8, + "s": [30], + "e": [60] + }, + { "t": 22.4 } + ], + "ix": 2 + }, + "o": { "k": -110, "ix": 3 }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 11 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 2", + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [-24.109, -23.866], + [-58.097, 2.286], + [-4.307, 101.702], + [108.95, -0.605], + [0, 0], + [36.992, -44.122], + [100.991, -5.514], + [22.177, 25.867], + [6.132, 116.1], + [-41.842, 62.08], + [-30.638, 10.829], + [-51.58, -26.549], + [0, 0] + ], + "o": [ + [0, 0], + [24.109, 23.866], + [74.937, -2.949], + [5.422, -128.032], + [-88.536, 0.492], + [0, 0], + [-17.89, 21.338], + [-138.946, 7.586], + [-22.174, -25.864], + [-2.384, -45.141], + [41.572, -61.679], + [77.499, -27.393], + [92.496, 47.608], + [0, 0] + ], + "v": [ + [116, 52], + [197.891, 144.134], + [328.097, 197.714], + [497.578, 23.032], + [311.536, -190.492], + [139.357, -79.71], + [-73.007, 190.878], + [-281.054, 311.414], + [-531.052, 222.093], + [-620.132, 10.9], + [-568.112, -177.098], + [-425.186, -291.697], + [-199.496, -289.608], + [-46, -153] + ], + "c": false + } + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group" + }, + { + "ind": 1, + "ty": "sh", + "ks": { + "k": { + "i": [ + [-44, -50], + [-152, 2], + [-63.813, 80.106], + [89, 81], + [84, 0], + [52, -59], + [38, -40], + [81, 0], + [-1.027, 116.034], + [-81, 0], + [-31, -36], + [0, 0] + ], + "o": [ + [44, 50], + [105.034, -1.382], + [94, -118], + [-79.495, -72.35], + [-84, 0], + [-52, 59], + [-36.789, 38.725], + [-61.033, 0], + [1, -113], + [81, 0], + [31, 36], + [0, 0] + ], + "v": [ + [41, 152], + [302, 310], + [554, 190], + [536, -217], + [307, -309], + [84, -198], + [-176, 130], + [-327, 196], + [-500, -3], + [-330, -192], + [-183, -127], + [-120, -57] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 26, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 0, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 40, + "s": [360], + "e": [720] + }, + { "t": 80 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 11 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 1", + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [102, 102, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [41.593, 144.622], + [169.506, 119.927], + [189.109, 279.448], + [324.733, 198.952], + [451.572, 261.435], + [464.308, 109.882], + [591.263, 63.386], + [489.394, -41.116], + [545.422, -183.975], + [401.99, -165.308], + [315.929, -299.146], + [228.713, -166.646], + [75.238, -178.354], + [75.296, -7.911], + [-76.402, 13.881], + [-74.277, 186.236], + [-211.124, 169.355], + [-300.932, 303.028], + [-390.031, 173.297], + [-533.818, 195.069], + [-486.799, 51.51], + [-603.444, -31.631], + [-472.297, -92.031], + [-477.325, -249.524], + [-333.828, -192.011], + [-212.105, -287.275], + [-181.109, -134.238], + [-48.486, -147.583] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 22, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 0, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 40, + "s": [360], + "e": [720] + }, + { "t": 80 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 10 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Shape Layer 5", + "ks": { + "o": { "k": 18 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [-24.109, -23.866], + [-58.097, 2.286], + [-4.307, 101.702], + [108.95, -0.605], + [0, 0], + [36.992, -44.122], + [100.991, -5.514], + [22.177, 25.867], + [6.132, 116.1], + [-41.842, 62.08], + [-30.638, 10.829], + [-51.58, -26.549], + [0, 0] + ], + "o": [ + [0, 0], + [24.109, 23.866], + [74.937, -2.949], + [5.422, -128.032], + [-88.536, 0.492], + [0, 0], + [-17.89, 21.338], + [-138.946, 7.586], + [-22.174, -25.864], + [-2.384, -45.141], + [41.572, -61.679], + [77.499, -27.393], + [92.496, 47.608], + [0, 0] + ], + "v": [ + [116, 52], + [197.891, 144.134], + [328.097, 197.714], + [497.578, 23.032], + [311.536, -190.492], + [139.357, -79.71], + [-73.007, 190.878], + [-281.054, 311.414], + [-531.052, 222.093], + [-620.132, 10.9], + [-568.112, -177.098], + [-425.186, -291.697], + [-199.496, -289.608], + [-46, -153] + ], + "c": false + } + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group" + }, + { + "ind": 1, + "ty": "sh", + "ks": { + "k": { + "i": [ + [-44, -50], + [-152, 2], + [-63.813, 80.106], + [89, 81], + [84, 0], + [52, -59], + [38, -40], + [81, 0], + [-1.027, 116.034], + [-81, 0], + [-31, -36], + [0, 0] + ], + "o": [ + [44, 50], + [105.034, -1.382], + [94, -118], + [-79.495, -72.35], + [-84, 0], + [-52, 59], + [-36.789, 38.725], + [-61.033, 0], + [1, -113], + [81, 0], + [31, 36], + [0, 0] + ], + "v": [ + [41, 152], + [302, 310], + [554, 190], + [536, -217], + [307, -309], + [84, -198], + [-176, 130], + [-327, 196], + [-500, -3], + [-330, -192], + [-183, -127], + [-120, -57] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 26, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": -33.6, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 6.4, + "s": [360], + "e": [720] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 46.4, + "s": [720], + "e": [1080] + }, + { "t": 86.4 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 11 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": -33.6, + "op": 90.4, + "st": -33.6, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Shape Layer 4", + "ks": { + "o": { "k": 18 }, + "r": { "k": 0 }, + "p": { "k": [700, 400, 0] }, + "a": { "k": [0, 0, 0] }, + "s": { "k": [102, 102, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ks": { + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [41.593, 144.622], + [169.506, 119.927], + [189.109, 279.448], + [324.733, 198.952], + [451.572, 261.435], + [464.308, 109.882], + [591.263, 63.386], + [489.394, -41.116], + [545.422, -183.975], + [401.99, -165.308], + [315.929, -299.146], + [228.713, -166.646], + [75.238, -178.354], + [75.296, -7.911], + [-76.402, 13.881], + [-74.277, 186.236], + [-211.124, 169.355], + [-300.932, 303.028], + [-390.031, 173.297], + [-533.818, 195.069], + [-486.799, 51.51], + [-603.444, -31.631], + [-472.297, -92.031], + [-477.325, -249.524], + [-333.828, -192.011], + [-212.105, -287.275], + [-181.109, -134.238], + [-48.486, -147.583] + ], + "c": false + } + }, + "nm": "Path 2", + "mn": "ADBE Vector Shape - Group" + }, + { + "ty": "tm", + "s": { "k": 0, "ix": 1 }, + "e": { "k": 22, "ix": 2 }, + "o": { + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": -33.6, + "s": [0], + "e": [360] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 6.4, + "s": [360], + "e": [720] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "n": ["0p833_0p833_0p167_0p167"], + "t": 46.4, + "s": [720], + "e": [1080] + }, + { "t": 86.4 } + ], + "ix": 3 + }, + "m": 1, + "ix": 3, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim" + }, + { + "ty": "st", + "fillEnabled": true, + "c": { "k": [1, 1, 1, 1] }, + "o": { "k": 100 }, + "w": { "k": 10 }, + "lc": 2, + "lj": 2, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke" + }, + { + "ty": "tr", + "p": { "k": [0, 0], "ix": 2 }, + "a": { "k": [0, 0], "ix": 1 }, + "s": { "k": [100, 100], "ix": 3 }, + "r": { "k": 0, "ix": 6 }, + "o": { "k": 100, "ix": 7 }, + "sk": { "k": 0, "ix": 4 }, + "sa": { "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 4, + "mn": "ADBE Vector Group" + } + ], + "ip": -33.6, + "op": 90.4, + "st": -33.6, + "bm": 0, + "sr": 1 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 0, + "ty": 0, + "nm": "logo", + "td": 1, + "refId": "comp_1", + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [80, 80, 0] }, + "a": { "k": [700, 400, 0] }, + "s": { "k": [10.286, 10.286, 100] } + }, + "ao": 0, + "w": 1400, + "h": 800, + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + }, + { + "ddd": 0, + "ind": 1, + "ty": 1, + "nm": "Dark Gray Solid 1", + "tt": 3, + "ks": { + "o": { "k": 100 }, + "r": { "k": 0 }, + "p": { "k": [80, 80, 0] }, + "a": { "k": [700, 400, 0] }, + "s": { "k": [100, 100, 100] } + }, + "ao": 0, + "sw": 1400, + "sh": 800, + "sc": "#232323", + "ip": 0, + "op": 100, + "st": 0, + "bm": 0, + "sr": 1 + } + ], + "v": "4.5.3", + "ddd": 0, + "ip": 0, + "op": 40, + "fr": 20, + "w": 160, + "h": 160 +} diff --git a/apps/web/src/components/loading-indicator/styles.module.css b/apps/web/src/components/loading-indicator/styles.module.css new file mode 100644 index 00000000..38c30e88 --- /dev/null +++ b/apps/web/src/components/loading-indicator/styles.module.css @@ -0,0 +1,22 @@ +.loading { + position: relative; + pointer-events: none; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.fill { + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.loadingAnimation { + width: 200px; + height: 200px; + max-width: 50vw; + max-height: 50vh; +} diff --git a/apps/web/src/components/ui/tooltip.tsx b/apps/web/src/components/ui/tooltip.tsx new file mode 100644 index 00000000..6e5883e6 --- /dev/null +++ b/apps/web/src/components/ui/tooltip.tsx @@ -0,0 +1,59 @@ +import * as TooltipPrimitive from '@radix-ui/react-tooltip' +import * as React from 'react' + +import { cn } from '@/lib/utils' + +function TooltipProvider({ + delayDuration = 0, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function Tooltip({ + ...props +}: React.ComponentProps) { + return ( + + + + ) +} + +function TooltipTrigger({ + ...props +}: React.ComponentProps) { + return +} + +function TooltipContent({ + className, + sideOffset = 0, + children, + ...props +}: React.ComponentProps) { + return ( + + + {children} + + + + ) +} + +export { Tooltip, TooltipContent, TooltipProvider,TooltipTrigger } diff --git a/apps/web/src/lib/bootstrap.ts b/apps/web/src/lib/bootstrap.ts new file mode 100644 index 00000000..5b6390d8 --- /dev/null +++ b/apps/web/src/lib/bootstrap.ts @@ -0,0 +1,27 @@ +import * as config from './config' + +const detail = ` +- ${config.githubUrl} +- ${config.twitterUrl} +` + +const banner = ` + █████╗ ██████╗ ███████╗███╗ ██╗████████╗██╗ ██████╗ +██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝██║██╔════╝ +███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ██║██║ +██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ██║██║ +██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ██║╚██████╗ +╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ + +${detail} +` + +export function bootstrap() { + if (config.isServer) return + + if (config.isSafari) { + console.log(detail) + } else { + console.log(banner) + } +} diff --git a/apps/web/src/lib/config.ts b/apps/web/src/lib/config.ts new file mode 100644 index 00000000..4c5c34e8 --- /dev/null +++ b/apps/web/src/lib/config.ts @@ -0,0 +1,37 @@ +export const isServer = globalThis.window === undefined +export const isSafari = + !isServer && /^((?!chrome|android).)*safari/i.test(navigator.userAgent) + +export const title = 'Agentic' +export const description = + 'Agentic is an API gateway built exclusively for AI agents.' +export const domain = + import.meta.env.VITE_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL ?? 'agentic.so' + +export const author = 'Travis Fischer' +export const authorTwitterUsername = 'transitive_bs' +export const twitterUrl = `https://x.com/${authorTwitterUsername}` +export const copyright = `© ${new Date().getFullYear()} Agentic. All rights reserved.` +export const githubUrl = 'https://github.com/transitive-bullshit/agentic' + +export const env = + import.meta.env.VITE_PUBLIC_VERCEL_ENV ?? + import.meta.env.NODE_ENV ?? + 'development' +export const isVercel = !!( + import.meta.env.VITE_PUBLIC_VERCEL_ENV || import.meta.env.VERCEL +) +export const isDev = env === 'development' && !isVercel +export const isProd = env === 'production' +export const isTest = env === 'test' + +export const port = import.meta.env.PORT || '3000' +export const prodUrl = `https://${domain}` +export const url = isDev ? `http://localhost:${port}` : prodUrl +export const vercelUrl = + import.meta.env.VERCEL_URL ?? import.meta.env.VITE_PUBLIC_VERCEL_URL +export const apiBaseUrl = isDev || !vercelUrl ? url : `https://${vercelUrl}` + +export const posthogKey = import.meta.env.VITE_PUBLIC_POSTHOG_KEY! +export const posthogHost = + import.meta.env.VITE_PUBLIC_POSTHOG_HOST || 'https://us.i.posthog.com' diff --git a/apps/web/src/router.tsx b/apps/web/src/router.tsx index f27454df..4721f0ee 100644 --- a/apps/web/src/router.tsx +++ b/apps/web/src/router.tsx @@ -1,11 +1,15 @@ import { createRouter as createTanStackRouter } from '@tanstack/react-router' import { NotFound } from './components/not-found' +import { bootstrap } from './lib/bootstrap' import { routeTree } from './routeTree.gen' export function createRouter() { + bootstrap() + const router = createTanStackRouter({ routeTree, + defaultPreload: 'intent', scrollRestoration: true, defaultNotFoundComponent: () => }) diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index 3c1a2184..87733437 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -1,4 +1,5 @@ import type { ReactNode } from 'react' +import { ReactQueryDevtools } from '@tanstack/react-query-devtools' import { createRootRoute, HeadContent, @@ -6,8 +7,10 @@ import { Scripts } from '@tanstack/react-router' import { TanStackRouterDevtools } from '@tanstack/react-router-devtools' +import { PostHogProvider } from 'posthog-js/react' import { ThemeProvider } from '@/components/theme-provider' +import { posthogHost, posthogKey } from '@/lib/config' import globalStyles from '@/styles/global.css?url' export const Route = createRootRoute({ @@ -43,6 +46,11 @@ function RootComponent() { ) } +const posthogOptions = { + api_host: posthogHost, + defaults: '2025-05-24' +} as const + function RootDocument({ children }: Readonly<{ children: ReactNode }>) { return ( @@ -51,11 +59,14 @@ function RootDocument({ children }: Readonly<{ children: ReactNode }>) { - - {children} - + + + {children} + + + diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index beea75bd..087365ee 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -11,5 +11,8 @@ export default defineConfig({ tanstackStart({ target: 'vercel' }) - ] + ], + ssr: { + noExternal: ['posthog-js', 'posthog-js/react'] + } }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b2dc07f1..7ef862c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -533,6 +533,12 @@ importers: '@radix-ui/react-slot': specifier: ^1.2.3 version: 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-tooltip': + specifier: ^1.2.7 + version: 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-query-devtools': + specifier: ^5.80.7 + version: 5.80.7(@tanstack/react-query@5.80.7(react@19.1.0))(react@19.1.0) '@tanstack/react-router': specifier: ^1.121.2 version: 1.121.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -551,12 +557,21 @@ importers: lucide-react: specifier: ^0.515.0 version: 0.515.0(react@19.1.0) + motion: + specifier: ^12.18.1 + version: 12.18.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + posthog-js: + specifier: ^1.252.0 + version: 1.252.0 react: specifier: 'catalog:' version: 19.1.0 react-dom: specifier: 'catalog:' version: 19.1.0(react@19.1.0) + react-lottie-player: + specifier: ^2.1.0 + version: 2.1.0(react@19.1.0) stripe: specifier: 'catalog:' version: 18.2.1(@types/node@22.15.29) @@ -2955,6 +2970,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-tooltip@1.2.7': + resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.1.1': resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} peerDependencies: @@ -3018,6 +3046,19 @@ packages: '@types/react': optional: true + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.1.1': resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} @@ -3660,6 +3701,23 @@ packages: resolution: {integrity: sha512-k07LFI4Qo074IIaWzT/XjD0KlkGx2w1V3fnNtclKx0oAl8z4O9kCh6za+FPEIRe98xLgNFEiddDbJeAYGSlPtw==} engines: {node: '>=12'} + '@tanstack/query-core@5.80.7': + resolution: {integrity: sha512-s09l5zeUKC8q7DCCCIkVSns8zZrK4ZDT6ryEjxNBFi68G4z2EBobBS7rdOY3r6W1WbUDpc1fe5oY+YO/+2UVUg==} + + '@tanstack/query-devtools@5.80.0': + resolution: {integrity: sha512-D6gH4asyjaoXrCOt5vG5Og/YSj0D/TxwNQgtLJIgWbhbWCC/emu2E92EFoVHh4ppVWg1qT2gKHvKyQBEFZhCuA==} + + '@tanstack/react-query-devtools@5.80.7': + resolution: {integrity: sha512-7Dz/19fVo0i+jgLVBabV5vfGOlLyN5L1w8w1/ogFhe6ItNNsNA+ZgNTbtiKpbR3CcX2WDRRTInz1uMSmHzTsoQ==} + peerDependencies: + '@tanstack/react-query': ^5.80.7 + react: ^18 || ^19 + + '@tanstack/react-query@5.80.7': + resolution: {integrity: sha512-u2F0VK6+anItoEvB3+rfvTO9GEh2vb00Je05OwlUe/A0lkJBgW1HckiY3f9YZa+jx6IOe4dHPh10dyp9aY3iRQ==} + peerDependencies: + react: ^18 || ^19 + '@tanstack/react-router-devtools@1.121.8': resolution: {integrity: sha512-QwFG4kWTNV0jSjJDvMs5LfK7X+GPQz9NZhSDStZMkC6xu+s+n+Wk/Szv/FDZ/wqjcJ3/k0rh4C5DEfZvMtSdOg==} engines: {node: '>=12'} @@ -4613,6 +4671,9 @@ packages: core-js-compat@3.41.0: resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} + core-js@3.43.0: + resolution: {integrity: sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -5417,6 +5478,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + fflate@0.4.8: + resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -5499,6 +5563,20 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + framer-motion@12.18.1: + resolution: {integrity: sha512-6o4EDuRPLk4LSZ1kRnnEOurbQ86MklVk+Y1rFBUKiF+d2pCdvMjWVu0ZkyMVCTwl5UyTH2n/zJEJx+jvTYuxow==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} @@ -6325,6 +6403,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lottie-web@5.13.0: + resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==} + loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} @@ -6490,6 +6571,26 @@ packages: module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + motion-dom@12.18.1: + resolution: {integrity: sha512-dR/4EYT23Snd+eUSLrde63Ws3oXQtJNw/krgautvTfwrN/2cHfCZMdu6CeTxVfRRWREW3Fy1f5vobRDiBb/q+w==} + + motion-utils@12.18.1: + resolution: {integrity: sha512-az26YDU4WoDP0ueAkUtABLk2BIxe28d8NH1qWT8jPGhPyf44XTdDUh8pDk9OPphaSrR9McgpcJlgwSOIw/sfkA==} + + motion@12.18.1: + resolution: {integrity: sha512-w1ns2hWQ4COhOvnZf4rg4mW0Pl36mzcShpgt0fSfI6qJxKUbi3kHho/HSKeJFRoY0TO1m5/7C8lG1+Li0uC9Fw==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -7011,6 +7112,20 @@ packages: resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} engines: {node: '>=12'} + posthog-js@1.252.0: + resolution: {integrity: sha512-Mm72gKYYYaQGilxLPPH+KXF8TcveloOvsMemEz0jna0tV0O++n9SJ/dko+U2ePb+FajZ4vqVvfmkHSIILXdgKg==} + peerDependencies: + '@rrweb/types': 2.0.0-alpha.17 + rrweb-snapshot: 2.0.0-alpha.17 + peerDependenciesMeta: + '@rrweb/types': + optional: true + rrweb-snapshot: + optional: true + + preact@10.26.9: + resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} + precinct@12.2.0: resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} engines: {node: '>=18'} @@ -7111,6 +7226,12 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-lottie-player@2.1.0: + resolution: {integrity: sha512-rxSNIVVLWYnwzsIow377vZsh7GDbReu70V7IDD9TbbcdcJWons4pSh3nyuEa4QWIZw0ZBIieoZRTsiqnb6MZ3g==} + engines: {node: '>=10'} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-promise-suspense@0.3.4: resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==} @@ -8275,6 +8396,9 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -10363,6 +10487,26 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)': dependencies: react: 19.1.0 @@ -10411,6 +10555,15 @@ snapshots: optionalDependencies: '@types/react': 19.1.8 + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.8 + '@types/react-dom': 19.1.6(@types/react@19.1.8) + '@radix-ui/rect@1.1.1': {} '@react-email/body@0.0.11(react@19.1.0)': @@ -10961,6 +11114,21 @@ snapshots: '@tanstack/history@1.120.17': {} + '@tanstack/query-core@5.80.7': {} + + '@tanstack/query-devtools@5.80.0': {} + + '@tanstack/react-query-devtools@5.80.7(@tanstack/react-query@5.80.7(react@19.1.0))(react@19.1.0)': + dependencies: + '@tanstack/query-devtools': 5.80.0 + '@tanstack/react-query': 5.80.7(react@19.1.0) + react: 19.1.0 + + '@tanstack/react-query@5.80.7(react@19.1.0)': + dependencies: + '@tanstack/query-core': 5.80.7 + react: 19.1.0 + '@tanstack/react-router-devtools@1.121.8(@tanstack/react-router@1.121.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.121.2)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.7)(tiny-invariant@1.3.3)': dependencies: '@tanstack/react-router': 1.121.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -12249,6 +12417,8 @@ snapshots: dependencies: browserslist: 4.24.4 + core-js@3.43.0: {} + core-util-is@1.0.3: {} cors@2.8.5: @@ -13180,6 +13350,8 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + fflate@0.4.8: {} + fflate@0.8.2: {} figures@6.1.0: @@ -13269,6 +13441,15 @@ snapshots: fraction.js@4.3.7: {} + framer-motion@12.18.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + motion-dom: 12.18.1 + motion-utils: 12.18.1 + tslib: 2.8.1 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + fresh@2.0.0: {} fsevents@2.3.3: @@ -14088,6 +14269,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + lottie-web@5.13.0: {} + loupe@3.1.3: {} lru-cache@10.4.3: {} @@ -14234,6 +14417,20 @@ snapshots: module-details-from-path@1.0.4: {} + motion-dom@12.18.1: + dependencies: + motion-utils: 12.18.1 + + motion-utils@12.18.1: {} + + motion@12.18.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + dependencies: + framer-motion: 12.18.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + tslib: 2.8.1 + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + ms@2.1.3: {} mustache@4.2.0: {} @@ -14850,6 +15047,15 @@ snapshots: postgres@3.4.7: {} + posthog-js@1.252.0: + dependencies: + core-js: 3.43.0 + fflate: 0.4.8 + preact: 10.26.9 + web-vitals: 4.2.4 + + preact@10.26.9: {} + precinct@12.2.0: dependencies: '@dependents/detective-less': 5.0.1 @@ -14976,6 +15182,13 @@ snapshots: react-is@16.13.1: {} + react-lottie-player@2.1.0(react@19.1.0): + dependencies: + fast-deep-equal: 3.1.3 + lottie-web: 5.13.0 + react: 19.1.0 + rfdc: 1.4.1 + react-promise-suspense@0.3.4: dependencies: fast-deep-equal: 2.0.1 @@ -16266,6 +16479,8 @@ snapshots: web-streams-polyfill@3.3.3: {} + web-vitals@4.2.4: {} + webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {}